margin-meter 0.2.0 → 0.3.0

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/providers.js CHANGED
@@ -81,6 +81,26 @@ function asInt(value) {
81
81
  return 0;
82
82
  return n;
83
83
  }
84
+ /** First element of an array-shaped value, else undefined (duck-typed). OpenAI and
85
+ * Gemini nest their stop/finish reason under the first choice / candidate. */
86
+ function first(seq) {
87
+ if (Array.isArray(seq))
88
+ return seq.length > 0 ? seq[0] : undefined;
89
+ return undefined;
90
+ }
91
+ /** A provider's stop/finish reason as a clean string, or undefined (MAR-209).
92
+ * Read VERBATIM — never mapped, normalised, or inferred into a billing verdict.
93
+ * A missing, blank, or non-scalar value is undefined (UNKNOWN, first-class),
94
+ * never defaulted to a plausible value like "stop". A provider that reports an
95
+ * enum stringifies here; the value is stored, never interpreted. */
96
+ function asReason(value) {
97
+ if (value === null || value === undefined)
98
+ return undefined;
99
+ if (typeof value === "object")
100
+ return undefined;
101
+ const s = String(value).trim();
102
+ return s.length > 0 ? s : undefined;
103
+ }
84
104
  /** The Gemini `generateContent` result nests usage under `.response`; unwrap it. */
85
105
  function usageMetadata(response) {
86
106
  const direct = get(response, "usageMetadata");
@@ -121,6 +141,61 @@ export function detectProvider(response) {
121
141
  }
122
142
  return undefined;
123
143
  }
