@winspan/claude-forge 8.30.0 → 8.33.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +4 -4
  2. package/dist/capability/execution-manager.d.ts +38 -1
  3. package/dist/capability/execution-manager.d.ts.map +1 -1
  4. package/dist/capability/execution-manager.js +93 -1
  5. package/dist/capability/execution-manager.js.map +1 -1
  6. package/dist/capability/executor/background-executor.d.ts +1 -0
  7. package/dist/capability/executor/background-executor.d.ts.map +1 -1
  8. package/dist/capability/executor/background-executor.js +27 -4
  9. package/dist/capability/executor/background-executor.js.map +1 -1
  10. package/dist/capability/executor/orchestrator.d.ts +15 -2
  11. package/dist/capability/executor/orchestrator.d.ts.map +1 -1
  12. package/dist/capability/executor/orchestrator.js +82 -3
  13. package/dist/capability/executor/orchestrator.js.map +1 -1
  14. package/dist/capability/executor/worker-auth-probe.d.ts.map +1 -1
  15. package/dist/capability/executor/worker-auth-probe.js +11 -2
  16. package/dist/capability/executor/worker-auth-probe.js.map +1 -1
  17. package/dist/capability/methodologies/bmad.yaml +17 -5
  18. package/dist/capability/methodologies/code-quality-audit.yaml +26 -0
  19. package/dist/capability/methodologies/harness-engineering.yaml +12 -6
  20. package/dist/capability/methodologies/test-coverage-scan.yaml +26 -0
  21. package/dist/capability/methodology-planner.d.ts +17 -1
  22. package/dist/capability/methodology-planner.d.ts.map +1 -1
  23. package/dist/capability/methodology-planner.js +125 -0
  24. package/dist/capability/methodology-planner.js.map +1 -1
  25. package/dist/capability/methodology-registry.d.ts.map +1 -1
  26. package/dist/capability/methodology-registry.js +21 -5
  27. package/dist/capability/methodology-registry.js.map +1 -1
  28. package/dist/capability/types.d.ts +2 -0
  29. package/dist/capability/types.d.ts.map +1 -1
  30. package/dist/cli/commands/init.d.ts.map +1 -1
  31. package/dist/cli/commands/init.js +82 -2
  32. package/dist/cli/commands/init.js.map +1 -1
  33. package/dist/core/ai/provider.d.ts +17 -9
  34. package/dist/core/ai/provider.d.ts.map +1 -1
  35. package/dist/core/ai/provider.js +130 -23
  36. package/dist/core/ai/provider.js.map +1 -1
  37. package/dist/core/ai/types.d.ts +26 -5
  38. package/dist/core/ai/types.d.ts.map +1 -1
  39. package/dist/core/storage/rows.d.ts +153 -0
  40. package/dist/core/storage/rows.d.ts.map +1 -0
  41. package/dist/core/storage/rows.js +14 -0
  42. package/dist/core/storage/rows.js.map +1 -0
  43. package/dist/core/storage/schema.sql +26 -2
  44. package/dist/core/storage/sqlite.d.ts +95 -7
  45. package/dist/core/storage/sqlite.d.ts.map +1 -1
  46. package/dist/core/storage/sqlite.js +409 -22
  47. package/dist/core/storage/sqlite.js.map +1 -1
  48. package/dist/core/utils/token-tracker.d.ts +40 -0
  49. package/dist/core/utils/token-tracker.d.ts.map +1 -0
  50. package/dist/core/utils/token-tracker.js +70 -0
  51. package/dist/core/utils/token-tracker.js.map +1 -0
  52. package/dist/daemon/handlers/post-tool-use.d.ts +1 -0
  53. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  54. package/dist/daemon/handlers/post-tool-use.js +7 -0
  55. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  56. package/dist/daemon/handlers/stop.d.ts +11 -0
  57. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  58. package/dist/daemon/handlers/stop.js +52 -0
  59. package/dist/daemon/handlers/stop.js.map +1 -1
  60. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  61. package/dist/daemon/handlers/user-prompt.js +63 -4
  62. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  63. package/dist/daemon/idle-detector.d.ts +35 -0
  64. package/dist/daemon/idle-detector.d.ts.map +1 -0
  65. package/dist/daemon/idle-detector.js +56 -0
  66. package/dist/daemon/idle-detector.js.map +1 -0
  67. package/dist/daemon/idle-trigger.d.ts +53 -0
  68. package/dist/daemon/idle-trigger.d.ts.map +1 -0
  69. package/dist/daemon/idle-trigger.js +153 -0
  70. package/dist/daemon/idle-trigger.js.map +1 -0
  71. package/dist/daemon/index.d.ts.map +1 -1
  72. package/dist/daemon/index.js +30 -2
  73. package/dist/daemon/index.js.map +1 -1
  74. package/dist/daemon/routing-observer.d.ts +2 -1
  75. package/dist/daemon/routing-observer.d.ts.map +1 -1
  76. package/dist/daemon/routing-observer.js +117 -39
  77. package/dist/daemon/routing-observer.js.map +1 -1
  78. package/dist/engine/agent-router.d.ts +6 -0
  79. package/dist/engine/agent-router.d.ts.map +1 -1
  80. package/dist/engine/agent-router.js +13 -1
  81. package/dist/engine/agent-router.js.map +1 -1
  82. package/dist/engine/conventions/routing.yaml +15 -0
  83. package/dist/engine/dsl/compiler.d.ts.map +1 -1
  84. package/dist/engine/dsl/compiler.js +85 -3
  85. package/dist/engine/dsl/compiler.js.map +1 -1
  86. package/dist/engine/recommender.d.ts.map +1 -1
  87. package/dist/engine/recommender.js +10 -1
  88. package/dist/engine/recommender.js.map +1 -1
  89. package/dist/intelligence/classifier.d.ts +6 -0
  90. package/dist/intelligence/classifier.d.ts.map +1 -1
  91. package/dist/intelligence/classifier.js +57 -0
  92. package/dist/intelligence/classifier.js.map +1 -1
  93. package/dist/skills/registry.d.ts +6 -0
  94. package/dist/skills/registry.d.ts.map +1 -1
  95. package/dist/skills/registry.js +49 -14
  96. package/dist/skills/registry.js.map +1 -1
  97. package/dist/skills/semantic-matcher.d.ts +1 -0
  98. package/dist/skills/semantic-matcher.d.ts.map +1 -1
  99. package/dist/skills/semantic-matcher.js +6 -1
  100. package/dist/skills/semantic-matcher.js.map +1 -1
  101. package/dist/web/auth-middleware.d.ts +22 -0
  102. package/dist/web/auth-middleware.d.ts.map +1 -0
  103. package/dist/web/auth-middleware.js +51 -0
  104. package/dist/web/auth-middleware.js.map +1 -0
  105. package/dist/web/routes/agents.d.ts +7 -0
  106. package/dist/web/routes/agents.d.ts.map +1 -0
  107. package/dist/web/routes/agents.js +192 -0
  108. package/dist/web/routes/agents.js.map +1 -0
  109. package/dist/web/routes/ai.d.ts +10 -0
  110. package/dist/web/routes/ai.d.ts.map +1 -0
  111. package/dist/web/routes/ai.js +197 -0
  112. package/dist/web/routes/ai.js.map +1 -0
  113. package/dist/web/routes/auth.d.ts +12 -0
  114. package/dist/web/routes/auth.d.ts.map +1 -0
  115. package/dist/web/routes/auth.js +20 -0
  116. package/dist/web/routes/auth.js.map +1 -0
  117. package/dist/web/routes/events.d.ts +11 -0
  118. package/dist/web/routes/events.d.ts.map +1 -0
  119. package/dist/web/routes/events.js +43 -0
  120. package/dist/web/routes/events.js.map +1 -0
  121. package/dist/web/routes/execution-trace.d.ts +13 -0
  122. package/dist/web/routes/execution-trace.d.ts.map +1 -0
  123. package/dist/web/routes/execution-trace.js +308 -0
  124. package/dist/web/routes/execution-trace.js.map +1 -0
  125. package/dist/web/routes/experiments.d.ts +15 -0
  126. package/dist/web/routes/experiments.d.ts.map +1 -0
  127. package/dist/web/routes/experiments.js +187 -0
  128. package/dist/web/routes/experiments.js.map +1 -0
  129. package/dist/web/routes/methodology.d.ts +12 -0
  130. package/dist/web/routes/methodology.d.ts.map +1 -0
  131. package/dist/web/routes/methodology.js +228 -0
  132. package/dist/web/routes/methodology.js.map +1 -0
  133. package/dist/web/routes/patch.d.ts +7 -0
  134. package/dist/web/routes/patch.d.ts.map +1 -0
  135. package/dist/web/routes/patch.js +106 -0
  136. package/dist/web/routes/patch.js.map +1 -0
  137. package/dist/web/routes/routing.d.ts +17 -0
  138. package/dist/web/routes/routing.d.ts.map +1 -0
  139. package/dist/web/routes/routing.js +582 -0
  140. package/dist/web/routes/routing.js.map +1 -0
  141. package/dist/web/routes/rules.d.ts +7 -0
  142. package/dist/web/routes/rules.d.ts.map +1 -0
  143. package/dist/web/routes/rules.js +105 -0
  144. package/dist/web/routes/rules.js.map +1 -0
  145. package/dist/web/routes/sessions.d.ts +10 -0
  146. package/dist/web/routes/sessions.d.ts.map +1 -0
  147. package/dist/web/routes/sessions.js +234 -0
  148. package/dist/web/routes/sessions.js.map +1 -0
  149. package/dist/web/routes/skills.d.ts +10 -0
  150. package/dist/web/routes/skills.d.ts.map +1 -0
  151. package/dist/web/routes/skills.js +272 -0
  152. package/dist/web/routes/skills.js.map +1 -0
  153. package/dist/web/routes/static.d.ts +19 -0
  154. package/dist/web/routes/static.d.ts.map +1 -0
  155. package/dist/web/routes/static.js +61 -0
  156. package/dist/web/routes/static.js.map +1 -0
  157. package/dist/web/routes/status.d.ts +7 -0
  158. package/dist/web/routes/status.d.ts.map +1 -0
  159. package/dist/web/routes/status.js +28 -0
  160. package/dist/web/routes/status.js.map +1 -0
  161. package/dist/web/routes/token-usage.d.ts +7 -0
  162. package/dist/web/routes/token-usage.d.ts.map +1 -0
  163. package/dist/web/routes/token-usage.js +33 -0
  164. package/dist/web/routes/token-usage.js.map +1 -0
  165. package/dist/web/routes/types.d.ts +40 -0
  166. package/dist/web/routes/types.d.ts.map +1 -0
  167. package/dist/web/routes/types.js +52 -0
  168. package/dist/web/routes/types.js.map +1 -0
  169. package/dist/web/server.d.ts +7 -4
  170. package/dist/web/server.d.ts.map +1 -1
  171. package/dist/web/server.js +60 -2330
  172. package/dist/web/server.js.map +1 -1
  173. package/dist/web/ssrf-guard.d.ts +35 -0
  174. package/dist/web/ssrf-guard.d.ts.map +1 -0
  175. package/dist/web/ssrf-guard.js +93 -0
  176. package/dist/web/ssrf-guard.js.map +1 -0
  177. package/dist/web/static/assets/AIConfig-Dw13rVtT.js +2 -0
  178. package/dist/web/static/assets/AIConfig-Dw13rVtT.js.map +1 -0
  179. package/dist/web/static/assets/Agents-D1p3JhQs.js +2 -0
  180. package/dist/web/static/assets/Agents-D1p3JhQs.js.map +1 -0
  181. package/dist/web/static/assets/{Events-CnA3f740.js → Events-DqzBTrly.js} +2 -2
  182. package/dist/web/static/assets/{Events-CnA3f740.js.map → Events-DqzBTrly.js.map} +1 -1
  183. package/dist/web/static/assets/{ExecutionTrace-ClPfFIQa.js → ExecutionTrace-Z-zlH0KH.js} +2 -2
  184. package/dist/web/static/assets/{ExecutionTrace-ClPfFIQa.js.map → ExecutionTrace-Z-zlH0KH.js.map} +1 -1
  185. package/dist/web/static/assets/Methodologies-Br5KOWuF.js +5 -0
  186. package/dist/web/static/assets/Methodologies-Br5KOWuF.js.map +1 -0
  187. package/dist/web/static/assets/{Sessions-DwWOKgnl.js → Sessions-DOd65EkN.js} +2 -2
  188. package/dist/web/static/assets/{Sessions-DwWOKgnl.js.map → Sessions-DOd65EkN.js.map} +1 -1
  189. package/dist/web/static/assets/Skills-zacj_uSW.js +2 -0
  190. package/dist/web/static/assets/Skills-zacj_uSW.js.map +1 -0
  191. package/dist/web/static/assets/auth-Bnf8ZcqN.js +2 -0
  192. package/dist/web/static/assets/auth-Bnf8ZcqN.js.map +1 -0
  193. package/dist/web/static/assets/index-BVpUTHdp.js +3 -0
  194. package/dist/web/static/assets/{index-DUYj2ek1.js.map → index-BVpUTHdp.js.map} +1 -1
  195. package/dist/web/static/assets/index-Drpf7sLl.css +1 -0
  196. package/dist/web/static/index.html +2 -2
  197. package/package.json +4 -3
  198. package/dist/web/static/assets/AIConfig-nZgwaowr.js +0 -2
  199. package/dist/web/static/assets/AIConfig-nZgwaowr.js.map +0 -1
  200. package/dist/web/static/assets/Agents-BZGXKWC7.js +0 -2
  201. package/dist/web/static/assets/Agents-BZGXKWC7.js.map +0 -1
  202. package/dist/web/static/assets/Methodologies-CAXUXeox.js +0 -2
  203. package/dist/web/static/assets/Methodologies-CAXUXeox.js.map +0 -1
  204. package/dist/web/static/assets/Skills-DhM6ALhr.js +0 -2
  205. package/dist/web/static/assets/Skills-DhM6ALhr.js.map +0 -1
  206. package/dist/web/static/assets/index-CVWult53.css +0 -1
  207. package/dist/web/static/assets/index-DUYj2ek1.js +0 -3
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Claude Forge 是一个在本地运行的守护进程,通过 Claude Code 的 Hook API 拦截 `UserPromptSubmit`、`PreToolUse`、`PostToolUse`、`Stop` 等事件,在其中做意图分类、方法论匹配、Agent 路由、规则阻断、治理建议。
6
6
 
