@zhixuan92/multi-model-agent-core 5.0.2 → 5.1.0

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 (280) hide show
  1. package/README.md +2 -2
  2. package/dist/bounded-execution/cost-compute.js +2 -0
  3. package/dist/bounded-execution/cost-compute.js.map +1 -1
  4. package/dist/bounded-execution/file-artifact-check.js +1 -1
  5. package/dist/bounded-execution/file-artifact-check.js.map +1 -1
  6. package/dist/bounded-execution/progress-events-subscriber.d.ts.map +1 -1
  7. package/dist/bounded-execution/progress-events-subscriber.js +1 -0
  8. package/dist/bounded-execution/progress-events-subscriber.js.map +1 -1
  9. package/dist/bounded-execution/scope-match.d.ts.map +1 -1
  10. package/dist/bounded-execution/scope-match.js +6 -9
  11. package/dist/bounded-execution/scope-match.js.map +1 -1
  12. package/dist/config/load.js +3 -3
  13. package/dist/config/load.js.map +1 -1
  14. package/dist/error-codes.d.ts +1 -0
  15. package/dist/error-codes.d.ts.map +1 -1
  16. package/dist/error-codes.js +12 -0
  17. package/dist/error-codes.js.map +1 -1
  18. package/dist/events/log-writer.d.ts +1 -0
  19. package/dist/events/log-writer.d.ts.map +1 -1
  20. package/dist/events/log-writer.js +2 -0
  21. package/dist/events/log-writer.js.map +1 -1
  22. package/dist/events/plain-log-entry.d.ts +1 -1
  23. package/dist/events/plain-log-entry.d.ts.map +1 -1
  24. package/dist/events/plain-log-entry.js +5 -1
  25. package/dist/events/plain-log-entry.js.map +1 -1
  26. package/dist/events/task-envelope.d.ts +1 -1
  27. package/dist/events/task-envelope.d.ts.map +1 -1
  28. package/dist/events/task-envelope.js +1 -1
  29. package/dist/events/task-envelope.js.map +1 -1
  30. package/dist/events/wire-schema.d.ts +4 -4
  31. package/dist/events/wire-schema.d.ts.map +1 -1
  32. package/dist/events/wire-schema.js +5 -0
  33. package/dist/events/wire-schema.js.map +1 -1
  34. package/dist/identity/claude-oauth.d.ts +1 -4
  35. package/dist/identity/claude-oauth.d.ts.map +1 -1
  36. package/dist/identity/claude-oauth.js +3 -3
  37. package/dist/identity/claude-oauth.js.map +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/journal/types.d.ts +11 -0
  41. package/dist/journal/types.d.ts.map +1 -1
  42. package/dist/journal/types.js.map +1 -1
  43. package/dist/lifecycle/derive-completion.d.ts +4 -0
  44. package/dist/lifecycle/derive-completion.d.ts.map +1 -1
  45. package/dist/lifecycle/derive-completion.js +14 -1
  46. package/dist/lifecycle/derive-completion.js.map +1 -1
  47. package/dist/lifecycle/git-exec.d.ts +62 -0
  48. package/dist/lifecycle/git-exec.d.ts.map +1 -0
  49. package/dist/lifecycle/git-exec.js +135 -0
  50. package/dist/lifecycle/git-exec.js.map +1 -0
  51. package/dist/lifecycle/git-toplevel.d.ts +1 -6
  52. package/dist/lifecycle/git-toplevel.d.ts.map +1 -1
  53. package/dist/lifecycle/git-toplevel.js +17 -38
  54. package/dist/lifecycle/git-toplevel.js.map +1 -1
  55. package/dist/lifecycle/goal-builder.d.ts +35 -0
  56. package/dist/lifecycle/goal-builder.d.ts.map +1 -0
  57. package/dist/lifecycle/goal-builder.js +56 -0
  58. package/dist/lifecycle/goal-builder.js.map +1 -0
  59. package/dist/lifecycle/goal-preconditions.d.ts +21 -0
  60. package/dist/lifecycle/goal-preconditions.d.ts.map +1 -0
  61. package/dist/lifecycle/goal-preconditions.js +33 -0
  62. package/dist/lifecycle/goal-preconditions.js.map +1 -0
  63. package/dist/lifecycle/goal-prompts.d.ts +27 -0
  64. package/dist/lifecycle/goal-prompts.d.ts.map +1 -0
  65. package/dist/lifecycle/goal-prompts.js +204 -0
  66. package/dist/lifecycle/goal-prompts.js.map +1 -0
  67. package/dist/lifecycle/goal-report.d.ts +42 -0
  68. package/dist/lifecycle/goal-report.d.ts.map +1 -0
  69. package/dist/lifecycle/goal-report.js +125 -0
  70. package/dist/lifecycle/goal-report.js.map +1 -0
  71. package/dist/lifecycle/handlers/annotate-stage.d.ts.map +1 -1
  72. package/dist/lifecycle/handlers/annotate-stage.js +29 -0
  73. package/dist/lifecycle/handlers/annotate-stage.js.map +1 -1
  74. package/dist/lifecycle/handlers/implement-stage.d.ts +3 -3
  75. package/dist/lifecycle/handlers/implement-stage.d.ts.map +1 -1
  76. package/dist/lifecycle/handlers/implement-stage.js +50 -3
  77. package/dist/lifecycle/handlers/implement-stage.js.map +1 -1
  78. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts +3 -3
  79. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts.map +1 -1
  80. package/dist/lifecycle/handlers/prepare-execution-context-handler.js +3 -25
  81. package/dist/lifecycle/handlers/prepare-execution-context-handler.js.map +1 -1
  82. package/dist/lifecycle/handlers/review-fix-stage.d.ts +9 -0
  83. package/dist/lifecycle/handlers/review-fix-stage.d.ts.map +1 -0
  84. package/dist/lifecycle/handlers/review-fix-stage.js +75 -0
  85. package/dist/lifecycle/handlers/review-fix-stage.js.map +1 -0
  86. package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
  87. package/dist/lifecycle/handlers/terminal-handlers.js +69 -3
  88. package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
  89. package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
  90. package/dist/lifecycle/lifecycle-driver.js +16 -0
  91. package/dist/lifecycle/lifecycle-driver.js.map +1 -1
  92. package/dist/lifecycle/normalize-output-targets.d.ts.map +1 -1
  93. package/dist/lifecycle/normalize-output-targets.js +2 -4
  94. package/dist/lifecycle/normalize-output-targets.js.map +1 -1
  95. package/dist/lifecycle/perform-implementation.d.ts +1 -11
  96. package/dist/lifecycle/perform-implementation.d.ts.map +1 -1
  97. package/dist/lifecycle/perform-implementation.js +7 -10
  98. package/dist/lifecycle/perform-implementation.js.map +1 -1
  99. package/dist/lifecycle/stage-io.d.ts +0 -23
  100. package/dist/lifecycle/stage-io.d.ts.map +1 -1
  101. package/dist/lifecycle/stage-io.js +0 -11
  102. package/dist/lifecycle/stage-io.js.map +1 -1
  103. package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
  104. package/dist/lifecycle/stage-plan-builder.js +42 -49
  105. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  106. package/dist/lifecycle/stage-plan-types.d.ts +8 -8
  107. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  108. package/dist/lifecycle/stage-plan-types.js.map +1 -1
  109. package/dist/lifecycle/stage-progression.d.ts +1 -0
  110. package/dist/lifecycle/stage-progression.d.ts.map +1 -1
  111. package/dist/lifecycle/stage-progression.js +13 -0
  112. package/dist/lifecycle/stage-progression.js.map +1 -1
  113. package/dist/lifecycle/task-executor.d.ts +1 -8
  114. package/dist/lifecycle/task-executor.d.ts.map +1 -1
  115. package/dist/lifecycle/task-executor.js +69 -5
  116. package/dist/lifecycle/task-executor.js.map +1 -1
  117. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  118. package/dist/lifecycle/task-runner.js +3 -1
  119. package/dist/lifecycle/task-runner.js.map +1 -1
  120. package/dist/lifecycle/worker-output-contract.d.ts.map +1 -1
  121. package/dist/lifecycle/worker-output-contract.js +3 -1
  122. package/dist/lifecycle/worker-output-contract.js.map +1 -1
  123. package/dist/lifecycle/write-goal-lock.d.ts +29 -0
  124. package/dist/lifecycle/write-goal-lock.d.ts.map +1 -0
  125. package/dist/lifecycle/write-goal-lock.js +70 -0
  126. package/dist/lifecycle/write-goal-lock.js.map +1 -0
  127. package/dist/providers/claude-session.d.ts +0 -2
  128. package/dist/providers/claude-session.d.ts.map +1 -1
  129. package/dist/providers/claude-session.js +16 -2
  130. package/dist/providers/claude-session.js.map +1 -1
  131. package/dist/providers/claude.d.ts.map +1 -1
  132. package/dist/providers/codex-cli-session.d.ts.map +1 -1
  133. package/dist/providers/codex-cli-session.js.map +1 -1
  134. package/dist/providers/codex.d.ts.map +1 -1
  135. package/dist/providers/normalize-claude.js.map +1 -1
  136. package/dist/reporting/headline-composer.d.ts +11 -0
  137. package/dist/reporting/headline-composer.d.ts.map +1 -1
  138. package/dist/reporting/headline-composer.js +9 -1
  139. package/dist/reporting/headline-composer.js.map +1 -1
  140. package/dist/reporting/report-parser-slots/investigate-report.d.ts.map +1 -1
  141. package/dist/reporting/report-parser-slots/investigate-report.js +1 -0
  142. package/dist/reporting/report-parser-slots/investigate-report.js.map +1 -1
  143. package/dist/reporting/structured-report-parser.d.ts +5 -0
  144. package/dist/reporting/structured-report-parser.d.ts.map +1 -1
  145. package/dist/reporting/structured-report-parser.js +7 -1
  146. package/dist/reporting/structured-report-parser.js.map +1 -1
  147. package/dist/research/adapters/arxiv.d.ts.map +1 -1
  148. package/dist/research/adapters/arxiv.js +12 -7
  149. package/dist/research/adapters/arxiv.js.map +1 -1
  150. package/dist/research/adapters/github-search.d.ts.map +1 -1
  151. package/dist/research/adapters/github-search.js +10 -9
  152. package/dist/research/adapters/github-search.js.map +1 -1
  153. package/dist/research/adapters/semantic-scholar.d.ts.map +1 -1
  154. package/dist/research/adapters/semantic-scholar.js +7 -7
  155. package/dist/research/adapters/semantic-scholar.js.map +1 -1
  156. package/dist/research/index.js +0 -7
  157. package/dist/research/index.js.map +1 -1
  158. package/dist/research/web-search.d.ts.map +1 -1
  159. package/dist/research/web-search.js +11 -6
  160. package/dist/research/web-search.js.map +1 -1
  161. package/dist/tools/audit/tool-config.d.ts +1 -1
  162. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  163. package/dist/tools/debug/tool-config.d.ts +1 -1
  164. package/dist/tools/debug/tool-config.d.ts.map +1 -1
  165. package/dist/tools/debug/tool-config.js.map +1 -1
  166. package/dist/tools/delegate/brief-slot.d.ts +14 -11
  167. package/dist/tools/delegate/brief-slot.d.ts.map +1 -1
  168. package/dist/tools/delegate/brief-slot.js +29 -53
  169. package/dist/tools/delegate/brief-slot.js.map +1 -1
  170. package/dist/tools/delegate/schema.d.ts +0 -4
  171. package/dist/tools/delegate/schema.d.ts.map +1 -1
  172. package/dist/tools/delegate/schema.js +3 -2
  173. package/dist/tools/delegate/schema.js.map +1 -1
  174. package/dist/tools/delegate/tool-config.d.ts +1 -1
  175. package/dist/tools/delegate/tool-config.d.ts.map +1 -1
  176. package/dist/tools/delegate/tool-config.js +20 -17
  177. package/dist/tools/delegate/tool-config.js.map +1 -1
  178. package/dist/tools/execute-plan/brief-slot.d.ts +11 -5
  179. package/dist/tools/execute-plan/brief-slot.d.ts.map +1 -1
  180. package/dist/tools/execute-plan/brief-slot.js +59 -15
  181. package/dist/tools/execute-plan/brief-slot.js.map +1 -1
  182. package/dist/tools/execute-plan/tool-config.d.ts +1 -1
  183. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  184. package/dist/tools/execute-plan/tool-config.js +18 -67
  185. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  186. package/dist/tools/investigate/tool-config.d.ts +1 -1
  187. package/dist/tools/investigate/tool-config.d.ts.map +1 -1
  188. package/dist/tools/investigate/tool-config.js.map +1 -1
  189. package/dist/tools/journal/recall/tool-config.d.ts +1 -1
  190. package/dist/tools/journal/recall/tool-config.d.ts.map +1 -1
  191. package/dist/tools/journal/record/brief-slot.d.ts +9 -6
  192. package/dist/tools/journal/record/brief-slot.d.ts.map +1 -1
  193. package/dist/tools/journal/record/brief-slot.js +18 -14
  194. package/dist/tools/journal/record/brief-slot.js.map +1 -1
  195. package/dist/tools/journal/record/tool-config.d.ts +1 -1
  196. package/dist/tools/journal/record/tool-config.d.ts.map +1 -1
  197. package/dist/tools/journal/record/tool-config.js +18 -11
  198. package/dist/tools/journal/record/tool-config.js.map +1 -1
  199. package/dist/tools/register-context-block/tool-config.d.ts +1 -1
  200. package/dist/tools/register-context-block/tool-config.d.ts.map +1 -1
  201. package/dist/tools/research/tool-config.d.ts +1 -1
  202. package/dist/tools/research/tool-config.d.ts.map +1 -1
  203. package/dist/tools/research/two-turn-driver.d.ts.map +1 -1
  204. package/dist/tools/research/two-turn-driver.js.map +1 -1
  205. package/dist/tools/retry/brief-slot.d.ts +1 -1
  206. package/dist/tools/retry/brief-slot.d.ts.map +1 -1
  207. package/dist/tools/retry/brief-slot.js +2 -1
  208. package/dist/tools/retry/brief-slot.js.map +1 -1
  209. package/dist/tools/retry/schema.d.ts +0 -1
  210. package/dist/tools/retry/schema.d.ts.map +1 -1
  211. package/dist/tools/retry/schema.js +6 -6
  212. package/dist/tools/retry/schema.js.map +1 -1
  213. package/dist/tools/retry/tool-config.d.ts +1 -1
  214. package/dist/tools/retry/tool-config.d.ts.map +1 -1
  215. package/dist/tools/retry/tool-config.js +23 -28
  216. package/dist/tools/retry/tool-config.js.map +1 -1
  217. package/dist/tools/review/tool-config.d.ts +1 -1
  218. package/dist/tools/review/tool-config.d.ts.map +1 -1
  219. package/dist/tools/review/tool-config.js.map +1 -1
  220. package/dist/transport/http-listener.d.ts +7 -8
  221. package/dist/transport/http-listener.d.ts.map +1 -1
  222. package/dist/transport/http-listener.js +20 -21
  223. package/dist/transport/http-listener.js.map +1 -1
  224. package/dist/types/goal.d.ts +47 -0
  225. package/dist/types/goal.d.ts.map +1 -0
  226. package/dist/types/goal.js +2 -0
  227. package/dist/types/goal.js.map +1 -0
  228. package/dist/types/task-spec.d.ts +11 -0
  229. package/dist/types/task-spec.d.ts.map +1 -1
  230. package/dist/types.d.ts +1 -0
  231. package/dist/types.d.ts.map +1 -1
  232. package/package.json +3 -49
  233. package/dist/lifecycle/diff-tracker.d.ts +0 -88
  234. package/dist/lifecycle/diff-tracker.d.ts.map +0 -1
  235. package/dist/lifecycle/diff-tracker.js +0 -429
  236. package/dist/lifecycle/diff-tracker.js.map +0 -1
  237. package/dist/lifecycle/handlers/compose-commit-message.d.ts +0 -15
  238. package/dist/lifecycle/handlers/compose-commit-message.d.ts.map +0 -1
  239. package/dist/lifecycle/handlers/compose-commit-message.js +0 -227
  240. package/dist/lifecycle/handlers/compose-commit-message.js.map +0 -1
  241. package/dist/lifecycle/handlers/git-commit-handler.d.ts +0 -4
  242. package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +0 -1
  243. package/dist/lifecycle/handlers/git-commit-handler.js +0 -210
  244. package/dist/lifecycle/handlers/git-commit-handler.js.map +0 -1
  245. package/dist/lifecycle/handlers/journal-review-prompt.d.ts +0 -7
  246. package/dist/lifecycle/handlers/journal-review-prompt.d.ts.map +0 -1
  247. package/dist/lifecycle/handlers/journal-review-prompt.js +0 -54
  248. package/dist/lifecycle/handlers/journal-review-prompt.js.map +0 -1
  249. package/dist/lifecycle/handlers/parse-review-report.d.ts +0 -15
  250. package/dist/lifecycle/handlers/parse-review-report.d.ts.map +0 -1
  251. package/dist/lifecycle/handlers/parse-review-report.js +0 -40
  252. package/dist/lifecycle/handlers/parse-review-report.js.map +0 -1
  253. package/dist/lifecycle/handlers/quality-review-prompt.d.ts +0 -7
  254. package/dist/lifecycle/handlers/quality-review-prompt.d.ts.map +0 -1
  255. package/dist/lifecycle/handlers/quality-review-prompt.js +0 -50
  256. package/dist/lifecycle/handlers/quality-review-prompt.js.map +0 -1
  257. package/dist/lifecycle/handlers/review-stage.d.ts +0 -4
  258. package/dist/lifecycle/handlers/review-stage.d.ts.map +0 -1
  259. package/dist/lifecycle/handlers/review-stage.js +0 -277
  260. package/dist/lifecycle/handlers/review-stage.js.map +0 -1
  261. package/dist/lifecycle/handlers/rework-prompt.d.ts +0 -6
  262. package/dist/lifecycle/handlers/rework-prompt.d.ts.map +0 -1
  263. package/dist/lifecycle/handlers/rework-prompt.js +0 -18
  264. package/dist/lifecycle/handlers/rework-prompt.js.map +0 -1
  265. package/dist/lifecycle/handlers/rework-stage.d.ts +0 -4
  266. package/dist/lifecycle/handlers/rework-stage.d.ts.map +0 -1
  267. package/dist/lifecycle/handlers/rework-stage.js +0 -191
  268. package/dist/lifecycle/handlers/rework-stage.js.map +0 -1
  269. package/dist/lifecycle/handlers/spec-review-prompt.d.ts +0 -8
  270. package/dist/lifecycle/handlers/spec-review-prompt.d.ts.map +0 -1
  271. package/dist/lifecycle/handlers/spec-review-prompt.js +0 -47
  272. package/dist/lifecycle/handlers/spec-review-prompt.js.map +0 -1
  273. package/dist/lifecycle/handlers/tier-policy.d.ts +0 -11
  274. package/dist/lifecycle/handlers/tier-policy.d.ts.map +0 -1
  275. package/dist/lifecycle/handlers/tier-policy.js +0 -12
  276. package/dist/lifecycle/handlers/tier-policy.js.map +0 -1
  277. package/dist/lifecycle/repo-commit-lock.d.ts +0 -20
  278. package/dist/lifecycle/repo-commit-lock.d.ts.map +0 -1
  279. package/dist/lifecycle/repo-commit-lock.js +0 -40
  280. package/dist/lifecycle/repo-commit-lock.js.map +0 -1
