From dcdd613e7de14a525e4eb7f69b9bfd11912fbede Mon Sep 17 00:00:00 2001 From: cfdaily Date: Thu, 21 May 2026 11:16:23 +0800 Subject: [PATCH] auto-sync: 2026-05-21 11:16:23 --- src/daemon/dispatcher.py | 47 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/daemon/dispatcher.py b/src/daemon/dispatcher.py index 9ca3b0d..ceaa50b 100644 --- a/src/daemon/dispatcher.py +++ b/src/daemon/dispatcher.py @@ -237,8 +237,17 @@ class Dispatcher: } def _build_spawn_message(self, task: Task, agent_id: str, - project_config: Optional[Dict]) -> str: - """构建 Agent spawn 消息""" + project_config: Optional[Dict], + mode: str = "") -> str: + """构建 Agent spawn 消息 + + Args: + mode: 路由模式("delegate" 时生成协调员 prompt) + """ + # delegate 模式:生成协调员分配 prompt + if mode == "delegate": + return self._build_delegate_prompt(task, project_config) + if hasattr(self.spawner, 'build_spawn_message') and project_config: retry_ctx = self._build_retry_context(task) return self.spawner.build_spawn_message( @@ -261,6 +270,40 @@ class Dispatcher: parts.append(f"Must-haves: {task.must_haves}") return "\n".join(parts) + def _build_delegate_prompt(self, task: Task, + project_config: Optional[Dict]) -> str: + """构建 delegate 模式的 prompt(协调员分配任务)""" + api_host = getattr(self.spawner, 'api_host', '127.0.0.1') if self.spawner else '127.0.0.1' + api_port = getattr(self.spawner, 'api_port', 8083) if self.spawner else 8083 + project_id = project_config.get("project_id", "") if project_config else "" + + return f"""你是任务协调员。请分析以下任务,决定最合适的执行者并分配。 + +## 任务信息 +- 项目: {project_id} +- 任务ID: {task.id} +- 标题: {task.title} +- 描述: {task.description or '(无描述)'} +- 类型: {getattr(task, 'task_type', '') or 'general'} +- 优先级: {task.priority} + +## 团队 +- 张飞(zhangfei-dev): 编码、实现、脚本 +- 司马懿(simayi-challenger): 审查、质量检查、辩论 +- 关羽(guanyu-dev): 风控、合规 +- 赵云(zhaoyun-data): 数据获取、清洗、验证 +- 姜维(jiangwei-infra): 部署、基础设施、Docker、vnpy +- 庞统(pangtong-fujunshi): 规划、协调、策略 + +## 操作 +1. 分析任务需求,选择最合适的 Agent +2. 通过 API 回写分配结果: + curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task.id}/status \\ + -H 'Content-Type: application/json' \\ + -d '{{"status": "claimed", "agent": ""}}' +3. 如果你自己能做,直接认领并执行(状态改为 working) +""" + def _build_retry_context(self, task: Task) -> str: """构建重试上下文""" if not hasattr(task, 'retry_count') or (task.retry_count or 0) == 0: