From 2a43f18382649ddf8572583e5b490d83a2f1cca0 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Sun, 24 May 2026 10:56:59 +0800 Subject: [PATCH] auto-sync: 2026-05-24 10:56:59 --- src/daemon/spawner.py | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/daemon/spawner.py b/src/daemon/spawner.py index c4ee501..9fba9a3 100644 --- a/src/daemon/spawner.py +++ b/src/daemon/spawner.py @@ -21,6 +21,39 @@ logger = logging.getLogger("moziplus-v2.spawner") # ── Prompt 模板 ── +# Mail 专用模板:inform 类型(纯通知,读完确认即可) +MAIL_INFORM_TEMPLATE = """你收到一封飞鸽传书(纯通知,不需要回复)。 + +发件者: {from_agent} +主题: {title} +内容: {text} + +读完确认即可,不需要回复。 + +操作: +curl -X POST http://{api_host}:{api_port}/api/projects/_mail/tasks/{task_id}/status \\\n -H 'Content-Type: application/json' \\\n -d '{{"status": "done", "agent": "{agent_id}"}}' +""" + +# Mail 专用模板:request 类型(需要处理并回复) +MAIL_REQUEST_TEMPLATE = """你收到一封飞鸽传书,需要你处理并回复。 + +发件者: {from_agent} +主题: {title} +内容: {text} + +请阅读内容,根据需要处理后回复发件者。 + +操作: +1. 开始处理: +curl -X POST http://{api_host}:{api_port}/api/projects/_mail/tasks/{task_id}/status \\\n -H 'Content-Type: application/json' \\\n -d '{{"status": "working", "agent": "{agent_id}"}}' + +2. 回复发件者(⚠️ 回复邮件 type 用 inform,避免循环): +curl -X POST http://localhost:8083/api/mail \\\n -H 'Content-Type: application/json' \\\n -d '{{"from": "{agent_id}", "to": "{from_agent}", "title": "回复: {title}", "text": "你的回复内容", "type": "inform", "in_reply_to": "{task_id}"}}' + +3. 标记完成: +curl -X POST http://{api_host}:{api_port}/api/projects/_mail/tasks/{task_id}/status \\\n -H 'Content-Type: application/json' \\\n -d '{{"status": "done", "agent": "{agent_id}"}}' +""" + SPAWN_PROMPT_TEMPLATE = """你收到一个 v2.6 黑板任务。请严格按照下面的步骤执行。 ## 任务信息 @@ -189,13 +222,19 @@ class AgentSpawner: role="executor", project_config=project_config, ) - # 在 bootstrap 后追加操作指令(状态机 + API 回写) + # mail 任务用精简模板,不走 BootstrapBuilder + if project_id == "_mail": + return self._build_mail_prompt(task_id, title, description, must_haves, agent_id) api_section = self._build_api_section( project_id, task_id, agent_id) return bootstrap_prompt + "\n\n---\n\n" + api_section except Exception: logger.exception("BootstrapBuilder failed, falling back to template") + # mail 任务用精简模板 + if project_id == "_mail": + return self._build_mail_prompt(task_id, title, description, must_haves, agent_id) + # Fallback: 使用硬编码模板 # mail 任务直接 done,不走 review completion_status = "done" if project_id == "_mail" else "review"