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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +11 -9
  2. package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
  3. package/dist/intake/brief-compiler-slots/delegate.js +8 -1
  4. package/dist/intake/brief-compiler-slots/delegate.js.map +1 -1
  5. package/dist/lifecycle/diff-tracker.d.ts +72 -0
  6. package/dist/lifecycle/diff-tracker.d.ts.map +1 -0
  7. package/dist/lifecycle/diff-tracker.js +316 -0
  8. package/dist/lifecycle/diff-tracker.js.map +1 -0
  9. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts +1 -1
  10. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts.map +1 -1
  11. package/dist/lifecycle/handlers/prepare-execution-context-handler.js +23 -1
  12. package/dist/lifecycle/handlers/prepare-execution-context-handler.js.map +1 -1
  13. package/dist/lifecycle/handlers/quality-chain-handlers.d.ts.map +1 -1
  14. package/dist/lifecycle/handlers/quality-chain-handlers.js +57 -6
  15. package/dist/lifecycle/handlers/quality-chain-handlers.js.map +1 -1
  16. package/dist/lifecycle/handlers/review-diff-handler.d.ts.map +1 -1
  17. package/dist/lifecycle/handlers/review-diff-handler.js +38 -12
  18. package/dist/lifecycle/handlers/review-diff-handler.js.map +1 -1
  19. package/dist/lifecycle/handlers/spec-chain-handlers.d.ts.map +1 -1
  20. package/dist/lifecycle/handlers/spec-chain-handlers.js +38 -10
  21. package/dist/lifecycle/handlers/spec-chain-handlers.js.map +1 -1
  22. package/dist/lifecycle/merge-stage-stats.d.ts +27 -0
  23. package/dist/lifecycle/merge-stage-stats.d.ts.map +1 -1
  24. package/dist/lifecycle/merge-stage-stats.js +56 -0
  25. package/dist/lifecycle/merge-stage-stats.js.map +1 -1
  26. package/dist/lifecycle/stage-plan-types.d.ts +15 -0
  27. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  28. package/dist/providers/provider-factory.d.ts.map +1 -1
  29. package/dist/providers/provider-factory.js +6 -0
  30. package/dist/providers/provider-factory.js.map +1 -1
  31. package/dist/reporting/headline-templates/audit.d.ts.map +1 -1
  32. package/dist/reporting/headline-templates/audit.js +17 -8
  33. package/dist/reporting/headline-templates/audit.js.map +1 -1
  34. package/dist/reporting/headline-templates/debug.d.ts +22 -3
  35. package/dist/reporting/headline-templates/debug.d.ts.map +1 -1
  36. package/dist/reporting/headline-templates/debug.js +38 -8
  37. package/dist/reporting/headline-templates/debug.js.map +1 -1
  38. package/dist/reporting/headline-templates/delegate.d.ts.map +1 -1
  39. package/dist/reporting/headline-templates/delegate.js +14 -3
  40. package/dist/reporting/headline-templates/delegate.js.map +1 -1
  41. package/dist/reporting/headline-templates/execute-plan.d.ts.map +1 -1
  42. package/dist/reporting/headline-templates/execute-plan.js +17 -8
  43. package/dist/reporting/headline-templates/execute-plan.js.map +1 -1
  44. package/dist/reporting/headline-templates/review.d.ts.map +1 -1
  45. package/dist/reporting/headline-templates/review.js +23 -6
  46. package/dist/reporting/headline-templates/review.js.map +1 -1
  47. package/dist/reporting/headline-templates/verify.d.ts.map +1 -1
  48. package/dist/reporting/headline-templates/verify.js +23 -6
  49. package/dist/reporting/headline-templates/verify.js.map +1 -1
  50. package/dist/reporting/headline-text.d.ts +5 -0
  51. package/dist/reporting/headline-text.d.ts.map +1 -1
  52. package/dist/reporting/headline-text.js +36 -5
  53. package/dist/reporting/headline-text.js.map +1 -1
  54. package/dist/reporting/report-parser-slots/verify-report.d.ts +17 -0
  55. package/dist/reporting/report-parser-slots/verify-report.d.ts.map +1 -1
  56. package/dist/reporting/report-parser-slots/verify-report.js +45 -3
  57. package/dist/reporting/report-parser-slots/verify-report.js.map +1 -1
  58. package/dist/reporting/severity.d.ts +22 -0
  59. package/dist/reporting/severity.d.ts.map +1 -1
  60. package/dist/reporting/severity.js +36 -0
  61. package/dist/reporting/severity.js.map +1 -1
  62. package/dist/review/annotator-output-parser.d.ts.map +1 -1
  63. package/dist/review/annotator-output-parser.js +94 -14
  64. package/dist/review/annotator-output-parser.js.map +1 -1
  65. package/dist/review/annotator-prompt-builder.d.ts +20 -0
  66. package/dist/review/annotator-prompt-builder.d.ts.map +1 -1
  67. package/dist/review/annotator-prompt-builder.js +52 -1
  68. package/dist/review/annotator-prompt-builder.js.map +1 -1
  69. package/dist/review/reviewer-engine.d.ts +14 -0
  70. package/dist/review/reviewer-engine.d.ts.map +1 -1
  71. package/dist/review/reviewer-engine.js.map +1 -1
  72. package/dist/review/reviewer-output-parser.d.ts.map +1 -1
  73. package/dist/review/reviewer-output-parser.js +171 -16
  74. package/dist/review/reviewer-output-parser.js.map +1 -1
  75. package/dist/review/reviewer-prompt-builder.d.ts +4 -12
  76. package/dist/review/reviewer-prompt-builder.d.ts.map +1 -1
  77. package/dist/review/reviewer-prompt-builder.js.map +1 -1
  78. package/dist/review/templates/diff-review.d.ts +8 -0
  79. package/dist/review/templates/diff-review.d.ts.map +1 -1
  80. package/dist/review/templates/diff-review.js +34 -2
  81. package/dist/review/templates/diff-review.js.map +1 -1
  82. package/dist/review/templates/finding-criteria.d.ts +39 -0
  83. package/dist/review/templates/finding-criteria.d.ts.map +1 -0
  84. package/dist/review/templates/finding-criteria.js +80 -0
  85. package/dist/review/templates/finding-criteria.js.map +1 -0
  86. package/dist/review/templates/quality-review-artifact.d.ts +13 -0
  87. package/dist/review/templates/quality-review-artifact.d.ts.map +1 -1
  88. package/dist/review/templates/quality-review-artifact.js +41 -3
  89. package/dist/review/templates/quality-review-artifact.js.map +1 -1
  90. package/dist/review/templates/shared.d.ts +22 -5
  91. package/dist/review/templates/shared.d.ts.map +1 -1
  92. package/dist/review/templates/spec-review.d.ts +15 -0
  93. package/dist/review/templates/spec-review.d.ts.map +1 -1
  94. package/dist/review/templates/spec-review.js +43 -3
  95. package/dist/review/templates/spec-review.js.map +1 -1
  96. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  97. package/dist/tools/audit/tool-config.js +23 -6
  98. package/dist/tools/audit/tool-config.js.map +1 -1
  99. package/dist/tools/debug/tool-config.d.ts.map +1 -1
  100. package/dist/tools/debug/tool-config.js +17 -4
  101. package/dist/tools/debug/tool-config.js.map +1 -1
  102. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  103. package/dist/tools/execute-plan/tool-config.js +5 -1
  104. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  105. package/dist/tools/investigate/tool-config.d.ts +13 -1
  106. package/dist/tools/investigate/tool-config.d.ts.map +1 -1
  107. package/dist/tools/investigate/tool-config.js +34 -4
  108. package/dist/tools/investigate/tool-config.js.map +1 -1
  109. package/dist/tools/retry/tool-config.d.ts.map +1 -1
  110. package/dist/tools/retry/tool-config.js +27 -4
  111. package/dist/tools/retry/tool-config.js.map +1 -1
  112. package/dist/tools/review/tool-config.d.ts.map +1 -1
  113. package/dist/tools/review/tool-config.js +19 -4
  114. package/dist/tools/review/tool-config.js.map +1 -1
  115. package/dist/tools/verify/tool-config.d.ts.map +1 -1
  116. package/dist/tools/verify/tool-config.js +17 -4
  117. package/dist/tools/verify/tool-config.js.map +1 -1
  118. package/package.json +1 -1
  119. package/dist/intake/brief-compiler-slots/investigate.d.ts +0 -26
  120. package/dist/intake/brief-compiler-slots/investigate.d.ts.map +0 -1
  121. package/dist/intake/brief-compiler-slots/investigate.js +0 -42
  122. package/dist/intake/brief-compiler-slots/investigate.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../src/providers/provider-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../../src/providers/provider-factory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,qBAAqB,EAAE,gBAkCnC,CAAC"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,qBAAqB,EAAE,gBA2CnC,CAAC"}