7
- **版本**: 8.29.0 · **Node**: >= 18 · **License**: MIT
7
+ **版本**: 8.31.0(实时版本以 `cf --version` 为准) · **Node**: >= 18 · **License**: MIT
8
8
 
9
9
  ---
10
10
 
@@ -25,7 +25,7 @@ daemon 以 Unix socket 形式与 Claude Code 的 Hook 脚本通信。每次 `Use
25
25
  基于 intent 分析(`complexity`、`taskType`)和 YAML 规则,UserPromptSubmit 阶段建议 Claude 用哪个子 agent(`researcher`、`tester`、`coder` 等)。路由决策全程记录到 `routing_events` 表,可用于离线分析和 A/B 实验。
26
26
 
27
27
  ### 4. Web 管理后台
28
- `claude-forge daemon start` 默认在 `http://127.0.0.1:3721` 开放一个 React 管理后台,覆盖:会话浏览、事件流、执行追踪、方法论执行启动/取消、Agent/Skill 编辑、AI 配置、实时 SSE 日志。
28
+ `claude-forge daemon start` 默认在 `http://127.0.0.1:<port>`(默认端口 `3456`,可在 `~/.claude-forge/config.yaml` 的 `web.port` 修改)开放一个 React 管理后台,覆盖:会话浏览、事件流、执行追踪、方法论执行启动/取消、Agent/Skill 编辑、AI 配置、实时 SSE 日志。
29
29
 
