@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.
- package/README.md +11 -9
- package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
- package/dist/intake/brief-compiler-slots/delegate.js +8 -1
- package/dist/intake/brief-compiler-slots/delegate.js.map +1 -1
- package/dist/lifecycle/diff-tracker.d.ts +72 -0
- package/dist/lifecycle/diff-tracker.d.ts.map +1 -0
- package/dist/lifecycle/diff-tracker.js +316 -0
- package/dist/lifecycle/diff-tracker.js.map +1 -0
- package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts +1 -1
- package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/prepare-execution-context-handler.js +23 -1
- package/dist/lifecycle/handlers/prepare-execution-context-handler.js.map +1 -1
- package/dist/lifecycle/handlers/quality-chain-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/quality-chain-handlers.js +57 -6
- package/dist/lifecycle/handlers/quality-chain-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/review-diff-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/review-diff-handler.js +38 -12
- package/dist/lifecycle/handlers/review-diff-handler.js.map +1 -1
- package/dist/lifecycle/handlers/spec-chain-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/spec-chain-handlers.js +38 -10
- package/dist/lifecycle/handlers/spec-chain-handlers.js.map +1 -1
- package/dist/lifecycle/merge-stage-stats.d.ts +27 -0
- package/dist/lifecycle/merge-stage-stats.d.ts.map +1 -1
- package/dist/lifecycle/merge-stage-stats.js +56 -0
- package/dist/lifecycle/merge-stage-stats.js.map +1 -1
- package/dist/lifecycle/stage-plan-types.d.ts +15 -0
- package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +6 -0
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/reporting/headline-templates/audit.d.ts.map +1 -1
- package/dist/reporting/headline-templates/audit.js +17 -8
- package/dist/reporting/headline-templates/audit.js.map +1 -1
- package/dist/reporting/headline-templates/debug.d.ts +22 -3
- package/dist/reporting/headline-templates/debug.d.ts.map +1 -1
- package/dist/reporting/headline-templates/debug.js +38 -8
- package/dist/reporting/headline-templates/debug.js.map +1 -1
- package/dist/reporting/headline-templates/delegate.d.ts.map +1 -1
- package/dist/reporting/headline-templates/delegate.js +14 -3
- package/dist/reporting/headline-templates/delegate.js.map +1 -1
- package/dist/reporting/headline-templates/execute-plan.d.ts.map +1 -1
- package/dist/reporting/headline-templates/execute-plan.js +17 -8
- package/dist/reporting/headline-templates/execute-plan.js.map +1 -1
- package/dist/reporting/headline-templates/review.d.ts.map +1 -1
- package/dist/reporting/headline-templates/review.js +23 -6
- package/dist/reporting/headline-templates/review.js.map +1 -1
- package/dist/reporting/headline-templates/verify.d.ts.map +1 -1
- package/dist/reporting/headline-templates/verify.js +23 -6
- package/dist/reporting/headline-templates/verify.js.map +1 -1
- package/dist/reporting/headline-text.d.ts +5 -0
- package/dist/reporting/headline-text.d.ts.map +1 -1
- package/dist/reporting/headline-text.js +36 -5
- package/dist/reporting/headline-text.js.map +1 -1
- package/dist/reporting/report-parser-slots/verify-report.d.ts +17 -0
- package/dist/reporting/report-parser-slots/verify-report.d.ts.map +1 -1
- package/dist/reporting/report-parser-slots/verify-report.js +45 -3
- package/dist/reporting/report-parser-slots/verify-report.js.map +1 -1
- package/dist/reporting/severity.d.ts +22 -0
- package/dist/reporting/severity.d.ts.map +1 -1
- package/dist/reporting/severity.js +36 -0
- package/dist/reporting/severity.js.map +1 -1
- package/dist/review/annotator-output-parser.d.ts.map +1 -1
- package/dist/review/annotator-output-parser.js +94 -14
- package/dist/review/annotator-output-parser.js.map +1 -1
- package/dist/review/annotator-prompt-builder.d.ts +20 -0
- package/dist/review/annotator-prompt-builder.d.ts.map +1 -1
- package/dist/review/annotator-prompt-builder.js +52 -1
- package/dist/review/annotator-prompt-builder.js.map +1 -1
- package/dist/review/reviewer-engine.d.ts +14 -0
- package/dist/review/reviewer-engine.d.ts.map +1 -1
- package/dist/review/reviewer-engine.js.map +1 -1
- package/dist/review/reviewer-output-parser.d.ts.map +1 -1
- package/dist/review/reviewer-output-parser.js +171 -16
- package/dist/review/reviewer-output-parser.js.map +1 -1
- package/dist/review/reviewer-prompt-builder.d.ts +4 -12
- package/dist/review/reviewer-prompt-builder.d.ts.map +1 -1
- package/dist/review/reviewer-prompt-builder.js.map +1 -1
- package/dist/review/templates/diff-review.d.ts +8 -0
- package/dist/review/templates/diff-review.d.ts.map +1 -1
- package/dist/review/templates/diff-review.js +34 -2
- package/dist/review/templates/diff-review.js.map +1 -1
- package/dist/review/templates/finding-criteria.d.ts +39 -0
- package/dist/review/templates/finding-criteria.d.ts.map +1 -0
- package/dist/review/templates/finding-criteria.js +80 -0
- package/dist/review/templates/finding-criteria.js.map +1 -0
- package/dist/review/templates/quality-review-artifact.d.ts +13 -0
- package/dist/review/templates/quality-review-artifact.d.ts.map +1 -1
- package/dist/review/templates/quality-review-artifact.js +41 -3
- package/dist/review/templates/quality-review-artifact.js.map +1 -1
- package/dist/review/templates/shared.d.ts +22 -5
- package/dist/review/templates/shared.d.ts.map +1 -1
- package/dist/review/templates/spec-review.d.ts +15 -0
- package/dist/review/templates/spec-review.d.ts.map +1 -1
- package/dist/review/templates/spec-review.js +43 -3
- package/dist/review/templates/spec-review.js.map +1 -1
- package/dist/tools/audit/tool-config.d.ts.map +1 -1
- package/dist/tools/audit/tool-config.js +23 -6
- package/dist/tools/audit/tool-config.js.map +1 -1
- package/dist/tools/debug/tool-config.d.ts.map +1 -1
- package/dist/tools/debug/tool-config.js +17 -4
- package/dist/tools/debug/tool-config.js.map +1 -1
- package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
- package/dist/tools/execute-plan/tool-config.js +5 -1
- package/dist/tools/execute-plan/tool-config.js.map +1 -1
- package/dist/tools/investigate/tool-config.d.ts +13 -1
- package/dist/tools/investigate/tool-config.d.ts.map +1 -1
- package/dist/tools/investigate/tool-config.js +34 -4
- package/dist/tools/investigate/tool-config.js.map +1 -1
- package/dist/tools/retry/tool-config.d.ts.map +1 -1
- package/dist/tools/retry/tool-config.js +27 -4
- package/dist/tools/retry/tool-config.js.map +1 -1
- package/dist/tools/review/tool-config.d.ts.map +1 -1
- package/dist/tools/review/tool-config.js +19 -4
- package/dist/tools/review/tool-config.js.map +1 -1
- package/dist/tools/verify/tool-config.d.ts.map +1 -1
- package/dist/tools/verify/tool-config.js +17 -4
- package/dist/tools/verify/tool-config.js.map +1 -1
- package/package.json +1 -1
- package/dist/intake/brief-compiler-slots/investigate.d.ts +0 -26
- package/dist/intake/brief-compiler-slots/investigate.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/investigate.js +0 -42
- package/dist/intake/brief-compiler-slots/investigate.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"severity.d.ts","sourceRoot":"","sources":["../../src/reporting/severity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAIrE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAItE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,CAO3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC9C,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAOjC"}
|
|
1
|
+
{"version":3,"file":"severity.d.ts","sourceRoot":"","sources":["../../src/reporting/severity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAIrE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAItE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,CAO3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC9C,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAOjC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GACb,KAAK,CAAC;IAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB5D"}
|
|
@@ -54,4 +54,40 @@ export function bucketFindingsBySeverity(findings) {
|
|
|
54
54
|
}
|
|
55
55
|
return buckets;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Extract findings from an implementer's narrative `## Finding N:` output
|
|
59
|
+
* block-by-block. The audit / review / verify / debug / investigate
|
|
60
|
+
* tool prompts instruct workers to emit findings in this exact format:
|
|
61
|
+
*
|
|
62
|
+
* ## Finding 1: <title>
|
|
63
|
+
* - Severity: critical | high | medium | low
|
|
64
|
+
* - Location: file:line
|
|
65
|
+
* - Issue: ...
|
|
66
|
+
* - Suggestion: ...
|
|
67
|
+
*
|
|
68
|
+
* The annotator normally consumes that narrative and emits a structured
|
|
69
|
+
* JSON array. When the annotator errors (parse failure, exhaustion
|
|
70
|
+
* mid-block, etc.), this helper recovers the findings from the
|
|
71
|
+
* implementer's output so the headline + envelope still report the
|
|
72
|
+
* correct count. Returns one entry per finding with the parsed severity
|
|
73
|
+
* (lowercase canonical, or null if no severity line was found).
|
|
74
|
+
*/
|
|
75
|
+
export function parseNarrativeFindings(output) {
|
|
76
|
+
if (!output || typeof output !== 'string')
|
|
77
|
+
return [];
|
|
78
|
+
const findings = [];
|
|
79
|
+
// Split on `## Finding N:` headings (case-insensitive, lenient
|
|
80
|
+
// whitespace + colon). Block 0 is everything BEFORE the first
|
|
81
|
+
// heading — discard.
|
|
82
|
+
const blocks = output.split(/^##\s+Finding\s+\d+\s*:?/im);
|
|
83
|
+
for (let i = 1; i < blocks.length; i++) {
|
|
84
|
+
const block = blocks[i];
|
|
85
|
+
const titleMatch = block.match(/^[^\n]+/);
|
|
86
|
+
const claim = titleMatch ? titleMatch[0].trim() : '';
|
|
87
|
+
const sevMatch = block.match(/^\s*[-*]?\s*severity\s*:\s*(\w+)/im);
|
|
88
|
+
const severity = sevMatch ? normalizeSeverity(sevMatch[1]) : null;
|
|
89
|
+
findings.push({ severity, claim });
|
|
90
|
+
}
|
|
91
|
+
return findings;
|
|
92
|
+
}
|
|
57
93
|
//# sourceMappingURL=severity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"severity.js","sourceRoot":"","sources":["../../src/reporting/severity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAqB,CAAC;IACvD,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA+C;IACjF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU;YAAE,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA+C;IAE/C,MAAM,OAAO,GAAoC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7F,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"severity.js","sourceRoot":"","sources":["../../src/reporting/severity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAqB,CAAC;IACvD,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA+C;IACjF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU;YAAE,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA+C;IAE/C,MAAM,OAAO,GAAoC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7F,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAc;IAEd,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,QAAQ,GAA+D,EAAE,CAAC;IAChF,+DAA+D;IAC/D,8DAA8D;IAC9D,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC1D,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,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotator-output-parser.d.ts","sourceRoot":"","sources":["../../src/review/annotator-output-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IAC/B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"annotator-output-parser.d.ts","sourceRoot":"","sources":["../../src/review/annotator-output-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IAC/B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA4ED,qBAAa,qBAAqB;IAChC,KAAK,CAAC,KAAK,EAAE;QAAE,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB;CAUnG"}
|
|
@@ -1,24 +1,104 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Tool sweep #12 follow-up: same lenient JSON-array extraction as
|
|
3
|
+
* the reviewer-output-parser. Pre-fix this required a fenced
|
|
4
|
+
* ```json ... ``` block. Some models emit:
|
|
5
|
+
* - Bare JSON arrays (no fence)
|
|
6
|
+
* - Fenced with no language tag (just ``` ... ```)
|
|
7
|
+
* - JSON arrays embedded in surrounding prose
|
|
8
|
+
* — all of which were dropped, producing `verdict: 'error'` even when
|
|
9
|
+
* the annotator did its job correctly. Caused verify's wire telemetry
|
|
10
|
+
* to lose all PASS findings (annotated 0 instead of 4).
|
|
11
|
+
*
|
|
12
|
+
* Strategy: try fenced first (legacy), then fenced-without-language-tag,
|
|
13
|
+
* then any balanced `[...]` containing finding-shaped objects in the
|
|
14
|
+
* raw text. Same balanced-walking approach as findFirstParseableJsonVerdict
|
|
15
|
+
* in reviewer-output-parser.ts.
|
|
16
|
+
*/
|
|
17
|
+
function extractFindingsArray(text) {
|
|
18
|
+
// Pass 1: ```json ... ``` (legacy).
|
|
19
|
+
const fenced1 = text.match(/```json\s*\n([\s\S]*?)\n```/i);
|
|
20
|
+
const r1 = fenced1 ? tryParseArray(fenced1[1]) : null;
|
|
21
|
+
if (r1)
|
|
22
|
+
return r1;
|
|
23
|
+
// Pass 2: ``` ... ``` (no language tag) — some models drop the json hint.
|
|
24
|
+
const fenced2 = text.match(/```\s*\n([\s\S]*?)\n```/);
|
|
25
|
+
const r2 = fenced2 ? tryParseArray(fenced2[1]) : null;
|
|
26
|
+
if (r2)
|
|
27
|
+
return r2;
|
|
28
|
+
// Pass 3: bare `[...]` array somewhere in the text. Walk every `[`
|
|
29
|
+
// left-to-right, find its matching `]` via balanced bracket counting
|
|
30
|
+
// (string-literal aware), try to parse each candidate.
|
|
31
|
+
for (let start = text.indexOf('['); start !== -1; start = text.indexOf('[', start + 1)) {
|
|
32
|
+
const end = matchingBracket(text, start);
|
|
33
|
+
if (end === -1)
|
|
34
|
+
continue;
|
|
35
|
+
const candidate = text.slice(start, end + 1);
|
|
36
|
+
const r = tryParseArray(candidate);
|
|
37
|
+
if (r)
|
|
38
|
+
return r;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
function tryParseArray(jsonText) {
|
|
43
|
+
try {
|
|
44
|
+
const parsed = JSON.parse(jsonText);
|
|
45
|
+
if (Array.isArray(parsed))
|
|
46
|
+
return parsed;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
/* not parseable */
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Return the index of the `]` that balances the `[` at `openPos`,
|
|
55
|
+
* accounting for nested brackets and string literals.
|
|
56
|
+
*/
|
|
57
|
+
function matchingBracket(text, openPos) {
|
|
58
|
+
let depth = 0;
|
|
59
|
+
let inString = false;
|
|
60
|
+
let escape = false;
|
|
61
|
+
for (let i = openPos; i < text.length; i++) {
|
|
62
|
+
const ch = text[i];
|
|
63
|
+
if (inString) {
|
|
64
|
+
if (escape) {
|
|
65
|
+
escape = false;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (ch === '\\') {
|
|
69
|
+
escape = true;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (ch === '"') {
|
|
73
|
+
inString = false;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (ch === '"') {
|
|
79
|
+
inString = true;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (ch === '[')
|
|
83
|
+
depth++;
|
|
84
|
+
else if (ch === ']') {
|
|
85
|
+
depth--;
|
|
86
|
+
if (depth === 0)
|
|
87
|
+
return i;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return -1;
|
|
4
91
|
}
|
|
5
92
|
export class AnnotatorOutputParser {
|
|
6
93
|
parse(input) {
|
|
7
94
|
if (!input.finalAssistantText) {
|
|
8
95
|
return { verdict: 'error', annotatedFindings: [], errorReason: input.errorCode ?? 'no output' };
|
|
9
96
|
}
|
|
10
|
-
const
|
|
11
|
-
if (
|
|
12
|
-
return { verdict: 'error', annotatedFindings: [], errorReason: 'no
|
|
13
|
-
try {
|
|
14
|
-
const findings = JSON.parse(json);
|
|
15
|
-
if (!Array.isArray(findings))
|
|
16
|
-
return { verdict: 'error', annotatedFindings: [], errorReason: 'expected JSON array' };
|
|
17
|
-
return { verdict: 'annotated', annotatedFindings: findings };
|
|
18
|
-
}
|
|
19
|
-
catch (e) {
|
|
20
|
-
return { verdict: 'error', annotatedFindings: [], errorReason: `JSON parse failed: ${e.message}` };
|
|
97
|
+
const findings = extractFindingsArray(input.finalAssistantText);
|
|
98
|
+
if (findings === null) {
|
|
99
|
+
return { verdict: 'error', annotatedFindings: [], errorReason: 'no JSON array found in annotator output' };
|
|
21
100
|
}
|
|
101
|
+
return { verdict: 'annotated', annotatedFindings: findings };
|
|
22
102
|
}
|
|
23
103
|
}
|
|
24
104
|
//# sourceMappingURL=annotator-output-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotator-output-parser.js","sourceRoot":"","sources":["../../src/review/annotator-output-parser.ts"],"names":[],"mappings":"AAQA,SAAS,
|
|
1
|
+
{"version":3,"file":"annotator-output-parser.js","sourceRoot":"","sources":["../../src/review/annotator-output-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,25 @@ export declare class AnnotatorPromptBuilder {
|
|
|
5
5
|
constructor(templates: Record<AnnotatorRoute, AnnotatorTemplate>);
|
|
6
6
|
build(route: AnnotatorRoute, ctx: AnnotatorPromptContext): string;
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Trim the implementer brief down to the "what was asked" essentials
|
|
10
|
+
* before sending to the annotator. The annotator does NOT need the
|
|
11
|
+
* finding-format spec (it has its own format spec via ANNOTATOR_RUBRIC)
|
|
12
|
+
* or the delta-mode instructions. Sending the full brief wastes
|
|
13
|
+
* 1-3KB context per call and mildly distracts the model.
|
|
14
|
+
*
|
|
15
|
+
* Two prompt shapes covered:
|
|
16
|
+
*
|
|
17
|
+
* 1. **Goal-first** (audit / review / verify / debug):
|
|
18
|
+
* `<goal + scope>\n\n<format spec at the END>` — slice off the
|
|
19
|
+
* format spec, keep everything before it.
|
|
20
|
+
*
|
|
21
|
+
* 2. **Spec-first** (investigate): the brief opens with the
|
|
22
|
+
* structured-format instructions and ends with `Question: <text>`.
|
|
23
|
+
* Pull the question line out as the compact brief.
|
|
24
|
+
*
|
|
25
|
+
* If neither shape applies, the brief is returned unchanged.
|
|
26
|
+
*/
|
|
27
|
+
export declare function trimBriefForAnnotator(brief: string): string;
|
|
8
28
|
export declare function assembleAnnotatorPrompt(template: AnnotatorTemplate, ctx: AnnotatorPromptContext): string;
|
|
9
29
|
//# sourceMappingURL=annotator-prompt-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotator-prompt-builder.d.ts","sourceRoot":"","sources":["../../src/review/annotator-prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAExH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAErF,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAG9D,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,sBAAsB,GAAG,MAAM;CAGlE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,sBAAsB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"annotator-prompt-builder.d.ts","sourceRoot":"","sources":["../../src/review/annotator-prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAExH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAErF,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAG9D,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,sBAAsB,GAAG,MAAM;CAGlE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2B3D;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAoBxG"}
|
|
@@ -8,12 +8,63 @@ export class AnnotatorPromptBuilder {
|
|
|
8
8
|
return assembleAnnotatorPrompt(this.templates[route], ctx);
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Trim the implementer brief down to the "what was asked" essentials
|
|
13
|
+
* before sending to the annotator. The annotator does NOT need the
|
|
14
|
+
* finding-format spec (it has its own format spec via ANNOTATOR_RUBRIC)
|
|
15
|
+
* or the delta-mode instructions. Sending the full brief wastes
|
|
16
|
+
* 1-3KB context per call and mildly distracts the model.
|
|
17
|
+
*
|
|
18
|
+
* Two prompt shapes covered:
|
|
19
|
+
*
|
|
20
|
+
* 1. **Goal-first** (audit / review / verify / debug):
|
|
21
|
+
* `<goal + scope>\n\n<format spec at the END>` — slice off the
|
|
22
|
+
* format spec, keep everything before it.
|
|
23
|
+
*
|
|
24
|
+
* 2. **Spec-first** (investigate): the brief opens with the
|
|
25
|
+
* structured-format instructions and ends with `Question: <text>`.
|
|
26
|
+
* Pull the question line out as the compact brief.
|
|
27
|
+
*
|
|
28
|
+
* If neither shape applies, the brief is returned unchanged.
|
|
29
|
+
*/
|
|
30
|
+
export function trimBriefForAnnotator(brief) {
|
|
31
|
+
if (typeof brief !== 'string' || brief.length === 0)
|
|
32
|
+
return brief;
|
|
33
|
+
// Shape 2 (investigate): pull the `Question: ...` line out.
|
|
34
|
+
const questionMatch = brief.match(/^\s*Question:\s+(.+)$/m);
|
|
35
|
+
if (questionMatch) {
|
|
36
|
+
return `Question: ${questionMatch[1].trim()}`;
|
|
37
|
+
}
|
|
38
|
+
// Shape 1 (audit / review / verify / debug): slice before the first
|
|
39
|
+
// format-spec marker. Each per-tool implementer prompt structures
|
|
40
|
+
// the goal at the top, format spec at the bottom — so this gives
|
|
41
|
+
// the annotator the goal + scope without the duplicated format
|
|
42
|
+
// instructions.
|
|
43
|
+
const markers = [
|
|
44
|
+
/\nProduce a narrative .* report\./i,
|
|
45
|
+
/\nFor each checklist item, use this EXACT/i,
|
|
46
|
+
/\nUse hypothesis-driven debugging\./i,
|
|
47
|
+
/\n## Finding 1:/i,
|
|
48
|
+
/\nUse this EXACT per-finding format/i,
|
|
49
|
+
];
|
|
50
|
+
let cut = brief.length;
|
|
51
|
+
for (const m of markers) {
|
|
52
|
+
const idx = brief.search(m);
|
|
53
|
+
if (idx >= 0 && idx < cut)
|
|
54
|
+
cut = idx;
|
|
55
|
+
}
|
|
56
|
+
return brief.slice(0, cut).trim();
|
|
57
|
+
}
|
|
11
58
|
export function assembleAnnotatorPrompt(template, ctx) {
|
|
59
|
+
// Tool sweep #11: trim the brief — the format-spec section is
|
|
60
|
+
// duplicated by ANNOTATOR_RUBRIC below, so sending it again is
|
|
61
|
+
// redundant + costly.
|
|
62
|
+
const compactBrief = trimBriefForAnnotator(ctx.brief);
|
|
12
63
|
return `You are reviewing a ${template.role} produced by a worker.
|
|
13
64
|
|
|
14
65
|
The user requested a ${template.role}. The brief was:
|
|
15
66
|
|
|
16
|
-
${
|
|
67
|
+
${compactBrief}
|
|
17
68
|
|
|
18
69
|
## On-brief check (per finding)
|
|
19
70
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotator-prompt-builder.js","sourceRoot":"","sources":["../../src/review/annotator-prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuD,MAAM,iCAAiC,CAAC;AAIxH,MAAM,OAAO,sBAAsB;IAEvB;IADV,YACU,SAAoD;QAApD,cAAS,GAAT,SAAS,CAA2C;IAC3D,CAAC;IAEJ,KAAK,CAAC,KAAqB,EAAE,GAA2B;QACtD,OAAO,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA2B,EAAE,GAA2B;IAC9F,OAAO,uBAAuB,QAAQ,CAAC,IAAI;;uBAEtB,QAAQ,CAAC,IAAI;;EAElC,
|
|
1
|
+
{"version":3,"file":"annotator-prompt-builder.js","sourceRoot":"","sources":["../../src/review/annotator-prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuD,MAAM,iCAAiC,CAAC;AAIxH,MAAM,OAAO,sBAAsB;IAEvB;IADV,YACU,SAAoD;QAApD,cAAS,GAAT,SAAS,CAA2C;IAC3D,CAAC;IAEJ,KAAK,CAAC,KAAqB,EAAE,GAA2B;QACtD,OAAO,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAElE,4DAA4D;IAC5D,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5D,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,oEAAoE;IACpE,kEAAkE;IAClE,iEAAiE;IACjE,+DAA+D;IAC/D,gBAAgB;IAChB,MAAM,OAAO,GAAG;QACd,oCAAoC;QACpC,4CAA4C;QAC5C,sCAAsC;QACtC,kBAAkB;QAClB,sCAAsC;KACvC,CAAC;IACF,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG;YAAE,GAAG,GAAG,GAAG,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA2B,EAAE,GAA2B;IAC9F,8DAA8D;IAC9D,+DAA+D;IAC/D,sBAAsB;IACtB,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,uBAAuB,QAAQ,CAAC,IAAI;;uBAEtB,QAAQ,CAAC,IAAI;;EAElC,YAAY;;;;EAIZ,QAAQ,CAAC,YAAY;;;;EAIrB,GAAG,CAAC,YAAY;;EAEhB,gBAAgB,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -21,6 +21,20 @@ export interface ReviewerInput {
|
|
|
21
21
|
fileContents?: Record<string, string>;
|
|
22
22
|
toolCallLog?: string[];
|
|
23
23
|
filesWritten?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Cumulative unified diff of every change made since task start.
|
|
26
|
+
* Tool sweep #6: reviewer prompts include this so the LLM can
|
|
27
|
+
* judge work against actual code changes, not the worker's text
|
|
28
|
+
* claim. Empty when no files changed (or read-only routes).
|
|
29
|
+
*/
|
|
30
|
+
diff?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Concrete concerns raised by previous reviewer rounds in this
|
|
33
|
+
* chain (round 1 = empty, round N+1 = concerns from round 1..N).
|
|
34
|
+
* Lets the reviewer verify the rework addressed prior issues
|
|
35
|
+
* without re-deriving them.
|
|
36
|
+
*/
|
|
37
|
+
priorConcerns?: string[];
|
|
24
38
|
abortSignal?: AbortSignal;
|
|
25
39
|
deadlineMs?: number;
|
|
26
40
|
/** Forwarded to RunInput so the running-headline sink + verbose stderr
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-engine.d.ts","sourceRoot":"","sources":["../../src/review/reviewer-engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reviewer-engine.d.ts","sourceRoot":"","sources":["../../src/review/reviewer-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-engine.js","sourceRoot":"","sources":["../../src/review/reviewer-engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAA0D,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAO/I,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"reviewer-engine.js","sourceRoot":"","sources":["../../src/review/reviewer-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-output-parser.d.ts","sourceRoot":"","sources":["../../src/review/reviewer-output-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"reviewer-output-parser.d.ts","sourceRoot":"","sources":["../../src/review/reviewer-output-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAwKD,qBAAa,oBAAoB;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAkCxC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB;CAgBjD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAC5B"}
|
|
@@ -2,20 +2,164 @@ function extractSummarySection(text) {
|
|
|
2
2
|
const match = text.match(/##\s*Summary\s*\n([\s\S]*?)(?=\n##\s|$)/i);
|
|
3
3
|
return match ? match[1].trim() : null;
|
|
4
4
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Extract the verdict from a JSON block in the reviewer's output.
|
|
7
|
+
* Two acceptable shapes:
|
|
8
|
+
* 1. Fenced: ```json {"verdict":"...","concerns":[...]} ```
|
|
9
|
+
* 2. Bare: {"verdict":"...","concerns":[...]} (no fence)
|
|
10
|
+
*
|
|
11
|
+
* Some models freelance the format and skip the ```json``` wrapper —
|
|
12
|
+
* the fenced-only parser would then drop a perfectly valid verdict
|
|
13
|
+
* and fall through to the markdown-section path, which also fails
|
|
14
|
+
* (since the JSON template doesn't emit `## Summary`), causing the
|
|
15
|
+
* spurious "missing structured verdict" meta-concern that triggered
|
|
16
|
+
* spec_rework spirals.
|
|
17
|
+
*
|
|
18
|
+
* Recognized verdict values (case-insensitive):
|
|
19
|
+
* - "approved" / "approve" → ReviewerVerdict.approved
|
|
20
|
+
* - "changes_required" / "changes-required" → changes_required
|
|
21
|
+
* - "concerns" → mapped to approved (parser convention: concerns
|
|
22
|
+
* ≠ blocking; use changes_required for blocking).
|
|
23
|
+
*/
|
|
24
|
+
function extractJsonVerdict(text) {
|
|
25
|
+
// Pass 1: fenced ```json ... ``` block.
|
|
26
|
+
const fenced = text.match(/```json\s*\n([\s\S]*?)\n```/i);
|
|
27
|
+
const fencedVerdict = fenced ? tryReadVerdict(fenced[1]) : null;
|
|
28
|
+
if (fencedVerdict)
|
|
29
|
+
return fencedVerdict;
|
|
30
|
+
// Pass 2: scan for the first balanced `{...}` that parses as a JSON
|
|
31
|
+
// object containing a "verdict" key. Pre-fix the parser only tried
|
|
32
|
+
// FIRST `{` to LAST `}` — that fails when the text has prose with
|
|
33
|
+
// its own `{...}` (e.g., "the diff matches {file} criteria...
|
|
34
|
+
// {"verdict":"approved",...}"). We now walk each `{` left-to-right
|
|
35
|
+
// and find its matching `}` via balanced-brace counting (string-
|
|
36
|
+
// literal aware) so prose braces and JSON braces don't collide.
|
|
37
|
+
return findFirstParseableJsonVerdict(text);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Walk every `{` in `text` from left to right, find its balanced `}`
|
|
41
|
+
* (respecting strings + escapes), and try to parse the slice as JSON
|
|
42
|
+
* with a "verdict" field. Returns the first successful match, or null.
|
|
43
|
+
*/
|
|
44
|
+
function findFirstParseableJsonVerdict(text) {
|
|
45
|
+
const len = text.length;
|
|
46
|
+
for (let start = text.indexOf('{'); start !== -1; start = text.indexOf('{', start + 1)) {
|
|
47
|
+
const end = matchingBrace(text, start);
|
|
48
|
+
if (end === -1)
|
|
49
|
+
continue;
|
|
50
|
+
const candidate = text.slice(start, end + 1);
|
|
51
|
+
if (!/"verdict"\s*:/i.test(candidate))
|
|
52
|
+
continue;
|
|
53
|
+
const v = tryReadVerdict(candidate);
|
|
54
|
+
if (v)
|
|
55
|
+
return v;
|
|
56
|
+
// Bound the scan: don't try crazy-large prefixes from the same
|
|
57
|
+
// position. matchingBrace already returns at most `len`.
|
|
58
|
+
if (end >= len - 1)
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Return the index of the `}` that balances the `{` at `openPos`,
|
|
65
|
+
* accounting for nested objects and string literals. Returns -1 when
|
|
66
|
+
* unbalanced (don't try to parse).
|
|
67
|
+
*/
|
|
68
|
+
function matchingBrace(text, openPos) {
|
|
69
|
+
let depth = 0;
|
|
70
|
+
let inString = false;
|
|
71
|
+
let escape = false;
|
|
72
|
+
for (let i = openPos; i < text.length; i++) {
|
|
73
|
+
const ch = text[i];
|
|
74
|
+
if (inString) {
|
|
75
|
+
if (escape) {
|
|
76
|
+
escape = false;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (ch === '\\') {
|
|
80
|
+
escape = true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (ch === '"') {
|
|
84
|
+
inString = false;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (ch === '"') {
|
|
90
|
+
inString = true;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (ch === '{')
|
|
94
|
+
depth++;
|
|
95
|
+
else if (ch === '}') {
|
|
96
|
+
depth--;
|
|
97
|
+
if (depth === 0)
|
|
98
|
+
return i;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return -1;
|
|
102
|
+
}
|
|
103
|
+
function readConcernsFromJsonText(text) {
|
|
104
|
+
const tryParse = (s) => {
|
|
9
105
|
try {
|
|
10
|
-
const
|
|
11
|
-
if (Array.isArray(
|
|
12
|
-
concerns.
|
|
106
|
+
const obj = JSON.parse(s);
|
|
107
|
+
if (Array.isArray(obj.concerns)) {
|
|
108
|
+
return obj.concerns.filter((x) => typeof x === 'string');
|
|
13
109
|
}
|
|
14
110
|
}
|
|
15
111
|
catch {
|
|
16
|
-
|
|
112
|
+
/* not parseable */
|
|
17
113
|
}
|
|
114
|
+
return [];
|
|
115
|
+
};
|
|
116
|
+
const fenced = text.match(/```json\s*\n([\s\S]*?)\n```/i);
|
|
117
|
+
if (fenced) {
|
|
118
|
+
const out = tryParse(fenced[1]);
|
|
119
|
+
if (out.length > 0)
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
// Bare JSON fallback — same balanced-brace walk as extractJsonVerdict
|
|
123
|
+
// so the two helpers stay in sync. Pre-fix used a fragile first-`{`-
|
|
124
|
+
// to-last-`}` slice that broke when prose contained `{}`.
|
|
125
|
+
for (let start = text.indexOf('{'); start !== -1; start = text.indexOf('{', start + 1)) {
|
|
126
|
+
const end = matchingBrace(text, start);
|
|
127
|
+
if (end === -1)
|
|
128
|
+
continue;
|
|
129
|
+
const candidate = text.slice(start, end + 1);
|
|
130
|
+
if (!/"concerns"\s*:/i.test(candidate))
|
|
131
|
+
continue;
|
|
132
|
+
const out = tryParse(candidate);
|
|
133
|
+
if (out.length > 0)
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
function tryReadVerdict(jsonText) {
|
|
139
|
+
let parsed;
|
|
140
|
+
try {
|
|
141
|
+
parsed = JSON.parse(jsonText);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return null;
|
|
18
145
|
}
|
|
146
|
+
const obj = parsed;
|
|
147
|
+
const v = typeof obj.verdict === 'string' ? obj.verdict.toLowerCase().trim() : '';
|
|
148
|
+
if (v === 'approved' || v === 'approve')
|
|
149
|
+
return 'approved';
|
|
150
|
+
if (v === 'changes_required' || v === 'changes-required')
|
|
151
|
+
return 'changes_required';
|
|
152
|
+
if (v === 'concerns')
|
|
153
|
+
return 'approved';
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
function extractDeviationsAndUnresolved(text) {
|
|
157
|
+
const concerns = [];
|
|
158
|
+
// Try fenced ```json``` first, then bare JSON (same lenient pattern
|
|
159
|
+
// as extractJsonVerdict — keeps both helpers in sync so a parser
|
|
160
|
+
// that recognizes the verdict also recognizes the concerns).
|
|
161
|
+
const fromJson = readConcernsFromJsonText(text);
|
|
162
|
+
concerns.push(...fromJson);
|
|
19
163
|
const devMatch = text.match(/##\s*Deviations from brief\s*\n([\s\S]*?)(?=\n##\s|$)/i);
|
|
20
164
|
if (devMatch) {
|
|
21
165
|
const lines = devMatch[1].trim().split('\n').filter(l => l.trim().startsWith('-'));
|
|
@@ -40,19 +184,30 @@ function extractDiffVerdict(text) {
|
|
|
40
184
|
}
|
|
41
185
|
export class ReviewerOutputParser {
|
|
42
186
|
parse(text) {
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
// `
|
|
48
|
-
//
|
|
49
|
-
|
|
187
|
+
// Source priority:
|
|
188
|
+
// 1. JSON block ```json ... ``` containing {"verdict":"...","concerns":[...]}
|
|
189
|
+
// — what spec/quality templates actually instruct the LLM to emit
|
|
190
|
+
// (tool sweep #6 rewrite). The pre-fix parser only looked at
|
|
191
|
+
// `## Summary` markdown sections, defaulted every JSON-only
|
|
192
|
+
// response to `changes_required` with a meta-concern, and
|
|
193
|
+
// triggered exactly the spec_rework spirals we're trying to
|
|
194
|
+
// eliminate.
|
|
195
|
+
// 2. `## Summary` markdown section (back-compat for any reviewer
|
|
196
|
+
// that still emits the older format).
|
|
197
|
+
// 3. Fall through to changes_required with a meta-concern when
|
|
198
|
+
// neither path produced a verdict — keeps malformed output
|
|
199
|
+
// from crashing the run.
|
|
200
|
+
const jsonVerdict = extractJsonVerdict(text);
|
|
50
201
|
const concerns = extractDeviationsAndUnresolved(text);
|
|
202
|
+
if (jsonVerdict) {
|
|
203
|
+
return { verdict: jsonVerdict, concerns };
|
|
204
|
+
}
|
|
205
|
+
const summary = extractSummarySection(text);
|
|
51
206
|
if (!summary) {
|
|
52
207
|
return {
|
|
53
208
|
verdict: 'changes_required',
|
|
54
209
|
concerns: [
|
|
55
|
-
'reviewer output missing `## Summary` section — defaulting
|
|
210
|
+
'reviewer output missing structured verdict (no JSON block, no `## Summary` section) — defaulting to changes_required',
|
|
56
211
|
...concerns,
|
|
57
212
|
],
|
|
58
213
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-output-parser.js","sourceRoot":"","sources":["../../src/review/reviewer-output-parser.ts"],"names":[],"mappings":"AAYA,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAY;IAClD,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"reviewer-output-parser.js","sourceRoot":"","sources":["../../src/review/reviewer-output-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ReviewTemplate } from './templates/shared.js';
|
|
1
|
+
import type { ReviewTemplate, ReviewTemplateContext } from './templates/shared.js';
|
|
2
2
|
export type QualityReviewRoute = 'delegate' | 'execute-plan' | 'audit' | 'review' | 'verify' | 'investigate' | 'debug' | 'explore';
|
|
3
3
|
export declare class ReviewerPromptBuilder {
|
|
4
4
|
private templates;
|
|
@@ -8,25 +8,17 @@ export declare class ReviewerPromptBuilder {
|
|
|
8
8
|
qualityForAP: ReviewTemplate;
|
|
9
9
|
diff: ReviewTemplate;
|
|
10
10
|
}, qualityTemplates?: Partial<Record<QualityReviewRoute, ReviewTemplate>>);
|
|
11
|
-
buildSpec(ctx: {
|
|
12
|
-
workerOutput: string;
|
|
13
|
-
brief: string;
|
|
14
|
-
}): {
|
|
11
|
+
buildSpec(ctx: ReviewTemplateContext): {
|
|
15
12
|
systemPrompt: string;
|
|
16
13
|
userPrompt: string;
|
|
17
14
|
};
|
|
18
|
-
buildQualityAP(ctx: {
|
|
19
|
-
workerOutput: string;
|
|
20
|
-
brief: string;
|
|
15
|
+
buildQualityAP(ctx: ReviewTemplateContext & {
|
|
21
16
|
route?: QualityReviewRoute;
|
|
22
17
|
}): {
|
|
23
18
|
systemPrompt: string;
|
|
24
19
|
userPrompt: string;
|
|
25
20
|
};
|
|
26
|
-
buildDiff(ctx: {
|
|
27
|
-
workerOutput: string;
|
|
28
|
-
brief: string;
|
|
29
|
-
}): {
|
|
21
|
+
buildDiff(ctx: ReviewTemplateContext): {
|
|
30
22
|
systemPrompt: string;
|
|
31
23
|
userPrompt: string;
|
|
32
24
|
};
|