@zhixuan92/multi-model-agent-core 4.5.4 → 4.6.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 (271) hide show
  1. package/README.md +8 -3
  2. package/dist/escalation/delegate-with-escalation.d.ts +2 -2
  3. package/dist/escalation/delegate-with-escalation.d.ts.map +1 -1
  4. package/dist/escalation/delegate-with-escalation.js +11 -17
  5. package/dist/escalation/delegate-with-escalation.js.map +1 -1
  6. package/dist/escalation/fallback-helpers.d.ts +5 -5
  7. package/dist/escalation/fallback-helpers.d.ts.map +1 -1
  8. package/dist/escalation/fallback-helpers.js +5 -3
  9. package/dist/escalation/fallback-helpers.js.map +1 -1
  10. package/dist/events/event-builder.d.ts +36 -5
  11. package/dist/events/event-builder.d.ts.map +1 -1
  12. package/dist/events/event-builder.js +173 -31
  13. package/dist/events/event-builder.js.map +1 -1
  14. package/dist/events/observability-events.d.ts +6 -0
  15. package/dist/events/observability-events.d.ts.map +1 -1
  16. package/dist/events/observability-events.js +5 -0
  17. package/dist/events/observability-events.js.map +1 -1
  18. package/dist/events/telemetry-types.d.ts +10 -0
  19. package/dist/events/telemetry-types.d.ts.map +1 -1
  20. package/dist/events/verbose-log-channel.d.ts +7 -7
  21. package/dist/events/verbose-log-channel.js +10 -10
  22. package/dist/index.d.ts +9 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +8 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/lifecycle/annotate-parser.d.ts +9 -0
  27. package/dist/lifecycle/annotate-parser.d.ts.map +1 -0
  28. package/dist/lifecycle/annotate-parser.js +83 -0
  29. package/dist/lifecycle/annotate-parser.js.map +1 -0
  30. package/dist/lifecycle/annotate-prompts.d.ts +9 -0
  31. package/dist/lifecycle/annotate-prompts.d.ts.map +1 -0
  32. package/dist/lifecycle/annotate-prompts.js +86 -0
  33. package/dist/lifecycle/annotate-prompts.js.map +1 -0
  34. package/dist/lifecycle/auto-register-context-block.d.ts +2 -2
  35. package/dist/lifecycle/auto-register-context-block.d.ts.map +1 -1
  36. package/dist/lifecycle/auto-register-context-block.js.map +1 -1
  37. package/dist/lifecycle/build-cancelled-result.d.ts +11 -0
  38. package/dist/lifecycle/build-cancelled-result.d.ts.map +1 -0
  39. package/dist/lifecycle/build-cancelled-result.js +27 -0
  40. package/dist/lifecycle/build-cancelled-result.js.map +1 -0
  41. package/dist/lifecycle/executor-output-types.d.ts +2 -2
  42. package/dist/lifecycle/executor-output-types.d.ts.map +1 -1
  43. package/dist/lifecycle/fallback-report.d.ts +2 -2
  44. package/dist/lifecycle/fallback-report.d.ts.map +1 -1
  45. package/dist/lifecycle/fallback-report.js.map +1 -1
  46. package/dist/lifecycle/findings-parser.d.ts +2 -0
  47. package/dist/lifecycle/findings-parser.d.ts.map +1 -1
  48. package/dist/lifecycle/findings-parser.js +9 -4
  49. package/dist/lifecycle/findings-parser.js.map +1 -1
  50. package/dist/lifecycle/git-toplevel.d.ts +12 -0
  51. package/dist/lifecycle/git-toplevel.d.ts.map +1 -0
  52. package/dist/lifecycle/git-toplevel.js +49 -0
  53. package/dist/lifecycle/git-toplevel.js.map +1 -0
  54. package/dist/lifecycle/handlers/annotator.d.ts +2 -1
  55. package/dist/lifecycle/handlers/annotator.d.ts.map +1 -1
  56. package/dist/lifecycle/handlers/annotator.js +225 -7
  57. package/dist/lifecycle/handlers/annotator.js.map +1 -1
  58. package/dist/lifecycle/handlers/baseline-handlers.d.ts +10 -5
  59. package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
  60. package/dist/lifecycle/handlers/baseline-handlers.js +206 -316
  61. package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
  62. package/dist/lifecycle/handlers/enrich-runtime-result.d.ts +3 -0
  63. package/dist/lifecycle/handlers/enrich-runtime-result.d.ts.map +1 -0
  64. package/dist/lifecycle/handlers/enrich-runtime-result.js +191 -0
  65. package/dist/lifecycle/handlers/enrich-runtime-result.js.map +1 -0
  66. package/dist/lifecycle/handlers/git-commit-handler.d.ts +3 -2
  67. package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +1 -1
  68. package/dist/lifecycle/handlers/git-commit-handler.js +139 -110
  69. package/dist/lifecycle/handlers/git-commit-handler.js.map +1 -1
  70. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts +7 -13
  71. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts.map +1 -1
  72. package/dist/lifecycle/handlers/prepare-execution-context-handler.js +72 -49
  73. package/dist/lifecycle/handlers/prepare-execution-context-handler.js.map +1 -1
  74. package/dist/lifecycle/handlers/register-context-block-handlers.d.ts +2 -1
  75. package/dist/lifecycle/handlers/register-context-block-handlers.d.ts.map +1 -1
  76. package/dist/lifecycle/handlers/register-context-block-handlers.js +35 -14
  77. package/dist/lifecycle/handlers/register-context-block-handlers.js.map +1 -1
  78. package/dist/lifecycle/handlers/review-handler.d.ts +2 -1
  79. package/dist/lifecycle/handlers/review-handler.d.ts.map +1 -1
  80. package/dist/lifecycle/handlers/review-handler.js +152 -154
  81. package/dist/lifecycle/handlers/review-handler.js.map +1 -1
  82. package/dist/lifecycle/handlers/rework-handler.d.ts +2 -1
  83. package/dist/lifecycle/handlers/rework-handler.d.ts.map +1 -1
  84. package/dist/lifecycle/handlers/rework-handler.js +62 -14
  85. package/dist/lifecycle/handlers/rework-handler.js.map +1 -1
  86. package/dist/lifecycle/handlers/task-executor.d.ts +5 -4
  87. package/dist/lifecycle/handlers/task-executor.d.ts.map +1 -1
  88. package/dist/lifecycle/handlers/task-executor.js +153 -74
  89. package/dist/lifecycle/handlers/task-executor.js.map +1 -1
  90. package/dist/lifecycle/handlers/terminal-handlers.d.ts +22 -0
  91. package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
  92. package/dist/lifecycle/handlers/terminal-handlers.js +86 -5
  93. package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
  94. package/dist/lifecycle/lifecycle-context.d.ts +31 -3
  95. package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
  96. package/dist/lifecycle/lifecycle-dispatcher.d.ts +18 -19
  97. package/dist/lifecycle/lifecycle-dispatcher.d.ts.map +1 -1
  98. package/dist/lifecycle/lifecycle-dispatcher.js +38 -22
  99. package/dist/lifecycle/lifecycle-dispatcher.js.map +1 -1
  100. package/dist/lifecycle/lifecycle-driver.d.ts +15 -8
  101. package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
  102. package/dist/lifecycle/lifecycle-driver.js +110 -29
  103. package/dist/lifecycle/lifecycle-driver.js.map +1 -1
  104. package/dist/lifecycle/merge-stage-stats.d.ts +3 -3
  105. package/dist/lifecycle/merge-stage-stats.d.ts.map +1 -1
  106. package/dist/lifecycle/merge-stage-stats.js +2 -2
  107. package/dist/lifecycle/merge-stage-stats.js.map +1 -1
  108. package/dist/lifecycle/perform-implementation.d.ts +3 -0
  109. package/dist/lifecycle/perform-implementation.d.ts.map +1 -0
  110. package/dist/lifecycle/perform-implementation.js +264 -0
  111. package/dist/lifecycle/perform-implementation.js.map +1 -0
  112. package/dist/lifecycle/repo-hygiene.d.ts +14 -0
  113. package/dist/lifecycle/repo-hygiene.d.ts.map +1 -0
  114. package/dist/lifecycle/repo-hygiene.js +71 -0
  115. package/dist/lifecycle/repo-hygiene.js.map +1 -0
  116. package/dist/lifecycle/shared-compute.d.ts +4 -4
  117. package/dist/lifecycle/shared-compute.d.ts.map +1 -1
  118. package/dist/lifecycle/shared-compute.js +1 -1
  119. package/dist/lifecycle/shared-compute.js.map +1 -1
  120. package/dist/lifecycle/stage-io.d.ts +139 -0
  121. package/dist/lifecycle/stage-io.d.ts.map +1 -0
  122. package/dist/lifecycle/stage-io.js +20 -0
  123. package/dist/lifecycle/stage-io.js.map +1 -0
  124. package/dist/lifecycle/stage-plan-builder.d.ts +3 -3
  125. package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
  126. package/dist/lifecycle/stage-plan-builder.js +157 -128
  127. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  128. package/dist/lifecycle/stage-plan-types.d.ts +5 -21
  129. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  130. package/dist/lifecycle/stage-progression.d.ts +3 -15
  131. package/dist/lifecycle/stage-progression.d.ts.map +1 -1
  132. package/dist/lifecycle/stage-progression.js +48 -91
  133. package/dist/lifecycle/stage-progression.js.map +1 -1
  134. package/dist/lifecycle/task-completion-summary.d.ts +2 -2
  135. package/dist/lifecycle/task-completion-summary.d.ts.map +1 -1
  136. package/dist/lifecycle/task-completion-summary.js +0 -6
  137. package/dist/lifecycle/task-completion-summary.js.map +1 -1
  138. package/dist/lifecycle/task-executor.d.ts +23 -0
  139. package/dist/lifecycle/task-executor.d.ts.map +1 -1
  140. package/dist/lifecycle/task-executor.js +77 -5
  141. package/dist/lifecycle/task-executor.js.map +1 -1
  142. package/dist/lifecycle/task-grouping.d.ts +19 -0
  143. package/dist/lifecycle/task-grouping.d.ts.map +1 -0
  144. package/dist/lifecycle/task-grouping.js +48 -0
  145. package/dist/lifecycle/task-grouping.js.map +1 -0
  146. package/dist/lifecycle/task-runner.d.ts +20 -7
  147. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  148. package/dist/lifecycle/task-runner.js +42 -278
  149. package/dist/lifecycle/task-runner.js.map +1 -1
  150. package/dist/lifecycle/tool-config-types.d.ts +9 -0
  151. package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
  152. package/dist/lifecycle/worker-output-contract.d.ts +9 -15
  153. package/dist/lifecycle/worker-output-contract.d.ts.map +1 -1
  154. package/dist/lifecycle/worker-output-contract.js +45 -30
  155. package/dist/lifecycle/worker-output-contract.js.map +1 -1
  156. package/dist/providers/assemble-run-result.d.ts +3 -3
  157. package/dist/providers/assemble-run-result.d.ts.map +1 -1
  158. package/dist/providers/assemble-run-result.js +20 -9
  159. package/dist/providers/assemble-run-result.js.map +1 -1
  160. package/dist/providers/claude-session.d.ts.map +1 -1
  161. package/dist/providers/claude-session.js +1 -0
  162. package/dist/providers/claude-session.js.map +1 -1
  163. package/dist/providers/claude.js.map +1 -1
  164. package/dist/providers/codex-cli-launch.js +1 -1
  165. package/dist/providers/codex-cli-launch.js.map +1 -1
  166. package/dist/providers/codex-cli-session.d.ts +4 -1
  167. package/dist/providers/codex-cli-session.d.ts.map +1 -1
  168. package/dist/providers/codex-cli-session.js +73 -46
  169. package/dist/providers/codex-cli-session.js.map +1 -1
  170. package/dist/providers/codex.js.map +1 -1
  171. package/dist/providers/index.d.ts +1 -0
  172. package/dist/providers/index.d.ts.map +1 -1
  173. package/dist/providers/index.js +1 -0
  174. package/dist/providers/index.js.map +1 -1
  175. package/dist/providers/normalize-claude.d.ts +2 -0
  176. package/dist/providers/normalize-claude.d.ts.map +1 -1
  177. package/dist/providers/normalize-claude.js +1 -0
  178. package/dist/providers/normalize-claude.js.map +1 -1
  179. package/dist/providers/run-annotator-turn.d.ts +24 -0
  180. package/dist/providers/run-annotator-turn.d.ts.map +1 -0
  181. package/dist/providers/run-annotator-turn.js +43 -0
  182. package/dist/providers/run-annotator-turn.js.map +1 -0
  183. package/dist/providers/run-worker-turn.d.ts +26 -0
  184. package/dist/providers/run-worker-turn.d.ts.map +1 -0
  185. package/dist/providers/run-worker-turn.js +58 -0
  186. package/dist/providers/run-worker-turn.js.map +1 -0
  187. package/dist/providers/runner-types.d.ts +1 -1
  188. package/dist/providers/runner-types.d.ts.map +1 -1
  189. package/dist/reporting/headline-composer.d.ts +3 -3
  190. package/dist/reporting/headline-composer.d.ts.map +1 -1
  191. package/dist/review/index.d.ts +4 -3
  192. package/dist/review/index.d.ts.map +1 -1
  193. package/dist/review/index.js +7 -4
  194. package/dist/review/index.js.map +1 -1
  195. package/dist/review/parse-review-report.d.ts +7 -1
  196. package/dist/review/parse-review-report.d.ts.map +1 -1
  197. package/dist/review/parse-review-report.js +13 -21
  198. package/dist/review/parse-review-report.js.map +1 -1
  199. package/dist/review/review-verdict-mapping.d.ts +3 -3
  200. package/dist/review/review-verdict-mapping.d.ts.map +1 -1
  201. package/dist/review/review-verdict-mapping.js +1 -1
  202. package/dist/review/review-verdict-mapping.js.map +1 -1
  203. package/dist/review/run-reviewer.d.ts +40 -0
  204. package/dist/review/run-reviewer.d.ts.map +1 -0
  205. package/dist/review/run-reviewer.js +54 -0
  206. package/dist/review/run-reviewer.js.map +1 -0
  207. package/dist/review/templates/quality-review.d.ts +5 -0
  208. package/dist/review/templates/quality-review.d.ts.map +1 -1
  209. package/dist/review/templates/quality-review.js +35 -25
  210. package/dist/review/templates/quality-review.js.map +1 -1
  211. package/dist/review/templates/spec-review.d.ts +6 -0
  212. package/dist/review/templates/spec-review.d.ts.map +1 -1
  213. package/dist/review/templates/spec-review.js +36 -8
  214. package/dist/review/templates/spec-review.js.map +1 -1
  215. package/dist/stores/batch-cache.d.ts +3 -3
  216. package/dist/stores/batch-cache.d.ts.map +1 -1
  217. package/dist/stores/batch-cache.js.map +1 -1
  218. package/dist/stores/batch-registry.d.ts +31 -0
  219. package/dist/stores/batch-registry.d.ts.map +1 -1
  220. package/dist/stores/batch-registry.js +12 -0
  221. package/dist/stores/batch-registry.js.map +1 -1
  222. package/dist/tools/debug/tool-config.js +1 -1
  223. package/dist/tools/debug/tool-config.js.map +1 -1
  224. package/dist/tools/delegate/tool-config.d.ts.map +1 -1
  225. package/dist/tools/delegate/tool-config.js +3 -1
  226. package/dist/tools/delegate/tool-config.js.map +1 -1
  227. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  228. package/dist/tools/execute-plan/tool-config.js +3 -1
  229. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  230. package/dist/tools/investigate/tool-config.js +1 -1
  231. package/dist/tools/investigate/tool-config.js.map +1 -1
  232. package/dist/tools/retry/tool-config.js.map +1 -1
  233. package/dist/types/run-result.d.ts +164 -213
  234. package/dist/types/run-result.d.ts.map +1 -1
  235. package/dist/types/run-result.js +17 -0
  236. package/dist/types/run-result.js.map +1 -1
  237. package/dist/types.d.ts +1 -1
  238. package/dist/types.d.ts.map +1 -1
  239. package/package.json +1 -1
  240. package/dist/lifecycle/handlers/derive-terminal-status.d.ts +0 -10
  241. package/dist/lifecycle/handlers/derive-terminal-status.d.ts.map +0 -1
  242. package/dist/lifecycle/handlers/derive-terminal-status.js +0 -35
  243. package/dist/lifecycle/handlers/derive-terminal-status.js.map +0 -1
  244. package/dist/lifecycle/handlers/files-written-cross-check.d.ts +0 -27
  245. package/dist/lifecycle/handlers/files-written-cross-check.d.ts.map +0 -1
  246. package/dist/lifecycle/handlers/files-written-cross-check.js +0 -91
  247. package/dist/lifecycle/handlers/files-written-cross-check.js.map +0 -1
  248. package/dist/lifecycle/handlers/verify-stage.d.ts +0 -37
  249. package/dist/lifecycle/handlers/verify-stage.d.ts.map +0 -1
  250. package/dist/lifecycle/handlers/verify-stage.js +0 -208
  251. package/dist/lifecycle/handlers/verify-stage.js.map +0 -1
  252. package/dist/review/default-engines.d.ts +0 -3
  253. package/dist/review/default-engines.d.ts.map +0 -1
  254. package/dist/review/default-engines.js +0 -22
  255. package/dist/review/default-engines.js.map +0 -1
  256. package/dist/review/reviewer-engine.d.ts +0 -53
  257. package/dist/review/reviewer-engine.d.ts.map +0 -1
  258. package/dist/review/reviewer-engine.js +0 -47
  259. package/dist/review/reviewer-engine.js.map +0 -1
  260. package/dist/review/reviewer-output-parser.d.ts +0 -12
  261. package/dist/review/reviewer-output-parser.d.ts.map +0 -1
  262. package/dist/review/reviewer-output-parser.js +0 -213
  263. package/dist/review/reviewer-output-parser.js.map +0 -1
  264. package/dist/review/reviewer-prompt-builder.d.ts +0 -21
  265. package/dist/review/reviewer-prompt-builder.d.ts.map +0 -1
  266. package/dist/review/reviewer-prompt-builder.js +0 -22
  267. package/dist/review/reviewer-prompt-builder.js.map +0 -1
  268. package/dist/review/templates/annotate-completion.d.ts +0 -12
  269. package/dist/review/templates/annotate-completion.d.ts.map +0 -1
  270. package/dist/review/templates/annotate-completion.js +0 -72
  271. package/dist/review/templates/annotate-completion.js.map +0 -1
