From 32723716f24a2bf9d2684fce4c3a3e2bb14438cf Mon Sep 17 00:00:00 2001 From: cfdaily Date: Fri, 29 May 2026 19:48:52 +0800 Subject: [PATCH] auto-sync: 2026-05-29 19:48:52 --- docs/design/02-main-session-delegation.md | 65 ++++++++++------------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/docs/design/02-main-session-delegation.md b/docs/design/02-main-session-delegation.md index 7e2de67..a341645 100644 --- a/docs/design/02-main-session-delegation.md +++ b/docs/design/02-main-session-delegation.md @@ -218,47 +218,50 @@ Agent 收到消息后的自主行为(不是硬编码步骤): ### 5.1 Spawner 新增方法 +复用 Mail 的 `use_main_session=True` 模式,将三条路径统一: + ```python async def deliver_to_main(self, agent_id: str, message: str, task_id: str = None, on_complete: Callable = None) -> str: - """投递到 Agent main session(不创建新 session) + """投递到 Agent main session - 用 openclaw agent --agent --message "..." 投递, + 复用 spawn_full_agent(use_main_session=True),不传 --session-id。 Gateway 自动路由到 main session。 """ - cmd = [ - "openclaw", "agent", - "--agent", agent_id, - "--message", message, - "--json", - "--timeout", str(int(self.gateway_timeout)), - ] - # ... 执行 + 监控,和 spawn_full_agent 类似但不传 --session-id + return await self.spawn_full_agent( + agent_id=agent_id, + message=message, + use_main_session=True, # 关键:走 main session + task_id=task_id, + on_complete=on_complete, + ) ``` +**不需要新建方法**,只需调用 `spawn_full_agent(use_main_session=True)`。Mail 路径已验证此模式。 + ### 5.2 Ticker 改动 | 方法 | 改动 | |------|------| -| `_broadcast_and_dispatch` | 调用 `deliver_to_main` 替代 `spawn_full_agent` | -| `_process_mentions` | 调用 `deliver_to_main` 替代 `spawn_full_agent` | -| `_spawn_pangtong_review` | 调用 `deliver_to_main` 替代 `spawn_full_agent` | +| `_broadcast_and_dispatch` | `spawn_full_agent(..., use_main_session=True)` | +| `_process_mentions` | `spawn_full_agent(..., use_main_session=True)` | +| `_spawn_pangtong_review` | `spawn_full_agent(..., use_main_session=True)` | | `_check_round_complete` | 保留 `reviewing` 中间态逻辑 | -| `_handle_review_conclusion` | 保留,但改为从 main session 的回复中解析 | +| `_handle_review_conclusion` | 改为从黑板检查状态变化(复用 Mail 的 `_task_auto_complete` 模式) | ### 5.3 Dispatcher 改动 -确定性路由也改用 `deliver_to_main`: -- 移除 `use_main_session` 参数(全部走 main session) -- 移除 `new_session` 参数 -- counter 逻辑简化(per main session 粒度) +- 所有路由统一走 `use_main_session=True` +- 移除 `new_session` 参数(不再需要) +- 新增 `_task_auto_complete`(复用 Mail 的 `_mail_auto_complete` 模式,检查 outputs + status) +- counter 逻辑不变(main session 粒度,per key = `agent:main`) ### 5.4 废弃代码 -- `spawn_full_agent` 的 `new_session` / `use_main_session` 参数标注废弃 +- `spawn_full_agent` 的 `new_session` 参数标注废弃(所有调用改为 `use_main_session=True`) - `gateway-fallback-*` session 的产生路径消失 -- 续杯逻辑简化(`reuse_session_id` 不再需要) +- 续杯简化:main session 的续杯由 Gateway 排队 + ticker 超时兜底处理 --- @@ -384,28 +387,18 @@ def _task_auto_complete(self, task_id, agent_id, db_path): ## 九、实施计划 -### Phase 1:spawner 新增 `deliver_to_main` +### Phase 1:统一投递到 main session -- 新增方法,不改动现有 `spawn_full_agent` +- 所有 `spawn_full_agent` 调用改为 `use_main_session=True` +- 新增 `_task_auto_complete`(复用 Mail 模式) - 单元测试覆盖 -### Phase 2:Ticker 三条路径切换 +### Phase 2:E2E 测试适配 + 验证 -- `_broadcast_and_dispatch` → `deliver_to_main` -- `_process_mentions` → `deliver_to_main` -- `_spawn_pangtong_review` → `deliver_to_main` - -### Phase 3:Daemon 结果收集改造 - -- 移除 `--json` 同步等结果 -- 改为 ticker 轮询黑板状态变化 -- on_complete 改为基于黑板事件触发 - -### Phase 4:E2E 测试适配 + 验证 - -- 适配新的投递机制 +- 适配新的投递机制(不再依赖 `--session-id UUID`) - 验证 session 不爆炸 - 验证 Agent 自主决策行为 +- 重跑 01-four-phase-loop 的 E2E 测试 ---