@zhixuan92/multi-model-agent-core 4.0.2 → 4.0.4

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 (263) hide show
  1. package/README.md +20 -6
  2. package/dist/bounded-execution/activity-tracker-types.d.ts +2 -2
  3. package/dist/bounded-execution/activity-tracker-types.d.ts.map +1 -1
  4. package/dist/bounded-execution/activity-tracker.d.ts +3 -3
  5. package/dist/bounded-execution/activity-tracker.d.ts.map +1 -1
  6. package/dist/bounded-execution/activity-tracker.js +15 -15
  7. package/dist/bounded-execution/activity-tracker.js.map +1 -1
  8. package/dist/config/model-profile-registry.d.ts +0 -10
  9. package/dist/config/model-profile-registry.d.ts.map +1 -1
  10. package/dist/config/model-profile-registry.js +126 -8
  11. package/dist/config/model-profile-registry.js.map +1 -1
  12. package/dist/config/schema.d.ts +0 -1
  13. package/dist/config/schema.d.ts.map +1 -1
  14. package/dist/config/schema.js +3 -1
  15. package/dist/config/schema.js.map +1 -1
  16. package/dist/escalation/delegate-with-escalation.d.ts +24 -0
  17. package/dist/escalation/delegate-with-escalation.d.ts.map +1 -1
  18. package/dist/escalation/delegate-with-escalation.js +5 -0
  19. package/dist/escalation/delegate-with-escalation.js.map +1 -1
  20. package/dist/escalation/fallback-types.d.ts +1 -1
  21. package/dist/escalation/fallback-types.d.ts.map +1 -1
  22. package/dist/escalation/fallback.js +2 -2
  23. package/dist/escalation/fallback.js.map +1 -1
  24. package/dist/events/cloud-events.d.ts +3 -4
  25. package/dist/events/cloud-events.d.ts.map +1 -1
  26. package/dist/events/cloud-events.js +0 -1
  27. package/dist/events/cloud-events.js.map +1 -1
  28. package/dist/events/event-builder.d.ts +4 -2
  29. package/dist/events/event-builder.d.ts.map +1 -1
  30. package/dist/events/event-builder.js +47 -45
  31. package/dist/events/event-builder.js.map +1 -1
  32. package/dist/events/observability-events.d.ts +7 -8
  33. package/dist/events/observability-events.d.ts.map +1 -1
  34. package/dist/events/running-headline-sink.d.ts +26 -0
  35. package/dist/events/running-headline-sink.d.ts.map +1 -0
  36. package/dist/events/running-headline-sink.js +116 -0
  37. package/dist/events/running-headline-sink.js.map +1 -0
  38. package/dist/events/telemetry-types.d.ts +20 -20
  39. package/dist/events/telemetry-types.js +8 -8
  40. package/dist/events/telemetry-types.js.map +1 -1
  41. package/dist/events/verbose-log-channel.d.ts +22 -2
  42. package/dist/events/verbose-log-channel.d.ts.map +1 -1
  43. package/dist/events/verbose-log-channel.js +46 -9
  44. package/dist/events/verbose-log-channel.js.map +1 -1
  45. package/dist/index.d.ts +4 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +4 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/intake/brief-compiler-slots/delegate.d.ts +1 -0
  50. package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
  51. package/dist/intake/brief-compiler-slots/delegate.js +17 -2
  52. package/dist/intake/brief-compiler-slots/delegate.js.map +1 -1
  53. package/dist/lifecycle/diff-tracker.d.ts +72 -0
  54. package/dist/lifecycle/diff-tracker.d.ts.map +1 -0
  55. package/dist/lifecycle/diff-tracker.js +316 -0
  56. package/dist/lifecycle/diff-tracker.js.map +1 -0
  57. package/dist/lifecycle/executor-output-types.d.ts +2 -2
  58. package/dist/lifecycle/executor-output-types.d.ts.map +1 -1
  59. package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
  60. package/dist/lifecycle/handlers/baseline-handlers.js +48 -1
  61. package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
  62. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts +1 -1
  63. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts.map +1 -1
  64. package/dist/lifecycle/handlers/prepare-execution-context-handler.js +23 -1
  65. package/dist/lifecycle/handlers/prepare-execution-context-handler.js.map +1 -1
  66. package/dist/lifecycle/handlers/quality-chain-handlers.d.ts.map +1 -1
  67. package/dist/lifecycle/handlers/quality-chain-handlers.js +177 -6
  68. package/dist/lifecycle/handlers/quality-chain-handlers.js.map +1 -1
  69. package/dist/lifecycle/handlers/review-diff-handler.d.ts.map +1 -1
  70. package/dist/lifecycle/handlers/review-diff-handler.js +74 -13
  71. package/dist/lifecycle/handlers/review-diff-handler.js.map +1 -1
  72. package/dist/lifecycle/handlers/run-verify-command-handler.js +11 -2
  73. package/dist/lifecycle/handlers/run-verify-command-handler.js.map +1 -1
  74. package/dist/lifecycle/handlers/spec-chain-handlers.d.ts.map +1 -1
  75. package/dist/lifecycle/handlers/spec-chain-handlers.js +135 -6
  76. package/dist/lifecycle/handlers/spec-chain-handlers.js.map +1 -1
  77. package/dist/lifecycle/handlers/terminal-handlers.d.ts +8 -0
  78. package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
  79. package/dist/lifecycle/handlers/terminal-handlers.js +168 -11
  80. package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
  81. package/dist/lifecycle/lifecycle-context.d.ts +0 -2
  82. package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
  83. package/dist/lifecycle/merge-stage-stats.d.ts +58 -0
  84. package/dist/lifecycle/merge-stage-stats.d.ts.map +1 -0
  85. package/dist/lifecycle/merge-stage-stats.js +120 -0
  86. package/dist/lifecycle/merge-stage-stats.js.map +1 -0
  87. package/dist/lifecycle/shared-compute.js +4 -4
  88. package/dist/lifecycle/shared-compute.js.map +1 -1
  89. package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
  90. package/dist/lifecycle/stage-plan-builder.js +6 -0
  91. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  92. package/dist/lifecycle/stage-plan-types.d.ts +18 -0
  93. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  94. package/dist/lifecycle/stage-progression.d.ts +20 -0
  95. package/dist/lifecycle/stage-progression.d.ts.map +1 -0
  96. package/dist/lifecycle/stage-progression.js +165 -0
  97. package/dist/lifecycle/stage-progression.js.map +1 -0
  98. package/dist/lifecycle/task-executor.d.ts.map +1 -1
  99. package/dist/lifecycle/task-executor.js +55 -10
  100. package/dist/lifecycle/task-executor.js.map +1 -1
  101. package/dist/lifecycle/task-runner.d.ts +7 -3
  102. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  103. package/dist/lifecycle/task-runner.js +43 -7
  104. package/dist/lifecycle/task-runner.js.map +1 -1
  105. package/dist/providers/anthropic-messages-adapter.d.ts.map +1 -1
  106. package/dist/providers/anthropic-messages-adapter.js +25 -1
  107. package/dist/providers/anthropic-messages-adapter.js.map +1 -1
  108. package/dist/providers/base/result-builders.d.ts +1 -1
  109. package/dist/providers/base/result-builders.d.ts.map +1 -1
  110. package/dist/providers/base/result-builders.js +4 -4
  111. package/dist/providers/base/result-builders.js.map +1 -1
  112. package/dist/providers/make-runner-shell.d.ts.map +1 -1
  113. package/dist/providers/make-runner-shell.js +6 -5
  114. package/dist/providers/make-runner-shell.js.map +1 -1
  115. package/dist/providers/openai-chat-adapter.d.ts +0 -2
  116. package/dist/providers/openai-chat-adapter.d.ts.map +1 -1
  117. package/dist/providers/openai-chat-adapter.js +2 -3
  118. package/dist/providers/openai-chat-adapter.js.map +1 -1
  119. package/dist/providers/openai-responses-adapter.d.ts +1 -2
  120. package/dist/providers/openai-responses-adapter.d.ts.map +1 -1
  121. package/dist/providers/openai-responses-adapter.js +67 -39
  122. package/dist/providers/openai-responses-adapter.js.map +1 -1
  123. package/dist/providers/provider-factory.d.ts.map +1 -1
  124. package/dist/providers/provider-factory.js +51 -9
  125. package/dist/providers/provider-factory.js.map +1 -1
  126. package/dist/providers/runner-adapter.d.ts +10 -0
  127. package/dist/providers/runner-adapter.d.ts.map +1 -1
  128. package/dist/providers/runner-shell-types.d.ts +33 -0
  129. package/dist/providers/runner-shell-types.d.ts.map +1 -1
  130. package/dist/providers/runner-shell.d.ts +10 -1
  131. package/dist/providers/runner-shell.d.ts.map +1 -1
  132. package/dist/providers/runner-shell.js +251 -18
  133. package/dist/providers/runner-shell.js.map +1 -1
  134. package/dist/providers/runner-types.d.ts +21 -2
  135. package/dist/providers/runner-types.d.ts.map +1 -1
  136. package/dist/providers/tool-name-sets.d.ts +29 -0
  137. package/dist/providers/tool-name-sets.d.ts.map +1 -0
  138. package/dist/providers/tool-name-sets.js +41 -0
  139. package/dist/providers/tool-name-sets.js.map +1 -0
  140. package/dist/reporting/headline-composer.d.ts +12 -0
  141. package/dist/reporting/headline-composer.d.ts.map +1 -1
  142. package/dist/reporting/headline-composer.js.map +1 -1
  143. package/dist/reporting/headline-templates/audit.d.ts.map +1 -1
  144. package/dist/reporting/headline-templates/audit.js +35 -6
  145. package/dist/reporting/headline-templates/audit.js.map +1 -1
  146. package/dist/reporting/headline-templates/debug.d.ts +22 -3
  147. package/dist/reporting/headline-templates/debug.d.ts.map +1 -1
  148. package/dist/reporting/headline-templates/debug.js +38 -8
  149. package/dist/reporting/headline-templates/debug.js.map +1 -1
  150. package/dist/reporting/headline-templates/delegate.d.ts.map +1 -1
  151. package/dist/reporting/headline-templates/delegate.js +36 -6
  152. package/dist/reporting/headline-templates/delegate.js.map +1 -1
  153. package/dist/reporting/headline-templates/execute-plan.d.ts.map +1 -1
  154. package/dist/reporting/headline-templates/execute-plan.js +18 -6
  155. package/dist/reporting/headline-templates/execute-plan.js.map +1 -1
  156. package/dist/reporting/headline-templates/review.d.ts.map +1 -1
  157. package/dist/reporting/headline-templates/review.js +32 -8
  158. package/dist/reporting/headline-templates/review.js.map +1 -1
  159. package/dist/reporting/headline-templates/verify.d.ts.map +1 -1
  160. package/dist/reporting/headline-templates/verify.js +23 -6
  161. package/dist/reporting/headline-templates/verify.js.map +1 -1
  162. package/dist/reporting/headline-text.d.ts +36 -0
  163. package/dist/reporting/headline-text.d.ts.map +1 -0
  164. package/dist/reporting/headline-text.js +73 -0
  165. package/dist/reporting/headline-text.js.map +1 -0
  166. package/dist/reporting/report-parser-slots/verify-report.d.ts +17 -0
  167. package/dist/reporting/report-parser-slots/verify-report.d.ts.map +1 -1
  168. package/dist/reporting/report-parser-slots/verify-report.js +45 -3
  169. package/dist/reporting/report-parser-slots/verify-report.js.map +1 -1
  170. package/dist/reporting/severity.d.ts +62 -0
  171. package/dist/reporting/severity.d.ts.map +1 -0
  172. package/dist/reporting/severity.js +93 -0
  173. package/dist/reporting/severity.js.map +1 -0
  174. package/dist/reporting/structured-report.d.ts +3 -3
  175. package/dist/research/explore-orchestrator.d.ts.map +1 -1
  176. package/dist/research/explore-orchestrator.js +4 -5
  177. package/dist/research/explore-orchestrator.js.map +1 -1
  178. package/dist/review/annotator-engine.d.ts +8 -0
  179. package/dist/review/annotator-engine.d.ts.map +1 -1
  180. package/dist/review/annotator-engine.js +7 -1
  181. package/dist/review/annotator-engine.js.map +1 -1
  182. package/dist/review/annotator-output-parser.d.ts.map +1 -1
  183. package/dist/review/annotator-output-parser.js +94 -14
  184. package/dist/review/annotator-output-parser.js.map +1 -1
  185. package/dist/review/annotator-prompt-builder.d.ts +20 -0
  186. package/dist/review/annotator-prompt-builder.d.ts.map +1 -1
  187. package/dist/review/annotator-prompt-builder.js +52 -1
  188. package/dist/review/annotator-prompt-builder.js.map +1 -1
  189. package/dist/review/review-types.d.ts +6 -2
  190. package/dist/review/review-types.d.ts.map +1 -1
  191. package/dist/review/reviewer-engine.d.ts +25 -0
  192. package/dist/review/reviewer-engine.d.ts.map +1 -1
  193. package/dist/review/reviewer-engine.js +18 -1
  194. package/dist/review/reviewer-engine.js.map +1 -1
  195. package/dist/review/reviewer-output-parser.d.ts.map +1 -1
  196. package/dist/review/reviewer-output-parser.js +190 -13
  197. package/dist/review/reviewer-output-parser.js.map +1 -1
  198. package/dist/review/reviewer-prompt-builder.d.ts +4 -12
  199. package/dist/review/reviewer-prompt-builder.d.ts.map +1 -1
  200. package/dist/review/reviewer-prompt-builder.js.map +1 -1
  201. package/dist/review/templates/diff-review.d.ts +8 -0
  202. package/dist/review/templates/diff-review.d.ts.map +1 -1
  203. package/dist/review/templates/diff-review.js +34 -2
  204. package/dist/review/templates/diff-review.js.map +1 -1
  205. package/dist/review/templates/finding-criteria.d.ts +39 -0
  206. package/dist/review/templates/finding-criteria.d.ts.map +1 -0
  207. package/dist/review/templates/finding-criteria.js +80 -0
  208. package/dist/review/templates/finding-criteria.js.map +1 -0
  209. package/dist/review/templates/quality-review-artifact.d.ts +13 -0
  210. package/dist/review/templates/quality-review-artifact.d.ts.map +1 -1
  211. package/dist/review/templates/quality-review-artifact.js +41 -3
  212. package/dist/review/templates/quality-review-artifact.js.map +1 -1
  213. package/dist/review/templates/shared.d.ts +22 -5
  214. package/dist/review/templates/shared.d.ts.map +1 -1
  215. package/dist/review/templates/spec-review.d.ts +15 -0
  216. package/dist/review/templates/spec-review.d.ts.map +1 -1
  217. package/dist/review/templates/spec-review.js +43 -3
  218. package/dist/review/templates/spec-review.js.map +1 -1
  219. package/dist/stores/batch-registry.d.ts +18 -0
  220. package/dist/stores/batch-registry.d.ts.map +1 -1
  221. package/dist/stores/batch-registry.js +10 -0
  222. package/dist/stores/batch-registry.js.map +1 -1
  223. package/dist/stores/context-block-tool.d.ts +14 -0
  224. package/dist/stores/context-block-tool.d.ts.map +1 -1
  225. package/dist/stores/context-block-tool.js.map +1 -1
  226. package/dist/stores/file-backed-context-block-store.d.ts +63 -0
  227. package/dist/stores/file-backed-context-block-store.d.ts.map +1 -0
  228. package/dist/stores/file-backed-context-block-store.js +293 -0
  229. package/dist/stores/file-backed-context-block-store.js.map +1 -0
  230. package/dist/stores/project-context-registry.d.ts +16 -3
  231. package/dist/stores/project-context-registry.d.ts.map +1 -1
  232. package/dist/stores/project-context-registry.js +9 -2
  233. package/dist/stores/project-context-registry.js.map +1 -1
  234. package/dist/tools/audit/schema.d.ts +2 -2
  235. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  236. package/dist/tools/audit/tool-config.js +23 -6
  237. package/dist/tools/audit/tool-config.js.map +1 -1
  238. package/dist/tools/debug/tool-config.d.ts.map +1 -1
  239. package/dist/tools/debug/tool-config.js +17 -4
  240. package/dist/tools/debug/tool-config.js.map +1 -1
  241. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  242. package/dist/tools/execute-plan/tool-config.js +5 -1
  243. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  244. package/dist/tools/investigate/tool-config.d.ts +13 -1
  245. package/dist/tools/investigate/tool-config.d.ts.map +1 -1
  246. package/dist/tools/investigate/tool-config.js +34 -4
  247. package/dist/tools/investigate/tool-config.js.map +1 -1
  248. package/dist/tools/retry/tool-config.d.ts.map +1 -1
  249. package/dist/tools/retry/tool-config.js +28 -5
  250. package/dist/tools/retry/tool-config.js.map +1 -1
  251. package/dist/tools/review/schema.d.ts +1 -1
  252. package/dist/tools/review/tool-config.d.ts.map +1 -1
  253. package/dist/tools/review/tool-config.js +19 -4
  254. package/dist/tools/review/tool-config.js.map +1 -1
  255. package/dist/tools/verify/tool-config.d.ts.map +1 -1
  256. package/dist/tools/verify/tool-config.js +17 -4
  257. package/dist/tools/verify/tool-config.js.map +1 -1
  258. package/dist/types/enums.d.ts +10 -10
  259. package/package.json +5 -1
  260. package/dist/intake/brief-compiler-slots/investigate.d.ts +0 -26
  261. package/dist/intake/brief-compiler-slots/investigate.d.ts.map +0 -1
  262. package/dist/intake/brief-compiler-slots/investigate.js +0 -42
  263. package/dist/intake/brief-compiler-slots/investigate.js.map +0 -1