@@ -0,0 +1,191 @@
1
+ // Back-compat enrichment of state.lastRunResult after the v5 lifecycle runs.
2
+ //
3
+ // The wire envelope (ComposePayload, 8 fields) is the v5 boundary, but
4
+ // downstream consumers (recorder, headline composer, batch envelope) still
5
+ // expect the runtime-mirror RuntimeRunResult with v4 fields:
6
+ // - specReviewStatus / qualityReviewStatus / diffReviewStatus
7
+ // - agents (tier mapping per role)
8
+ // - models (per-role model names)
9
+ // - implementationReport (fallback parse of last.output)
10
+ // - structuredReport (canonical from annotator, else fallback parser)
11
+ // - fileArtifactsMissing
12
+ // - reviewerNotes / errors / verdict slots
13
+ // - actualCostUSD (sum across entered stages)
14
+ // - status / errorCode / terminationReason (v5 M3/M4 fixes)
15
+ //
16
+ // composeHandler calls this AFTER assembling its ComposePayload so that
17
+ // terminal-handlers/recorder/headline-composer downstream see the enriched
18
+ // runtime mirror exactly as the legacy composeResponse did.
19
+ import { parseStructuredReport } from '../../reporting/structured-report.js';
20
+ import { sumStageCosts } from '../shared-compute.js';
21
+ const READ_ONLY_ROUTES = new Set(['audit', 'review', 'debug', 'investigate', 'research']);
22
+ export function enrichRuntimeResult(state) {
23
+ if (state.lastRunResult === undefined)
24
+ return;
25
+ const last = state.lastRunResult;
26
+ const enriched = { ...last };
27
+ // ── actualCostUSD: sum across entered stages ────────────────────────────────
28
+ if (enriched.actualCostUSD === undefined) {
29
+ const stageStats = (last.stageStats ?? undefined);
30
+ enriched.actualCostUSD = sumStageCosts(stageStats) ?? 0;
31
+ }
32
+ const e = enriched;
33
+ // ── Review-status fields ────────────────────────────────────────────────────
34
+ if (state.specReviewError !== undefined)
35
+ e.specReviewStatus = 'error';
36
+ else if (state.specReviewVerdict !== undefined)
37
+ e.specReviewStatus = state.specReviewVerdict;
38
+ else
39
+ e.specReviewStatus = 'not_applicable';
40
+ if (state.qualityReviewError !== undefined)
41
+ e.qualityReviewStatus = 'error';
42
+ else if (state.qualityReviewVerdict !== undefined)
43
+ e.qualityReviewStatus = state.qualityReviewVerdict;
44
+ else
45
+ e.qualityReviewStatus = 'not_applicable';
46
+ if (state.diffReviewVerdict !== undefined)
47
+ e.diffReviewStatus = state.diffReviewVerdict;
48
+ else if (state.reviewPolicy === 'full' || state.reviewPolicy === 'diff_only')
49
+ e.diffReviewStatus = 'skipped';
50
+ else
51
+ e.diffReviewStatus = 'not_applicable';
52
+ // ── verification, commits, commitError ──────────────────────────────────────
53
+ if (state.verifyResult !== undefined && e.verification === undefined) {
54
+ e.verification = state.verifyResult;
55
+ }
56
+ if (Array.isArray(state.commits) && e.commits === undefined) {
57
+ e.commits = state.commits;
58
+ }
59
+ else if (e.commits === undefined) {
60
+ e.commits = [];
61
+ }
62
+ if (typeof state.commitError === 'string' && e.commitError === undefined) {
63
+ e.commitError = state.commitError;
64
+ }
65
+ // ── agents map (tier per role) ──────────────────────────────────────────────
66
+ const ctx = state.executionContext;
67
+ if (ctx && e.agents === undefined) {
68
+ const specReviewerTier = e.specReviewStatus === 'approved' || e.specReviewStatus === 'changes_required'
69
+ ? (ctx.assignedTier === 'standard' ? 'complex' : 'standard')
70
+ : (e.specReviewStatus === 'not_applicable' ? 'not_applicable' : 'skipped');
71
+ const qualityReviewerTier = e.qualityReviewStatus === 'approved' || e.qualityReviewStatus === 'changes_required'
72
+ ? (ctx.assignedTier === 'standard' ? 'complex' : 'standard')
73
+ : (e.qualityReviewStatus === 'not_applicable' ? 'not_applicable' : 'skipped');
74
+ e.agents = {
75
+ implementer: ctx.assignedTier,
76
+ implementerToolMode: ctx.implementerToolMode ?? 'full',
77
+ specReviewer: specReviewerTier,
78
+ qualityReviewer: qualityReviewerTier,
79
+ };
80
+ }
81
+ if (e.fileArtifactsMissing === undefined)
82
+ e.fileArtifactsMissing = false;
83
+ // ── reviewReason text fields ────────────────────────────────────────────────
84
+ if (e.specReviewReason === undefined) {
85
+ e.specReviewReason = e.specReviewStatus === 'not_applicable' ? 'task produced no file artifacts to review' : '';
86
+ }
87
+ if (e.qualityReviewReason === undefined) {
88
+ e.qualityReviewReason = e.qualityReviewStatus === 'not_applicable' ? 'task produced no file artifacts to review' : '';
89
+ }
90
+ // ── implementationReport + structuredReport (annotator wins; else fallback) ─
91
+ const fallbackReport = (last.output
92
+ ? parseStructuredReport(last.output)
93
+ : { summary: '', filesChanged: [], validationsRun: [], deviationsFromBrief: [], unresolved: [], extraSections: {} });
94
+ if (e.implementationReport === undefined)
95
+ e.implementationReport = fallbackReport;
96
+ const annotatorReport = state.structuredReport;
97
+ if (annotatorReport && typeof annotatorReport === 'object') {
98
+ enriched.structuredReport = annotatorReport;
99
+ }
100
+ else if (enriched.structuredReport === undefined) {
101
+ enriched.structuredReport = fallbackReport;
102
+ }
103
+ // ── workerStatus derivation from output summary ─────────────────────────────
104
+ if (enriched.workerStatus === undefined) {
105
+ const summary = (fallbackReport?.summary ?? '').toLowerCase();
106
+ if (last.status === 'error')
107
+ enriched.workerStatus = 'failed';
108
+ else if (summary.includes('changes_required') || summary.includes('blocked'))
109
+ enriched.workerStatus = 'blocked';
110
+ else if (summary.length > 0 || last.status === 'ok')
111
+ enriched.workerStatus = 'done';
112
+ else
113
+ enriched.workerStatus = 'failed';
114
+ }
115
+ // ── models map ──────────────────────────────────────────────────────────────
116
+ if (ctx && e.models === undefined) {
117
+ const implModel = ctx.implementerProvider?.config?.model ?? '';
118
+ const otherTier = ctx.assignedTier === 'standard' ? 'complex' : 'standard';
119
+ const otherProvider = ctx.providers[otherTier];
120
+ const otherModel = otherProvider?.config?.model ?? null;
121
+ e.models = {
122
+ implementer: implModel,
123
+ specReviewer: e.specReviewStatus === 'approved' || e.specReviewStatus === 'changes_required' ? otherModel : null,
124
+ qualityReviewer: e.qualityReviewStatus === 'approved' || e.qualityReviewStatus === 'changes_required' ? otherModel : null,
125
+ };
126
+ }
127
+ // ── A4b: chain-failed and read-only routes are exempt from artifact downgrade
128
+ const chainAlreadyFailed = state.reviewPolicy !== 'none' && state.reviewVerdict === 'changes_required';
129
+ const route = typeof state.route === 'string' ? state.route : '';
130
+ const _isReadOnlyRoute = READ_ONLY_ROUTES.has(route);
131
+ void chainAlreadyFailed;
132
+ void _isReadOnlyRoute;
133
+ // ── envelope-level reviewer notes / verdicts / errors / rework state ────────
134
+ if (state.specReviewerNotes !== undefined)
135
+ enriched.specReviewerNotes = state.specReviewerNotes;
136
+ if (state.qualityReviewerNotes !== undefined)
137
+ enriched.qualityReviewerNotes = state.qualityReviewerNotes;
138
+ if (state.reviewVerdict !== undefined)
139
+ enriched.reviewVerdict = state.reviewVerdict;
140
+ if (state.reviewFindings !== undefined)
141
+ enriched.reviewFindings = state.reviewFindings;
142
+ if (state.specReviewError !== undefined)
143
+ enriched.specReviewError = state.specReviewError;
144
+ if (state.qualityReviewError !== undefined)
145
+ enriched.qualityReviewError = state.qualityReviewError;
146
+ if (state.reviewError !== undefined)
147
+ enriched.reviewError = state.reviewError;
148
+ if (state.reworkError !== undefined)
149
+ enriched.reworkError = state.reworkError;
150
+ if (state.reworkOutput !== undefined)
151
+ enriched.reworkOutput = state.reworkOutput;
152
+ if (state.reworkApplied !== undefined)
153
+ enriched.reworkApplied = state.reworkApplied;
154
+ if (state.verifyResult !== undefined)
155
+ enriched.verifyResult = state.verifyResult;
156
+ // ── v5 M3 / M4 fixes: truthful workerSelfAssessment and rework-clears-up promo ─
157
+ const commitsExist = Array.isArray(state.commits) && state.commits.length > 0;
158
+ const reworkCleanedUp = state.reworkApplied === true && state.reworkError === undefined;
159
+ const reviewRejected = state.reviewPolicy !== 'none' && state.reviewVerdict === 'changes_required' && !reworkCleanedUp;
160
+ if (last.status === 'error') {
161
+ enriched.status = 'error';
162
+ }
163
+ else if (reviewRejected) {
164
+ enriched.status = 'incomplete';
165
+ enriched.errorCode = 'review_rejected';
166
+ const priorTr = (typeof enriched.terminationReason === 'object' && enriched.terminationReason !== null)
167
+ ? enriched.terminationReason
168
+ : undefined;
169
+ enriched.terminationReason = {
170
+ cause: 'incomplete',
171
+ turnsUsed: priorTr?.turnsUsed ?? last.turns ?? 0,
172
+ hasFileArtifacts: priorTr?.hasFileArtifacts ?? (Array.isArray(last.filesWritten) && last.filesWritten.length > 0),
173
+ usedShell: priorTr?.usedShell ?? false,
174
+ workerSelfAssessment: (last.workerStatus ?? state.workerStatus ?? null),
175
+ wasPromoted: false,
176
+ };
177
+ }
178
+ else if (commitsExist) {
179
+ enriched.status = 'ok';
180
+ }
181
+ else if (reworkCleanedUp && state.reviewPolicy !== 'none') {
182
+ enriched.status = 'ok';
183
+ }
184
+ // Mirror the enriched object back into state.lastRunResult AND
185
+ // state.responseEnvelope (legacy compose-target). emit_task_terminal +
186
+ // recorder + headline composer read state.lastRunResult; the wire envelope
187
+ // in DispatchOutput.finalState.lastRunResult ends up at the same place.
188
+ state.lastRunResult = enriched;
189
+ state.responseEnvelope = enriched;
190
+ }
191
+ //# sourceMappingURL=enrich-runtime-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich-runtime-result.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/enrich-runtime-result.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,6DAA6D;AAC7D,gEAAgE;AAChE,qCAAqC;AACrC,oCAAoC;AACpC,2DAA2D;AAC3D,wEAAwE;AACxE,2BAA2B;AAC3B,6CAA6C;AAC7C,gDAAgD;AAChD,8DAA8D;AAC9D,EAAE;AACF,wEAAwE;AACxE,2EAA2E;AAC3E,4DAA4D;AAI5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;AAE1F,MAAM,UAAU,mBAAmB,CAAC,KAAqB;IACvD,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO;IAE9C,MAAM,IAAI,GAAG,KAAK,CAAC,aAAiC,CAAC;IACrD,MAAM,QAAQ,GAAqB,EAAE,GAAG,IAAI,EAAE,CAAC;IAE/C,+EAA+E;IAC/E,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAA2F,CAAC;QAC5I,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,GAAG,QAA8C,CAAC;IAEzD,+EAA+E;IAC/E,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS;QAAE,CAAC,CAAC,gBAAgB,GAAG,OAAO,CAAC;SACjE,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAAE,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,CAAC;;QACxF,CAAC,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAE3C,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS;QAAE,CAAC,CAAC,mBAAmB,GAAG,OAAO,CAAC;SACvE,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS;QAAE,CAAC,CAAC,mBAAmB,GAAG,KAAK,CAAC,oBAAoB,CAAC;;QACjG,CAAC,CAAC,mBAAmB,GAAG,gBAAgB,CAAC;IAE9C,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAAE,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,CAAC;SACnF,IAAI,KAAK,CAAC,YAAY,KAAK,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,WAAW;QAAE,CAAC,CAAC,gBAAgB,GAAG,SAAS,CAAC;;QACxG,CAAC,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAE3C,+EAA+E;IAC/E,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrE,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5D,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;SAAM,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACzE,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,+EAA+E;IAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACnC,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,gBAAgB,GACpB,CAAC,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,CAAC,gBAAgB,KAAK,kBAAkB;YAC5E,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/E,MAAM,mBAAmB,GACvB,CAAC,CAAC,mBAAmB,KAAK,UAAU,IAAI,CAAC,CAAC,mBAAmB,KAAK,kBAAkB;YAClF,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YAC5D,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,KAAK,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClF,CAAC,CAAC,MAAM,GAAG;YACT,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,IAAI,MAAM;YACtD,YAAY,EAAE,gBAAgB;YAC9B,eAAe,EAAE,mBAAmB;SACrC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,CAAC,oBAAoB,KAAK,SAAS;QAAE,CAAC,CAAC,oBAAoB,GAAG,KAAK,CAAC;IAEzE,+EAA+E;IAC/E,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACrC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,EAAE,CAAC;IAClH,CAAC;IACD,IAAI,CAAC,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACxC,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,mBAAmB,KAAK,gBAAgB,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,EAAE,CAAC;IACxH,CAAC;IAED,+EAA+E;IAC/E,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM;QACjC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAQpH,CAAC;IACF,IAAI,CAAC,CAAC,oBAAoB,KAAK,SAAS;QAAE,CAAC,CAAC,oBAAoB,GAAG,cAAc,CAAC;IAElF,MAAM,eAAe,GAAI,KAAwC,CAAC,gBAAgB,CAAC;IACnF,IAAI,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC3D,QAAQ,CAAC,gBAAgB,GAAG,eAAuD,CAAC;IACtF,CAAC;SAAM,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnD,QAAQ,CAAC,gBAAgB,GAAG,cAAsD,CAAC;IACrF,CAAC;IAED,+EAA+E;IAC/E,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;YAAE,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC;aACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC;aAC3G,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;;YAC/E,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC;IACxC,CAAC;IAED,+EAA+E;IAC/E,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,SAAS,GAAI,GAAG,CAAC,mBAAmB,EAAE,MAAyC,EAAE,KAAK,IAAI,EAAE,CAAC;QACnG,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QAC3E,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAI,aAAa,EAAE,MAAyC,EAAE,KAAK,IAAI,IAAI,CAAC;QAC5F,CAAC,CAAC,MAAM,GAAG;YACT,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,CAAC,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,CAAC,gBAAgB,KAAK,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;YAChH,eAAe,EAAE,CAAC,CAAC,mBAAmB,KAAK,UAAU,IAAI,CAAC,CAAC,mBAAmB,KAAK,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;SAC1H,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,MAAM,kBAAkB,GAAG,KAAK,CAAC,YAAY,KAAK,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,kBAAkB,CAAC;IACvG,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrD,KAAK,kBAAkB,CAAC;IAAC,KAAK,gBAAgB,CAAC;IAE/C,+EAA+E;IAC/E,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAAG,QAA2C,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACpI,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS;QAAG,QAA8C,CAAC,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;IAChJ,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAG,QAAuC,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACpH,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;QAAG,QAAyC,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IACzH,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS;QAAG,QAAyC,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC5H,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS;QAAG,QAA4C,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACxI,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAG,QAAqC,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC5G,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAG,QAAqC,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC5G,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAG,QAAsC,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAChH,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAG,QAAwC,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACrH,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAG,QAAuC,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAEjH,kFAAkF;IAClF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC;IACxF,MAAM,cAAc,GAClB,KAAK,CAAC,YAAY,KAAK,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,kBAAkB,IAAI,CAAC,eAAe,CAAC;IAElG,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5B,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;QAC/B,QAAQ,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACvC,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,iBAAiB,KAAK,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,KAAK,IAAI,CAAC;YACrG,CAAC,CAAC,QAAQ,CAAC,iBAAiB;YAC5B,CAAC,CAAC,SAAS,CAAC;QACd,QAAQ,CAAC,iBAAiB,GAAG;YAC3B,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;YAChD,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YACjH,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK;YACtC,oBAAoB,EAAG,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI,CAAiG;YACxK,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACxB,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;IACzB,CAAC;SAAM,IAAI,eAAe,IAAI,KAAK,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5D,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,+DAA+D;IAC/D,uEAAuE;IACvE,2EAA2E;IAC3E,wEAAwE;IACxE,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;IAC9B,KAAwC,CAAC,gBAAgB,GAAG,QAAQ,CAAC;AACxE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { LifecycleState } from '../stage-plan-types.js';
2
- export type CommitSkipReason = 'no_repo' | 'no_diff' | 'validation_failed' | 'validation_stale' | 'worker_committed_out_of_band' | 'hook_failed';
3
- export declare function gitCommitHandler(state: LifecycleState): Promise<void>;
2
+ import type { StageGate, CommitPayload } from '../stage-io.js';
3
+ export declare function commitHandler(state: LifecycleState): Promise<StageGate<CommitPayload>>;
4
+ export { commitHandler as gitCommitHandler };
4
5
  //# sourceMappingURL=git-commit-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-commit-handler.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/git-commit-handler.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAS7D,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,SAAS,GACT,mBAAmB,GACnB,kBAAkB,GAClB,8BAA8B,GAC9B,aAAa,CAAC;AAsClB,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0H3E"}