@@ -1,50 +0,0 @@
1
- const OUTPUT_FORMAT = `Output format (mandatory):
2
-
3
- ## Verdict
4
- approved | changes_required
5
-
6
- ## Finding N: <one-line claim for this finding>
7
- - Severity: critical | high | medium | low
8
- - Category: <category name>
9
- - Evidence: <one concrete symptom or risk — quote source line or describe observable bad behaviour>
10
- - Suggestion: <specific, actionable fix — not a general nudge>
11
-
12
- ## Finding N+1: ...
13
- (omit section entirely if approved)
14
-
15
- ## Outcome
16
- found | clean
17
-
18
- Rules:
19
- - "approved" when the code is safe and correct enough to ship. Style nits do NOT block.
20
- - "changes_required" only for substantive risks (null-handling gap, missing error path, real edge case, security surface, etc.).
21
- - Each finding must be specific enough that a rework worker can act on it without re-deriving.
22
- - If approved, write "## Verdict\napproved" and omit the ## Finding sections entirely; then "## Outcome\nclean".
23
- - If changes_required, write "## Outcome\nfound".
24
- - Do NOT use editor tools. Read-only investigation only.
25
-
26
- **Severity definitions (per quality-review):**
27
- - **critical:** Will break in production
28
- - **high:** Correctness gap in normal use
29
- - **medium:** Maintainability/fragility
30
- - **low:** Style`;
31
- export function qualityReviewPrompt(ctx) {
32
- const diffContent = ctx.diff && ctx.diff.trim() ? ctx.diff : '(no diff available)';
33
- return `You are the quality reviewer for this task.
34
-
35
- Brief: ${ctx.brief}
36
-
37
- Worker said: ${ctx.workerSummary}
38
-
39
- Files changed: ${ctx.filesChanged.join(', ') || '(none)'}
40
-
41
- Diff (authoritative — what actually changed on disk):
42
- ${diffContent}
43
-
44
- Guardrails:
45
- - do NOT claim files missing/untracked — the diff is authoritative
46
- - test status is in Worker said; don't infer skipped from diff
47
-
48
- ${OUTPUT_FORMAT}`;
49
- }
50
- //# sourceMappingURL=quality-review-prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quality-review-prompt.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/quality-review-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BL,CAAC;AAElB,MAAM,UAAU,mBAAmB,CAAC,GAAoF;IACtH,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACnF,OAAO;;SAEA,GAAG,CAAC,KAAK;;eAEH,GAAG,CAAC,aAAa;;iBAEf,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ;;;EAGtD,WAAW;;;;;;EAMX,aAAa,EAAE,CAAC;AAClB,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { LifecycleState } from '../stage-plan-types.js';
2
- import type { StageGate, ReviewPayload } from '../stage-io.js';
3
- export declare function reviewHandler(state: LifecycleState): Promise<StageGate<ReviewPayload>>;
4
- //# sourceMappingURL=review-stage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review-stage.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/review-stage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAW,MAAM,gBAAgB,CAAC;AA0BxE,wBAAsB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CA0M5F"}
@@ -1,277 +0,0 @@
1
- import { specReviewPrompt } from './spec-review-prompt.js';
2
- import { qualityReviewPrompt } from './quality-review-prompt.js';
3
- import { journalReviewPrompt } from './journal-review-prompt.js';
4
- import { parseReviewReport } from './parse-review-report.js';
5
- import { invertedReviewerTier } from './tier-policy.js';
6
- import { HUMAN_LABEL } from '../stage-labels.js';
7
- import { mergeStageStats } from '../merge-stage-stats.js';
8
- // Max UTF-8 bytes of cumulative diff fed to the reviewer prompt. An independent
9
- // review-stage concern — kept local rather than borrowing the plan tool's
10
- // SLICE_CAP_BYTES (which caps plan-section extraction for a different reason),
11
- // so this pipeline handler carries no dependency on the tools layer.
12
- const REVIEW_DIFF_CAP_BYTES = 30 * 1024;
13
- function parseOutcomeFromText(text) {
14
- const outcomeMatch = text.match(/^##\s*outcome\s*$/im);
15
- if (!outcomeMatch)
16
- return null;
17
- const after = text.slice(outcomeMatch.index + outcomeMatch[0].length);
18
- const firstLine = after.split('\n').map(s => s.trim()).find(s => s.length > 0) ?? '';
19
- if (/found/i.test(firstLine))
20
- return 'found';
21
- if (/clean/i.test(firstLine))
22
- return 'clean';
23
- return null;
24
- }
25
- export async function reviewHandler(state) {
26
- const t0 = Date.now();
27
- const policy = state.reviewPolicy; // 'full' | 'quality_only' | 'diff_only' | 'none'
28
- // v5 review-policy mapping (per spec §14 assumption 2 — adapted to v4 enum):
29
- // 'full' → run BOTH spec + quality
30
- // 'quality_only' → run ONLY quality
31
- // 'diff_only' → run ONLY spec (spec reviewer is the closest analog)
32
- // 'none' → skip (handled upstream)
33
- const runSpec = policy === 'full' || policy === 'diff_only';
34
- const runQuality = policy === 'full' || policy === 'quality_only';
35
- const impl = (state.gates?.['implement']?.payload ?? {});
36
- const briefObj = (state.task ?? {});
37
- const briefStr = briefObj.brief ?? '';
38
- let cumulativeDiff = '';
39
- if (state.diffTracker) {
40
- try {
41
- cumulativeDiff = await state.diffTracker.cumulativeDiff();
42
- }
43
- catch { /* tolerated */ }
44
- }
45
- // Truncate diff to REVIEW_DIFF_CAP_BYTES by UTF-8 byte length, reserving space for the truncation marker
46
- const truncationMarker = '[diff truncated]';
47
- const diffBytes = Buffer.byteLength(cumulativeDiff, 'utf8');
48
- if (diffBytes > REVIEW_DIFF_CAP_BYTES) {
49
- const markerBytes = Buffer.byteLength(truncationMarker, 'utf8');
50
- const availableBytes = REVIEW_DIFF_CAP_BYTES - markerBytes;
51
- // Truncate by finding the right position in UTF-8
52
- let truncated = '';
53
- let byteCount = 0;
54
- for (const char of cumulativeDiff) {
55
- const charBytes = Buffer.byteLength(char, 'utf8');
56
- if (byteCount + charBytes > availableBytes)
57
- break;
58
- truncated += char;
59
- byteCount += charBytes;
60
- }
61
- cumulativeDiff = truncated + truncationMarker;
62
- }
63
- const context = {
64
- brief: briefStr,
65
- workerSummary: (impl?.summary ?? ""),
66
- filesChanged: impl.filesChanged ?? [],
67
- diff: cumulativeDiff,
68
- };
69
- const subResults = [];
70
- // Cross-tier inversion (per design): reviewer runs on the opposite tier of
71
- // the implementer. Read implementer tier from the executionContext; fall
72
- // back to inferring from the implementing stage's gate payload, then
73
- // 'standard' if neither is known (defensive — matches legacy default).
74
- const implementerTier = state.executionContext?.assignedTier
75
- ?? (state.gates?.['implement']?.payload?.agentTier)
76
- ?? 'standard';
77
- const resolvedReviewerTier = invertedReviewerTier(implementerTier);
78
- // journal-record produces markdown ADR nodes, not code — a single
79
- // node-validation review (frontmatter/edges/schema/confinement/dedup)
80
- // replaces the code-oriented spec+quality pair, which mis-fits markdown.
81
- if (state.route === 'journal-record') {
82
- const r = await runReviewerWithRetries(state, journalReviewPrompt(context), implementerTier);
83
- subResults.push({
84
- name: 'quality', result: r.parsed, cost: r.costUSD, ms: r.ms,
85
- model: r.model,
86
- inputTokens: r.inputTokens, outputTokens: r.outputTokens,
87
- cachedReadTokens: r.cachedReadTokens, cachedNonReadTokens: r.cachedNonReadTokens,
88
- turnsUsed: r.turnsUsed,
89
- turn: r.turn,
90
- });
91
- }
92
- else {
93
- if (runSpec) {
94
- const r = await runReviewerWithRetries(state, specReviewPrompt(context), implementerTier);
95
- subResults.push({
96
- name: 'spec', result: r.parsed, cost: r.costUSD, ms: r.ms,
97
- model: r.model,
98
- inputTokens: r.inputTokens, outputTokens: r.outputTokens,
99
- cachedReadTokens: r.cachedReadTokens, cachedNonReadTokens: r.cachedNonReadTokens,
100
- turnsUsed: r.turnsUsed,
101
- turn: r.turn,
102
- });
103
- }
104
- if (runQuality) {
105
- const r = await runReviewerWithRetries(state, qualityReviewPrompt(context), implementerTier);
106
- subResults.push({
107
- name: 'quality', result: r.parsed, cost: r.costUSD, ms: r.ms,
108
- model: r.model,
109
- inputTokens: r.inputTokens, outputTokens: r.outputTokens,
110
- cachedReadTokens: r.cachedReadTokens, cachedNonReadTokens: r.cachedNonReadTokens,
111
- turnsUsed: r.turnsUsed,
112
- turn: r.turn,
113
- });
114
- }
115
- }
116
- const succeeded = subResults.filter(s => s.result.verdict).map(s => s.name);
117
- const errored = subResults.filter(s => !s.result.verdict).map(s => ({
118
- reviewer: s.name, error: s.result.parseError ?? 'unknown',
119
- }));
120
- const findings = [];
121
- let nextId = 1;
122
- for (const s of subResults) {
123
- for (const f of s.result.findings ?? []) {
124
- findings.push({ ...f, id: `F${nextId++}`, source: 'reviewer' });
125
- }
126
- }
127
- // Aggregate outcomes from sub-reviewers. If any reviewer found issues, overall outcome = 'found'.
128
- const subOutcomes = [];
129
- for (const s of subResults) {
130
- const outcome = s.turn && s.turn.text ? parseOutcomeFromText(s.turn.text) : null;
131
- if (outcome) {
132
- subOutcomes.push(outcome);
133
- }
134
- }
135
- const findingsOutcome = subOutcomes.some(o => o === 'found') ? 'found' : 'clean';
136
- // Combined verdict: approved iff EVERY configured reviewer returned approved.
137
- let verdict;
138
- if (succeeded.length === 0) {
139
- verdict = 'changes_required';
140
- findings.push({
141
- id: `F${nextId++}`, severity: 'high', category: 'reviewer-availability',
142
- claim: 'All configured reviewers failed to parse their output; defaulting to changes_required.',
143
- evidence: errored.map(e => `${e.reviewer}: ${e.error}`).join(' | '),
144
- source: 'reviewer',
145
- });
146
- }
147
- else if (subResults.some(s => s.result.verdict === 'changes_required')) {
148
- verdict = 'changes_required';
149
- }
150
- else if (errored.length > 0) {
151
- // Mixed: some approved, some errored.
152
- verdict = 'changes_required';
153
- for (const e of errored) {
154
- findings.push({
155
- id: `F${nextId++}`, severity: 'high', category: 'reviewer-availability',
156
- claim: `Reviewer ${e.reviewer} failed to parse; treating as changes_required.`,
157
- evidence: e.error.length >= 20 ? e.error : `parse error: ${e.error}`,
158
- source: 'reviewer',
159
- });
160
- }
161
- }
162
- else {
163
- verdict = 'approved';
164
- }
165
- const totalCost = subResults.reduce((s, x) => s + (x.cost ?? 0), 0);
166
- const totalMs = subResults.reduce((s, x) => s + x.ms, 0);
167
- const totalInput = subResults.reduce((s, x) => s + x.inputTokens, 0);
168
- const totalOutput = subResults.reduce((s, x) => s + x.outputTokens, 0);
169
- const totalCachedRead = subResults.reduce((s, x) => s + x.cachedReadTokens, 0);
170
- const totalCachedNonRead = subResults.reduce((s, x) => s + x.cachedNonReadTokens, 0);
171
- const totalTurns = subResults.reduce((s, x) => s + x.turnsUsed, 0);
172
- // Both reviewers run on the standard tier through the same Session — same
173
- // canonical model in practice. Pick the first non-null.
174
- const reviewerModel = subResults.find(s => s.model !== null)?.model ?? null;
175
- // Write reviewer stage stats so event-builder.buildReviewStage(rr.stageStats?.review)
176
- // produces a real stage entry instead of returning null. Without this, the
177
- // review stage was silently invisible in telemetry for reviewPolicy=full runs.
178
- if (subResults.length > 0) {
179
- mergeStageStats(state, 'review', {
180
- inputTokens: totalInput,
181
- outputTokens: totalOutput,
182
- cachedReadTokens: totalCachedRead,
183
- cachedNonReadTokens: totalCachedNonRead,
184
- turnCount: totalTurns,
185
- costUSD: totalCost,
186
- durationMs: Math.max(totalMs, Date.now() - t0),
187
- filesWrittenCount: 0,
188
- }, { tier: resolvedReviewerTier, model: reviewerModel, verdict, findingsOutcome });
189
- // ↑ Pass the combined verdict so it flows: review-stage → mergeStageStats →
190
- // state.lastRunResult.stageStats.review.verdict → lifecycle-driver.completeStage →
191
- // envelope.stages[review].verdict → to-wire-record stages[review].verdict.
192
- // Without this, the wire row always shows verdict='skipped' even when
193
- // review ran with real cost + findings.
194
- }
195
- return {
196
- outcome: 'advance',
197
- payload: { verdict, findings, reviewersSucceeded: succeeded, reviewersErrored: errored, findingsOutcome },
198
- telemetry: {
199
- stageLabel: 'review',
200
- durationMs: Math.max(totalMs, Date.now() - t0),
201
- costUSD: totalCost > 0 ? totalCost : null,
202
- turnsUsed: subResults.length,
203
- stopReason: 'normal',
204
- },
205
- };
206
- }
207
- async function runReviewerWithRetries(state, prompt, implementerTier) {
208
- const desired = invertedReviewerTier(implementerTier);
209
- const providers = state.executionContext.providers;
210
- const tierToUse = providers && providers[desired] ? desired : implementerTier;
211
- // Capture the actual reviewer model from the provider config for this tier
212
- // — TurnResult doesn't carry model, and the session's getSession(tierToUse)
213
- // is what determines which provider config is in use. Without this lookup,
214
- // the wire row would attribute reviewer cost+tokens to a null model.
215
- const reviewerModelFromConfig = providers?.[tierToUse]?.config?.model ?? null;
216
- const session = state.executionContext.getSession(tierToUse);
217
- let reviewerResult;
218
- try {
219
- const r = await session.send(prompt, { stageLabel: HUMAN_LABEL.review });
220
- reviewerResult = {
221
- kind: 'ok',
222
- text: r.output ?? '',
223
- costUSD: r.costUSD ?? null,
224
- turnsUsed: r.turns ?? 1,
225
- ms: 0, // (the wrapper measured this; if downstream needs it, capture Date.now())
226
- model: reviewerModelFromConfig,
227
- inputTokens: r.usage?.inputTokens ?? 0,
228
- outputTokens: r.usage?.outputTokens ?? 0,
229
- cachedReadTokens: r.usage?.cachedReadTokens ?? 0,
230
- cachedNonReadTokens: r.usage?.cachedNonReadTokens ?? 0,
231
- };
232
- }
233
- catch (err) {
234
- const msg = err instanceof Error ? err.message : String(err);
235
- reviewerResult = { kind: 'transport_error', message: msg, ms: 0 };
236
- }
237
- if (reviewerResult.kind === 'transport_error') {
238
- // Final failure surfaces as a parse-failure shape so the aggregator treats
239
- // this reviewer as errored — same downstream effect as an unparseable response.
240
- return {
241
- parsed: { verdict: undefined, findings: [], parseError: reviewerResult.message },
242
- costUSD: null,
243
- ms: reviewerResult.ms,
244
- model: reviewerModelFromConfig,
245
- inputTokens: 0,
246
- outputTokens: 0,
247
- cachedReadTokens: 0,
248
- cachedNonReadTokens: 0,
249
- turnsUsed: 0,
250
- turn: reviewerResult,
251
- };
252
- }
253
- const ctx = state.executionContext;
254
- const warnSink = (event, data) => {
255
- try {
256
- ctx?.envelope?.recordValidationWarning?.({
257
- rule: event,
258
- path: `${data['reasonCode'] ?? 'unknown'}:${String(data['droppedFindingHeading'] ?? '').slice(0, 120)}`,
259
- });
260
- }
261
- catch { /* sealed envelope — harmless */ }
262
- };
263
- const parsed = parseReviewReport(reviewerResult.text, undefined, warnSink);
264
- return {
265
- parsed,
266
- costUSD: reviewerResult.costUSD,
267
- ms: reviewerResult.ms,
268
- model: reviewerResult.model,
269
- inputTokens: reviewerResult.inputTokens,
270
- outputTokens: reviewerResult.outputTokens,
271
- cachedReadTokens: reviewerResult.cachedReadTokens,
272
- cachedNonReadTokens: reviewerResult.cachedNonReadTokens,
273
- turnsUsed: reviewerResult.turnsUsed,
274
- turn: reviewerResult,
275
- };
276
- }
277
- //# sourceMappingURL=review-stage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review-stage.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/review-stage.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export interface ReworkPromptContext {
2
- brief?: string;
3
- priorConcerns?: string[];
4
- }
5
- export declare function reworkPrompt(ctx: ReworkPromptContext): string;
6
- //# sourceMappingURL=rework-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rework-prompt.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/rework-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAmB7D"}
@@ -1,18 +0,0 @@
1
- export function reworkPrompt(ctx) {
2
- const parts = [];
3
- if (ctx.priorConcerns && ctx.priorConcerns.length > 0) {
4
- parts.push(`# Reviewer deviations to fix\n${ctx.priorConcerns
5
- .map((c, i) => `${i + 1}. ${c}`)
6
- .join('\n')}`);
7
- }
8
- else {
9
- parts.push('# Reviewer deviations to fix\n(none — should not have reached this stage; end immediately)');
10
- }
11
- parts.push('# Action\n' +
12
- '1. Fix each deviation in order.\n' +
13
- '2. Apply one edit call per file. Do not re-read after editing.\n' +
14
- '3. Write your summary and end your turn.\n' +
15
- '4. In your final WorkerOutput JSON: set workerStatus to "done" if your "Could not fix" line is empty (every listed deviation was addressed). Reserve "failed" / "blocked" for deviations you could not address — having had concerns to begin with is not, in itself, a concern.');
16
- return parts.join('\n\n');
17
- }
18
- //# sourceMappingURL=rework-prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rework-prompt.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/rework-prompt.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,YAAY,CAAC,GAAwB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,iCAAiC,GAAG,CAAC,aAAa;aAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;IAC3G,CAAC;IACD,KAAK,CAAC,IAAI,CACR,YAAY;QACZ,mCAAmC;QACnC,kEAAkE;QAClE,4CAA4C;QAC5C,kRAAkR,CACnR,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { LifecycleState } from '../stage-plan-types.js';
2
- import type { StageGate, ReworkPayload } from '../stage-io.js';
3
- export declare function reworkHandler(state: LifecycleState): Promise<StageGate<ReworkPayload | null>>;
4
- //# sourceMappingURL=rework-stage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rework-stage.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/rework-stage.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAK7D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA2B/D,wBAAsB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CA0KnG"}
@@ -1,191 +0,0 @@
1
- // v4.4.x — Rework stage.
2
- //
3
- // Fires only when reviewVerdict === 'changes_required'. Runs on the
4
- // same standard session that did Implementing (full conversation
5
- // continuity). Worker is asked to address the reviewer's concerns.
6
- // Rework's WorkerOutput merges onto Implementing's per the spec's
7
- // "Rework → Implementing field merge rules": summary/workerStatus/unresolved/commitMessage take Rework's
8
- // values; filesChanged is the union of both phases.
9
- import { reviewPayload } from '../stage-plan-types.js';
10
- import { replaceLastRunResultPreservingTrackers, mergeStageStats } from '../merge-stage-stats.js';
11
- import { reworkPrompt } from './rework-prompt.js';
12
- import { buildWarmFollowupMessage } from '../warm-followup.js';
13
- import { assembleRunResult } from '../../providers/assemble-run-result.js';
14
- import { parseWorkerOutput } from '../worker-output-contract.js';
15
- import { HUMAN_LABEL } from '../stage-labels.js';
16
- import { startProgressWatchdog, recordPostHocSignals } from '../../bounded-execution/progress-watchdog.js';
17
- function reworkSkip(comment, t0) {
18
- return {
19
- outcome: 'skip',
20
- comment,
21
- payload: null,
22
- telemetry: { stageLabel: 'rework', durationMs: Date.now() - t0, costUSD: 0, turnsUsed: 0, stopReason: 'normal' },
23
- };
24
- }
25
- function reworkHalt(comment, t0) {
26
- return {
27
- outcome: 'halt',
28
- comment,
29
- payload: null,
30
- telemetry: { stageLabel: 'rework', durationMs: Date.now() - t0, costUSD: 0, turnsUsed: 0, stopReason: 'transport_error' },
31
- };
32
- }
33
- export async function reworkHandler(state) {
34
- const t0 = Date.now();
35
- if (state.terminal)
36
- return reworkSkip('rework skipped: terminal', t0);
37
- if (state.reworkApplied !== undefined || state.reworkError !== undefined) {
38
- return reworkSkip('rework already applied', t0);
39
- }
40
- if (reviewPayload(state).verdict !== 'changes_required') {
41
- return reworkSkip('rework skipped: review verdict is not changes_required', t0);
42
- }
43
- const ctx = state.executionContext;
44
- const task = state.task;
45
- const last = state.lastRunResult;
46
- if (!ctx || !task || !last)
47
- return reworkSkip('rework skipped: missing context', t0);
48
- const findings = reviewPayload(state).findings;
49
- if (findings.length === 0) {
50
- state.reworkApplied = false;
51
- return reworkSkip('rework skipped: review produced no findings', t0);
52
- }
53
- let cumulativeDiff = '';
54
- if (state.diffTracker) {
55
- try {
56
- cumulativeDiff = await state.diffTracker.cumulativeDiff();
57
- }
58
- catch { /* tolerated */ }
59
- }
60
- // Rework matches the implementer's tier — rework's job is to FIX the
61
- // implementer's work, so it needs the same capability. Read implementer
62
- // tier from executionContext.assignedTier; fall back to the implementing
63
- // stage's gate payload, then 'standard' as a defensive last resort.
64
- // Final fallback: if the matched tier has no provider configured, use
65
- // whichever tier does (parity with reviewer's fallback behavior).
66
- const desiredReworkTier = ctx.assignedTier
67
- ?? (state.gates?.['implement']?.payload?.agentTier)
68
- ?? 'standard';
69
- const reworkTier = ctx.providers[desiredReworkTier]
70
- ? desiredReworkTier
71
- : (ctx.providers['standard'] ? 'standard' : 'complex');
72
- const provider = ctx.providers[reworkTier];
73
- if (!provider) {
74
- state.reworkError = `no provider available for tier ${reworkTier}`;
75
- return reworkHalt(`no provider available for tier ${reworkTier}`, t0);
76
- }
77
- const concerns = findings.map((f) => `[${f.source}] ${f.text}`);
78
- const promptCtx = {
79
- brief: task.prompt ?? '',
80
- workerOutput: last.output ?? '',
81
- diff: cumulativeDiff,
82
- planContext: task.planContext,
83
- priorConcerns: concerns,
84
- };
85
- // Rework always resumes the implementer's thread — the systemPrompt,
86
- // brief, prior output, and cumulative diff are already in conversation
87
- // history. We send only the new instruction (reviewer deviations +
88
- // fix action) wrapped in the standard warm-followup preamble.
89
- const fullPrompt = buildWarmFollowupMessage(reworkPrompt(promptCtx))
90
- + '\n\nDo NOT run git history-mutating commands (commit / add / push / reset / rebase / etc.) — the Committing stage will handle persistence at the end.';
91
- let result;
92
- // Wire progress watchdog around the rework session.send.
93
- const wdConfig = {
94
- enabled: ctx.config?.defaults?.progressWatchdogEnabled ?? true,
95
- thrashTurns: ctx.config?.defaults?.thrashTurns ?? 25,
96
- thrashWallClockMs: ctx.config?.defaults?.thrashWallClockMs ?? 1_200_000,
97
- thrashSoftWallClockMs: 600_000,
98
- };
99
- const wdState2 = { fired: false };
100
- const wdController = ctx.stall.controller;
101
- let disposeWd;
102
- if (wdConfig.enabled) {
103
- disposeWd = startProgressWatchdog({
104
- state,
105
- controller: wdController,
106
- emit: (_event) => { },
107
- config: wdConfig,
108
- taskIndex: ctx.taskIndex,
109
- batchId: ctx.batchId,
110
- state2: wdState2,
111
- });
112
- }
113
- let turn;
114
- try {
115
- const session = ctx.getSession(reworkTier);
116
- turn = await session.send(fullPrompt, { stageLabel: HUMAN_LABEL.rework });
117
- result = assembleRunResult(turn);
118
- }
119
- catch (err) {
120
- state.reworkError = err instanceof Error ? err.message : String(err);
121
- disposeWd?.();
122
- return reworkHalt(`rework session.send failed: ${state.reworkError}`, t0);
123
- }
124
- finally {
125
- disposeWd?.();
126
- }
127
- if (wdConfig.enabled && turn !== undefined) {
128
- await recordPostHocSignals(state, turn.turns ?? 0, wdConfig, (_event) => { }, ctx.taskIndex, ctx.batchId);
129
- }
130
- if (result.status !== 'ok') {
131
- state.reworkError = `rework returned status: ${result.status}`;
132
- return reworkHalt(state.reworkError, t0);
133
- }
134
- // Parse the Rework worker's WorkerOutput JSON block.
135
- const reworked = parseWorkerOutput(result.output ?? '');
136
- state.reworkApplied = true;
137
- state.reworkOutput = result.output;
138
- replaceLastRunResultPreservingTrackers(state, result);
139
- // Apply merge rules: Rework owns summary/workerStatus/unresolved/commitMessage;
140
- // filesChanged is the union of Implementing's + Rework's.
141
- const merged = state.lastRunResult;
142
- if (merged) {
143
- const priorFilesChanged = (last.filesChanged) ?? [];
144
- merged.summary = reworked.summary;
145
- merged.workerStatus = reworked.workerSelfAssessment;
146
- merged.filesChanged = Array.from(new Set([...priorFilesChanged, ...reworked.filesChanged]));
147
- // v5: unresolved, commitMessage removed from worker output schema
148
- merged.unresolved = reworked.unresolved ?? [];
149
- if (reworked.commitMessage)
150
- merged.commitMessage = reworked.commitMessage;
151
- // Persist parsedCleanly from rework so enrichRuntimeResult can access it
152
- merged.parsedCleanly = reworked.parsedCleanly;
153
- }
154
- mergeStageStats(state, 'rework', {
155
- inputTokens: result.usage?.inputTokens ?? 0,
156
- outputTokens: result.usage?.outputTokens ?? 0,
157
- cachedReadTokens: result.usage?.cachedReadTokens ?? 0,
158
- cachedNonReadTokens: result.usage?.cachedNonReadTokens ?? 0,
159
- turnCount: result.turns ?? 1,
160
- // `result` comes from assembleRunResult which writes the turn cost to
161
- // top-level `actualCostUSD` (not a `costUSD` field). Reading the wrong
162
- // field name was the historical cause of rework stages recording
163
- // cost=null/0 in telemetry; canonical lookup is `actualCostUSD` with
164
- // legacy `costUSD` as a safety fallback.
165
- costUSD: result.actualCostUSD ?? result.costUSD ?? null,
166
- durationMs: result.durationMs ?? null,
167
- filesWrittenCount: Array.isArray(result.filesWritten) ? result.filesWritten.length : 0,
168
- }, {
169
- tier: reworkTier,
170
- model: ctx.providers[reworkTier]?.config?.model ?? null,
171
- });
172
- const payload = {
173
- workerSelfAssessment: reworked.workerSelfAssessment === 'done' ? 'done' : 'failed',
174
- summary: reworked.summary ?? '',
175
- filesChanged: state.lastRunResult?.filesChanged ?? [],
176
- unaddressedFindingIds: [],
177
- parsedCleanly: reworked.parsedCleanly,
178
- };
179
- return {
180
- outcome: 'advance',
181
- payload,
182
- telemetry: {
183
- stageLabel: 'rework',
184
- durationMs: Date.now() - t0,
185
- costUSD: result.actualCostUSD ?? null,
186
- turnsUsed: result.turns ?? 1,
187
- stopReason: 'normal',
188
- },
189
- };
190
- }
191
- //# sourceMappingURL=rework-stage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rework-stage.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/rework-stage.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export declare const OUTPUT_FORMAT: string;
2
- export declare function specReviewPrompt(ctx: {
3
- brief: string;
4
- workerSummary: string;
5
- filesChanged: string[];
6
- diff?: string;
7
- }): string;
8
- //# sourceMappingURL=spec-review-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-review-prompt.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/spec-review-prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,QA0BlB,CAAC;AAET,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkB7H"}