30
30
  ---
31
31
 
@@ -44,8 +44,8 @@ cf config
44
44
  # 4. 启动 daemon
45
45
  cf daemon start
46
46
 
47
- # 5. 打开管理后台
48
- open http://127.0.0.1:3721
47
+ # 5. 打开管理后台(默认 3456,可在 ~/.claude-forge/config.yaml 修改 web.port)
48
+ open http://127.0.0.1:3456
49
49
  ```
50
50
 
51
51
  之后在任何目录下开 Claude Code 会话,daemon 会自动接管 hook 事件。
@@ -19,9 +19,15 @@ export interface StartExecutionInput {
19
19
  methodology_id: string;
20
20
  plan: ExecutionPlan;
21
21
  mode: 'foreground' | 'background';
22
+ trigger_type?: 'manual' | 'idle' | 'scheduled';
22
23
  }
23
24
  export interface ExecutionManagerOptions {
24
25
  background?: BackgroundExecutorOptions;
26
+ /**
27
+ * 判定 methodology_executions 进入 stale 的无推进阈值(ms)。
28
+ * 默认 30 分钟:超过此时长没有任何推进就标 stale。
29
+ */
30
+ staleThresholdMs?: number;
25
31
  }
26
32
  export declare class ExecutionManager {
27
33
  private storage;
@@ -31,6 +37,7 @@ export declare class ExecutionManager {
31
37
  private activeOrchestrators;
32
38
  private listeners;
33
39
  private reconcileTimer;
40
+ private readonly staleThresholdMs;
34
41
  constructor(storage: SQLiteStorage, registry: MethodologyRegistry, options?: ExecutionManagerOptions);
35
42
  /**
36
43
  * Create the execution row + kick off orchestrator.
@@ -47,13 +54,43 @@ export declare class ExecutionManager {
47
54
  * alive. Mark them failed so the UI shows a definitive state.
48
55
  */
49
56
  reconcileOrphansOnStartup(): void;
57
+ /**
58
+ * Cross-session residue sweep: find `mode='foreground' AND status='running'`
59
+ * executions whose `started_at` is older than `maxAgeMs`, and mark them
60
+ * `cancelled`. Foreground executions are driven by Claude Code sessions — if
61
+ * the originating session ended without the Stop hook firing (crash, kill,
62
+ * detach, pre-guard legacy data), the row can stay `running` forever and
63
+ * blocks the session-level exclusivity check at UserPromptSubmit.
64
+ *
65
+ * Complements:
66
+ * - `reconcileOrphansOnStartup()` handles background workers (pid-based).
67
+ * - `sweepStaleMethodologies()` is the softer no-progress sweep (30min → `stale`).
68
+ *
69
+ * @param maxAgeMs absolute age since started_at. Default 4h.
70
+ * @returns list of execution ids that were cancelled.
71
+ */
72
+ cancelStaleForegroundExecutions(maxAgeMs?: number): number[];
50
73
  private isPidAlive;
74
+ /**
75
+ * Sweep methodology_executions that are still `running` but haven't made any
76
+ * progress for longer than `staleThresholdMs`. Mark them `stale` so the UI
77
+ * (and downstream schedulers) stop treating them as active.
78
+ *
79
+ * 判定依据:`now - (last_progress_at || started_at) > staleThresholdMs`
80
+ * 非 running 的 execution 一律忽略。
81
+ *
82
+ * 返回被标记为 stale 的 execution id 列表,便于测试 / 观测。
83
+ */
84
+ sweepStaleMethodologies(now?: number): number[];
51
85
  /**
52
86
  * Start a periodic reconcile loop — picks up workers killed while daemon
53
87
  * was running (e.g. user kill -9'd the pid). Safe to call once at startup.
54
88
  * Returns a stop function.
89
+ *
90
+ * @param intervalMs reconcile interval in milliseconds
91
+ * @param idleTriggerCallback optional callback to trigger idle methodologies
55
92
  */
56
- startReconcileLoop(intervalMs?: number): () => void;
93
+ startReconcileLoop(intervalMs?: number, idleTriggerCallback?: () => Promise<void>): () => void;
57
94
  stopReconcileLoop(): void;
58
95
  }
59
96
  //# sourceMappingURL=execution-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution-manager.d.ts","sourceRoot":"","sources":["../../src/capability/execution-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAiB,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAKvG,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,YAAY,GAAG,YAAY,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC;AAED,qBAAa,gBAAgB;IAQzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IARlB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,cAAc,CAA+B;gBAG3C,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,mBAAmB,EACrC,OAAO,GAAE,uBAA4B;IAevC;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM;IAkDnC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAKtD;;;OAGG;IACH,yBAAyB,IAAI,IAAI;IAkBjC,OAAO,CAAC,UAAU;IASlB;;;;OAIG;IACH,kBAAkB,CAAC,UAAU,SAAS,GAAG,MAAM,IAAI;IAiBnD,iBAAiB,IAAI,IAAI;CAI1B"}
1
+ {"version":3,"file":"execution-manager.d.ts","sourceRoot":"","sources":["../../src/capability/execution-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAiB,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAKvG,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,YAAY,GAAG,YAAY,CAAC;IAClC,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;CAChD;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,gBAAgB;IASzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IATlB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAGhC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,mBAAmB,EACrC,OAAO,GAAE,uBAA4B;IAgBvC;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM;IAmDnC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAKtD;;;OAGG;IACH,yBAAyB,IAAI,IAAI;IAkBjC;;;;;;;;;;;;;;OAcG;IACH,+BAA+B,CAAC,QAAQ,GAAE,MAA2B,GAAG,MAAM,EAAE;IAyBhF,OAAO,CAAC,UAAU;IASlB;;;;;;;;;OASG;IACH,uBAAuB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,EAAE;IAkC3D;;;;;;;OAOG;IACH,kBAAkB,CAAC,UAAU,SAAS,EAAE,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI;IA4B9F,iBAAiB,IAAI,IAAI;CAI1B"}
@@ -22,11 +22,13 @@ export class ExecutionManager {
22
22
  activeOrchestrators = new Map();
23
23
  listeners = new Set();
24
24
  reconcileTimer = null;
25
+ staleThresholdMs;
25
26
  constructor(storage, registry, options = {}) {
26
27
  this.storage = storage;
27
28
  this.registry = registry;
28
29
  this.foregroundExecutor = new ForegroundExecutor(storage, registry);
29
30
  this.backgroundExecutor = new BackgroundExecutor(storage, registry, options.background);
31
+ this.staleThresholdMs = options.staleThresholdMs ?? 30 * 60 * 1000;
30
32
  // Relay executor events to external subscribers (SSE, metrics, ...)
31
33
  const relay = (ev) => {
32
34
  for (const l of this.listeners) {
@@ -58,6 +60,7 @@ export class ExecutionManager {
58
60
  methodology_id: input.methodology_id,
59
61
  plan_json: JSON.stringify(input.plan),
60
62
  mode: input.mode,
63
+ trigger_type: input.trigger_type ?? 'manual',
61
64
  });
62
65
  // Seed the first phase_executions row so listings show immediately
63
66
  if (input.plan.phases[0]) {
@@ -126,6 +129,45 @@ export class ExecutionManager {
126
129
  }
127
130
  }
128
131
  }
132
+ /**
133
+ * Cross-session residue sweep: find `mode='foreground' AND status='running'`
134
+ * executions whose `started_at` is older than `maxAgeMs`, and mark them
135
+ * `cancelled`. Foreground executions are driven by Claude Code sessions — if
136
+ * the originating session ended without the Stop hook firing (crash, kill,
137
+ * detach, pre-guard legacy data), the row can stay `running` forever and
138
+ * blocks the session-level exclusivity check at UserPromptSubmit.
139
+ *
140
+ * Complements:
141
+ * - `reconcileOrphansOnStartup()` handles background workers (pid-based).
142
+ * - `sweepStaleMethodologies()` is the softer no-progress sweep (30min → `stale`).
143
+ *
144
+ * @param maxAgeMs absolute age since started_at. Default 4h.
145
+ * @returns list of execution ids that were cancelled.
146
+ */
147
+ cancelStaleForegroundExecutions(maxAgeMs = 4 * 60 * 60 * 1000) {
148
+ const now = Date.now();
149
+ const rows = this.storage.listRunningForegroundExecutions();
150
+ const cancelled = [];
151
+ for (const row of rows) {
152
+ const startedAt = row.started_at ?? 0;
153
+ const age = now - startedAt;
154
+ if (age < maxAgeMs)
155
+ continue;
156
+ try {
157
+ this.storage.updateMethodologyExecution(row.id, {
158
+ status: 'cancelled',
159
+ completed_at: now,
160
+ });
161
+ cancelled.push(row.id);
162
+ logger.warn(`[ExecutionManager] execution=${row.id} session=${row.session_id} ` +
163
+ `foreground residue age=${Math.round(age / 60000)}min > ${Math.round(maxAgeMs / 60000)}min — marked cancelled`);
164
+ }
165
+ catch (err) {
166
+ logger.warn(`[ExecutionManager] cross-session cancel failed for execution=${row.id}: ${err}`);
167
+ }
168
+ }
169
+ return cancelled;
170
+ }
129
171
  isPidAlive(pid) {
130
172
  try {
131
173
  process.kill(pid, 0);
@@ -135,12 +177,50 @@ export class ExecutionManager {
135
177
  return false;
136
178
  }
137
179
  }
180
+ /**
181
+ * Sweep methodology_executions that are still `running` but haven't made any
182
+ * progress for longer than `staleThresholdMs`. Mark them `stale` so the UI
183
+ * (and downstream schedulers) stop treating them as active.
184
+ *
185
+ * 判定依据:`now - (last_progress_at || started_at) > staleThresholdMs`
186
+ * 非 running 的 execution 一律忽略。
187
+ *
188
+ * 返回被标记为 stale 的 execution id 列表,便于测试 / 观测。
189
+ */
190
+ sweepStaleMethodologies(now = Date.now()) {
191
+ const rows = this.storage.getDatabase().prepare(`SELECT id, status, started_at, last_progress_at
192
+ FROM methodology_executions
193
+ WHERE status = 'running'`).all();
194
+ const marked = [];
195
+ for (const row of rows) {
196
+ const reference = row.last_progress_at ?? row.started_at;
197
+ if (reference == null)
198
+ continue;
199
+ if (now - reference <= this.staleThresholdMs)
200
+ continue;
201
+ try {
202
+ this.storage.updateMethodologyExecution(row.id, {
203
+ status: 'stale',
204
+ completed_at: now,
205
+ });
206
+ marked.push(row.id);
207
+ logger.warn(`[ExecutionManager] execution=${row.id} marked stale (no progress for ${Math.round((now - reference) / 60_000)}min)`);
208
+ }
209
+ catch (err) {
210
+ logger.warn(`[ExecutionManager] failed to mark execution=${row.id} stale: ${err}`);
211
+ }
212
+ }
213
+ return marked;
214
+ }
138
215
  /**
139
216
  * Start a periodic reconcile loop — picks up workers killed while daemon
140
217
  * was running (e.g. user kill -9'd the pid). Safe to call once at startup.
141
218
  * Returns a stop function.
219
+ *
220
+ * @param intervalMs reconcile interval in milliseconds
221
+ * @param idleTriggerCallback optional callback to trigger idle methodologies
142
222
  */
143
- startReconcileLoop(intervalMs = 60_000) {
223
+ startReconcileLoop(intervalMs = 60_000, idleTriggerCallback) {
144
224
  if (this.reconcileTimer)
145
225
  clearInterval(this.reconcileTimer);
146
226
  this.reconcileTimer = setInterval(() => {
@@ -150,6 +230,18 @@ export class ExecutionManager {
150
230
  catch (err) {
151
231
  logger.debug(`[ExecutionManager] periodic reconcile failed: ${err}`);
152
232
  }
233
+ try {
234
+ this.sweepStaleMethodologies();
235
+ }
236
+ catch (err) {
237
+ logger.debug(`[ExecutionManager] periodic stale sweep failed: ${err}`);
238
+ }
239
+ // Trigger idle methodologies if callback provided
240
+ if (idleTriggerCallback) {
241
+ idleTriggerCallback().catch(err => {
242
+ logger.debug(`[ExecutionManager] idle trigger callback failed: ${err}`);
243
+ });
244
+ }
153
245
  }, intervalMs);
154
246
  // Don't keep the event loop alive just for this.
155
247
  this.reconcileTimer.unref?.();
@@ -1 +1 @@
1
- {"version":3,"file":"execution-manager.js","sourceRoot":"","sources":["../../src/capability/execution-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution-manager.js","sourceRoot":"","sources":["../../src/capability/execution-manager.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,7 @@ export declare class BackgroundExecutor implements PhaseExecutor {
41
41
  readonly mode: "background";
42
42
  private listeners;
43
43
  private running;
44
+ private cancelRequested;
44
45
  private readonly opts;
45
46
  constructor(storage: SQLiteStorage, registry: MethodologyRegistry, options?: BackgroundExecutorOptions);
46
47
  executePhase(execution: MethodologyExecution, phase: PlannedPhase, phaseIndex: number): Promise<PhaseExecutionResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"background-executor.d.ts","sourceRoot":"","sources":["../../../src/capability/executor/background-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAEV,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,yBAAyB;IACxC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iCAAiC;IACjC,cAAc,CAAC,EAAE,aAAa,GAAG,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACtF,oBAAoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,qBAAa,kBAAmB,YAAW,aAAa;IAOpD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAPlB,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IACtC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAqD;IACpE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsF;gBAGjG,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,mBAAmB,EACrC,OAAO,GAAE,yBAA8B;IAiBnC,YAAY,CAChB,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC;IA4M1B,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjD,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAKtD,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAoBrB,0BAA0B;IAC1B,eAAe,IAAI,MAAM;CAG1B"}
1
+ {"version":3,"file":"background-executor.d.ts","sourceRoot":"","sources":["../../../src/capability/executor/background-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAEV,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,yBAAyB;IACxC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iCAAiC;IACjC,cAAc,CAAC,EAAE,aAAa,GAAG,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACtF,oBAAoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,qBAAa,kBAAmB,YAAW,aAAa;IAQpD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IARlB,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IACtC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAqD;IACpE,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsF;gBAGjG,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,mBAAmB,EACrC,OAAO,GAAE,yBAA8B;IAiBnC,YAAY,CAChB,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC;IAoO1B,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjD,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAKtD,OAAO,CAAC,IAAI;IAMZ;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAoBrB,0BAA0B;IAC1B,eAAe,IAAI,MAAM;CAG1B"}
@@ -31,6 +31,7 @@ export class BackgroundExecutor {
31
31
  mode = 'background';
32
32
  listeners = new Set();
33
33
  running = new Map();
34
+ cancelRequested = new Set();
34
35
  opts;
35
36
  constructor(storage, registry, options = {}) {
36
37
  this.storage = storage;
@@ -96,13 +97,19 @@ export class BackgroundExecutor {
96
97
  stdio: ['pipe', 'pipe', 'pipe'],
97
98
  });
98
99
  this.running.set(execution.id, child);
99
- this.storage.updateMethodologyExecution(execution.id, { worker_pid: child.pid ?? null });
100
+ this.storage.updateMethodologyExecution(execution.id, {
101
+ worker_pid: child.pid ?? null,
102
+ last_progress_at: Date.now(),
103
+ });
100
104
  const logStream = createWriteStream(logPath, { flags: 'a' });
101
105
  const handleStreamEvent = (event) => {
102
106
  // Capture session id from init event
103
107
  if (event.type === 'system' && 'session_id' in event && typeof event.session_id === 'string') {
104
108
  capturedSessionId = event.session_id;
105
- this.storage.updateMethodologyExecution(execution.id, { worker_session_id: event.session_id });
109
+ this.storage.updateMethodologyExecution(execution.id, {
110
+ worker_session_id: event.session_id,
111
+ last_progress_at: Date.now(),
112
+ });
106
113
  }
107
114
  // Tool uses — emit as phase-log for observability
108
115
  const tools = extractToolUses(event);
@@ -175,7 +182,13 @@ export class BackgroundExecutor {
175
182
  if (exitReason === 'timeout') {
176
183
  // already set
177
184
  }
178
- else if (signal === 'SIGKILL' || signal === 'SIGTERM') {
185
+ else if (this.cancelRequested.has(execution.id) ||
186
+ signal === 'SIGKILL' ||
187
+ signal === 'SIGTERM' ||
188
+ // macOS 下 SIGTERM 杀掉的 child,Node 会报 code=143 (128+SIGTERM) / signal=null,
189
+ // SIGKILL 对应 code=137。无论 signal 字段形状如何,都认定为 cancelled。
190
+ code === 143 ||
191
+ code === 137) {
179
192
  // manual cancel takes priority over natural completion semantics
180
193
  if (exitReason === 'completed')
181
194
  exitReason = 'cancelled';
@@ -190,9 +203,18 @@ export class BackgroundExecutor {
190
203
  child.stdin.end(directive);
191
204
  await waitForExit;
192
205
  this.running.delete(execution.id);
206
+ this.cancelRequested.delete(execution.id);
193
207
  logStream.end();
194
208
  const durationMs = Date.now() - startedAt;
195
- const phaseStatus = exitReason === 'completed' ? 'completed' : 'failed';
209
+ // exitReason 的三路映射:
210
+ // completed -> 'completed'
211
+ // cancelled -> 'cancelled'(需要 schema 支持,见 runMigrations)
212
+ // failed/timeout -> 'failed'
213
+ const phaseStatus = exitReason === 'completed'
214
+ ? 'completed'
215
+ : exitReason === 'cancelled'
216
+ ? 'cancelled'
217
+ : 'failed';
196
218
  this.storage.updatePhaseExecution(phaseExecId, {
197
219
  status: phaseStatus,
198
220
  completed_at: Date.now(),
@@ -234,6 +256,7 @@ export class BackgroundExecutor {
234
256
  };
235
257
  }
236
258
  async cancel(execution_id) {
259
+ this.cancelRequested.add(execution_id);
237
260
  const child = this.running.get(execution_id);
238
261
  if (child) {
239
262
  logger.info(`[BackgroundExecutor] kill worker pid=${child.pid} for execution=${execution_id}`);
@@ -1 +1 @@
1
- {"version":3,"file":"background-executor.js","sourceRoot":"","sources":["../../../src/capability/executor/background-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"background-executor.js","sourceRoot":"","sources":["../../../src/capability/executor/background-executor.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@
5
5
  * 1. 从 storage 读取 execution 和 plan
6
6
  * 2. 对每个 phase 调用 executor.executePhase()
7
7
  * 3. 根据结果更新 methodology_executions 状态
8
- * 4. 其中任一 phase 失败 / 取消 整个 execution 标 failed/cancelled 并停止
8
+ * 4. 其中任一 phase 失败 → 尝试 replan(如果启用)
9
+ * 5. 如果 replan 失败或取消 → 整个 execution 标 failed/cancelled 并停止
9
10
  *
10
11
  * 前台模式下,executePhase 只是入队 directive(返回 'injected')。此时
11
12
  * orchestrator 不推进下一 phase —— 推进由 PostToolUse handler 基于实际
@@ -16,10 +17,22 @@
16
17
  */
17
18
  import type { SQLiteStorage } from '../../core/storage/sqlite.js';
18
19
  import type { PhaseExecutor } from './types.js';
20
+ import type { MethodologyPlanner } from '../methodology-planner.js';
19
21
  export declare class Orchestrator {
20
22
  private storage;
21
23
  private executor;
22
- constructor(storage: SQLiteStorage, executor: PhaseExecutor);
24
+ private planner?;
25
+ private readonly enableReplan;
26
+ private readonly maxRetry;
27
+ constructor(storage: SQLiteStorage, executor: PhaseExecutor, planner?: MethodologyPlanner | undefined, options?: {
28
+ enableReplan?: boolean;
29
+ maxRetry?: number;
30
+ });
23
31
  run(execution_id: number): Promise<void>;
32
+ /**
33
+ * 尝试重新规划(失败反馈环)
34
+ * @returns true 如果 replan 成功并更新了 plan,false 否则
35
+ */
36
+ private attemptReplan;
24
37
  }
25
38
  //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/capability/executor/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,qBAAa,YAAY;IAErB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;gBADR,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,aAAa;IAG3B,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgE/C"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/capability/executor/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,qBAAa,YAAY;IAKrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO,CAAC;IANlB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGxB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,kBAAkB,YAAA,EACpC,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAMG,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiF9C;;;OAGG;YACW,aAAa;CAkE5B"}
@@ -5,7 +5,8 @@
5
5
  * 1. 从 storage 读取 execution 和 plan
6
6
  * 2. 对每个 phase 调用 executor.executePhase()
7
7
  * 3. 根据结果更新 methodology_executions 状态
8
- * 4. 其中任一 phase 失败 / 取消 整个 execution 标 failed/cancelled 并停止
8
+ * 4. 其中任一 phase 失败 → 尝试 replan(如果启用)
9
+ * 5. 如果 replan 失败或取消 → 整个 execution 标 failed/cancelled 并停止
9
10
  *
10
11
  * 前台模式下,executePhase 只是入队 directive(返回 'injected')。此时
11
12
  * orchestrator 不推进下一 phase —— 推进由 PostToolUse handler 基于实际
@@ -18,9 +19,15 @@ import { logger } from '../../core/utils/logger.js';
18
19
  export class Orchestrator {
19
20
  storage;
20
21
  executor;
21
- constructor(storage, executor) {
22
+ planner;
23
+ enableReplan;
24
+ maxRetry;
25
+ constructor(storage, executor, planner, options) {
22
26
  this.storage = storage;
23
27
  this.executor = executor;
28
+ this.planner = planner;
29
+ this.enableReplan = options?.enableReplan ?? (process.env.ENABLE_METHODOLOGY_REPLAN !== 'false');
30
+ this.maxRetry = options?.maxRetry ?? parseInt(process.env.MAX_METHODOLOGY_RETRY || '2', 10);
24
31
  }
25
32
  async run(execution_id) {
26
33
  const execution = this.storage.getMethodologyExecution(execution_id);
@@ -40,7 +47,10 @@ export class Orchestrator {
40
47
  logger.info(`[Orchestrator] execution=${execution_id} status changed to ${fresh.status}, stopping`);
41
48
  return;
42
49
  }
43
- this.storage.updateMethodologyExecution(execution_id, { current_phase_index: i });
50
+ this.storage.updateMethodologyExecution(execution_id, {
51
+ current_phase_index: i,
52
+ last_progress_at: Date.now(),
53
+ });
44
54
  const result = await this.executor.executePhase(fresh, phase, i);
45
55
  if (this.executor.mode === 'foreground') {
46
56
  // Foreground 模式:只入队第一阶段,后续由 PostToolUse 推进。
@@ -49,6 +59,18 @@ export class Orchestrator {
49
59
  }
50
60
  // Background 模式:result 指示 phase 的真实状态
51
61
  if (result.status === 'failed') {
62
+ // 尝试失败反馈环
63
+ const replanSucceeded = await this.attemptReplan(execution_id, i, result.error || 'unknown error', plan);
64
+ if (replanSucceeded) {
65
+ // Replan 成功,继续执行(从下一个 phase 开始,因为 plan 已更新)
66
+ logger.info(`[Orchestrator] replan succeeded, continuing execution from phase ${i + 1}`);
67
+ // 重新加载更新后的 plan
68
+ const updatedExecution = this.storage.getMethodologyExecution(execution_id);
69
+ const updatedPlan = JSON.parse(updatedExecution.plan_json);
70
+ // 递归调用 run 以继续执行更新后的计划
71
+ return this.run(execution_id);
72
+ }
73
+ // Replan 失败或未启用,标记 execution 为 failed
52
74
  this.storage.updateMethodologyExecution(execution_id, {
53
75
  status: 'failed',
54
76
  completed_at: Date.now(),
@@ -75,5 +97,62 @@ export class Orchestrator {
75
97
  });
76
98
  logger.info(`[Orchestrator] execution=${execution_id} completed all ${plan.phases.length} phases`);
77
99
  }
100
+ /**
101
+ * 尝试重新规划(失败反馈环)
102
+ * @returns true 如果 replan 成功并更新了 plan,false 否则
103
+ */
104
+ async attemptReplan(execution_id, failedPhaseIndex, failureReason, currentPlan) {
105
+ // 检查是否启用 replan
106
+ if (!this.enableReplan) {
107
+ logger.info('[Orchestrator] replan disabled by configuration');
108
+ return false;
109
+ }
110
+ // 检查是否有 planner
111
+ if (!this.planner) {
112
+ logger.info('[Orchestrator] no planner available for replan');
113
+ return false;
114
+ }
115
+ // 检查 retry_count 是否达到上限
116
+ const execution = this.storage.getMethodologyExecution(execution_id);
117
+ const retryCount = execution.retry_count ?? 0;
118
+ if (retryCount >= this.maxRetry) {
119
+ logger.info(`[Orchestrator] retry_count=${retryCount} reached max=${this.maxRetry}, not replanning`);
120
+ return false;
121
+ }
122
+ logger.info(`[Orchestrator] attempting replan for execution=${execution_id}, phase=${failedPhaseIndex}, retry=${retryCount + 1}/${this.maxRetry}`);
123
+ // 获取原始计划
124
+ const originalPlan = execution.original_plan_json
125
+ ? JSON.parse(execution.original_plan_json)
126
+ : currentPlan;
127
+ // 获取已完成的 phases
128
+ const completedPhases = currentPlan.phases.slice(0, failedPhaseIndex);
129
+ try {
130
+ // 调用 planner.replan()
131
+ const newPlan = await this.planner.replan({
132
+ executionId: execution_id,
133
+ failedPhaseIndex,
134
+ failureReason,
135
+ originalPlan,
136
+ completedPhases,
137
+ });
138
+ if (!newPlan) {
139
+ logger.info('[Orchestrator] planner determined recovery not possible');
140
+ return false;
141
+ }
142
+ // 更新 execution 的 plan 和 retry_count
143
+ this.storage.updateMethodologyExecution(execution_id, {
144
+ plan_json: JSON.stringify(newPlan),
145
+ retry_count: retryCount + 1,
146
+ current_phase_index: failedPhaseIndex, // 从失败的 phase 重新开始
147
+ last_progress_at: Date.now(),
148
+ });
149
+ logger.info(`[Orchestrator] replan successful, updated plan with ${newPlan.phases.length} phases`);
150
+ return true;
151
+ }
152
+ catch (err) {
153
+ logger.warn(`[Orchestrator] replan failed with error: ${err}`);
154
+ return false;
155
+ }
156
+ }
78
157
  }
79
158
  //# sourceMappingURL=orchestrator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/capability/executor/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/capability/executor/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,OAAO,YAAY;IAKb;IACA;IACA;IANO,YAAY,CAAU;IACtB,QAAQ,CAAS;IAElC,YACU,OAAsB,EACtB,QAAuB,EACvB,OAA4B,EACpC,OAGC;QANO,YAAO,GAAP,OAAO,CAAe;QACtB,aAAQ,GAAR,QAAQ,CAAe;QACvB,YAAO,GAAP,OAAO,CAAqB;QAMpC,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,OAAO,CAAC,CAAC;QACjG,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,YAAoB;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAgC,CAAC;QACpG,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,YAAY,CAAC,CAAC;QACvE,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,4BAA4B,YAAY,WAAW,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAkB,CAAC;QAC9D,MAAM,SAAS,GAAG,SAAS,CAAC,mBAAmB,IAAI,CAAC,CAAC;QAErD,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CACT,4BAA4B,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,KAAK,GAAG,CAC/G,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAyB,CAAC;YACzF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,4BAA4B,YAAY,sBAAsB,KAAK,CAAC,MAAM,YAAY,CAAC,CAAC;gBACpG,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE;gBACpD,mBAAmB,EAAE,CAAC;gBACtB,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE;aAC7B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAEjE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACxC,4CAA4C;gBAC5C,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,gCAAgC,CAAC,CAAC;gBAC3F,OAAO;YACT,CAAC;YAED,sCAAsC;YACtC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,UAAU;gBACV,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,IAAI,CAAC,CAAC;gBACzG,IAAI,eAAe,EAAE,CAAC;oBACpB,4CAA4C;oBAC5C,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACzF,gBAAgB;oBAChB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAyB,CAAC;oBACpG,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAkB,CAAC;oBAC5E,uBAAuB;oBACvB,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAChC,CAAC;gBAED,sCAAsC;gBACtC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE;oBACpD,MAAM,EAAE,QAAQ;oBAChB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;oBACxB,UAAU,EAAE,IAAI;iBACjB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CACT,4BAA4B,YAAY,oBAAoB,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CACjF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE;oBACpD,MAAM,EAAE,WAAW;oBACnB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;oBACxB,UAAU,EAAE,IAAI;iBACjB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,YAAY,uBAAuB,CAAC,EAAE,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;QACH,CAAC;QAED,cAAc;QACd,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE;YACpD,MAAM,EAAE,WAAW;YACnB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,YAAY,kBAAkB,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IACrG,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,aAAa,CACzB,YAAoB,EACpB,gBAAwB,EACxB,aAAqB,EACrB,WAA0B;QAE1B,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAyB,CAAC;QAC7F,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC;QAC9C,IAAI,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,8BAA8B,UAAU,gBAAgB,IAAI,CAAC,QAAQ,kBAAkB,CAAC,CAAC;YACrG,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,kDAAkD,YAAY,WAAW,gBAAgB,WAAW,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEnJ,SAAS;QACT,MAAM,YAAY,GAAG,SAAS,CAAC,kBAAkB;YAC/C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAkB;YAC3D,CAAC,CAAC,WAAW,CAAC;QAEhB,gBAAgB;QAChB,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAEtE,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBACxC,WAAW,EAAE,YAAY;gBACzB,gBAAgB;gBAChB,aAAa;gBACb,YAAY;gBACZ,eAAe;aAChB,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;gBACvE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,oCAAoC;YACpC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE;gBACpD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAClC,WAAW,EAAE,UAAU,GAAG,CAAC;gBAC3B,mBAAmB,EAAE,gBAAgB,EAAG,kBAAkB;gBAC1D,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,uDAAuD,OAAO,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;YACnG,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"worker-auth-probe.d.ts","sourceRoot":"","sources":["../../../src/capability/executor/worker-auth-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,aAAa,GACb,UAAU,GACV,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAG,eAAe,CAAU;IACzC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;gBAEpB,KAAK,EAAE,eAAe;CAQnC;AAoCD,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,YAAiB,GAAG,eAAe,CAoC3E"}
1
+ {"version":3,"file":"worker-auth-probe.d.ts","sourceRoot":"","sources":["../../../src/capability/executor/worker-auth-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,aAAa,GACb,UAAU,GACV,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAG,eAAe,CAAU;IACzC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;gBAEpB,KAAK,EAAE,eAAe;CAQnC;AAoCD,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,YAAiB,GAAG,eAAe,CA8C3E"}
@@ -19,7 +19,7 @@ export class WorkerAuthError extends Error {
19
19
  probe;
20
20
  constructor(probe) {
21
21
  super(`Background mode requires Claude authentication: ${probe.message}. ` +
22
- 'Set ANTHROPIC_API_KEY env var or run `claude login` first.');
22
+ 'Set ANTHROPIC_API_KEY (or ANTHROPIC_AUTH_TOKEN for third-party proxies), or run `claude login` first.');
23
23
  this.name = 'WorkerAuthError';
24
24
  this.probe = probe;
25
25
  }
@@ -71,6 +71,15 @@ export function probeWorkerAuth(options = {}) {
71
71
  message: 'ANTHROPIC_API_KEY env is set',
72
72
  };
73
73
  }
74
+ // 1b) 第三方代理(如 iFlytek / OneHub)使用 ANTHROPIC_AUTH_TOKEN
75
+ const envToken = process.env.ANTHROPIC_AUTH_TOKEN;
76
+ if (isNonEmptyString(envToken)) {
77
+ return {
78
+ available: true,
79
+ method: 'api-key-env',
80
+ message: 'ANTHROPIC_AUTH_TOKEN env is set',
81
+ };
82
+ }
74
83
  // 2) OAuth credentials 文件
75
84
  const credPath = options.credentialsPath ?? defaultCredentialsPath();
76
85
  if (existsSync(credPath)) {
@@ -92,7 +101,7 @@ export function probeWorkerAuth(options = {}) {
92
101
  return {
93
102
  available: false,
94
103
  method: 'none',
95
- message: 'no ANTHROPIC_API_KEY env and no OAuth credentials on disk ' +
104
+ message: 'no ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN env and no OAuth credentials on disk ' +
96
105
  `(expected ${credPath})`,
97
106
  };
98
107
  }