@zhixuan92/multi-model-agent-core 4.5.3 → 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 +175 -33
  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,43 @@
1
+ // packages/core/src/providers/run-annotator-turn.ts
2
+ //
3
+ // Thin helper that runs a single annotator LLM turn through the session.
4
+ // Implements the 3-attempt transport retry policy from spec §4.6.
5
+ // Used by the annotator handler when the LLM judge layer is enabled
6
+ // (config.enableLLMAnnotate / default-on path); falls back to the
7
+ // deterministic parser when this helper returns transport_error.
8
+ const TRANSPORT_RETRY_RE = /transport|network|5\d\d|timeout|ECONNREFUSED|ECONNRESET|EAI_AGAIN|ETIMEDOUT|fetch failed/i;
9
+ const BACKOFF_MS = [0, 1000, 2000];
10
+ export async function runAnnotatorTurn(input) {
11
+ const t0 = Date.now();
12
+ let lastErr = '';
13
+ for (let attempt = 0; attempt < BACKOFF_MS.length; attempt++) {
14
+ if (BACKOFF_MS[attempt] > 0)
15
+ await sleep(BACKOFF_MS[attempt]);
16
+ try {
17
+ const session = input.ctx.getSession(input.tier ?? 'standard');
18
+ const turn = await session.send(input.prompt, { stageLabel: 'annotate' });
19
+ return {
20
+ kind: 'ok',
21
+ text: turn.output ?? '',
22
+ costUSD: typeof turn.costUSD === 'number' ? turn.costUSD : null,
23
+ turnsUsed: turn.turns ?? 1,
24
+ ms: Date.now() - t0,
25
+ model: typeof turn.model === 'string' ? turn.model : null,
26
+ inputTokens: turn.usage?.inputTokens ?? 0,
27
+ outputTokens: turn.usage?.outputTokens ?? 0,
28
+ cachedReadTokens: turn.usage?.cachedReadTokens ?? 0,
29
+ cachedNonReadTokens: turn.usage?.cachedNonReadTokens ?? 0,
30
+ };
31
+ }
32
+ catch (err) {
33
+ lastErr = err instanceof Error ? err.message : String(err);
34
+ if (!TRANSPORT_RETRY_RE.test(lastErr))
35
+ break; // non-transport: don't retry
36
+ }
37
+ }
38
+ return { kind: 'transport_error', message: lastErr || 'annotator turn failed', ms: Date.now() - t0 };
39
+ }
40
+ function sleep(ms) {
41
+ return new Promise(r => setTimeout(r, ms));
42
+ }
43
+ //# sourceMappingURL=run-annotator-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-annotator-turn.js","sourceRoot":"","sources":["../../src/providers/run-annotator-turn.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,yEAAyE;AACzE,kEAAkE;AAClE,oEAAoE;AACpE,kEAAkE;AAClE,iEAAiE;AAyBjE,MAAM,kBAAkB,GAAG,2FAA2F,CAAC;AACvH,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAwB;IAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7D,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1E,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;gBACvB,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBAC/D,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;gBAC1B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;gBACnB,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBACzD,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;gBACzC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;gBAC3C,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC;gBACnD,mBAAmB,EAAE,IAAI,CAAC,KAAK,EAAE,mBAAmB,IAAI,CAAC;aAC1D,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAU,6BAA6B;QACtF,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ExecutionContext } from '../lifecycle/lifecycle-context.js';
2
+ import type { TaskSpec } from '../types.js';
3
+ import type { MultiModelConfig } from '../types.js';
4
+ export type WorkerTurnInput = {
5
+ task: TaskSpec;
6
+ config: MultiModelConfig;
7
+ ctx: ExecutionContext;
8
+ route: string;
9
+ /** Optional prompt override (used by rework which passes a rework-specific prompt). */
10
+ promptOverride?: string;
11
+ };
12
+ export type WorkerTurnResult = {
13
+ kind: 'ok';
14
+ text: string;
15
+ costUSD: number;
16
+ turnsUsed: number;
17
+ stopReason: 'normal' | 'turn_cap' | 'cost_cap' | 'timeout';
18
+ } | {
19
+ kind: 'transport_error';
20
+ message: string;
21
+ } | {
22
+ kind: 'sandbox_violation';
23
+ path: string;
24
+ };
25
+ export declare function runWorkerTurn(input: WorkerTurnInput): Promise<WorkerTurnResult>;
26
+ //# sourceMappingURL=run-worker-turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-worker-turn.d.ts","sourceRoot":"","sources":["../../src/providers/run-worker-turn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,GAC5H;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAwBhD,wBAAsB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyBrF"}
@@ -0,0 +1,58 @@
1
+ // Thin wrapper that builds the worker prompt for a given route and dispatches
2
+ // via the provider's session.
3
+ const GIT_FORBIDDEN_INSTRUCTION = [
4
+ '\n\nIMPORTANT — Persistence:',
5
+ 'Do NOT run any git subcommand that mutates history',
6
+ '(commit, add, push, reset, rebase, merge, cherry-pick, etc.).',
7
+ 'The Committing stage handles persistence at the end.',
8
+ '',
9
+ 'IMPORTANT — Structured output:',
10
+ 'End your response with a JSON-fenced block describing what you did:',
11
+ '```json',
12
+ '{',
13
+ ' "summary": "one-line description",',
14
+ ' "workerSelfAssessment": "done" | "failed",',
15
+ ' "filesChanged": ["path/to/file.ts", ...],',
16
+ ' "findings": [...], // read routes only',
17
+ ' "citations": [...],',
18
+ ' "criteriaSucceeded": ["criterion-name", ...],',
19
+ ' "criteriaErrors": [{"criterion":"name","error":"msg"}, ...],',
20
+ ' "sourcesUsed": ["url", ...]',
21
+ '}',
22
+ '```',
23
+ ].join('\n');
24
+ export async function runWorkerTurn(input) {
25
+ try {
26
+ const systemPrompt = input.task.systemPrompt ?? '';
27
+ const userMessage = input.task.userMessage ?? '';
28
+ const base = systemPrompt.length > 0 ? `${systemPrompt}\n\n${userMessage}` : userMessage;
29
+ const instruction = base + GIT_FORBIDDEN_INSTRUCTION;
30
+ const prompt = input.promptOverride ?? instruction;
31
+ const session = input.ctx.getSession(input.ctx.assignedTier);
32
+ const turn = await session.send(prompt);
33
+ const typedTurn = turn;
34
+ return {
35
+ kind: 'ok',
36
+ text: typedTurn.output ?? '',
37
+ costUSD: typedTurn.costUSD ?? 0,
38
+ turnsUsed: typedTurn.turns ?? 1,
39
+ stopReason: mapStopReason(typedTurn.terminationReason),
40
+ };
41
+ }
42
+ catch (err) {
43
+ const msg = err instanceof Error ? err.message : String(err);
44
+ if (/sandbox/i.test(msg))
45
+ return { kind: 'sandbox_violation', path: '(unknown)' };
46
+ return { kind: 'transport_error', message: msg };
47
+ }
48
+ }
49
+ function mapStopReason(r) {
50
+ switch (r) {
51
+ case 'ok': return 'normal';
52
+ case 'cap_exhausted': return 'turn_cap';
53
+ case 'cost_exceeded': return 'cost_cap';
54
+ case 'time_exceeded': return 'timeout';
55
+ default: return 'normal';
56
+ }
57
+ }
58
+ //# sourceMappingURL=run-worker-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-worker-turn.js","sourceRoot":"","sources":["../../src/providers/run-worker-turn.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8BAA8B;AAoB9B,MAAM,yBAAyB,GAAG;IAChC,8BAA8B;IAC9B,oDAAoD;IACpD,+DAA+D;IAC/D,sDAAsD;IACtD,EAAE;IACF,gCAAgC;IAChC,qEAAqE;IACrE,SAAS;IACT,GAAG;IACH,sCAAsC;IACtC,8CAA8C;IAC9C,6CAA6C;IAC7C,2CAA2C;IAC3C,uBAAuB;IACvB,iDAAiD;IACjD,gEAAgE;IAChE,+BAA+B;IAC/B,GAAG;IACH,KAAK;CACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAsB;IACxD,IAAI,CAAC;QACH,MAAM,YAAY,GAAI,KAAK,CAAC,IAAkC,CAAC,YAAY,IAAI,EAAE,CAAC;QAClF,MAAM,WAAW,GAAI,KAAK,CAAC,IAAiC,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/E,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACzF,MAAM,WAAW,GAAG,IAAI,GAAG,yBAAyB,CAAC;QAErD,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,IAAI,WAAW,CAAC;QACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,SAAS,GAAG,IAAyF,CAAC;QAE5G,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE;YAC5B,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,CAAC;YAC/B,SAAS,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC;YAC/B,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC;SACvD,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC3B,KAAK,eAAe,CAAC,CAAC,OAAO,UAAU,CAAC;QACxC,KAAK,eAAe,CAAC,CAAC,OAAO,UAAU,CAAC;QACxC,KAAK,eAAe,CAAC,CAAC,OAAO,SAAS,CAAC;QACvC,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -31,7 +31,7 @@ export interface TokenUsage {
31
31
  cachedNonReadTokens: number;
