From 175e7fc01b2baa613da4113ea852ac1cef871651 Mon Sep 17 00:00:00 2001 From: oudecheng <13802883547@139.com> Date: Thu, 18 Jun 2026 14:27:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(subagent):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=B8=A6=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=AD=90=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E4=BD=93=E6=A0=87=E9=A2=98=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将子智能体标题解析升级为支持 "Subagent [type]: description" 格式 - 兼容旧格式 "Subagent: description",默认类型为 "general" - 修改子智能体会话标题生成,包含类型信息 - 优化记录解析和会话创建逻辑,提高子智能体信息表达准确性 --- src/command/handlers/load_task_messages.rs | 25 ++++++++++++++++------ src/tools/task/runtime.rs | 4 ++-- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/command/handlers/load_task_messages.rs b/src/command/handlers/load_task_messages.rs index 9cb0470..7115b0d 100644 --- a/src/command/handlers/load_task_messages.rs +++ b/src/command/handlers/load_task_messages.rs @@ -144,12 +144,8 @@ fn reconstruct_task_from_db( }) .unwrap_or_default(); - // Extract description from title: "Subagent: {description}" - let description = record - .title - .strip_prefix("Subagent: ") - .unwrap_or(&record.title) - .to_string(); + // Extract subagent_type and description from title + let (subagent_type, description) = parse_subagent_title(&record.title); let now = record.updated_at; @@ -161,7 +157,7 @@ fn reconstruct_task_from_db( parent_chat_id: record.chat_id.clone(), parent_channel_name: record.channel_name.clone(), description, - subagent_type: "general".to_string(), + subagent_type, state: TaskSessionState::Completed, created_at: record.created_at, updated_at: now, @@ -169,3 +165,18 @@ fn reconstruct_task_from_db( error: None, })) } + +/// Parse subagent title to extract type and description. +/// New format: "Subagent [type]: description" +/// Legacy format: "Subagent: description" (defaults to "general") +fn parse_subagent_title(title: &str) -> (String, String) { + if let Some(rest) = title.strip_prefix("Subagent [") { + if let Some(bracket_pos) = rest.find("]: ") { + let agent_type = rest[..bracket_pos].to_string(); + let desc = rest[bracket_pos + 3..].to_string(); + return (agent_type, desc); + } + } + let desc = title.strip_prefix("Subagent: ").unwrap_or(title).to_string(); + ("general".to_string(), desc) +} diff --git a/src/tools/task/runtime.rs b/src/tools/task/runtime.rs index f1085b6..70f118d 100644 --- a/src/tools/task/runtime.rs +++ b/src/tools/task/runtime.rs @@ -509,7 +509,7 @@ impl SubAgentRuntime for DefaultSubAgentRuntime { ); // 4. 在 sessions 表中创建子智能体会话(确保外键约束满足) - let session_title = format!("Subagent: {}", task.description); + let session_title = format!("Subagent [{}]: {}", session.subagent_type, task.description); if let Err(e) = self.conversation_repository.ensure_session( &session.session_id, &session.parent_channel_name, @@ -638,7 +638,7 @@ impl SubAgentRuntime for DefaultSubAgentRuntime { } // 3. 确保 sessions 表中存在子智能体会话记录 - let session_title = format!("Subagent: {}", session.description); + let session_title = format!("Subagent [{}]: {}", session.subagent_type, session.description); if let Err(e) = self.conversation_repository.ensure_session( &session.session_id, &session.parent_channel_name,