@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,86 @@
1
+ // packages/core/src/lifecycle/annotate-prompts.ts
2
+ //
3
+ // Two LLM prompt builders for the annotate stage (write route + read route).
4
+ // Both produce transcript-only prompts that ask for a JSON judgment matching
5
+ // AnnotatePayload. Helpers serialize upstream state without raw file contents
6
+ // or secrets (spec §15.2).
7
+ export function annotatePromptWrite(state) {
8
+ const ctx = serializeWriteContext(state);
9
+ return `You are the annotator for a code-change task. Read the structured outputs from each prior stage and produce a single JSON judgment.
10
+
11
+ Input (truncated for budget):
12
+ \`\`\`json
13
+ ${JSON.stringify(ctx, null, 2)}
14
+ \`\`\`
15
+
16
+ Rules:
17
+ 1. Emit ONLY a JSON code block with these exact fields: completed (boolean), message (string, 1-3 sentences), findings (array passed through from upstream — you may dedupe identical entries and re-categorize severity ONLY; never invent new findings), summary, filesChanged, commitSha.
18
+ 2. Set completed=true ONLY IF: the latest worker self-assessment is 'done'; AND review is approved OR rework's unaddressedFindingIds is empty; AND commit is 'committed' or 'no_op:no_diff' or skipped-with-autoCommit-disabled.
19
+ 3. If completed=false, message must name a specific blocking gate or finding ID AND suggest a recovery action.
20
+ 4. filesChanged and commitSha must come from commit.payload if it committed, else [] and null. Do not invent them.
21
+
22
+ Output the JSON block now.`;
23
+ }
24
+ export function annotatePromptRead(state) {
25
+ const ctx = serializeReadContext(state);
26
+ return `You are the annotator for a read-only investigation task. Read the structured output from the implement stage and produce a single JSON judgment.
27
+
28
+ Input:
29
+ \`\`\`json
30
+ ${JSON.stringify(ctx, null, 2)}
31
+ \`\`\`
32
+
33
+ Rules:
34
+ 1. Emit ONLY a JSON code block with these exact fields: completed (boolean), message (string, 1-3 sentences), findings (array passed through from implement.findings; dedupe identical entries and may re-categorize severity — never invent new findings), summary, filesChanged (must be []), commitSha (must be null).
35
+ 2. Set completed=true ONLY IF: implement.workerSelfAssessment === 'done' AND (criteriaSucceeded.length > 0 OR criteriaErrors.length === 0).
36
+ 3. If completed=false, message must name a specific blocking criterion error or note that the worker self-assessed as failed, AND suggest a recovery action.
37
+ 4. Findings count is NOT a completion signal — empty findings on a read route means "I investigated and found nothing wrong," which is a valid completion when (2) holds.
38
+
39
+ Output the JSON block now.`;
40
+ }
41
+ // ───── helpers ─────
42
+ export function serializeWriteContext(state) {
43
+ const last = state.lastRunResult ?? null;
44
+ return {
45
+ task: { id: state.task?.id ?? null, brief: { title: state.task?.brief?.title ?? null, body: (state.task?.brief?.body ?? '').slice(0, 2000) } },
46
+ route: state.route,
47
+ implement: last ? {
48
+ workerSelfAssessment: last.workerStatus ?? null,
49
+ summary: (last.summary ?? '').slice(0, 1000),
50
+ filesChanged: last.filesChanged ?? [],
51
+ } : null,
52
+ review: {
53
+ verdict: state.reviewVerdict ?? null,
54
+ findings: stripEvidence(state.reviewFindings ?? []),
55
+ },
56
+ rework: {
57
+ applied: state.reworkApplied ?? false,
58
+ error: state.reworkError ?? null,
59
+ unaddressedFindingIds: last?.unaddressedFindingIds ?? [],
60
+ },
61
+ commit: {
62
+ committed: Array.isArray(state.commits) && state.commits.length > 0,
63
+ skipReason: last?.commitSkipReason ?? null,
64
+ sha: last?.commitSha ?? null,
65
+ },
66
+ };
67
+ }
68
+ export function serializeReadContext(state) {
69
+ const last = state.lastRunResult ?? null;
70
+ return {
71
+ task: { id: state.task?.id ?? null, brief: { title: state.task?.brief?.title ?? null, body: (state.task?.brief?.body ?? '').slice(0, 2000) } },
72
+ route: state.route,
73
+ implement: last ? {
74
+ workerSelfAssessment: last.workerStatus ?? null,
75
+ summary: (last.summary ?? '').slice(0, 1000),
76
+ findings: stripEvidence(last.findings ?? []),
77
+ citations: last.citations ?? [],
78
+ criteriaSucceeded: last.criteriaSucceeded ?? [],
79
+ criteriaErrors: last.criteriaErrors ?? [],
80
+ } : null,
81
+ };
82
+ }
83
+ export function stripEvidence(items) {
84
+ return items.map(i => ({ ...i, evidence: undefined }));
85
+ }
86
+ //# sourceMappingURL=annotate-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotate-prompts.js","sourceRoot":"","sources":["../../src/lifecycle/annotate-prompts.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { RunResult } from '../types.js';
1
+ import type { RuntimeRunResult } from '../types.js';
2
2
  import type { ContextBlockStore } from '../stores/context-block-tool.js';