@@ -4,6 +4,7 @@ import { delegateWithEscalation } from '../../escalation/delegate-with-escalatio
4
4
  import { runWithFallback, TRANSPORT_FAILURES, isReviewTransportFailure, makeSyntheticRunResult, } from '../../escalation/fallback.js';
5
5
  import { makeSkippedReviewResult } from '../../review/skipped-result.js';
6
6
  import { makeRunnerShell } from '../../providers/make-runner-shell.js';
7
+ import { mergeStageStats, replaceLastRunResultPreservingTrackers } from '../merge-stage-stats.js';
7
8
  async function runSpecReviewRound(input) {
8
9
  const { state, ctx, round } = input;
9
10
  const last = state.lastRunResult;
@@ -16,6 +17,19 @@ async function runSpecReviewRound(input) {
16
17
  return null;
17
18
  state.specUnavailable ??= new Map();
18
19
  const specUnavailable = state.specUnavailable;
20
+ // Tool sweep #6: produce the cumulative diff so the reviewer sees
21
+ // the actual code change, not just the worker's text claim. Empty
22
+ // string when no diff tracker (read-only routes) or no changes.
23
+ let cumulativeDiff = '';
24
+ if (state.diffTracker) {
25
+ try {
26
+ cumulativeDiff = await state.diffTracker.cumulativeDiff();
27
+ }
28
+ catch {
29
+ // Diff failures shouldn't block review. Falls back to text-only.
30
+ }
31
+ }
32
+ const priorConcerns = Array.isArray(state.priorSpecConcerns) ? state.priorSpecConcerns : [];
19
33
  const reviewerCall = await runWithFallback({
20
34
  assigned: reviewerTier,
21
35
  providerFor: (tier) => ctx.providers[tier],
@@ -23,7 +37,7 @@ async function runSpecReviewRound(input) {
23
37
  isTransportFailure: (r) => isReviewTransportFailure(r),
24
38
  getStatus: (r) => r.status,
25
39
  makeSyntheticFailure: () => makeSkippedReviewResult('all_tiers_unavailable'),
26
- call: async (provider) => {
40
+ call: async (provider, usedTier) => {
27
41
  const shell = makeRunnerShell(provider);
28
42
  const engine = ctx.reviewerEngine;
29
43
  if (!engine)
@@ -34,8 +48,15 @@ async function runSpecReviewRound(input) {
34
48
  brief: task.prompt ?? '',
35
49
  cwd: ctx.cwd,
36
50
  route: (state.route ?? ctx.route),
51
+ diff: cumulativeDiff,
52
+ priorConcerns,
37
53
  abortSignal: ctx.stall.controller.signal,
38
54
  deadlineMs: ctx.timing.deadlineMs,
55
+ ...(ctx.bus && { bus: ctx.bus }),
56
+ ...(ctx.batchId !== undefined && { batchId: ctx.batchId }),
57
+ ...(ctx.taskIndex !== undefined && { taskIndex: ctx.taskIndex }),
58
+ tier: usedTier,
59
+ stageLabel: 'Spec review',
39
60
  });
40
61
  }
41
62
  catch (err) {
@@ -73,17 +94,27 @@ async function runSpecRework(input) {
73
94
  isTransportFailure: (r) => TRANSPORT_FAILURES.has(r.status) && r.incompleteReason === undefined,
74
95
  getStatus: (r) => r.status,
75
96
  makeSyntheticFailure: (assigned) => makeSyntheticRunResult(assigned, 'all_tiers_unavailable'),
76
- call: (provider) => delegateWithEscalation({
97
+ call: (provider, usedTier) => delegateWithEscalation({
77
98
  prompt: reworkTask.prompt,
78
99
  cwd: ctx.cwd,
79
- agentType: decision.impl,
100
+ agentType: usedTier,
80
101
  briefQualityPolicy: 'off',
81
102
  timeoutMs: ctx.timing.timeoutMs,
82
103
  }, [provider], {
83
104
  explicitlyPinned: true,
84
105
  taskDeadlineMs: ctx.timing.deadlineMs,
85
106
  abortSignal: ctx.stall.controller.signal,
86
- assignedTier: decision.impl,
107
+ assignedTier: usedTier,
108
+ // Without bus the rework's runner-shell.emit calls go nowhere — the
109
+ // implementer turns then run silently, the reviewer keeps seeing
110
+ // (slightly) updated code, and the chain marches through 3 rounds
111
+ // with no visible Implementing events. Pass the same bus + ids the
112
+ // initial-impl call uses so verbose stderr + the running headline
113
+ // surface the rework's progress.
114
+ ...(ctx.bus && { bus: ctx.bus }),
115
+ ...(ctx.batchId !== undefined && { batchId: ctx.batchId }),
116
+ ...(ctx.taskIndex !== undefined && { taskIndex: ctx.taskIndex }),
117
+ stageLabel: `Spec rework round ${round - 1}`,
87
118
  }),
88
119
  });
89
120
  if (reworkCall.bothUnavailable)
@@ -105,17 +136,115 @@ function makeSpecReviewHandler(round) {
105
136
  if (!result)
106
137
  return;
107
138
  state[slot] = result.verdict;
139
+ // Tool sweep #6: accumulate concerns across rounds so the next
140
+ // reviewer can verify the rework addressed each one. We append
141
+ // unique concerns (skip duplicates from earlier rounds).
142
+ if (Array.isArray(result.concerns) && result.concerns.length > 0) {
143
+ const prior = Array.isArray(state.priorSpecConcerns) ? state.priorSpecConcerns : [];
144
+ const seen = new Set(prior);
145
+ const merged = [...prior];
146
+ for (const c of result.concerns) {
147
+ if (typeof c === 'string' && !seen.has(c)) {
148
+ seen.add(c);
149
+ merged.push(c);
150
+ }
151
+ }
152
+ state.priorSpecConcerns = merged;
153
+ }
154
+ // Persist concerns into lastRunResult so the wire's per-stage
155
+ // findingsBySeverity (driven by rr.concerns) reflects what the
156
+ // reviewer raised — without this, findings_critical/high/medium/low
157
+ // for spec_review stays 0 even on changes_required outcomes.
158
+ persistSpecReviewConcerns(state, result);
159
+ // Record per-round cost so wire task.completed sums reviewer tokens
160
+ // and the spec_review stage entry has cumulative roundsUsed across
161
+ // 1..3 rounds. Reviewer tier is derived from policy (round-based).
162
+ const baseTier = ctx.assignedTier;
163
+ const reviewerTier = (round - 1 < 2)
164
+ ? (baseTier === 'standard' ? 'complex' : 'standard')
165
+ : baseTier; // round 3 swaps back to base tier per SPEC_LOOP policy
166
+ const reviewerProvider = ctx.providers[reviewerTier];
167
+ mergeStageStats(state, 'spec_review', {
168
+ inputTokens: result.cost?.inputTokens ?? 0,
169
+ outputTokens: result.cost?.outputTokens ?? 0,
170
+ turnCount: result.cost?.turnCount ?? 0,
171
+ toolCallCount: result.cost?.toolCallCount ?? 0,
172
+ costUSD: result.cost?.costUSD ?? null,
173
+ durationMs: result.cost?.durationMs ?? null,
174
+ }, {
175
+ tier: reviewerTier,
176
+ model: reviewerProvider?.config?.model ?? null,
177
+ verdict: result.verdict,
178
+ });
108
179
  };
109
180
  }
181
+ /** Push reviewer concerns into state.lastRunResult.concerns so the wire
182
+ * findingsBySeverity bucket for spec_review counts them. Spec reviewer
183
+ * emits free-text concerns (no per-item severity), so we default to
184
+ * 'medium' — this matches the v3.x defaulting in event-builder. */
185
+ function persistSpecReviewConcerns(state, result) {
186
+ const last = state.lastRunResult;
187
+ if (!last)
188
+ return;
189
+ const reviewerConcerns = result.concerns;
190
+ if (!Array.isArray(reviewerConcerns) || reviewerConcerns.length === 0)
191
+ return;
192
+ const newConcerns = reviewerConcerns.map(text => ({
193
+ source: 'spec_review',
194
+ severity: 'medium',
195
+ message: text,
196
+ }));
197
+ last.concerns = [...(last.concerns ?? []), ...newConcerns];
198
+ }
110
199
  function makeSpecReworkHandler(round) {
111
200
  return async function specReworkHandler(state) {
112
201
  const ctx = state.executionContext;
113
202
  if (!ctx)
114
203
  return;
115
204
  const newResult = await runSpecRework({ state, ctx, round: (round + 1) });
116
- if (!newResult)
205
+ if (!newResult) {
206
+ // The rework's implementer call did not return an ok RunResult.
207
+ // Don't silently fall through to the next review round — that would
208
+ // re-review the unchanged code and produce the "3 reviews, 0 reworks"
209
+ // pattern. Mark the chain failed so the next round's `!s.terminal`
210
+ // gate stops the cascade and settle_spec_chain can record the
211
+ // failure on the wire envelope.
212
+ state.specReworkFailed = true;
213
+ state.terminal = true;
214
+ if (ctx.verbose && typeof ctx.verboseStream === 'function') {
215
+ ctx.verboseStream(`[mmagent verbose] event=spec_rework_failed ts=${new Date().toISOString()} batch_id=${ctx.batchId ?? ''} task_index=${ctx.taskIndex ?? 0} round=${round}\n`);
216
+ }
117
217
  return;
118
- state.lastRunResult = newResult;
218
+ }
219
+ // Tool sweep #6: union filesRead/filesWritten/toolCalls + preserve
220
+ // stageStats. Pre-fix this branch only kept stageStats and dropped
221
+ // file-tracker arrays — a spec-rework with 0 writes wiped the
222
+ // implementer's recorded write, the envelope's filesWritten went
223
+ // empty, and downstream qualityReviewStatus reported "no file
224
+ // artifacts to review" despite the file being modified on disk.
225
+ replaceLastRunResultPreservingTrackers(state, newResult);
226
+ // Record rework cost in spec_rework stage stats so wire telemetry sees
227
+ // it. round=1 → attemptIndex 1, round=2 → attemptIndex 2; rework tier
228
+ // mirrors pickEscalation (impl=standard for attemptIndex 1; impl=complex
229
+ // for attemptIndex 2 when baseTier=standard).
230
+ const baseTier = ctx.assignedTier;
231
+ const reworkTier = (round === 2 && baseTier === 'standard') ? 'complex' : baseTier;
232
+ const reworkProvider = ctx.providers[reworkTier];
233
+ mergeStageStats(state, 'spec_rework', {
234
+ inputTokens: newResult.usage?.inputTokens ?? 0,
235
+ outputTokens: newResult.usage?.outputTokens ?? 0,
236
+ cachedReadTokens: newResult.usage?.cachedReadTokens ?? 0,
237
+ cachedNonReadTokens: newResult.usage?.cachedNonReadTokens ?? 0,
238
+ turnCount: newResult.turns ?? 0,
239
+ toolCallCount: Array.isArray(newResult.toolCalls) ? newResult.toolCalls.length : 0,
240
+ costUSD: newResult.cost?.costUSD ?? null,
241
+ durationMs: newResult.durationMs ?? null,
242
+ filesReadCount: Array.isArray(newResult.filesRead) ? newResult.filesRead.length : 0,
243
+ filesWrittenCount: Array.isArray(newResult.filesWritten) ? newResult.filesWritten.length : 0,
244
+ }, {
245
+ tier: reworkTier,
246
+ model: reworkProvider?.config?.model ?? null,
247
+ });
119
248
  };
120
249
  }
121
250
  export const specReviewRound1Handler = makeSpecReviewHandler(1);
@@ -1 +1 @@
1
- {"version":3,"file":"spec-chain-handlers.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/spec-chain-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-chain-handlers.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/spec-chain-handlers.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,13 @@ import type { LifecycleState } from '../stage-plan-types.js';
2
2
  export declare function registerTerminalBlockHandler(state: LifecycleState): void;
3
3
  export declare function emitTaskTerminalHandler(state: LifecycleState): void;
4
4
  export declare function persistToBatchRegistryHandler(state: LifecycleState): void;
5
+ /**
6
+ * Row 5.6 — record_task_completed.
7
+ *
8
+ * Builds the cloud `task.completed` wire event and hands it to the server
9
+ * recorder. Idempotent on state.taskCompletedRecorded. No-op when the
10
+ * server hasn't supplied a recorder (CLI/test paths).
11
+ */
12
+ export declare function recordTaskCompletedHandler(state: LifecycleState): void;
5
13
  export declare function flushTelemetryHandler(state: LifecycleState): Promise<void>;
6
14
  //# sourceMappingURL=terminal-handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-handlers.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/terminal-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAiC7D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAqBxE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAuCnE;AAMD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAkBzE;AAMD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhF"}
1
+ {"version":3,"file":"terminal-handlers.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/terminal-handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAiC7D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAqBxE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CA0GnE;AAMD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAkBzE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAoCtE;AA8CD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhF"}
@@ -33,8 +33,78 @@ export function emitTaskTerminalHandler(state) {
33
33
  return;
34
34
  }
35
35
  const last = state.lastRunResult;
36
- const usage = last?.usage ?? { inputTokens: 0, outputTokens: 0, cachedReadTokens: 0, cachedNonReadTokens: 0 };
37
- const stages = JSON.stringify({});
36
+ // Sum tokens / counts across every recorded stage so the local task_completed
37
+ // event carries the FULL cost (implementer + reviewer + annotator + rework
38
+ // + diff). Previously this read last.usage directly which only carried the
39
+ // implementer tokens — reviewer / annotator costs were dropped.
40
+ let inputTokens = 0;
41
+ let outputTokens = 0;
42
+ let cachedReadTokens = 0;
43
+ let cachedNonReadTokens = 0;
44
+ let totalCostUSD = null;
45
+ let toolCallsTotal = 0;
46
+ let turnsTotal = 0;
47
+ let filesReadTotal = 0;
48
+ let filesWrittenTotal = 0;
49
+ const ss = last?.stageStats;
50
+ if (ss) {
51
+ for (const stage of Object.values(ss)) {
52
+ if (!stage || !stage['entered'])
53
+ continue;
54
+ inputTokens += stage['inputTokens'] ?? 0;
55
+ outputTokens += stage['outputTokens'] ?? 0;
56
+ cachedReadTokens += stage['cachedReadTokens'] ?? 0;
57
+ cachedNonReadTokens += stage['cachedNonReadTokens'] ?? 0;
58
+ toolCallsTotal += stage['toolCallCount'] ?? 0;
59
+ turnsTotal += stage['turnCount'] ?? 0;
60
+ filesReadTotal += stage['filesReadCount'] ?? 0;
61
+ filesWrittenTotal += stage['filesWrittenCount'] ?? 0;
62
+ const stageCost = stage['costUSD'];
63
+ if (stageCost !== null && stageCost !== undefined) {
64
+ totalCostUSD = (totalCostUSD ?? 0) + stageCost;
65
+ }
66
+ }
67
+ }
68
+ // Fallback to last.usage when stageStats wasn't populated (legacy paths).
69
+ if (inputTokens === 0 && outputTokens === 0 && last?.usage) {
70
+ inputTokens = last.usage.inputTokens ?? 0;
71
+ outputTokens = last.usage.outputTokens ?? 0;
72
+ cachedReadTokens = last.usage.cachedReadTokens ?? 0;
73
+ cachedNonReadTokens = last.usage.cachedNonReadTokens ?? 0;
74
+ }
75
+ if (turnsTotal === 0)
76
+ turnsTotal = last?.turns ?? 0;
77
+ if (toolCallsTotal === 0)
78
+ toolCallsTotal = Array.isArray(last?.toolCalls) ? last.toolCalls.length : 0;
79
+ if (filesReadTotal === 0)
80
+ filesReadTotal = Array.isArray(last?.filesRead) ? last.filesRead.length : 0;
81
+ if (filesWrittenTotal === 0)
82
+ filesWrittenTotal = Array.isArray(last?.filesWritten) ? last.filesWritten.length : 0;
83
+ // Emit a per-stage map so consumers see the breakdown without unpacking
84
+ // RunResult. Each entry: stage -> { inputTokens, outputTokens, costUSD,
85
+ // turnCount, toolCallCount, durationMs, tier, model, verdict? }.
86
+ const stagesMap = {};
87
+ if (ss) {
88
+ for (const [name, stage] of Object.entries(ss)) {
89
+ if (!stage || !stage['entered'])
90
+ continue;
91
+ stagesMap[name] = {
92
+ inputTokens: stage['inputTokens'] ?? 0,
93
+ outputTokens: stage['outputTokens'] ?? 0,
94
+ cachedReadTokens: stage['cachedReadTokens'] ?? 0,
95
+ cachedNonReadTokens: stage['cachedNonReadTokens'] ?? 0,
96
+ costUSD: stage['costUSD'] ?? null,
97
+ turnCount: stage['turnCount'] ?? 0,
98
+ toolCallCount: stage['toolCallCount'] ?? 0,
99
+ durationMs: stage['durationMs'] ?? null,
100
+ agentTier: stage['agentTier'] ?? null,
101
+ model: stage['model'] ?? null,
102
+ ...(stage['verdict'] !== undefined && { verdict: stage['verdict'] }),
103
+ ...(stage['roundsUsed'] !== undefined && { roundsUsed: stage['roundsUsed'] }),
104
+ };
105
+ }
106
+ }
107
+ const stages = JSON.stringify(stagesMap);
38
108
  bus.emit({
39
109
  event: 'task_completed',
40
110
  ts: new Date().toISOString(),
@@ -43,16 +113,16 @@ export function emitTaskTerminalHandler(state) {
43
113
  route: state.route,
44
114
  status: last?.status ?? 'error',
45
115
  workerStatus: last?.workerStatus ?? null,
46
- turns: last?.turns ?? 0,
116
+ turns: turnsTotal,
47
117
  durationMs: last?.durationMs ?? null,
48
- filesRead: Array.isArray(last?.filesRead) ? last.filesRead.length : 0,
49
- filesWritten: Array.isArray(last?.filesWritten) ? last.filesWritten.length : 0,
50
- toolCalls: Array.isArray(last?.toolCalls) ? last.toolCalls.length : 0,
51
- inputTokens: usage.inputTokens ?? 0,
52
- outputTokens: usage.outputTokens ?? 0,
53
- cachedReadTokens: usage.cachedReadTokens ?? 0,
54
- cachedNonReadTokens: usage.cachedNonReadTokens ?? 0,
55
- costUSD: null,
118
+ filesRead: filesReadTotal,
119
+ filesWritten: filesWrittenTotal,
120
+ toolCalls: toolCallsTotal,
121
+ inputTokens,
122
+ outputTokens,
123
+ cachedReadTokens,
124
+ cachedNonReadTokens,
125
+ costUSD: totalCostUSD,
56
126
  taskMaxIdleMs: null,
57
127
  stallTriggered: false,
58
128
  stages,
@@ -83,6 +153,93 @@ export function persistToBatchRegistryHandler(state) {
83
153
  }
84
154
  state.batchRegistryPersisted = true;
85
155
  }
156
+ /**
157
+ * Row 5.6 — record_task_completed.
158
+ *
159
+ * Builds the cloud `task.completed` wire event and hands it to the server
160
+ * recorder. Idempotent on state.taskCompletedRecorded. No-op when the
161
+ * server hasn't supplied a recorder (CLI/test paths).
162
+ */
163
+ export function recordTaskCompletedHandler(state) {
164
+ if (state.taskCompletedRecorded)
165
+ return;
166
+ const ctx = state.executionContext;
167
+ if (!ctx)
168
+ return;
169
+ const recorder = ctx.recorder;
170
+ if (!recorder || typeof recorder.recordTaskCompleted !== 'function') {
171
+ state.taskCompletedRecorded = true;
172
+ return;
173
+ }
174
+ const task = state.task;
175
+ const last = state.lastRunResult;
176
+ if (!task || !last) {
177
+ state.taskCompletedRecorded = true;
178
+ return;
179
+ }
180
+ ensureImplementingStage(last, ctx);
181
+ try {
182
+ // Gap 15 fix (4.0.3+): thread the per-task reviewPolicy into the
183
+ // wire BuildContext so the wire row reflects what the lifecycle
184
+ // actually ran. Pre-fix the BuildContext fell back to the route
185
+ // default ('full' for delegate, 'quality_only' for read-only),
186
+ // overriding per-task TaskSpec.reviewPolicy that the lifecycle
187
+ // had already honored at the row level. Now: per-task wins; the
188
+ // route default applies only when the task didn't specify.
189
+ recorder.recordTaskCompleted({
190
+ route: ctx.route,
191
+ taskSpec: task,
192
+ runResult: last,
193
+ client: ctx.client ?? '',
194
+ mainModel: ctx.mainModel ?? null,
195
+ ...(task.reviewPolicy !== undefined && { reviewPolicy: task.reviewPolicy }),
196
+ });
197
+ }
198
+ catch {
199
+ // recorder is best-effort — never break terminal flow on telemetry.
200
+ }
201
+ state.taskCompletedRecorded = true;
202
+ }
203
+ /**
204
+ * Synthesize an `implementing` stage entry from top-level RunResult fields
205
+ * when the per-stage tracker hasn't populated it. Without this, the wire
206
+ * event ships with `stages: []` for every task, which violates the backend's
207
+ * R2.1 invariant ("empty stages only allowed for brief_too_vague|error")
208
+ * for any task that succeeded — every upload would 400.
209
+ *
210
+ * This is a fallback; it does not replace stats already populated by the
211
+ * runner-shell or lifecycle stage tracker.
212
+ */
213
+ function ensureImplementingStage(rr, ctx) {
214
+ const existing = (rr.stageStats?.implementing);
215
+ if (existing?.entered)
216
+ return;
217
+ const usage = rr.usage ?? { inputTokens: 0, outputTokens: 0, cachedReadTokens: 0, cachedNonReadTokens: 0 };
218
+ const synthesized = {
219
+ stage: 'implementing',
220
+ entered: true,
221
+ durationMs: rr.durationMs ?? 0,
222
+ costUSD: rr.cost?.costUSD ?? null,
223
+ agentTier: ctx.assignedTier ?? 'standard',
224
+ modelFamily: null,
225
+ model: null,
226
+ maxIdleMs: 0,
227
+ totalIdleMs: 0,
228
+ activityEvents: 0,
229
+ inputTokens: usage.inputTokens ?? 0,
230
+ outputTokens: usage.outputTokens ?? 0,
231
+ cachedReadTokens: usage.cachedReadTokens ?? 0,
232
+ cachedNonReadTokens: usage.cachedNonReadTokens ?? 0,
233
+ turnCount: rr.turns ?? 0,
234
+ toolCallCount: Array.isArray(rr.toolCalls) ? rr.toolCalls.length : 0,
235
+ filesReadCount: Array.isArray(rr.filesRead) ? rr.filesRead.length : 0,
236
+ filesWrittenCount: Array.isArray(rr.filesWritten) ? rr.filesWritten.length : 0,
237
+ };
238
+ rr.stageStats = {
239
+ ...(rr.stageStats ?? {}),
240
+ implementing: synthesized,
241
+ };
242
+ }
86
243
  export async function flushTelemetryHandler(state) {
87
244
  if (state.telemetryFlushed)
88
245
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-handlers.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/terminal-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-handlers.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/terminal-handlers.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,6 @@ export interface ExecutionContext {
25
25
  cwd: string;
26
26
  route: string;
27
27
  client: string;
28
- triggeringSkill: string;
29
28
  mainModel: string | null;
30
29
  /** Tier the dispatcher assigned to this task. Stays fixed; rotation lives in per-round handlers via pickReviewer/pickEscalation. */
31
30
  assignedTier: AgentType;
@@ -77,7 +76,6 @@ export interface ExecutionContext {
77
76
  taskSpec: TaskSpec;
78
77
  runResult: import('../types.js').RunResult;
79
78
  client: string;
80
- triggeringSkill: string;
81
79
  mainModel: string | null;
82
80
  reviewPolicy?: 'full' | 'quality_only' | 'diff_only' | 'none';
83
81
  verifyCommandPresent?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-context.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lifecycle-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle-context.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lifecycle-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAE/B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,oIAAoI;IACpI,YAAY,EAAE,SAAS,CAAC;IACxB,mBAAmB,EAAE,QAAQ,CAAC;IAC9B,iHAAiH;IACjH,kBAAkB,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC,uFAAuF;IACvF,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChD,mBAAmB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAGnD,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,CAAC;IAGF,KAAK,EAAE;QACL,UAAU,EAAE,eAAe,CAAC;QAC5B,gFAAgF;QAChF,aAAa,EAAE,MAAM,CAAC;QACtB,4DAA4D;QAC5D,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IAGF,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEvC,yFAAyF;IACzF,0BAA0B,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAGtF,GAAG,EAAE,YAAY,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,eAAe,GAAG,SAAS,CAAC;IACvC,8EAA8E;IAC9E,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,uDAAuD;IACvD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAEpD,mFAAmF;IACnF,QAAQ,CAAC,EAAE;QACT,mBAAmB,EAAE,CAAC,MAAM,EAAE;YAC5B,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,QAAQ,CAAC;YACnB,SAAS,EAAE,OAAO,aAAa,EAAE,SAAS,CAAC;YAC3C,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;YACzB,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;YAC9D,oBAAoB,CAAC,EAAE,OAAO,CAAC;SAChC,KAAK,IAAI,CAAC;KACZ,CAAC;IAGF,aAAa,EAAE,MAAM,EAAE,CAAC;IAGxB,+FAA+F;IAC/F,cAAc,CAAC,EAAE,OAAO,8BAA8B,EAAE,cAAc,CAAC;IACvE,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,+BAA+B,EAAE,eAAe,CAAC;IAG1E,qFAAqF;IACrF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,58 @@
1
+ import type { LifecycleState } from './stage-plan-types.js';
2
+ import type { RunResult } from '../types.js';
3
+ export type StageName = 'implementing' | 'spec_review' | 'spec_rework' | 'quality_review' | 'quality_rework' | 'diff_review' | 'verifying' | 'committing';
4
+ interface StageDelta {
5
+ inputTokens: number;
6
+ outputTokens: number;
7
+ cachedReadTokens?: number;
8
+ cachedNonReadTokens?: number;
9
+ turnCount: number;
10
+ toolCallCount: number;
11
+ costUSD: number | null;
12
+ durationMs: number | null;
13
+ filesReadCount?: number;
14
+ filesWrittenCount?: number;
15
+ }
16
+ interface StageOptions {
17
+ tier: 'standard' | 'complex' | null;
18
+ model: string | null;
19
+ modelFamily?: string | null;
20
+ /** For spec_review / quality_review / diff_review only. */
21
+ verdict?: string;
22
+ /** For spec_review / quality_review / diff_review only — defaults to +1
23
+ * per call so multi-round chains accumulate naturally. */
24
+ roundsDelta?: number;
25
+ }
26
+ /**
27
+ * Merge a stage's per-call cost into state.lastRunResult.stageStats.
28
+ * Multi-round stages accumulate; single-shot stages overwrite.
29
+ */
30
+ export declare function mergeStageStats(state: LifecycleState, stage: StageName, delta: StageDelta, options: StageOptions): void;
31
+ /**
32
+ * Replace state.lastRunResult with the rework-stage's `newResult`, but
33
+ * preserve cumulative file-tracker arrays AND stageStats from the prior
34
+ * lastRunResult.
35
+ *
36
+ * Tool sweep #6 fix: the spec-chain and quality-chain handlers both
37
+ * replaced `state.lastRunResult` with the rework's RunResult, only
38
+ * keeping `stageStats`. Implementing-stage file writes were thereby
39
+ * lost when a spec-rework round produced no writes:
40
+ * implementer: filesWritten=['/x.ts'] ← real edit applied
41
+ * spec_review: no run
42
+ * spec_rework: filesWritten=[] ← reads but no writes
43
+ * Envelope read `lastRunResult.filesWritten` → `[]`, downstream
44
+ * `qualityReviewStatus` collapsed to "task produced no file artifacts
45
+ * to review" and the headline reported "(0 files)" even though the
46
+ * implementer had successfully made the requested edit.
47
+ *
48
+ * Stage stats already tracked the writes correctly per-stage (the wire
49
+ * telemetry's `findings_low` etc. are computed from stageStats). Only
50
+ * the result envelope's `filesRead` / `filesWritten` / `toolCalls`
51
+ * arrays were broken.
52
+ *
53
+ * Fix: union the arrays across all rework rounds. Stable de-dupe via
54
+ * Set so a file edited twice doesn't appear twice in the envelope.
55
+ */
56
+ export declare function replaceLastRunResultPreservingTrackers(state: LifecycleState, newResult: RunResult): void;
57
+ export {};
58
+ //# sourceMappingURL=merge-stage-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-stage-stats.d.ts","sourceRoot":"","sources":["../../src/lifecycle/merge-stage-stats.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,WAAW,GACX,YAAY,CAAC;AAEjB,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;+DAC2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,GACpB,IAAI,CAsCN;AASD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,SAAS,GACnB,IAAI,CAiCN"}