1
+ {"version":3,"file":"git-commit-handler.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/git-commit-handler.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAkG/D,wBAAsB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAmG5F;AAID,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,CAAC"}
@@ -1,16 +1,19 @@
1
- // v4.4.xCommitting stage.
1
+ // Stage I/O standardization commitHandler emits StageGate<CommitPayload>.
2
2
  //
3
3
  // Gate logic per the spec:
4
4
  // no_repo, no_diff, validation_failed, validation_stale,
5
5
  // worker_committed_out_of_band, hook_failed
6
+ // DEBUG: SOURCE FILE LOADED AT $(date)
6
7
  //
7
- // Worker-supplied commitMessage (from WorkerOutput) is preferred; if
8
- // absent, generate one via a single turn on the standard session
9
- // using the staged diff as input.
8
+ // The spec (Step 13) supersedes the v4.4.x behavior:
9
+ // - Returns StageGate<CommitPayload> (tagged union { committed | no_op })
10
+ // - Detached HEAD maps to kind: 'no_op', reason: 'no_repo'
11
+ // - Commit message includes 'rework left N findings unaddressed' annotation
12
+ // when applicable
13
+ // - Does NOT mutate state.lastRunResult or state.commits (those are retired
14
+ // from the new chain; compose reads state.gates instead)
10
15
  import { execFile } from 'node:child_process';
