From 724cebb653659e1353c1c4da78470dd05f320e97 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Sat, 13 Jun 2026 16:46:50 +0800 Subject: [PATCH] =?UTF-8?q?merge:=20=E5=90=88=E5=B9=B6=E5=86=B2=E7=AA=81?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=20=E2=80=94=E2=80=94=20worker=20=E6=B1=A0?= =?UTF-8?q?=E5=8C=96=E8=AF=84=E4=BC=B0=20+=20SDK=20resume=20=E6=8A=97?= =?UTF-8?q?=E6=8A=96=E5=8A=A8=20[tsk=5Fxbtd6GpS4NYg]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 maestro/tsk_74Acz1Nh4K1J 分支的 DESIGN.md 改动手动合并: 1. §19 分期状态:新增「🟡 worker 池化(已评估,暂缓)」说明 2. §20 风险与注意事项:新增「SDK 抖动 → resume 续跑」条目 保留了 HEAD 中已有的更详细版本的「自动执行安全」和「中断恢复(多进程 re-adopt)」条目。 Co-Authored-By: Claude Sonnet 4.6 --- DESIGN.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DESIGN.md b/DESIGN.md index 383c9ac..5dd5172 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -239,9 +239,11 @@ daemon 启动时订阅 Store 事件流,符合条件时用 `osascript display n - ✅ **Phase 2(自动化,已完成)**:编排器 + score 调度 + Agent SDK executor(Easy/Medium/Hard worktree 自动执行)+ verify + 双复审(code review + 安全审计)+ 自动合并(--no-ff + 逃生口)。 - ✅ **Phase 3(打磨,核心已完成)**:多进程执行解耦(daemon 监工 + 独立 worker 进程 + job.json/outbox/heartbeat 文件通讯 + 重启 re-adopt,见 §7)+ macOS 原生通知 + Claude 订阅额度透传 + 归档详情时间线 + 模型分级(复杂度→模型映射 + env 覆盖 + 回退链)+ 项目 logo + 侧栏拖动排序。 - 🔲 **后续**:并发资源精细监控 / 指标面板 / 可选远程看板 / PR 平台集成(GitHub PR 链接)。 +- 🟡 **worker 池化(已评估,暂缓)**:长驻 worker 从队列拉任务、省 spawn 冷启动开销,仅在 spawn 量很大时才有收益。当前模型是干净的「一 run ↔ 一 pid」:`setWorkerPid`/`isWorkerAlive`/reaper/`reconcileInterrupted` 全靠「每 run 一个 pid + 一份心跳」判活与恢复,且 worker 与 DB 完全隔离 + 重启 re-adopt 天然得到崩溃恢复。池化会打破该不变量(一个池 worker 在跑哪个 run?单进程崩溃波及 N 个任务、共享 worktree 冲突),收益只在高并发量下兑现。现规模下**保持「每任务一进程 + 失败从头重跑」的简单模型**,不引入池化。 ## 20. 风险与注意事项 - **Agent SDK headless 执行可靠性**:verify_cmd 把关 + 双复审 + needs_attention 人工兜底。executor run 最多 100 轮、30min 超时兜底;reviewer run 最多 40 轮、15min 超时兜底。 +- **SDK 抖动 → resume 续跑**(`cc.ts`):单次会话若因流式异常中断(流断 / 没收到 result,**非**超时取消、**非** max_turns 等终态),且已拿到 sessionId,则在 worker 进程内用 `resume` 接着原会话续跑一次(保留已干的活,不从头重来),剩余预算不足时至少留 60s。这是 worker 内部健壮性小优化,与「重启靠 re-adopt、整体失败靠 daemon 从头重跑」**正交、不替代**它们;`MAESTRO_SDK_RESUME=0` 可关闭。与模型不可用回退(换模型重开会话)互斥。 - **自动执行安全**:worktree 隔离(改动不进主检出)+ 不自动 push + merge 需 exec_review accept + 安全审计 run 专门检查凭证/注入/权限问题;worker 进程不碰 DB(无法越权改任务状态),spawn 时黑名单剥离真密钥类 env。 - **中断恢复(多进程 re-adopt)**:daemon 重启后 `reconcileInterrupted()` 按 `worker_pid + 心跳` 真判活——worker 仍活则 **re-adopt**(保留 executing,续 ingest 其 outbox,不打断正在跑的 agent);已死则 `failTaskAttempt` 回收重试。daemon 与 worker 解耦后,daemon 崩溃/重启不再丢失在途执行。 - **长任务上下文超限**:100 turns / 30min 兜底,超时后转 failed → 重试。