From 9ea5849f22a8f7322d9952c0c1ae04fbf4315e6b Mon Sep 17 00:00:00 2001 From: oudecheng <13802883547@139.com> Date: Thu, 18 Jun 2026 17:09:42 +0800 Subject: [PATCH] =?UTF-8?q?refactor(task):=20=E5=AD=90=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E4=BD=93=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E5=8F=8A=E5=AF=BC=E8=88=AA=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 runtime 中的 sub_session_id 字段重命名为 task_id,作为持久化的 scope_key - 调整持久化 todo_write 结果使用 task_id 代替 session_id 作为 scope_key - 重命名前端消息中的 subagentTaskId 为 navigateToTaskId,增强导航表达 - 修改 MessageBubble 组件中子智能体任务导航相关的字段名和条件判断 - 优化 useChat 中 task tool_call 消息的 navigateToTaskId 设置逻辑,确保正确导航孙智能体任务 - 移除无用的 getTopicId 辅助方法,简化消息处理逻辑 - 在协议类型定义中新增 navigateToTaskId 字段,明确导航用途与关系 --- src/tools/task/runtime.rs | 9 ++--- web/src/components/Chat/MessageBubble.tsx | 10 +++--- web/src/hooks/useChat.ts | 42 ++++------------------- web/src/types/protocol.ts | 3 ++ 4 files changed, 20 insertions(+), 44 deletions(-) diff --git a/src/tools/task/runtime.rs b/src/tools/task/runtime.rs index 70f118d..eeab6bc 100644 --- a/src/tools/task/runtime.rs +++ b/src/tools/task/runtime.rs @@ -110,7 +110,8 @@ struct SubAgentEmitter { chat_id: String, metadata: HashMap, store: Arc, - sub_session_id: String, + /// 子/孙智能体自身的 task_id,用于持久化时作为 scope_key + task_id: String, stream_message_id: std::sync::Mutex>, } @@ -159,7 +160,7 @@ impl EmittedMessageHandler for SubAgentEmitter { } } - // 拦截 todo_write 结果:持久化到 SQLite(子代理用 session_id 作为 scope_key) + // 拦截 todo_write 结果:持久化到 SQLite(子代理用 task_id 作为 scope_key,与 list_todos 保持一致) if message.tool_name.as_deref() == Some("todo_write") { self.persist_todo_write_result(&message); } @@ -212,7 +213,7 @@ impl SubAgentEmitter { return; }; - let scope_key = &self.sub_session_id; + let scope_key = &self.task_id; let now = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) @@ -366,7 +367,7 @@ impl DefaultSubAgentRuntime { chat_id: session.parent_chat_id.clone(), metadata, store: self.store.clone(), - sub_session_id: session.session_id.clone(), + task_id: session.id.clone(), stream_message_id: std::sync::Mutex::new(None), }, self.conversation_repository.clone(), diff --git a/web/src/components/Chat/MessageBubble.tsx b/web/src/components/Chat/MessageBubble.tsx index 9fe6555..2126747 100644 --- a/web/src/components/Chat/MessageBubble.tsx +++ b/web/src/components/Chat/MessageBubble.tsx @@ -480,12 +480,12 @@ export function MessageBubble({ message, onNavigateToSubAgent, showThinking = tr )} - {isTaskTool && message.subagentTaskId && !taskResult && ( + {isTaskTool && message.navigateToTaskId && !taskResult && (
)} - {isTaskTool && !taskResult && !message.subagentTaskId && ( + {isTaskTool && !taskResult && !message.navigateToTaskId && (
子智能体正在执行...
@@ -571,11 +571,11 @@ export function MessageBubble({ message, onNavigateToSubAgent, showThinking = tr )} - {isTaskTool && message.subagentTaskId && ( + {isTaskTool && message.navigateToTaskId && (