@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 runQualityReviewRound(input) {
8
9
  const { state, ctx, round } = input;
9
10
  const last = state.lastRunResult;
@@ -24,6 +25,20 @@ async function runQualityReviewRound(input) {
24
25
  const filesWritten = last.filesWritten ?? [];
25
26
  state.qualityUnavailable ??= new Map();
26
27
  const qualityUnavailable = state.qualityUnavailable;
28
+ // Tool sweep #6: cumulative diff for quality review (artifact-producing
29
+ // routes). Same plumbing as spec-chain — reviewer needs to see the
30
+ // actual code change to make precise findings. Read-only routes don't
31
+ // have a diffTracker, so this is empty for them (and harmless).
32
+ let cumulativeDiff = '';
33
+ if (state.diffTracker) {
34
+ try {
35
+ cumulativeDiff = await state.diffTracker.cumulativeDiff();
36
+ }
37
+ catch {
38
+ // Diff failures shouldn't block review.
39
+ }
40
+ }
41
+ const priorConcerns = Array.isArray(state.priorQualityConcerns) ? state.priorQualityConcerns : [];
27
42
  const reviewerCall = await runWithFallback({
28
43
  assigned: reviewerTier,
29
44
  providerFor: (tier) => ctx.providers[tier],
@@ -31,7 +46,7 @@ async function runQualityReviewRound(input) {
31
46
  isTransportFailure: (r) => isReviewTransportFailure(r),
32
47
  getStatus: (r) => r.status,
33
48
  makeSyntheticFailure: () => makeSkippedReviewResult('all_tiers_unavailable'),
34
- call: async (provider) => {
49
+ call: async (provider, usedTier) => {
35
50
  const shell = makeRunnerShell(provider);
36
51
  if (isArtifactProducing) {
37
52
  const engine = ctx.reviewerEngine;
@@ -46,8 +61,15 @@ async function runQualityReviewRound(input) {
46
61
  fileContents,
47
62
  toolCallLog,
48
63
  filesWritten,
64
+ diff: cumulativeDiff,
65
+ priorConcerns,
49
66
  abortSignal: ctx.stall.controller.signal,
50
67
  deadlineMs: ctx.timing.deadlineMs,
68
+ ...(ctx.bus && { bus: ctx.bus }),
69
+ ...(ctx.batchId !== undefined && { batchId: ctx.batchId }),
70
+ ...(ctx.taskIndex !== undefined && { taskIndex: ctx.taskIndex }),
71
+ tier: usedTier,
72
+ stageLabel: 'Quality review',
51
73
  });
52
74
  }
53
75
  catch (err) {
@@ -67,6 +89,11 @@ async function runQualityReviewRound(input) {
67
89
  route: route,
68
90
  abortSignal: ctx.stall.controller.signal,
69
91
  deadlineMs: ctx.timing.deadlineMs,
92
+ ...(ctx.bus && { bus: ctx.bus }),
93
+ ...(ctx.batchId !== undefined && { batchId: ctx.batchId }),
94
+ ...(ctx.taskIndex !== undefined && { taskIndex: ctx.taskIndex }),
95
+ tier: usedTier,
96
+ stageLabel: 'Annotating',
70
97
  });
71
98
  },
72
99
  });
@@ -94,17 +121,22 @@ async function runQualityRework(state, ctx, attemptIndex) {
94
121
  isTransportFailure: (r) => TRANSPORT_FAILURES.has(r.status) && r.incompleteReason === undefined,
95
122
  getStatus: (r) => r.status,
96
123
  makeSyntheticFailure: (assigned) => makeSyntheticRunResult(assigned, 'all_tiers_unavailable'),
97
- call: (provider) => delegateWithEscalation({
124
+ call: (provider, usedTier) => delegateWithEscalation({
98
125
  prompt: reworkPrompt,
99
126
  cwd: ctx.cwd,
100
- agentType: decision.impl,
127
+ agentType: usedTier,
101
128
  briefQualityPolicy: 'off',
102
129
  timeoutMs: ctx.timing.timeoutMs,
103
130
  }, [provider], {
104
131
  explicitlyPinned: true,
105
132
  taskDeadlineMs: ctx.timing.deadlineMs,
106
133
  abortSignal: ctx.stall.controller.signal,
107
- assignedTier: decision.impl,
134
+ assignedTier: usedTier,
135
+ // Same fix as spec-chain rework — pass bus so runner events fire.
136
+ ...(ctx.bus && { bus: ctx.bus }),
137
+ ...(ctx.batchId !== undefined && { batchId: ctx.batchId }),
138
+ ...(ctx.taskIndex !== undefined && { taskIndex: ctx.taskIndex }),
139
+ stageLabel: `Quality rework round ${attemptIndex}`,
108
140
  }),
109
141
  });
110
142
  if (reworkCall.bothUnavailable)
@@ -131,8 +163,93 @@ function makeQualityReviewHandler(round) {
131
163
  if (!result)
132
164
  return;
133
165
  state[slot] = mapQualityVerdict(result);
166
+ // Tool sweep #6: accumulate concerns across rounds for reviewer
167
+ // continuity. Same merge pattern as priorSpecConcerns.
168
+ const concernsList = result.concerns;
169
+ if (Array.isArray(concernsList) && concernsList.length > 0) {
170
+ const prior = Array.isArray(state.priorQualityConcerns) ? state.priorQualityConcerns : [];
171
+ const seen = new Set(prior);
172
+ const merged = [...prior];
173
+ for (const c of concernsList) {
174
+ if (typeof c === 'string' && !seen.has(c)) {
175
+ seen.add(c);
176
+ merged.push(c);
177
+ }
178
+ }
179
+ state.priorQualityConcerns = merged;
180
+ }
181
+ // Persist findings + concerns onto lastRunResult so:
182
+ // - the wire event-builder's findingsBySeverity (reads rr.concerns)
183
+ // populates findings_critical/high/medium/low DB columns instead
184
+ // of zeros even on annotated audit/review/verify/debug/investigate runs;
185
+ // - the terminal envelope's annotatedFindings field carries the
186
+ // parsed findings the user can read (was empty before — the
187
+ // consumer had to fall back to extraSections).
188
+ persistReviewFindings(state, result);
189
+ // Record per-round cost in quality_review stageStats. Annotator path
190
+ // (read-only routes) and reviewer path both share the same stage slot;
191
+ // the verdict differentiates ('annotated' vs 'approved'/'changes_required').
192
+ const baseTier = ctx.assignedTier;
193
+ const reviewerTier = (round - 1 < 2)
194
+ ? (baseTier === 'standard' ? 'complex' : 'standard')
195
+ : baseTier;
196
+ const reviewerProvider = ctx.providers[reviewerTier];
197
+ const cost = result.cost;
198
+ mergeStageStats(state, 'quality_review', {
199
+ inputTokens: cost?.inputTokens ?? 0,
200
+ outputTokens: cost?.outputTokens ?? 0,
201
+ turnCount: cost?.turnCount ?? 0,
202
+ toolCallCount: cost?.toolCallCount ?? 0,
203
+ costUSD: cost?.costUSD ?? null,
204
+ durationMs: cost?.durationMs ?? null,
205
+ }, {
206
+ tier: reviewerTier,
207
+ model: reviewerProvider?.config?.model ?? null,
208
+ verdict: result.verdict,
209
+ });
134
210
  };
135
211
  }
212
+ /** Push the reviewer/annotator's findings into state.lastRunResult so the
213
+ * wire telemetry's per-stage `findingsBySeverity` + the terminal envelope's
214
+ * `annotatedFindings` see them. Without this:
215
+ * - wire findings_critical/high/medium/low all stay 0 even when the
216
+ * annotator returned a populated array;
217
+ * - envelope.results[N].annotatedFindings is empty and consumers have
218
+ * to mine extraSections to find the data.
219
+ * Idempotent across rounds (each round appends; the wire dedupes by
220
+ * per-stage filter so no double-counting). */
221
+ function persistReviewFindings(state, result) {
222
+ if ('status' in result && result.status === 'skipped')
223
+ return;
224
+ const last = state.lastRunResult;
225
+ if (!last)
226
+ return;
227
+ // Annotator result: structured findings array.
228
+ const annotatorFindings = result.annotatedFindings;
229
+ if (Array.isArray(annotatorFindings) && annotatorFindings.length > 0) {
230
+ const merged = [...(last.annotatedFindings ?? []), ...annotatorFindings];
231
+ last.annotatedFindings = merged;
232
+ const newConcerns = annotatorFindings.map(f => ({
233
+ source: 'quality_review',
234
+ severity: (f.severity ?? 'medium'),
235
+ message: f.claim,
236
+ }));
237
+ last.concerns = [...(last.concerns ?? []), ...newConcerns];
238
+ return;
239
+ }
240
+ // Reviewer result: free-text concerns array (no severity per item).
241
+ // Default to 'medium' so the wire's findingsBySeverity bucketing isn't
242
+ // skewed toward 'critical' by accident.
243
+ const reviewerConcerns = result.concerns;
244
+ if (Array.isArray(reviewerConcerns) && reviewerConcerns.length > 0) {
245
+ const newConcerns = reviewerConcerns.map(text => ({
246
+ source: 'quality_review',
247
+ severity: 'medium',
248
+ message: text,
249
+ }));
250
+ last.concerns = [...(last.concerns ?? []), ...newConcerns];
251
+ }
252
+ }
136
253
  function makeQualityReworkHandler(reworkIndex) {
137
254
  // rework_1 → attemptIndex 1 (quality index 0 has impl: null and would throw)
138
255
  // rework_2 → attemptIndex 2
@@ -142,9 +259,42 @@ function makeQualityReworkHandler(reworkIndex) {
142
259
  if (!ctx)
143
260
  return;
144
261
  const newResult = await runQualityRework(state, ctx, attemptIndex);
145
- if (!newResult)
262
+ if (!newResult) {
263
+ // The rework's implementer call did not return an ok RunResult.
264
+ // Mark the chain failed so the next round's `!s.terminal` gate stops
265
+ // the cascade and settle_quality_chain records the failure on the
266
+ // wire envelope. See spec-chain-handlers for the same fix shape.
267
+ state.qualityReworkFailed = true;
268
+ state.terminal = true;
269
+ if (ctx.verbose && typeof ctx.verboseStream === 'function') {
270
+ ctx.verboseStream(`[mmagent verbose] event=quality_rework_failed ts=${new Date().toISOString()} batch_id=${ctx.batchId ?? ''} task_index=${ctx.taskIndex ?? 0} rework_index=${reworkIndex}\n`);
271
+ }
146
272
  return;
147
- state.lastRunResult = newResult;
273
+ }
274
+ // Tool sweep #6: same fix as spec-chain — union file-tracker arrays
275
+ // across rework rounds so the envelope reflects ALL writes, not
276
+ // just the most recent attempt's writes.
277
+ replaceLastRunResultPreservingTrackers(state, newResult);
278
+ // Record rework cost. Quality rework_2 (attemptIndex 2) escalates impl
279
+ // from base tier to the other tier; rework_1 stays on base.
280
+ const baseTier = ctx.assignedTier;
281
+ const reworkTier = (attemptIndex === 2 && baseTier === 'standard') ? 'complex' : baseTier;
282
+ const reworkProvider = ctx.providers[reworkTier];
283
+ mergeStageStats(state, 'quality_rework', {
284
+ inputTokens: newResult.usage?.inputTokens ?? 0,
285
+ outputTokens: newResult.usage?.outputTokens ?? 0,
286
+ cachedReadTokens: newResult.usage?.cachedReadTokens ?? 0,
287
+ cachedNonReadTokens: newResult.usage?.cachedNonReadTokens ?? 0,
288
+ turnCount: newResult.turns ?? 0,
289
+ toolCallCount: Array.isArray(newResult.toolCalls) ? newResult.toolCalls.length : 0,
290
+ costUSD: newResult.cost?.costUSD ?? null,
291
+ durationMs: newResult.durationMs ?? null,
292
+ filesReadCount: Array.isArray(newResult.filesRead) ? newResult.filesRead.length : 0,
293
+ filesWrittenCount: Array.isArray(newResult.filesWritten) ? newResult.filesWritten.length : 0,
294
+ }, {
295
+ tier: reworkTier,
296
+ model: reworkProvider?.config?.model ?? null,
297
+ });
148
298
  };
149
299
  }
150
300
  export const qualityReviewRound1Handler = makeQualityReviewHandler(1);
@@ -180,6 +330,27 @@ export function settleQualityChainHandler(state) {
180
330
  return;
181
331
  }
182
332
  if (v1 === 'error' || v2 === 'error' || v3 === 'error') {
333
+ // 4.0.3+ soft-success path for read-only routes (audit / review /
334
+ // verify / debug / investigate). These routes have NO rework loop —
335
+ // the annotator is single-pass. When the annotator returns 'error'
336
+ // (typically a parse failure on its own JSON block) BUT the
337
+ // implementer produced a non-empty narrative output, the findings
338
+ // are still recoverable from `lastRunResult.output` in the canonical
339
+ // `## Finding N:` format. Treat that as chain-passed so the wire
340
+ // envelope reports terminal_status='ok' / worker_status='done'
341
+ // instead of leaking 'review_loop_capped' (artifact-producing-route
342
+ // terminology). Round-1 verdict='error' stays in stage stats as a
343
+ // soft telemetry signal. Headline composers + envelope builders
344
+ // fall back to narrative parsing for the findings count.
345
+ const last = state.lastRunResult;
346
+ const isReadOnly = state.toolCategory === 'read_only';
347
+ const implementerProducedOutput = typeof last?.output === 'string' && last.output.trim().length > 0;
348
+ if (isReadOnly && implementerProducedOutput) {
349
+ state.qualityChainPassed = true;
350
+ return;
351
+ }
352
+ // Artifact-producing route, OR read-only with empty implementer
353
+ // output: hard-fail (no findings to recover).
183
354
  state.qualityChainPassed = false;
184
355
  state.terminal = true;
185
356
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"quality-chain-handlers.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/quality-chain-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality-chain-handlers.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/quality-chain-handlers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"review-diff-handler.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/review-diff-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgB7D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE5E"}
1
+ {"version":3,"file":"review-diff-handler.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/review-diff-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAiB7D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkI5E"}
@@ -4,6 +4,7 @@ import { pickReviewer } from '../../escalation/policy.js';
4
4
  import { runWithFallback, isReviewTransportFailure, } 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 } from '../merge-stage-stats.js';
7
8
  const exec = promisify(execFile);
8
9
  /**
9
10
  * StageHandler for row 4.13 (review_diff).
@@ -44,19 +45,37 @@ export async function reviewDiffHandler(state) {
44
45
  return;
45
46
  const baseTier = ctx.assignedTier;
46
47
  const reviewerTier = pickReviewer({ loop: 'spec', attemptIndex: 0, baseTier });
48
+ // Tool sweep #6: prefer the snapshot-based DiffTracker (works in
49
+ // non-git dirs, captures the cumulative across rework rounds against
50
+ // the pre-task baseline). Fall back to `git diff HEAD~..HEAD` for
51
+ // legacy callers (autoCommit pipelines that ran before the tracker
52
+ // was wired in). If BOTH sources fail, hard-error: reviewing without
53
+ // evidence would be the very bug this sweep is fixing.
47
54
  let diff = '';
48
- try {
49
- const { stdout } = await exec('git', ['diff', 'HEAD~..HEAD'], { cwd: ctx.cwd });
50
- const cap = 64 * 1024;
51
- const bytes = Buffer.byteLength(stdout, 'utf8');
52
- diff = bytes > cap
53
- ? Buffer.from(stdout, 'utf8').subarray(0, cap).toString('utf8') + '\n[diff truncated]'
54
- : stdout;
55
+ let trackerProvided = false;
56
+ if (state.diffTracker) {
57
+ try {
58
+ diff = await state.diffTracker.cumulativeDiff();
59
+ trackerProvided = true;
60
+ }
61
+ catch {
62
+ // tracker error — fall through to git
63
+ }
55
64
  }
56
- catch {
57
- state.diffReviewVerdict = 'error';
58
- state.terminal = true;
59
- return;
65
+ if (!trackerProvided) {
66
+ try {
67
+ const { stdout } = await exec('git', ['diff', 'HEAD~..HEAD'], { cwd: ctx.cwd });
68
+ const cap = 64 * 1024;
69
+ const bytes = Buffer.byteLength(stdout, 'utf8');
70
+ diff = bytes > cap
71
+ ? Buffer.from(stdout, 'utf8').subarray(0, cap).toString('utf8') + '\n[diff truncated]'
72
+ : stdout;
73
+ }
74
+ catch {
75
+ state.diffReviewVerdict = 'error';
76
+ state.terminal = true;
77
+ return;
78
+ }
60
79
  }
61
80
  state.diffUnavailable ??= new Map();
62
81
  const diffUnavailable = state.diffUnavailable;
@@ -67,17 +86,30 @@ export async function reviewDiffHandler(state) {
67
86
  isTransportFailure: (r) => isReviewTransportFailure(r),
68
87
  getStatus: (r) => r.status,
69
88
  makeSyntheticFailure: () => makeSkippedReviewResult('all_tiers_unavailable'),
70
- call: async (provider) => {
89
+ call: async (provider, usedTier) => {
71
90
  const shell = makeRunnerShell(provider);
72
91
  const engine = ctx.reviewerEngine;
73
92
  if (!engine)
74
93
  throw new Error('reviewerEngine not configured');
94
+ // Tool sweep #6: pass diff via the dedicated `diff` field so the
95
+ // template's "# Cumulative diff" section gets actual diff content
96
+ // instead of conflating it with the worker's text summary.
97
+ // workerOutput stays as the verification summary so the diff
98
+ // reviewer has both signals.
99
+ const lastResult = state.lastRunResult;
100
+ const verifySummary = `Verification: ${verifyResult.status}\n${verifyResult.steps.map(s => `- ${s.command} → ${s.status}`).join('\n')}`;
75
101
  return engine.runDiff(shell, {
76
- workerOutput: diff,
102
+ workerOutput: lastResult?.output ?? verifySummary,
77
103
  brief: `verification: ${verifyResult.status}\n${verifyResult.steps.map(s => `- ${s.command} → ${s.status}`).join('\n')}`,
104
+ diff,
78
105
  cwd: ctx.cwd,
79
106
  abortSignal: ctx.stall.controller.signal,
80
107
  deadlineMs: ctx.timing.deadlineMs,
108
+ ...(ctx.bus && { bus: ctx.bus }),
109
+ ...(ctx.batchId !== undefined && { batchId: ctx.batchId }),
110
+ ...(ctx.taskIndex !== undefined && { taskIndex: ctx.taskIndex }),
111
+ tier: usedTier,
112
+ stageLabel: 'Diff review',
81
113
  });
82
114
  },
83
115
  });
@@ -103,5 +135,34 @@ export async function reviewDiffHandler(state) {
103
135
  state.diffReviewVerdict = 'error';
104
136
  state.terminal = true;
105
137
  }
138
+ // Persist diff-reviewer concerns into lastRunResult.concerns so the
139
+ // wire's findings_* DB columns reflect them on diff_review verdicts
140
+ // other than 'approve'. Without this, findings counts stay 0 even when
141
+ // the diff reviewer rejected with explicit concerns.
142
+ if (Array.isArray(result.concerns) && result.concerns.length > 0) {
143
+ const last = state.lastRunResult;
144
+ if (last) {
145
+ const newConcerns = result.concerns.map(text => ({
146
+ source: 'diff_review',
147
+ severity: 'medium',
148
+ message: text,
149
+ }));
150
+ last.concerns = [...(last.concerns ?? []), ...newConcerns];
151
+ }
152
+ }
153
+ // Record diff_review cost so wire telemetry sees it.
154
+ const reviewerProvider = ctx.providers[reviewerTier];
155
+ mergeStageStats(state, 'diff_review', {
156
+ inputTokens: result.cost?.inputTokens ?? 0,
157
+ outputTokens: result.cost?.outputTokens ?? 0,
158
+ turnCount: result.cost?.turnCount ?? 0,
159
+ toolCallCount: result.cost?.toolCallCount ?? 0,
160
+ costUSD: result.cost?.costUSD ?? null,
161
+ durationMs: result.cost?.durationMs ?? null,
162
+ }, {
163
+ tier: reviewerTier,
164
+ model: reviewerProvider?.config?.model ?? null,
165
+ verdict: state.diffReviewVerdict,
166
+ });
106
167
  }
107
168
  //# sourceMappingURL=review-diff-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-diff-handler.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/review-diff-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-diff-handler.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/review-diff-handler.ts"],"names":[],"mappings":"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"}
@@ -42,19 +42,26 @@ export async function runVerifyCommandHandler(state) {
42
42
  taskStartMs,
43
43
  });
44
44
  state.verifyResult = verification;
45
- emitVerifyEvents(ctx.bus, verification);
45
+ emitVerifyEvents(ctx.bus, verification, { batchId: ctx.batchId, taskIndex: ctx.taskIndex ?? 0 });
46
46
  // Stage stats integration deferred: endVerifyStage takes cost meter +
47
47
  // agent info + idle stats that don't yet flow through ExecutionContext.
48
48
  // Step 6 (terminal handlers) will fold verify outcome into stageStats once
49
49
  // cost-rollup and idle tracking are part of the context.
50
50
  }
51
- function emitVerifyEvents(bus, verification) {
51
+ function emitVerifyEvents(bus, verification, taskCtx) {
52
52
  if (!bus)
53
53
  return;
54
+ // verify_step / verify_skipped extend TaskBase which requires batchId
55
+ // and taskIndex. The 4.0.x emit was missing both — schema validation
56
+ // failed at emit-time and crashed the lifecycle. Surfaced only after
57
+ // the reviewer-parser stopped throwing on malformed reviewer output;
58
+ // before that, the lifecycle never reached this stage.
54
59
  for (const step of verification.steps) {
55
60
  bus.emit({
56
61
  event: 'verify_step',
57
62
  ts: new Date().toISOString(),
63
+ ...(taskCtx.batchId !== undefined && { batchId: taskCtx.batchId }),
64
+ taskIndex: taskCtx.taskIndex,
58
65
  command: step.command,
59
66
  status: step.status,
60
67
  ...(step.exitCode !== null && { exitCode: step.exitCode }),
@@ -67,6 +74,8 @@ function emitVerifyEvents(bus, verification) {
67
74
  bus.emit({
68
75
  event: 'verify_skipped',
69
76
  ts: new Date().toISOString(),
77
+ ...(taskCtx.batchId !== undefined && { batchId: taskCtx.batchId }),
78
+ taskIndex: taskCtx.taskIndex,
70
79
  reason: verification.skipReason ?? 'no_command',
71
80
  stage: 'verifying',
72
81
  });
@@ -1 +1 @@
1
- {"version":3,"file":"run-verify-command-handler.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/run-verify-command-handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAA0B,MAAM,mBAAmB,CAAC;AAG3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAqB;IACjE,wEAAwE;IACxE,4BAA4B;IAC5B,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO;IAE/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAA4B,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgD,CAAC;IAEnE,uEAAuE;IACvE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO;IAE1B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;IAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAEvC,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC;QACxC,GAAG;QACH,aAAa;QACb,aAAa;QACb,WAAW;KACZ,CAAC,CAAC;IAEH,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAElC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAExC,sEAAsE;IACtE,wEAAwE;IACxE,2EAA2E;IAC3E,yDAAyD;AAC3D,CAAC;AAED,SAAS,gBAAgB,CAAC,GAA6B,EAAE,YAA+B;IACtF,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,aAAa;YACpB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACpD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SAC5C,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,gBAAgB;YACvB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,MAAM,EAAE,YAAY,CAAC,UAAU,IAAI,YAAY;YAC/C,KAAK,EAAE,WAAW;SACQ,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run-verify-command-handler.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/run-verify-command-handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAA0B,MAAM,mBAAmB,CAAC;AAG3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAqB;IACjE,wEAAwE;IACxE,4BAA4B;IAC5B,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO;IAE/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAA4B,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgD,CAAC;IAEnE,uEAAuE;IACvE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO;IAE1B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;IAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAEvC,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC;QACxC,GAAG;QACH,aAAa;QACb,aAAa;QACb,WAAW;KACZ,CAAC,CAAC;IAEH,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAElC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC;IAEjG,sEAAsE;IACtE,wEAAwE;IACxE,2EAA2E;IAC3E,yDAAyD;AAC3D,CAAC;AAED,SAAS,gBAAgB,CACvB,GAA6B,EAC7B,YAA+B,EAC/B,OAA2D;IAE3D,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,sEAAsE;IACtE,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,uDAAuD;IACvD,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,aAAa;YACpB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAClE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACpD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SAC5C,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,gBAAgB;YACvB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAClE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,YAAY,CAAC,UAAU,IAAI,YAAY;YAC/C,KAAK,EAAE,WAAW;SACQ,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec-chain-handlers.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/spec-chain-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA+K7D,eAAO,MAAM,uBAAuB,UApBkB,cAAc,KAAG,OAAO,CAAC,IAAI,CAoBpB,CAAC;AAChE,eAAO,MAAM,uBAAuB,UArBkB,cAAc,KAAG,OAAO,CAAC,IAAI,CAqBpB,CAAC;AAChE,eAAO,MAAM,uBAAuB,UAtBkB,cAAc,KAAG,OAAO,CAAC,IAAI,CAsBpB,CAAC;AAChE,eAAO,MAAM,uBAAuB,UAZa,cAAc,KAAG,OAAO,CAAC,IAAI,CAYf,CAAC;AAChE,eAAO,MAAM,uBAAuB,UAba,cAAc,KAAG,OAAO,CAAC,IAAI,CAaf,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAkBlE"}
1
+ {"version":3,"file":"spec-chain-handlers.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/spec-chain-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAkT7D,eAAO,MAAM,uBAAuB,UAxHkB,cAAc,KAAG,OAAO,CAAC,IAAI,CAwHpB,CAAC;AAChE,eAAO,MAAM,uBAAuB,UAzHkB,cAAc,KAAG,OAAO,CAAC,IAAI,CAyHpB,CAAC;AAChE,eAAO,MAAM,uBAAuB,UA1HkB,cAAc,KAAG,OAAO,CAAC,IAAI,CA0HpB,CAAC;AAChE,eAAO,MAAM,uBAAuB,UAvDa,cAAc,KAAG,OAAO,CAAC,IAAI,CAuDf,CAAC;AAChE,eAAO,MAAM,uBAAuB,UAxDa,cAAc,KAAG,OAAO,CAAC,IAAI,CAwDf,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAkBlE"}