feat: expose agent collaboration metadata

This commit is contained in:
2026-06-14 15:35:24 +08:00
parent 3f75c966c2
commit 7b7c82309c
6 changed files with 546 additions and 107 deletions
@@ -170,6 +170,48 @@ export function useEventHandler(config: EventHandlerConfig) {
return 0;
};
const buildReasoningMeta = (event: StreamEvent): Partial<ReasoningStep> => {
const collaboration = event.collaboration || {};
return {
branch_id: event.branch_id,
branch_label: event.branch_label,
agent_code: collaboration.agent_code || event.agent_code,
agent_name: collaboration.agent_name || event.agent_name,
model: collaboration.model || event.model,
model_id: collaboration.model_id || event.model_id,
subflow_name:
event.subflow_name || collaboration.subflow_name || event.event?.subflow_name,
from_subflow: Boolean(
event.from_subflow || collaboration.from_subflow || event.event?.from_subflow,
),
collaboration_role:
collaboration.collaboration_role || collaboration.role || event.collaboration_role,
collaboration_mode: event.collaboration_mode || collaboration.collaboration_mode,
};
};
const buildMessageMeta = (event: StreamEvent): Partial<ChatMessage> => {
const collaboration = event.collaboration || {};
const modelName =
event.model ||
event.model_name ||
collaboration.model ||
collaboration.model_id;
return {
...(modelName ? { model_name: modelName } : {}),
...(collaboration.model_id ? { model_id: collaboration.model_id } : {}),
...(collaboration.agent_code
? { agent_code: collaboration.agent_code }
: {}),
...(collaboration.agent_name
? { agent_name: collaboration.agent_name }
: {}),
...(collaboration.collaboration_mode
? { collaboration_mode: collaboration.collaboration_mode }
: {}),
};
};
/** 处理流式事件 */
const handleStreamEvent = (event: StreamEvent, msgId: string) => {
switch (event.type) {
@@ -194,6 +236,7 @@ export function useEventHandler(config: EventHandlerConfig) {
updateAssistantMessage(msgId, {
status: 'completed',
content: event.content || '',
...buildMessageMeta(event),
});
} else {
const answerMsg: ChatMessage = {
@@ -202,6 +245,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: event.content || '',
timestamp: new Date(),
status: 'completed',
...buildMessageMeta(event),
};
messages.value.push(answerMsg);
}
@@ -228,6 +272,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: endOutput,
elapsed_time: event.elapsed_time,
tokens_used: event.tokens_used || event.total_tokens,
...buildMessageMeta(event),
});
} else {
const endMsg: ChatMessage = {
@@ -238,6 +283,7 @@ export function useEventHandler(config: EventHandlerConfig) {
status: 'completed',
elapsed_time: event.elapsed_time,
tokens_used: event.tokens_used || event.total_tokens,
...buildMessageMeta(event),
};
messages.value.push(endMsg);
}
@@ -259,6 +305,7 @@ export function useEventHandler(config: EventHandlerConfig) {
elapsed_time: event.elapsed_time,
tokens_used: event.tokens_used || event.total_tokens,
content: '工作流执行完成',
...buildMessageMeta(event),
});
}
} else if (initialMsg) {
@@ -267,6 +314,7 @@ export function useEventHandler(config: EventHandlerConfig) {
status: 'completed',
elapsed_time: event.elapsed_time,
tokens_used: event.tokens_used || event.total_tokens,
...buildMessageMeta(event),
});
}
@@ -283,6 +331,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: event.message || event.content || '执行失败',
node_id: event.node_id,
node_type: event.node_type,
...buildReasoningMeta(event),
status: 'completed',
timestamp: new Date().toISOString(),
});
@@ -302,6 +351,7 @@ export function useEventHandler(config: EventHandlerConfig) {
updateAssistantMessage(msgId, {
content: event.accumulated_content || event.content || '',
status: 'streaming',
...buildMessageMeta(event),
});
} else {
// 如果消息不存在,创建新消息
@@ -311,6 +361,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: event.accumulated_content || event.content || '',
timestamp: new Date(),
status: 'streaming',
...buildMessageMeta(event),
};
messages.value.push(streamMsg);
}
@@ -342,6 +393,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: '循环执行完成',
node_id: loopEvent.node_id,
node_type: 'loop',
...buildReasoningMeta(event),
output: outputs,
status: 'completed',
timestamp: new Date().toISOString(),
@@ -369,6 +421,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: `循环第 ${event.iteration || '-'} 次完成`,
node_id: event.node_id,
node_type: 'loop',
...buildReasoningMeta(event),
output: event.output,
status: 'completed',
timestamp: new Date().toISOString(),
@@ -395,6 +448,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: `循环第 ${event.iteration || '-'} 次失败:${event.error || '执行失败'}`,
node_id: event.node_id,
node_type: 'loop',
...buildReasoningMeta(event),
status: 'completed',
timestamp: new Date().toISOString(),
});
@@ -420,6 +474,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: `循环第 ${event.iteration || '-'} 次开始`,
node_id: event.node_id,
node_type: 'loop',
...buildReasoningMeta(event),
params: { item: event.item, total: event.total },
status: 'running',
timestamp: new Date().toISOString(),
@@ -455,6 +510,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: completeLabel,
node_id: event.node_id,
node_type: event.node_type,
...buildReasoningMeta(event),
output: event.outputs,
status: 'completed',
timestamp: new Date().toISOString(),
@@ -464,6 +520,7 @@ export function useEventHandler(config: EventHandlerConfig) {
...currentSteps.value[existingIndex]!,
type: 'node_complete',
content: completeLabel,
...buildReasoningMeta(event),
output: event.outputs,
status: 'completed',
};
@@ -501,6 +558,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content,
node_id: event.node_id,
node_type: 'parallel',
...buildReasoningMeta(event),
output: {
branch_results: branchResults,
total_tokens: event.total_tokens,
@@ -513,6 +571,7 @@ export function useEventHandler(config: EventHandlerConfig) {
...currentSteps.value[existingIndex]!,
type: 'parallel_complete',
content,
...buildReasoningMeta(event),
output: {
branch_results: branchResults,
total_tokens: event.total_tokens,
@@ -533,7 +592,8 @@ export function useEventHandler(config: EventHandlerConfig) {
content: `并行分支开始:${getItemCount(branches)} 个分支`,
node_id: event.node_id,
node_type: 'parallel',
params: { branches },
...buildReasoningMeta(event),
params: { branches, branch_labels: event.branch_labels },
status: 'running',
timestamp: new Date().toISOString(),
});
@@ -551,6 +611,7 @@ export function useEventHandler(config: EventHandlerConfig) {
updateAssistantMessage(msgId, {
status: 'completed',
content: nodeEvent.content || '',
...buildMessageMeta(event),
});
} else {
const newMsg: ChatMessage = {
@@ -559,6 +620,7 @@ export function useEventHandler(config: EventHandlerConfig) {
content: nodeEvent.content || '',
timestamp: new Date(),
status: 'completed',
...buildMessageMeta(event),
};
messages.value.push(newMsg);
}
@@ -581,6 +643,7 @@ export function useEventHandler(config: EventHandlerConfig) {
),
node_id: event.node_id,
node_type: event.node_type,
...buildReasoningMeta(event),
status: 'running',
timestamp: new Date().toISOString(),
});
@@ -622,6 +685,7 @@ export function useEventHandler(config: EventHandlerConfig) {
'等待用户输入',
node_id: event.node_id,
node_type: event.node_type,
...buildReasoningMeta(event),
params: configData,
status: 'running',
timestamp: new Date().toISOString(),