@@ -1,21 +1,30 @@
1
1
  import { isNotApplicable } from '../not-applicable.js';
2
- import { countHighOrCritical } from '../severity.js';
2
+ import { countHighOrCritical, parseNarrativeFindings } from '../severity.js';
3
3
  export const auditHeadlineTemplate = {
4
4
  compose({ report, status, runResult, task }) {
5
5
  const r = report;
6
6
  const reportInapplicable = !r || isNotApplicable(r);
7
- // Source priority for findings (4.0.3+ Gap 2 fix):
7
+ // Source priority for findings (4.0.3+):
8
8
  // 1. Structured report's `findings` (rare — only when the worker
9
9
  // emitted proper JSON matching the audit reportSchema).
10
- // 2. runResult.annotatedFindings (canonical narrative-path source,
10
+ // 2. runResult.annotatedFindings (canonical narrative-path source
11
11
  // populated by the quality-chain handler when verdict='annotated').
12
- // Pre-fix the composer only read (1) — when the worker emitted
13
- // narrative `## Finding N:` blocks, the structuredReport fallback
14
- // had no `findings` field, so the headline reported "0 findings"
15
- // even when the annotator returned dozens.
12
+ // 3. NEW: parseNarrativeFindings(runResult.output) — recovers
13
+ // findings directly from the implementer's `## Finding N:`
14
+ // output when the annotator errored (parse failure, exhaustion).
15
+ // Without this third fallback, audits where the annotator
16
+ // failed report `0 findings (0 high)` even though the
17
+ // implementer's narrative carried valid findings.
16
18
  const reportFindings = !reportInapplicable && Array.isArray(r?.findings) ? r.findings : [];
17
19
  const annotated = runResult?.annotatedFindings ?? [];
18
- const findings = reportFindings.length > 0 ? reportFindings : annotated;
20
+ let findings = reportFindings.length > 0
21
+ ? reportFindings
22
+ : annotated;
23
+ if (findings.length === 0 && typeof runResult?.output === 'string') {
24
+ const narrative = parseNarrativeFindings(runResult.output);
25
+ if (narrative.length > 0)
26
+ findings = narrative;
27
+ }
19
28
  if (findings.length === 0 && reportInapplicable) {
20
29
  return `[${status}] audit completed`;
21
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACzC,MAAM,CAAC,GAAG,MAAiD,CAAC;QAC5D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,mDAAmD;QACnD,mEAAmE;QACnE,6DAA6D;QAC7D,qEAAqE;QACrE,yEAAyE;QACzE,+DAA+D;QAC/D,kEAAkE;QAClE,iEAAiE;QACjE,2CAA2C;QAC3C,MAAM,cAAc,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,EAAE,iBAAiB,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC;YAChD,OAAO,IAAI,MAAM,mBAAmB,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAyC,CAAC,CAAC;QAE5E,mEAAmE;QACnE,gEAAgE;QAChE,kDAAkD;QAClD,MAAM,IAAI,GACR,CAAC,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;eAC/E,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;eAC9D,EAAE,CAAC;QAER,OAAO,IAAI,MAAM,WAAW,IAAI,KAAK,QAAQ,CAAC,MAAM,cAAc,IAAI,QAAQ,CAAC;IACjF,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/audit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7E,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACzC,MAAM,CAAC,GAAG,MAAiD,CAAC;QAC5D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,yCAAyC;QACzC,mEAAmE;QACnE,6DAA6D;QAC7D,oEAAoE;QACpE,yEAAyE;QACzE,gEAAgE;QAChE,gEAAgE;QAChE,sEAAsE;QACtE,+DAA+D;QAC/D,2DAA2D;QAC3D,uDAAuD;QACvD,MAAM,cAAc,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,EAAE,iBAAiB,IAAI,EAAE,CAAC;QACrD,IAAI,QAAQ,GACV,cAAc,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAE,cAAgD;YACnD,CAAC,CAAE,SAA2C,CAAC;QACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnE,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,GAAG,SAAS,CAAC;QACjD,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC;YAChD,OAAO,IAAI,MAAM,mBAAmB,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE3C,mEAAmE;QACnE,gEAAgE;QAChE,kDAAkD;QAClD,MAAM,IAAI,GACR,CAAC,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;eAC/E,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;eAC9D,EAAE,CAAC;QAER,OAAO,IAAI,MAAM,WAAW,IAAI,KAAK,QAAQ,CAAC,MAAM,cAAc,IAAI,QAAQ,CAAC;IACjF,CAAC;CACF,CAAC"}
@@ -1,8 +1,27 @@
1
1
  import type { HeadlineTemplate } from '../headline-composer.js';
2
2
  /**
3
- * Compose a terminal headline for debug. Matches the composeTerminalHeadline
4
- * format that the legacy executor produced: "debug: 1/1 tasks complete".
5
- * Debug always dispatches exactly 1 task.
3
+ * Compose a terminal headline for debug.
4
+ *
5
+ * Tool sweep #4 rewrite: bring debug into the same shape as audit and
6
+ * review/verify so operator-facing logs stay consistent across tools:
7
+ *
8
+ * [ok] debug <path>: 3 findings (0 high)
9
+ * [error] debug: 1 findings (1 high)
10
+ * [ok] debug completed
11
+ *
12
+ * Previously emitted "debug: 1/1 tasks complete" with no status prefix
13
+ * and no findings count — operator could not tell ok from error and
14
+ * had no signal about how many real findings landed.
15
+ *
16
+ * Source priority for findings (parallel to audit):
17
+ * 1. runResult.annotatedFindings (canonical — annotator's structured
18
+ * output when verdict='annotated').
19
+ * 2. parseNarrativeFindings(runResult.output) — recovers `## Finding N:`
20
+ * blocks from the implementer's narrative when the annotator errored.
21
+ *
22
+ * Note: debug's reportSchema.parse is intentionally a thrower (the tool
23
+ * doesn't emit a structured report), so `report` is always notApplicable
24
+ * here — there's no `report.findings` source to read.
6
25
  */
7
26
  export declare const debugHeadlineTemplate: HeadlineTemplate;
8
27
  //# sourceMappingURL=debug.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,gBAQnC,CAAC"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,qBAAqB,EAAE,gBAsBnC,CAAC"}
@@ -1,15 +1,45 @@
1
+ import { countHighOrCritical, parseNarrativeFindings } from '../severity.js';
1
2
  /**
2
- * Compose a terminal headline for debug. Matches the composeTerminalHeadline
3
- * format that the legacy executor produced: "debug: 1/1 tasks complete".
4
- * Debug always dispatches exactly 1 task.
3
+ * Compose a terminal headline for debug.
4
+ *
5
+ * Tool sweep #4 rewrite: bring debug into the same shape as audit and
6
+ * review/verify so operator-facing logs stay consistent across tools:
7
+ *
8
+ * [ok] debug <path>: 3 findings (0 high)
9
+ * [error] debug: 1 findings (1 high)
10
+ * [ok] debug completed
11
+ *
12
+ * Previously emitted "debug: 1/1 tasks complete" with no status prefix
13
+ * and no findings count — operator could not tell ok from error and
14
+ * had no signal about how many real findings landed.
15
+ *
16
+ * Source priority for findings (parallel to audit):
17
+ * 1. runResult.annotatedFindings (canonical — annotator's structured
18
+ * output when verdict='annotated').
19
+ * 2. parseNarrativeFindings(runResult.output) — recovers `## Finding N:`
20
+ * blocks from the implementer's narrative when the annotator errored.
21
+ *
22
+ * Note: debug's reportSchema.parse is intentionally a thrower (the tool
23
+ * doesn't emit a structured report), so `report` is always notApplicable
24
+ * here — there's no `report.findings` source to read.
5
25
  */
6
26
  export const debugHeadlineTemplate = {
7
- compose({ report }) {
8
- const r = report;
9
- if (r && typeof r.rootCause === 'string' && r.rootCause.length > 0) {
10
- return `debug: root cause ${r.rootCause}`;
27
+ compose({ status, runResult, task }) {
28
+ const annotated = runResult?.annotatedFindings ?? [];
29
+ let findings = annotated;
30
+ if (findings.length === 0 && typeof runResult?.output === 'string') {
31
+ const narrative = parseNarrativeFindings(runResult.output);
32
+ if (narrative.length > 0)
33
+ findings = narrative;
11
34
  }
12
- return 'debug: 1/1 tasks complete';
35
+ const path = task?.filePaths?.[0] || '';
36
+ if (findings.length === 0 && !path) {
37
+ return `[${status}] debug completed`;
38
+ }
39
+ const high = countHighOrCritical(findings);
40
+ return path
41
+ ? `[${status}] debug ${path}: ${findings.length} findings (${high} high)`
42
+ : `[${status}] debug: ${findings.length} findings (${high} high)`;
13
43
  },
14
44
  };
15
45
  //# sourceMappingURL=debug.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/debug.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE;QAChB,MAAM,CAAC,GAAG,MAA6C,CAAC;QACxD,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,OAAO,uBAAuB,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,2BAA2B,CAAC;IACrC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/debug.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACjC,MAAM,SAAS,GAAG,SAAS,EAAE,iBAAiB,IAAI,EAAE,CAAC;QACrD,IAAI,QAAQ,GACV,SAA0C,CAAC;QAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnE,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,GAAG,SAAS,CAAC;QACjD,CAAC;QAED,MAAM,IAAI,GACP,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,MAAM,mBAAmB,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI;YACT,CAAC,CAAC,IAAI,MAAM,WAAW,IAAI,KAAK,QAAQ,CAAC,MAAM,cAAc,IAAI,QAAQ;YACzE,CAAC,CAAC,IAAI,MAAM,YAAY,QAAQ,CAAC,MAAM,cAAc,IAAI,QAAQ,CAAC;IACtE,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,wBAAwB,EAAE,gBA+BtC,CAAC"}
1
+ {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,wBAAwB,EAAE,gBA0CtC,CAAC"}
@@ -16,16 +16,27 @@ export const delegateHeadlineTemplate = {
16
16
  const runFiles = Array.isArray(runResult?.filesWritten) ? runResult.filesWritten : [];
17
17
  const fileCount = reportFiles.length > 0 ? reportFiles.length : runFiles.length;
18
18
  if (reportInapplicable && fileCount === 0) {
19
- return `[${status}] no structured report available`;
19
+ return `[${status}] delegate: no structured report available`;
20
20
  }
21
21
  // Gap 12 fix (4.0.3+): trim worker's narrative `summary` to first
22
22
  // sentence (or 80-char truncate). Pre-fix, the entire summary —
23
23
  // sometimes multi-sentence prose ending mid-thought — was inlined
24
24
  // into the headline.
25
- const rawSummary = !reportInapplicable && typeof r?.summary === 'string' ? r.summary : '';
25
+ //
26
+ // Tool sweep #6 follow-up: when the structured report carries no
27
+ // summary, fall back to the worker's `output` text (also trimmed to
28
+ // first sentence) so the headline is informative even on no-op /
29
+ // 0-file outcomes. Pre-fix, those collapsed to `[incomplete] (0
30
+ // files)` with NO clue why.
31
+ const rawSummary = (!reportInapplicable && typeof r?.summary === 'string' && r.summary.length > 0)
32
+ ? r.summary
33
+ : (typeof runResult?.output === 'string' ? runResult.output : '');
26
34
  const summary = firstSentenceOrTruncate(rawSummary);
27
35
  const summaryClause = summary.length > 0 ? ` ${summary}` : '';
28
- return `[${status}]${summaryClause} (${fileCount} file${fileCount === 1 ? '' : 's'})`;
36
+ // Tool sweep #6 follow-up: prefix with `delegate:` for parity with
37
+ // audit / review / verify / debug / investigate headlines so the
38
+ // operator can tell the route at a glance.
39
+ return `[${status}] delegate:${summaryClause} (${fileCount} file${fileCount === 1 ? '' : 's'})`;
29
40
  },
30
41
  };
31
42
  //# sourceMappingURL=delegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAAqB;IACxD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;QACnC,MAAM,CAAC,GAAG,MAA8D,CAAC;QACzE,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,qDAAqD;QACrD,kEAAkE;QAClE,2DAA2D;QAC3D,8DAA8D;QAC9D,6DAA6D;QAC7D,kEAAkE;QAClE,yDAAyD;QACzD,0BAA0B;QAC1B,MAAM,WAAW,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEhF,IAAI,kBAAkB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,MAAM,kCAAkC,CAAC;QACtD,CAAC;QAED,kEAAkE;QAClE,gEAAgE;QAChE,kEAAkE;QAClE,qBAAqB;QACrB,MAAM,UAAU,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,MAAM,IAAI,aAAa,KAAK,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACxF,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/delegate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAAqB;IACxD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;QACnC,MAAM,CAAC,GAAG,MAA8D,CAAC;QACzE,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,qDAAqD;QACrD,kEAAkE;QAClE,2DAA2D;QAC3D,8DAA8D;QAC9D,6DAA6D;QAC7D,kEAAkE;QAClE,yDAAyD;QACzD,0BAA0B;QAC1B,MAAM,WAAW,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEhF,IAAI,kBAAkB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,MAAM,4CAA4C,CAAC;QAChE,CAAC;QAED,kEAAkE;QAClE,gEAAgE;QAChE,kEAAkE;QAClE,qBAAqB;QACrB,EAAE;QACF,iEAAiE;QACjE,oEAAoE;QACpE,iEAAiE;QACjE,gEAAgE;QAChE,4BAA4B;QAC5B,MAAM,UAAU,GAAG,CAAC,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAChG,CAAC,CAAC,CAAC,CAAC,OAAO;YACX,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,mEAAmE;QACnE,iEAAiE;QACjE,2CAA2C;QAC3C,OAAO,IAAI,MAAM,cAAc,aAAa,KAAK,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAClG,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAahE,eAAO,MAAM,2BAA2B,EAAE,gBAgBzC,CAAC"}
1
+ {"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAahE,eAAO,MAAM,2BAA2B,EAAE,gBAyBzC,CAAC"}
@@ -1,17 +1,26 @@
1
1
  import { firstSentenceOrTruncate } from '../headline-text.js';
2
2
  export const executePlanHeadlineTemplate = {
3
- compose({ report, status }) {
3
+ compose({ report, status, runResult }) {
4
4
  const r = report;
5
+ // Tool sweep #7 (execute-plan): use the dash-cased route name
6
+ // `execute-plan` to match the HTTP path + envelope shapes (the
7
+ // pre-fix `execute_plan` underscore was the only tool diverging
8
+ // from kebab-case in operator-facing output) and ALWAYS include
9
+ // the [<status>] prefix for parity with audit/review/verify/debug/
10
+ // delegate.
5
11
  if (r?.taskOutcomes && Array.isArray(r.taskOutcomes) && r.taskOutcomes.length > 0) {
6
12
  const completed = r.taskOutcomes.filter((t) => t.status === 'completed' || t.status === 'success').length;
7
- return `execute_plan: ${completed}/${r.taskOutcomes.length} tasks complete`;
13
+ return `[${status}] execute-plan: ${completed}/${r.taskOutcomes.length} tasks complete`;
8
14
  }
9
- if (r?.summary && typeof r.summary === 'string') {
10
- // Gap 12 fix (4.0.3+): trim worker's narrative summary so the
11
- // headline doesn't dump multi-sentence prose ending mid-thought.
12
- return `[${status}] execute_plan: ${firstSentenceOrTruncate(r.summary)}`;
13
- }
14
- return `[${status}] execute_plan`;
15
+ // Tool sweep #7: fall back to runResult.output when report has no
16
+ // summary. Mirrors the delegate fix operator gets a meaningful
17
+ // reason on no-op outcomes instead of a bare `[<status>] execute-plan`.
18
+ const fallbackSrc = (r?.summary && typeof r.summary === 'string' && r.summary.length > 0)
19
+ ? r.summary
20
+ : (typeof runResult?.output === 'string' ? runResult.output : '');
21
+ const summary = firstSentenceOrTruncate(fallbackSrc);
22
+ const summaryClause = summary.length > 0 ? ` ${summary}` : '';
23
+ return `[${status}] execute-plan:${summaryClause}`;
15
24
  },
16
25
  };
17
26
  //# sourceMappingURL=execute-plan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAY9D,MAAM,CAAC,MAAM,2BAA2B,GAAqB;IAC3D,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;QACxB,MAAM,CAAC,GAAG,MAA2C,CAAC;QACtD,IAAI,CAAC,EAAE,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CACrC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACvE,CAAC,MAAM,CAAC;YACT,OAAO,iBAAiB,SAAS,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,iBAAiB,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChD,8DAA8D;YAC9D,iEAAiE;YACjE,OAAO,IAAI,MAAM,mBAAmB,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,MAAM,gBAAgB,CAAC;IACpC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/execute-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAY9D,MAAM,CAAC,MAAM,2BAA2B,GAAqB;IAC3D,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;QACnC,MAAM,CAAC,GAAG,MAA2C,CAAC;QACtD,8DAA8D;QAC9D,+DAA+D;QAC/D,gEAAgE;QAChE,gEAAgE;QAChE,mEAAmE;QACnE,YAAY;QACZ,IAAI,CAAC,EAAE,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CACrC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACvE,CAAC,MAAM,CAAC;YACT,OAAO,IAAI,MAAM,mBAAmB,SAAS,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,iBAAiB,CAAC;QAC1F,CAAC;QACD,kEAAkE;QAClE,iEAAiE;QACjE,wEAAwE;QACxE,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC,CAAC,OAAO;YACX,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,MAAM,kBAAkB,aAAa,EAAE,CAAC;IACrD,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,sBAAsB,EAAE,gBAuBpC,CAAC"}
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,eAAO,MAAM,sBAAsB,EAAE,gBAwCpC,CAAC"}
@@ -1,21 +1,38 @@
1
1
  import { isNotApplicable } from '../not-applicable.js';
2
- import { countHighOrCritical } from '../severity.js';
2
+ import { countHighOrCritical, parseNarrativeFindings } from '../severity.js';
3
3
  export const reviewHeadlineTemplate = {
4
4
  compose({ report, status, taskBrief, runResult, task }) {
5
5
  const r = report;
6
6
  const reportInapplicable = !r || isNotApplicable(r);
7
- // 4.0.3+ Gap 2 fix: prefer report.findings (structured), fall back
8
- // to runResult.annotatedFindings (narrative-path canonical source).
7
+ // Source priority (4.0.3+, parallel to audit):
8
+ // 1. report.findings (structured)
9
+ // 2. runResult.annotatedFindings (annotator success path)
10
+ // 3. parseNarrativeFindings(runResult.output) (annotator error
11
+ // fallback — recover from implementer's `## Finding N:` blocks)
9
12
  const reportFindings = !reportInapplicable && Array.isArray(r?.findings) ? r.findings : [];
10
13
  const annotated = runResult?.annotatedFindings ?? [];
11
- const findings = reportFindings.length > 0 ? reportFindings : annotated;
12
- if (findings.length === 0) {
13
- return `[${status}] review: ${taskBrief}`;
14
+ let findings = reportFindings.length > 0
15
+ ? reportFindings
16
+ : annotated;
17
+ if (findings.length === 0 && typeof runResult?.output === 'string') {
18
+ const narrative = parseNarrativeFindings(runResult.output);
19
+ if (narrative.length > 0)
20
+ findings = narrative;
14
21
  }
15
22
  const blocking = countHighOrCritical(findings);
16
23
  const path = (!reportInapplicable && typeof r?.filePath === 'string' ? r.filePath : '')
17
24
  || task?.filePaths?.[0]
18
25
  || '';
26
+ // Mirror audit's gap-A fix: only collapse to "review completed"
27
+ // when we have no path AND no findings. With a path, always emit
28
+ // the structured form so a clean review still names the file:
29
+ // [ok] review packages/foo.ts: 0 findings (0 blocking)
30
+ // Previously this branch fell back to `${taskBrief}` which the
31
+ // brief compiler reduces to the route name, producing the
32
+ // operator-useless headline "[ok] review: review".
33
+ if (findings.length === 0 && !path) {
34
+ return `[${status}] review completed`;
35
+ }
19
36
  return `[${status}] review ${path}: ${findings.length} findings (${blocking} blocking)`;
20
37
  },
21
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;QACpD,MAAM,CAAC,GAAG,MAAkD,CAAC;QAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,mEAAmE;QACnE,oEAAoE;QACpE,MAAM,cAAc,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,EAAE,iBAAiB,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,MAAM,aAAa,SAAS,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAyC,CAAC,CAAC;QAChF,MAAM,IAAI,GACR,CAAC,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;eACvE,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;eAC9D,EAAE,CAAC;QAER,OAAO,IAAI,MAAM,YAAY,IAAI,KAAK,QAAQ,CAAC,MAAM,cAAc,QAAQ,YAAY,CAAC;IAC1F,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/review.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7E,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;QACpD,MAAM,CAAC,GAAG,MAAkD,CAAC;QAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,+CAA+C;QAC/C,oCAAoC;QACpC,4DAA4D;QAC5D,iEAAiE;QACjE,qEAAqE;QACrE,MAAM,cAAc,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,EAAE,iBAAiB,IAAI,EAAE,CAAC;QACrD,IAAI,QAAQ,GACV,cAAc,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAE,cAAgD;YACnD,CAAC,CAAE,SAA2C,CAAC;QACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnE,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,GAAG,SAAS,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,IAAI,GACR,CAAC,CAAC,kBAAkB,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;eACvE,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;eAC9D,EAAE,CAAC;QAER,gEAAgE;QAChE,iEAAiE;QACjE,8DAA8D;QAC9D,yDAAyD;QACzD,+DAA+D;QAC/D,0DAA0D;QAC1D,mDAAmD;QACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,MAAM,oBAAoB,CAAC;QACxC,CAAC;QAED,OAAO,IAAI,MAAM,YAAY,IAAI,KAAK,QAAQ,CAAC,MAAM,cAAc,QAAQ,YAAY,CAAC;IAC1F,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,eAAO,MAAM,sBAAsB,EAAE,gBAQpC,CAAC"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/reporting/headline-templates/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,eAAO,MAAM,sBAAsB,EAAE,gBA8BpC,CAAC"}
@@ -1,12 +1,29 @@
1
+ import { parseVerifyResults } from '../report-parser-slots/verify-report.js';
1
2
  import { isNotApplicable } from '../not-applicable.js';
2
3
  export const verifyHeadlineTemplate = {
3
- compose({ report, status }) {
4
- if (!report || isNotApplicable(report))
5
- return `[${status}] verify: no structured report available`;
4
+ compose({ report, status, runResult, task }) {
6
5
  const r = report;
7
- const items = Array.isArray(r.results) ? r.results : [];
8
- const passed = items.filter((x) => x?.pass).length;
9
- return `[${status}] verify: ${passed}/${items.length} pass`;
6
+ const reportInapplicable = !r || isNotApplicable(r);
7
+ // Source priority (parallel to audit + review):
8
+ // 1. report.results (structured path; the primary parser now handles
9
+ // both JSON and narrative).
10
+ // 2. parseVerifyResults(runResult.output) (defensive fallback when the
11
+ // structured parser ran a non-verify schema and stripped the
12
+ // narrative — same Gap-A pattern surfaced on review #2).
13
+ let results = !reportInapplicable && Array.isArray(r?.results) ? r.results : [];
14
+ if (results.length === 0 && typeof runResult?.output === 'string') {
15
+ const narrative = parseVerifyResults(runResult.output);
16
+ if (narrative.length > 0)
17
+ results = narrative;
18
+ }
19
+ const path = task?.filePaths?.[0] || '';
20
+ if (results.length === 0 && !path) {
21
+ return `[${status}] verify completed`;
22
+ }
23
+ const passed = results.filter((x) => x?.pass).length;
24
+ return path
25
+ ? `[${status}] verify ${path}: ${passed}/${results.length} pass`
26
+ : `[${status}] verify: ${passed}/${results.length} pass`;
10
27
  },
11
28
  };
12
29
  //# sourceMappingURL=verify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/verify.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;QACxB,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,MAAM,0CAA0C,CAAC;QACpG,MAAM,CAAC,GAAG,MAAsB,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;QACnD,OAAO,IAAI,MAAM,aAAa,MAAM,IAAI,KAAK,CAAC,MAAM,OAAO,CAAC;IAC9D,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/reporting/headline-templates/verify.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACzC,MAAM,CAAC,GAAG,MAAkD,CAAC;QAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAEpD,gDAAgD;QAChD,uEAAuE;QACvE,iCAAiC;QACjC,yEAAyE;QACzE,kEAAkE;QAClE,8DAA8D;QAC9D,IAAI,OAAO,GACT,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,GAAG,SAAS,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GACP,IAA6C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,IAAI,MAAM,oBAAoB,CAAC;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;QACrD,OAAO,IAAI;YACT,CAAC,CAAC,IAAI,MAAM,YAAY,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,OAAO;YAChE,CAAC,CAAC,IAAI,MAAM,aAAa,MAAM,IAAI,OAAO,CAAC,MAAM,OAAO,CAAC;IAC7D,CAAC;CACF,CAAC"}
@@ -21,6 +21,11 @@
21
21
  * relevant signal. Truncating mid-sentence (the prior bug) loses
22
22
  * that signal AND looks broken.
23
23
  *
24
+ * Sentence-end heuristic: a `.!?` followed by whitespace OR end-of-
25
+ * string. The match is non-greedy and ranges over `max` characters,
26
+ * so internal punctuation (version numbers like `v4.0.3`, decimals
27
+ * like `1.5`, filenames like `auth.ts`) does NOT block the scan.
28
+ *
24
29
  * @param s raw text (may be empty / whitespace-only)
25
30
  * @param max hard truncation cap when no sentence break is found.
26
31
  * 80 keeps headlines well under the typical 120-char
@@ -1 +1 @@
1
- {"version":3,"file":"headline-text.d.ts","sourceRoot":"","sources":["../../src/reporting/headline-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,CAOnE"}
1
+ {"version":3,"file":"headline-text.d.ts","sourceRoot":"","sources":["../../src/reporting/headline-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,CAkCnE"}
@@ -11,7 +11,6 @@
11
11
  * `firstSentenceOrTruncate` is the single helper composers use to
12
12
  * sanitize narrative text for headline display.
13
13
  */
14
- const SENTENCE_END = /^([^.!?\n]{1,80}[.!?])(\s|$)/;
15
14
  /**
16
15
  * Return the first sentence of `s`, or a hard-truncated form with
17
16
  * trailing ellipsis when no sentence boundary exists in the first
@@ -22,6 +21,11 @@ const SENTENCE_END = /^([^.!?\n]{1,80}[.!?])(\s|$)/;
22
21
  * relevant signal. Truncating mid-sentence (the prior bug) loses
23
22
  * that signal AND looks broken.
24
23
  *
24
+ * Sentence-end heuristic: a `.!?` followed by whitespace OR end-of-
25
+ * string. The match is non-greedy and ranges over `max` characters,
26
+ * so internal punctuation (version numbers like `v4.0.3`, decimals
27
+ * like `1.5`, filenames like `auth.ts`) does NOT block the scan.
28
+ *
25
29
  * @param s raw text (may be empty / whitespace-only)
26
30
  * @param max hard truncation cap when no sentence break is found.
27
31
  * 80 keeps headlines well under the typical 120-char
@@ -34,9 +38,36 @@ export function firstSentenceOrTruncate(s, max = 80) {
34
38
  const trimmed = s.trim();
35
39
  if (trimmed.length === 0)
36
40
  return '';
37
- const m = trimmed.match(SENTENCE_END);
38
- if (m)
39
- return m[1];
40
- return trimmed.length > max ? trimmed.slice(0, max - 1) + '…' : trimmed;
41
+ // F2 fix (audit, low): defend against invalid `max` values. Headlines
42
+ // are single-line operator-facing strings; a buggy caller passing
43
+ // `max=0`, negative, `NaN`, or `Infinity` shouldn't make the regex
44
+ // throw or overrun. Coerce to a sane bound: integer in [1, 2000].
45
+ const safeMax = Number.isFinite(max) && max >= 1
46
+ ? Math.min(Math.floor(max), 2000)
47
+ : 80;
48
+ // N2 fix (audit-2, low): collapse whitespace BEFORE sentence detection.
49
+ // Doing it after meant a sentence wrapping across a newline before
50
+ // its terminator (e.g., "Fixed auth\nissue. More") never matched the
51
+ // boundary regex and fell through to a generic truncate.
52
+ const oneLine = collapseNewlines(trimmed);
53
+ // N1 fix (audit-2, low): cap the captured sentence at exactly `safeMax`
54
+ // chars including the terminating punctuation. The leading run is
55
+ // therefore at most `safeMax - 1` chars. Skip sentence detection
56
+ // entirely when there's no room for even "X." (safeMax < 2).
57
+ // Lazy quantifier `{1,N}?` lets internal `.!?` characters pass
58
+ // through (version numbers, decimals, filenames) until we hit one
59
+ // followed by whitespace or end-of-string — the real sentence boundary.
60
+ if (safeMax >= 2) {
61
+ const sentenceEnd = new RegExp(`^(.{1,${safeMax - 1}}?[.!?])(\\s|$)`);
62
+ const m = oneLine.match(sentenceEnd);
63
+ if (m)
64
+ return m[1];
65
+ }
66
+ return oneLine.length > safeMax ? oneLine.slice(0, safeMax - 1) + '…' : oneLine;
67
+ }
68
+ /** Replace any whitespace run (including newlines, tabs, and CRs) with
69
+ * a single space so the returned headline stays on one line. */
70
+ function collapseNewlines(s) {
71
+ return s.replace(/\s+/g, ' ').trim();
41
72
  }
42
73
  //# sourceMappingURL=headline-text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"headline-text.js","sourceRoot":"","sources":["../../src/reporting/headline-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAS,EAAE,GAAG,GAAG,EAAE;IACzD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"headline-text.js","sourceRoot":"","sources":["../../src/reporting/headline-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAS,EAAE,GAAG,GAAG,EAAE;IACzD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,sEAAsE;IACtE,kEAAkE;IAClE,mEAAmE;IACnE,kEAAkE;IAClE,MAAM,OAAO,GACX,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QACjC,CAAC,CAAC,EAAE,CAAC;IAET,wEAAwE;IACxE,mEAAmE;IACnE,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE1C,wEAAwE;IACxE,kEAAkE;IAClE,iEAAiE;IACjE,6DAA6D;IAC7D,+DAA+D;IAC/D,kEAAkE;IAClE,wEAAwE;IACxE,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,SAAS,OAAO,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAClF,CAAC;AAED;iEACiE;AACjE,SAAS,gBAAgB,CAAC,CAAS;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC"}
@@ -6,5 +6,22 @@ export interface VerifyReport {
6
6
  evidence: string;
7
7
  }>;
8
8
  }
9
+ /**
10
+ * Extract verify checklist results from `## Finding N:` narrative blocks.
11
+ *
12
+ * The verify tool prompt instructs workers to emit results in this exact
13
+ * format (and explicitly NOT JSON):
14
+ *
15
+ * ## Finding 1: <title>
16
+ * - Severity: low|high|...
17
+ * - Item: <criterion text>
18
+ * - Result: PASS | FAIL
19
+ * - Evidence: <evidence>
20
+ *
21
+ * Returns one entry per finding block. `pass` is true iff the Result line
22
+ * normalizes to "pass" (case-insensitive). Missing labels become empty
23
+ * strings / false (matches the schema's required-field shape).
24
+ */
25
+ export declare function parseVerifyResults(output: string): VerifyReport['results'];
9
26
  export declare const verifyReportSchema: ReportSchema<VerifyReport>;
10
27
  //# sourceMappingURL=verify-report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify-report.d.ts","sourceRoot":"","sources":["../../../src/reporting/report-parser-slots/verify-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED,eAAO,MAAM,kBAAkB,EAAE,YAAY,CAAC,YAAY,CAMzD,CAAC"}
1
+ {"version":3,"file":"verify-report.d.ts","sourceRoot":"","sources":["../../../src/reporting/report-parser-slots/verify-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,GACb,YAAY,CAAC,SAAS,CAAC,CAezB;AAED,eAAO,MAAM,kBAAkB,EAAE,YAAY,CAAC,YAAY,CAezD,CAAC"}
@@ -1,9 +1,51 @@
1
+ /**
2
+ * Extract verify checklist results from `## Finding N:` narrative blocks.
3
+ *
4
+ * The verify tool prompt instructs workers to emit results in this exact
5
+ * format (and explicitly NOT JSON):
6
+ *
7
+ * ## Finding 1: <title>
8
+ * - Severity: low|high|...
9
+ * - Item: <criterion text>
10
+ * - Result: PASS | FAIL
11
+ * - Evidence: <evidence>
12
+ *
13
+ * Returns one entry per finding block. `pass` is true iff the Result line
14
+ * normalizes to "pass" (case-insensitive). Missing labels become empty
15
+ * strings / false (matches the schema's required-field shape).
16
+ */
17
+ export function parseVerifyResults(output) {
18
+ if (!output || typeof output !== 'string')
19
+ return [];
20
+ const blocks = output.split(/^##\s+Finding\s+\d+\s*:?/im);
21
+ const out = [];
22
+ for (let i = 1; i < blocks.length; i++) {
23
+ const block = blocks[i];
24
+ const itemMatch = block.match(/^\s*[-*]?\s*Item\s*:\s*(.+?)\s*$/im);
25
+ const resultMatch = block.match(/^\s*[-*]?\s*Result\s*:\s*(\w+)/im);
26
+ const evidenceMatch = block.match(/^\s*[-*]?\s*Evidence\s*:\s*([\s\S]+?)(?=\n\s*[-*]\s|\n##|$)/im);
27
+ const item = itemMatch ? itemMatch[1].trim() : '';
28
+ const pass = resultMatch ? /^pass$/i.test(resultMatch[1].trim()) : false;
29
+ const evidence = evidenceMatch ? evidenceMatch[1].trim() : '';
30
+ out.push({ item, pass, evidence });
31
+ }
32
+ return out;
33
+ }
1
34
  export const verifyReportSchema = {
2
35
  parse(text) {
36
+ // Primary path: JSON block (legacy; some workers may still emit it).
3
37
  const m = text.match(/```json\n([\s\S]+?)\n```/);
4
- if (!m)
5
- throw new Error('verify report missing JSON block');
6
- return JSON.parse(m[1]);
38
+ if (m)
39
+ return JSON.parse(m[1]);
40
+ // Narrative path (the actual prompt format — the verify prompt
41
+ // explicitly says "Do NOT emit JSON"). Recover one result per
42
+ // `## Finding N:` block. If neither path produced anything,
43
+ // throw so the parent falls back to notApplicable.
44
+ const narrative = parseVerifyResults(text);
45
+ if (narrative.length === 0) {
46
+ throw new Error('verify report missing JSON block and no `## Finding N:` narrative results');
47
+ }
48
+ return { results: narrative };
7
49
  },
8
50
  };
9
51
  //# sourceMappingURL=verify-report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify-report.js","sourceRoot":"","sources":["../../../src/reporting/report-parser-slots/verify-report.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,KAAK,CAAC,IAAY;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACjD,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"verify-report.js","sourceRoot":"","sources":["../../../src/reporting/report-parser-slots/verify-report.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc;IAEd,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC1D,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnG,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACzE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,KAAK,CAAC,IAAY;QAChB,qEAAqE;QACrE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACjD,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,+DAA+D;QAC/D,8DAA8D;QAC9D,4DAA4D;QAC5D,mDAAmD;QACnD,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAChC,CAAC;CACF,CAAC"}
@@ -37,4 +37,26 @@ export declare function countHighOrCritical(findings: ReadonlyArray<{
37
37
  export declare function bucketFindingsBySeverity(findings: ReadonlyArray<{
38
38
  severity?: unknown;
39
39
  }>): Record<FindingSeverity, number>;
40
+ /**
41
+ * Extract findings from an implementer's narrative `## Finding N:` output
42
+ * block-by-block. The audit / review / verify / debug / investigate
43
+ * tool prompts instruct workers to emit findings in this exact format:
44
+ *
45
+ * ## Finding 1: <title>
46
+ * - Severity: critical | high | medium | low
47
+ * - Location: file:line
48
+ * - Issue: ...
49
+ * - Suggestion: ...
50
+ *
51
+ * The annotator normally consumes that narrative and emits a structured
52
+ * JSON array. When the annotator errors (parse failure, exhaustion
53
+ * mid-block, etc.), this helper recovers the findings from the
54
+ * implementer's output so the headline + envelope still report the
55
+ * correct count. Returns one entry per finding with the parsed severity
56
+ * (lowercase canonical, or null if no severity line was found).
57
+ */
58
+ export declare function parseNarrativeFindings(output: string): Array<{
59
+ severity: FindingSeverity | null;
60
+ claim: string;
61
+ }>;
40
62
  //# sourceMappingURL=severity.d.ts.map