feat(executor): SDK 抖动 resume 续跑 + worker 池化评估暂缓 [tsk_74Acz1Nh4K1J]

可选优化任务,先评估收益再做:

- worker 池化:评估后暂缓。当前「一 run ↔ 一 pid」模型干净(判活/回收/
  re-adopt 全靠每 run 一 pid+心跳,worker 与 DB 隔离 + 重启 re-adopt 天然
  崩溃恢复),池化会打破该不变量且只在高并发量下兑现收益。现规模保持
  「每任务一进程 + 失败从头重跑」简单模型,仅记入 DESIGN.md。

- SDK resume:实现 worker 内部健壮性小优化。cc.ts 单次会话因流式异常中断
  (流断/没收到 result,非超时取消、非 max_turns 终态)且已拿到 sessionId 时,
  用 resume 接着原会话续跑一次(保留已干的活,不从头重来),剩余预算不足留 60s。
  与「重启 re-adopt / 整体失败 daemon 从头重跑」正交不替代;与模型回退互斥;
  MAESTRO_SDK_RESUME=0 可关闭。query 改为可注入便于单测。

测试:新增 test/cc.test.ts(6 例:续跑成功/终态不续/无 session 不续/
开关关闭/超时不续/模型回退)。npm test 全绿 163/163。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-13 15:03:25 +08:00
parent f020e15137
commit 53efe32a6e
4 changed files with 187 additions and 11 deletions
+2
View File
@@ -207,9 +207,11 @@ daemon 启动时订阅 Store 事件流,符合条件时用 `osascript display n
-**Phase 2(自动化,已完成)**:编排器 + score 调度 + Agent SDK executorEasy/Medium/Hard worktree 自动执行)+ verify + 双复审(code review + 安全审计)+ 自动合并(--no-ff + 逃生口)。
-**Phase 3(打磨,核心已完成)**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 专门检查凭证/注入/权限问题。
- **中断恢复**daemon 重启后 `reconcileInterrupted()` 自动恢复执行中断的任务(标 failed → queued)。
- **长任务上下文超限**100 turns / 30min 兜底,超时后转 failed → 重试。