3
3
  /**
4
4
  * Register usable task outputs as a combined context block.
@@ -7,5 +7,5 @@ import type { ContextBlockStore } from '../stores/context-block-tool.js';
7
7
  * Promoted here so the generic task executor and remaining per-tool
8
8
  * executors share a single implementation.
9
9
  */
10
- export declare function autoRegisterContextBlock(results: RunResult[], store: ContextBlockStore | undefined): string | undefined;
10
+ export declare function autoRegisterContextBlock(results: RuntimeRunResult[], store: ContextBlockStore | undefined): string | undefined;
11
11
  //# sourceMappingURL=auto-register-context-block.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-register-context-block.d.ts","sourceRoot":"","sources":["../../src/lifecycle/auto-register-context-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,EAAE,EACpB,KAAK,EAAE,iBAAiB,GAAG,SAAS,GACnC,MAAM,GAAG,SAAS,CAOpB"}
1
+ {"version":3,"file":"auto-register-context-block.d.ts","sourceRoot":"","sources":["../../src/lifecycle/auto-register-context-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,iBAAiB,GAAG,SAAS,GACnC,MAAM,GAAG,SAAS,CAOpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"auto-register-context-block.js","sourceRoot":"","sources":["../../src/lifecycle/auto-register-context-block.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAoB,EACpB,KAAoC;IAEpC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"auto-register-context-block.js","sourceRoot":"","sources":["../../src/lifecycle/auto-register-context-block.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA2B,EAC3B,KAAoC;IAEpC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { RuntimeRunResult } from '../types/run-result.js';
2
+ /**
3
+ * Builds a cancelled-not-started result envelope. Used by the grouped
4
+ * dispatcher to fill slots for tasks that never began because the batch
5
+ * was aborted mid-group. Reuses workerStatus 'failed' to preserve the
6
+ * existing WorkerStatus enum and asyncDispatch.detectFailure logic; the
7
+ * 'cancelled' errorCode is the distinguishing field for consumers that
8
+ * care.
9
+ */
10
+ export declare function buildCancelledResult(): RuntimeRunResult;
11
+ //# sourceMappingURL=build-cancelled-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-cancelled-result.d.ts","sourceRoot":"","sources":["../../src/lifecycle/build-cancelled-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,CAiBvD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Builds a cancelled-not-started result envelope. Used by the grouped
3
+ * dispatcher to fill slots for tasks that never began because the batch
4
+ * was aborted mid-group. Reuses workerStatus 'failed' to preserve the
5
+ * existing WorkerStatus enum and asyncDispatch.detectFailure logic; the
6
+ * 'cancelled' errorCode is the distinguishing field for consumers that
7
+ * care.
8
+ */
9
+ export function buildCancelledResult() {
10
+ return {
11
+ output: '',
12
+ status: 'error',
13
+ usage: { inputTokens: 0, outputTokens: 0, cachedReadTokens: 0, cachedNonReadTokens: 0 },
14
+ turns: 0,
15
+ filesRead: [],
16
+ filesWritten: [],
17
+ toolCalls: [],
18
+ outputIsDiagnostic: false,
19
+ escalationLog: [],
20
+ durationMs: 0,
21
+ workerStatus: 'failed',
22
+ errorCode: 'cancelled',
23
+ actualCostUSD: 0,
24
+ directoriesListed: [],
25
+ };
26
+ }
27
+ //# sourceMappingURL=build-cancelled-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-cancelled-result.js","sourceRoot":"","sources":["../../src/lifecycle/build-cancelled-result.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE;QACvF,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,EAAE;QACb,kBAAkB,EAAE,KAAK;QACzB,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,QAAQ;QACtB,SAAS,EAAE,WAAW;QACtB,aAAa,EAAE,CAAC;QAChB,iBAAiB,EAAE,EAAE;KACF,CAAC;AACxB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { RunResult, ReviewVerdict } from '../types.js';
1
+ import type { RuntimeRunResult, ReviewVerdict } from '../types.js';
2
2
  import type { NotApplicable } from '../reporting/not-applicable.js';
3
3
  /** Aggregate timing metrics for a `delegate_tasks` batch. */
4
4
  export interface BatchTimings {
@@ -31,7 +31,7 @@ export interface BatchAggregateCost {
31
31
  */
32
32
  export interface ExecutorOutput {
33
33
  headline: string;
34
- results: RunResult[] | NotApplicable;
34
+ results: RuntimeRunResult[] | NotApplicable;
35
35
  batchTimings: BatchTimings | NotApplicable;
36
36
  costSummary: BatchAggregateCost | NotApplicable;
37
37
  structuredReport: Record<string, unknown> | NotApplicable;
@@ -1 +1 @@
1
- {"version":3,"file":"executor-output-types.d.ts","sourceRoot":"","sources":["../../src/lifecycle/executor-output-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,0BAA0B,EAAE,MAAM,CAAA;CACnC;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,uBAAuB,EAAE,MAAM,CAAA;CAChC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IACrC,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC;IAC3C,WAAW,EAAE,kBAAkB,GAAG,aAAa,CAAC;IAChD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC;IAC1D,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,oBAAoB,CAAC,EAAE,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"executor-output-types.d.ts","sourceRoot":"","sources":["../../src/lifecycle/executor-output-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,0BAA0B,EAAE,MAAM,CAAA;CACnC;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,uBAAuB,EAAE,MAAM,CAAA;CAChC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAAC;IAC5C,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC;IAC3C,WAAW,EAAE,kBAAkB,GAAG,aAAa,CAAC;IAChD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC;IAC1D,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,oBAAoB,CAAC,EAAE,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -1,5 +1,5 @@
1
- import type { RunResult } from '../types.js';
1
+ import type { RuntimeRunResult } from '../types.js';
2
2
  import type { ParsedStructuredReport } from '../reporting/structured-report.js';
3
3
  export declare function readImplementerFileContents(filesWritten: string[], cwd: string | undefined): Promise<Record<string, string>>;
4
- export declare function buildFallbackImplReport(result: RunResult): ParsedStructuredReport;
4
+ export declare function buildFallbackImplReport(result: RuntimeRunResult): ParsedStructuredReport;
5
5
  //# sourceMappingURL=fallback-report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fallback-report.d.ts","sourceRoot":"","sources":["../../src/lifecycle/fallback-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAIhF,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAejC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,sBAAsB,CAajF"}
1
+ {"version":3,"file":"fallback-report.d.ts","sourceRoot":"","sources":["../../src/lifecycle/fallback-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAIhF,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAejC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,sBAAsB,CAaxF"}
@@ -1 +1 @@
1
- {"version":3,"file":"fallback-report.js","sourceRoot":"","sources":["../../src/lifecycle/fallback-report.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAAsB,EACtB,GAAuB;IAEvB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACjF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM;gBAC1C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,uBAAuB;gBACpD,CAAC,CAAC,OAAO,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;QACxC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7E,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,EAAE;QACvB,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fallback-report.js","sourceRoot":"","sources":["../../src/lifecycle/fallback-report.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAAsB,EACtB,GAAuB;IAEvB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACjF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM;gBAC1C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,uBAAuB;gBACpD,CAAC,CAAC,OAAO,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAwB;IAC9D,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;QACxC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7E,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,EAAE;QACvB,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC"}
@@ -1,9 +1,11 @@
1
1
  export interface Finding {
2
+ id?: string;
2
3
  severity: 'critical' | 'high' | 'medium' | 'low';
3
4
  category: string;
4
5
  claim: string;
5
6
  evidence?: string;
6
7
  suggestion?: string;
8
+ source?: 'implementer' | 'reviewer';
7
9
  }
8
10
  export declare function parseFindings(text: string, criterionId: string): Finding[];
9
11
  //# sourceMappingURL=findings-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findings-parser.d.ts","sourceRoot":"","sources":["../../src/lifecycle/findings-parser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,EAAE,CAqC1E"}
1
+ {"version":3,"file":"findings-parser.d.ts","sourceRoot":"","sources":["../../src/lifecycle/findings-parser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC;CACrC;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,EAAE,CA2C1E"}
@@ -22,10 +22,15 @@ export function parseFindings(text, criterionId) {
22
22
  blocks.push(current.join('\n'));
23
23
  const findings = [];
24
24
  for (const block of blocks) {
25
- const headingMatch = block.match(/^## Finding \d+:\s*(.+)$/m);
26
- if (!headingMatch)
27
- continue;
28
- const claim = headingMatch[1].trim();
25
+ // Extract the claim from the "- Claim:" bullet line within the block.
26
+ // Note: the ## Finding N: heading line has no inline text (just the
27
+ // heading + colon + newline); the actual claim lives in the bullet.
28
+ // Claim can come from a `- Claim:` bullet (reviewer format) OR the inline
29
+ // text on the `## Finding N: <text>` heading (legacy worker format).
30
+ let claim = block.match(/^- Claim:\s*(.+)$/im)?.[1]?.trim() ?? '';
31
+ if (!claim) {
32
+ claim = block.match(/^## Finding \d+:\s*(.+)$/m)?.[1]?.trim() ?? '';
33
+ }
29
34
  if (claim.startsWith('[N/A]'))
30
35
  continue;
31
36
  const sevRaw = block.match(/^- Severity:\s*(\w+)/im)?.[1]?.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"findings-parser.js","sourceRoot":"","sources":["../../src/lifecycle/findings-parser.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,sEAAsE;AACtE,iEAAiE;AAUjE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvE,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,WAAmB;IAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY;YAAE,SAAS;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAExC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAwB,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;YACzE,CAAC,CAAE,MAA8B;YACjC,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;QAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAEhF,MAAM,CAAC,GAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACjD,IAAI,QAAQ;YAAE,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,IAAI,UAAU;YAAE,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"findings-parser.js","sourceRoot":"","sources":["../../src/lifecycle/findings-parser.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,sEAAsE;AACtE,iEAAiE;AAYjE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvE,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,WAAmB;IAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,sEAAsE;QACtE,oEAAoE;QACpE,oEAAoE;QACpE,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QAExC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAwB,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;YACzE,CAAC,CAAE,MAA8B;YACjC,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;QAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAEhF,MAAM,CAAC,GAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACjD,IAAI,QAAQ;YAAE,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,IAAI,UAAU;YAAE,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface ResolveOptions {
2
+ timeoutMs?: number;
3
+ }
4
+ /**
5
+ * Returns the canonical absolute path of the git toplevel for `cwd`, or
6
+ * null if `cwd` is not in a git repo, git is unavailable, the directory
7
+ * does not exist, or the spawn times out (default 5 s).
8
+ *
9
+ * Pure function of (cwd, filesystem state). Never throws.
10
+ */
11
+ export declare function resolveGitToplevel(cwd: string, opts?: ResolveOptions): Promise<string | null>;
12
+ //# sourceMappingURL=git-toplevel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-toplevel.d.ts","sourceRoot":"","sources":["../../src/lifecycle/git-toplevel.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB"}
@@ -0,0 +1,49 @@
1
+ import { spawn } from 'node:child_process';
2
+ /**
3
+ * Returns the canonical absolute path of the git toplevel for `cwd`, or
4
+ * null if `cwd` is not in a git repo, git is unavailable, the directory
5
+ * does not exist, or the spawn times out (default 5 s).
6
+ *
7
+ * Pure function of (cwd, filesystem state). Never throws.
8
+ */
9
+ export async function resolveGitToplevel(cwd, opts = {}) {
10
+ const timeoutMs = opts.timeoutMs ?? 5000;
11
+ return new Promise((resolve) => {
12
+ let settled = false;
13
+ const settle = (value) => {
14
+ if (settled)
15
+ return;
16
+ settled = true;
17
+ resolve(value);
18
+ };
19
+ let child;
20
+ try {
21
+ child = spawn('git', ['-C', cwd, 'rev-parse', '--show-toplevel'], {
22
+ stdio: ['ignore', 'pipe', 'pipe'],
23
+ });
24
+ }
25
+ catch {
26
+ settle(null);
27
+ return;
28
+ }
29
+ let stdout = '';
30
+ child.stdout?.on('data', (b) => { stdout += b.toString('utf8'); });
31
+ child.stderr?.on('data', () => { });
32
+ child.on('error', () => settle(null));
33
+ child.on('exit', (code) => {
34
+ if (code === 0)
35
+ settle(stdout.trim() || null);
36
+ else
37
+ settle(null);
38
+ });
39
+ const t = setTimeout(() => {
40
+ try {
41
+ child.kill('SIGKILL');
42
+ }
43
+ catch { /* ignore */ }
44
+ settle(null);
45
+ }, timeoutMs);
46
+ child.on('exit', () => clearTimeout(t));
47
+ });
48
+ }
49
+ //# sourceMappingURL=git-toplevel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-toplevel.js","sourceRoot":"","sources":["../../src/lifecycle/git-toplevel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,OAAuB,EAAE;IAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAE,EAAE;YACtC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE;gBAChE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAiB,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC;gBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;;gBACzC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE;YACxB,IAAI,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { LifecycleState } from '../stage-plan-types.js';
2
2
  import { type ResearchSourcesUsedEntry } from '../../reporting/report-parser-slots/research-report.js';
3
+ import type { AnnotatePayload, StageGate } from '../stage-io.js';
3
4
  export interface StructuredReport {
4
5
  summary: string;
5
6
  workerStatus: 'done' | 'done_with_concerns' | 'blocked' | 'failed';
@@ -31,5 +32,5 @@ export interface StructuredReport {
31
32
  * every other route (audit/review/debug/investigate/write routes). */
32
33
  sourcesUsed?: ResearchSourcesUsedEntry[];
33
34
  }
34
- export declare function annotator(state: LifecycleState): Promise<void>;
35
+ export declare function annotator(state: LifecycleState): Promise<StageGate<AnnotatePayload>>;
35
36
  //# sourceMappingURL=annotator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"annotator.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/annotator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,wDAAwD,CAAC;AAIhE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,UAAU,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACtD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1G,cAAc,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzD;2EACuE;IACvE,WAAW,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC1C;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDpE"}
1
+ {"version":3,"file":"annotator.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/annotator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,wDAAwD,CAAC;AAIhE,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIjE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,UAAU,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACtD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1G,cAAc,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzD;2EACuE;IACvE,WAAW,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC1C;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CA0O1F"}
@@ -7,6 +7,9 @@
7
7
  // nulls on the other side so the orchestrator parses one shape.
8
8
  import { mergeStageStats } from '../merge-stage-stats.js';
9
9
  import { parseSourcesUsed, } from '../../reporting/report-parser-slots/research-report.js';
10
+ import { applyAnnotatePreconditions } from '../annotate-parser.js';
11
+ import { annotatePromptWrite, annotatePromptRead } from '../annotate-prompts.js';
12
+ import { runAnnotatorTurn } from '../../providers/run-annotator-turn.js';
10
13
  const READ_ROUTES = new Set(['audit', 'review', 'debug', 'investigate', 'research']);
11
14
  export async function annotator(state) {
12
15
  const t0 = Date.now();
@@ -36,18 +39,174 @@ export async function annotator(state) {
36
39
  report.sourcesUsed = parseSourcesUsed(lastOutput);
37
40
  }
38
41
  state.structuredReport = report;
42
+ // v5: prompt-budget truncation per spec §14 assumption 7 + AC-30 to AC-33.
43
+ // Three tiers, applied progressively when config.truncateAnnotatePromptTier
44
+ // signals overflow:
45
+ // tier 1 → strip Finding.evidence
46
+ // tier 2 → also strip summary fields (set to '')
47
+ // tier 3 → fallback mode: emit deterministic AnnotatePayload with verbatim
48
+ // spec-text message; completed=false; findings passthrough.
49
+ const cfg = state.config ?? {};
50
+ const tier = cfg.truncateAnnotatePromptTier ?? 0;
51
+ const bus = state.executionContext?.bus;
52
+ const reviewGate = state.gates?.['review'];
53
+ const implementGate = state.gates?.['implement'];
54
+ const aggregatedFindings = [
55
+ ...(last.findings ?? []),
56
+ ...((reviewGate?.outcome === 'advance' ? reviewGate.payload?.findings : undefined) ?? []),
57
+ ...((implementGate?.outcome === 'advance' ? implementGate.payload?.findings : undefined) ?? []),
58
+ ];
59
+ // Dedupe by claim+evidence (preserve first occurrence)
60
+ const seen = new Set();
61
+ const dedupedFindings = [];
62
+ for (const f of aggregatedFindings) {
63
+ const key = `${f.claim ?? ''}|${f.evidence ?? ''}`;
64
+ if (seen.has(key))
65
+ continue;
66
+ seen.add(key);
67
+ dedupedFindings.push(f);
68
+ }
69
+ // Mechanical filesChanged + commitSha derivation (spec §5.7 rule 4)
70
+ const commitGate = state.gates?.['commit'];
71
+ const mechanicalFilesChanged = commitGate?.outcome === 'advance' &&
72
+ commitGate.payload?.kind === 'committed'
73
+ ? commitGate.payload.filesChanged ?? []
74
+ : (isRead ? [] : report.filesChanged);
75
+ const mechanicalCommitSha = commitGate?.outcome === 'advance' &&
76
+ commitGate.payload?.kind === 'committed'
77
+ ? (commitGate.payload.commitSha ?? null)
78
+ : (isRead ? null : (report.commitSha ?? null));
79
+ let truncatedFindings = dedupedFindings.slice();
80
+ let truncatedSummary = report.summary;
81
+ let fallbackMode = false;
82
+ if (tier >= 1) {
83
+ const droppedEvidenceCount = truncatedFindings.filter(f => f.evidence !== undefined).length;
84
+ truncatedFindings = truncatedFindings.map(f => {
85
+ const cp = { ...f };
86
+ delete cp.evidence;
87
+ return cp;
88
+ });
89
+ bus?.emit({ event: 'annotate_truncation', ts: new Date().toISOString(), tier: 1, droppedFieldCount: droppedEvidenceCount });
90
+ }
91
+ if (tier >= 2) {
92
+ const dropped = truncatedSummary ? 1 : 0;
93
+ truncatedSummary = '';
94
+ bus?.emit({ event: 'annotate_truncation', ts: new Date().toISOString(), tier: 2, droppedFieldCount: dropped });
95
+ }
96
+ if (tier >= 3) {
97
+ // Tier 3 = fallback mode per spec §5.7.3
98
+ fallbackMode = true;
99
+ bus?.emit({ event: 'annotate_truncation', ts: new Date().toISOString(), tier: 3, droppedFieldCount: 0 });
100
+ }
101
+ let annotated;
102
+ // LLM judge layer (spec §5.7.2). The annotator stage runs an LLM turn
103
+ // unless tier-3 truncation kicked us into fallback mode. The LLM is the
104
+ // proposer; the deterministic parser is the enforcer — applyAnnotatePreconditions
105
+ // always runs on the LLM-proposed payload and may flip completed=false. On
106
+ // transport error we fall back to mechanical synthesis (same path that ran
107
+ // before this layer was added).
108
+ let llmCostUSD = 0;
109
+ let llmDurationMs = 0;
110
+ let llmTurnsUsed = 0;
111
+ let llmTransportFailed = false;
112
+ let llmModel = null;
113
+ let llmInputTokens = 0;
114
+ let llmOutputTokens = 0;
115
+ let llmCachedReadTokens = 0;
116
+ let llmCachedNonReadTokens = 0;
117
+ if (fallbackMode) {
118
+ // Fallback findings: only gate-sourced findings flow through (gates.review,
119
+ // gates.implement). lastRunResult.findings are dropped as part of tier-3
120
+ // citation/non-gate-evidence clearing (spec §5.7.3 / AC-32).
121
+ const fallbackFindings = [];
122
+ const fbSeen = new Set();
123
+ const reviewFindings = (reviewGate?.outcome === 'advance' ? reviewGate.payload?.findings : undefined) ?? [];
124
+ const implementFindings = (implementGate?.outcome === 'advance' ? implementGate.payload?.findings : undefined) ?? [];
125
+ for (const f of [...reviewFindings, ...implementFindings]) {
126
+ const k = `${f.claim ?? ''}|${f.evidence ?? ''}`;
127
+ if (fbSeen.has(k))
128
+ continue;
129
+ fbSeen.add(k);
130
+ const cp = { ...f };
131
+ delete cp.evidence;
132
+ fallbackFindings.push(cp);
133
+ }
134
+ annotated = {
135
+ completed: false,
136
+ message: 'annotator prompt budget exceeded after tier-3 truncation; verdict computed mechanically from upstream gates',
137
+ findings: fallbackFindings,
138
+ summary: '',
139
+ filesChanged: mechanicalFilesChanged,
140
+ commitSha: mechanicalCommitSha,
141
+ };
142
+ }
143
+ else {
144
+ // Default mechanical proposal — used directly when LLM fails or returns
145
+ // unparseable output. The parser still gets the final say either way.
146
+ const mechanical = {
147
+ completed: true,
148
+ message: truncatedSummary || (isRead ? 'investigation completed' : 'task completed'),
149
+ findings: truncatedFindings,
150
+ summary: truncatedSummary,
151
+ filesChanged: mechanicalFilesChanged,
152
+ commitSha: mechanicalCommitSha,
153
+ };
154
+ let proposed = mechanical;
155
+ const ctx = state.executionContext;
156
+ if (ctx && typeof ctx.getSession === 'function') {
157
+ const prompt = isRead ? annotatePromptRead(state) : annotatePromptWrite(state);
158
+ const tres = await runAnnotatorTurn({ prompt, ctx: ctx, tier: 'standard' });
159
+ if (tres.kind === 'ok') {
160
+ llmCostUSD = tres.costUSD ?? 0;
161
+ llmModel = tres.model;
162
+ llmDurationMs = tres.ms;
163
+ llmTurnsUsed = tres.turnsUsed;
164
+ llmInputTokens = tres.inputTokens;
165
+ llmOutputTokens = tres.outputTokens;
166
+ llmCachedReadTokens = tres.cachedReadTokens;
167
+ llmCachedNonReadTokens = tres.cachedNonReadTokens;
168
+ const parsed = extractAnnotateJson(tres.text);
169
+ if (parsed) {
170
+ // Authoritative fields come from upstream gates (mechanicalFilesChanged,
171
+ // mechanicalCommitSha, dedupedFindings). The LLM gets to propose
172
+ // completed + message + summary; everything mechanical we override.
173
+ proposed = {
174
+ completed: typeof parsed.completed === 'boolean' ? parsed.completed : mechanical.completed,
175
+ message: typeof parsed.message === 'string' && parsed.message.length > 0 ? parsed.message : mechanical.message,
176
+ summary: typeof parsed.summary === 'string' ? parsed.summary : mechanical.summary,
177
+ findings: truncatedFindings,
178
+ filesChanged: mechanicalFilesChanged,
179
+ commitSha: mechanicalCommitSha,
180
+ };
181
+ }
182
+ // parsed === null → keep mechanical (parser unaffected)
183
+ }
184
+ else {
185
+ // transport_error — fall through to mechanical synthesis
186
+ llmTransportFailed = true;
187
+ llmDurationMs = tres.ms;
188
+ bus?.emit({ event: 'annotate_llm_transport_error', ts: new Date().toISOString(), message: tres.message, durationMs: tres.ms });
189
+ }
190
+ }
191
+ annotated = applyAnnotatePreconditions(proposed, state);
192
+ }
193
+ state.annotatePayload = annotated;
39
194
  mergeStageStats(state, 'annotating', {
40
- inputTokens: 0,
41
- outputTokens: 0,
42
- cachedReadTokens: 0,
43
- cachedNonReadTokens: 0,
44
- turnCount: 0,
195
+ inputTokens: llmInputTokens,
196
+ outputTokens: llmOutputTokens,
197
+ cachedReadTokens: llmCachedReadTokens,
198
+ cachedNonReadTokens: llmCachedNonReadTokens,
199
+ turnCount: llmTurnsUsed,
45
200
  toolCallCount: 0,
46
- costUSD: 0,
201
+ costUSD: llmCostUSD,
47
202
  durationMs: Date.now() - t0,
48
203
  filesReadCount: 0,
49
204
  filesWrittenCount: 0,
50
- }, { tier: null, model: null });
205
+ }, { tier: llmTurnsUsed > 0 ? 'standard' : null, model: llmModel });
206
+ // suppress unused-variable warning while keeping the durationMs field for
207
+ // diagnostics callers; mergeStageStats already captured the value above.
208
+ void llmDurationMs;
209
+ void llmTransportFailed;
51
210
  const annotatingStats = state.lastRunResult
52
211
  ?.stageStats?.annotating;
53
212
  if (annotatingStats) {
@@ -55,5 +214,64 @@ export async function annotator(state) {
55
214
  annotatingStats.maxIdleMs = 0;
56
215
  annotatingStats.totalIdleMs = 0;
57
216
  }
217
+ return {
218
+ outcome: 'advance',
219
+ payload: annotated,
220
+ telemetry: {
221
+ stageLabel: 'annotate',
222
+ durationMs: Date.now() - t0,
223
+ costUSD: llmCostUSD,
224
+ turnsUsed: llmTurnsUsed,
225
+ stopReason: 'normal',
226
+ },
227
+ };
228
+ }
229
+ /**
230
+ * Extract a single JSON object from the LLM's response.
231
+ *
232
+ * Accepts:
233
+ * - A fenced ```json …``` block (preferred form per annotate prompts)
234
+ * - A fenced ``` …``` block (no language tag)
235
+ * - The first balanced `{…}` substring in the text
236
+ *
237
+ * Returns `null` if no parseable JSON is found, signalling the caller to keep
238
+ * the mechanical proposal. This is intentional: a malformed LLM response
239
+ * should not cause stage failure — the parser already has a deterministic
240
+ * answer it can fall back on.
241
+ */
242
+ function extractAnnotateJson(text) {
243
+ if (!text)
244
+ return null;
245
+ const fencedJson = text.match(/```(?:json)?\s*\n([\s\S]*?)\n```/i);
246
+ const candidate = fencedJson ? fencedJson[1] : firstBalancedBraces(text);
247
+ if (!candidate)
248
+ return null;
249
+ try {
250
+ const parsed = JSON.parse(candidate);
251
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
252
+ return parsed;
253
+ }
254
+ }
255
+ catch {
256
+ /* fall through */
257
+ }
258
+ return null;
259
+ }
260
+ function firstBalancedBraces(text) {
261
+ const start = text.indexOf('{');
262
+ if (start < 0)
263
+ return null;
264
+ let depth = 0;
265
+ for (let i = start; i < text.length; i++) {
266
+ const ch = text[i];
267
+ if (ch === '{')
268
+ depth++;
269
+ else if (ch === '}') {
270
+ depth--;
271
+ if (depth === 0)
272
+ return text.slice(start, i + 1);
273
+ }
274
+ }
275
+ return null;
58
276
  }
59
277
  //# sourceMappingURL=annotator.js.map