@zhixuan92/multi-model-agent-core 3.10.0 → 3.10.2
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 +1 -1
- package/dist/review/quality-reviewer.d.ts +9 -0
- package/dist/review/quality-reviewer.d.ts.map +1 -1
- package/dist/review/quality-reviewer.js +31 -5
- package/dist/review/quality-reviewer.js.map +1 -1
- package/dist/review/spec-reviewer.d.ts +9 -0
- package/dist/review/spec-reviewer.d.ts.map +1 -1
- package/dist/review/spec-reviewer.js +25 -3
- package/dist/review/spec-reviewer.js.map +1 -1
- package/dist/run-tasks/reviewed-lifecycle.d.ts +60 -2
- package/dist/run-tasks/reviewed-lifecycle.d.ts.map +1 -1
- package/dist/run-tasks/reviewed-lifecycle.js +112 -15
- package/dist/run-tasks/reviewed-lifecycle.js.map +1 -1
- package/dist/telemetry/event-builder.d.ts +1 -1
- package/dist/telemetry/event-builder.d.ts.map +1 -1
- package/dist/telemetry/event-builder.js +38 -32
- package/dist/telemetry/event-builder.js.map +1 -1
- package/dist/telemetry/field-coverage.d.ts +17 -0
- package/dist/telemetry/field-coverage.d.ts.map +1 -0
- package/dist/telemetry/field-coverage.js +100 -0
- package/dist/telemetry/field-coverage.js.map +1 -0
- package/dist/telemetry/types.d.ts.map +1 -1
- package/dist/telemetry/types.js +15 -8
- package/dist/telemetry/types.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -104,7 +104,7 @@ As of 3.4.0 every task-execution event the worker emits to the verbose stderr st
|
|
|
104
104
|
|
|
105
105
|
## What's new
|
|
106
106
|
|
|
107
|
-
Latest: **3.
|
|
107
|
+
Latest: **3.10.2** — telemetry data-correctness patch in `event-builder.ts` and `reviewed-lifecycle.ts`: top-level totals now sum every stage entry (no longer drop reviewer + earlier-impl rounds via `runResult.usage`); `spec_rework` / `quality_rework` entries emit when the loop ran via new `accumulateReworkIteration` / `commitReworkStage` aggregator; `committing.filesCommittedCount` derives from `runResult.commits` (was hardcoded 0); `extractStageData` clamps every numeric to its V3 schema cap; `ValidatedTaskCompletedEventSchema` is enforced at emit time (R3 / R10b violations dropped with a `telemetry.event.invalid` diagnostic). New `field-coverage.ts` manifest enables a completeness contract ratchet. Full history: [CHANGELOG](https://github.com/zhixuan312/multi-model-agent/blob/master/CHANGELOG.md).
|
|
108
108
|
|
|
109
109
|
## Full documentation
|
|
110
110
|
|
|
@@ -28,6 +28,15 @@ export interface QualityReviewResult {
|
|
|
28
28
|
findings: string[];
|
|
29
29
|
errorReason?: string;
|
|
30
30
|
reason?: string;
|
|
31
|
+
/** Per-stage telemetry metrics from the review provider call. */
|
|
32
|
+
metrics?: QualityReviewMetrics;
|
|
33
|
+
}
|
|
34
|
+
export interface QualityReviewMetrics {
|
|
35
|
+
inputTokens: number;
|
|
36
|
+
outputTokens: number;
|
|
37
|
+
turnCount: number;
|
|
38
|
+
toolCallCount: number;
|
|
39
|
+
costUSD: number;
|
|
31
40
|
}
|
|
32
41
|
/** Backward-compat alias kept until reviewed-lifecycle is migrated to the new shape (Task 6). */
|
|
33
42
|
export type LegacyQualityReviewResult = QualityReviewResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-reviewer.d.ts","sourceRoot":"","sources":["../../src/review/quality-reviewer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,yCAAyC,CAAC;AAEjD;;;;;;;;GAQG;AACH;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,GAAG,kBAAkB,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;IACxI,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"quality-reviewer.d.ts","sourceRoot":"","sources":["../../src/review/quality-reviewer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,yCAAyC,CAAC;AAEjD;;;;;;;;GAQG;AACH;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,GAAG,kBAAkB,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;IACxI,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAsBD,iGAAiG;AACjG,MAAM,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAkB5D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,GAAG,IAAI,CAalF;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AACD,UAAU,kBAAkB;IAC1B,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,aAAa,EAAE,GAC9B,iBAAiB,GAAG,kBAAkB,CAiDxC;AAED,wBAAsB,gBAAgB,CACpC,gBAAgB,EAAE,QAAQ,EAC1B,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAClE,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,0BAA0B,CAAC,EAAE,CAAC,GAAG,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,aAAa,EAAE,CAAA;CAAE,KAAK,MAAM,EACtH,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,qBAAqB,EAAE,mBAAmB,KAAK,IAAI,GAC1E,OAAO,CAAC,mBAAmB,CAAC,CAkE9B"}
|
|
@@ -3,6 +3,24 @@ import { delegateWithEscalation } from '../delegate-with-escalation.js';
|
|
|
3
3
|
import { buildQualityReviewPrompt } from './reviewer-prompt.js';
|
|
4
4
|
import { parseStructuredReport } from '../reporting/structured-report.js';
|
|
5
5
|
import { workerFindingsSchema, } from '../executors/_shared/findings-schema.js';
|
|
6
|
+
function extractMetrics(r) {
|
|
7
|
+
return {
|
|
8
|
+
inputTokens: r.usage?.inputTokens ?? 0,
|
|
9
|
+
outputTokens: r.usage?.outputTokens ?? 0,
|
|
10
|
+
turnCount: r.turns ?? 0,
|
|
11
|
+
toolCallCount: r.toolCalls?.length ?? 0,
|
|
12
|
+
costUSD: r.usage?.costUSD ?? 0,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function addMetrics(a, b) {
|
|
16
|
+
return {
|
|
17
|
+
inputTokens: a.inputTokens + b.inputTokens,
|
|
18
|
+
outputTokens: a.outputTokens + b.outputTokens,
|
|
19
|
+
turnCount: a.turnCount + b.turnCount,
|
|
20
|
+
toolCallCount: a.toolCallCount + b.toolCallCount,
|
|
21
|
+
costUSD: a.costUSD + b.costUSD,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
6
24
|
const annotationItemSchema = z.object({
|
|
7
25
|
id: z.string().min(1),
|
|
8
26
|
reviewerConfidence: z.number().int().min(0).max(100),
|
|
@@ -108,9 +126,11 @@ export async function runQualityReview(reviewerProvider, packet, implReport, fil
|
|
|
108
126
|
const corePrompt = buildQualityReviewPrompt(packet, implReport, fileContents, toolCallLog);
|
|
109
127
|
const prompt = (evidenceBlock ? `${evidenceBlock}\n\n` : '') + corePrompt;
|
|
110
128
|
const reviewerSlot = reviewerProvider.name === 'standard' ? 'standard' : 'complex';
|
|
129
|
+
let metrics = { inputTokens: 0, outputTokens: 0, turnCount: 0, toolCallCount: 0, costUSD: 0 };
|
|
111
130
|
let result;
|
|
112
131
|
try {
|
|
113
132
|
result = await delegateWithEscalation({ prompt, agentType: reviewerSlot, briefQualityPolicy: 'off', timeoutMs: 120_000 }, [reviewerProvider], { explicitlyPinned: true, taskDeadlineMs, abortSignal, onProgress });
|
|
133
|
+
metrics = extractMetrics(result);
|
|
114
134
|
}
|
|
115
135
|
catch (err) {
|
|
116
136
|
return { status: 'error', findings: [], errorReason: `review agent threw: ${err instanceof Error ? err.message : String(err)}` };
|
|
@@ -119,7 +139,7 @@ export async function runQualityReview(reviewerProvider, packet, implReport, fil
|
|
|
119
139
|
if (result.status === 'api_error' || result.status === 'network_error' || result.status === 'timeout' || result.status === 'api_aborted') {
|
|
120
140
|
return { status: result.status, findings: [], errorReason: `review agent returned status: ${result.status}` };
|
|
121
141
|
}
|
|
122
|
-
return { status: 'error', findings: [], errorReason: `review agent returned status: ${result.status}
|
|
142
|
+
return { status: 'error', findings: [], errorReason: `review agent returned status: ${result.status}`, metrics };
|
|
123
143
|
}
|
|
124
144
|
let report = parseStructuredReport(result.output);
|
|
125
145
|
if (!report.summary) {
|
|
@@ -128,12 +148,13 @@ export async function runQualityReview(reviewerProvider, packet, implReport, fil
|
|
|
128
148
|
prompt: prompt + '\n\nIMPORTANT: Your response MUST begin with a "## Summary" section containing either "approved" or "changes_required". Follow this exact format.',
|
|
129
149
|
agentType: reviewerSlot, briefQualityPolicy: 'off', timeoutMs: 120_000,
|
|
130
150
|
}, [reviewerProvider], { explicitlyPinned: true, taskDeadlineMs, abortSignal, onProgress });
|
|
151
|
+
metrics = addMetrics(metrics, extractMetrics(retryResult));
|
|
131
152
|
if (retryResult.status === 'ok')
|
|
132
153
|
report = parseStructuredReport(retryResult.output);
|
|
133
154
|
}
|
|
134
155
|
catch { /* fall through */ }
|
|
135
156
|
if (!report.summary) {
|
|
136
|
-
return { status: 'error', findings: [], errorReason: 'reviewer output missing ## Summary section (after retry)' };
|
|
157
|
+
return { status: 'error', findings: [], errorReason: 'reviewer output missing ## Summary section (after retry)', metrics };
|
|
137
158
|
}
|
|
138
159
|
}
|
|
139
160
|
const summaryLower = report.summary.toLowerCase();
|
|
@@ -142,9 +163,10 @@ export async function runQualityReview(reviewerProvider, packet, implReport, fil
|
|
|
142
163
|
status: 'changes_required',
|
|
143
164
|
report,
|
|
144
165
|
findings: [...(report.deviationsFromBrief ?? []), ...(report.unresolved ?? [])],
|
|
166
|
+
metrics,
|
|
145
167
|
};
|
|
146
168
|
}
|
|
147
|
-
return { status: 'approved', report, findings: [] };
|
|
169
|
+
return { status: 'approved', report, findings: [], metrics };
|
|
148
170
|
}
|
|
149
171
|
async function runAnnotationReview(reviewerProvider, packet, workerOutput, qualityReviewPromptBuilder, taskDeadlineMs, abortSignal, onProgress) {
|
|
150
172
|
// Step 1: extract worker findings from worker output.
|
|
@@ -168,8 +190,10 @@ async function runAnnotationReview(reviewerProvider, packet, workerOutput, quali
|
|
|
168
190
|
const prompt = qualityReviewPromptBuilder({ workerOutput, brief: packet.prompt, workerFindings });
|
|
169
191
|
const reviewerSlot = reviewerProvider.name === 'standard' ? 'standard' : 'complex';
|
|
170
192
|
let result;
|
|
193
|
+
let metrics = { inputTokens: 0, outputTokens: 0, turnCount: 0, toolCallCount: 0, costUSD: 0 };
|
|
171
194
|
try {
|
|
172
195
|
result = await delegateWithEscalation({ prompt, agentType: reviewerSlot, briefQualityPolicy: 'off', timeoutMs: 120_000 }, [reviewerProvider], { explicitlyPinned: true, taskDeadlineMs, abortSignal, onProgress });
|
|
196
|
+
metrics = extractMetrics(result);
|
|
173
197
|
}
|
|
174
198
|
catch (err) {
|
|
175
199
|
return {
|
|
@@ -180,23 +204,25 @@ async function runAnnotationReview(reviewerProvider, packet, workerOutput, quali
|
|
|
180
204
|
}
|
|
181
205
|
if (result.status !== 'ok') {
|
|
182
206
|
if (result.status === 'api_error' || result.status === 'network_error' || result.status === 'timeout' || result.status === 'api_aborted') {
|
|
183
|
-
return { status: result.status, findings: [], errorReason: `review agent returned status: ${result.status}
|
|
207
|
+
return { status: result.status, findings: [], errorReason: `review agent returned status: ${result.status}`, metrics };
|
|
184
208
|
}
|
|
185
209
|
return {
|
|
186
210
|
status: 'error',
|
|
187
211
|
findings: [],
|
|
188
212
|
errorReason: `review agent returned status: ${result.status}`,
|
|
213
|
+
metrics,
|
|
189
214
|
};
|
|
190
215
|
}
|
|
191
216
|
// Step 4: parse + validate + merge annotations.
|
|
192
217
|
const merged = parseAndMergeAnnotations(result.output, workerFindings);
|
|
193
218
|
if (!merged.ok) {
|
|
194
|
-
return { status: 'error', findings: [], errorReason: merged.reason };
|
|
219
|
+
return { status: 'error', findings: [], errorReason: merged.reason, metrics };
|
|
195
220
|
}
|
|
196
221
|
return {
|
|
197
222
|
status: 'annotated',
|
|
198
223
|
annotatedFindings: merged.annotated,
|
|
199
224
|
findings: [],
|
|
225
|
+
metrics,
|
|
200
226
|
};
|
|
201
227
|
}
|
|
202
228
|
//# sourceMappingURL=quality-reviewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-reviewer.js","sourceRoot":"","sources":["../../src/review/quality-reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EACL,oBAAoB,GAGrB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"quality-reviewer.js","sourceRoot":"","sources":["../../src/review/quality-reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,15 @@ export interface SpecReviewResult {
|
|
|
7
7
|
findings: string[];
|
|
8
8
|
errorReason?: string;
|
|
9
9
|
reason?: string;
|
|
10
|
+
/** Per-stage telemetry metrics from the review provider call. */
|
|
11
|
+
metrics?: SpecReviewMetrics;
|
|
12
|
+
}
|
|
13
|
+
export interface SpecReviewMetrics {
|
|
14
|
+
inputTokens: number;
|
|
15
|
+
outputTokens: number;
|
|
16
|
+
turnCount: number;
|
|
17
|
+
toolCallCount: number;
|
|
18
|
+
costUSD: number;
|
|
10
19
|
}
|
|
11
20
|
export type SpecReviewOrSkipped = SpecReviewResult | SkippedReviewResult;
|
|
12
21
|
export declare function runSpecReview(reviewerProvider: Provider, packet: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-reviewer.d.ts","sourceRoot":"","sources":["../../src/review/spec-reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,GAAG,kBAAkB,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC;IAC9F,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-reviewer.d.ts","sourceRoot":"","sources":["../../src/review/spec-reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,GAAG,kBAAkB,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC;IAC9F,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAsBzE,wBAAsB,aAAa,CACjC,gBAAgB,EAAE,QAAQ,EAC1B,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAClE,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,qBAAqB,EAAE,mBAAmB,KAAK,IAAI,GAC1E,OAAO,CAAC,gBAAgB,CAAC,CAyE3B"}
|
|
@@ -1,11 +1,30 @@
|
|
|
1
1
|
import { delegateWithEscalation } from '../delegate-with-escalation.js';
|
|
2
2
|
import { buildSpecReviewPrompt } from './reviewer-prompt.js';
|
|
3
3
|
import { parseStructuredReport } from '../reporting/structured-report.js';
|
|
4
|
+
function extractMetrics(r) {
|
|
5
|
+
return {
|
|
6
|
+
inputTokens: r.usage?.inputTokens ?? 0,
|
|
7
|
+
outputTokens: r.usage?.outputTokens ?? 0,
|
|
8
|
+
turnCount: r.turns ?? 0,
|
|
9
|
+
toolCallCount: r.toolCalls?.length ?? 0,
|
|
10
|
+
costUSD: r.usage?.costUSD ?? 0,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function addMetrics(a, b) {
|
|
14
|
+
return {
|
|
15
|
+
inputTokens: a.inputTokens + b.inputTokens,
|
|
16
|
+
outputTokens: a.outputTokens + b.outputTokens,
|
|
17
|
+
turnCount: a.turnCount + b.turnCount,
|
|
18
|
+
toolCallCount: a.toolCallCount + b.toolCallCount,
|
|
19
|
+
costUSD: a.costUSD + b.costUSD,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
4
22
|
export async function runSpecReview(reviewerProvider, packet, implReport, fileContents, toolCallLog, planContext, evidenceBlock, taskDeadlineMs, abortSignal, onProgress) {
|
|
5
23
|
const prompt = (evidenceBlock ? `${evidenceBlock}\n\n` : '') +
|
|
6
24
|
buildSpecReviewPrompt(packet, implReport, fileContents, toolCallLog, planContext);
|
|
7
25
|
const reviewerSlot = reviewerProvider.name === 'standard' ? 'standard' : 'complex';
|
|
8
26
|
const delegateOpts = { explicitlyPinned: true, taskDeadlineMs, abortSignal, onProgress };
|
|
27
|
+
let metrics = { inputTokens: 0, outputTokens: 0, turnCount: 0, toolCallCount: 0, costUSD: 0 };
|
|
9
28
|
let result;
|
|
10
29
|
try {
|
|
11
30
|
result = await delegateWithEscalation({
|
|
@@ -14,6 +33,7 @@ export async function runSpecReview(reviewerProvider, packet, implReport, fileCo
|
|
|
14
33
|
briefQualityPolicy: 'off',
|
|
15
34
|
timeoutMs: 120_000,
|
|
16
35
|
}, [reviewerProvider], delegateOpts);
|
|
36
|
+
metrics = extractMetrics(result);
|
|
17
37
|
}
|
|
18
38
|
catch (err) {
|
|
19
39
|
return { status: 'error', findings: [], errorReason: `review agent threw: ${err instanceof Error ? err.message : String(err)}` };
|
|
@@ -22,7 +42,7 @@ export async function runSpecReview(reviewerProvider, packet, implReport, fileCo
|
|
|
22
42
|
if (result.status === 'api_error' || result.status === 'network_error' || result.status === 'timeout') {
|
|
23
43
|
return { status: result.status, findings: [], errorReason: `review agent returned status: ${result.status}` };
|
|
24
44
|
}
|
|
25
|
-
return { status: 'error', findings: [], errorReason: `review agent returned status: ${result.status}
|
|
45
|
+
return { status: 'error', findings: [], errorReason: `review agent returned status: ${result.status}`, metrics };
|
|
26
46
|
}
|
|
27
47
|
// Design note: we only check summary presence, not full structured format.
|
|
28
48
|
// After Task 2's lenient parsing, most reviewer outputs will parse successfully — that's the goal.
|
|
@@ -38,13 +58,14 @@ export async function runSpecReview(reviewerProvider, packet, implReport, fileCo
|
|
|
38
58
|
briefQualityPolicy: 'off',
|
|
39
59
|
timeoutMs: 120_000,
|
|
40
60
|
}, [reviewerProvider], delegateOpts);
|
|
61
|
+
metrics = addMetrics(metrics, extractMetrics(retryResult));
|
|
41
62
|
if (retryResult.status === 'ok') {
|
|
42
63
|
report = parseStructuredReport(retryResult.output);
|
|
43
64
|
}
|
|
44
65
|
}
|
|
45
66
|
catch { /* fall through to error */ }
|
|
46
67
|
if (!report.summary) {
|
|
47
|
-
return { status: 'error', findings: [], errorReason: 'reviewer output missing ## Summary section (after retry)' };
|
|
68
|
+
return { status: 'error', findings: [], errorReason: 'reviewer output missing ## Summary section (after retry)', metrics };
|
|
48
69
|
}
|
|
49
70
|
}
|
|
50
71
|
const summaryLower = report.summary.toLowerCase();
|
|
@@ -53,8 +74,9 @@ export async function runSpecReview(reviewerProvider, packet, implReport, fileCo
|
|
|
53
74
|
status: 'changes_required',
|
|
54
75
|
report,
|
|
55
76
|
findings: [...(report.deviationsFromBrief ?? []), ...(report.unresolved ?? [])],
|
|
77
|
+
metrics,
|
|
56
78
|
};
|
|
57
79
|
}
|
|
58
|
-
return { status: 'approved', report, findings: [] };
|
|
80
|
+
return { status: 'approved', report, findings: [], metrics };
|
|
59
81
|
}
|
|
60
82
|
//# sourceMappingURL=spec-reviewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-reviewer.js","sourceRoot":"","sources":["../../src/review/spec-reviewer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-reviewer.js","sourceRoot":"","sources":["../../src/review/spec-reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,17 @@ export declare function endBaseStage(stats: StageStatsMap, name: 'implementing'
|
|
|
8
8
|
maxIdleMs: number;
|
|
9
9
|
totalIdleMs: number;
|
|
10
10
|
activityEvents: number;
|
|
11
|
-
} | null
|
|
11
|
+
} | null, metrics?: {
|
|
12
|
+
inputTokens?: number;
|
|
13
|
+
outputTokens?: number;
|
|
14
|
+
cachedTokens?: number;
|
|
15
|
+
reasoningTokens?: number;
|
|
16
|
+
turnCount?: number;
|
|
17
|
+
toolCallCount?: number;
|
|
18
|
+
filesReadCount?: number;
|
|
19
|
+
filesWrittenCount?: number;
|
|
20
|
+
costUSD?: number;
|
|
21
|
+
}): void;
|
|
12
22
|
export declare function endReviewStage(stats: StageStatsMap, name: 'spec_review' | 'quality_review' | 'diff_review', t0: number, c0: number | null, agent: {
|
|
13
23
|
tier: 'standard' | 'complex';
|
|
14
24
|
model: string;
|
|
@@ -16,7 +26,55 @@ export declare function endReviewStage(stats: StageStatsMap, name: 'spec_review'
|
|
|
16
26
|
maxIdleMs: number;
|
|
17
27
|
totalIdleMs: number;
|
|
18
28
|
activityEvents: number;
|
|
19
|
-
} | null, verdict: ReviewVerdict, roundsUsed: number
|
|
29
|
+
} | null, verdict: ReviewVerdict, roundsUsed: number, metrics?: {
|
|
30
|
+
inputTokens?: number;
|
|
31
|
+
outputTokens?: number;
|
|
32
|
+
cachedTokens?: number;
|
|
33
|
+
reasoningTokens?: number;
|
|
34
|
+
turnCount?: number;
|
|
35
|
+
toolCallCount?: number;
|
|
36
|
+
filesReadCount?: number;
|
|
37
|
+
filesWrittenCount?: number;
|
|
38
|
+
costUSD?: number;
|
|
39
|
+
}): void;
|
|
40
|
+
export interface ReworkAccumulator {
|
|
41
|
+
occurred: boolean;
|
|
42
|
+
durationMs: number;
|
|
43
|
+
costUSD: number;
|
|
44
|
+
inputTokens: number;
|
|
45
|
+
outputTokens: number;
|
|
46
|
+
cachedTokens: number;
|
|
47
|
+
reasoningTokens: number;
|
|
48
|
+
turnCount: number;
|
|
49
|
+
toolCallCount: number;
|
|
50
|
+
filesReadCount: number;
|
|
51
|
+
filesWrittenCount: number;
|
|
52
|
+
maxIdleMs: number;
|
|
53
|
+
totalIdleMs: number;
|
|
54
|
+
activityEvents: number;
|
|
55
|
+
}
|
|
56
|
+
export declare function emptyReworkAcc(): ReworkAccumulator;
|
|
57
|
+
export declare function accumulateReworkIteration(acc: ReworkAccumulator, result: {
|
|
58
|
+
usage?: {
|
|
59
|
+
inputTokens?: number | null;
|
|
60
|
+
outputTokens?: number | null;
|
|
61
|
+
costUSD?: number | null;
|
|
62
|
+
cachedTokens?: number | null;
|
|
63
|
+
reasoningTokens?: number | null;
|
|
64
|
+
} | null;
|
|
65
|
+
turns?: number;
|
|
66
|
+
toolCalls?: unknown[];
|
|
67
|
+
filesRead?: unknown[];
|
|
68
|
+
filesWritten?: unknown[];
|
|
69
|
+
}, iterDurationMs: number, idle: {
|
|
70
|
+
maxIdleMs: number;
|
|
71
|
+
totalIdleMs: number;
|
|
72
|
+
activityEvents: number;
|
|
73
|
+
} | null): void;
|
|
74
|
+
export declare function commitReworkStage(stats: StageStatsMap, name: 'spec_rework' | 'quality_rework', acc: ReworkAccumulator, agent: {
|
|
75
|
+
tier: 'standard' | 'complex';
|
|
76
|
+
model: string;
|
|
77
|
+
}): void;
|
|
20
78
|
export declare function endVerifyStage(stats: StageStatsMap, t0: number, c0: number | null, agent: {
|
|
21
79
|
tier: 'standard' | 'complex';
|
|
22
80
|
model: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewed-lifecycle.d.ts","sourceRoot":"","sources":["../../src/run-tasks/reviewed-lifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,SAAS,EAGT,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAoCrB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"reviewed-lifecycle.d.ts","sourceRoot":"","sources":["../../src/run-tasks/reviewed-lifecycle.ts"],"names":[],"mappings":"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"}
|