@vitest-evals/core 0.13.0 → 0.13.1
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.mts +32 -21
- package/dist/index.d.ts +32 -21
- package/dist/index.js +49 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +49 -22
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -526,22 +526,23 @@ type HarnessRunError = Error & {
|
|
|
526
526
|
};
|
|
527
527
|
|
|
528
528
|
/**
|
|
529
|
-
* Flattens every recorded tool call from a normalized session.
|
|
529
|
+
* Flattens every recorded tool call from a normalized run or session.
|
|
530
530
|
*
|
|
531
|
-
* @param
|
|
531
|
+
* @param source - Normalized run or session produced by a harness.
|
|
532
532
|
*
|
|
533
533
|
* @example
|
|
534
534
|
* ```ts
|
|
535
|
-
* const names = toolCalls(result
|
|
535
|
+
* const names = toolCalls(result).map((call) => call.name);
|
|
536
536
|
*
|
|
537
537
|
* expect(names).toEqual(["lookupInvoice", "createRefund"]);
|
|
538
538
|
* ```
|
|
539
539
|
*/
|
|
540
|
+
declare function toolCalls(run: HarnessRun): ToolCallRecord[];
|
|
540
541
|
declare function toolCalls(session: NormalizedSession): ToolCallRecord[];
|
|
541
542
|
/**
|
|
542
|
-
* Flattens every recorded span from a normalized harness run.
|
|
543
|
+
* Flattens every recorded span from a normalized harness run or trace list.
|
|
543
544
|
*
|
|
544
|
-
* @param
|
|
545
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
545
546
|
*
|
|
546
547
|
* @example
|
|
547
548
|
* ```ts
|
|
@@ -549,93 +550,103 @@ declare function toolCalls(session: NormalizedSession): ToolCallRecord[];
|
|
|
549
550
|
* ```
|
|
550
551
|
*/
|
|
551
552
|
declare function spans(run: HarnessRun): NormalizedSpan[];
|
|
553
|
+
declare function spans(traces: readonly NormalizedTrace[] | undefined): NormalizedSpan[];
|
|
552
554
|
/**
|
|
553
555
|
* Alias for `spans(...)` for consumers that prefer trace-oriented naming.
|
|
554
556
|
*
|
|
555
|
-
* @param
|
|
557
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
556
558
|
*/
|
|
557
559
|
declare function traceSpans(run: HarnessRun): NormalizedSpan[];
|
|
560
|
+
declare function traceSpans(traces: readonly NormalizedTrace[] | undefined): NormalizedSpan[];
|
|
558
561
|
/**
|
|
559
|
-
* Returns spans of one coarse operation kind from a normalized run.
|
|
562
|
+
* Returns spans of one coarse operation kind from a normalized run or trace list.
|
|
560
563
|
*
|
|
561
|
-
* @param
|
|
564
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
562
565
|
* @param kind - Span kind to keep.
|
|
563
566
|
*/
|
|
564
567
|
declare function spansByKind(run: HarnessRun, kind: NonNullable<NormalizedSpan["kind"]>): NormalizedSpan[];
|
|
568
|
+
declare function spansByKind(traces: readonly NormalizedTrace[] | undefined, kind: NonNullable<NormalizedSpan["kind"]>): NormalizedSpan[];
|
|
565
569
|
/**
|
|
566
570
|
* Returns every span that explicitly failed or carries a normalized error.
|
|
567
571
|
*
|
|
568
|
-
* @param
|
|
572
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
569
573
|
*/
|
|
570
574
|
declare function failedSpans(run: HarnessRun): NormalizedSpan[];
|
|
575
|
+
declare function failedSpans(traces: readonly NormalizedTrace[] | undefined): NormalizedSpan[];
|
|
571
576
|
/**
|
|
572
577
|
* Filters normalized session messages by role.
|
|
573
578
|
*
|
|
574
|
-
* @param
|
|
579
|
+
* @param source - Normalized run or session produced by a harness.
|
|
575
580
|
* @param role - Message role to keep.
|
|
576
581
|
*
|
|
577
582
|
* @example
|
|
578
583
|
* ```ts
|
|
579
|
-
* const assistantText = messagesByRole(result
|
|
584
|
+
* const assistantText = messagesByRole(result, "assistant")
|
|
580
585
|
* .map((message) => message.content)
|
|
581
586
|
* .join("\n");
|
|
582
587
|
* ```
|
|
583
588
|
*/
|
|
589
|
+
declare function messagesByRole(run: HarnessRun, role: NormalizedMessage["role"]): NormalizedMessage[];
|
|
584
590
|
declare function messagesByRole(session: NormalizedSession, role: NormalizedMessage["role"]): NormalizedMessage[];
|
|
585
591
|
/**
|
|
586
592
|
* Returns every normalized system message from a session.
|
|
587
593
|
*
|
|
588
|
-
* @param
|
|
594
|
+
* @param source - Normalized run or session produced by a harness.
|
|
589
595
|
*
|
|
590
596
|
* @example
|
|
591
597
|
* ```ts
|
|
592
|
-
* const systemPrompts = systemMessages(result
|
|
598
|
+
* const systemPrompts = systemMessages(result);
|
|
593
599
|
* ```
|
|
594
600
|
*/
|
|
601
|
+
declare function systemMessages(run: HarnessRun): NormalizedMessage[];
|
|
595
602
|
declare function systemMessages(session: NormalizedSession): NormalizedMessage[];
|
|
596
603
|
/**
|
|
597
604
|
* Returns every normalized user message from a session.
|
|
598
605
|
*
|
|
599
|
-
* @param
|
|
606
|
+
* @param source - Normalized run or session produced by a harness.
|
|
600
607
|
*
|
|
601
608
|
* @example
|
|
602
609
|
* ```ts
|
|
603
|
-
* const firstPrompt = userMessages(result
|
|
610
|
+
* const firstPrompt = userMessages(result)[0]?.content;
|
|
604
611
|
* ```
|
|
605
612
|
*/
|
|
613
|
+
declare function userMessages(run: HarnessRun): NormalizedMessage[];
|
|
606
614
|
declare function userMessages(session: NormalizedSession): NormalizedMessage[];
|
|
607
615
|
/**
|
|
608
616
|
* Returns every normalized assistant message from a session.
|
|
609
617
|
*
|
|
610
|
-
* @param
|
|
618
|
+
* @param source - Normalized run or session produced by a harness.
|
|
611
619
|
*
|
|
612
620
|
* @example
|
|
613
621
|
* ```ts
|
|
614
|
-
* const finalAnswer = assistantMessages(
|
|
622
|
+
* const finalAnswer = assistantMessages(result).at(-1)?.content;
|
|
615
623
|
* ```
|
|
616
624
|
*/
|
|
625
|
+
declare function assistantMessages(run: HarnessRun): NormalizedMessage[];
|
|
617
626
|
declare function assistantMessages(session: NormalizedSession): NormalizedMessage[];
|
|
618
627
|
/**
|
|
619
628
|
* Returns the latest assistant message content, ignoring empty text messages.
|
|
620
629
|
*
|
|
621
|
-
* @param
|
|
630
|
+
* @param source - Normalized run or session produced by a harness.
|
|
622
631
|
*
|
|
623
632
|
* @example
|
|
624
633
|
* ```ts
|
|
625
|
-
* const finalAnswer = latestAssistantMessageContent(result
|
|
634
|
+
* const finalAnswer = latestAssistantMessageContent(result);
|
|
626
635
|
* ```
|
|
627
636
|
*/
|
|
637
|
+
declare function latestAssistantMessageContent(run: HarnessRun): JsonValue | undefined;
|
|
628
638
|
declare function latestAssistantMessageContent(session: NormalizedSession): JsonValue | undefined;
|
|
629
639
|
/**
|
|
630
640
|
* Returns every normalized tool message from a session.
|
|
631
641
|
*
|
|
632
|
-
* @param
|
|
642
|
+
* @param source - Normalized run or session produced by a harness.
|
|
633
643
|
*
|
|
634
644
|
* @example
|
|
635
645
|
* ```ts
|
|
636
|
-
* const toolOutputs = toolMessages(
|
|
646
|
+
* const toolOutputs = toolMessages(result).map((message) => message.content);
|
|
637
647
|
* ```
|
|
638
648
|
*/
|
|
649
|
+
declare function toolMessages(run: HarnessRun): NormalizedMessage[];
|
|
639
650
|
declare function toolMessages(session: NormalizedSession): NormalizedMessage[];
|
|
640
651
|
|
|
641
652
|
/** Harness metadata stored by vitest-evals on Vitest task metadata. */
|
package/dist/index.d.ts
CHANGED
|
@@ -526,22 +526,23 @@ type HarnessRunError = Error & {
|
|
|
526
526
|
};
|
|
527
527
|
|
|
528
528
|
/**
|
|
529
|
-
* Flattens every recorded tool call from a normalized session.
|
|
529
|
+
* Flattens every recorded tool call from a normalized run or session.
|
|
530
530
|
*
|
|
531
|
-
* @param
|
|
531
|
+
* @param source - Normalized run or session produced by a harness.
|
|
532
532
|
*
|
|
533
533
|
* @example
|
|
534
534
|
* ```ts
|
|
535
|
-
* const names = toolCalls(result
|
|
535
|
+
* const names = toolCalls(result).map((call) => call.name);
|
|
536
536
|
*
|
|
537
537
|
* expect(names).toEqual(["lookupInvoice", "createRefund"]);
|
|
538
538
|
* ```
|
|
539
539
|
*/
|
|
540
|
+
declare function toolCalls(run: HarnessRun): ToolCallRecord[];
|
|
540
541
|
declare function toolCalls(session: NormalizedSession): ToolCallRecord[];
|
|
541
542
|
/**
|
|
542
|
-
* Flattens every recorded span from a normalized harness run.
|
|
543
|
+
* Flattens every recorded span from a normalized harness run or trace list.
|
|
543
544
|
*
|
|
544
|
-
* @param
|
|
545
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
545
546
|
*
|
|
546
547
|
* @example
|
|
547
548
|
* ```ts
|
|
@@ -549,93 +550,103 @@ declare function toolCalls(session: NormalizedSession): ToolCallRecord[];
|
|
|
549
550
|
* ```
|
|
550
551
|
*/
|
|
551
552
|
declare function spans(run: HarnessRun): NormalizedSpan[];
|
|
553
|
+
declare function spans(traces: readonly NormalizedTrace[] | undefined): NormalizedSpan[];
|
|
552
554
|
/**
|
|
553
555
|
* Alias for `spans(...)` for consumers that prefer trace-oriented naming.
|
|
554
556
|
*
|
|
555
|
-
* @param
|
|
557
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
556
558
|
*/
|
|
557
559
|
declare function traceSpans(run: HarnessRun): NormalizedSpan[];
|
|
560
|
+
declare function traceSpans(traces: readonly NormalizedTrace[] | undefined): NormalizedSpan[];
|
|
558
561
|
/**
|
|
559
|
-
* Returns spans of one coarse operation kind from a normalized run.
|
|
562
|
+
* Returns spans of one coarse operation kind from a normalized run or trace list.
|
|
560
563
|
*
|
|
561
|
-
* @param
|
|
564
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
562
565
|
* @param kind - Span kind to keep.
|
|
563
566
|
*/
|
|
564
567
|
declare function spansByKind(run: HarnessRun, kind: NonNullable<NormalizedSpan["kind"]>): NormalizedSpan[];
|
|
568
|
+
declare function spansByKind(traces: readonly NormalizedTrace[] | undefined, kind: NonNullable<NormalizedSpan["kind"]>): NormalizedSpan[];
|
|
565
569
|
/**
|
|
566
570
|
* Returns every span that explicitly failed or carries a normalized error.
|
|
567
571
|
*
|
|
568
|
-
* @param
|
|
572
|
+
* @param source - Normalized run or trace list produced by a harness.
|
|
569
573
|
*/
|
|
570
574
|
declare function failedSpans(run: HarnessRun): NormalizedSpan[];
|
|
575
|
+
declare function failedSpans(traces: readonly NormalizedTrace[] | undefined): NormalizedSpan[];
|
|
571
576
|
/**
|
|
572
577
|
* Filters normalized session messages by role.
|
|
573
578
|
*
|
|
574
|
-
* @param
|
|
579
|
+
* @param source - Normalized run or session produced by a harness.
|
|
575
580
|
* @param role - Message role to keep.
|
|
576
581
|
*
|
|
577
582
|
* @example
|
|
578
583
|
* ```ts
|
|
579
|
-
* const assistantText = messagesByRole(result
|
|
584
|
+
* const assistantText = messagesByRole(result, "assistant")
|
|
580
585
|
* .map((message) => message.content)
|
|
581
586
|
* .join("\n");
|
|
582
587
|
* ```
|
|
583
588
|
*/
|
|
589
|
+
declare function messagesByRole(run: HarnessRun, role: NormalizedMessage["role"]): NormalizedMessage[];
|
|
584
590
|
declare function messagesByRole(session: NormalizedSession, role: NormalizedMessage["role"]): NormalizedMessage[];
|
|
585
591
|
/**
|
|
586
592
|
* Returns every normalized system message from a session.
|
|
587
593
|
*
|
|
588
|
-
* @param
|
|
594
|
+
* @param source - Normalized run or session produced by a harness.
|
|
589
595
|
*
|
|
590
596
|
* @example
|
|
591
597
|
* ```ts
|
|
592
|
-
* const systemPrompts = systemMessages(result
|
|
598
|
+
* const systemPrompts = systemMessages(result);
|
|
593
599
|
* ```
|
|
594
600
|
*/
|
|
601
|
+
declare function systemMessages(run: HarnessRun): NormalizedMessage[];
|
|
595
602
|
declare function systemMessages(session: NormalizedSession): NormalizedMessage[];
|
|
596
603
|
/**
|
|
597
604
|
* Returns every normalized user message from a session.
|
|
598
605
|
*
|
|
599
|
-
* @param
|
|
606
|
+
* @param source - Normalized run or session produced by a harness.
|
|
600
607
|
*
|
|
601
608
|
* @example
|
|
602
609
|
* ```ts
|
|
603
|
-
* const firstPrompt = userMessages(result
|
|
610
|
+
* const firstPrompt = userMessages(result)[0]?.content;
|
|
604
611
|
* ```
|
|
605
612
|
*/
|
|
613
|
+
declare function userMessages(run: HarnessRun): NormalizedMessage[];
|
|
606
614
|
declare function userMessages(session: NormalizedSession): NormalizedMessage[];
|
|
607
615
|
/**
|
|
608
616
|
* Returns every normalized assistant message from a session.
|
|
609
617
|
*
|
|
610
|
-
* @param
|
|
618
|
+
* @param source - Normalized run or session produced by a harness.
|
|
611
619
|
*
|
|
612
620
|
* @example
|
|
613
621
|
* ```ts
|
|
614
|
-
* const finalAnswer = assistantMessages(
|
|
622
|
+
* const finalAnswer = assistantMessages(result).at(-1)?.content;
|
|
615
623
|
* ```
|
|
616
624
|
*/
|
|
625
|
+
declare function assistantMessages(run: HarnessRun): NormalizedMessage[];
|
|
617
626
|
declare function assistantMessages(session: NormalizedSession): NormalizedMessage[];
|
|
618
627
|
/**
|
|
619
628
|
* Returns the latest assistant message content, ignoring empty text messages.
|
|
620
629
|
*
|
|
621
|
-
* @param
|
|
630
|
+
* @param source - Normalized run or session produced by a harness.
|
|
622
631
|
*
|
|
623
632
|
* @example
|
|
624
633
|
* ```ts
|
|
625
|
-
* const finalAnswer = latestAssistantMessageContent(result
|
|
634
|
+
* const finalAnswer = latestAssistantMessageContent(result);
|
|
626
635
|
* ```
|
|
627
636
|
*/
|
|
637
|
+
declare function latestAssistantMessageContent(run: HarnessRun): JsonValue | undefined;
|
|
628
638
|
declare function latestAssistantMessageContent(session: NormalizedSession): JsonValue | undefined;
|
|
629
639
|
/**
|
|
630
640
|
* Returns every normalized tool message from a session.
|
|
631
641
|
*
|
|
632
|
-
* @param
|
|
642
|
+
* @param source - Normalized run or session produced by a harness.
|
|
633
643
|
*
|
|
634
644
|
* @example
|
|
635
645
|
* ```ts
|
|
636
|
-
* const toolOutputs = toolMessages(
|
|
646
|
+
* const toolOutputs = toolMessages(result).map((message) => message.content);
|
|
637
647
|
* ```
|
|
638
648
|
*/
|
|
649
|
+
declare function toolMessages(run: HarnessRun): NormalizedMessage[];
|
|
639
650
|
declare function toolMessages(session: NormalizedSession): NormalizedMessage[];
|
|
640
651
|
|
|
641
652
|
/** Harness metadata stored by vitest-evals on Vitest task metadata. */
|
package/dist/index.js
CHANGED
|
@@ -197,40 +197,67 @@ var HarnessRunSchema = import_zod3.z.object({
|
|
|
197
197
|
}).strict();
|
|
198
198
|
|
|
199
199
|
// src/harness/helpers.ts
|
|
200
|
-
function toolCalls(
|
|
201
|
-
return
|
|
200
|
+
function toolCalls(source) {
|
|
201
|
+
return sessionFrom(source).messages.flatMap(
|
|
202
|
+
(message) => message.toolCalls ?? []
|
|
203
|
+
);
|
|
202
204
|
}
|
|
203
|
-
function spans(
|
|
204
|
-
return (
|
|
205
|
+
function spans(source) {
|
|
206
|
+
return spansFrom(source);
|
|
205
207
|
}
|
|
206
|
-
function traceSpans(
|
|
207
|
-
return
|
|
208
|
+
function traceSpans(source) {
|
|
209
|
+
return spansFrom(source);
|
|
208
210
|
}
|
|
209
|
-
function spansByKind(
|
|
210
|
-
return
|
|
211
|
+
function spansByKind(source, kind) {
|
|
212
|
+
return spansFrom(source).filter((span) => span.kind === kind);
|
|
211
213
|
}
|
|
212
|
-
function failedSpans(
|
|
213
|
-
return
|
|
214
|
+
function failedSpans(source) {
|
|
215
|
+
return spansFrom(source).filter(
|
|
214
216
|
(span) => span.status === "error" || span.error !== void 0
|
|
215
217
|
);
|
|
216
218
|
}
|
|
217
|
-
function messagesByRole(
|
|
218
|
-
return
|
|
219
|
+
function messagesByRole(source, role) {
|
|
220
|
+
return sessionFrom(source).messages.filter(
|
|
221
|
+
(message) => message.role === role
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
function systemMessages(source) {
|
|
225
|
+
return messagesByRoleFromSource(source, "system");
|
|
226
|
+
}
|
|
227
|
+
function userMessages(source) {
|
|
228
|
+
return messagesByRoleFromSource(source, "user");
|
|
229
|
+
}
|
|
230
|
+
function assistantMessages(source) {
|
|
231
|
+
return messagesByRoleFromSource(source, "assistant");
|
|
219
232
|
}
|
|
220
|
-
function
|
|
221
|
-
return
|
|
233
|
+
function latestAssistantMessageContent(source) {
|
|
234
|
+
return [...messagesByRoleFromSource(source, "assistant")].reverse().find(hasNonEmptyMessageContent)?.content;
|
|
222
235
|
}
|
|
223
|
-
function
|
|
224
|
-
return
|
|
236
|
+
function toolMessages(source) {
|
|
237
|
+
return messagesByRoleFromSource(source, "tool");
|
|
225
238
|
}
|
|
226
|
-
function
|
|
227
|
-
return
|
|
239
|
+
function sessionFrom(source) {
|
|
240
|
+
return "session" in source ? source.session : source;
|
|
228
241
|
}
|
|
229
|
-
function
|
|
230
|
-
|
|
242
|
+
function tracesFrom(source) {
|
|
243
|
+
if (source === void 0) {
|
|
244
|
+
return [];
|
|
245
|
+
}
|
|
246
|
+
if (isTraceList(source)) {
|
|
247
|
+
return source;
|
|
248
|
+
}
|
|
249
|
+
return source.traces ?? [];
|
|
250
|
+
}
|
|
251
|
+
function spansFrom(source) {
|
|
252
|
+
return tracesFrom(source).flatMap((trace) => trace.spans);
|
|
231
253
|
}
|
|
232
|
-
function
|
|
233
|
-
return
|
|
254
|
+
function isTraceList(source) {
|
|
255
|
+
return Array.isArray(source);
|
|
256
|
+
}
|
|
257
|
+
function messagesByRoleFromSource(source, role) {
|
|
258
|
+
return sessionFrom(source).messages.filter(
|
|
259
|
+
(message) => message.role === role
|
|
260
|
+
);
|
|
234
261
|
}
|
|
235
262
|
function hasNonEmptyMessageContent(message) {
|
|
236
263
|
return message.content !== void 0 && (typeof message.content !== "string" || message.content.trim().length > 0);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/json.ts","../src/harness/index.ts","../src/schema-utils.ts","../src/harness/helpers.ts","../src/report/metadata.ts","../src/report/vitest-json.ts","../src/report/workspace.ts"],"sourcesContent":["export {\n JsonObjectSchema,\n JsonPrimitiveSchema,\n JsonValueSchema,\n} from \"./json\";\nexport type { JsonPrimitive, JsonValue } from \"./json\";\n\nexport type {\n GenAiOperationName,\n GenAiOutputType,\n GenAiProviderName,\n GenAiSemanticAttributeKey,\n GenAiSemanticAttributes,\n GenAiTokenType,\n GenAiToolType,\n NormalizedSpanAttributeKey,\n NormalizedSpanAttributes,\n OpenTelemetrySemanticAttributeKey,\n OpenTelemetrySemanticAttributes,\n} from \"./genai\";\n\nexport {\n HarnessRunSchema,\n NormalizedErrorSchema,\n NormalizedMessageSchema,\n NormalizedSessionSchema,\n NormalizedSpanAttributesSchema,\n NormalizedSpanEventSchema,\n NormalizedSpanSchema,\n NormalizedTraceSchema,\n TimingSummarySchema,\n ToolCallRecordSchema,\n UsageSummarySchema,\n} from \"./harness\";\nexport type {\n HarnessRun,\n HarnessRunError,\n NormalizedError,\n NormalizedMessage,\n NormalizedSession,\n NormalizedSpan,\n NormalizedSpanEvent,\n NormalizedTrace,\n TimingSummary,\n ToolCallRecord,\n UsageSummary,\n} from \"./harness\";\n\nexport {\n assistantMessages,\n failedSpans,\n latestAssistantMessageContent,\n messagesByRole,\n spans,\n spansByKind,\n systemMessages,\n toolCalls,\n toolMessages,\n traceSpans,\n userMessages,\n} from \"./harness/helpers\";\n\nexport {\n EvalMetaSchema,\n EvalScoreSchema,\n EvalTaskMetaSchema,\n HarnessMetaSchema,\n readEvalTaskMeta,\n} from \"./report\";\nexport type {\n EvalMeta,\n EvalScore,\n EvalTaskMeta,\n HarnessMeta,\n} from \"./report\";\n\nexport {\n parseVitestJsonReport,\n VitestJsonAssertionSchema,\n VitestJsonFileSchema,\n VitestJsonLocationSchema,\n VitestJsonReportSchema,\n VitestJsonStatusSchema,\n} from \"./report\";\nexport type {\n VitestJsonAssertion,\n VitestJsonFile,\n VitestJsonLocation,\n VitestJsonReport,\n VitestJsonStatus,\n} from \"./report\";\n\nexport {\n collectReportWorkspace,\n parseReportWorkspace,\n REPORT_WORKSPACE_SCHEMA_VERSION,\n ReportCaseSchema,\n ReportRunSchema,\n ReportWorkspaceSchema,\n} from \"./report\";\nexport type {\n CollectReportWorkspaceOptions,\n ReportCase,\n ReportRun,\n ReportWorkspace,\n ReportWorkspaceInput,\n} from \"./report\";\n","import { z } from \"zod\";\n\n/** Primitive scalar values allowed in persisted vitest-evals JSON artifacts. */\nexport type JsonPrimitive = string | number | boolean | null;\n\n/** JSON-safe value shape used by reports, normalized sessions, and traces. */\nexport type JsonValue =\n | JsonPrimitive\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n/** Schema for primitive scalar values in persisted report artifacts. */\nexport const JsonPrimitiveSchema = z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n]);\n\n/** Schema for any JSON-safe value in persisted report artifacts. */\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n JsonPrimitiveSchema,\n z.array(JsonValueSchema),\n z.record(z.string(), JsonValueSchema),\n ]),\n);\n\n/** Schema for JSON-safe object records in persisted report artifacts. */\nexport const JsonObjectSchema = z.record(z.string(), JsonValueSchema);\n","import { z } from \"zod\";\nimport type { NormalizedSpanAttributes } from \"../genai\";\nimport { JsonObjectSchema, JsonValueSchema, type JsonValue } from \"../json\";\nimport { FiniteNumberSchema } from \"../schema-utils\";\n\n/** Normalized error attached to tool calls and spans. */\nexport type NormalizedError = {\n /** Human-readable failure message. */\n message: string;\n /** Optional provider or runtime error type. */\n type?: string;\n /** Extra JSON-safe error metadata. */\n [key: string]: JsonValue | undefined;\n};\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport const UsageSummarySchema = z\n .object({\n provider: z.string().optional(),\n model: z.string().optional(),\n inputTokens: FiniteNumberSchema.optional(),\n outputTokens: FiniteNumberSchema.optional(),\n reasoningTokens: FiniteNumberSchema.optional(),\n totalTokens: FiniteNumberSchema.optional(),\n toolCalls: FiniteNumberSchema.optional(),\n retries: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport type UsageSummary = {\n /** Provider that served the application run. */\n provider?: string;\n /** Model used for the application run. */\n model?: string;\n /** Input, prompt, or request tokens consumed by the run. */\n inputTokens?: number;\n /** Output or completion tokens produced by the run. */\n outputTokens?: number;\n /** Reasoning tokens reported by providers that expose them. */\n reasoningTokens?: number;\n /** Total token count reported by the provider or adapter. */\n totalTokens?: number;\n /** Count of tool calls observed during the run. */\n toolCalls?: number;\n /** Retry count observed during the run. */\n retries?: number;\n /** Provider-specific JSON-safe usage details. Cost estimates belong here. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport const TimingSummarySchema = z\n .object({\n totalMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport type TimingSummary = {\n /** End-to-end run duration in milliseconds. */\n totalMs?: number;\n /** Extra JSON-safe timing metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized error object captured in a tool call or trace span. */\nexport const NormalizedErrorSchema = z\n .object({\n message: z.string(),\n type: z.string().optional(),\n })\n .catchall(JsonValueSchema);\n\n/** Normalized tool call captured in a harness session. */\nexport const ToolCallRecordSchema = z\n .object({\n id: z.string().optional(),\n name: z.string(),\n arguments: JsonObjectSchema.optional(),\n result: JsonValueSchema.optional(),\n error: NormalizedErrorSchema.optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized tool call captured in a harness session. */\nexport type ToolCallRecord = {\n /** Provider or runtime tool-call id when one is available. */\n id?: string;\n /** Tool name as exposed to the agent or application runtime. */\n name: string;\n /** JSON-safe tool arguments after provider/runtime normalization. */\n arguments?: Record<string, JsonValue>;\n /** JSON-safe tool result returned by the application tool. */\n result?: JsonValue;\n /** Normalized tool error when execution failed. */\n error?: NormalizedError;\n /** ISO timestamp for the start of tool execution. */\n startedAt?: string;\n /** ISO timestamp for the end of tool execution. */\n finishedAt?: string;\n /** Tool execution duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe tool metadata for reporters and custom judges. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript message captured in a harness session. */\nexport const NormalizedMessageSchema = z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\", \"tool\"]),\n content: JsonValueSchema.optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript message captured in a harness session. */\nexport type NormalizedMessage = {\n /** Transcript role for the normalized message. */\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n /** JSON-safe message content. */\n content?: JsonValue;\n /** Tool calls associated with this message. */\n toolCalls?: ToolCallRecord[];\n /** Extra JSON-safe message metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript produced by an application harness. */\nexport const NormalizedSessionSchema = z\n .object({\n messages: z.array(NormalizedMessageSchema).default([]),\n provider: z.string().optional(),\n model: z.string().optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript produced by an application harness. */\nexport type NormalizedSession = {\n /** Ordered normalized transcript messages. */\n messages: NormalizedMessage[];\n /** Provider that produced the session when known. */\n provider?: string;\n /** Model that produced the session when known. */\n model?: string;\n /** Extra JSON-safe session metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Attribute schema attached to normalized traces, spans, and events. */\nexport const NormalizedSpanAttributesSchema = JsonObjectSchema;\n\n/** Event attached to a normalized span. */\nexport const NormalizedSpanEventSchema = z\n .object({\n name: z.string(),\n timestamp: z.string().optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n })\n .strict();\n\n/** Event attached to a normalized span. */\nexport type NormalizedSpanEvent = {\n /** Event name emitted by the runtime or harness. */\n name: string;\n /** ISO timestamp for the event when available. */\n timestamp?: string;\n /** JSON-safe event attributes. */\n attributes?: NormalizedSpanAttributes;\n};\n\n/** Normalized operation span captured during a harness run. */\nexport const NormalizedSpanSchema = z\n .object({\n id: z.string().optional(),\n traceId: z.string().optional(),\n parentId: z.string().optional(),\n name: z.string(),\n kind: z\n .enum([\"run\", \"agent\", \"model\", \"tool\", \"guardrail\", \"handoff\", \"custom\"])\n .optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n status: z.enum([\"ok\", \"error\"]).optional(),\n error: NormalizedErrorSchema.optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n events: z.array(NormalizedSpanEventSchema).optional(),\n })\n .strict();\n\n/** Normalized operation span captured during a harness run. */\nexport type NormalizedSpan = {\n /** Runtime or provider span id when one is available. */\n id?: string;\n /** Trace id this span belongs to. */\n traceId?: string;\n /** Parent span id when the runtime exposes hierarchy. */\n parentId?: string;\n /** Human-readable operation name. */\n name: string;\n /** Coarse operation kind used by reporters and judges. */\n kind?:\n | \"run\"\n | \"agent\"\n | \"model\"\n | \"tool\"\n | \"guardrail\"\n | \"handoff\"\n | \"custom\";\n /** ISO timestamp for the start of the span. */\n startedAt?: string;\n /** ISO timestamp for the end of the span. */\n finishedAt?: string;\n /** Span duration in milliseconds. */\n durationMs?: number;\n /** Success or failure status for the span. */\n status?: \"ok\" | \"error\";\n /** Normalized error when the span failed. */\n error?: NormalizedError;\n /** JSON-safe operation attributes. */\n attributes?: NormalizedSpanAttributes;\n /** Events observed inside this span. */\n events?: NormalizedSpanEvent[];\n};\n\n/** Normalized trace captured during a harness run. */\nexport const NormalizedTraceSchema = z\n .object({\n id: z.string().optional(),\n name: z.string().optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n spans: z.array(NormalizedSpanSchema).default([]),\n })\n .strict();\n\n/** Normalized trace captured during a harness run. */\nexport type NormalizedTrace = {\n /** Runtime or provider trace id when one is available. */\n id?: string;\n /** Human-readable trace or workflow name. */\n name?: string;\n /** ISO timestamp for the start of the trace. */\n startedAt?: string;\n /** ISO timestamp for the end of the trace. */\n finishedAt?: string;\n /** Trace duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe trace metadata. */\n metadata?: Record<string, JsonValue>;\n /** Spans that make up this trace. */\n spans: NormalizedSpan[];\n};\n\n/** Full normalized harness run as stored in Vitest assertion metadata. */\nexport const HarnessRunSchema = z\n .object({\n output: JsonValueSchema.optional(),\n session: NormalizedSessionSchema,\n usage: UsageSummarySchema,\n timings: TimingSummarySchema.optional(),\n artifacts: JsonObjectSchema.optional(),\n traces: z.array(NormalizedTraceSchema).optional(),\n errors: z.array(JsonObjectSchema).default([]),\n })\n .strict();\n\ntype OutputField<TOutput extends JsonValue | undefined> =\n undefined extends TOutput ? { output?: TOutput } : { output: TOutput };\n\n/**\n * Normalized result returned by every harness execution.\n *\n * @example\n * ```ts\n * const run: HarnessRun<{ status: \"approved\" }> = {\n * output: { status: \"approved\" },\n * session: {\n * messages: [\n * { role: \"user\", content: \"Refund invoice inv_123\" },\n * { role: \"assistant\", content: { status: \"approved\" } },\n * ],\n * },\n * usage: { totalTokens: 260 },\n * errors: [],\n * };\n * ```\n */\nexport type HarnessRun<\n TOutput extends JsonValue | undefined = JsonValue | undefined,\n> = OutputField<TOutput> & {\n /** Normalized transcript and provider/session metadata. */\n session: NormalizedSession;\n /** Stable provider usage units such as tokens, tools, and retries. */\n usage: UsageSummary;\n /** Optional timing summary for the run. */\n timings?: TimingSummary;\n /** JSON-safe run artifacts captured by the harness or test context. */\n artifacts?: Record<string, JsonValue>;\n /** Normalized traces and spans captured during execution. */\n traces?: NormalizedTrace[];\n /** Normalized errors captured during execution. */\n errors: Array<Record<string, JsonValue>>;\n};\n\n/** Error value with an attached partial or complete normalized harness run. */\nexport type HarnessRunError = Error & {\n /** Attached normalized harness run recovered from a thrown error. */\n vitestEvalsRun: HarnessRun;\n};\n","import { z } from \"zod\";\nimport type { JsonValue } from \"./json\";\n\nexport const FiniteNumberSchema = z.number().finite();\n\nexport const OptionalFiniteNumberSchema = z.preprocess(\n (value) =>\n value === null || (typeof value === \"number\" && !Number.isFinite(value))\n ? undefined\n : value,\n FiniteNumberSchema.optional(),\n);\n\nexport const NullableFiniteNumberSchema = z.preprocess(\n (value) =>\n typeof value === \"number\" && !Number.isFinite(value) ? null : value,\n FiniteNumberSchema.nullable().optional(),\n);\n\nexport function parseWithSchema<T>(\n schema: z.ZodType<T>,\n input: unknown,\n label: string,\n) {\n const parsed = schema.safeParse(input);\n if (parsed.success) {\n return parsed.data;\n }\n\n const reason = parsed.error.issues\n .slice(0, 3)\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\";\n return `${path}: ${issue.message}`;\n })\n .join(\"; \");\n throw new Error(`Invalid ${label}: ${reason}`);\n}\n\nexport function isJsonObject(\n value: unknown,\n): value is Record<string, JsonValue> {\n return isRecord(value);\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import type {\n HarnessRun,\n NormalizedMessage,\n NormalizedSession,\n NormalizedSpan,\n ToolCallRecord,\n} from \"./index\";\n\n/**\n * Flattens every recorded tool call from a normalized session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const names = toolCalls(result.session).map((call) => call.name);\n *\n * expect(names).toEqual([\"lookupInvoice\", \"createRefund\"]);\n * ```\n */\nexport function toolCalls(session: NormalizedSession): ToolCallRecord[] {\n return session.messages.flatMap((message) => message.toolCalls ?? []);\n}\n\n/**\n * Flattens every recorded span from a normalized harness run.\n *\n * @param run - Normalized harness run produced by a harness.\n *\n * @example\n * ```ts\n * const modelSpans = spans(result).filter((span) => span.kind === \"model\");\n * ```\n */\nexport function spans(run: HarnessRun): NormalizedSpan[] {\n return (run.traces ?? []).flatMap((trace) => trace.spans);\n}\n\n/**\n * Alias for `spans(...)` for consumers that prefer trace-oriented naming.\n *\n * @param run - Normalized harness run produced by a harness.\n */\nexport function traceSpans(run: HarnessRun): NormalizedSpan[] {\n return spans(run);\n}\n\n/**\n * Returns spans of one coarse operation kind from a normalized run.\n *\n * @param run - Normalized harness run produced by a harness.\n * @param kind - Span kind to keep.\n */\nexport function spansByKind(\n run: HarnessRun,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[] {\n return spans(run).filter((span) => span.kind === kind);\n}\n\n/**\n * Returns every span that explicitly failed or carries a normalized error.\n *\n * @param run - Normalized harness run produced by a harness.\n */\nexport function failedSpans(run: HarnessRun): NormalizedSpan[] {\n return spans(run).filter(\n (span) => span.status === \"error\" || span.error !== undefined,\n );\n}\n\n/**\n * Filters normalized session messages by role.\n *\n * @param session - Normalized session produced by a harness run.\n * @param role - Message role to keep.\n *\n * @example\n * ```ts\n * const assistantText = messagesByRole(result.session, \"assistant\")\n * .map((message) => message.content)\n * .join(\"\\n\");\n * ```\n */\nexport function messagesByRole(\n session: NormalizedSession,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[] {\n return session.messages.filter((message) => message.role === role);\n}\n\n/**\n * Returns every normalized system message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const systemPrompts = systemMessages(result.session);\n * ```\n */\nexport function systemMessages(session: NormalizedSession) {\n return messagesByRole(session, \"system\");\n}\n\n/**\n * Returns every normalized user message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const firstPrompt = userMessages(result.session)[0]?.content;\n * ```\n */\nexport function userMessages(session: NormalizedSession) {\n return messagesByRole(session, \"user\");\n}\n\n/**\n * Returns every normalized assistant message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const finalAnswer = assistantMessages(session).at(-1)?.content;\n * ```\n */\nexport function assistantMessages(\n session: NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRole(session, \"assistant\");\n}\n\n/**\n * Returns the latest assistant message content, ignoring empty text messages.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const finalAnswer = latestAssistantMessageContent(result.session);\n * ```\n */\nexport function latestAssistantMessageContent(session: NormalizedSession) {\n return [...assistantMessages(session)]\n .reverse()\n .find(hasNonEmptyMessageContent)?.content;\n}\n\n/**\n * Returns every normalized tool message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const toolOutputs = toolMessages(session).map((message) => message.content);\n * ```\n */\nexport function toolMessages(session: NormalizedSession) {\n return messagesByRole(session, \"tool\");\n}\n\nfunction hasNonEmptyMessageContent(message: NormalizedMessage) {\n return (\n message.content !== undefined &&\n (typeof message.content !== \"string\" || message.content.trim().length > 0)\n );\n}\n","import { z } from \"zod\";\nimport {\n HarnessRunSchema,\n NormalizedMessageSchema,\n NormalizedSessionSchema,\n NormalizedSpanEventSchema,\n NormalizedSpanSchema,\n NormalizedTraceSchema,\n TimingSummarySchema,\n ToolCallRecordSchema,\n UsageSummarySchema,\n} from \"../harness\";\nimport { JsonObjectSchema, JsonValueSchema } from \"../json\";\nimport { isJsonObject, NullableFiniteNumberSchema } from \"../schema-utils\";\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport const HarnessMetaSchema = z\n .object({\n name: z.string().optional(),\n run: HarnessRunSchema.optional(),\n })\n .strict();\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport type HarnessMeta = z.infer<typeof HarnessMetaSchema>;\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport const EvalScoreSchema = z\n .object({\n name: z.string().optional(),\n score: NullableFiniteNumberSchema,\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport type EvalScore = z.infer<typeof EvalScoreSchema>;\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport const EvalMetaSchema = z\n .object({\n scores: z.array(EvalScoreSchema).optional(),\n avgScore: NullableFiniteNumberSchema,\n output: JsonValueSchema.optional(),\n thresholdFailed: z.boolean().optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n })\n .strict();\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport type EvalMeta = z.infer<typeof EvalMetaSchema>;\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport const EvalTaskMetaSchema = z\n .object({\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport type EvalTaskMeta = z.infer<typeof EvalTaskMetaSchema>;\n\nconst LenientToolCallRecordSchema = ToolCallRecordSchema.strip();\nconst LenientMessageSchema = NormalizedMessageSchema.extend({\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\nconst LenientSessionSchema = NormalizedSessionSchema.extend({\n messages: z.array(LenientMessageSchema).default([]).catch([]),\n}).strip();\nconst LenientSpanEventSchema = NormalizedSpanEventSchema.strip();\nconst LenientSpanSchema = NormalizedSpanSchema.extend({\n events: z.array(LenientSpanEventSchema).optional().catch(undefined),\n}).strip();\nconst LenientTraceSchema = NormalizedTraceSchema.extend({\n spans: z.array(LenientSpanSchema).default([]).catch([]),\n}).strip();\nconst LenientHarnessRunSchema = HarnessRunSchema.extend({\n session: LenientSessionSchema,\n usage: UsageSummarySchema.strip().default({}),\n timings: TimingSummarySchema.strip().optional(),\n traces: z.array(LenientTraceSchema).optional().catch(undefined),\n}).strip();\nconst LenientHarnessMetaSchema = HarnessMetaSchema.extend({\n run: LenientHarnessRunSchema.optional().catch(undefined),\n}).strip();\nconst LenientEvalScoreSchema = EvalScoreSchema.strip();\nconst LenientEvalMetaSchema = EvalMetaSchema.extend({\n scores: z.array(LenientEvalScoreSchema).optional().catch(undefined),\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\n\n/** Reads eval metadata from an arbitrary Vitest assertion meta value. */\nexport function readEvalTaskMeta(input: unknown): EvalTaskMeta | undefined {\n if (!isJsonObject(input)) {\n return undefined;\n }\n\n const evalResult = LenientEvalMetaSchema.safeParse(input.eval);\n const harnessResult = LenientHarnessMetaSchema.safeParse(input.harness);\n const meta: EvalTaskMeta = {\n ...(evalResult.success && input.eval !== undefined\n ? { eval: evalResult.data }\n : {}),\n ...(harnessResult.success && input.harness !== undefined\n ? { harness: harnessResult.data }\n : {}),\n };\n\n return meta.eval || meta.harness ? meta : undefined;\n}\n","import { z } from \"zod\";\nimport {\n FiniteNumberSchema,\n OptionalFiniteNumberSchema,\n parseWithSchema,\n} from \"../schema-utils\";\n\n/** Status values emitted by Vitest JSON reports. */\nexport const VitestJsonStatusSchema = z.enum([\n \"passed\",\n \"failed\",\n \"skipped\",\n \"pending\",\n \"todo\",\n \"disabled\",\n]);\n\n/** Status values emitted by Vitest JSON reports. */\nexport type VitestJsonStatus = z.infer<typeof VitestJsonStatusSchema>;\n\n/** Source location attached to one Vitest assertion. */\nexport const VitestJsonLocationSchema = z\n .object({\n line: FiniteNumberSchema,\n column: FiniteNumberSchema,\n })\n .passthrough();\n\n/** Source location attached to one Vitest assertion. */\nexport type VitestJsonLocation = z.infer<typeof VitestJsonLocationSchema>;\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport const VitestJsonAssertionSchema = z\n .object({\n ancestorTitles: z.array(z.string()).default([]),\n fullName: z.string(),\n status: VitestJsonStatusSchema,\n title: z.string(),\n meta: z.unknown().optional(),\n duration: FiniteNumberSchema.nullable().optional(),\n failureMessages: z.array(z.string()).nullable().optional(),\n location: VitestJsonLocationSchema.nullable().optional(),\n tags: z.array(z.string()).optional(),\n })\n .passthrough();\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport type VitestJsonAssertion = z.infer<typeof VitestJsonAssertionSchema>;\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport const VitestJsonFileSchema = z\n .object({\n message: z.string(),\n name: z.string(),\n status: z.enum([\"failed\", \"passed\"]),\n startTime: OptionalFiniteNumberSchema,\n endTime: OptionalFiniteNumberSchema,\n assertionResults: z.array(VitestJsonAssertionSchema).default([]),\n })\n .passthrough();\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport type VitestJsonFile = z.infer<typeof VitestJsonFileSchema>;\n\n/** Top-level Vitest JSON reporter payload. */\nexport const VitestJsonReportSchema = z\n .object({\n numFailedTests: FiniteNumberSchema,\n numPassedTests: FiniteNumberSchema,\n numPendingTests: FiniteNumberSchema,\n numTodoTests: FiniteNumberSchema,\n numTotalTests: FiniteNumberSchema,\n startTime: FiniteNumberSchema,\n success: z.boolean(),\n testResults: z.array(VitestJsonFileSchema).default([]),\n })\n .passthrough();\n\n/** Top-level Vitest JSON reporter payload. */\nexport type VitestJsonReport = z.infer<typeof VitestJsonReportSchema>;\n\n/** Parses and validates an unknown value as a Vitest JSON report artifact. */\nexport function parseVitestJsonReport(input: unknown): VitestJsonReport {\n return parseWithSchema(VitestJsonReportSchema, input, \"Vitest JSON report\");\n}\n","import { z } from \"zod\";\nimport {\n EvalMetaSchema,\n HarnessMetaSchema,\n readEvalTaskMeta,\n} from \"./metadata\";\nimport { FiniteNumberSchema, parseWithSchema, isRecord } from \"../schema-utils\";\nimport {\n parseVitestJsonReport,\n VitestJsonLocationSchema,\n type VitestJsonAssertion,\n type VitestJsonReport,\n} from \"./vitest-json\";\nimport { VitestJsonStatusSchema } from \"./vitest-json\";\n\n/** Current schema version for collected report workspaces. */\nexport const REPORT_WORKSPACE_SCHEMA_VERSION = 1;\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport const ReportRunSchema = z\n .object({\n id: z.string(),\n source: z.string().optional(),\n status: z.enum([\"passed\", \"failed\"]),\n startedAt: FiniteNumberSchema.optional(),\n durationMs: FiniteNumberSchema.optional(),\n totals: z.object({\n total: FiniteNumberSchema,\n passed: FiniteNumberSchema,\n failed: FiniteNumberSchema,\n skipped: FiniteNumberSchema,\n evalTotal: FiniteNumberSchema,\n evalPassed: FiniteNumberSchema,\n evalFailed: FiniteNumberSchema,\n }),\n })\n .strict();\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport type ReportRun = z.infer<typeof ReportRunSchema>;\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport const ReportCaseSchema = z\n .object({\n id: z.string(),\n runId: z.string(),\n source: z.string().optional(),\n file: z.string(),\n displayFile: z.string(),\n title: z.string(),\n fullName: z.string(),\n ancestorTitles: z.array(z.string()),\n tags: z.array(z.string()).optional(),\n displayName: z.string(),\n status: VitestJsonStatusSchema,\n durationMs: FiniteNumberSchema.optional(),\n location: VitestJsonLocationSchema.optional(),\n failureMessages: z.array(z.string()).default([]),\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport type ReportCase = z.infer<typeof ReportCaseSchema>;\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport const ReportWorkspaceSchema = z\n .object({\n schemaVersion: z.literal(REPORT_WORKSPACE_SCHEMA_VERSION),\n runs: z.array(ReportRunSchema),\n cases: z.array(ReportCaseSchema),\n })\n .strict();\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport type ReportWorkspace = z.infer<typeof ReportWorkspaceSchema>;\n\n/** Input accepted when collecting one Vitest JSON report into a workspace. */\nexport type ReportWorkspaceInput =\n | VitestJsonReport\n | {\n report: VitestJsonReport;\n source?: string;\n };\n\n/** Options for collecting one or more Vitest JSON reports. */\nexport type CollectReportWorkspaceOptions = {\n /** Workspace prefix used to render source files as relative paths. */\n workspace?: string;\n};\n\n/** Parses and validates an unknown value as a collected report workspace. */\nexport function parseReportWorkspace(input: unknown): ReportWorkspace {\n return parseWithSchema(ReportWorkspaceSchema, input, \"report workspace\");\n}\n\n/** Collects eval and harness metadata from one or more Vitest JSON reports. */\nexport function collectReportWorkspace(\n input: ReportWorkspaceInput | ReportWorkspaceInput[],\n options: CollectReportWorkspaceOptions = {},\n): ReportWorkspace {\n const entries = Array.isArray(input) ? input : [input];\n const runs: ReportRun[] = [];\n const cases: ReportCase[] = [];\n\n entries.forEach((entry, index) => {\n const { report, source } = normalizeWorkspaceInput(entry);\n const runId = source ?? `run-${index + 1}`;\n const runCases: ReportCase[] = [];\n\n for (const file of report.testResults) {\n for (const assertion of file.assertionResults) {\n const meta = readEvalTaskMeta(assertion.meta);\n if (!meta) {\n continue;\n }\n\n runCases.push({\n id: createCaseId(runId, file.name, assertion),\n runId,\n ...(source ? { source } : {}),\n file: file.name,\n displayFile: normalizeReportPath(file.name, options.workspace),\n title: assertion.title,\n fullName: assertion.fullName,\n ancestorTitles: assertion.ancestorTitles,\n ...(assertion.tags ? { tags: assertion.tags } : {}),\n displayName: formatDisplayName(assertion),\n status: assertion.status,\n ...(typeof assertion.duration === \"number\"\n ? { durationMs: assertion.duration }\n : {}),\n ...(assertion.location ? { location: assertion.location } : {}),\n failureMessages: assertion.failureMessages ?? [],\n ...(meta.eval ? { eval: meta.eval } : {}),\n ...(meta.harness ? { harness: meta.harness } : {}),\n });\n }\n }\n\n runs.push({\n id: runId,\n ...(source ? { source } : {}),\n status:\n report.success &&\n runCases.every((testCase) => testCase.status !== \"failed\")\n ? \"passed\"\n : \"failed\",\n startedAt: report.startTime,\n durationMs: resolveRunDuration(report),\n totals: {\n total: report.numTotalTests,\n passed: report.numPassedTests,\n failed: report.numFailedTests,\n skipped: report.numPendingTests + report.numTodoTests,\n evalTotal: runCases.length,\n evalPassed: runCases.filter((testCase) => testCase.status === \"passed\")\n .length,\n evalFailed: runCases.filter((testCase) => testCase.status === \"failed\")\n .length,\n },\n });\n cases.push(...runCases);\n });\n\n return {\n schemaVersion: REPORT_WORKSPACE_SCHEMA_VERSION,\n runs,\n cases,\n };\n}\n\nfunction normalizeWorkspaceInput(input: ReportWorkspaceInput) {\n if (isVitestJsonReportLike(input)) {\n return {\n report: parseVitestJsonReport(input),\n };\n }\n\n if (isRecord(input) && \"report\" in input) {\n return {\n report: parseVitestJsonReport(input.report),\n source: typeof input.source === \"string\" ? input.source : undefined,\n };\n }\n\n return {\n report: parseVitestJsonReport(input),\n };\n}\n\nfunction isVitestJsonReportLike(input: unknown) {\n return isRecord(input) && Array.isArray(input.testResults);\n}\n\nfunction createCaseId(\n runId: string,\n file: string,\n assertion: VitestJsonAssertion,\n) {\n return [runId, file, assertion.location?.line ?? 0, assertion.fullName].join(\n \":\",\n );\n}\n\nfunction formatDisplayName(assertion: VitestJsonAssertion) {\n return [...assertion.ancestorTitles, assertion.title]\n .filter((part) => part.length > 0)\n .join(\" > \");\n}\n\nfunction resolveRunDuration(report: VitestJsonReport) {\n const intervals = report.testResults\n .map((file) => {\n const start = file.startTime;\n const end = file.endTime;\n if (!isFiniteNumber(start) || !isFiniteNumber(end) || end < start) {\n return undefined;\n }\n\n return {\n start,\n end,\n };\n })\n .filter((interval): interval is { start: number; end: number } =>\n Boolean(interval),\n );\n\n if (intervals.length === 0) {\n return undefined;\n }\n\n return (\n Math.max(...intervals.map((interval) => interval.end)) -\n Math.min(...intervals.map((interval) => interval.start))\n );\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction normalizeReportPath(path: string, workspace?: string) {\n const normalized = path.replace(/\\\\/g, \"/\");\n if (!workspace) {\n return normalized;\n }\n\n const workspacePath = workspace.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n if (\n normalized !== workspacePath &&\n !normalized.startsWith(`${workspacePath}/`)\n ) {\n return normalized;\n }\n\n return normalized.slice(workspacePath.length).replace(/^\\/+/, \"\");\n}\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/json.ts","../src/harness/index.ts","../src/schema-utils.ts","../src/harness/helpers.ts","../src/report/metadata.ts","../src/report/vitest-json.ts","../src/report/workspace.ts"],"sourcesContent":["export {\n JsonObjectSchema,\n JsonPrimitiveSchema,\n JsonValueSchema,\n} from \"./json\";\nexport type { JsonPrimitive, JsonValue } from \"./json\";\n\nexport type {\n GenAiOperationName,\n GenAiOutputType,\n GenAiProviderName,\n GenAiSemanticAttributeKey,\n GenAiSemanticAttributes,\n GenAiTokenType,\n GenAiToolType,\n NormalizedSpanAttributeKey,\n NormalizedSpanAttributes,\n OpenTelemetrySemanticAttributeKey,\n OpenTelemetrySemanticAttributes,\n} from \"./genai\";\n\nexport {\n HarnessRunSchema,\n NormalizedErrorSchema,\n NormalizedMessageSchema,\n NormalizedSessionSchema,\n NormalizedSpanAttributesSchema,\n NormalizedSpanEventSchema,\n NormalizedSpanSchema,\n NormalizedTraceSchema,\n TimingSummarySchema,\n ToolCallRecordSchema,\n UsageSummarySchema,\n} from \"./harness\";\nexport type {\n HarnessRun,\n HarnessRunError,\n NormalizedError,\n NormalizedMessage,\n NormalizedSession,\n NormalizedSpan,\n NormalizedSpanEvent,\n NormalizedTrace,\n TimingSummary,\n ToolCallRecord,\n UsageSummary,\n} from \"./harness\";\n\nexport {\n assistantMessages,\n failedSpans,\n latestAssistantMessageContent,\n messagesByRole,\n spans,\n spansByKind,\n systemMessages,\n toolCalls,\n toolMessages,\n traceSpans,\n userMessages,\n} from \"./harness/helpers\";\n\nexport {\n EvalMetaSchema,\n EvalScoreSchema,\n EvalTaskMetaSchema,\n HarnessMetaSchema,\n readEvalTaskMeta,\n} from \"./report\";\nexport type {\n EvalMeta,\n EvalScore,\n EvalTaskMeta,\n HarnessMeta,\n} from \"./report\";\n\nexport {\n parseVitestJsonReport,\n VitestJsonAssertionSchema,\n VitestJsonFileSchema,\n VitestJsonLocationSchema,\n VitestJsonReportSchema,\n VitestJsonStatusSchema,\n} from \"./report\";\nexport type {\n VitestJsonAssertion,\n VitestJsonFile,\n VitestJsonLocation,\n VitestJsonReport,\n VitestJsonStatus,\n} from \"./report\";\n\nexport {\n collectReportWorkspace,\n parseReportWorkspace,\n REPORT_WORKSPACE_SCHEMA_VERSION,\n ReportCaseSchema,\n ReportRunSchema,\n ReportWorkspaceSchema,\n} from \"./report\";\nexport type {\n CollectReportWorkspaceOptions,\n ReportCase,\n ReportRun,\n ReportWorkspace,\n ReportWorkspaceInput,\n} from \"./report\";\n","import { z } from \"zod\";\n\n/** Primitive scalar values allowed in persisted vitest-evals JSON artifacts. */\nexport type JsonPrimitive = string | number | boolean | null;\n\n/** JSON-safe value shape used by reports, normalized sessions, and traces. */\nexport type JsonValue =\n | JsonPrimitive\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n/** Schema for primitive scalar values in persisted report artifacts. */\nexport const JsonPrimitiveSchema = z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n]);\n\n/** Schema for any JSON-safe value in persisted report artifacts. */\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n JsonPrimitiveSchema,\n z.array(JsonValueSchema),\n z.record(z.string(), JsonValueSchema),\n ]),\n);\n\n/** Schema for JSON-safe object records in persisted report artifacts. */\nexport const JsonObjectSchema = z.record(z.string(), JsonValueSchema);\n","import { z } from \"zod\";\nimport type { NormalizedSpanAttributes } from \"../genai\";\nimport { JsonObjectSchema, JsonValueSchema, type JsonValue } from \"../json\";\nimport { FiniteNumberSchema } from \"../schema-utils\";\n\n/** Normalized error attached to tool calls and spans. */\nexport type NormalizedError = {\n /** Human-readable failure message. */\n message: string;\n /** Optional provider or runtime error type. */\n type?: string;\n /** Extra JSON-safe error metadata. */\n [key: string]: JsonValue | undefined;\n};\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport const UsageSummarySchema = z\n .object({\n provider: z.string().optional(),\n model: z.string().optional(),\n inputTokens: FiniteNumberSchema.optional(),\n outputTokens: FiniteNumberSchema.optional(),\n reasoningTokens: FiniteNumberSchema.optional(),\n totalTokens: FiniteNumberSchema.optional(),\n toolCalls: FiniteNumberSchema.optional(),\n retries: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport type UsageSummary = {\n /** Provider that served the application run. */\n provider?: string;\n /** Model used for the application run. */\n model?: string;\n /** Input, prompt, or request tokens consumed by the run. */\n inputTokens?: number;\n /** Output or completion tokens produced by the run. */\n outputTokens?: number;\n /** Reasoning tokens reported by providers that expose them. */\n reasoningTokens?: number;\n /** Total token count reported by the provider or adapter. */\n totalTokens?: number;\n /** Count of tool calls observed during the run. */\n toolCalls?: number;\n /** Retry count observed during the run. */\n retries?: number;\n /** Provider-specific JSON-safe usage details. Cost estimates belong here. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport const TimingSummarySchema = z\n .object({\n totalMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport type TimingSummary = {\n /** End-to-end run duration in milliseconds. */\n totalMs?: number;\n /** Extra JSON-safe timing metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized error object captured in a tool call or trace span. */\nexport const NormalizedErrorSchema = z\n .object({\n message: z.string(),\n type: z.string().optional(),\n })\n .catchall(JsonValueSchema);\n\n/** Normalized tool call captured in a harness session. */\nexport const ToolCallRecordSchema = z\n .object({\n id: z.string().optional(),\n name: z.string(),\n arguments: JsonObjectSchema.optional(),\n result: JsonValueSchema.optional(),\n error: NormalizedErrorSchema.optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized tool call captured in a harness session. */\nexport type ToolCallRecord = {\n /** Provider or runtime tool-call id when one is available. */\n id?: string;\n /** Tool name as exposed to the agent or application runtime. */\n name: string;\n /** JSON-safe tool arguments after provider/runtime normalization. */\n arguments?: Record<string, JsonValue>;\n /** JSON-safe tool result returned by the application tool. */\n result?: JsonValue;\n /** Normalized tool error when execution failed. */\n error?: NormalizedError;\n /** ISO timestamp for the start of tool execution. */\n startedAt?: string;\n /** ISO timestamp for the end of tool execution. */\n finishedAt?: string;\n /** Tool execution duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe tool metadata for reporters and custom judges. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript message captured in a harness session. */\nexport const NormalizedMessageSchema = z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\", \"tool\"]),\n content: JsonValueSchema.optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript message captured in a harness session. */\nexport type NormalizedMessage = {\n /** Transcript role for the normalized message. */\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n /** JSON-safe message content. */\n content?: JsonValue;\n /** Tool calls associated with this message. */\n toolCalls?: ToolCallRecord[];\n /** Extra JSON-safe message metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript produced by an application harness. */\nexport const NormalizedSessionSchema = z\n .object({\n messages: z.array(NormalizedMessageSchema).default([]),\n provider: z.string().optional(),\n model: z.string().optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript produced by an application harness. */\nexport type NormalizedSession = {\n /** Ordered normalized transcript messages. */\n messages: NormalizedMessage[];\n /** Provider that produced the session when known. */\n provider?: string;\n /** Model that produced the session when known. */\n model?: string;\n /** Extra JSON-safe session metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Attribute schema attached to normalized traces, spans, and events. */\nexport const NormalizedSpanAttributesSchema = JsonObjectSchema;\n\n/** Event attached to a normalized span. */\nexport const NormalizedSpanEventSchema = z\n .object({\n name: z.string(),\n timestamp: z.string().optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n })\n .strict();\n\n/** Event attached to a normalized span. */\nexport type NormalizedSpanEvent = {\n /** Event name emitted by the runtime or harness. */\n name: string;\n /** ISO timestamp for the event when available. */\n timestamp?: string;\n /** JSON-safe event attributes. */\n attributes?: NormalizedSpanAttributes;\n};\n\n/** Normalized operation span captured during a harness run. */\nexport const NormalizedSpanSchema = z\n .object({\n id: z.string().optional(),\n traceId: z.string().optional(),\n parentId: z.string().optional(),\n name: z.string(),\n kind: z\n .enum([\"run\", \"agent\", \"model\", \"tool\", \"guardrail\", \"handoff\", \"custom\"])\n .optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n status: z.enum([\"ok\", \"error\"]).optional(),\n error: NormalizedErrorSchema.optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n events: z.array(NormalizedSpanEventSchema).optional(),\n })\n .strict();\n\n/** Normalized operation span captured during a harness run. */\nexport type NormalizedSpan = {\n /** Runtime or provider span id when one is available. */\n id?: string;\n /** Trace id this span belongs to. */\n traceId?: string;\n /** Parent span id when the runtime exposes hierarchy. */\n parentId?: string;\n /** Human-readable operation name. */\n name: string;\n /** Coarse operation kind used by reporters and judges. */\n kind?:\n | \"run\"\n | \"agent\"\n | \"model\"\n | \"tool\"\n | \"guardrail\"\n | \"handoff\"\n | \"custom\";\n /** ISO timestamp for the start of the span. */\n startedAt?: string;\n /** ISO timestamp for the end of the span. */\n finishedAt?: string;\n /** Span duration in milliseconds. */\n durationMs?: number;\n /** Success or failure status for the span. */\n status?: \"ok\" | \"error\";\n /** Normalized error when the span failed. */\n error?: NormalizedError;\n /** JSON-safe operation attributes. */\n attributes?: NormalizedSpanAttributes;\n /** Events observed inside this span. */\n events?: NormalizedSpanEvent[];\n};\n\n/** Normalized trace captured during a harness run. */\nexport const NormalizedTraceSchema = z\n .object({\n id: z.string().optional(),\n name: z.string().optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n spans: z.array(NormalizedSpanSchema).default([]),\n })\n .strict();\n\n/** Normalized trace captured during a harness run. */\nexport type NormalizedTrace = {\n /** Runtime or provider trace id when one is available. */\n id?: string;\n /** Human-readable trace or workflow name. */\n name?: string;\n /** ISO timestamp for the start of the trace. */\n startedAt?: string;\n /** ISO timestamp for the end of the trace. */\n finishedAt?: string;\n /** Trace duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe trace metadata. */\n metadata?: Record<string, JsonValue>;\n /** Spans that make up this trace. */\n spans: NormalizedSpan[];\n};\n\n/** Full normalized harness run as stored in Vitest assertion metadata. */\nexport const HarnessRunSchema = z\n .object({\n output: JsonValueSchema.optional(),\n session: NormalizedSessionSchema,\n usage: UsageSummarySchema,\n timings: TimingSummarySchema.optional(),\n artifacts: JsonObjectSchema.optional(),\n traces: z.array(NormalizedTraceSchema).optional(),\n errors: z.array(JsonObjectSchema).default([]),\n })\n .strict();\n\ntype OutputField<TOutput extends JsonValue | undefined> =\n undefined extends TOutput ? { output?: TOutput } : { output: TOutput };\n\n/**\n * Normalized result returned by every harness execution.\n *\n * @example\n * ```ts\n * const run: HarnessRun<{ status: \"approved\" }> = {\n * output: { status: \"approved\" },\n * session: {\n * messages: [\n * { role: \"user\", content: \"Refund invoice inv_123\" },\n * { role: \"assistant\", content: { status: \"approved\" } },\n * ],\n * },\n * usage: { totalTokens: 260 },\n * errors: [],\n * };\n * ```\n */\nexport type HarnessRun<\n TOutput extends JsonValue | undefined = JsonValue | undefined,\n> = OutputField<TOutput> & {\n /** Normalized transcript and provider/session metadata. */\n session: NormalizedSession;\n /** Stable provider usage units such as tokens, tools, and retries. */\n usage: UsageSummary;\n /** Optional timing summary for the run. */\n timings?: TimingSummary;\n /** JSON-safe run artifacts captured by the harness or test context. */\n artifacts?: Record<string, JsonValue>;\n /** Normalized traces and spans captured during execution. */\n traces?: NormalizedTrace[];\n /** Normalized errors captured during execution. */\n errors: Array<Record<string, JsonValue>>;\n};\n\n/** Error value with an attached partial or complete normalized harness run. */\nexport type HarnessRunError = Error & {\n /** Attached normalized harness run recovered from a thrown error. */\n vitestEvalsRun: HarnessRun;\n};\n","import { z } from \"zod\";\nimport type { JsonValue } from \"./json\";\n\nexport const FiniteNumberSchema = z.number().finite();\n\nexport const OptionalFiniteNumberSchema = z.preprocess(\n (value) =>\n value === null || (typeof value === \"number\" && !Number.isFinite(value))\n ? undefined\n : value,\n FiniteNumberSchema.optional(),\n);\n\nexport const NullableFiniteNumberSchema = z.preprocess(\n (value) =>\n typeof value === \"number\" && !Number.isFinite(value) ? null : value,\n FiniteNumberSchema.nullable().optional(),\n);\n\nexport function parseWithSchema<T>(\n schema: z.ZodType<T>,\n input: unknown,\n label: string,\n) {\n const parsed = schema.safeParse(input);\n if (parsed.success) {\n return parsed.data;\n }\n\n const reason = parsed.error.issues\n .slice(0, 3)\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\";\n return `${path}: ${issue.message}`;\n })\n .join(\"; \");\n throw new Error(`Invalid ${label}: ${reason}`);\n}\n\nexport function isJsonObject(\n value: unknown,\n): value is Record<string, JsonValue> {\n return isRecord(value);\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import type {\n HarnessRun,\n NormalizedMessage,\n NormalizedSession,\n NormalizedSpan,\n NormalizedTrace,\n ToolCallRecord,\n} from \"./index\";\nimport type { JsonValue } from \"../json\";\n\n/**\n * Flattens every recorded tool call from a normalized run or session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const names = toolCalls(result).map((call) => call.name);\n *\n * expect(names).toEqual([\"lookupInvoice\", \"createRefund\"]);\n * ```\n */\nexport function toolCalls(run: HarnessRun): ToolCallRecord[];\nexport function toolCalls(session: NormalizedSession): ToolCallRecord[];\nexport function toolCalls(\n source: HarnessRun | NormalizedSession,\n): ToolCallRecord[] {\n return sessionFrom(source).messages.flatMap(\n (message) => message.toolCalls ?? [],\n );\n}\n\n/**\n * Flattens every recorded span from a normalized harness run or trace list.\n *\n * @param source - Normalized run or trace list produced by a harness.\n *\n * @example\n * ```ts\n * const modelSpans = spans(result).filter((span) => span.kind === \"model\");\n * ```\n */\nexport function spans(run: HarnessRun): NormalizedSpan[];\nexport function spans(\n traces: readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[];\nexport function spans(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return spansFrom(source);\n}\n\n/**\n * Alias for `spans(...)` for consumers that prefer trace-oriented naming.\n *\n * @param source - Normalized run or trace list produced by a harness.\n */\nexport function traceSpans(run: HarnessRun): NormalizedSpan[];\nexport function traceSpans(\n traces: readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[];\nexport function traceSpans(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return spansFrom(source);\n}\n\n/**\n * Returns spans of one coarse operation kind from a normalized run or trace list.\n *\n * @param source - Normalized run or trace list produced by a harness.\n * @param kind - Span kind to keep.\n */\nexport function spansByKind(\n run: HarnessRun,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[];\nexport function spansByKind(\n traces: readonly NormalizedTrace[] | undefined,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[];\nexport function spansByKind(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[] {\n return spansFrom(source).filter((span) => span.kind === kind);\n}\n\n/**\n * Returns every span that explicitly failed or carries a normalized error.\n *\n * @param source - Normalized run or trace list produced by a harness.\n */\nexport function failedSpans(run: HarnessRun): NormalizedSpan[];\nexport function failedSpans(\n traces: readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[];\nexport function failedSpans(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return spansFrom(source).filter(\n (span) => span.status === \"error\" || span.error !== undefined,\n );\n}\n\n/**\n * Filters normalized session messages by role.\n *\n * @param source - Normalized run or session produced by a harness.\n * @param role - Message role to keep.\n *\n * @example\n * ```ts\n * const assistantText = messagesByRole(result, \"assistant\")\n * .map((message) => message.content)\n * .join(\"\\n\");\n * ```\n */\nexport function messagesByRole(\n run: HarnessRun,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[];\nexport function messagesByRole(\n session: NormalizedSession,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[];\nexport function messagesByRole(\n source: HarnessRun | NormalizedSession,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[] {\n return sessionFrom(source).messages.filter(\n (message) => message.role === role,\n );\n}\n\n/**\n * Returns every normalized system message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const systemPrompts = systemMessages(result);\n * ```\n */\nexport function systemMessages(run: HarnessRun): NormalizedMessage[];\nexport function systemMessages(session: NormalizedSession): NormalizedMessage[];\nexport function systemMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"system\");\n}\n\n/**\n * Returns every normalized user message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const firstPrompt = userMessages(result)[0]?.content;\n * ```\n */\nexport function userMessages(run: HarnessRun): NormalizedMessage[];\nexport function userMessages(session: NormalizedSession): NormalizedMessage[];\nexport function userMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"user\");\n}\n\n/**\n * Returns every normalized assistant message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const finalAnswer = assistantMessages(result).at(-1)?.content;\n * ```\n */\nexport function assistantMessages(run: HarnessRun): NormalizedMessage[];\nexport function assistantMessages(\n session: NormalizedSession,\n): NormalizedMessage[];\nexport function assistantMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"assistant\");\n}\n\n/**\n * Returns the latest assistant message content, ignoring empty text messages.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const finalAnswer = latestAssistantMessageContent(result);\n * ```\n */\nexport function latestAssistantMessageContent(\n run: HarnessRun,\n): JsonValue | undefined;\nexport function latestAssistantMessageContent(\n session: NormalizedSession,\n): JsonValue | undefined;\nexport function latestAssistantMessageContent(\n source: HarnessRun | NormalizedSession,\n) {\n return [...messagesByRoleFromSource(source, \"assistant\")]\n .reverse()\n .find(hasNonEmptyMessageContent)?.content;\n}\n\n/**\n * Returns every normalized tool message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const toolOutputs = toolMessages(result).map((message) => message.content);\n * ```\n */\nexport function toolMessages(run: HarnessRun): NormalizedMessage[];\nexport function toolMessages(session: NormalizedSession): NormalizedMessage[];\nexport function toolMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"tool\");\n}\n\nfunction sessionFrom(source: HarnessRun | NormalizedSession) {\n return \"session\" in source ? source.session : source;\n}\n\nfunction tracesFrom(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): readonly NormalizedTrace[] {\n if (source === undefined) {\n return [];\n }\n if (isTraceList(source)) {\n return source;\n }\n return source.traces ?? [];\n}\n\nfunction spansFrom(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return tracesFrom(source).flatMap((trace) => trace.spans);\n}\n\nfunction isTraceList(\n source: HarnessRun | readonly NormalizedTrace[],\n): source is readonly NormalizedTrace[] {\n return Array.isArray(source);\n}\n\nfunction messagesByRoleFromSource(\n source: HarnessRun | NormalizedSession,\n role: NormalizedMessage[\"role\"],\n) {\n return sessionFrom(source).messages.filter(\n (message) => message.role === role,\n );\n}\n\nfunction hasNonEmptyMessageContent(message: NormalizedMessage) {\n return (\n message.content !== undefined &&\n (typeof message.content !== \"string\" || message.content.trim().length > 0)\n );\n}\n","import { z } from \"zod\";\nimport {\n HarnessRunSchema,\n NormalizedMessageSchema,\n NormalizedSessionSchema,\n NormalizedSpanEventSchema,\n NormalizedSpanSchema,\n NormalizedTraceSchema,\n TimingSummarySchema,\n ToolCallRecordSchema,\n UsageSummarySchema,\n} from \"../harness\";\nimport { JsonObjectSchema, JsonValueSchema } from \"../json\";\nimport { isJsonObject, NullableFiniteNumberSchema } from \"../schema-utils\";\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport const HarnessMetaSchema = z\n .object({\n name: z.string().optional(),\n run: HarnessRunSchema.optional(),\n })\n .strict();\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport type HarnessMeta = z.infer<typeof HarnessMetaSchema>;\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport const EvalScoreSchema = z\n .object({\n name: z.string().optional(),\n score: NullableFiniteNumberSchema,\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport type EvalScore = z.infer<typeof EvalScoreSchema>;\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport const EvalMetaSchema = z\n .object({\n scores: z.array(EvalScoreSchema).optional(),\n avgScore: NullableFiniteNumberSchema,\n output: JsonValueSchema.optional(),\n thresholdFailed: z.boolean().optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n })\n .strict();\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport type EvalMeta = z.infer<typeof EvalMetaSchema>;\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport const EvalTaskMetaSchema = z\n .object({\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport type EvalTaskMeta = z.infer<typeof EvalTaskMetaSchema>;\n\nconst LenientToolCallRecordSchema = ToolCallRecordSchema.strip();\nconst LenientMessageSchema = NormalizedMessageSchema.extend({\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\nconst LenientSessionSchema = NormalizedSessionSchema.extend({\n messages: z.array(LenientMessageSchema).default([]).catch([]),\n}).strip();\nconst LenientSpanEventSchema = NormalizedSpanEventSchema.strip();\nconst LenientSpanSchema = NormalizedSpanSchema.extend({\n events: z.array(LenientSpanEventSchema).optional().catch(undefined),\n}).strip();\nconst LenientTraceSchema = NormalizedTraceSchema.extend({\n spans: z.array(LenientSpanSchema).default([]).catch([]),\n}).strip();\nconst LenientHarnessRunSchema = HarnessRunSchema.extend({\n session: LenientSessionSchema,\n usage: UsageSummarySchema.strip().default({}),\n timings: TimingSummarySchema.strip().optional(),\n traces: z.array(LenientTraceSchema).optional().catch(undefined),\n}).strip();\nconst LenientHarnessMetaSchema = HarnessMetaSchema.extend({\n run: LenientHarnessRunSchema.optional().catch(undefined),\n}).strip();\nconst LenientEvalScoreSchema = EvalScoreSchema.strip();\nconst LenientEvalMetaSchema = EvalMetaSchema.extend({\n scores: z.array(LenientEvalScoreSchema).optional().catch(undefined),\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\n\n/** Reads eval metadata from an arbitrary Vitest assertion meta value. */\nexport function readEvalTaskMeta(input: unknown): EvalTaskMeta | undefined {\n if (!isJsonObject(input)) {\n return undefined;\n }\n\n const evalResult = LenientEvalMetaSchema.safeParse(input.eval);\n const harnessResult = LenientHarnessMetaSchema.safeParse(input.harness);\n const meta: EvalTaskMeta = {\n ...(evalResult.success && input.eval !== undefined\n ? { eval: evalResult.data }\n : {}),\n ...(harnessResult.success && input.harness !== undefined\n ? { harness: harnessResult.data }\n : {}),\n };\n\n return meta.eval || meta.harness ? meta : undefined;\n}\n","import { z } from \"zod\";\nimport {\n FiniteNumberSchema,\n OptionalFiniteNumberSchema,\n parseWithSchema,\n} from \"../schema-utils\";\n\n/** Status values emitted by Vitest JSON reports. */\nexport const VitestJsonStatusSchema = z.enum([\n \"passed\",\n \"failed\",\n \"skipped\",\n \"pending\",\n \"todo\",\n \"disabled\",\n]);\n\n/** Status values emitted by Vitest JSON reports. */\nexport type VitestJsonStatus = z.infer<typeof VitestJsonStatusSchema>;\n\n/** Source location attached to one Vitest assertion. */\nexport const VitestJsonLocationSchema = z\n .object({\n line: FiniteNumberSchema,\n column: FiniteNumberSchema,\n })\n .passthrough();\n\n/** Source location attached to one Vitest assertion. */\nexport type VitestJsonLocation = z.infer<typeof VitestJsonLocationSchema>;\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport const VitestJsonAssertionSchema = z\n .object({\n ancestorTitles: z.array(z.string()).default([]),\n fullName: z.string(),\n status: VitestJsonStatusSchema,\n title: z.string(),\n meta: z.unknown().optional(),\n duration: FiniteNumberSchema.nullable().optional(),\n failureMessages: z.array(z.string()).nullable().optional(),\n location: VitestJsonLocationSchema.nullable().optional(),\n tags: z.array(z.string()).optional(),\n })\n .passthrough();\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport type VitestJsonAssertion = z.infer<typeof VitestJsonAssertionSchema>;\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport const VitestJsonFileSchema = z\n .object({\n message: z.string(),\n name: z.string(),\n status: z.enum([\"failed\", \"passed\"]),\n startTime: OptionalFiniteNumberSchema,\n endTime: OptionalFiniteNumberSchema,\n assertionResults: z.array(VitestJsonAssertionSchema).default([]),\n })\n .passthrough();\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport type VitestJsonFile = z.infer<typeof VitestJsonFileSchema>;\n\n/** Top-level Vitest JSON reporter payload. */\nexport const VitestJsonReportSchema = z\n .object({\n numFailedTests: FiniteNumberSchema,\n numPassedTests: FiniteNumberSchema,\n numPendingTests: FiniteNumberSchema,\n numTodoTests: FiniteNumberSchema,\n numTotalTests: FiniteNumberSchema,\n startTime: FiniteNumberSchema,\n success: z.boolean(),\n testResults: z.array(VitestJsonFileSchema).default([]),\n })\n .passthrough();\n\n/** Top-level Vitest JSON reporter payload. */\nexport type VitestJsonReport = z.infer<typeof VitestJsonReportSchema>;\n\n/** Parses and validates an unknown value as a Vitest JSON report artifact. */\nexport function parseVitestJsonReport(input: unknown): VitestJsonReport {\n return parseWithSchema(VitestJsonReportSchema, input, \"Vitest JSON report\");\n}\n","import { z } from \"zod\";\nimport {\n EvalMetaSchema,\n HarnessMetaSchema,\n readEvalTaskMeta,\n} from \"./metadata\";\nimport { FiniteNumberSchema, parseWithSchema, isRecord } from \"../schema-utils\";\nimport {\n parseVitestJsonReport,\n VitestJsonLocationSchema,\n type VitestJsonAssertion,\n type VitestJsonReport,\n} from \"./vitest-json\";\nimport { VitestJsonStatusSchema } from \"./vitest-json\";\n\n/** Current schema version for collected report workspaces. */\nexport const REPORT_WORKSPACE_SCHEMA_VERSION = 1;\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport const ReportRunSchema = z\n .object({\n id: z.string(),\n source: z.string().optional(),\n status: z.enum([\"passed\", \"failed\"]),\n startedAt: FiniteNumberSchema.optional(),\n durationMs: FiniteNumberSchema.optional(),\n totals: z.object({\n total: FiniteNumberSchema,\n passed: FiniteNumberSchema,\n failed: FiniteNumberSchema,\n skipped: FiniteNumberSchema,\n evalTotal: FiniteNumberSchema,\n evalPassed: FiniteNumberSchema,\n evalFailed: FiniteNumberSchema,\n }),\n })\n .strict();\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport type ReportRun = z.infer<typeof ReportRunSchema>;\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport const ReportCaseSchema = z\n .object({\n id: z.string(),\n runId: z.string(),\n source: z.string().optional(),\n file: z.string(),\n displayFile: z.string(),\n title: z.string(),\n fullName: z.string(),\n ancestorTitles: z.array(z.string()),\n tags: z.array(z.string()).optional(),\n displayName: z.string(),\n status: VitestJsonStatusSchema,\n durationMs: FiniteNumberSchema.optional(),\n location: VitestJsonLocationSchema.optional(),\n failureMessages: z.array(z.string()).default([]),\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport type ReportCase = z.infer<typeof ReportCaseSchema>;\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport const ReportWorkspaceSchema = z\n .object({\n schemaVersion: z.literal(REPORT_WORKSPACE_SCHEMA_VERSION),\n runs: z.array(ReportRunSchema),\n cases: z.array(ReportCaseSchema),\n })\n .strict();\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport type ReportWorkspace = z.infer<typeof ReportWorkspaceSchema>;\n\n/** Input accepted when collecting one Vitest JSON report into a workspace. */\nexport type ReportWorkspaceInput =\n | VitestJsonReport\n | {\n report: VitestJsonReport;\n source?: string;\n };\n\n/** Options for collecting one or more Vitest JSON reports. */\nexport type CollectReportWorkspaceOptions = {\n /** Workspace prefix used to render source files as relative paths. */\n workspace?: string;\n};\n\n/** Parses and validates an unknown value as a collected report workspace. */\nexport function parseReportWorkspace(input: unknown): ReportWorkspace {\n return parseWithSchema(ReportWorkspaceSchema, input, \"report workspace\");\n}\n\n/** Collects eval and harness metadata from one or more Vitest JSON reports. */\nexport function collectReportWorkspace(\n input: ReportWorkspaceInput | ReportWorkspaceInput[],\n options: CollectReportWorkspaceOptions = {},\n): ReportWorkspace {\n const entries = Array.isArray(input) ? input : [input];\n const runs: ReportRun[] = [];\n const cases: ReportCase[] = [];\n\n entries.forEach((entry, index) => {\n const { report, source } = normalizeWorkspaceInput(entry);\n const runId = source ?? `run-${index + 1}`;\n const runCases: ReportCase[] = [];\n\n for (const file of report.testResults) {\n for (const assertion of file.assertionResults) {\n const meta = readEvalTaskMeta(assertion.meta);\n if (!meta) {\n continue;\n }\n\n runCases.push({\n id: createCaseId(runId, file.name, assertion),\n runId,\n ...(source ? { source } : {}),\n file: file.name,\n displayFile: normalizeReportPath(file.name, options.workspace),\n title: assertion.title,\n fullName: assertion.fullName,\n ancestorTitles: assertion.ancestorTitles,\n ...(assertion.tags ? { tags: assertion.tags } : {}),\n displayName: formatDisplayName(assertion),\n status: assertion.status,\n ...(typeof assertion.duration === \"number\"\n ? { durationMs: assertion.duration }\n : {}),\n ...(assertion.location ? { location: assertion.location } : {}),\n failureMessages: assertion.failureMessages ?? [],\n ...(meta.eval ? { eval: meta.eval } : {}),\n ...(meta.harness ? { harness: meta.harness } : {}),\n });\n }\n }\n\n runs.push({\n id: runId,\n ...(source ? { source } : {}),\n status:\n report.success &&\n runCases.every((testCase) => testCase.status !== \"failed\")\n ? \"passed\"\n : \"failed\",\n startedAt: report.startTime,\n durationMs: resolveRunDuration(report),\n totals: {\n total: report.numTotalTests,\n passed: report.numPassedTests,\n failed: report.numFailedTests,\n skipped: report.numPendingTests + report.numTodoTests,\n evalTotal: runCases.length,\n evalPassed: runCases.filter((testCase) => testCase.status === \"passed\")\n .length,\n evalFailed: runCases.filter((testCase) => testCase.status === \"failed\")\n .length,\n },\n });\n cases.push(...runCases);\n });\n\n return {\n schemaVersion: REPORT_WORKSPACE_SCHEMA_VERSION,\n runs,\n cases,\n };\n}\n\nfunction normalizeWorkspaceInput(input: ReportWorkspaceInput) {\n if (isVitestJsonReportLike(input)) {\n return {\n report: parseVitestJsonReport(input),\n };\n }\n\n if (isRecord(input) && \"report\" in input) {\n return {\n report: parseVitestJsonReport(input.report),\n source: typeof input.source === \"string\" ? input.source : undefined,\n };\n }\n\n return {\n report: parseVitestJsonReport(input),\n };\n}\n\nfunction isVitestJsonReportLike(input: unknown) {\n return isRecord(input) && Array.isArray(input.testResults);\n}\n\nfunction createCaseId(\n runId: string,\n file: string,\n assertion: VitestJsonAssertion,\n) {\n return [runId, file, assertion.location?.line ?? 0, assertion.fullName].join(\n \":\",\n );\n}\n\nfunction formatDisplayName(assertion: VitestJsonAssertion) {\n return [...assertion.ancestorTitles, assertion.title]\n .filter((part) => part.length > 0)\n .join(\" > \");\n}\n\nfunction resolveRunDuration(report: VitestJsonReport) {\n const intervals = report.testResults\n .map((file) => {\n const start = file.startTime;\n const end = file.endTime;\n if (!isFiniteNumber(start) || !isFiniteNumber(end) || end < start) {\n return undefined;\n }\n\n return {\n start,\n end,\n };\n })\n .filter((interval): interval is { start: number; end: number } =>\n Boolean(interval),\n );\n\n if (intervals.length === 0) {\n return undefined;\n }\n\n return (\n Math.max(...intervals.map((interval) => interval.end)) -\n Math.min(...intervals.map((interval) => interval.start))\n );\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction normalizeReportPath(path: string, workspace?: string) {\n const normalized = path.replace(/\\\\/g, \"/\");\n if (!workspace) {\n return normalized;\n }\n\n const workspacePath = workspace.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n if (\n normalized !== workspacePath &&\n !normalized.startsWith(`${workspacePath}/`)\n ) {\n return normalized;\n }\n\n return normalized.slice(workspacePath.length).replace(/^\\/+/, \"\");\n}\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod"]}
|
package/dist/index.mjs
CHANGED
|
@@ -130,40 +130,67 @@ var HarnessRunSchema = z3.object({
|
|
|
130
130
|
}).strict();
|
|
131
131
|
|
|
132
132
|
// src/harness/helpers.ts
|
|
133
|
-
function toolCalls(
|
|
134
|
-
return
|
|
133
|
+
function toolCalls(source) {
|
|
134
|
+
return sessionFrom(source).messages.flatMap(
|
|
135
|
+
(message) => message.toolCalls ?? []
|
|
136
|
+
);
|
|
135
137
|
}
|
|
136
|
-
function spans(
|
|
137
|
-
return (
|
|
138
|
+
function spans(source) {
|
|
139
|
+
return spansFrom(source);
|
|
138
140
|
}
|
|
139
|
-
function traceSpans(
|
|
140
|
-
return
|
|
141
|
+
function traceSpans(source) {
|
|
142
|
+
return spansFrom(source);
|
|
141
143
|
}
|
|
142
|
-
function spansByKind(
|
|
143
|
-
return
|
|
144
|
+
function spansByKind(source, kind) {
|
|
145
|
+
return spansFrom(source).filter((span) => span.kind === kind);
|
|
144
146
|
}
|
|
145
|
-
function failedSpans(
|
|
146
|
-
return
|
|
147
|
+
function failedSpans(source) {
|
|
148
|
+
return spansFrom(source).filter(
|
|
147
149
|
(span) => span.status === "error" || span.error !== void 0
|
|
148
150
|
);
|
|
149
151
|
}
|
|
150
|
-
function messagesByRole(
|
|
151
|
-
return
|
|
152
|
+
function messagesByRole(source, role) {
|
|
153
|
+
return sessionFrom(source).messages.filter(
|
|
154
|
+
(message) => message.role === role
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
function systemMessages(source) {
|
|
158
|
+
return messagesByRoleFromSource(source, "system");
|
|
159
|
+
}
|
|
160
|
+
function userMessages(source) {
|
|
161
|
+
return messagesByRoleFromSource(source, "user");
|
|
162
|
+
}
|
|
163
|
+
function assistantMessages(source) {
|
|
164
|
+
return messagesByRoleFromSource(source, "assistant");
|
|
152
165
|
}
|
|
153
|
-
function
|
|
154
|
-
return
|
|
166
|
+
function latestAssistantMessageContent(source) {
|
|
167
|
+
return [...messagesByRoleFromSource(source, "assistant")].reverse().find(hasNonEmptyMessageContent)?.content;
|
|
155
168
|
}
|
|
156
|
-
function
|
|
157
|
-
return
|
|
169
|
+
function toolMessages(source) {
|
|
170
|
+
return messagesByRoleFromSource(source, "tool");
|
|
158
171
|
}
|
|
159
|
-
function
|
|
160
|
-
return
|
|
172
|
+
function sessionFrom(source) {
|
|
173
|
+
return "session" in source ? source.session : source;
|
|
161
174
|
}
|
|
162
|
-
function
|
|
163
|
-
|
|
175
|
+
function tracesFrom(source) {
|
|
176
|
+
if (source === void 0) {
|
|
177
|
+
return [];
|
|
178
|
+
}
|
|
179
|
+
if (isTraceList(source)) {
|
|
180
|
+
return source;
|
|
181
|
+
}
|
|
182
|
+
return source.traces ?? [];
|
|
183
|
+
}
|
|
184
|
+
function spansFrom(source) {
|
|
185
|
+
return tracesFrom(source).flatMap((trace) => trace.spans);
|
|
164
186
|
}
|
|
165
|
-
function
|
|
166
|
-
return
|
|
187
|
+
function isTraceList(source) {
|
|
188
|
+
return Array.isArray(source);
|
|
189
|
+
}
|
|
190
|
+
function messagesByRoleFromSource(source, role) {
|
|
191
|
+
return sessionFrom(source).messages.filter(
|
|
192
|
+
(message) => message.role === role
|
|
193
|
+
);
|
|
167
194
|
}
|
|
168
195
|
function hasNonEmptyMessageContent(message) {
|
|
169
196
|
return message.content !== void 0 && (typeof message.content !== "string" || message.content.trim().length > 0);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/json.ts","../src/harness/index.ts","../src/schema-utils.ts","../src/harness/helpers.ts","../src/report/metadata.ts","../src/report/vitest-json.ts","../src/report/workspace.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Primitive scalar values allowed in persisted vitest-evals JSON artifacts. */\nexport type JsonPrimitive = string | number | boolean | null;\n\n/** JSON-safe value shape used by reports, normalized sessions, and traces. */\nexport type JsonValue =\n | JsonPrimitive\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n/** Schema for primitive scalar values in persisted report artifacts. */\nexport const JsonPrimitiveSchema = z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n]);\n\n/** Schema for any JSON-safe value in persisted report artifacts. */\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n JsonPrimitiveSchema,\n z.array(JsonValueSchema),\n z.record(z.string(), JsonValueSchema),\n ]),\n);\n\n/** Schema for JSON-safe object records in persisted report artifacts. */\nexport const JsonObjectSchema = z.record(z.string(), JsonValueSchema);\n","import { z } from \"zod\";\nimport type { NormalizedSpanAttributes } from \"../genai\";\nimport { JsonObjectSchema, JsonValueSchema, type JsonValue } from \"../json\";\nimport { FiniteNumberSchema } from \"../schema-utils\";\n\n/** Normalized error attached to tool calls and spans. */\nexport type NormalizedError = {\n /** Human-readable failure message. */\n message: string;\n /** Optional provider or runtime error type. */\n type?: string;\n /** Extra JSON-safe error metadata. */\n [key: string]: JsonValue | undefined;\n};\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport const UsageSummarySchema = z\n .object({\n provider: z.string().optional(),\n model: z.string().optional(),\n inputTokens: FiniteNumberSchema.optional(),\n outputTokens: FiniteNumberSchema.optional(),\n reasoningTokens: FiniteNumberSchema.optional(),\n totalTokens: FiniteNumberSchema.optional(),\n toolCalls: FiniteNumberSchema.optional(),\n retries: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport type UsageSummary = {\n /** Provider that served the application run. */\n provider?: string;\n /** Model used for the application run. */\n model?: string;\n /** Input, prompt, or request tokens consumed by the run. */\n inputTokens?: number;\n /** Output or completion tokens produced by the run. */\n outputTokens?: number;\n /** Reasoning tokens reported by providers that expose them. */\n reasoningTokens?: number;\n /** Total token count reported by the provider or adapter. */\n totalTokens?: number;\n /** Count of tool calls observed during the run. */\n toolCalls?: number;\n /** Retry count observed during the run. */\n retries?: number;\n /** Provider-specific JSON-safe usage details. Cost estimates belong here. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport const TimingSummarySchema = z\n .object({\n totalMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport type TimingSummary = {\n /** End-to-end run duration in milliseconds. */\n totalMs?: number;\n /** Extra JSON-safe timing metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized error object captured in a tool call or trace span. */\nexport const NormalizedErrorSchema = z\n .object({\n message: z.string(),\n type: z.string().optional(),\n })\n .catchall(JsonValueSchema);\n\n/** Normalized tool call captured in a harness session. */\nexport const ToolCallRecordSchema = z\n .object({\n id: z.string().optional(),\n name: z.string(),\n arguments: JsonObjectSchema.optional(),\n result: JsonValueSchema.optional(),\n error: NormalizedErrorSchema.optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized tool call captured in a harness session. */\nexport type ToolCallRecord = {\n /** Provider or runtime tool-call id when one is available. */\n id?: string;\n /** Tool name as exposed to the agent or application runtime. */\n name: string;\n /** JSON-safe tool arguments after provider/runtime normalization. */\n arguments?: Record<string, JsonValue>;\n /** JSON-safe tool result returned by the application tool. */\n result?: JsonValue;\n /** Normalized tool error when execution failed. */\n error?: NormalizedError;\n /** ISO timestamp for the start of tool execution. */\n startedAt?: string;\n /** ISO timestamp for the end of tool execution. */\n finishedAt?: string;\n /** Tool execution duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe tool metadata for reporters and custom judges. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript message captured in a harness session. */\nexport const NormalizedMessageSchema = z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\", \"tool\"]),\n content: JsonValueSchema.optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript message captured in a harness session. */\nexport type NormalizedMessage = {\n /** Transcript role for the normalized message. */\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n /** JSON-safe message content. */\n content?: JsonValue;\n /** Tool calls associated with this message. */\n toolCalls?: ToolCallRecord[];\n /** Extra JSON-safe message metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript produced by an application harness. */\nexport const NormalizedSessionSchema = z\n .object({\n messages: z.array(NormalizedMessageSchema).default([]),\n provider: z.string().optional(),\n model: z.string().optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript produced by an application harness. */\nexport type NormalizedSession = {\n /** Ordered normalized transcript messages. */\n messages: NormalizedMessage[];\n /** Provider that produced the session when known. */\n provider?: string;\n /** Model that produced the session when known. */\n model?: string;\n /** Extra JSON-safe session metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Attribute schema attached to normalized traces, spans, and events. */\nexport const NormalizedSpanAttributesSchema = JsonObjectSchema;\n\n/** Event attached to a normalized span. */\nexport const NormalizedSpanEventSchema = z\n .object({\n name: z.string(),\n timestamp: z.string().optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n })\n .strict();\n\n/** Event attached to a normalized span. */\nexport type NormalizedSpanEvent = {\n /** Event name emitted by the runtime or harness. */\n name: string;\n /** ISO timestamp for the event when available. */\n timestamp?: string;\n /** JSON-safe event attributes. */\n attributes?: NormalizedSpanAttributes;\n};\n\n/** Normalized operation span captured during a harness run. */\nexport const NormalizedSpanSchema = z\n .object({\n id: z.string().optional(),\n traceId: z.string().optional(),\n parentId: z.string().optional(),\n name: z.string(),\n kind: z\n .enum([\"run\", \"agent\", \"model\", \"tool\", \"guardrail\", \"handoff\", \"custom\"])\n .optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n status: z.enum([\"ok\", \"error\"]).optional(),\n error: NormalizedErrorSchema.optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n events: z.array(NormalizedSpanEventSchema).optional(),\n })\n .strict();\n\n/** Normalized operation span captured during a harness run. */\nexport type NormalizedSpan = {\n /** Runtime or provider span id when one is available. */\n id?: string;\n /** Trace id this span belongs to. */\n traceId?: string;\n /** Parent span id when the runtime exposes hierarchy. */\n parentId?: string;\n /** Human-readable operation name. */\n name: string;\n /** Coarse operation kind used by reporters and judges. */\n kind?:\n | \"run\"\n | \"agent\"\n | \"model\"\n | \"tool\"\n | \"guardrail\"\n | \"handoff\"\n | \"custom\";\n /** ISO timestamp for the start of the span. */\n startedAt?: string;\n /** ISO timestamp for the end of the span. */\n finishedAt?: string;\n /** Span duration in milliseconds. */\n durationMs?: number;\n /** Success or failure status for the span. */\n status?: \"ok\" | \"error\";\n /** Normalized error when the span failed. */\n error?: NormalizedError;\n /** JSON-safe operation attributes. */\n attributes?: NormalizedSpanAttributes;\n /** Events observed inside this span. */\n events?: NormalizedSpanEvent[];\n};\n\n/** Normalized trace captured during a harness run. */\nexport const NormalizedTraceSchema = z\n .object({\n id: z.string().optional(),\n name: z.string().optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n spans: z.array(NormalizedSpanSchema).default([]),\n })\n .strict();\n\n/** Normalized trace captured during a harness run. */\nexport type NormalizedTrace = {\n /** Runtime or provider trace id when one is available. */\n id?: string;\n /** Human-readable trace or workflow name. */\n name?: string;\n /** ISO timestamp for the start of the trace. */\n startedAt?: string;\n /** ISO timestamp for the end of the trace. */\n finishedAt?: string;\n /** Trace duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe trace metadata. */\n metadata?: Record<string, JsonValue>;\n /** Spans that make up this trace. */\n spans: NormalizedSpan[];\n};\n\n/** Full normalized harness run as stored in Vitest assertion metadata. */\nexport const HarnessRunSchema = z\n .object({\n output: JsonValueSchema.optional(),\n session: NormalizedSessionSchema,\n usage: UsageSummarySchema,\n timings: TimingSummarySchema.optional(),\n artifacts: JsonObjectSchema.optional(),\n traces: z.array(NormalizedTraceSchema).optional(),\n errors: z.array(JsonObjectSchema).default([]),\n })\n .strict();\n\ntype OutputField<TOutput extends JsonValue | undefined> =\n undefined extends TOutput ? { output?: TOutput } : { output: TOutput };\n\n/**\n * Normalized result returned by every harness execution.\n *\n * @example\n * ```ts\n * const run: HarnessRun<{ status: \"approved\" }> = {\n * output: { status: \"approved\" },\n * session: {\n * messages: [\n * { role: \"user\", content: \"Refund invoice inv_123\" },\n * { role: \"assistant\", content: { status: \"approved\" } },\n * ],\n * },\n * usage: { totalTokens: 260 },\n * errors: [],\n * };\n * ```\n */\nexport type HarnessRun<\n TOutput extends JsonValue | undefined = JsonValue | undefined,\n> = OutputField<TOutput> & {\n /** Normalized transcript and provider/session metadata. */\n session: NormalizedSession;\n /** Stable provider usage units such as tokens, tools, and retries. */\n usage: UsageSummary;\n /** Optional timing summary for the run. */\n timings?: TimingSummary;\n /** JSON-safe run artifacts captured by the harness or test context. */\n artifacts?: Record<string, JsonValue>;\n /** Normalized traces and spans captured during execution. */\n traces?: NormalizedTrace[];\n /** Normalized errors captured during execution. */\n errors: Array<Record<string, JsonValue>>;\n};\n\n/** Error value with an attached partial or complete normalized harness run. */\nexport type HarnessRunError = Error & {\n /** Attached normalized harness run recovered from a thrown error. */\n vitestEvalsRun: HarnessRun;\n};\n","import { z } from \"zod\";\nimport type { JsonValue } from \"./json\";\n\nexport const FiniteNumberSchema = z.number().finite();\n\nexport const OptionalFiniteNumberSchema = z.preprocess(\n (value) =>\n value === null || (typeof value === \"number\" && !Number.isFinite(value))\n ? undefined\n : value,\n FiniteNumberSchema.optional(),\n);\n\nexport const NullableFiniteNumberSchema = z.preprocess(\n (value) =>\n typeof value === \"number\" && !Number.isFinite(value) ? null : value,\n FiniteNumberSchema.nullable().optional(),\n);\n\nexport function parseWithSchema<T>(\n schema: z.ZodType<T>,\n input: unknown,\n label: string,\n) {\n const parsed = schema.safeParse(input);\n if (parsed.success) {\n return parsed.data;\n }\n\n const reason = parsed.error.issues\n .slice(0, 3)\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\";\n return `${path}: ${issue.message}`;\n })\n .join(\"; \");\n throw new Error(`Invalid ${label}: ${reason}`);\n}\n\nexport function isJsonObject(\n value: unknown,\n): value is Record<string, JsonValue> {\n return isRecord(value);\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import type {\n HarnessRun,\n NormalizedMessage,\n NormalizedSession,\n NormalizedSpan,\n ToolCallRecord,\n} from \"./index\";\n\n/**\n * Flattens every recorded tool call from a normalized session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const names = toolCalls(result.session).map((call) => call.name);\n *\n * expect(names).toEqual([\"lookupInvoice\", \"createRefund\"]);\n * ```\n */\nexport function toolCalls(session: NormalizedSession): ToolCallRecord[] {\n return session.messages.flatMap((message) => message.toolCalls ?? []);\n}\n\n/**\n * Flattens every recorded span from a normalized harness run.\n *\n * @param run - Normalized harness run produced by a harness.\n *\n * @example\n * ```ts\n * const modelSpans = spans(result).filter((span) => span.kind === \"model\");\n * ```\n */\nexport function spans(run: HarnessRun): NormalizedSpan[] {\n return (run.traces ?? []).flatMap((trace) => trace.spans);\n}\n\n/**\n * Alias for `spans(...)` for consumers that prefer trace-oriented naming.\n *\n * @param run - Normalized harness run produced by a harness.\n */\nexport function traceSpans(run: HarnessRun): NormalizedSpan[] {\n return spans(run);\n}\n\n/**\n * Returns spans of one coarse operation kind from a normalized run.\n *\n * @param run - Normalized harness run produced by a harness.\n * @param kind - Span kind to keep.\n */\nexport function spansByKind(\n run: HarnessRun,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[] {\n return spans(run).filter((span) => span.kind === kind);\n}\n\n/**\n * Returns every span that explicitly failed or carries a normalized error.\n *\n * @param run - Normalized harness run produced by a harness.\n */\nexport function failedSpans(run: HarnessRun): NormalizedSpan[] {\n return spans(run).filter(\n (span) => span.status === \"error\" || span.error !== undefined,\n );\n}\n\n/**\n * Filters normalized session messages by role.\n *\n * @param session - Normalized session produced by a harness run.\n * @param role - Message role to keep.\n *\n * @example\n * ```ts\n * const assistantText = messagesByRole(result.session, \"assistant\")\n * .map((message) => message.content)\n * .join(\"\\n\");\n * ```\n */\nexport function messagesByRole(\n session: NormalizedSession,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[] {\n return session.messages.filter((message) => message.role === role);\n}\n\n/**\n * Returns every normalized system message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const systemPrompts = systemMessages(result.session);\n * ```\n */\nexport function systemMessages(session: NormalizedSession) {\n return messagesByRole(session, \"system\");\n}\n\n/**\n * Returns every normalized user message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const firstPrompt = userMessages(result.session)[0]?.content;\n * ```\n */\nexport function userMessages(session: NormalizedSession) {\n return messagesByRole(session, \"user\");\n}\n\n/**\n * Returns every normalized assistant message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const finalAnswer = assistantMessages(session).at(-1)?.content;\n * ```\n */\nexport function assistantMessages(\n session: NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRole(session, \"assistant\");\n}\n\n/**\n * Returns the latest assistant message content, ignoring empty text messages.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const finalAnswer = latestAssistantMessageContent(result.session);\n * ```\n */\nexport function latestAssistantMessageContent(session: NormalizedSession) {\n return [...assistantMessages(session)]\n .reverse()\n .find(hasNonEmptyMessageContent)?.content;\n}\n\n/**\n * Returns every normalized tool message from a session.\n *\n * @param session - Normalized session produced by a harness run.\n *\n * @example\n * ```ts\n * const toolOutputs = toolMessages(session).map((message) => message.content);\n * ```\n */\nexport function toolMessages(session: NormalizedSession) {\n return messagesByRole(session, \"tool\");\n}\n\nfunction hasNonEmptyMessageContent(message: NormalizedMessage) {\n return (\n message.content !== undefined &&\n (typeof message.content !== \"string\" || message.content.trim().length > 0)\n );\n}\n","import { z } from \"zod\";\nimport {\n HarnessRunSchema,\n NormalizedMessageSchema,\n NormalizedSessionSchema,\n NormalizedSpanEventSchema,\n NormalizedSpanSchema,\n NormalizedTraceSchema,\n TimingSummarySchema,\n ToolCallRecordSchema,\n UsageSummarySchema,\n} from \"../harness\";\nimport { JsonObjectSchema, JsonValueSchema } from \"../json\";\nimport { isJsonObject, NullableFiniteNumberSchema } from \"../schema-utils\";\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport const HarnessMetaSchema = z\n .object({\n name: z.string().optional(),\n run: HarnessRunSchema.optional(),\n })\n .strict();\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport type HarnessMeta = z.infer<typeof HarnessMetaSchema>;\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport const EvalScoreSchema = z\n .object({\n name: z.string().optional(),\n score: NullableFiniteNumberSchema,\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport type EvalScore = z.infer<typeof EvalScoreSchema>;\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport const EvalMetaSchema = z\n .object({\n scores: z.array(EvalScoreSchema).optional(),\n avgScore: NullableFiniteNumberSchema,\n output: JsonValueSchema.optional(),\n thresholdFailed: z.boolean().optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n })\n .strict();\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport type EvalMeta = z.infer<typeof EvalMetaSchema>;\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport const EvalTaskMetaSchema = z\n .object({\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport type EvalTaskMeta = z.infer<typeof EvalTaskMetaSchema>;\n\nconst LenientToolCallRecordSchema = ToolCallRecordSchema.strip();\nconst LenientMessageSchema = NormalizedMessageSchema.extend({\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\nconst LenientSessionSchema = NormalizedSessionSchema.extend({\n messages: z.array(LenientMessageSchema).default([]).catch([]),\n}).strip();\nconst LenientSpanEventSchema = NormalizedSpanEventSchema.strip();\nconst LenientSpanSchema = NormalizedSpanSchema.extend({\n events: z.array(LenientSpanEventSchema).optional().catch(undefined),\n}).strip();\nconst LenientTraceSchema = NormalizedTraceSchema.extend({\n spans: z.array(LenientSpanSchema).default([]).catch([]),\n}).strip();\nconst LenientHarnessRunSchema = HarnessRunSchema.extend({\n session: LenientSessionSchema,\n usage: UsageSummarySchema.strip().default({}),\n timings: TimingSummarySchema.strip().optional(),\n traces: z.array(LenientTraceSchema).optional().catch(undefined),\n}).strip();\nconst LenientHarnessMetaSchema = HarnessMetaSchema.extend({\n run: LenientHarnessRunSchema.optional().catch(undefined),\n}).strip();\nconst LenientEvalScoreSchema = EvalScoreSchema.strip();\nconst LenientEvalMetaSchema = EvalMetaSchema.extend({\n scores: z.array(LenientEvalScoreSchema).optional().catch(undefined),\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\n\n/** Reads eval metadata from an arbitrary Vitest assertion meta value. */\nexport function readEvalTaskMeta(input: unknown): EvalTaskMeta | undefined {\n if (!isJsonObject(input)) {\n return undefined;\n }\n\n const evalResult = LenientEvalMetaSchema.safeParse(input.eval);\n const harnessResult = LenientHarnessMetaSchema.safeParse(input.harness);\n const meta: EvalTaskMeta = {\n ...(evalResult.success && input.eval !== undefined\n ? { eval: evalResult.data }\n : {}),\n ...(harnessResult.success && input.harness !== undefined\n ? { harness: harnessResult.data }\n : {}),\n };\n\n return meta.eval || meta.harness ? meta : undefined;\n}\n","import { z } from \"zod\";\nimport {\n FiniteNumberSchema,\n OptionalFiniteNumberSchema,\n parseWithSchema,\n} from \"../schema-utils\";\n\n/** Status values emitted by Vitest JSON reports. */\nexport const VitestJsonStatusSchema = z.enum([\n \"passed\",\n \"failed\",\n \"skipped\",\n \"pending\",\n \"todo\",\n \"disabled\",\n]);\n\n/** Status values emitted by Vitest JSON reports. */\nexport type VitestJsonStatus = z.infer<typeof VitestJsonStatusSchema>;\n\n/** Source location attached to one Vitest assertion. */\nexport const VitestJsonLocationSchema = z\n .object({\n line: FiniteNumberSchema,\n column: FiniteNumberSchema,\n })\n .passthrough();\n\n/** Source location attached to one Vitest assertion. */\nexport type VitestJsonLocation = z.infer<typeof VitestJsonLocationSchema>;\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport const VitestJsonAssertionSchema = z\n .object({\n ancestorTitles: z.array(z.string()).default([]),\n fullName: z.string(),\n status: VitestJsonStatusSchema,\n title: z.string(),\n meta: z.unknown().optional(),\n duration: FiniteNumberSchema.nullable().optional(),\n failureMessages: z.array(z.string()).nullable().optional(),\n location: VitestJsonLocationSchema.nullable().optional(),\n tags: z.array(z.string()).optional(),\n })\n .passthrough();\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport type VitestJsonAssertion = z.infer<typeof VitestJsonAssertionSchema>;\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport const VitestJsonFileSchema = z\n .object({\n message: z.string(),\n name: z.string(),\n status: z.enum([\"failed\", \"passed\"]),\n startTime: OptionalFiniteNumberSchema,\n endTime: OptionalFiniteNumberSchema,\n assertionResults: z.array(VitestJsonAssertionSchema).default([]),\n })\n .passthrough();\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport type VitestJsonFile = z.infer<typeof VitestJsonFileSchema>;\n\n/** Top-level Vitest JSON reporter payload. */\nexport const VitestJsonReportSchema = z\n .object({\n numFailedTests: FiniteNumberSchema,\n numPassedTests: FiniteNumberSchema,\n numPendingTests: FiniteNumberSchema,\n numTodoTests: FiniteNumberSchema,\n numTotalTests: FiniteNumberSchema,\n startTime: FiniteNumberSchema,\n success: z.boolean(),\n testResults: z.array(VitestJsonFileSchema).default([]),\n })\n .passthrough();\n\n/** Top-level Vitest JSON reporter payload. */\nexport type VitestJsonReport = z.infer<typeof VitestJsonReportSchema>;\n\n/** Parses and validates an unknown value as a Vitest JSON report artifact. */\nexport function parseVitestJsonReport(input: unknown): VitestJsonReport {\n return parseWithSchema(VitestJsonReportSchema, input, \"Vitest JSON report\");\n}\n","import { z } from \"zod\";\nimport {\n EvalMetaSchema,\n HarnessMetaSchema,\n readEvalTaskMeta,\n} from \"./metadata\";\nimport { FiniteNumberSchema, parseWithSchema, isRecord } from \"../schema-utils\";\nimport {\n parseVitestJsonReport,\n VitestJsonLocationSchema,\n type VitestJsonAssertion,\n type VitestJsonReport,\n} from \"./vitest-json\";\nimport { VitestJsonStatusSchema } from \"./vitest-json\";\n\n/** Current schema version for collected report workspaces. */\nexport const REPORT_WORKSPACE_SCHEMA_VERSION = 1;\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport const ReportRunSchema = z\n .object({\n id: z.string(),\n source: z.string().optional(),\n status: z.enum([\"passed\", \"failed\"]),\n startedAt: FiniteNumberSchema.optional(),\n durationMs: FiniteNumberSchema.optional(),\n totals: z.object({\n total: FiniteNumberSchema,\n passed: FiniteNumberSchema,\n failed: FiniteNumberSchema,\n skipped: FiniteNumberSchema,\n evalTotal: FiniteNumberSchema,\n evalPassed: FiniteNumberSchema,\n evalFailed: FiniteNumberSchema,\n }),\n })\n .strict();\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport type ReportRun = z.infer<typeof ReportRunSchema>;\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport const ReportCaseSchema = z\n .object({\n id: z.string(),\n runId: z.string(),\n source: z.string().optional(),\n file: z.string(),\n displayFile: z.string(),\n title: z.string(),\n fullName: z.string(),\n ancestorTitles: z.array(z.string()),\n tags: z.array(z.string()).optional(),\n displayName: z.string(),\n status: VitestJsonStatusSchema,\n durationMs: FiniteNumberSchema.optional(),\n location: VitestJsonLocationSchema.optional(),\n failureMessages: z.array(z.string()).default([]),\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport type ReportCase = z.infer<typeof ReportCaseSchema>;\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport const ReportWorkspaceSchema = z\n .object({\n schemaVersion: z.literal(REPORT_WORKSPACE_SCHEMA_VERSION),\n runs: z.array(ReportRunSchema),\n cases: z.array(ReportCaseSchema),\n })\n .strict();\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport type ReportWorkspace = z.infer<typeof ReportWorkspaceSchema>;\n\n/** Input accepted when collecting one Vitest JSON report into a workspace. */\nexport type ReportWorkspaceInput =\n | VitestJsonReport\n | {\n report: VitestJsonReport;\n source?: string;\n };\n\n/** Options for collecting one or more Vitest JSON reports. */\nexport type CollectReportWorkspaceOptions = {\n /** Workspace prefix used to render source files as relative paths. */\n workspace?: string;\n};\n\n/** Parses and validates an unknown value as a collected report workspace. */\nexport function parseReportWorkspace(input: unknown): ReportWorkspace {\n return parseWithSchema(ReportWorkspaceSchema, input, \"report workspace\");\n}\n\n/** Collects eval and harness metadata from one or more Vitest JSON reports. */\nexport function collectReportWorkspace(\n input: ReportWorkspaceInput | ReportWorkspaceInput[],\n options: CollectReportWorkspaceOptions = {},\n): ReportWorkspace {\n const entries = Array.isArray(input) ? input : [input];\n const runs: ReportRun[] = [];\n const cases: ReportCase[] = [];\n\n entries.forEach((entry, index) => {\n const { report, source } = normalizeWorkspaceInput(entry);\n const runId = source ?? `run-${index + 1}`;\n const runCases: ReportCase[] = [];\n\n for (const file of report.testResults) {\n for (const assertion of file.assertionResults) {\n const meta = readEvalTaskMeta(assertion.meta);\n if (!meta) {\n continue;\n }\n\n runCases.push({\n id: createCaseId(runId, file.name, assertion),\n runId,\n ...(source ? { source } : {}),\n file: file.name,\n displayFile: normalizeReportPath(file.name, options.workspace),\n title: assertion.title,\n fullName: assertion.fullName,\n ancestorTitles: assertion.ancestorTitles,\n ...(assertion.tags ? { tags: assertion.tags } : {}),\n displayName: formatDisplayName(assertion),\n status: assertion.status,\n ...(typeof assertion.duration === \"number\"\n ? { durationMs: assertion.duration }\n : {}),\n ...(assertion.location ? { location: assertion.location } : {}),\n failureMessages: assertion.failureMessages ?? [],\n ...(meta.eval ? { eval: meta.eval } : {}),\n ...(meta.harness ? { harness: meta.harness } : {}),\n });\n }\n }\n\n runs.push({\n id: runId,\n ...(source ? { source } : {}),\n status:\n report.success &&\n runCases.every((testCase) => testCase.status !== \"failed\")\n ? \"passed\"\n : \"failed\",\n startedAt: report.startTime,\n durationMs: resolveRunDuration(report),\n totals: {\n total: report.numTotalTests,\n passed: report.numPassedTests,\n failed: report.numFailedTests,\n skipped: report.numPendingTests + report.numTodoTests,\n evalTotal: runCases.length,\n evalPassed: runCases.filter((testCase) => testCase.status === \"passed\")\n .length,\n evalFailed: runCases.filter((testCase) => testCase.status === \"failed\")\n .length,\n },\n });\n cases.push(...runCases);\n });\n\n return {\n schemaVersion: REPORT_WORKSPACE_SCHEMA_VERSION,\n runs,\n cases,\n };\n}\n\nfunction normalizeWorkspaceInput(input: ReportWorkspaceInput) {\n if (isVitestJsonReportLike(input)) {\n return {\n report: parseVitestJsonReport(input),\n };\n }\n\n if (isRecord(input) && \"report\" in input) {\n return {\n report: parseVitestJsonReport(input.report),\n source: typeof input.source === \"string\" ? input.source : undefined,\n };\n }\n\n return {\n report: parseVitestJsonReport(input),\n };\n}\n\nfunction isVitestJsonReportLike(input: unknown) {\n return isRecord(input) && Array.isArray(input.testResults);\n}\n\nfunction createCaseId(\n runId: string,\n file: string,\n assertion: VitestJsonAssertion,\n) {\n return [runId, file, assertion.location?.line ?? 0, assertion.fullName].join(\n \":\",\n );\n}\n\nfunction formatDisplayName(assertion: VitestJsonAssertion) {\n return [...assertion.ancestorTitles, assertion.title]\n .filter((part) => part.length > 0)\n .join(\" > \");\n}\n\nfunction resolveRunDuration(report: VitestJsonReport) {\n const intervals = report.testResults\n .map((file) => {\n const start = file.startTime;\n const end = file.endTime;\n if (!isFiniteNumber(start) || !isFiniteNumber(end) || end < start) {\n return undefined;\n }\n\n return {\n start,\n end,\n };\n })\n .filter((interval): interval is { start: number; end: number } =>\n Boolean(interval),\n );\n\n if (intervals.length === 0) {\n return undefined;\n }\n\n return (\n Math.max(...intervals.map((interval) => interval.end)) -\n Math.min(...intervals.map((interval) => interval.start))\n );\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction normalizeReportPath(path: string, workspace?: string) {\n const normalized = path.replace(/\\\\/g, \"/\");\n if (!workspace) {\n return normalized;\n }\n\n const workspacePath = workspace.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n if (\n normalized !== workspacePath &&\n !normalized.startsWith(`${workspacePath}/`)\n ) {\n return normalized;\n }\n\n return normalized.slice(workspacePath.length).replace(/^\\/+/, \"\");\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/json.ts","../src/harness/index.ts","../src/schema-utils.ts","../src/harness/helpers.ts","../src/report/metadata.ts","../src/report/vitest-json.ts","../src/report/workspace.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Primitive scalar values allowed in persisted vitest-evals JSON artifacts. */\nexport type JsonPrimitive = string | number | boolean | null;\n\n/** JSON-safe value shape used by reports, normalized sessions, and traces. */\nexport type JsonValue =\n | JsonPrimitive\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n/** Schema for primitive scalar values in persisted report artifacts. */\nexport const JsonPrimitiveSchema = z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n]);\n\n/** Schema for any JSON-safe value in persisted report artifacts. */\nexport const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n JsonPrimitiveSchema,\n z.array(JsonValueSchema),\n z.record(z.string(), JsonValueSchema),\n ]),\n);\n\n/** Schema for JSON-safe object records in persisted report artifacts. */\nexport const JsonObjectSchema = z.record(z.string(), JsonValueSchema);\n","import { z } from \"zod\";\nimport type { NormalizedSpanAttributes } from \"../genai\";\nimport { JsonObjectSchema, JsonValueSchema, type JsonValue } from \"../json\";\nimport { FiniteNumberSchema } from \"../schema-utils\";\n\n/** Normalized error attached to tool calls and spans. */\nexport type NormalizedError = {\n /** Human-readable failure message. */\n message: string;\n /** Optional provider or runtime error type. */\n type?: string;\n /** Extra JSON-safe error metadata. */\n [key: string]: JsonValue | undefined;\n};\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport const UsageSummarySchema = z\n .object({\n provider: z.string().optional(),\n model: z.string().optional(),\n inputTokens: FiniteNumberSchema.optional(),\n outputTokens: FiniteNumberSchema.optional(),\n reasoningTokens: FiniteNumberSchema.optional(),\n totalTokens: FiniteNumberSchema.optional(),\n toolCalls: FiniteNumberSchema.optional(),\n retries: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Usage values normalized by vitest-evals harnesses. */\nexport type UsageSummary = {\n /** Provider that served the application run. */\n provider?: string;\n /** Model used for the application run. */\n model?: string;\n /** Input, prompt, or request tokens consumed by the run. */\n inputTokens?: number;\n /** Output or completion tokens produced by the run. */\n outputTokens?: number;\n /** Reasoning tokens reported by providers that expose them. */\n reasoningTokens?: number;\n /** Total token count reported by the provider or adapter. */\n totalTokens?: number;\n /** Count of tool calls observed during the run. */\n toolCalls?: number;\n /** Retry count observed during the run. */\n retries?: number;\n /** Provider-specific JSON-safe usage details. Cost estimates belong here. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport const TimingSummarySchema = z\n .object({\n totalMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Timing values normalized by vitest-evals harnesses. */\nexport type TimingSummary = {\n /** End-to-end run duration in milliseconds. */\n totalMs?: number;\n /** Extra JSON-safe timing metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized error object captured in a tool call or trace span. */\nexport const NormalizedErrorSchema = z\n .object({\n message: z.string(),\n type: z.string().optional(),\n })\n .catchall(JsonValueSchema);\n\n/** Normalized tool call captured in a harness session. */\nexport const ToolCallRecordSchema = z\n .object({\n id: z.string().optional(),\n name: z.string(),\n arguments: JsonObjectSchema.optional(),\n result: JsonValueSchema.optional(),\n error: NormalizedErrorSchema.optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized tool call captured in a harness session. */\nexport type ToolCallRecord = {\n /** Provider or runtime tool-call id when one is available. */\n id?: string;\n /** Tool name as exposed to the agent or application runtime. */\n name: string;\n /** JSON-safe tool arguments after provider/runtime normalization. */\n arguments?: Record<string, JsonValue>;\n /** JSON-safe tool result returned by the application tool. */\n result?: JsonValue;\n /** Normalized tool error when execution failed. */\n error?: NormalizedError;\n /** ISO timestamp for the start of tool execution. */\n startedAt?: string;\n /** ISO timestamp for the end of tool execution. */\n finishedAt?: string;\n /** Tool execution duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe tool metadata for reporters and custom judges. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript message captured in a harness session. */\nexport const NormalizedMessageSchema = z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\", \"tool\"]),\n content: JsonValueSchema.optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript message captured in a harness session. */\nexport type NormalizedMessage = {\n /** Transcript role for the normalized message. */\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n /** JSON-safe message content. */\n content?: JsonValue;\n /** Tool calls associated with this message. */\n toolCalls?: ToolCallRecord[];\n /** Extra JSON-safe message metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Normalized transcript produced by an application harness. */\nexport const NormalizedSessionSchema = z\n .object({\n messages: z.array(NormalizedMessageSchema).default([]),\n provider: z.string().optional(),\n model: z.string().optional(),\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Normalized transcript produced by an application harness. */\nexport type NormalizedSession = {\n /** Ordered normalized transcript messages. */\n messages: NormalizedMessage[];\n /** Provider that produced the session when known. */\n provider?: string;\n /** Model that produced the session when known. */\n model?: string;\n /** Extra JSON-safe session metadata. */\n metadata?: Record<string, JsonValue>;\n};\n\n/** Attribute schema attached to normalized traces, spans, and events. */\nexport const NormalizedSpanAttributesSchema = JsonObjectSchema;\n\n/** Event attached to a normalized span. */\nexport const NormalizedSpanEventSchema = z\n .object({\n name: z.string(),\n timestamp: z.string().optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n })\n .strict();\n\n/** Event attached to a normalized span. */\nexport type NormalizedSpanEvent = {\n /** Event name emitted by the runtime or harness. */\n name: string;\n /** ISO timestamp for the event when available. */\n timestamp?: string;\n /** JSON-safe event attributes. */\n attributes?: NormalizedSpanAttributes;\n};\n\n/** Normalized operation span captured during a harness run. */\nexport const NormalizedSpanSchema = z\n .object({\n id: z.string().optional(),\n traceId: z.string().optional(),\n parentId: z.string().optional(),\n name: z.string(),\n kind: z\n .enum([\"run\", \"agent\", \"model\", \"tool\", \"guardrail\", \"handoff\", \"custom\"])\n .optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n status: z.enum([\"ok\", \"error\"]).optional(),\n error: NormalizedErrorSchema.optional(),\n attributes: NormalizedSpanAttributesSchema.optional(),\n events: z.array(NormalizedSpanEventSchema).optional(),\n })\n .strict();\n\n/** Normalized operation span captured during a harness run. */\nexport type NormalizedSpan = {\n /** Runtime or provider span id when one is available. */\n id?: string;\n /** Trace id this span belongs to. */\n traceId?: string;\n /** Parent span id when the runtime exposes hierarchy. */\n parentId?: string;\n /** Human-readable operation name. */\n name: string;\n /** Coarse operation kind used by reporters and judges. */\n kind?:\n | \"run\"\n | \"agent\"\n | \"model\"\n | \"tool\"\n | \"guardrail\"\n | \"handoff\"\n | \"custom\";\n /** ISO timestamp for the start of the span. */\n startedAt?: string;\n /** ISO timestamp for the end of the span. */\n finishedAt?: string;\n /** Span duration in milliseconds. */\n durationMs?: number;\n /** Success or failure status for the span. */\n status?: \"ok\" | \"error\";\n /** Normalized error when the span failed. */\n error?: NormalizedError;\n /** JSON-safe operation attributes. */\n attributes?: NormalizedSpanAttributes;\n /** Events observed inside this span. */\n events?: NormalizedSpanEvent[];\n};\n\n/** Normalized trace captured during a harness run. */\nexport const NormalizedTraceSchema = z\n .object({\n id: z.string().optional(),\n name: z.string().optional(),\n startedAt: z.string().optional(),\n finishedAt: z.string().optional(),\n durationMs: FiniteNumberSchema.optional(),\n metadata: JsonObjectSchema.optional(),\n spans: z.array(NormalizedSpanSchema).default([]),\n })\n .strict();\n\n/** Normalized trace captured during a harness run. */\nexport type NormalizedTrace = {\n /** Runtime or provider trace id when one is available. */\n id?: string;\n /** Human-readable trace or workflow name. */\n name?: string;\n /** ISO timestamp for the start of the trace. */\n startedAt?: string;\n /** ISO timestamp for the end of the trace. */\n finishedAt?: string;\n /** Trace duration in milliseconds. */\n durationMs?: number;\n /** Extra JSON-safe trace metadata. */\n metadata?: Record<string, JsonValue>;\n /** Spans that make up this trace. */\n spans: NormalizedSpan[];\n};\n\n/** Full normalized harness run as stored in Vitest assertion metadata. */\nexport const HarnessRunSchema = z\n .object({\n output: JsonValueSchema.optional(),\n session: NormalizedSessionSchema,\n usage: UsageSummarySchema,\n timings: TimingSummarySchema.optional(),\n artifacts: JsonObjectSchema.optional(),\n traces: z.array(NormalizedTraceSchema).optional(),\n errors: z.array(JsonObjectSchema).default([]),\n })\n .strict();\n\ntype OutputField<TOutput extends JsonValue | undefined> =\n undefined extends TOutput ? { output?: TOutput } : { output: TOutput };\n\n/**\n * Normalized result returned by every harness execution.\n *\n * @example\n * ```ts\n * const run: HarnessRun<{ status: \"approved\" }> = {\n * output: { status: \"approved\" },\n * session: {\n * messages: [\n * { role: \"user\", content: \"Refund invoice inv_123\" },\n * { role: \"assistant\", content: { status: \"approved\" } },\n * ],\n * },\n * usage: { totalTokens: 260 },\n * errors: [],\n * };\n * ```\n */\nexport type HarnessRun<\n TOutput extends JsonValue | undefined = JsonValue | undefined,\n> = OutputField<TOutput> & {\n /** Normalized transcript and provider/session metadata. */\n session: NormalizedSession;\n /** Stable provider usage units such as tokens, tools, and retries. */\n usage: UsageSummary;\n /** Optional timing summary for the run. */\n timings?: TimingSummary;\n /** JSON-safe run artifacts captured by the harness or test context. */\n artifacts?: Record<string, JsonValue>;\n /** Normalized traces and spans captured during execution. */\n traces?: NormalizedTrace[];\n /** Normalized errors captured during execution. */\n errors: Array<Record<string, JsonValue>>;\n};\n\n/** Error value with an attached partial or complete normalized harness run. */\nexport type HarnessRunError = Error & {\n /** Attached normalized harness run recovered from a thrown error. */\n vitestEvalsRun: HarnessRun;\n};\n","import { z } from \"zod\";\nimport type { JsonValue } from \"./json\";\n\nexport const FiniteNumberSchema = z.number().finite();\n\nexport const OptionalFiniteNumberSchema = z.preprocess(\n (value) =>\n value === null || (typeof value === \"number\" && !Number.isFinite(value))\n ? undefined\n : value,\n FiniteNumberSchema.optional(),\n);\n\nexport const NullableFiniteNumberSchema = z.preprocess(\n (value) =>\n typeof value === \"number\" && !Number.isFinite(value) ? null : value,\n FiniteNumberSchema.nullable().optional(),\n);\n\nexport function parseWithSchema<T>(\n schema: z.ZodType<T>,\n input: unknown,\n label: string,\n) {\n const parsed = schema.safeParse(input);\n if (parsed.success) {\n return parsed.data;\n }\n\n const reason = parsed.error.issues\n .slice(0, 3)\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\";\n return `${path}: ${issue.message}`;\n })\n .join(\"; \");\n throw new Error(`Invalid ${label}: ${reason}`);\n}\n\nexport function isJsonObject(\n value: unknown,\n): value is Record<string, JsonValue> {\n return isRecord(value);\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import type {\n HarnessRun,\n NormalizedMessage,\n NormalizedSession,\n NormalizedSpan,\n NormalizedTrace,\n ToolCallRecord,\n} from \"./index\";\nimport type { JsonValue } from \"../json\";\n\n/**\n * Flattens every recorded tool call from a normalized run or session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const names = toolCalls(result).map((call) => call.name);\n *\n * expect(names).toEqual([\"lookupInvoice\", \"createRefund\"]);\n * ```\n */\nexport function toolCalls(run: HarnessRun): ToolCallRecord[];\nexport function toolCalls(session: NormalizedSession): ToolCallRecord[];\nexport function toolCalls(\n source: HarnessRun | NormalizedSession,\n): ToolCallRecord[] {\n return sessionFrom(source).messages.flatMap(\n (message) => message.toolCalls ?? [],\n );\n}\n\n/**\n * Flattens every recorded span from a normalized harness run or trace list.\n *\n * @param source - Normalized run or trace list produced by a harness.\n *\n * @example\n * ```ts\n * const modelSpans = spans(result).filter((span) => span.kind === \"model\");\n * ```\n */\nexport function spans(run: HarnessRun): NormalizedSpan[];\nexport function spans(\n traces: readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[];\nexport function spans(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return spansFrom(source);\n}\n\n/**\n * Alias for `spans(...)` for consumers that prefer trace-oriented naming.\n *\n * @param source - Normalized run or trace list produced by a harness.\n */\nexport function traceSpans(run: HarnessRun): NormalizedSpan[];\nexport function traceSpans(\n traces: readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[];\nexport function traceSpans(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return spansFrom(source);\n}\n\n/**\n * Returns spans of one coarse operation kind from a normalized run or trace list.\n *\n * @param source - Normalized run or trace list produced by a harness.\n * @param kind - Span kind to keep.\n */\nexport function spansByKind(\n run: HarnessRun,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[];\nexport function spansByKind(\n traces: readonly NormalizedTrace[] | undefined,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[];\nexport function spansByKind(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n kind: NonNullable<NormalizedSpan[\"kind\"]>,\n): NormalizedSpan[] {\n return spansFrom(source).filter((span) => span.kind === kind);\n}\n\n/**\n * Returns every span that explicitly failed or carries a normalized error.\n *\n * @param source - Normalized run or trace list produced by a harness.\n */\nexport function failedSpans(run: HarnessRun): NormalizedSpan[];\nexport function failedSpans(\n traces: readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[];\nexport function failedSpans(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return spansFrom(source).filter(\n (span) => span.status === \"error\" || span.error !== undefined,\n );\n}\n\n/**\n * Filters normalized session messages by role.\n *\n * @param source - Normalized run or session produced by a harness.\n * @param role - Message role to keep.\n *\n * @example\n * ```ts\n * const assistantText = messagesByRole(result, \"assistant\")\n * .map((message) => message.content)\n * .join(\"\\n\");\n * ```\n */\nexport function messagesByRole(\n run: HarnessRun,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[];\nexport function messagesByRole(\n session: NormalizedSession,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[];\nexport function messagesByRole(\n source: HarnessRun | NormalizedSession,\n role: NormalizedMessage[\"role\"],\n): NormalizedMessage[] {\n return sessionFrom(source).messages.filter(\n (message) => message.role === role,\n );\n}\n\n/**\n * Returns every normalized system message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const systemPrompts = systemMessages(result);\n * ```\n */\nexport function systemMessages(run: HarnessRun): NormalizedMessage[];\nexport function systemMessages(session: NormalizedSession): NormalizedMessage[];\nexport function systemMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"system\");\n}\n\n/**\n * Returns every normalized user message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const firstPrompt = userMessages(result)[0]?.content;\n * ```\n */\nexport function userMessages(run: HarnessRun): NormalizedMessage[];\nexport function userMessages(session: NormalizedSession): NormalizedMessage[];\nexport function userMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"user\");\n}\n\n/**\n * Returns every normalized assistant message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const finalAnswer = assistantMessages(result).at(-1)?.content;\n * ```\n */\nexport function assistantMessages(run: HarnessRun): NormalizedMessage[];\nexport function assistantMessages(\n session: NormalizedSession,\n): NormalizedMessage[];\nexport function assistantMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"assistant\");\n}\n\n/**\n * Returns the latest assistant message content, ignoring empty text messages.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const finalAnswer = latestAssistantMessageContent(result);\n * ```\n */\nexport function latestAssistantMessageContent(\n run: HarnessRun,\n): JsonValue | undefined;\nexport function latestAssistantMessageContent(\n session: NormalizedSession,\n): JsonValue | undefined;\nexport function latestAssistantMessageContent(\n source: HarnessRun | NormalizedSession,\n) {\n return [...messagesByRoleFromSource(source, \"assistant\")]\n .reverse()\n .find(hasNonEmptyMessageContent)?.content;\n}\n\n/**\n * Returns every normalized tool message from a session.\n *\n * @param source - Normalized run or session produced by a harness.\n *\n * @example\n * ```ts\n * const toolOutputs = toolMessages(result).map((message) => message.content);\n * ```\n */\nexport function toolMessages(run: HarnessRun): NormalizedMessage[];\nexport function toolMessages(session: NormalizedSession): NormalizedMessage[];\nexport function toolMessages(\n source: HarnessRun | NormalizedSession,\n): NormalizedMessage[] {\n return messagesByRoleFromSource(source, \"tool\");\n}\n\nfunction sessionFrom(source: HarnessRun | NormalizedSession) {\n return \"session\" in source ? source.session : source;\n}\n\nfunction tracesFrom(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): readonly NormalizedTrace[] {\n if (source === undefined) {\n return [];\n }\n if (isTraceList(source)) {\n return source;\n }\n return source.traces ?? [];\n}\n\nfunction spansFrom(\n source: HarnessRun | readonly NormalizedTrace[] | undefined,\n): NormalizedSpan[] {\n return tracesFrom(source).flatMap((trace) => trace.spans);\n}\n\nfunction isTraceList(\n source: HarnessRun | readonly NormalizedTrace[],\n): source is readonly NormalizedTrace[] {\n return Array.isArray(source);\n}\n\nfunction messagesByRoleFromSource(\n source: HarnessRun | NormalizedSession,\n role: NormalizedMessage[\"role\"],\n) {\n return sessionFrom(source).messages.filter(\n (message) => message.role === role,\n );\n}\n\nfunction hasNonEmptyMessageContent(message: NormalizedMessage) {\n return (\n message.content !== undefined &&\n (typeof message.content !== \"string\" || message.content.trim().length > 0)\n );\n}\n","import { z } from \"zod\";\nimport {\n HarnessRunSchema,\n NormalizedMessageSchema,\n NormalizedSessionSchema,\n NormalizedSpanEventSchema,\n NormalizedSpanSchema,\n NormalizedTraceSchema,\n TimingSummarySchema,\n ToolCallRecordSchema,\n UsageSummarySchema,\n} from \"../harness\";\nimport { JsonObjectSchema, JsonValueSchema } from \"../json\";\nimport { isJsonObject, NullableFiniteNumberSchema } from \"../schema-utils\";\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport const HarnessMetaSchema = z\n .object({\n name: z.string().optional(),\n run: HarnessRunSchema.optional(),\n })\n .strict();\n\n/** Harness metadata stored by vitest-evals on Vitest task metadata. */\nexport type HarnessMeta = z.infer<typeof HarnessMetaSchema>;\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport const EvalScoreSchema = z\n .object({\n name: z.string().optional(),\n score: NullableFiniteNumberSchema,\n metadata: JsonObjectSchema.optional(),\n })\n .strict();\n\n/** Score record stored by vitest-evals on Vitest task metadata. */\nexport type EvalScore = z.infer<typeof EvalScoreSchema>;\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport const EvalMetaSchema = z\n .object({\n scores: z.array(EvalScoreSchema).optional(),\n avgScore: NullableFiniteNumberSchema,\n output: JsonValueSchema.optional(),\n thresholdFailed: z.boolean().optional(),\n toolCalls: z.array(ToolCallRecordSchema).optional(),\n })\n .strict();\n\n/** Eval metadata stored by vitest-evals on Vitest task metadata. */\nexport type EvalMeta = z.infer<typeof EvalMetaSchema>;\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport const EvalTaskMetaSchema = z\n .object({\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** Combined eval and harness metadata stored on a Vitest assertion. */\nexport type EvalTaskMeta = z.infer<typeof EvalTaskMetaSchema>;\n\nconst LenientToolCallRecordSchema = ToolCallRecordSchema.strip();\nconst LenientMessageSchema = NormalizedMessageSchema.extend({\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\nconst LenientSessionSchema = NormalizedSessionSchema.extend({\n messages: z.array(LenientMessageSchema).default([]).catch([]),\n}).strip();\nconst LenientSpanEventSchema = NormalizedSpanEventSchema.strip();\nconst LenientSpanSchema = NormalizedSpanSchema.extend({\n events: z.array(LenientSpanEventSchema).optional().catch(undefined),\n}).strip();\nconst LenientTraceSchema = NormalizedTraceSchema.extend({\n spans: z.array(LenientSpanSchema).default([]).catch([]),\n}).strip();\nconst LenientHarnessRunSchema = HarnessRunSchema.extend({\n session: LenientSessionSchema,\n usage: UsageSummarySchema.strip().default({}),\n timings: TimingSummarySchema.strip().optional(),\n traces: z.array(LenientTraceSchema).optional().catch(undefined),\n}).strip();\nconst LenientHarnessMetaSchema = HarnessMetaSchema.extend({\n run: LenientHarnessRunSchema.optional().catch(undefined),\n}).strip();\nconst LenientEvalScoreSchema = EvalScoreSchema.strip();\nconst LenientEvalMetaSchema = EvalMetaSchema.extend({\n scores: z.array(LenientEvalScoreSchema).optional().catch(undefined),\n toolCalls: z.array(LenientToolCallRecordSchema).optional().catch(undefined),\n}).strip();\n\n/** Reads eval metadata from an arbitrary Vitest assertion meta value. */\nexport function readEvalTaskMeta(input: unknown): EvalTaskMeta | undefined {\n if (!isJsonObject(input)) {\n return undefined;\n }\n\n const evalResult = LenientEvalMetaSchema.safeParse(input.eval);\n const harnessResult = LenientHarnessMetaSchema.safeParse(input.harness);\n const meta: EvalTaskMeta = {\n ...(evalResult.success && input.eval !== undefined\n ? { eval: evalResult.data }\n : {}),\n ...(harnessResult.success && input.harness !== undefined\n ? { harness: harnessResult.data }\n : {}),\n };\n\n return meta.eval || meta.harness ? meta : undefined;\n}\n","import { z } from \"zod\";\nimport {\n FiniteNumberSchema,\n OptionalFiniteNumberSchema,\n parseWithSchema,\n} from \"../schema-utils\";\n\n/** Status values emitted by Vitest JSON reports. */\nexport const VitestJsonStatusSchema = z.enum([\n \"passed\",\n \"failed\",\n \"skipped\",\n \"pending\",\n \"todo\",\n \"disabled\",\n]);\n\n/** Status values emitted by Vitest JSON reports. */\nexport type VitestJsonStatus = z.infer<typeof VitestJsonStatusSchema>;\n\n/** Source location attached to one Vitest assertion. */\nexport const VitestJsonLocationSchema = z\n .object({\n line: FiniteNumberSchema,\n column: FiniteNumberSchema,\n })\n .passthrough();\n\n/** Source location attached to one Vitest assertion. */\nexport type VitestJsonLocation = z.infer<typeof VitestJsonLocationSchema>;\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport const VitestJsonAssertionSchema = z\n .object({\n ancestorTitles: z.array(z.string()).default([]),\n fullName: z.string(),\n status: VitestJsonStatusSchema,\n title: z.string(),\n meta: z.unknown().optional(),\n duration: FiniteNumberSchema.nullable().optional(),\n failureMessages: z.array(z.string()).nullable().optional(),\n location: VitestJsonLocationSchema.nullable().optional(),\n tags: z.array(z.string()).optional(),\n })\n .passthrough();\n\n/** Assertion record read from Vitest's JSON reporter output. */\nexport type VitestJsonAssertion = z.infer<typeof VitestJsonAssertionSchema>;\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport const VitestJsonFileSchema = z\n .object({\n message: z.string(),\n name: z.string(),\n status: z.enum([\"failed\", \"passed\"]),\n startTime: OptionalFiniteNumberSchema,\n endTime: OptionalFiniteNumberSchema,\n assertionResults: z.array(VitestJsonAssertionSchema).default([]),\n })\n .passthrough();\n\n/** Test-file record read from Vitest's JSON reporter output. */\nexport type VitestJsonFile = z.infer<typeof VitestJsonFileSchema>;\n\n/** Top-level Vitest JSON reporter payload. */\nexport const VitestJsonReportSchema = z\n .object({\n numFailedTests: FiniteNumberSchema,\n numPassedTests: FiniteNumberSchema,\n numPendingTests: FiniteNumberSchema,\n numTodoTests: FiniteNumberSchema,\n numTotalTests: FiniteNumberSchema,\n startTime: FiniteNumberSchema,\n success: z.boolean(),\n testResults: z.array(VitestJsonFileSchema).default([]),\n })\n .passthrough();\n\n/** Top-level Vitest JSON reporter payload. */\nexport type VitestJsonReport = z.infer<typeof VitestJsonReportSchema>;\n\n/** Parses and validates an unknown value as a Vitest JSON report artifact. */\nexport function parseVitestJsonReport(input: unknown): VitestJsonReport {\n return parseWithSchema(VitestJsonReportSchema, input, \"Vitest JSON report\");\n}\n","import { z } from \"zod\";\nimport {\n EvalMetaSchema,\n HarnessMetaSchema,\n readEvalTaskMeta,\n} from \"./metadata\";\nimport { FiniteNumberSchema, parseWithSchema, isRecord } from \"../schema-utils\";\nimport {\n parseVitestJsonReport,\n VitestJsonLocationSchema,\n type VitestJsonAssertion,\n type VitestJsonReport,\n} from \"./vitest-json\";\nimport { VitestJsonStatusSchema } from \"./vitest-json\";\n\n/** Current schema version for collected report workspaces. */\nexport const REPORT_WORKSPACE_SCHEMA_VERSION = 1;\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport const ReportRunSchema = z\n .object({\n id: z.string(),\n source: z.string().optional(),\n status: z.enum([\"passed\", \"failed\"]),\n startedAt: FiniteNumberSchema.optional(),\n durationMs: FiniteNumberSchema.optional(),\n totals: z.object({\n total: FiniteNumberSchema,\n passed: FiniteNumberSchema,\n failed: FiniteNumberSchema,\n skipped: FiniteNumberSchema,\n evalTotal: FiniteNumberSchema,\n evalPassed: FiniteNumberSchema,\n evalFailed: FiniteNumberSchema,\n }),\n })\n .strict();\n\n/** One collected Vitest JSON report source in a multi-run workspace. */\nexport type ReportRun = z.infer<typeof ReportRunSchema>;\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport const ReportCaseSchema = z\n .object({\n id: z.string(),\n runId: z.string(),\n source: z.string().optional(),\n file: z.string(),\n displayFile: z.string(),\n title: z.string(),\n fullName: z.string(),\n ancestorTitles: z.array(z.string()),\n tags: z.array(z.string()).optional(),\n displayName: z.string(),\n status: VitestJsonStatusSchema,\n durationMs: FiniteNumberSchema.optional(),\n location: VitestJsonLocationSchema.optional(),\n failureMessages: z.array(z.string()).default([]),\n eval: EvalMetaSchema.optional(),\n harness: HarnessMetaSchema.optional(),\n })\n .strict();\n\n/** One eval or harness-backed test case collected from Vitest JSON. */\nexport type ReportCase = z.infer<typeof ReportCaseSchema>;\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport const ReportWorkspaceSchema = z\n .object({\n schemaVersion: z.literal(REPORT_WORKSPACE_SCHEMA_VERSION),\n runs: z.array(ReportRunSchema),\n cases: z.array(ReportCaseSchema),\n })\n .strict();\n\n/** Full multi-run report workspace consumed by rich report UIs. */\nexport type ReportWorkspace = z.infer<typeof ReportWorkspaceSchema>;\n\n/** Input accepted when collecting one Vitest JSON report into a workspace. */\nexport type ReportWorkspaceInput =\n | VitestJsonReport\n | {\n report: VitestJsonReport;\n source?: string;\n };\n\n/** Options for collecting one or more Vitest JSON reports. */\nexport type CollectReportWorkspaceOptions = {\n /** Workspace prefix used to render source files as relative paths. */\n workspace?: string;\n};\n\n/** Parses and validates an unknown value as a collected report workspace. */\nexport function parseReportWorkspace(input: unknown): ReportWorkspace {\n return parseWithSchema(ReportWorkspaceSchema, input, \"report workspace\");\n}\n\n/** Collects eval and harness metadata from one or more Vitest JSON reports. */\nexport function collectReportWorkspace(\n input: ReportWorkspaceInput | ReportWorkspaceInput[],\n options: CollectReportWorkspaceOptions = {},\n): ReportWorkspace {\n const entries = Array.isArray(input) ? input : [input];\n const runs: ReportRun[] = [];\n const cases: ReportCase[] = [];\n\n entries.forEach((entry, index) => {\n const { report, source } = normalizeWorkspaceInput(entry);\n const runId = source ?? `run-${index + 1}`;\n const runCases: ReportCase[] = [];\n\n for (const file of report.testResults) {\n for (const assertion of file.assertionResults) {\n const meta = readEvalTaskMeta(assertion.meta);\n if (!meta) {\n continue;\n }\n\n runCases.push({\n id: createCaseId(runId, file.name, assertion),\n runId,\n ...(source ? { source } : {}),\n file: file.name,\n displayFile: normalizeReportPath(file.name, options.workspace),\n title: assertion.title,\n fullName: assertion.fullName,\n ancestorTitles: assertion.ancestorTitles,\n ...(assertion.tags ? { tags: assertion.tags } : {}),\n displayName: formatDisplayName(assertion),\n status: assertion.status,\n ...(typeof assertion.duration === \"number\"\n ? { durationMs: assertion.duration }\n : {}),\n ...(assertion.location ? { location: assertion.location } : {}),\n failureMessages: assertion.failureMessages ?? [],\n ...(meta.eval ? { eval: meta.eval } : {}),\n ...(meta.harness ? { harness: meta.harness } : {}),\n });\n }\n }\n\n runs.push({\n id: runId,\n ...(source ? { source } : {}),\n status:\n report.success &&\n runCases.every((testCase) => testCase.status !== \"failed\")\n ? \"passed\"\n : \"failed\",\n startedAt: report.startTime,\n durationMs: resolveRunDuration(report),\n totals: {\n total: report.numTotalTests,\n passed: report.numPassedTests,\n failed: report.numFailedTests,\n skipped: report.numPendingTests + report.numTodoTests,\n evalTotal: runCases.length,\n evalPassed: runCases.filter((testCase) => testCase.status === \"passed\")\n .length,\n evalFailed: runCases.filter((testCase) => testCase.status === \"failed\")\n .length,\n },\n });\n cases.push(...runCases);\n });\n\n return {\n schemaVersion: REPORT_WORKSPACE_SCHEMA_VERSION,\n runs,\n cases,\n };\n}\n\nfunction normalizeWorkspaceInput(input: ReportWorkspaceInput) {\n if (isVitestJsonReportLike(input)) {\n return {\n report: parseVitestJsonReport(input),\n };\n }\n\n if (isRecord(input) && \"report\" in input) {\n return {\n report: parseVitestJsonReport(input.report),\n source: typeof input.source === \"string\" ? input.source : undefined,\n };\n }\n\n return {\n report: parseVitestJsonReport(input),\n };\n}\n\nfunction isVitestJsonReportLike(input: unknown) {\n return isRecord(input) && Array.isArray(input.testResults);\n}\n\nfunction createCaseId(\n runId: string,\n file: string,\n assertion: VitestJsonAssertion,\n) {\n return [runId, file, assertion.location?.line ?? 0, assertion.fullName].join(\n \":\",\n );\n}\n\nfunction formatDisplayName(assertion: VitestJsonAssertion) {\n return [...assertion.ancestorTitles, assertion.title]\n .filter((part) => part.length > 0)\n .join(\" > \");\n}\n\nfunction resolveRunDuration(report: VitestJsonReport) {\n const intervals = report.testResults\n .map((file) => {\n const start = file.startTime;\n const end = file.endTime;\n if (!isFiniteNumber(start) || !isFiniteNumber(end) || end < start) {\n return undefined;\n }\n\n return {\n start,\n end,\n };\n })\n .filter((interval): interval is { start: number; end: number } =>\n Boolean(interval),\n );\n\n if (intervals.length === 0) {\n return undefined;\n }\n\n return (\n Math.max(...intervals.map((interval) => interval.end)) -\n Math.min(...intervals.map((interval) => interval.start))\n );\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction normalizeReportPath(path: string, workspace?: string) {\n const normalized = path.replace(/\\\\/g, \"/\");\n if (!workspace) {\n return normalized;\n }\n\n const workspacePath = workspace.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n if (\n normalized !== workspacePath &&\n !normalized.startsWith(`${workspacePath}/`)\n ) {\n return normalized;\n }\n\n return normalized.slice(workspacePath.length).replace(/^\\/+/, \"\");\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z"]}
|