11
16
  import { promisify } from 'node:util';
12
- import { mergeStageStats } from '../merge-stage-stats.js';
13
- import { HUMAN_LABEL } from '../stage-labels.js';
14
17
  import { getRealFilesChanged } from '../real-diff.js';
15
18
  const execFileP = promisify(execFile);
16
19
  async function gitC(cwd, args) {
@@ -35,126 +38,152 @@ async function currentHead(cwd) {
35
38
  const r = await gitC(cwd, ['rev-parse', 'HEAD']);
36
39
  return r.code === 0 ? r.stdout.trim() : null;
37
40
  }
38
- function setSkip(state, reason, extra = {}) {
39
- const last = state.lastRunResult ?? {};
40
- state.lastRunResult = {
41
- ...last,
42
- committed: false,
43
- commitSha: null,
44
- commitMessage: null,
45
- commitSkipReason: reason,
46
- ...extra,
41
+ // ─── Payload helpers ─────────────────────────────────────────────────────────
42
+ function advanceNoOp(reason, t0, detail) {
43
+ return {
44
+ outcome: 'advance',
45
+ payload: { kind: 'no_op', reason, detail },
46
+ telemetry: {
47
+ stageLabel: 'committing',
48
+ durationMs: Date.now() - t0,
49
+ costUSD: 0,
50
+ turnsUsed: 0,
51
+ stopReason: 'normal',
52
+ },
47
53
  };
48
54
  }
49
- export async function gitCommitHandler(state) {
50
- // Idempotency: skip if already settled
51
- if (state.lastRunResult?.commitSkipReason !== undefined)
52
- return;
53
- if (state.lastRunResult?.committed === true)
54
- return;
55
- const ctx = state.executionContext;
56
- const cwd = state.cwd ?? ctx?.cwd;
57
- if (!cwd)
58
- return;
59
- const result = state.lastRunResult;
60
- if (!result)
61
- return;
62
- const startMs = Date.now();
63
- // Fast pre-gate: use git diff to determine if there are actual file changes.
64
- // This replaces the worker self-report read, which may be empty even when
65
- // the worker made real changes.
66
- const realFiles = await getRealFilesChanged(state);
67
- if (realFiles.files.length === 0) {
68
- setSkip(state, 'no_diff');
69
- return;
55
+ function haltCommit(comment, t0) {
56
+ return {
57
+ outcome: 'halt',
58
+ comment,
59
+ payload: { kind: 'no_op', reason: 'no_diff' }, // placeholder; halt path
60
+ telemetry: {
61
+ stageLabel: 'committing',
62
+ durationMs: Date.now() - t0,
63
+ costUSD: 0,
64
+ turnsUsed: 0,
65
+ stopReason: 'transport_error',
66
+ },
67
+ };
68
+ }
69
+ function composeCommitMessage(state) {
70
+ const summary = state.gates?.['rework']?.payload?.summary ??
71
+ state.gates?.['implement']?.payload?.summary ??
72
+ '(no summary)';
73
+ const firstLine = summary.split('\n')[0].slice(0, 72);
74
+ const reviewVerdict = state.gates?.['review']?.payload?.verdict;
75
+ const unaddressed = (state.gates?.['rework']?.payload?.unaddressedFindingIds ??
76
+ []);
77
+ let msg = `implement: ${firstLine}\n\n${summary}`;
78
+ if (reviewVerdict === 'changes_required' && unaddressed.length > 0) {
79
+ msg += `\n\nRework left ${unaddressed.length} findings unaddressed: ${unaddressed.join(', ')}.`;
80
+ }
81
+ return msg;
82
+ }
83
+ function isHookFailure(err) {
84
+ if (err instanceof Error) {
85
+ return /pre-commit hook|hook failed|hook rejected/i.test(err.message);
86
+ }
87
+ // gitC result shape: { code, stdout, stderr }
88
+ if (typeof err === 'object' && err !== null) {
89
+ const r = err;
90
+ const text = `${r.stderr ?? ''} ${r.stdout ?? ''}`;
91
+ return /pre-commit hook|hook failed|hook rejected|hook script|\.git\/hooks\//i.test(text);
92
+ }
93
+ return false;
94
+ }
95
+ // ─── Main handler ─────────────────────────────────────────────────────────────
96
+ export async function commitHandler(state) {
97
+ const t0 = Date.now();
98
+ const cwd = state.cwd ?? state.executionContext?.cwd;
99
+ if (!cwd) {
100
+ return advanceNoOp('no_repo', t0, 'no cwd available');
70
101
  }
71
- const filesChanged = realFiles.files;
72
102
  // Gate 1: no_repo
73
103
  if (!await isInsideWorkTree(cwd)) {
74
- setSkip(state, 'no_repo');
75
- return;
104
+ return advanceNoOp('no_repo', t0);
76
105
  }
77
- // Gate 2: worker_committed_out_of_band
78
- const currentSha = await currentHead(cwd);
79
- const preSha = state.preTaskHeadSha;
80
- if (preSha && currentSha && currentSha !== preSha) {
81
- setSkip(state, 'worker_committed_out_of_band', { detectedHeadSha: currentSha });
82
- return;
106
+ // Gate 2: detached HEAD / no branch → no_repo
107
+ const head = await currentHead(cwd);
108
+ if (!head) {
109
+ return advanceNoOp('no_repo', t0, 'detached HEAD or no branch');
110
+ }
111
+ // Use the existing getRealFilesChanged() helper (lifecycle/real-diff.ts).
112
+ // Reconciliation: plan said `realChange.method === 'git_error'`; the actual
113
+ // field on RealFilesChanged is `realChange.source === 'git_error'`.
114
+ const realChange = await getRealFilesChanged(state);
115
+ if (realChange.source === 'git_error' || realChange.files.length === 0) {
116
+ return advanceNoOp('no_diff', t0);
83
117
  }
84
- // Gate 3: validation_failed
85
- const validations = result.validationsRun ?? [];
86
- if (validations.some((v) => !v.passed)) {
87
- setSkip(state, 'validation_failed');
88
- return;
118
+ const filesChanged = realChange.files;
119
+ // Gate 3: worker out-of-band commit detection
120
+ const preSha = state.preTaskHeadSha;
121
+ if (preSha && head !== preSha && realChange.source === 'self_report') {
122
+ return advanceNoOp('worker_committed_out_of_band', t0);
89
123
  }
90
- // Gate 4: validation_stale (Rework ran but produced no fresh validations)
91
- if (state.reworkApplied === true && validations.length === 0) {
92
- setSkip(state, 'validation_stale');
93
- return;
124
+ // Stage: git add
125
+ // Always run `git add` on the files we know about from getRealFilesChanged.
126
+ // If getRealFilesChanged returned empty (no preTaskHeadSha/preTaskUntrackedFiles),
127
+ // fall back to staging the files the worker reported. This ensures untracked
128
+ // files are staged so `git diff --cached` can detect them.
129
+ const filesToStage = filesChanged.length > 0 ? filesChanged : ((state.lastRunResult?.filesChanged) ?? []);
130
+ if (filesToStage.length === 0) {
131
+ return advanceNoOp('no_diff', t0);
94
132
  }
95
- // Stage scoped to cwd
96
- const addR = await gitC(cwd, ['add', '-A', '.']);
133
+ const addR = await gitC(cwd, ['add', '--', ...filesToStage]);
97
134
  if (addR.code !== 0) {
98
- setSkip(state, 'hook_failed');
99
- return;
135
+ return advanceNoOp('hook_failed', t0, addR.stderr || 'git add failed');
100
136
  }
101
- // Gate 6: no_diff (post-stage)
137
+ // Post-stage: confirm staged diff is non-empty.
138
+ // `git diff --cached --quiet` exits 0 when nothing is staged; 1 when staged.
102
139
  const diffR = await gitC(cwd, ['diff', '--cached', '--quiet', '--', '.']);
103
140
  if (diffR.code === 0) {
104
- setSkip(state, 'no_diff');
105
- return;
141
+ return advanceNoOp('no_diff', t0);
106
142
  }
107
- // Resolve commit message: worker-supplied or model-generated.
108
- let commitMessage = result.commitMessage;
109
- if (!commitMessage) {
110
- try {
111
- const session = ctx.getSession('standard');
112
- const diffOut = await gitC(cwd, ['diff', '--cached', '--', '.']);
113
- const truncated = diffOut.stdout.slice(0, 8000);
114
- const summary = result.summary ?? '';
115
- const turn = await session.send(`Generate a one-line Conventional Commits message for this diff.\n\nTask summary: ${summary}\n\nDiff:\n${truncated}`, { stageLabel: HUMAN_LABEL.committing });
116
- commitMessage = turn.output.split('\n')[0].trim();
117
- }
118
- catch {
119
- /* fall through to template */
120
- }
121
- if (!commitMessage) {
122
- const summary = result.summary ?? 'update';
123
- commitMessage = `chore: ${summary.slice(0, 60)}`;
143
+ const commitMessage = composeCommitMessage(state);
144
+ try {
145
+ const commitR = await gitC(cwd, ['commit', '-m', commitMessage]);
146
+ if (commitR.code !== 0) {
147
+ // Hook failure is the dominant case: we've already validated repo,
148
+ // diff, and HEAD; if `git commit` still fails, the most likely cause
149
+ // is a pre-commit hook (or other policy hook) rejecting the commit.
150
+ // We treat non-zero exit as hook_failed unless the stderr indicates
151
+ // something structurally worse (corrupted index, fs errors).
152
+ const stderr = commitR.stderr ?? '';
153
+ const looksStructural = /index|object|corrupt|permission denied|read-only/i.test(stderr);
154
+ if (!looksStructural) {
155
+ return advanceNoOp('hook_failed', t0, stderr || 'commit rejected (likely pre-commit hook)');
156
+ }
157
+ return haltCommit(`commit_failed: ${stderr || 'unknown error'}`, t0);
124
158
  }
159
+ const sha = (await currentHead(cwd)) ?? '';
160
+ const authoredAt = new Date().toISOString();
161
+ return {
162
+ outcome: 'advance',
163
+ payload: {
164
+ kind: 'committed',
165
+ commitSha: sha,
166
+ commitMessage,
167
+ filesChanged,
168
+ authoredAt,
169
+ },
170
+ telemetry: {
171
+ stageLabel: 'committing',
172
+ durationMs: Date.now() - t0,
173
+ costUSD: 0,
174
+ turnsUsed: 0,
175
+ stopReason: 'normal',
176
+ },
177
+ };
125
178
  }
126
- // Commit
127
- const commitR = await gitC(cwd, ['commit', '-m', commitMessage]);
128
- if (commitR.code !== 0) {
129
- setSkip(state, 'hook_failed');
130
- return;
179
+ catch (err) {
180
+ if (isHookFailure(err)) {
181
+ return advanceNoOp('hook_failed', t0, err instanceof Error ? err.message : String(err));
182
+ }
183
+ return haltCommit(`commit_failed: ${err instanceof Error ? err.message : String(err)}`, t0);
131
184
  }
132
- const newSha = await currentHead(cwd);
133
- state.lastRunResult = {
134
- ...result,
135
- committed: true,
136
- commitSha: newSha,
137
- commitMessage,
138
- commitSkipReason: null,
139
- };
140
- // Back-compat for downstream consumers (baseline-handlers + event-builder).
141
- state.commits = [{
142
- sha: newSha ?? '',
143
- subject: commitMessage,
144
- body: '',
145
- filesChanged,
146
- authoredAt: new Date().toISOString(),
147
- }];
148
- mergeStageStats(state, 'committing', {
149
- inputTokens: 0,
150
- outputTokens: 0,
151
- cachedReadTokens: 0,
152
- cachedNonReadTokens: 0,
153
- turnCount: 0,
154
- toolCallCount: 0,
155
- costUSD: null,
156
- durationMs: Date.now() - startMs,
157
- filesWrittenCount: filesChanged.length,
158
- }, { tier: 'standard', model: null });
159
185
  }
186
+ // ─── Exports (backwards compatibility alias) ─────────────────────────────────
187
+ // The old export name from v4.4.x; new code should use commitHandler.
188
+ export { commitHandler as gitCommitHandler };
160
189
  //# sourceMappingURL=git-commit-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-commit-handler.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/git-commit-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-commit-handler.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/git-commit-handler.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,13 @@
1
1
  import type { LifecycleState } from '../stage-plan-types.js';
2
+ import type { StageGate } from '../stage-io.js';
2
3
  /**
3
- * StageHandler for row 2.5 (prepare_execution_context).
4
+ * Stage handler: row 2.5 prepare_execution_context.
4
5
  *
5
- * Reads from state:
6
- * - state.task / state.executionContext: idempotency guards. If callers
7
- * pre-populate them via DispatchInput.context (or a future intake step),
8
- * this handler is a structural acknowledgment.
9
- * - state.request: the rawRequest passed to dispatch. Used as a fallback
10
- * to surface the tasks list when callers haven't supplied state.task.
6
+ * Seeding: populates state.task, state.reviewPolicy, state.diffTracker.
7
+ * This handler is the canonical "state was set up correctly" acknowledgment
8
+ * for downstream handlers that read from these slots.
11
9
  *
12
- * Writes to state (only when slots are empty AND request is shaped for it):
13
- * - state.task: the first TaskSpec from a delegate-style request payload.
14
- * runTasks (in task-runner.ts) dispatches one StagePlan per TaskSpec,
15
- * so state.task is the per-dispatch task. This handler surfaces task[0]
16
- * as a fallback for downstream handlers that need a TaskSpec.
10
+ * §5.1 payload: null. Gate exists only for the per-stage telemetry slot.
17
11
  */
18
- export declare function prepareExecutionContextHandler(state: LifecycleState): Promise<void>;
12
+ export declare function prepareExecutionContextHandler(state: LifecycleState): Promise<StageGate<null>>;
19
13
  //# sourceMappingURL=prepare-execution-context-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-execution-context-handler.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/prepare-execution-context-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,8BAA8B,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCzF"}
1
+ {"version":3,"file":"prepare-execution-context-handler.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/prepare-execution-context-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CA0E1B"}