144
+ // OpenRouter ROUTER slugs pick a different model per call, so the requested name has no
145
+ // single rate and would price at the server's $1/$3 fallback (MAR-1309). The response's
146
+ // own `model` is the one that served — and billed — the call.
147
+ const OPENROUTER_ROUTERS = new Set(["auto", "auto-beta", "pareto-code"]);
148
+ // FAN-OUT slugs run N panel calls plus an analyst call: no single served model prices
149
+ // them, and the analyst's name would under-state the bill several-fold. They keep their
150
+ // slug and carry OpenRouter's billed `usage.cost` instead.
151
+ const OPENROUTER_FANOUT = new Set(["fusion", "fusion-flash"]);
152
+ /** The route under `openrouter/` (however many prefixes were stacked), else undefined. */
153
+ function openrouterRoute(model) {
154
+ if (!model)
155
+ return undefined;
156
+ let rest = model.trim().toLowerCase();
157
+ if (!rest.startsWith("openrouter/"))
158
+ return undefined;
159
+ while (rest.startsWith("openrouter/"))
160
+ rest = rest.slice("openrouter/".length);
161
+ return rest;
162
+ }
163
+ /** True for `openrouter/fusion` and its siblings (many billed calls per request). */
164
+ export function isFanoutSlug(model) {
165
+ const route = openrouterRoute(model);
166
+ return route !== undefined && OPENROUTER_FANOUT.has(route);
167
+ }
168
+ /** The caller's model, unless it names a router and the response says what served it. */
169
+ function billedModel(requested, response) {
170
+ const served = get(response, "model");
171
+ const route = openrouterRoute(requested);
172
+ if (route !== undefined && OPENROUTER_ROUTERS.has(route) && typeof served === "string" && served.trim()) {
173
+ return served.trim();
174
+ }
175
+ return requested ?? served;
176
+ }
177
+ /** OpenRouter's billed `usage.cost` for a fan-out slug; undefined when absent or not a sane number. */
178
+ function fanoutBilledCost(requested, usage) {
179
+ if (!isFanoutSlug(requested))
180
+ return undefined;
181
+ const cost = saneCost(get(usage, "cost"));
182
+ if (cost === undefined)
183
+ return undefined;
184
+ // BRING-YOUR-OWN-KEY: `usage.cost` is then only OpenRouter's charge and the provider's
185
+ // bill is `cost_details.upstream_inference_cost` (0/absent otherwise). The spend is the
186
+ // sum; a present but garbled upstream figure makes the cost unknown, never half-counted.
187
+ const upstreamRaw = getPath(usage, "cost_details", "upstream_inference_cost");
188
+ if (upstreamRaw === undefined || upstreamRaw === null)
189
+ return cost;
190
+ const upstream = saneCost(upstreamRaw);
191
+ return upstream === undefined ? undefined : cost + upstream;
192
+ }
193
+ /** A finite, non-negative dollar figure, else undefined (never a guessed number). */
194
+ function saneCost(value) {
195
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0)
196
+ return undefined;
197
+ return value;
198
+ }
124
199
  function extractOpenAI(response, model) {
125
200
  const usage = get(response, "usage");
126
201
  if (usage === undefined || usage === null) {
@@ -150,12 +225,16 @@ function extractOpenAI(response, model) {
150
225
  const reasoning = asInt(getPath(usage, "completion_tokens_details", "reasoning_tokens"));
151
226
  return {
152
227
  provider: OPENAI,
153
- model: model ?? get(response, "model"),
228
+ model: billedModel(model, response),
154
229
  inputTokens: freshInput > 0 ? freshInput : 0,
155
230
  outputTokens: out,
156
231
  cacheReadTokens: cached,
157
232
  cacheCreationTokens: 0,
158
233
  reasoningTokens: Math.min(reasoning, out),
234
+ // finish_reason nests under the first choice ("stop"/"length"/"content_filter"/
235
+ // "tool_calls"). Absent on a streaming final chunk whose choices is empty → undefined.
236
+ stopReason: asReason(get(first(get(response, "choices")), "finish_reason")),
237
+ billedCostUsd: fanoutBilledCost(model, usage),
159
238
  };
160
239
  }
161
240
  function extractAnthropic(response, model) {
@@ -183,6 +262,10 @@ function extractAnthropic(response, model) {
183
262
  // Never let a malformed breakdown push the 5-minute remainder negative.
184
263
  cacheCreationTokens: creation5m > 0 ? creation5m : 0,
185
264
  cacheCreation1hTokens: creation1h,
265
+ // Non-streaming carries stop_reason top-level; a STREAMING message_delta carries
266
+ // it under delta.stop_reason — read both so a streamed Fable fallback (MAR-209)
267
+ // is captured either way.
268
+ stopReason: asReason(get(response, "stop_reason") ?? getPath(response, "delta", "stop_reason")),
186
269
  };
187
270
  }
188
271
  function extractGemini(response, model) {
@@ -213,6 +296,11 @@ function extractGemini(response, model) {
213
296
  // thoughts already sit inside outputTokens (billed at the output rate);
214
297
  // carried here only for the reasoning-share detector, never above output.
215
298
  reasoningTokens: Math.min(thoughts, outputTokens),
299
+ // finishReason nests under the first candidate ("STOP"/"MAX_TOKENS"/"SAFETY"/
300
+ // "RECITATION") and may be an enum — stringified verbatim, never interpreted. The
301
+ // generateContent result nests candidates under `.response` (like usageMetadata),
302
+ // so read both; the JS SDK spells the field camelCase.
303
+ stopReason: asReason(get(first(get(response, "candidates") ?? getPath(response, "response", "candidates")), "finishReason")),
216
304
  };
217
305
  }
218
306
  function extractCohere(response, model) {
@@ -236,6 +324,8 @@ function extractCohere(response, model) {
236
324
  outputTokens: asInt(get(units, "output_tokens")),
237
325
  cacheReadTokens: 0,
238
326
  cacheCreationTokens: 0,
327
+ // Cohere v2 reports finish_reason top-level ("COMPLETE"/"MAX_TOKENS"/"ERROR").
328
+ stopReason: asReason(get(response, "finish_reason")),
239
329
  };
240
330
  }
241
331
  function extractBedrock(response, model) {
@@ -257,6 +347,9 @@ function extractBedrock(response, model) {
257
347
  outputTokens: asInt(get(usage, "outputTokens")),
258
348
  cacheReadTokens: asInt(get(usage, "cacheReadInputTokens")),
259
349
  cacheCreationTokens: asInt(get(usage, "cacheWriteInputTokens")),
350
+ // Converse reports stopReason ("end_turn"/"max_tokens"/"content_filtered"/
351
+ // "guardrail_intervened").
352
+ stopReason: asReason(get(response, "stopReason")),
260
353
  };
261
354
  }
262
355
  const EXTRACTORS = {
@@ -333,7 +426,85 @@ export function usageFromStreamChunk(chunk, provider, model) {
333
426
  /* not a readable message_start either */
334
427
  }
335
428
  }
336
- return undefined;
429
+ return usageFromBedrockStreamEvent(chunk, model);
430
+ }
431
+ /**
432
+ * The usage a Bedrock STREAMING event carries, or `undefined` (MAR-1518).
433
+ *
434
+ * Both streaming calls put the counts one level below where `extractBedrock` looks:
435
+ * `converseStream`'s terminal `metadata` event nests the Converse usage block, and
436
+ * `invokeModelWithResponseStream`'s terminal `chunk.bytes` decodes to JSON carrying
437
+ * `amazon-bedrock-invocationMetrics` (no cache breakdown, so those buckets read 0).
438
+ * Ported from the Python SDK's `_usage_from_bedrock_stream_event`.
439
+ */
440
+ function usageFromBedrockStreamEvent(event, model) {
441
+ const meta = get(event, "metadata");
442
+ if (meta !== undefined && meta !== null && get(meta, "usage") !== undefined) {
443
+ try {
444
+ return extractBedrock(meta, model);
445
+ }
446
+ catch {
447
+ return undefined;
448
+ }
449
+ }
450
+ const raw = getPath(event, "chunk", "bytes");
451
+ if (raw === undefined || raw === null)
452
+ return undefined;
453
+ try {
454
+ const text = typeof raw === "string" ? raw : new TextDecoder().decode(raw);
455
+ return bedrockInvokePayloadUsage(JSON.parse(text), model);
456
+ }
457
+ catch {
458
+ return undefined;
459
+ }
460
+ }
461
+ /**
462
+ * The usage a decoded `invokeModelWithResponseStream` payload carries, or `undefined`
463
+ * (MAR-1535 #1).
464
+ *
465
+ * The payload carries `amazon-bedrock-invocationMetrics` (`inputTokenCount`/`outputTokenCount`).
466
+ * For an Anthropic model it ALSO wraps the Messages event the model streamed — `message_start`
467
+ * nests the input and CACHE counts under `message.usage`, and `message_delta` puts the final
468
+ * output tokens at the top level. Reading only the metrics block metered a cache-heavy call as
469
+ * `0` cache tokens, understating its cost; this reads both and max-merges them, and takes the
470
+ * cache buckets from the metrics block too when AWS reports them (`cacheReadInputTokenCount` /
471
+ * `cacheWriteInputTokenCount`).
472
+ */
473
+ function bedrockInvokePayloadUsage(payload, model) {
474
+ let got;
475
+ const metrics = get(payload, "amazon-bedrock-invocationMetrics");
476
+ if (metrics !== undefined && metrics !== null) {
477
+ const inp = get(metrics, "inputTokenCount");
478
+ const out = get(metrics, "outputTokenCount");
479
+ const cr = get(metrics, "cacheReadInputTokenCount");
480
+ const cw = get(metrics, "cacheWriteInputTokenCount");
481
+ if (inp !== undefined || out !== undefined || cr !== undefined || cw !== undefined) {
482
+ got = {
483
+ provider: BEDROCK,
484
+ model,
485
+ inputTokens: asInt(inp),
486
+ outputTokens: asInt(out),
487
+ cacheReadTokens: asInt(cr),
488
+ cacheCreationTokens: asInt(cw),
489
+ };
490
+ }
491
+ }
492
+ const message = get(payload, "message");
493
+ const nested = message !== undefined && message !== null && get(message, "usage") !== undefined;
494
+ const evt = nested ? message : get(payload, "usage") !== undefined ? payload : undefined;
495
+ if (evt !== undefined) {
496
+ let anthropic;
497
+ try {
498
+ anthropic = extractUsage(evt, { provider: ANTHROPIC, model });
499
+ }
500
+ catch {
501
+ anthropic = undefined;
502
+ }
503
+ if (anthropic !== undefined) {
504
+ got = got === undefined ? anthropic : mergeStreamUsage(got, anthropic);
505
+ }
506
+ }
507
+ return got;
337
508
  }
338
509
  /**
339
510
  * Merge two per-chunk usages, taking the MAX of each token bucket.
@@ -354,8 +525,46 @@ export function mergeStreamUsage(a, b) {
354
525
  cacheCreationTokens: Math.max(a.cacheCreationTokens, b.cacheCreationTokens),
355
526
  cacheCreation1hTokens: Math.max(a.cacheCreation1hTokens ?? 0, b.cacheCreation1hTokens ?? 0),
356
527
  reasoningTokens: Math.max(a.reasoningTokens ?? 0, b.reasoningTokens ?? 0),
528
+ // Only a usage-bearing chunk reaches this merge, so it sees only a reason that rode
529
+ // WITH usage (Anthropic's message_delta, Gemini's final chunk, a seller that puts
530
+ // finish_reason on its usage chunk). A reason on a usage-less chunk (OpenAI's finish
531
+ // chunk, Bedrock's messageStop) is read by StreamUsageAccumulator instead (MAR-1516).
532
+ stopReason: a.stopReason ?? b.stopReason,
533
+ // A fan-out stream's billed cost rides its final usage chunk (MAR-1309).
534
+ billedCostUsd: a.billedCostUsd ?? b.billedCostUsd,
357
535
  };
358
536
  }
537
+ /**
538
+ * The stop reason one stream chunk carries, if any. Never throws.
539
+ *
540
+ * A stream rarely puts the reason and the usage on the same chunk (MAR-1516). OpenAI's
541
+ * finish chunk has no `usage` and the usage chunk after it has empty `choices`; Bedrock
542
+ * `converseStream` sends `stopReason` in `messageStop` and usage in a separate
543
+ * `metadata` event. A reader that only looks at usage-bearing chunks records every
544
+ * streamed call with no reason, so this reads it from whichever chunk holds it.
545
+ */
546
+ export function streamChunkStopReason(chunk) {
547
+ try {
548
+ let reason = get(first(get(chunk, "choices")), "finish_reason") ?? // OpenAI
549
+ getPath(chunk, "delta", "stop_reason") ?? // Anthropic message_delta
550
+ getPath(chunk, "messageStop", "stopReason"); // Bedrock converseStream
551
+ if (reason === undefined || reason === null) {
552
+ const raw = getPath(chunk, "chunk", "bytes"); // Bedrock invoke stream
553
+ if (raw !== undefined && raw !== null) {
554
+ const text = typeof raw === "string" ? raw : new TextDecoder().decode(raw);
555
+ const payload = JSON.parse(text);
556
+ reason =
557
+ getPath(payload, "delta", "stop_reason") ??
558
+ get(payload, "stop_reason") ??
559
+ get(payload, "completionReason");
560
+ }
561
+ }
562
+ return asReason(reason);
563
+ }
564
+ catch {
565
+ return undefined;
566
+ }
567
+ }
359
568
  /**
360
569
  * Accumulates the metered usage of one STREAMING call across its chunks.
361
570
  *
@@ -370,6 +579,7 @@ export class StreamUsageAccumulator {
370
579
  provider;
371
580
  model;
372
581
  usage = undefined;
582
+ stopReason = undefined;
373
583
  // Explicit assignment (not constructor parameter properties) so the source is
374
584
  // erasable TypeScript — `node --experimental-strip-types` runs it with no build.
375
585
  constructor(provider, model) {
@@ -378,6 +588,7 @@ export class StreamUsageAccumulator {
378
588
  }
379
589
  /** Fold one chunk's usage (if any) into the running total. Never throws. */
380
590
  observe(chunk) {
591
+ this.stopReason = streamChunkStopReason(chunk) ?? this.stopReason;
381
592
  let u;
382
593
  try {
383
594
  u = usageFromStreamChunk(chunk, this.provider, this.model);
@@ -391,7 +602,10 @@ export class StreamUsageAccumulator {
391
602
  }
392
603
  /** The accumulated usage, or `undefined` if the stream carried no usage. */
393
604
  finalize() {
394
- return this.usage;
605
+ if (this.usage === undefined)
606
+ return undefined;
607
+ // The usage-bearing chunk's own reason wins; otherwise the one another chunk carried.
608
+ return { ...this.usage, stopReason: this.usage.stopReason ?? this.stopReason };
395
609
  }
396
610
  }
397
611
  //# sourceMappingURL=providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * margin-meter/vitest — turn a vitest/jest JSON result file into outcomes.
3
+ *
4
+ * The TypeScript test-runner adapter, the analog of the Python
5
+ * `margin_meter.pytest_plugin`. A unit-test suite is already an eval harness:
6
+ * each test is a pass/fail verdict graded by code assertions against a
7
+ * known-correct expectation — a *ground-truth*, *code* grade, which is exactly
8
+ * the honest denominator Margin's outcome intake wants
9
+ * (`docs/INTEGRATION_LADDER.md` rung 2, and rung 6's grading provenance). So the
10
+ * whole of rung 2 — "their evals report pass/fail" — is available for the most
11
+ * common JS/TS grading path with no hand-written `POST`.
12
+ *
13
+ * ## One adapter, two frameworks
14
+ *
15
+ * This is a JSON-results CONSUMER, not a runtime reporter, because that reads a
16
+ * file the customer already produces and drags in no test-framework dependency —
17
+ * the same design as the promptfoo/braintrust/langsmith adapters. Both dominant
18
+ * JS test runners emit the SAME jest-compatible JSON, so one adapter covers
19
+ * both:
20
+ *
21
+ * vitest run --reporter=json --outputFile=results.json # vitest
22
+ * jest --json --outputFile=results.json # jest
23
+ *
24
+ * import { MarginMeter, vitest } from "margin-meter";
25
+ * const meter = new MarginMeter(); // MARGIN_INGEST_URL/KEY from env
26
+ * const data = JSON.parse(await readFile("results.json", "utf8"));
27
+ * await vitest.recordResults(meter, data, "my-test-suite");
28
+ *
29
+ * The mapping mirrors the pytest plugin's, on purpose — the SDKs must not drift:
30
+ *
31
+ * - `passed` ← the assertion `status`: `passed` → true, `failed` →
32
+ * false. Any other status (`skipped`/`todo`/`pending`/`disabled`) is NOT a
33
+ * verdict and is SKIPPED — recording a skip as a pass or a fail would
34
+ * fabricate an outcome the suite never produced.
35
+ * - `qualityScore` ← `1.0` / `0.0` (a binary ground-truth grade). Always
36
+ * supplied: the ingest layer discards `quality_method`/`grader_kind` on a
37
+ * scoreless outcome, so the score is what lights the grading provenance.
38
+ * - `qualityMethod`/`graderKind` ← `ground_truth`/`code`, ASSERTED, never
39
+ * inferred — a code assertion IS a ground-truth code grade, exactly as the
40
+ * pytest plugin asserts. (Unlike promptfoo/braintrust, which grade several
41
+ * ways and must derive the signature; a unit test is unambiguously code.)
42
+ * - `link` ← the assertion `fullName`, else its ancestor titles + its
43
+ * title, else the file name + row index — for traceability back to the exact
44
+ * test. Truncated to 512 (a lossy link beats a lost outcome).
45
+ * - a test FILE that crashed on load/collection (a failing file status with no
46
+ * per-test results) records no outcome — there is no honest count of the
47
+ * tests it would have produced — but it WARNS, so a fully broken run is not
48
+ * silently read as a clean one.
49
+ *
50
+ * ## The honest limit — rung 8 is not reachable here, and that is stated, not defaulted
51
+ *
52
+ * The jest/vitest JSON format carries no per-test value field, so a
53
+ * value-per-outcome numerator (rung 8) cannot ride this FILE path. Absent is
54
+ * the honest cost-per-outcome default — never coerced to `0`. The route to
55
+ * rung 8 from a test suite is the RUNTIME path (`@pytest.mark.margin_value` in
56
+ * Python), and it lives in this same module: {@link MarginVitestReporter} runs
57
+ * inside the suite and reads `task.meta.marginValue`. Use the file consumer
58
+ * when you already have a results file; use the reporter when you want value.
59
+ *
60
+ * Two design promises, same as the sibling adapters: it consumes the file the
61
+ * customer already produces (no new harness), and it is fail-safe — a delivery
62
+ * fault on one row warns and is counted, never aborting the batch.
63
+ */
64
+ import type { RecordOutcomeInput } from "./index.ts";
65
+ /** Where a warning goes. Defaults to `process.emitWarning` so a delivery
66
+ * problem is visible without crashing the host; a test injects a collector. */
67
+ export type WarnFn = (message: string) => void;
68
+ /** Map a jest/vitest assertion `status` to a pass/fail verdict, or `undefined`
69
+ * when the status is not a verdict at all (`skipped`/`todo`/`pending`/
70
+ * `disabled`/unknown). A skip is neither a pass nor a fail, so it is dropped
71
+ * rather than fabricated. */
72
+ export declare function verdictFromStatus(status: unknown): boolean | undefined;
73
+ /** A traceable link back to the exact test: the assertion's `fullName` if the
74
+ * runner wrote one, else its ancestor titles joined with its title, else the
75
+ * test file name plus the row index. */
76
+ export declare function linkFromAssertion(assertion: unknown, fileName: unknown, index: number): string;
77
+ /** One assertion result paired with the test file it came from (for the link
78
+ * fallback). {@link extractAssertions} produces these. */
79
+ export interface FlatAssertion {
80
+ assertion: Record<string, unknown>;
81
+ fileName?: string;
82
+ }
83
+ /** Flatten a parsed vitest/jest JSON output to a per-test list. The canonical
84
+ * shape is `{ testResults: [{ name, assertionResults: [...] }] }` (jest's
85
+ * `--json`, vitest's `--reporter=json`); a bare array is treated as an
86
+ * already-flattened list of assertion results, for convenience and testing. */
87
+ export declare function extractAssertions(data: unknown): FlatAssertion[];
88
+ /** Names of test files that failed with no per-test results — a suite that
89
+ * crashed on load/collection. These carry no recordable verdict (there is no
90
+ * honest count of tests a crashed suite "would have" produced), so they are NOT
91
+ * turned into outcomes; {@link recordResults} warns for each so a fully broken
92
+ * run is not silently read as a clean one — the whole point of an honest
93
+ * denominator. */
94
+ export declare function failedEmptySuites(data: unknown): string[];
95
+ /** Fields for {@link outcomeInput}. */
96
+ export interface OutcomeInputArgs {
97
+ workflowId: string;
98
+ passed: boolean;
99
+ link: string;
100
+ isSimulated?: boolean;
101
+ /** Opt-in business value (rung 8). Reachable only from the runtime reporter
102
+ * (`task.meta.marginValue`); the file-consumer path never supplies it, since
103
+ * the jest/vitest JSON carries no value field. Absent stays absent. */
104
+ valueUsd?: number;
105
+ }
106
+ /** Translate one code-graded test verdict into `MarginMeter.recordOutcome`
107
+ * input. The grader signature is asserted (`ground_truth`/`code`) because a
108
+ * unit test is unambiguously a code grade. `valueUsd` rides only when supplied
109
+ * (never defaulted to 0). */
110
+ export declare function outcomeInput(args: OutcomeInputArgs): RecordOutcomeInput;
111
+ /** Options shared by the assertion-level translators. */
112
+ export interface TranslateOptions {
113
+ workflowId: string;
114
+ index?: number;
115
+ isSimulated?: boolean;
116
+ }
117
+ /** Full translation of one flattened assertion, or `undefined` if its status is
118
+ * not a real verdict (a skip/todo/pending is dropped, never fabricated). */
119
+ export declare function assertionToOutcomeInput(item: FlatAssertion, opts: TranslateOptions): RecordOutcomeInput | undefined;
120
+ /** Yield `recordOutcome` inputs for every real verdict in a parsed vitest/jest
121
+ * output (any envelope shape {@link extractAssertions} understands). */
122
+ export declare function iterOutcomes(data: unknown, opts: {
123
+ workflowId: string;
124
+ isSimulated?: boolean;
125
+ }): RecordOutcomeInput[];
126
+ /** The minimal meter surface {@link recordResults} needs — satisfied by
127
+ * `MarginMeter`, kept as a structural type so this module imports no runtime
128
+ * value from `index.ts`. */
129
+ export interface OutcomeSink {
130
+ recordOutcome(input: RecordOutcomeInput): Promise<unknown>;
131
+ flush(): Promise<void>;
132
+ }
133
+ /** How one `recordResults` batch landed. */
134
+ export interface RecordSummary {
135
+ recorded: number;
136
+ errors: number;
137
+ skipped: number;
138
+ }
139
+ /** Emit an outcome per verdict in a parsed vitest/jest output through `meter`.
140
+ * Fail-safe: a delivery fault on one row warns and counts an error; it never
141
+ * aborts the batch. Non-verdict rows (skips/todos/pending) are counted as
142
+ * skipped. */
143
+ export declare function recordResults(meter: OutcomeSink, data: unknown, workflowId: string, opts?: {
144
+ isSimulated?: boolean;
145
+ onWarn?: WarnFn;
146
+ }): Promise<RecordSummary>;
147
+ /** Read an opt-in `marginValue` off a task's `meta` — the value-per-outcome
148
+ * numerator (rung 8). Returns the USD amount, or `undefined` when the key is
149
+ * absent (the normal cost-per-outcome case). Throws on a malformed value
150
+ * (including an explicit `null`, i.e. present-but-malformed) so the caller can
151
+ * warn and drop it while keeping the pass/fail.
152
+ *
153
+ * An explicit `undefined` (`meta.marginValue = undefined`) is treated as absent
154
+ * — setting a meta key to `undefined` is not a value a customer meant to
155
+ * supply. This is the one intentional divergence from the file-adapters'
156
+ * `valueFrom*`, and it only ever drops-silently rather than fabricating. */
157
+ export declare function valueFromTaskMeta(meta: unknown): number | undefined;
158
+ /** A minimal structural view of a vitest task — duck-typed against vitest's
159
+ * documented reporter task tree so this module imports NOTHING from vitest and
160
+ * is not pinned to one of its versions. A suite carries child `tasks`; a test
161
+ * carries a `result.state`. */
162
+ export interface VitestTask {
163
+ type?: string;
164
+ name?: string;
165
+ result?: {
166
+ state?: string;
167
+ };
168
+ meta?: Record<string, unknown>;
169
+ tasks?: unknown[];
170
+ }
171
+ /** Map a vitest task result state to a pass/fail verdict, or `undefined` when it
172
+ * is not a verdict (`skip`/`todo`/`queued`/absent — a skipped or not-yet-run
173
+ * test is neither a pass nor a fail, so it is dropped, never fabricated). */
174
+ export declare function verdictFromState(state: unknown): boolean | undefined;
175
+ /** One leaf test found in the task tree, with the suite path that leads to it. */
176
+ export interface WalkedTest {
177
+ task: Record<string, unknown>;
178
+ path: string[];
179
+ }
180
+ /** Depth-first walk of a vitest task tree, yielding every LEAF test together
181
+ * with its ancestor suite names. A node is a CONTAINER (a suite, or a file
182
+ * whose `tasks` are its top-level tests) exactly when it has a `tasks` array —
183
+ * regardless of whether that array is empty — and is recursed into, never
184
+ * recorded. Everything else is a leaf test.
185
+ *
186
+ * ⛔ The container test is the PRESENCE of `tasks`, not its length. vitest emits
187
+ * a file that CRASHED on collection as a suite node with `tasks: []` AND
188
+ * `result.state: "fail"`; a length check would misread that as a failed leaf
189
+ * test and fabricate a `passed:false` code-graded outcome for a file that ran
190
+ * zero tests — the exact over-claim the file-consumer path refuses. A real test
191
+ * never carries a `tasks` property, so this classification keeps every genuine
192
+ * verdict while dropping the crashed/empty suite. */
193
+ export declare function walkTasks(nodes: unknown, ancestors?: string[]): WalkedTest[];
194
+ /** Yield `recordOutcome` inputs for every real verdict in a vitest `files` tree
195
+ * (the argument vitest passes a reporter's `onFinished`). A test's value rides
196
+ * from `task.meta.marginValue`; a malformed value warns and drops the value,
197
+ * keeping the pass/fail. */
198
+ export declare function iterTaskOutcomes(files: unknown, opts: {
199
+ workflowId: string;
200
+ isSimulated?: boolean;
201
+ onWarn?: WarnFn;
202
+ }): RecordOutcomeInput[];
203
+ /** Options for {@link MarginVitestReporter}. */
204
+ export interface MarginVitestReporterOptions {
205
+ /** The workflow every test in this suite is recorded under. Falls back to
206
+ * `MARGIN_VITEST_WORKFLOW` in the environment; with neither, the reporter is
207
+ * a no-op (and warns once) — installing it never silently records to nowhere. */
208
+ workflowId?: string;
209
+ /** The sink outcomes are emitted through. Injected in tests; in production it
210
+ * is left undefined and a real `MarginMeter` (reading `MARGIN_INGEST_URL`/
211
+ * `MARGIN_INGEST_KEY` from the env) is lazily constructed on first finish. */
212
+ meter?: OutcomeSink;
213
+ isSimulated?: boolean;
214
+ onWarn?: WarnFn;
215
+ }
216
+ /** A vitest reporter that records every test as a code-graded outcome and reads
217
+ * an opt-in per-test value off `task.meta.marginValue` (rung 8). It implements
218
+ * only the `onFinished(files)` hook — the one vitest calls with the completed
219
+ * task tree — and is fail-safe: a delivery or config fault warns, and NOTHING
220
+ * it does throws into the test run. */
221
+ export declare class MarginVitestReporter {
222
+ private readonly opts;
223
+ /** The last batch's summary — handy for a customer's own assertions and for
224
+ * the hermetic tests. */
225
+ summary: RecordSummary;
226
+ constructor(opts?: MarginVitestReporterOptions);
227
+ private resolveWorkflow;
228
+ private resolveMeter;
229
+ /** vitest's end-of-run hook. `files` is the completed task tree. */
230
+ onFinished(files?: unknown): Promise<void>;
231
+ }
232
+ //# sourceMappingURL=vitest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"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"}