@zhixuan92/multi-model-agent-core 4.0.2 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -6
- package/dist/bounded-execution/activity-tracker-types.d.ts +2 -2
- package/dist/bounded-execution/activity-tracker-types.d.ts.map +1 -1
- package/dist/bounded-execution/activity-tracker.d.ts +3 -3
- package/dist/bounded-execution/activity-tracker.d.ts.map +1 -1
- package/dist/bounded-execution/activity-tracker.js +15 -15
- package/dist/bounded-execution/activity-tracker.js.map +1 -1
- package/dist/config/model-profile-registry.d.ts +0 -10
- package/dist/config/model-profile-registry.d.ts.map +1 -1
- package/dist/config/model-profile-registry.js +126 -8
- package/dist/config/model-profile-registry.js.map +1 -1
- package/dist/config/schema.d.ts +0 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +3 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/escalation/delegate-with-escalation.d.ts +24 -0
- package/dist/escalation/delegate-with-escalation.d.ts.map +1 -1
- package/dist/escalation/delegate-with-escalation.js +5 -0
- package/dist/escalation/delegate-with-escalation.js.map +1 -1
- package/dist/escalation/fallback-types.d.ts +1 -1
- package/dist/escalation/fallback-types.d.ts.map +1 -1
- package/dist/escalation/fallback.js +2 -2
- package/dist/escalation/fallback.js.map +1 -1
- package/dist/events/cloud-events.d.ts +3 -4
- package/dist/events/cloud-events.d.ts.map +1 -1
- package/dist/events/cloud-events.js +0 -1
- package/dist/events/cloud-events.js.map +1 -1
- package/dist/events/event-builder.d.ts +4 -2
- package/dist/events/event-builder.d.ts.map +1 -1
- package/dist/events/event-builder.js +47 -45
- package/dist/events/event-builder.js.map +1 -1
- package/dist/events/observability-events.d.ts +7 -8
- package/dist/events/observability-events.d.ts.map +1 -1
- package/dist/events/running-headline-sink.d.ts +26 -0
- package/dist/events/running-headline-sink.d.ts.map +1 -0
- package/dist/events/running-headline-sink.js +116 -0
- package/dist/events/running-headline-sink.js.map +1 -0
- package/dist/events/telemetry-types.d.ts +20 -20
- package/dist/events/telemetry-types.js +8 -8
- package/dist/events/telemetry-types.js.map +1 -1
- package/dist/events/verbose-log-channel.d.ts +22 -2
- package/dist/events/verbose-log-channel.d.ts.map +1 -1
- package/dist/events/verbose-log-channel.js +46 -9
- package/dist/events/verbose-log-channel.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/intake/brief-compiler-slots/delegate.d.ts +1 -0
- package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
- package/dist/intake/brief-compiler-slots/delegate.js +17 -2
- 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/executor-output-types.d.ts +2 -2
- package/dist/lifecycle/executor-output-types.d.ts.map +1 -1
- package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/baseline-handlers.js +48 -1
- package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
- 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 +177 -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 +74 -13
- package/dist/lifecycle/handlers/review-diff-handler.js.map +1 -1
- package/dist/lifecycle/handlers/run-verify-command-handler.js +11 -2
- package/dist/lifecycle/handlers/run-verify-command-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 +135 -6
- package/dist/lifecycle/handlers/spec-chain-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.d.ts +8 -0
- package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.js +168 -11
- package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
- package/dist/lifecycle/lifecycle-context.d.ts +0 -2
- package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
- package/dist/lifecycle/merge-stage-stats.d.ts +58 -0
- package/dist/lifecycle/merge-stage-stats.d.ts.map +1 -0
- package/dist/lifecycle/merge-stage-stats.js +120 -0
- package/dist/lifecycle/merge-stage-stats.js.map +1 -0
- package/dist/lifecycle/shared-compute.js +4 -4
- package/dist/lifecycle/shared-compute.js.map +1 -1
- package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
- package/dist/lifecycle/stage-plan-builder.js +6 -0
- package/dist/lifecycle/stage-plan-builder.js.map +1 -1
- package/dist/lifecycle/stage-plan-types.d.ts +18 -0
- package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
- package/dist/lifecycle/stage-progression.d.ts +20 -0
- package/dist/lifecycle/stage-progression.d.ts.map +1 -0
- package/dist/lifecycle/stage-progression.js +165 -0
- package/dist/lifecycle/stage-progression.js.map +1 -0
- package/dist/lifecycle/task-executor.d.ts.map +1 -1
- package/dist/lifecycle/task-executor.js +55 -10
- package/dist/lifecycle/task-executor.js.map +1 -1
- package/dist/lifecycle/task-runner.d.ts +7 -3
- package/dist/lifecycle/task-runner.d.ts.map +1 -1
- package/dist/lifecycle/task-runner.js +43 -7
- package/dist/lifecycle/task-runner.js.map +1 -1
- package/dist/providers/anthropic-messages-adapter.d.ts.map +1 -1
- package/dist/providers/anthropic-messages-adapter.js +25 -1
- package/dist/providers/anthropic-messages-adapter.js.map +1 -1
- package/dist/providers/base/result-builders.d.ts +1 -1
- package/dist/providers/base/result-builders.d.ts.map +1 -1
- package/dist/providers/base/result-builders.js +4 -4
- package/dist/providers/base/result-builders.js.map +1 -1
- package/dist/providers/make-runner-shell.d.ts.map +1 -1
- package/dist/providers/make-runner-shell.js +6 -5
- package/dist/providers/make-runner-shell.js.map +1 -1
- package/dist/providers/openai-chat-adapter.d.ts +0 -2
- package/dist/providers/openai-chat-adapter.d.ts.map +1 -1
- package/dist/providers/openai-chat-adapter.js +2 -3
- package/dist/providers/openai-chat-adapter.js.map +1 -1
- package/dist/providers/openai-responses-adapter.d.ts +1 -2
- package/dist/providers/openai-responses-adapter.d.ts.map +1 -1
- package/dist/providers/openai-responses-adapter.js +67 -39
- package/dist/providers/openai-responses-adapter.js.map +1 -1
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +51 -9
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/runner-adapter.d.ts +10 -0
- package/dist/providers/runner-adapter.d.ts.map +1 -1
- package/dist/providers/runner-shell-types.d.ts +33 -0
- package/dist/providers/runner-shell-types.d.ts.map +1 -1
- package/dist/providers/runner-shell.d.ts +10 -1
- package/dist/providers/runner-shell.d.ts.map +1 -1
- package/dist/providers/runner-shell.js +251 -18
- package/dist/providers/runner-shell.js.map +1 -1
- package/dist/providers/runner-types.d.ts +21 -2
- package/dist/providers/runner-types.d.ts.map +1 -1
- package/dist/providers/tool-name-sets.d.ts +29 -0
- package/dist/providers/tool-name-sets.d.ts.map +1 -0
- package/dist/providers/tool-name-sets.js +41 -0
- package/dist/providers/tool-name-sets.js.map +1 -0
- package/dist/reporting/headline-composer.d.ts +12 -0
- package/dist/reporting/headline-composer.d.ts.map +1 -1
- package/dist/reporting/headline-composer.js.map +1 -1
- package/dist/reporting/headline-templates/audit.d.ts.map +1 -1
- package/dist/reporting/headline-templates/audit.js +35 -6
- 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 +36 -6
- 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 +18 -6
- 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 +32 -8
- 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 +36 -0
- package/dist/reporting/headline-text.d.ts.map +1 -0
- package/dist/reporting/headline-text.js +73 -0
- package/dist/reporting/headline-text.js.map +1 -0
- 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 +62 -0
- package/dist/reporting/severity.d.ts.map +1 -0
- package/dist/reporting/severity.js +93 -0
- package/dist/reporting/severity.js.map +1 -0
- package/dist/reporting/structured-report.d.ts +3 -3
- package/dist/research/explore-orchestrator.d.ts.map +1 -1
- package/dist/research/explore-orchestrator.js +4 -5
- package/dist/research/explore-orchestrator.js.map +1 -1
- package/dist/review/annotator-engine.d.ts +8 -0
- package/dist/review/annotator-engine.d.ts.map +1 -1
- package/dist/review/annotator-engine.js +7 -1
- package/dist/review/annotator-engine.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/review-types.d.ts +6 -2
- package/dist/review/review-types.d.ts.map +1 -1
- package/dist/review/reviewer-engine.d.ts +25 -0
- package/dist/review/reviewer-engine.d.ts.map +1 -1
- package/dist/review/reviewer-engine.js +18 -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 +190 -13
- 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/stores/batch-registry.d.ts +18 -0
- package/dist/stores/batch-registry.d.ts.map +1 -1
- package/dist/stores/batch-registry.js +10 -0
- package/dist/stores/batch-registry.js.map +1 -1
- package/dist/stores/context-block-tool.d.ts +14 -0
- package/dist/stores/context-block-tool.d.ts.map +1 -1
- package/dist/stores/context-block-tool.js.map +1 -1
- package/dist/stores/file-backed-context-block-store.d.ts +63 -0
- package/dist/stores/file-backed-context-block-store.d.ts.map +1 -0
- package/dist/stores/file-backed-context-block-store.js +293 -0
- package/dist/stores/file-backed-context-block-store.js.map +1 -0
- package/dist/stores/project-context-registry.d.ts +16 -3
- package/dist/stores/project-context-registry.d.ts.map +1 -1
- package/dist/stores/project-context-registry.js +9 -2
- package/dist/stores/project-context-registry.js.map +1 -1
- package/dist/tools/audit/schema.d.ts +2 -2
- 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 +28 -5
- package/dist/tools/retry/tool-config.js.map +1 -1
- package/dist/tools/review/schema.d.ts +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/dist/types/enums.d.ts +10 -10
- package/package.json +5 -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
|
@@ -20,6 +20,11 @@ export class ReviewerEngine {
|
|
|
20
20
|
systemPrompt, userMessage: userPrompt, toolDefinitions: [],
|
|
21
21
|
maxTurns: 5, cwd: input.cwd,
|
|
22
22
|
abortSignal: input.abortSignal, deadlineMs: input.deadlineMs,
|
|
23
|
+
...(input.bus && { bus: input.bus }),
|
|
24
|
+
...(input.batchId !== undefined && { batchId: input.batchId }),
|
|
25
|
+
...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
|
|
26
|
+
...(input.tier !== undefined && { tier: input.tier }),
|
|
27
|
+
...(input.stageLabel !== undefined && { stageLabel: input.stageLabel }),
|
|
23
28
|
});
|
|
24
29
|
const parsed = this.parser.parse(result.finalAssistantText ?? '');
|
|
25
30
|
return { ...parsed, cost: extractCost(result) };
|
|
@@ -30,6 +35,11 @@ export class ReviewerEngine {
|
|
|
30
35
|
systemPrompt, userMessage: userPrompt, toolDefinitions: [],
|
|
31
36
|
maxTurns: 5, cwd: input.cwd,
|
|
32
37
|
abortSignal: input.abortSignal, deadlineMs: input.deadlineMs,
|
|
38
|
+
...(input.bus && { bus: input.bus }),
|
|
39
|
+
...(input.batchId !== undefined && { batchId: input.batchId }),
|
|
40
|
+
...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
|
|
41
|
+
...(input.tier !== undefined && { tier: input.tier }),
|
|
42
|
+
...(input.stageLabel !== undefined && { stageLabel: input.stageLabel }),
|
|
33
43
|
});
|
|
34
44
|
const parsed = this.parser.parse(result.finalAssistantText ?? '');
|
|
35
45
|
return { ...parsed, cost: extractCost(result) };
|
|
@@ -40,6 +50,11 @@ export class ReviewerEngine {
|
|
|
40
50
|
systemPrompt, userMessage: userPrompt, toolDefinitions: [],
|
|
41
51
|
maxTurns: 5, cwd: input.cwd,
|
|
42
52
|
abortSignal: input.abortSignal, deadlineMs: input.deadlineMs,
|
|
53
|
+
...(input.bus && { bus: input.bus }),
|
|
54
|
+
...(input.batchId !== undefined && { batchId: input.batchId }),
|
|
55
|
+
...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
|
|
56
|
+
...(input.tier !== undefined && { tier: input.tier }),
|
|
57
|
+
...(input.stageLabel !== undefined && { stageLabel: input.stageLabel }),
|
|
43
58
|
});
|
|
44
59
|
const parsed = this.parser.parseDiff(result.finalAssistantText ?? '');
|
|
45
60
|
return { ...parsed, cost: extractCost(result) };
|
|
@@ -51,7 +66,9 @@ function extractCost(r) {
|
|
|
51
66
|
outputTokens: r.usage?.outputTokens ?? 0,
|
|
52
67
|
turnCount: r.turns ?? 0,
|
|
53
68
|
toolCallCount: r.toolCalls?.length ?? 0,
|
|
54
|
-
|
|
69
|
+
// shell.run now exposes top-level costUSD; legacy paths used cost.costUSD or usage.costUSD.
|
|
70
|
+
costUSD: r.costUSD ?? r.cost?.costUSD ?? r.usage?.costUSD ?? null,
|
|
71
|
+
durationMs: r.durationMs ?? null,
|
|
55
72
|
};
|
|
56
73
|
}
|
|
57
74
|
export { ReviewerParseError };
|
|
@@ -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;
|
|
18
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;
|
|
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,52 @@ function extractDiffVerdict(text) {
|
|
|
40
184
|
}
|
|
41
185
|
export class ReviewerOutputParser {
|
|
42
186
|
parse(text) {
|
|
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);
|
|
201
|
+
const concerns = extractDeviationsAndUnresolved(text);
|
|
202
|
+
if (jsonVerdict) {
|
|
203
|
+
return { verdict: jsonVerdict, concerns };
|
|
204
|
+
}
|
|
43
205
|
const summary = extractSummarySection(text);
|
|
44
|
-
if (!summary)
|
|
45
|
-
|
|
206
|
+
if (!summary) {
|
|
207
|
+
return {
|
|
208
|
+
verdict: 'changes_required',
|
|
209
|
+
concerns: [
|
|
210
|
+
'reviewer output missing structured verdict (no JSON block, no `## Summary` section) — defaulting to changes_required',
|
|
211
|
+
...concerns,
|
|
212
|
+
],
|
|
213
|
+
};
|
|
214
|
+
}
|
|
46
215
|
const lower = summary.toLowerCase();
|
|
47
216
|
const verdict = lower.includes('changes_required') ? 'changes_required' : 'approved';
|
|
48
|
-
const concerns = extractDeviationsAndUnresolved(text);
|
|
49
217
|
return { verdict, concerns };
|
|
50
218
|
}
|
|
51
219
|
parseDiff(text) {
|
|
220
|
+
// Same leniency for diff review: missing verdict marker → concerns
|
|
221
|
+
// (default conservative) plus a meta-concern. Don't crash the run.
|
|
52
222
|
const verdict = extractDiffVerdict(text);
|
|
53
|
-
if (!verdict)
|
|
54
|
-
throw new ReviewerParseError('diff reviewer output missing verdict');
|
|
55
223
|
const concerns = extractDeviationsAndUnresolved(text);
|
|
224
|
+
if (!verdict) {
|
|
225
|
+
return {
|
|
226
|
+
verdict: 'concerns',
|
|
227
|
+
concerns: [
|
|
228
|
+
'diff reviewer output missing APPROVE / CONCERNS: / REJECT: marker — defaulting verdict to concerns',
|
|
229
|
+
...concerns,
|
|
230
|
+
],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
56
233
|
return { verdict, concerns };
|
|
57
234
|
}
|
|
58
235
|
}
|
|
@@ -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
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-prompt-builder.d.ts","sourceRoot":"","sources":["../../src/review/reviewer-prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"reviewer-prompt-builder.d.ts","sourceRoot":"","sources":["../../src/review/reviewer-prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnI,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;gBALhB,SAAS,EAAE;QACjB,IAAI,EAAE,cAAc,CAAC;QACrB,YAAY,EAAE,cAAc,CAAC;QAC7B,IAAI,EAAE,cAAc,CAAC;KACtB,EACO,gBAAgB,GAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAM;IAGpF,SAAS,CAAC,GAAG,EAAE,qBAAqB,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAOnF,cAAc,CAAC,GAAG,EAAE,qBAAqB,GAAG;QAAE,KAAK,CAAC,EAAE,kBAAkB,CAAA;KAAE,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAQzH,SAAS,CAAC,GAAG,EAAE,qBAAqB,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAMpF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-prompt-builder.js","sourceRoot":"","sources":["../../src/review/reviewer-prompt-builder.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,qBAAqB;IAEtB;IAKA;IANV,YACU,SAIP,EACO,mBAAwE,EAAE;QAL1E,cAAS,GAAT,SAAS,CAIhB;QACO,qBAAgB,GAAhB,gBAAgB,CAA0D;IACjF,CAAC;IAEJ,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"reviewer-prompt-builder.js","sourceRoot":"","sources":["../../src/review/reviewer-prompt-builder.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,qBAAqB;IAEtB;IAKA;IANV,YACU,SAIP,EACO,mBAAwE,EAAE;QAL1E,cAAS,GAAT,SAAS,CAIhB;QACO,qBAAgB,GAAhB,gBAAgB,CAA0D;IACjF,CAAC;IAEJ,SAAS,CAAC,GAA0B;QAClC,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY;YAC9C,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;SACrD,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,GAA2D;QACxE,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;QAC9G,OAAO;YACL,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,GAA0B;QAClC,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY;YAC9C,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;SACrD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type { ReviewTemplate } from './shared.js';
|
|
2
|
+
/**
|
|
3
|
+
* Diff reviewer — the final cross-check that looks at the cumulative
|
|
4
|
+
* diff in isolation and decides if it's acceptable as a whole.
|
|
5
|
+
*
|
|
6
|
+
* Tool sweep #6 fix: the template name was a misnomer pre-fix —
|
|
7
|
+
* the reviewer received only the worker's text summary, never the
|
|
8
|
+
* actual diff. Now it sees the diff (matches the name).
|
|
9
|
+
*/
|
|
2
10
|
export declare const diffTemplate: ReviewTemplate;
|
|
3
11
|
//# sourceMappingURL=diff-review.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/diff-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"diff-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/diff-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,cAgC1B,CAAC"}
|
|
@@ -1,7 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff reviewer — the final cross-check that looks at the cumulative
|
|
3
|
+
* diff in isolation and decides if it's acceptable as a whole.
|
|
4
|
+
*
|
|
5
|
+
* Tool sweep #6 fix: the template name was a misnomer pre-fix —
|
|
6
|
+
* the reviewer received only the worker's text summary, never the
|
|
7
|
+
* actual diff. Now it sees the diff (matches the name).
|
|
8
|
+
*/
|
|
1
9
|
export const diffTemplate = {
|
|
2
|
-
systemPrompt:
|
|
10
|
+
systemPrompt: [
|
|
11
|
+
'You are reviewing the cumulative diff produced by all rework rounds. Decide whether the overall change is acceptable.',
|
|
12
|
+
'',
|
|
13
|
+
'Reply with EXACTLY one of these single-line verdicts:',
|
|
14
|
+
'- `APPROVE` — the diff is acceptable as-is.',
|
|
15
|
+
'- `CONCERNS: <one-line summary of concerns>` — the diff has flaws but is on the right track.',
|
|
16
|
+
'- `REJECT: <one-line reason>` — the diff is wrong enough that it should not be applied.',
|
|
17
|
+
'',
|
|
18
|
+
'Decision criteria:',
|
|
19
|
+
'- Is the diff scoped to what the brief asked for? Out-of-scope edits are a CONCERN at minimum.',
|
|
20
|
+
'- Are the changes internally consistent (e.g., a renamed symbol updated everywhere it appears in the diff)?',
|
|
21
|
+
'- Does the diff introduce obvious correctness or security issues that the spec/quality reviews missed?',
|
|
22
|
+
'',
|
|
23
|
+
'Do NOT re-litigate the brief itself — that is the spec reviewer\'s job. Focus on the diff as a whole.',
|
|
24
|
+
].join('\n'),
|
|
3
25
|
buildUserPrompt(ctx) {
|
|
4
|
-
|
|
26
|
+
const parts = [];
|
|
27
|
+
parts.push(`# Task brief\n${ctx.brief}`);
|
|
28
|
+
parts.push(`# Worker's most recent summary\n${ctx.workerOutput || '(no summary)'}`);
|
|
29
|
+
if (ctx.diff && ctx.diff.length > 0) {
|
|
30
|
+
parts.push(`# Cumulative diff (what you are reviewing)\n\n\`\`\`diff\n${ctx.diff}\n\`\`\``);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
parts.push(`# Cumulative diff\n(no file changes detected — APPROVE only if the brief requested a no-op)`);
|
|
34
|
+
}
|
|
35
|
+
parts.push(`# Decide\nReply with one of APPROVE, CONCERNS: <text>, or REJECT: <text>.`);
|
|
36
|
+
return parts.join('\n\n');
|
|
5
37
|
},
|
|
6
38
|
};
|
|
7
39
|
//# sourceMappingURL=diff-review.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-review.js","sourceRoot":"","sources":["../../../src/review/templates/diff-review.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,YAAY,EAAE,wGAAwG;
|
|
1
|
+
{"version":3,"file":"diff-review.js","sourceRoot":"","sources":["../../../src/review/templates/diff-review.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,YAAY,EAAE;QACZ,uHAAuH;QACvH,EAAE;QACF,uDAAuD;QACvD,6CAA6C;QAC7C,8FAA8F;QAC9F,yFAAyF;QACzF,EAAE;QACF,oBAAoB;QACpB,gGAAgG;QAChG,6GAA6G;QAC7G,wGAAwG;QACxG,EAAE;QACF,uGAAuG;KACxG,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,eAAe,CAAC,GAAG;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,mCAAmC,GAAG,CAAC,YAAY,IAAI,cAAc,EAAE,CAAC,CAAC;QAEpF,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,6DAA6D,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC;QAC5G,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAExF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared finding-quality criteria — the single source of truth for what
|
|
3
|
+
* makes a "good finding" across the implementer + annotator stages.
|
|
4
|
+
*
|
|
5
|
+
* Tool sweep #12: the implementer prompts didn't share the annotator's
|
|
6
|
+
* rubric, so workers emitted weak narrative (miscalibrated severity,
|
|
7
|
+
* unsupported claims, speculative scope) and the annotator had to
|
|
8
|
+
* either downgrade everything or rubber-stamp. This module gives
|
|
9
|
+
* implementer prompts the SAME calibration the annotator uses, so the
|
|
10
|
+
* two stages converge:
|
|
11
|
+
*
|
|
12
|
+
* - Implementer is told what counts as evidence, what severity means,
|
|
13
|
+
* and what's out of scope BEFORE it writes findings.
|
|
14
|
+
* - Annotator validates the worker emitted them properly (its rubric
|
|
15
|
+
* in `annotator-shared.ts` references the same definitions).
|
|
16
|
+
*
|
|
17
|
+
* Result: fewer false positives, fewer missed criticals, less rework
|
|
18
|
+
* (the worker self-aligned with what the reviewer will check). No
|
|
19
|
+
* heuristic short-circuits — both stages run, they just spend less
|
|
20
|
+
* time correcting each other.
|
|
21
|
+
*/
|
|
22
|
+
/** Severity ladder for read-only finding emission AND annotator
|
|
23
|
+
* validation. Same words, same meaning across stages. */
|
|
24
|
+
export declare const SEVERITY_LADDER: string;
|
|
25
|
+
/** Evidence-grounding rule. Required for every finding the worker
|
|
26
|
+
* emits. The annotator rejects findings without quotable evidence. */
|
|
27
|
+
export declare const EVIDENCE_GROUNDING: string;
|
|
28
|
+
/** Scope discipline. Workers commonly hallucinate citations into files
|
|
29
|
+
* they didn't open; this rule blocks the most common failure mode. */
|
|
30
|
+
export declare const SCOPE_DISCIPLINE: string;
|
|
31
|
+
/** What the annotator (which doubles as the read-only quality reviewer)
|
|
32
|
+
* will check the worker's output against. Pre-fix the worker had no
|
|
33
|
+
* visibility into this; now it can self-align. */
|
|
34
|
+
export declare const ANNOTATOR_CHECK_AWARENESS_RO: string;
|
|
35
|
+
/** Awareness block for delegate / execute-plan / retry implementers.
|
|
36
|
+
* Tells the worker what spec_review and quality_review will judge,
|
|
37
|
+
* so the worker self-aligns. */
|
|
38
|
+
export declare const REVIEWER_AWARENESS_AP: string;
|
|
39
|
+
//# sourceMappingURL=finding-criteria.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-criteria.d.ts","sourceRoot":"","sources":["../../../src/review/templates/finding-criteria.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;0DAC0D;AAC1D,eAAO,MAAM,eAAe,QAOhB,CAAC;AAEb;uEACuE;AACvE,eAAO,MAAM,kBAAkB,QAKnB,CAAC;AAEb;uEACuE;AACvE,eAAO,MAAM,gBAAgB,QAKjB,CAAC;AAEb;;mDAEmD;AACnD,eAAO,MAAM,4BAA4B,QAO7B,CAAC;AAEb;;iCAEiC;AACjC,eAAO,MAAM,qBAAqB,QAiBtB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared finding-quality criteria — the single source of truth for what
|
|
3
|
+
* makes a "good finding" across the implementer + annotator stages.
|
|
4
|
+
*
|
|
5
|
+
* Tool sweep #12: the implementer prompts didn't share the annotator's
|
|
6
|
+
* rubric, so workers emitted weak narrative (miscalibrated severity,
|
|
7
|
+
* unsupported claims, speculative scope) and the annotator had to
|
|
8
|
+
* either downgrade everything or rubber-stamp. This module gives
|
|
9
|
+
* implementer prompts the SAME calibration the annotator uses, so the
|
|
10
|
+
* two stages converge:
|
|
11
|
+
*
|
|
12
|
+
* - Implementer is told what counts as evidence, what severity means,
|
|
13
|
+
* and what's out of scope BEFORE it writes findings.
|
|
14
|
+
* - Annotator validates the worker emitted them properly (its rubric
|
|
15
|
+
* in `annotator-shared.ts` references the same definitions).
|
|
16
|
+
*
|
|
17
|
+
* Result: fewer false positives, fewer missed criticals, less rework
|
|
18
|
+
* (the worker self-aligned with what the reviewer will check). No
|
|
19
|
+
* heuristic short-circuits — both stages run, they just spend less
|
|
20
|
+
* time correcting each other.
|
|
21
|
+
*/
|
|
22
|
+
/** Severity ladder for read-only finding emission AND annotator
|
|
23
|
+
* validation. Same words, same meaning across stages. */
|
|
24
|
+
export const SEVERITY_LADDER = [
|
|
25
|
+
'Severity (your judgment, calibrated to impact):',
|
|
26
|
+
'- critical: must fix first — RCE, data loss, auth bypass, build broken, data corruption.',
|
|
27
|
+
'- high: real bug or security gap; blocks release.',
|
|
28
|
+
'- medium: real issue; fix soon; not blocking.',
|
|
29
|
+
'- low: minor or cosmetic issue; nice-to-fix; PASS in checklist contexts.',
|
|
30
|
+
'Calibrate to actual impact, not how alarming the wording sounds. Workers commonly inflate — resist the urge.',
|
|
31
|
+
].join('\n');
|
|
32
|
+
/** Evidence-grounding rule. Required for every finding the worker
|
|
33
|
+
* emits. The annotator rejects findings without quotable evidence. */
|
|
34
|
+
export const EVIDENCE_GROUNDING = [
|
|
35
|
+
'Evidence grounding (REQUIRED for every finding):',
|
|
36
|
+
'- Cite `file:line` (or `file:line-line` for a span) where the issue lives.',
|
|
37
|
+
'- Quote the exact code excerpt or command output that demonstrates the issue. Don\'t paraphrase — quote.',
|
|
38
|
+
'- If you cannot quote evidence directly, do NOT raise the finding. Note "investigation needed" in your summary instead.',
|
|
39
|
+
].join('\n');
|
|
40
|
+
/** Scope discipline. Workers commonly hallucinate citations into files
|
|
41
|
+
* they didn't open; this rule blocks the most common failure mode. */
|
|
42
|
+
export const SCOPE_DISCIPLINE = [
|
|
43
|
+
'Scope discipline:',
|
|
44
|
+
'- Only flag issues you verified by reading the file directly.',
|
|
45
|
+
'- If a claim depends on caller behavior or files outside the requested scope, mark "investigation needed" in your summary — do NOT speculate.',
|
|
46
|
+
'- Stay within the requested files. Don\'t audit dependencies you weren\'t asked about.',
|
|
47
|
+
].join('\n');
|
|
48
|
+
/** What the annotator (which doubles as the read-only quality reviewer)
|
|
49
|
+
* will check the worker's output against. Pre-fix the worker had no
|
|
50
|
+
* visibility into this; now it can self-align. */
|
|
51
|
+
export const ANNOTATOR_CHECK_AWARENESS_RO = [
|
|
52
|
+
'After your output, an annotator validates each finding against this rubric:',
|
|
53
|
+
'- Is the severity calibrated to actual impact (or did you inflate)?',
|
|
54
|
+
'- Does the evidence directly support the claim, or is it paraphrased?',
|
|
55
|
+
'- Is the finding within scope, or is it speculation about untouched files?',
|
|
56
|
+
'- Is the finding on-brief (matching the focus / audit type / checklist item)?',
|
|
57
|
+
'Findings that fail any of these are downgraded or dropped. Self-check before emitting.',
|
|
58
|
+
].join('\n');
|
|
59
|
+
/** Awareness block for delegate / execute-plan / retry implementers.
|
|
60
|
+
* Tells the worker what spec_review and quality_review will judge,
|
|
61
|
+
* so the worker self-aligns. */
|
|
62
|
+
export const REVIEWER_AWARENESS_AP = [
|
|
63
|
+
'After your edit, two reviewers see the cumulative diff (every change since task start):',
|
|
64
|
+
'',
|
|
65
|
+
'1. SPEC reviewer — "does the diff fulfill the brief?"',
|
|
66
|
+
' - APPROVED requires: every brief item present in the diff, no missing pieces, no out-of-scope edits.',
|
|
67
|
+
' - CHANGES_REQUIRED requires: a concrete concern tied to a specific diff line.',
|
|
68
|
+
' - Empty diff = changes_required UNLESS the brief explicitly requested a no-op.',
|
|
69
|
+
'',
|
|
70
|
+
'2. QUALITY reviewer — "is the diff sound, safe, maintainable?"',
|
|
71
|
+
' - Flags: correctness bugs, broken tests, races, security gaps, speculative dependencies.',
|
|
72
|
+
' - Does NOT flag: stylistic preferences, comment bikeshedding, unrelated pre-existing code.',
|
|
73
|
+
'',
|
|
74
|
+
'Self-check before declaring done:',
|
|
75
|
+
'- Implemented EVERY item in the brief? (no gaps)',
|
|
76
|
+
'- No edits OUTSIDE the brief? (no scope creep)',
|
|
77
|
+
'- If your edit affects callers / tests not in your filePaths, note them in your summary — even if you can\'t update them.',
|
|
78
|
+
'- Are the changes minimal and verifiable, or could they be smaller?',
|
|
79
|
+
].join('\n');
|
|
80
|
+
//# sourceMappingURL=finding-criteria.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-criteria.js","sourceRoot":"","sources":["../../../src/review/templates/finding-criteria.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;0DAC0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iDAAiD;IACjD,0FAA0F;IAC1F,uDAAuD;IACvD,iDAAiD;IACjD,+EAA+E;IAC/E,8GAA8G;CAC/G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;uEACuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,kDAAkD;IAClD,4EAA4E;IAC5E,0GAA0G;IAC1G,yHAAyH;CAC1H,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;uEACuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB;IACnB,+DAA+D;IAC/D,+IAA+I;IAC/I,wFAAwF;CACzF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;mDAEmD;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,6EAA6E;IAC7E,qEAAqE;IACrE,uEAAuE;IACvE,4EAA4E;IAC5E,+EAA+E;IAC/E,wFAAwF;CACzF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;iCAEiC;AACjC,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,yFAAyF;IACzF,EAAE;IACF,uDAAuD;IACvD,yGAAyG;IACzG,kFAAkF;IAClF,mFAAmF;IACnF,EAAE;IACF,gEAAgE;IAChE,6FAA6F;IAC7F,+FAA+F;IAC/F,EAAE;IACF,mCAAmC;IACnC,kDAAkD;IAClD,gDAAgD;IAChD,2HAA2H;IAC3H,qEAAqE;CACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import type { ReviewTemplate } from './shared.js';
|
|
2
|
+
/**
|
|
3
|
+
* Quality reviewer for artifact-producing routes (delegate, execute-plan,
|
|
4
|
+
* retry).
|
|
5
|
+
*
|
|
6
|
+
* Tool sweep #6: pre-fix this template only saw `Task: <brief>` +
|
|
7
|
+
* `Worker output: <text>`. Quality findings were rooted in the
|
|
8
|
+
* worker's prose claim — false positives ("the worker claimed X but
|
|
9
|
+
* didn't really") were common, and real regressions in the diff
|
|
10
|
+
* could be missed if the worker's summary glossed over them.
|
|
11
|
+
*
|
|
12
|
+
* Post-fix: reviewer sees the cumulative diff. Findings must be
|
|
13
|
+
* specific to diff lines.
|
|
14
|
+
*/
|
|
2
15
|
export declare const qualityAPTemplate: ReviewTemplate;
|
|
3
16
|
//# sourceMappingURL=quality-review-artifact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-review-artifact.d.ts","sourceRoot":"","sources":["../../../src/review/templates/quality-review-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"quality-review-artifact.d.ts","sourceRoot":"","sources":["../../../src/review/templates/quality-review-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAsC/B,CAAC"}
|