32
32
  }
33
33
  /** Cost fields kept separate from TokenUsage. These are NOT token counts;
34
- * they live on RunResult alongside usage. */
34
+ * they live on RuntimeRunResult alongside usage. */
35
35
  export interface CostBreakdown {
36
36
  costUSD: number | null;
37
37
  /** Actual cost minus estimated parent cost. Negative = worker cheaper (savings). */
@@ -1 +1 @@
1
- {"version":3,"file":"runner-types.d.ts","sourceRoot":"","sources":["../../src/providers/runner-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner-types.d.ts","sourceRoot":"","sources":["../../src/providers/runner-types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { RunResult, TaskSpec } from '../types.js';
1
+ import type { RuntimeRunResult, TaskSpec } from '../types.js';
2
2
  /**
3
3
  * 4.0.3+: signature accepts optional `runResult` and `task` so composers
4
4
  * can read fields the structured `report` doesn't carry (e.g.,
@@ -11,7 +11,7 @@ export interface HeadlineTemplate {
11
11
  taskBrief: string;
12
12
  report: unknown;
13
13
  status: string;
14
- runResult?: RunResult;
14
+ runResult?: RuntimeRunResult;
15
15
  task?: TaskSpec;
16
16
  }): string;
17
17
  }
@@ -22,7 +22,7 @@ export declare class HeadlineComposer {
22
22
  taskBrief: string;
23
23
  report: unknown;
24
24
  status: string;
25
- runResult?: RunResult;
25
+ runResult?: RuntimeRunResult;
26
26
  task?: TaskSpec;
27
27
  }): string;
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"headline-composer.d.ts","sourceRoot":"","sources":["../../src/reporting/headline-composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,KAAK,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB,GAAG,MAAM,CAAC;CACZ;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,gBAAgB;IAE9C,OAAO,CAAC,KAAK,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB,GAAG,MAAM;CAGX"}
1
+ {"version":3,"file":"headline-composer.d.ts","sourceRoot":"","sources":["../../src/reporting/headline-composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,KAAK,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,gBAAgB,CAAC;QAC7B,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB,GAAG,MAAM,CAAC;CACZ;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,gBAAgB;IAE9C,OAAO,CAAC,KAAK,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,gBAAgB,CAAC;QAC7B,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB,GAAG,MAAM;CAGX"}
@@ -1,4 +1,5 @@
1
- export * from './reviewer-engine.js';
2
- export * from './reviewer-prompt-builder.js';
3
- export * from './reviewer-output-parser.js';
1
+ export * from './review-types.js';
2
+ export * from './parse-review-report.js';
3
+ export * from './review-verdict-mapping.js';
4
+ export * from './skipped-result.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"AAEA,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC"}
@@ -1,5 +1,8 @@
1
- // review/index.ts — public surface barrel; per architecture.md:262-275.
2
- export * from './reviewer-engine.js';
3
- export * from './reviewer-prompt-builder.js';
4
- export * from './reviewer-output-parser.js';
1
+ // review/index.ts — public surface barrel.
2
+ // Templates live in review/templates/ — import from there directly.
3
+ // Other remaining modules are exported individually below.
4
+ export * from './review-types.js';
5
+ export * from './parse-review-report.js';
6
+ export * from './review-verdict-mapping.js';
7
+ export * from './skipped-result.js';
5
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,oEAAoE;AACpE,2DAA2D;AAC3D,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC"}
@@ -1,6 +1,12 @@
1
1
  export interface ParsedReviewReport {
2
2
  verdict: 'approved' | 'changes_required';
3
- deviations: string[];
3
+ findings: Array<{
4
+ severity: 'critical' | 'high' | 'medium' | 'low';
5
+ category: string;
6
+ claim: string;
7
+ evidence?: string;
8
+ suggestion?: string;
9
+ }>;
4
10
  }
5
11
  export declare function parseReviewReport(text: string): ParsedReviewReport;
6
12
  //# sourceMappingURL=parse-review-report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-review-report.d.ts","sourceRoot":"","sources":["../../src/review/parse-review-report.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACzC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAoClE"}
1
+ {"version":3,"file":"parse-review-report.d.ts","sourceRoot":"","sources":["../../src/review/parse-review-report.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACzC,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACjD,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CA8BlE"}
@@ -1,9 +1,10 @@
1
+ import { parseFindings } from '../lifecycle/findings-parser.js';
1
2
  const VERDICT_HEADER = /^##\s*verdict\s*$/im;
2
- const DEVIATIONS_HEADER = /^##\s*deviations\s*$/im;
3
+ const FINDINGS_HEADER = /^##\s*findings\s*$/im;
3
4
  export function parseReviewReport(text) {
4
5
  const safe = (text ?? '').toString();
5
6
  const verdictMatch = safe.match(VERDICT_HEADER);
6
- const deviationsMatch = safe.match(DEVIATIONS_HEADER);
7
+ const findingsMatch = safe.match(FINDINGS_HEADER);
7
8
  let verdict = 'changes_required';
8
9
  if (verdictMatch) {
9
10
  const after = safe.slice(verdictMatch.index + verdictMatch[0].length);
@@ -15,26 +16,17 @@ export function parseReviewReport(text) {
15
16
  else if (/\bapproved\b/i.test(safe) && !/changes[\s_-]?required/i.test(safe)) {
16
17
  verdict = 'approved';
17
18
  }
18
- const deviations = [];
19
- if (deviationsMatch) {
20
- const tail = safe.slice(deviationsMatch.index + deviationsMatch[0].length);
21
- const nextHeader = tail.search(/^##\s/im);
22
- const section = nextHeader === -1 ? tail : tail.slice(0, nextHeader);
23
- for (const raw of section.split('\n')) {
24
- const line = raw.trim();
25
- if (!line)
26
- continue;
27
- if (/^\(none\)$/i.test(line))
28
- continue;
29
- const cleaned = line.replace(/^[-*+]\s*/, '').replace(/^\d+\.\s*/, '').trim();
30
- if (!cleaned)
31
- continue;
32
- deviations.push(cleaned);
33
- }
34
- }
35
- if (verdict === 'approved' && deviations.length > 0) {
19
+ // Delegate finding extraction to the canonical parseFindings parser.
20
+ // parseFindings is imported from lifecycle/findings-parser and handles the
21
+ // ## Finding N: block format with severity/category/claim/evidence/suggestion.
22
+ const findingsSection = findingsMatch
23
+ ? safe.slice(findingsMatch.index + findingsMatch[0].length)
24
+ : '';
25
+ const findings = parseFindings(findingsSection, 'reviewer');
26
+ // approved + findings → changes_required per design spec §4
27
+ if (verdict === 'approved' && findings.length > 0) {
36
28
  verdict = 'changes_required';
37
29
  }
38
- return { verdict, deviations };
30
+ return { verdict, findings };
39
31
  }
40
32
  //# sourceMappingURL=parse-review-report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-review-report.js","sourceRoot":"","sources":["../../src/review/parse-review-report.ts"],"names":[],"mappings":"AAKA,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAC7C,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAEnD,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAEtD,IAAI,OAAO,GAAoC,kBAAkB,CAAC;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,UAAU,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,OAAO,GAAG,UAAU,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACrE,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9E,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,GAAG,kBAAkB,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"parse-review-report.js","sourceRoot":"","sources":["../../src/review/parse-review-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAahE,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAC7C,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAE/C,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAElD,IAAI,OAAO,GAAoC,kBAAkB,CAAC;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,UAAU,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,OAAO,GAAG,UAAU,CAAC;IACvB,CAAC;IAED,qEAAqE;IACrE,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,eAAe,GAAG,aAAa;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,QAAQ,GAAG,aAAa,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAE5D,4DAA4D;IAC5D,IAAI,OAAO,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,GAAG,kBAAkB,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
@@ -1,6 +1,6 @@
1
- import type { RunResult, ReviewVerdict } from '../types.js';
1
+ import type { RuntimeRunResult, ReviewVerdict } from '../types.js';
2
2
  /**
3
- * Map RunResult review fields (set by the lifecycle dispatcher) into the
3
+ * Map RuntimeRunResult review fields (set by the lifecycle dispatcher) into the
4
4
  * ExecutorOutput envelope shape. Centralizes the rename + type-narrowing
5
5
  * + roundsUsed computation across all 5 read-only executors.
6
6
  *
@@ -8,7 +8,7 @@ import type { RunResult, ReviewVerdict } from '../types.js';
8
8
  * For read-only routes (quality_only), specReviewStatus is always
9
9
  * 'not_applicable', so the cast is safe in practice.
10
10
  */
11
- export declare function mapReviewVerdicts(result: RunResult, killSwitchActive: boolean): {
11
+ export declare function mapReviewVerdicts(result: RuntimeRunResult, killSwitchActive: boolean): {
12
12
  specReviewVerdict: ReviewVerdict;
13
13
  qualityReviewVerdict: ReviewVerdict;
14
14
  roundsUsed: number;
@@ -1 +1 @@
1
- {"version":3,"file":"review-verdict-mapping.d.ts","sourceRoot":"","sources":["../../src/review/review-verdict-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,OAAO,GACxB;IACD,iBAAiB,EAAE,aAAa,CAAC;IACjC,oBAAoB,EAAE,aAAa,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB,CAaA"}
1
+ {"version":3,"file":"review-verdict-mapping.d.ts","sourceRoot":"","sources":["../../src/review/review-verdict-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,OAAO,GACxB;IACD,iBAAiB,EAAE,aAAa,CAAC;IACjC,oBAAoB,EAAE,aAAa,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB,CAaA"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Map RunResult review fields (set by the lifecycle dispatcher) into the
2
+ * Map RuntimeRunResult review fields (set by the lifecycle dispatcher) into the
3
3
  * ExecutorOutput envelope shape. Centralizes the rename + type-narrowing
4
4
  * + roundsUsed computation across all 5 read-only executors.
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"review-verdict-mapping.js","sourceRoot":"","sources":["../../src/review/review-verdict-mapping.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,gBAAyB;IAMzB,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;IACD,OAAO;QACL,iBAAiB,EAAE,CAAC,MAAM,CAAC,gBAAgB,IAAI,gBAAgB,CAAkB;QACjF,oBAAoB,EAAE,CAAC,MAAM,CAAC,mBAAmB,IAAI,gBAAgB,CAAkB;QACvF,kFAAkF;QAClF,8EAA8E;QAC9E,8EAA8E;QAC9E,yEAAyE;QACzE,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC;KAC9C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"review-verdict-mapping.js","sourceRoot":"","sources":["../../src/review/review-verdict-mapping.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAwB,EACxB,gBAAyB;IAMzB,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;IACD,OAAO;QACL,iBAAiB,EAAE,CAAC,MAAM,CAAC,gBAAgB,IAAI,gBAAgB,CAAkB;QACjF,oBAAoB,EAAE,CAAC,MAAM,CAAC,mBAAmB,IAAI,gBAAgB,CAAkB;QACvF,kFAAkF;QAClF,8EAA8E;QAC9E,8EAA8E;QAC9E,yEAAyE;QACzE,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC;KAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ExecutionContext } from '../lifecycle/lifecycle-context.js';
2
+ import type { AgentType } from '../types.js';
3
+ export type RunReviewerInput = {
4
+ prompt: string;
5
+ ctx: ExecutionContext;
6
+ reviewer: 'spec' | 'quality';
7
+ /**
8
+ * The implementer's tier. The reviewer runs on the OPPOSITE tier as a
9
+ * "second-opinion needs a different perspective" policy:
10
+ * implementer=standard → reviewer=complex (capable reviewer of cheap work)
11
+ * implementer=complex → reviewer=standard (cheap sanity check of expensive work)
12
+ * If the inverted tier has no provider configured, falls back to the
13
+ * implementer tier and records a `validation_warnings` diagnostic upstream.
14
+ */
15
+ implementerTier: AgentType;
16
+ };
17
+ /**
18
+ * Cross-tier inversion: reviewer tier is the opposite of the implementer's.
19
+ * Exported so callers can compute the tier independently (e.g. for logging
20
+ * or for the `mergeStageStats` call in review-handler.ts).
21
+ */
22
+ export declare function invertedReviewerTier(implementerTier: AgentType): AgentType;
23
+ export type RunReviewerResult = {
24
+ kind: 'ok';
25
+ text: string;
26
+ costUSD: number | null;
27
+ turnsUsed: number;
28
+ ms: number;
29
+ model: string | null;
30
+ inputTokens: number;
31
+ outputTokens: number;
32
+ cachedReadTokens: number;
33
+ cachedNonReadTokens: number;
34
+ } | {
35
+ kind: 'transport_error';
36
+ message: string;
37
+ ms: number;
38
+ };
39
+ export declare function runReviewerTurn(input: RunReviewerInput): Promise<RunReviewerResult>;
40
+ //# sourceMappingURL=run-reviewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-reviewer.d.ts","sourceRoot":"","sources":["../../src/review/run-reviewer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,gBAAgB,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B;;;;;;;OAOG;IACH,eAAe,EAAE,SAAS,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,CAE1E;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,wBAAsB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqCzF"}
@@ -0,0 +1,54 @@
1
+ // Thin wrapper that runs one reviewer-tier LLM turn with 3-attempt transport-retry policy.
2
+ // Spec §4.6: transport failures (network, 5xx, model gateway, timeout) → 3 total attempts
3
+ // with backoff 0s → 1s → 2s. Non-transport caps (cost_cap, turn_cap, sandbox) → no retry.
4
+ /**
5
+ * Cross-tier inversion: reviewer tier is the opposite of the implementer's.
6
+ * Exported so callers can compute the tier independently (e.g. for logging
7
+ * or for the `mergeStageStats` call in review-handler.ts).
8
+ */
9
+ export function invertedReviewerTier(implementerTier) {
10
+ return implementerTier === 'complex' ? 'standard' : 'complex';
11
+ }
12
+ export async function runReviewerTurn(input) {
13
+ const t0 = Date.now();
14
+ const backoffMs = [0, 1000, 2000]; // attempt 1: no backoff; 2: 1s; 3: 2s
15
+ let lastErr = '';
16
+ for (let attempt = 0; attempt < 3; attempt++) {
17
+ if (backoffMs[attempt] > 0)
18
+ await sleep(backoffMs[attempt]);
19
+ try {
20
+ // Cross-tier inversion. If the inverted tier has no provider
21
+ // configured (single-tier deployments), fall back to the implementer
22
+ // tier so the reviewer can still run. The fallback is observable
23
+ // via the resolved `session.model` carried into the wire payload.
24
+ const desired = invertedReviewerTier(input.implementerTier);
25
+ const providers = input.ctx.providers;
26
+ const tierToUse = providers && providers[desired] ? desired : input.implementerTier;
27
+ const session = input.ctx.getSession(tierToUse);
28
+ const r = await session.send(input.prompt);
29
+ return {
30
+ kind: 'ok',
31
+ text: r.output ?? '',
32
+ costUSD: r.costUSD ?? null,
33
+ turnsUsed: r.turns ?? 1,
34
+ ms: Date.now() - t0,
35
+ model: typeof r.model === 'string'
36
+ ? r.model
37
+ : null,
38
+ inputTokens: r.usage?.inputTokens ?? 0,
39
+ outputTokens: r.usage?.outputTokens ?? 0,
40
+ cachedReadTokens: r.usage?.cachedReadTokens ?? 0,
41
+ cachedNonReadTokens: r.usage?.cachedNonReadTokens ?? 0,
42
+ };
43
+ }
44
+ catch (err) {
45
+ lastErr = err instanceof Error ? err.message : String(err);
46
+ // Only retry on transport-class errors; cost_cap / turn_cap / sandbox are non-retryable.
47
+ if (!/transport|network|5\d\d|timeout/i.test(lastErr))
48
+ break;
49
+ }
50
+ }
51
+ return { kind: 'transport_error', message: lastErr || 'reviewer failed', ms: Date.now() - t0 };
52
+ }
53
+ function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
54
+ //# sourceMappingURL=run-reviewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-reviewer.js","sourceRoot":"","sources":["../../src/review/run-reviewer.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,0FAA0F;AAC1F,0FAA0F;AAoB1F;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAA0B;IAC7D,OAAO,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAiBD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAuB;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,sCAAsC;IACzE,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,6DAA6D;YAC7D,qEAAqE;YACrE,iEAAiE;YACjE,kEAAkE;YAClE,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAI,KAAK,CAAC,GAA2D,CAAC,SAAS,CAAC;YAC/F,MAAM,SAAS,GAAc,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;YAC/F,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;gBAC1B,SAAS,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;gBACvB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;gBACnB,KAAK,EAAE,OAAQ,CAAwB,CAAC,KAAK,KAAK,QAAQ;oBACxD,CAAC,CAAE,CAAwB,CAAC,KAAM;oBAClC,CAAC,CAAC,IAAI;gBACR,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;gBACtC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;gBACxC,gBAAgB,EAAE,CAAC,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC;gBAChD,mBAAmB,EAAE,CAAC,CAAC,KAAK,EAAE,mBAAmB,IAAI,CAAC;aACvD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3D,yFAAyF;YACzF,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,MAAM;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACjG,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,IAAI,OAAO,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,3 +1,8 @@
1
1
  import type { ReviewTemplate } from './shared.js';
2
2
  export declare const qualityLintTemplate: ReviewTemplate;
3
+ export declare function qualityReviewPrompt(ctx: {
4
+ brief: string;
5
+ workerSummary: string;
6
+ filesChanged: string[];
7
+ }): string;
3
8
  //# sourceMappingURL=quality-review.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"quality-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/quality-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,mBAAmB,EAAE,cAmEjC,CAAC"}
1
+ {"version":3,"file":"quality-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/quality-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuBlD,eAAO,MAAM,mBAAmB,EAAE,cA8CjC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAUjH"}
@@ -1,3 +1,23 @@
1
+ const OUTPUT_FORMAT = `Output format (mandatory):
2
+
3
+ ## Verdict
4
+ approved | changes_required
5
+
6
+ ## Finding N: <one-line claim for this finding>
7
+ - Severity: critical | high | medium | low
8
+ - Category: <category name>
9
+ - Issue: <one concrete symptom or risk — quote source line or describe observable bad behaviour>
10
+ - Suggestion: <specific, actionable fix — not a general nudge>
11
+
12
+ ## Finding N+1: ...
13
+ (omit section entirely if approved)
14
+
15
+ Rules:
16
+ - "approved" when the code is safe and correct enough to ship. Style nits do NOT block.
17
+ - "changes_required" only for substantive risks (null-handling gap, missing error path, real edge case, security surface, etc.).
18
+ - Each finding must be specific enough that a rework worker can act on it without re-deriving.
19
+ - If approved, write "## Verdict\napproved" and omit the ## Finding sections entirely.
20
+ - Do NOT use editor tools. Read-only investigation only.`;
1
21
  export const qualityLintTemplate = {
2
22
  systemPrompt: [
3
23
  'You are the QUALITY reviewer for a plan-execution task. You are LINT-ONLY — do NOT edit files.',
@@ -5,20 +25,13 @@ export const qualityLintTemplate = {
5
25
  'You are NOT checking plan fidelity — that is the spec reviewer\'s job (their report runs in parallel).',
6
26
  'Read files as needed to verify. A separate REWORK stage will apply your findings.',
7
27
  '',
8
- 'Output format (mandatory):',
9
- '',
10
- '## Verdict',
11
- 'approved | changes_required',
12
- '',
13
- '## Deviations',
14
- '- <one short line per concern, naming the file and the risk>',
15
- '- ...',
28
+ OUTPUT_FORMAT,
16
29
  '',
17
30
  'Rules:',
18
31
  '- "approved" when the code is safe and correct enough to ship. Style nits do NOT block.',
19
32
  '- "changes_required" only for substantive risks (null-handling gap, missing error path, real edge case, security surface, etc.).',
20
- '- Each deviation must be specific enough that a rework worker can act on it without re-deriving.',
21
- '- If approved, write "## Deviations\\n(none)".',
33
+ '- Each finding must be specific enough that a rework worker can act on it without re-deriving.',
34
+ '- If approved, write "## Verdict\napproved" and omit the ## Finding sections entirely.',
22
35
  '- Do NOT use editor tools. Read-only investigation only.',
23
36
  ].join('\n'),
24
37
  buildUserPrompt(ctx) {
@@ -47,22 +60,19 @@ export const qualityLintTemplate = {
47
60
  'Now re-evaluate the SAME work in this thread through the QUALITY lens:',
48
61
  'safety, correctness, error handling, edge cases, security, maintainability.',
49
62
  '',
50
- 'Output format (mandatory):',
51
- '',
52
- '## Verdict',
53
- 'approved | changes_required',
54
- '',
55
- '## Deviations',
56
- '- <one short line per concern, naming the file and the risk>',
57
- '- ...',
58
- '',
59
- 'Rules:',
60
- '- "approved" when the code is safe and correct enough to ship. Style nits do NOT block.',
61
- '- "changes_required" only for substantive risks.',
62
- '- Each deviation must be specific enough that a rework worker can act on it without re-deriving.',
63
- '- If approved, write "## Deviations\\n(none)".',
64
- '- Do NOT use editor tools. Read-only investigation only.',
63
+ OUTPUT_FORMAT,
65
64
  ].join('\n');
66
65
  },
67
66
  };
67
+ export function qualityReviewPrompt(ctx) {
68
+ return `You are the quality reviewer for this task.
69
+
70
+ Brief: ${ctx.brief}
71
+
72
+ Worker said: ${ctx.workerSummary}
73
+
74
+ Files changed: ${ctx.filesChanged.join(', ') || '(none)'}
75
+
76
+ ${OUTPUT_FORMAT}`;
77
+ }
68
78
  //# sourceMappingURL=quality-review.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quality-review.js","sourceRoot":"","sources":["../../../src/review/templates/quality-review.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,YAAY,EAAE;QACZ,gGAAgG;QAChG,yFAAyF;QACzF,wGAAwG;QACxG,mFAAmF;QACnF,EAAE;QACF,4BAA4B;QAC5B,EAAE;QACF,YAAY;QACZ,6BAA6B;QAC7B,EAAE;QACF,eAAe;QACf,8DAA8D;QAC9D,OAAO;QACP,EAAE;QACF,QAAQ;QACR,yFAAyF;QACzF,kIAAkI;QAClI,kGAAkG;QAClG,gDAAgD;QAChD,0DAA0D;KAC3D,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,eAAe,CAAC,GAAG;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,mDAAmD,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,4DAA4D,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,IAAI;QACpB,kEAAkE;QAClE,8DAA8D;QAC9D,oEAAoE;QACpE,4CAA4C;QAC5C,OAAO;YACL,sCAAsC;YACtC,EAAE;YACF,wEAAwE;YACxE,6EAA6E;YAC7E,EAAE;YACF,4BAA4B;YAC5B,EAAE;YACF,YAAY;YACZ,6BAA6B;YAC7B,EAAE;YACF,eAAe;YACf,8DAA8D;YAC9D,OAAO;YACP,EAAE;YACF,QAAQ;YACR,yFAAyF;YACzF,kDAAkD;YAClD,kGAAkG;YAClG,gDAAgD;YAChD,0DAA0D;SAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"quality-review.js","sourceRoot":"","sources":["../../../src/review/templates/quality-review.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;yDAmBmC,CAAC;AAE1D,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,YAAY,EAAE;QACZ,gGAAgG;QAChG,yFAAyF;QACzF,wGAAwG;QACxG,mFAAmF;QACnF,EAAE;QACF,aAAa;QACb,EAAE;QACF,QAAQ;QACR,yFAAyF;QACzF,kIAAkI;QAClI,gGAAgG;QAChG,wFAAwF;QACxF,0DAA0D;KAC3D,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,eAAe,CAAC,GAAG;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,mDAAmD,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,4DAA4D,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,IAAI;QACpB,kEAAkE;QAClE,8DAA8D;QAC9D,oEAAoE;QACpE,4CAA4C;QAC5C,OAAO;YACL,sCAAsC;YACtC,EAAE;YACF,wEAAwE;YACxE,6EAA6E;YAC7E,EAAE;YACF,aAAa;SACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,GAAqE;IACvG,OAAO;;SAEA,GAAG,CAAC,KAAK;;eAEH,GAAG,CAAC,aAAa;;iBAEf,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ;;EAEtD,aAAa,EAAE,CAAC;AAClB,CAAC"}
@@ -1,3 +1,9 @@
1
1
  import type { ReviewTemplate } from './shared.js';
2
+ export declare const OUTPUT_FORMAT: string;
3
+ export declare function specReviewPrompt(ctx: {
4
+ brief: string;
5
+ workerSummary: string;
6
+ filesChanged: string[];
7
+ }): string;
2
8
  export declare const specLintTemplate: ReviewTemplate;
3
9
  //# sourceMappingURL=spec-review.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/spec-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,gBAAgB,EAAE,cAsC9B,CAAC"}
1
+ {"version":3,"file":"spec-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/spec-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,aAAa,QAqBlB,CAAC;AAET,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAU9G;AAED,eAAO,MAAM,gBAAgB,EAAE,cAiC9B,CAAC"}