Spaces:
Running
Running
File size: 3,978 Bytes
90f0300 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | export function textFromContent(content) {
if (typeof content === 'string') {
return content;
}
if (!Array.isArray(content)) {
return '';
}
return content
.map((part) => {
if (typeof part === 'string') {
return part;
}
if (part?.type === 'output_text' || part?.type === 'input_text' || part?.type === 'text') {
return part.text || '';
}
return part?.text || '';
})
.filter(Boolean)
.join('\n');
}
export function contentFromItem(item) {
if (!item) {
return '';
}
const contentText = textFromContent(item.content);
if (contentText) {
return contentText;
}
if (typeof item.text === 'string') {
return item.text;
}
if (typeof item.aggregated_output === 'string') {
return item.aggregated_output;
}
if (typeof item.message === 'string') {
return item.message;
}
return '';
}
export function statusLabel(kind, status = 'running') {
const done = status === 'completed';
const failed = status === 'failed';
const labels = {
turn: done ? '任务已完成' : failed ? '任务失败' : '正在处理',
reasoning: done ? '思考完成' : '正在思考',
agent_message: '正在回复',
message: '正在回复',
command_execution: done ? '命令已完成' : failed ? '命令失败' : '正在执行命令',
file_change: done ? '文件已修改' : failed ? '文件修改失败' : '正在修改文件',
mcp_tool_call: done ? '工具调用完成' : failed ? '工具调用失败' : '正在调用工具',
web_search: done ? '搜索完成' : failed ? '搜索失败' : '正在搜索',
todo_list: done ? '计划已更新' : '正在规划',
image_generation_call: done ? '图片生成完成' : failed ? '图片生成失败' : '正在生成图片',
custom_tool_call: done ? '工具调用完成' : failed ? '工具调用失败' : '正在调用工具',
function_call: done ? '工具调用完成' : failed ? '工具调用失败' : '正在调用工具',
error: '出现错误'
};
return labels[kind] || (done ? '已完成' : failed ? '失败' : '正在处理');
}
export function compactStatusLabel(content, fallback = '正在处理') {
const label = String(content || '')
.replace(/\s+/g, ' ')
.trim();
if (!label) {
return fallback;
}
return label.length > 68 ? `${label.slice(0, 68)}...` : label;
}
export function detailFromItem(item) {
if (!item) {
return '';
}
if (item.command) {
return item.command;
}
if (item.query) {
return item.query;
}
if (item.tool || item.server) {
return [item.server, item.tool].filter(Boolean).join(' / ');
}
if (Array.isArray(item.changes)) {
return item.changes.map((change) => `${change.kind || 'update'} ${change.path}`).join('\n');
}
if (item.message) {
return item.message;
}
return contentFromItem(item);
}
export function eventItem(event) {
if (event.item) {
return event.item;
}
if (event.payload && (event.type === 'response_item' || event.type === 'event_msg')) {
return event.payload;
}
return null;
}
export function eventStatus(event, item) {
if (item?.status) {
return item.status === 'in_progress' ? 'running' : item.status;
}
if (event.type === 'item.completed') {
return 'completed';
}
if (event.type === 'item.started' || event.type === 'item.updated') {
return 'running';
}
if (event.type === 'event_msg' && item?.type?.endsWith('_end')) {
return item.exit_code || item.exit_code === 0 ? (item.exit_code === 0 ? 'completed' : 'failed') : 'completed';
}
if (event.type === 'response_item') {
return 'completed';
}
return 'running';
}
export function emitStatus(emit, { sessionId, turnId, kind, status = 'running', label, detail = '' }) {
emit({
type: 'status-update',
sessionId,
turnId,
kind,
status,
label: label || statusLabel(kind, status),
detail,
timestamp: new Date().toISOString()
});
}
|