@gaunt-sloth/batch 2.0.0-beta.15 → 2.0.0-beta.16
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/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/toolCoverage.d.ts +91 -1
- package/dist/toolCoverage.js +111 -1
- package/dist/toolCoverage.js.map +1 -1
- package/dist/toolResultChecks.d.ts +5 -2
- package/dist/toolResultChecks.js +34 -2
- package/dist/toolResultChecks.js.map +1 -1
- package/dist/types.d.ts +17 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export { extractClassificationValue, buildConfusionMatrix, collectTags, readRaw,
|
|
|
18
18
|
export { buildClassificationReport } from '#src/classificationReport.js';
|
|
19
19
|
export { computeMetric, parseMetricPredicate, evaluatePredicate, evaluatePredicates, formatTally, } from '#src/metrics.js';
|
|
20
20
|
export { renderClassificationReport, renderConfusionMatrix, renderMetric, } from '#src/classificationRender.js';
|
|
21
|
-
export { computeToolCoverage, aggregateToolCoverage, WAIVER_SHARE_WARN_THRESHOLD, } from '#src/toolCoverage.js';
|
|
22
|
-
export type { AdvertisedToolInventory, AdvertisedToolRecord, ToolCoverageInput, ToolCoverageReport, ToolCoverageServerReport, ToolCoverageSpec, } from '#src/toolCoverage.js';
|
|
21
|
+
export { computeToolCoverage, aggregateToolCoverage, gradeRunToolCoverage, hasRunToolCoverageSpec, WAIVER_SHARE_WARN_THRESHOLD, } from '#src/toolCoverage.js';
|
|
22
|
+
export type { AdvertisedToolInventory, AdvertisedToolRecord, RunToolCoverageGrade, RunToolCoverageSource, RunToolCoverageSpec, ToolCoverageInput, ToolCoverageReport, ToolCoverageServerReport, ToolCoverageSpec, } from '#src/toolCoverage.js';
|
|
23
23
|
export { renderToolCoverage } from '#src/toolCoverageRender.js';
|
|
24
24
|
export type { RenderToolCoverageOptions } from '#src/toolCoverageRender.js';
|
|
25
25
|
export { buildBlindExport, diffRelabel, renderRelabelDiff } from '#src/blindExport.js';
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ export { buildClassificationReport } from '#src/classificationReport.js';
|
|
|
18
18
|
export { computeMetric, parseMetricPredicate, evaluatePredicate, evaluatePredicates, formatTally, } from '#src/metrics.js';
|
|
19
19
|
export { renderClassificationReport, renderConfusionMatrix, renderMetric, } from '#src/classificationRender.js';
|
|
20
20
|
// BATCH-32 — tool coverage: which of the agent's advertised tools a suite exercised.
|
|
21
|
-
export { computeToolCoverage, aggregateToolCoverage, WAIVER_SHARE_WARN_THRESHOLD, } from '#src/toolCoverage.js';
|
|
21
|
+
export { computeToolCoverage, aggregateToolCoverage, gradeRunToolCoverage, hasRunToolCoverageSpec, WAIVER_SHARE_WARN_THRESHOLD, } from '#src/toolCoverage.js';
|
|
22
22
|
export { renderToolCoverage } from '#src/toolCoverageRender.js';
|
|
23
23
|
export { buildBlindExport, diffRelabel, renderRelabelDiff } from '#src/blindExport.js';
|
|
24
24
|
export { expandSweep, deepMerge, renderComparison, diffRuns, renderRunDiff, parseJudgeDriftFilter, DEFAULT_JUDGE_DRIFT_FILTER, DEFAULT_JUDGE_DRIFT_TOLERANCE, MAX_JUDGE_DRIFT_TOLERANCE, } from '#src/evalCompare.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAWlD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,gGAAgG;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqBrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE,mGAAmG;AACnG,8FAA8F;AAC9F,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,WAAW,EACX,OAAO,GACR,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,qFAAqF;AACrF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAWlD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,gGAAgG;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqBrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE,mGAAmG;AACnG,8FAA8F;AAC9F,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,WAAW,EACX,OAAO,GACR,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,qFAAqF;AACrF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAY9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEvF,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,qBAAqB,EACrB,0BAA0B,EAC1B,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAyBjF,kGAAkG;AAClG,8DAA8D;AAC9D,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAG7B,gGAAgG;AAChG,8FAA8F;AAC9F,8FAA8F;AAC9F,mFAAmF;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,iGAAiG;AACjG,qGAAqG;AACrG,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAQpE,kGAAkG;AAClG,6CAA6C;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/toolCoverage.d.ts
CHANGED
|
@@ -149,6 +149,96 @@ export declare function computeToolCoverage(input: ToolCoverageInput): ToolCover
|
|
|
149
149
|
* graded against that suite (the `metrics:` precedent), and the run's exit is the OR of those. If a
|
|
150
150
|
* declared floor were re-applied to the aggregate, the same suite would pass when run alone and fail
|
|
151
151
|
* when run as part of a directory, with nothing in either output saying the threshold had moved.
|
|
152
|
-
* This
|
|
152
|
+
* This function stays reporting only.
|
|
153
|
+
*
|
|
154
|
+
* **A run-level floor is a different declaration, graded elsewhere.** BATCH-48 adds one —
|
|
155
|
+
* `evalToolCoverage` in gth config, resolved once per run from the base config and never from an
|
|
156
|
+
* identity's — and {@link gradeRunToolCoverage} is what grades it, against the report this function
|
|
157
|
+
* returns. Keeping the two apart is what preserves the argument above: a suite's `min:` is never
|
|
158
|
+
* promoted to the aggregate, and the run's floor is never read back as a suite's.
|
|
153
159
|
*/
|
|
154
160
|
export declare function aggregateToolCoverage(reports: readonly ToolCoverageReport[]): ToolCoverageReport | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* BATCH-48 — the run-level coverage spec, as `gth eval` resolved it from the base config.
|
|
163
|
+
*
|
|
164
|
+
* A structural mirror of the config key rather than a dependency on core's config types: the batch
|
|
165
|
+
* package owns the grading, and the command owns where the value came from. `min` is the same
|
|
166
|
+
* percentage a suite's `tool_coverage.min` is; `waive` is the same glob vocabulary.
|
|
167
|
+
*/
|
|
168
|
+
export interface RunToolCoverageSpec {
|
|
169
|
+
/** Minimum percentage (0–100) of the run's post-waiver denominator. Absent means no floor. */
|
|
170
|
+
min?: number;
|
|
171
|
+
/** Tool-name globs removed from the run denominator, whatever any suite waived. */
|
|
172
|
+
waive: string[];
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Where the run-level spec was read from, so the output can name it.
|
|
176
|
+
*
|
|
177
|
+
* Naming the source is what keeps a threshold from silently moving scope: a reader can see that the
|
|
178
|
+
* number was graded against the run's floor and where that floor was declared, rather than having to
|
|
179
|
+
* infer it from which suites happened to run.
|
|
180
|
+
*/
|
|
181
|
+
export interface RunToolCoverageSource {
|
|
182
|
+
/**
|
|
183
|
+
* `profile` — the base `-i` profile the run was started with. `project` — the plain project
|
|
184
|
+
* config found by discovery. `config-file` — an explicit `-c` file. `global` — the global config
|
|
185
|
+
* in `~/.gsloth`, when no project config exists or `-g` was given. The command decides which;
|
|
186
|
+
* this layer only prints what it is told.
|
|
187
|
+
*/
|
|
188
|
+
kind: 'profile' | 'project' | 'config-file' | 'global';
|
|
189
|
+
/** The profile name, when {@link kind} is `profile`. */
|
|
190
|
+
profile?: string;
|
|
191
|
+
/** The file path, when {@link kind} is `config-file`. */
|
|
192
|
+
path?: string;
|
|
193
|
+
}
|
|
194
|
+
/** One run graded against its run-level spec. */
|
|
195
|
+
export interface RunToolCoverageGrade {
|
|
196
|
+
/**
|
|
197
|
+
* The aggregate after the run-level `waive` has been applied — the figure the floor was graded
|
|
198
|
+
* against. `undefined` when no suite produced a report, which is a different outcome from an
|
|
199
|
+
* aggregate that exists and is below the floor: there is nothing to grade.
|
|
200
|
+
*/
|
|
201
|
+
report: ToolCoverageReport | undefined;
|
|
202
|
+
/**
|
|
203
|
+
* Breached `min`, or a floor that could not be graded because no suite produced a report. Empty
|
|
204
|
+
* when the floor holds, and when no floor was declared — a spec with only `waive` still narrows
|
|
205
|
+
* the denominator and warns, but it gates nothing.
|
|
206
|
+
*/
|
|
207
|
+
gateFailures: string[];
|
|
208
|
+
/**
|
|
209
|
+
* A run-level waiver that matched nothing advertised. The same stale-waiver warning a suite gets,
|
|
210
|
+
* because a renamed tool is back in the denominator under its new name while the author believes
|
|
211
|
+
* it is still waived — and at run scope that is the decay a duplicated per-suite list hides.
|
|
212
|
+
*/
|
|
213
|
+
warnings: string[];
|
|
214
|
+
/** The line that says which threshold this run was graded against and where it came from. */
|
|
215
|
+
sourceLine: string;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Whether a run-level spec declares anything to grade or apply.
|
|
219
|
+
*
|
|
220
|
+
* An absent config key and an empty object are the same thing to a caller: no floor, no exemption.
|
|
221
|
+
* Distinguishing them would make "the run has no floor" depend on which spelling the config used.
|
|
222
|
+
*/
|
|
223
|
+
export declare function hasRunToolCoverageSpec(spec: RunToolCoverageSpec | undefined): boolean;
|
|
224
|
+
/**
|
|
225
|
+
* Grade a run-level coverage spec against the run's aggregate.
|
|
226
|
+
*
|
|
227
|
+
* **Separate from {@link aggregateToolCoverage} on purpose.** That function reports the union and
|
|
228
|
+
* carries no gate, because re-applying a SUITE's declared floor to a different denominator would
|
|
229
|
+
* make the same suite pass alone and fail inside a directory. This function grades a floor that was
|
|
230
|
+
* declared for the run, against the aggregate it names, so the two thresholds stay independent: a
|
|
231
|
+
* suite's `min:` is never promoted here, and this floor is never written back onto a suite.
|
|
232
|
+
*
|
|
233
|
+
* **The denominator is the aggregate's reconciled one, minus this spec's `waive`.** The aggregate
|
|
234
|
+
* has already applied the reconciliation — a tool waived in one suite but counted in another stays
|
|
235
|
+
* counted, and a tool waived in every suite is already out. A suite's own waiver therefore does not
|
|
236
|
+
* shrink the run denominator further; only the run-level list does. A tool the run-level list waives
|
|
237
|
+
* leaves the denominator even when it was covered, the same way a suite-level waiver does inside
|
|
238
|
+
* {@link computeToolCoverage}.
|
|
239
|
+
*
|
|
240
|
+
* **A floor with nothing to grade fails.** `min` set and no report at all — every suite targeted
|
|
241
|
+
* something that cannot supply a denominator — must not pass: a floor quietly skipped reports green
|
|
242
|
+
* forever over a run it never measured.
|
|
243
|
+
*/
|
|
244
|
+
export declare function gradeRunToolCoverage(aggregate: ToolCoverageReport | undefined, spec: RunToolCoverageSpec, source: RunToolCoverageSource): RunToolCoverageGrade;
|
package/dist/toolCoverage.js
CHANGED
|
@@ -236,7 +236,13 @@ export function computeToolCoverage(input) {
|
|
|
236
236
|
* graded against that suite (the `metrics:` precedent), and the run's exit is the OR of those. If a
|
|
237
237
|
* declared floor were re-applied to the aggregate, the same suite would pass when run alone and fail
|
|
238
238
|
* when run as part of a directory, with nothing in either output saying the threshold had moved.
|
|
239
|
-
* This
|
|
239
|
+
* This function stays reporting only.
|
|
240
|
+
*
|
|
241
|
+
* **A run-level floor is a different declaration, graded elsewhere.** BATCH-48 adds one —
|
|
242
|
+
* `evalToolCoverage` in gth config, resolved once per run from the base config and never from an
|
|
243
|
+
* identity's — and {@link gradeRunToolCoverage} is what grades it, against the report this function
|
|
244
|
+
* returns. Keeping the two apart is what preserves the argument above: a suite's `min:` is never
|
|
245
|
+
* promoted to the aggregate, and the run's floor is never read back as a suite's.
|
|
240
246
|
*/
|
|
241
247
|
export function aggregateToolCoverage(reports) {
|
|
242
248
|
if (reports.length === 0)
|
|
@@ -301,4 +307,108 @@ export function aggregateToolCoverage(reports) {
|
|
|
301
307
|
gateFailures: [],
|
|
302
308
|
};
|
|
303
309
|
}
|
|
310
|
+
/** The human name of a {@link RunToolCoverageSource}, shared by the source line and the gate text. */
|
|
311
|
+
function describeRunCoverageSource(source) {
|
|
312
|
+
switch (source.kind) {
|
|
313
|
+
case 'profile':
|
|
314
|
+
return `profile ${source.profile ?? '(unnamed)'}`;
|
|
315
|
+
case 'config-file':
|
|
316
|
+
return `config file ${source.path ?? '(unnamed)'}`;
|
|
317
|
+
case 'global':
|
|
318
|
+
return 'the global config';
|
|
319
|
+
default:
|
|
320
|
+
return 'the project config';
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Whether a run-level spec declares anything to grade or apply.
|
|
325
|
+
*
|
|
326
|
+
* An absent config key and an empty object are the same thing to a caller: no floor, no exemption.
|
|
327
|
+
* Distinguishing them would make "the run has no floor" depend on which spelling the config used.
|
|
328
|
+
*/
|
|
329
|
+
export function hasRunToolCoverageSpec(spec) {
|
|
330
|
+
return spec !== undefined && (spec.min !== undefined || spec.waive.length > 0);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Grade a run-level coverage spec against the run's aggregate.
|
|
334
|
+
*
|
|
335
|
+
* **Separate from {@link aggregateToolCoverage} on purpose.** That function reports the union and
|
|
336
|
+
* carries no gate, because re-applying a SUITE's declared floor to a different denominator would
|
|
337
|
+
* make the same suite pass alone and fail inside a directory. This function grades a floor that was
|
|
338
|
+
* declared for the run, against the aggregate it names, so the two thresholds stay independent: a
|
|
339
|
+
* suite's `min:` is never promoted here, and this floor is never written back onto a suite.
|
|
340
|
+
*
|
|
341
|
+
* **The denominator is the aggregate's reconciled one, minus this spec's `waive`.** The aggregate
|
|
342
|
+
* has already applied the reconciliation — a tool waived in one suite but counted in another stays
|
|
343
|
+
* counted, and a tool waived in every suite is already out. A suite's own waiver therefore does not
|
|
344
|
+
* shrink the run denominator further; only the run-level list does. A tool the run-level list waives
|
|
345
|
+
* leaves the denominator even when it was covered, the same way a suite-level waiver does inside
|
|
346
|
+
* {@link computeToolCoverage}.
|
|
347
|
+
*
|
|
348
|
+
* **A floor with nothing to grade fails.** `min` set and no report at all — every suite targeted
|
|
349
|
+
* something that cannot supply a denominator — must not pass: a floor quietly skipped reports green
|
|
350
|
+
* forever over a run it never measured.
|
|
351
|
+
*/
|
|
352
|
+
export function gradeRunToolCoverage(aggregate, spec, source) {
|
|
353
|
+
const sourceText = describeRunCoverageSource(source);
|
|
354
|
+
const sourceLine = spec.min !== undefined
|
|
355
|
+
? `graded against evalToolCoverage.min ${spec.min}% from ${sourceText}`
|
|
356
|
+
: `evalToolCoverage applied from ${sourceText}`;
|
|
357
|
+
if (!aggregate) {
|
|
358
|
+
// Nothing was measured. A waiver list has nothing to match against either, so it neither warns
|
|
359
|
+
// nor silently passes a floor: the floor is the thing that was declared, and it could not be
|
|
360
|
+
// graded.
|
|
361
|
+
const gateFailures = spec.min !== undefined
|
|
362
|
+
? [
|
|
363
|
+
`evalToolCoverage.min ${spec.min}% from ${sourceText} could not be graded: no suite ` +
|
|
364
|
+
'produced a coverage report',
|
|
365
|
+
]
|
|
366
|
+
: [];
|
|
367
|
+
return { report: undefined, gateFailures, warnings: [], sourceLine };
|
|
368
|
+
}
|
|
369
|
+
const warnings = [];
|
|
370
|
+
const names = [...aggregate.covered, ...aggregate.uncovered, ...aggregate.waived];
|
|
371
|
+
const waivedByRun = new Set();
|
|
372
|
+
for (const pattern of spec.waive) {
|
|
373
|
+
const matched = names.filter((name) => toolNameMatchesPattern(name, pattern));
|
|
374
|
+
if (matched.length === 0) {
|
|
375
|
+
warnings.push(`evalToolCoverage.waive "${pattern}" matched no advertised tool — stale waiver, or a typo`);
|
|
376
|
+
}
|
|
377
|
+
for (const name of matched)
|
|
378
|
+
waivedByRun.add(name);
|
|
379
|
+
}
|
|
380
|
+
// A covered tool the run waives leaves the numerator, exactly as a suite-level waiver of a
|
|
381
|
+
// covered tool leaves it. Keeping it covered would let the run exempt a tool and still be
|
|
382
|
+
// credited for exercising it, which is the opposite of what a waiver means.
|
|
383
|
+
const covered = aggregate.covered.filter((name) => !waivedByRun.has(name));
|
|
384
|
+
const uncovered = aggregate.uncovered.filter((name) => !waivedByRun.has(name));
|
|
385
|
+
const waived = [...new Set([...aggregate.waived, ...waivedByRun])];
|
|
386
|
+
const gateFailures = [];
|
|
387
|
+
if (spec.min !== undefined) {
|
|
388
|
+
const total = covered.length + uncovered.length;
|
|
389
|
+
if (total === 0) {
|
|
390
|
+
gateFailures.push(`evalToolCoverage.min ${spec.min}% from ${sourceText}: no tools remain in the ` +
|
|
391
|
+
`denominator — all ${names.length} advertised tool(s) are waived`);
|
|
392
|
+
}
|
|
393
|
+
else if (percent(covered.length, total) < spec.min) {
|
|
394
|
+
gateFailures.push(`evalToolCoverage.min ${spec.min}% from ${sourceText}: covered ${covered.length}/${total} ` +
|
|
395
|
+
`(${percent(covered.length, total)}%)`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
// The per-server buckets describe the same post-waiver population as the headline, so they sum
|
|
399
|
+
// to it; a run-waived tool leaves its bucket too, and a bucket left empty is dropped.
|
|
400
|
+
const byServer = aggregate.byServer
|
|
401
|
+
.map((bucket) => ({
|
|
402
|
+
...bucket,
|
|
403
|
+
covered: bucket.covered.filter((name) => !waivedByRun.has(name)),
|
|
404
|
+
uncovered: bucket.uncovered.filter((name) => !waivedByRun.has(name)),
|
|
405
|
+
}))
|
|
406
|
+
.filter((bucket) => bucket.covered.length + bucket.uncovered.length > 0);
|
|
407
|
+
return {
|
|
408
|
+
report: { ...aggregate, covered, uncovered, waived, byServer, gateFailures: [], warnings: [] },
|
|
409
|
+
gateFailures,
|
|
410
|
+
warnings,
|
|
411
|
+
sourceLine,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
304
414
|
//# sourceMappingURL=toolCoverage.js.map
|
package/dist/toolCoverage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolCoverage.js","sourceRoot":"","sources":["../src/toolCoverage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolCoverage.js","sourceRoot":"","sources":["../src/toolCoverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,11 @@ import type { ToolResultRecord } from '#src/types.js';
|
|
|
19
19
|
* - `toolResultJsonPath` — each entry passes iff **at least one** result from a tool matching its
|
|
20
20
|
* `tool` pattern satisfies it: the payload parses as JSON, the `path` resolves, and (when set)
|
|
21
21
|
* `equals` deep-equals / `contains` substring-matches the resolved value. A non-JSON (or absent)
|
|
22
|
-
* payload is a deterministic per-result FAIL, never a throw
|
|
23
|
-
*
|
|
22
|
+
* payload is a deterministic per-result FAIL, never a throw. A payload capture cut at
|
|
23
|
+
* `toolResultCaptureMaxBytes` fails too, with its own reason naming that key, even when the
|
|
24
|
+
* cut prefix still parses — the cut is recorded on the result at capture (`contentTruncated`),
|
|
25
|
+
* and this check reads that record rather than inferring the cut from the stored length or from
|
|
26
|
+
* a parse of the prefix.
|
|
24
27
|
* (BATCH-43) The payload it reads is the result's `errorPayload` when capture recovered one — an
|
|
25
28
|
* errored MCP tool's own error body, freed from the adapter's prose prefix — and otherwise the
|
|
26
29
|
* observed `content`, which is left exactly as the model saw it in either case.
|
package/dist/toolResultChecks.js
CHANGED
|
@@ -20,8 +20,11 @@ import { resolveJsonPath } from '#src/deterministicChecks.js';
|
|
|
20
20
|
* - `toolResultJsonPath` — each entry passes iff **at least one** result from a tool matching its
|
|
21
21
|
* `tool` pattern satisfies it: the payload parses as JSON, the `path` resolves, and (when set)
|
|
22
22
|
* `equals` deep-equals / `contains` substring-matches the resolved value. A non-JSON (or absent)
|
|
23
|
-
* payload is a deterministic per-result FAIL, never a throw
|
|
24
|
-
*
|
|
23
|
+
* payload is a deterministic per-result FAIL, never a throw. A payload capture cut at
|
|
24
|
+
* `toolResultCaptureMaxBytes` fails too, with its own reason naming that key, even when the
|
|
25
|
+
* cut prefix still parses — the cut is recorded on the result at capture (`contentTruncated`),
|
|
26
|
+
* and this check reads that record rather than inferring the cut from the stored length or from
|
|
27
|
+
* a parse of the prefix.
|
|
25
28
|
* (BATCH-43) The payload it reads is the result's `errorPayload` when capture recovered one — an
|
|
26
29
|
* errored MCP tool's own error body, freed from the adapter's prose prefix — and otherwise the
|
|
27
30
|
* observed `content`, which is left exactly as the model saw it in either case.
|
|
@@ -67,6 +70,23 @@ function checkToolResultJsonPath(toolResults, check) {
|
|
|
67
70
|
}
|
|
68
71
|
return `${label}: ${[...reasons].join('; ')}`;
|
|
69
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* BATCH-49 — the reason a payload that capture cut gets, distinct from the one a prose payload
|
|
75
|
+
* gets.
|
|
76
|
+
*
|
|
77
|
+
* The two used to share `result payload is not JSON`, which sent the person reading it to the
|
|
78
|
+
* server when the cut had happened here. The wording names `toolResultCaptureMaxBytes` because
|
|
79
|
+
* that is the key to raise, and it quotes the original size when capture recorded one, because a
|
|
80
|
+
* reason that only names the key still leaves the new value to be guessed. The original size is
|
|
81
|
+
* optional in the wording only: a record written before the field existed still has to produce a
|
|
82
|
+
* reason that names the key.
|
|
83
|
+
*/
|
|
84
|
+
function truncatedPayloadReason(originalBytes) {
|
|
85
|
+
const measured = typeof originalBytes === 'number' ? ` (the tool returned ${originalBytes} bytes)` : '';
|
|
86
|
+
return ('result payload was truncated at toolResultCaptureMaxBytes' +
|
|
87
|
+
measured +
|
|
88
|
+
' and is no longer JSON; raise toolResultCaptureMaxBytes to capture it whole');
|
|
89
|
+
}
|
|
70
90
|
/** Evaluate ONE tool result against ONE check: `undefined` = satisfied, else the failure reason.
|
|
71
91
|
* Deterministic and throw-free: a non-JSON/absent payload is a reason, not an exception. */
|
|
72
92
|
function evaluateResultAgainstCheck(result, check) {
|
|
@@ -76,7 +96,19 @@ function evaluateResultAgainstCheck(result, check) {
|
|
|
76
96
|
// and it is only ever recorded when it parses, so this branch cannot introduce a new failure —
|
|
77
97
|
// when it is absent (any non-MCP result, or an MCP error whose body is prose) the reason below
|
|
78
98
|
// is the same deterministic one the check has always given.
|
|
99
|
+
// The recovered body is graded when capture produced one; it is only recorded when it
|
|
100
|
+
// parsed, so this branch never sees a truncated `errorPayload` — an over-cap body is dropped
|
|
101
|
+
// whole rather than cut. The truncation flag is about `content`, and it is only consulted when
|
|
102
|
+
// `content` is what is being graded.
|
|
103
|
+
const gradingContent = result.errorPayload === undefined;
|
|
79
104
|
const payload = result.errorPayload ?? result.content ?? '';
|
|
105
|
+
// Consult the flag before the parse. A cut prefix can still parse — a JSON document padded with
|
|
106
|
+
// trailing whitespace past the cap, or a long top-level number cut short — and grading it would
|
|
107
|
+
// judge a payload the server did not send. A cut inside an object or array never parses. `errorPayload` is only recorded when it parsed whole, so a truncated observed payload
|
|
108
|
+
// must not turn that recovered body into a truncation failure.
|
|
109
|
+
if (gradingContent && result.contentTruncated) {
|
|
110
|
+
return truncatedPayloadReason(result.contentOriginalBytes);
|
|
111
|
+
}
|
|
80
112
|
let root;
|
|
81
113
|
try {
|
|
82
114
|
root = JSON.parse(payload.trim());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolResultChecks.js","sourceRoot":"","sources":["../src/toolResultChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D
|
|
1
|
+
{"version":3,"file":"toolResultChecks.js","sourceRoot":"","sources":["../src/toolResultChecks.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -45,8 +45,24 @@ export interface ToolResultRecord {
|
|
|
45
45
|
name: string;
|
|
46
46
|
/** `true` iff the tool result carried the error status (LangChain `ToolMessage.status === 'error'`). */
|
|
47
47
|
isError: boolean;
|
|
48
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* The result payload as text (non-string payloads JSON-stringified), capped in UTF-8 bytes at
|
|
50
|
+
* capture. When the cap cut it, this is a character-boundary prefix and {@link contentTruncated}
|
|
51
|
+
* says so.
|
|
52
|
+
*/
|
|
49
53
|
content?: string;
|
|
54
|
+
/**
|
|
55
|
+
* BATCH-49 — `true` iff {@link content} was cut by the capture cap (`toolResultCaptureMaxBytes`).
|
|
56
|
+
* Recorded at capture in core and carried through unchanged — the check reads it rather than
|
|
57
|
+
* guessing from the stored length, which a character-boundary byte cut makes unreliable. Absent
|
|
58
|
+
* when nothing was cut.
|
|
59
|
+
*/
|
|
60
|
+
contentTruncated?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* BATCH-49 — {@link content}'s size in UTF-8 bytes before the cap cut it. Present only together
|
|
63
|
+
* with {@link contentTruncated}; the number a person needs to choose a larger cap.
|
|
64
|
+
*/
|
|
65
|
+
contentOriginalBytes?: number;
|
|
50
66
|
/**
|
|
51
67
|
* BATCH-43 — an errored MCP tool's own error body, recovered at capture and carried BESIDE
|
|
52
68
|
* {@link content}, which stays exactly what the model observed. `tool_result_json_path` grades
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA6JA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gaunt-sloth/batch",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.16",
|
|
4
4
|
"description": "Batch matrix runtime for Gaunt Sloth (BATCH-1): run a prompt-executable over a matrix of models and/or content-bound inputs",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@langchain/core": "^1.2.12",
|
|
38
38
|
"yaml": "^2.9.1",
|
|
39
39
|
"zod": "^4.6.5",
|
|
40
|
-
"@gaunt-sloth/agent": "2.0.0-beta.
|
|
41
|
-
"@gaunt-sloth/core": "2.0.0-beta.
|
|
40
|
+
"@gaunt-sloth/agent": "2.0.0-beta.16",
|
|
41
|
+
"@gaunt-sloth/core": "2.0.0-beta.16"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
44
|
"./dist/*"
|