zeitzeuge 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1509,6 +1509,47 @@ function printFindingsVitest(findings) {
1509
1509
  };
1510
1510
  console.log(`${indent}${pc.dim("Summary:")} ${pc.red(`${counts.critical} critical`)}, ${pc.yellow(`${counts.warning} warning`)}, ${pc.green(`${counts.info} info`)}`);
1511
1511
  }
1512
+ function printMetricsSummary(metrics) {
1513
+ const indent = " ";
1514
+ const s = metrics.suite;
1515
+ const c = metrics.cpu;
1516
+ console.log(`${indent}${pc.bold("Suite")}`);
1517
+ console.log(`${indent} Total: ${formatMs(s.totalDuration)} · ` + `${s.totalTests} tests (${s.passCount} pass, ${s.failCount} fail) · ` + `Setup: ${formatMs(s.totalSetupTime)}`);
1518
+ console.log(`${indent} Avg: ${formatMs(s.averageTestDuration)} · ` + `Median: ${formatMs(s.medianTestDuration)} · ` + `P95: ${formatMs(s.p95TestDuration)} · ` + `Slowest: ${formatMs(s.slowestTestDuration)}`);
1519
+ if (s.slowestFile) {
1520
+ console.log(`${indent} Slowest file: ${s.slowestFile} (${formatMs(s.slowestFileDuration)})`);
1521
+ }
1522
+ if (c.gcTime > 0 || c.applicationTime > 0) {
1523
+ console.log("");
1524
+ console.log(`${indent}${pc.bold("CPU Breakdown")}`);
1525
+ console.log(`${indent} Application: ${formatMs(c.applicationTime)} (${c.applicationPercent}%) · ` + `Dependencies: ${formatMs(c.dependencyTime)} (${c.dependencyPercent}%) · ` + `Test/Framework: ${formatMs(c.testFrameworkTime)} (${c.testFrameworkPercent}%)`);
1526
+ console.log(`${indent} GC: ${formatMs(c.gcTime)} (${c.gcPercentage}%) · ` + `Idle: ${formatMs(c.idleTime)} (${c.idlePercentage}%)`);
1527
+ }
1528
+ if (metrics.hotFunctions.length > 0) {
1529
+ console.log("");
1530
+ console.log(`${indent}${pc.bold("Top Hot Functions")}`);
1531
+ const top5 = metrics.hotFunctions.slice(0, 5);
1532
+ for (const fn of top5) {
1533
+ const category = fn.sourceCategory !== "unknown" ? pc.dim(` [${fn.sourceCategory}]`) : "";
1534
+ console.log(`${indent} ${formatMs(fn.selfTime)} (${fn.selfPercent}%) ${fn.functionName}${category}`);
1535
+ if (fn.scriptUrl) {
1536
+ console.log(pc.dim(`${indent} ${fn.scriptUrl}:${fn.lineNumber}`));
1537
+ }
1538
+ }
1539
+ }
1540
+ if (metrics.heap) {
1541
+ console.log("");
1542
+ console.log(`${indent}${pc.bold("Heap")}: ${formatBytes2(metrics.heap.totalAllocatedBytes)} allocated`);
1543
+ }
1544
+ console.log("");
1545
+ }
1546
+ function formatMs(ms) {
1547
+ if (ms < 1)
1548
+ return `${(ms * 1000).toFixed(0)}µs`;
1549
+ if (ms < 1000)
1550
+ return `${ms.toFixed(0)}ms`;
1551
+ return `${(ms / 1000).toFixed(2)}s`;
1552
+ }
1512
1553
  function printCaptureInfo(heapSummary, trace) {
1513
1554
  console.log(pc.dim(`Heap: ${formatBytes2(heapSummary.metadata.totalSize)} | ` + `Nodes: ${heapSummary.metadata.nodeCount.toLocaleString()} | ` + `Requests: ${trace.networkRequests.length} | ` + `Long tasks: ${trace.metrics.longTasks.length}`));
1514
1555
  }
@@ -1645,7 +1686,7 @@ function writeTestReport(outputPath, options) {
1645
1686
  return outputPath;
1646
1687
  }
1647
1688
  function generateTestMarkdown(options) {
1648
- const { version, findings, testTiming, profiles } = options;
1689
+ const { version, findings, testTiming, profiles, metrics } = options;
1649
1690
  const now = new Date;
1650
1691
  const sections = [];
1651
1692
  sections.push(`# Vitest Performance Report`);
@@ -1660,6 +1701,42 @@ function generateTestMarkdown(options) {
1660
1701
  const gcPercentage = totalDuration > 0 ? (totalGcTime / totalDuration * 100).toFixed(2) : "0";
1661
1702
  sections.push(`**Test run** ${totalTests} tests across ${totalFiles} files · ` + `**Total duration** ${(totalDuration / 1000).toFixed(2)}s · ` + `**Slowest file** ${slowest ? `${slowest.file} (${(slowest.duration / 1000).toFixed(2)}s)` : "—"} · ` + `**GC overhead** ${gcPercentage}% (${totalGcTime.toFixed(0)}ms)`);
1662
1703
  sections.push("");
1704
+ if (metrics) {
1705
+ sections.push(`## Performance Metrics`);
1706
+ sections.push("");
1707
+ sections.push(`| Metric | Value |`);
1708
+ sections.push(`|--------|-------|`);
1709
+ sections.push(`| Total Duration | ${fmtMs(metrics.suite.totalDuration)} |`);
1710
+ sections.push(`| Tests | ${metrics.suite.totalTests} (${metrics.suite.passCount} pass, ${metrics.suite.failCount} fail) |`);
1711
+ sections.push(`| Setup Time | ${fmtMs(metrics.suite.totalSetupTime)} |`);
1712
+ sections.push(`| Avg Test Duration | ${fmtMs(metrics.suite.averageTestDuration)} |`);
1713
+ sections.push(`| Median Test Duration | ${fmtMs(metrics.suite.medianTestDuration)} |`);
1714
+ sections.push(`| P95 Test Duration | ${fmtMs(metrics.suite.p95TestDuration)} |`);
1715
+ sections.push(`| Slowest Test | ${fmtMs(metrics.suite.slowestTestDuration)} (\`${metrics.suite.slowestTestName}\`) |`);
1716
+ sections.push("");
1717
+ if (metrics.cpu.applicationTime > 0 || metrics.cpu.gcTime > 0) {
1718
+ sections.push(`### CPU Time Breakdown`);
1719
+ sections.push("");
1720
+ sections.push(`| Category | Time | % |`);
1721
+ sections.push(`|----------|------|---|`);
1722
+ sections.push(`| Application Code | ${fmtMs(metrics.cpu.applicationTime)} | ${metrics.cpu.applicationPercent}% |`);
1723
+ sections.push(`| Dependencies | ${fmtMs(metrics.cpu.dependencyTime)} | ${metrics.cpu.dependencyPercent}% |`);
1724
+ sections.push(`| Test/Framework | ${fmtMs(metrics.cpu.testFrameworkTime)} | ${metrics.cpu.testFrameworkPercent}% |`);
1725
+ sections.push(`| GC | ${fmtMs(metrics.cpu.gcTime)} | ${metrics.cpu.gcPercentage}% |`);
1726
+ sections.push(`| Idle | ${fmtMs(metrics.cpu.idleTime)} | ${metrics.cpu.idlePercentage}% |`);
1727
+ sections.push("");
1728
+ }
1729
+ if (metrics.hotFunctions.length > 0) {
1730
+ sections.push(`### Top Hot Functions`);
1731
+ sections.push("");
1732
+ sections.push(`| Function | Self Time | % | Category |`);
1733
+ sections.push(`|----------|-----------|---|----------|`);
1734
+ for (const fn of metrics.hotFunctions.slice(0, 10)) {
1735
+ sections.push(`| \`${fn.functionName}\` | ${fmtMs(fn.selfTime)} | ${fn.selfPercent}% | ${fn.sourceCategory} |`);
1736
+ }
1737
+ sections.push("");
1738
+ }
1739
+ }
1663
1740
  const counts = {
1664
1741
  critical: findings.filter((f) => f.severity === "critical").length,
1665
1742
  warning: findings.filter((f) => f.severity === "warning").length,
@@ -1716,6 +1793,13 @@ function generateTestMarkdown(options) {
1716
1793
  return sections.join(`
1717
1794
  `);
1718
1795
  }
1796
+ function fmtMs(ms) {
1797
+ if (ms < 1)
1798
+ return `${(ms * 1000).toFixed(0)}µs`;
1799
+ if (ms < 1000)
1800
+ return `${ms.toFixed(0)}ms`;
1801
+ return `${(ms / 1000).toFixed(2)}s`;
1802
+ }
1719
1803
 
1720
1804
  // src/cli.ts
1721
1805
  import { readFileSync } from "node:fs";
@@ -1,5 +1,6 @@
1
1
  import type { Finding, HeapSummary, TraceResult } from '../types.js';
2
2
  import type { TestFileTiming, CorrelatedProfile } from '../vitest/types.js';
3
+ import type { PerformanceMetrics } from '../vitest/metrics.js';
3
4
  export interface ReportOptions {
4
5
  url: string;
5
6
  version: string;
@@ -12,6 +13,7 @@ export interface TestReportOptions {
12
13
  findings: Finding[];
13
14
  testTiming: TestFileTiming[];
14
15
  profiles: CorrelatedProfile[];
16
+ metrics?: PerformanceMetrics;
15
17
  }
16
18
  /**
17
19
  * Generate a Markdown performance report and write it to disk.
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/output/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAmC5E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAI9E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA+G/D;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAItF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAkHvE"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/output/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAmC/D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAI9E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA+G/D;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAItF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA8JvE"}
@@ -1,5 +1,6 @@
1
1
  import { type Ora } from 'ora';
2
2
  import type { Finding, HeapSummary, TraceResult } from '../types.js';
3
+ import type { PerformanceMetrics } from '../vitest/metrics.js';
3
4
  /**
4
5
  * Print the zeitzeuge header with version and target URL.
5
6
  */
@@ -16,6 +17,10 @@ export declare function printFindings(findings: Finding[]): void;
16
17
  * Print findings in a compact format (optimized for Vitest logs).
17
18
  */
18
19
  export declare function printFindingsVitest(findings: Finding[]): void;
20
+ /**
21
+ * Print a summary of the current run's performance metrics.
22
+ */
23
+ export declare function printMetricsSummary(metrics: PerformanceMetrics): void;
19
24
  /**
20
25
  * Print capture info summary (heap + trace).
21
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwCrE;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAU9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAoEvD;AAyBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAsD7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CASnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAQ5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAG7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAwC/D;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAU9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAoEvD;AAyBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAsD7D;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CA8DrE;AASD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CASnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAQ5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAG7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
@@ -14,4 +14,6 @@
14
14
  */
15
15
  export { zeitzeuge } from './plugin.js';
16
16
  export type { ZeitZeugeVitestOptions, SourceCategory } from './types.js';
17
+ export type { PerformanceMetrics, SuiteMetrics, CpuMetrics, FileMetric, TestMetric, HotFunctionMetric, } from './metrics.js';
18
+ export { computeMetrics } from './metrics.js';
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vitest/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vitest/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -719,7 +719,7 @@ import { tmpdir } from "node:os";
719
719
  var SOURCE_INCLUSION_THRESHOLD = 1;
720
720
  var SLOW_TEST_THRESHOLD = 100;
721
721
  async function createVitestWorkspace(options) {
722
- const { testTiming, profiles, heapProfiles, testSources, sourcePaths } = options;
722
+ const { testTiming, profiles, heapProfiles, testSources, sourcePaths, metrics } = options;
723
723
  const files = {};
724
724
  const totalTests = testTiming.reduce((s, t) => s + t.testCount, 0);
725
725
  const totalDuration = testTiming.reduce((s, t) => s + t.duration, 0);
@@ -821,6 +821,9 @@ async function createVitestWorkspace(options) {
821
821
  functionCount: data.functionCount
822
822
  })).sort((a, b) => b.selfTime - a.selfTime);
823
823
  files["/scripts/dependencies.json"] = JSON.stringify(depScriptSummary, null, 2);
824
+ if (metrics) {
825
+ files["/metrics/current.json"] = JSON.stringify(metrics, null, 2);
826
+ }
824
827
  for (const [filePath, source] of testSources) {
825
828
  const filename = filePath.split("/").pop() ?? filePath;
826
829
  files[`/tests/${filename}`] = source;
@@ -1096,6 +1099,47 @@ function printFindingsVitest(findings) {
1096
1099
  };
1097
1100
  console.log(`${indent}${pc.dim("Summary:")} ${pc.red(`${counts.critical} critical`)}, ${pc.yellow(`${counts.warning} warning`)}, ${pc.green(`${counts.info} info`)}`);
1098
1101
  }
1102
+ function printMetricsSummary(metrics) {
1103
+ const indent = " ";
1104
+ const s = metrics.suite;
1105
+ const c = metrics.cpu;
1106
+ console.log(`${indent}${pc.bold("Suite")}`);
1107
+ console.log(`${indent} Total: ${formatMs(s.totalDuration)} · ` + `${s.totalTests} tests (${s.passCount} pass, ${s.failCount} fail) · ` + `Setup: ${formatMs(s.totalSetupTime)}`);
1108
+ console.log(`${indent} Avg: ${formatMs(s.averageTestDuration)} · ` + `Median: ${formatMs(s.medianTestDuration)} · ` + `P95: ${formatMs(s.p95TestDuration)} · ` + `Slowest: ${formatMs(s.slowestTestDuration)}`);
1109
+ if (s.slowestFile) {
1110
+ console.log(`${indent} Slowest file: ${s.slowestFile} (${formatMs(s.slowestFileDuration)})`);
1111
+ }
1112
+ if (c.gcTime > 0 || c.applicationTime > 0) {
1113
+ console.log("");
1114
+ console.log(`${indent}${pc.bold("CPU Breakdown")}`);
1115
+ console.log(`${indent} Application: ${formatMs(c.applicationTime)} (${c.applicationPercent}%) · ` + `Dependencies: ${formatMs(c.dependencyTime)} (${c.dependencyPercent}%) · ` + `Test/Framework: ${formatMs(c.testFrameworkTime)} (${c.testFrameworkPercent}%)`);
1116
+ console.log(`${indent} GC: ${formatMs(c.gcTime)} (${c.gcPercentage}%) · ` + `Idle: ${formatMs(c.idleTime)} (${c.idlePercentage}%)`);
1117
+ }
1118
+ if (metrics.hotFunctions.length > 0) {
1119
+ console.log("");
1120
+ console.log(`${indent}${pc.bold("Top Hot Functions")}`);
1121
+ const top5 = metrics.hotFunctions.slice(0, 5);
1122
+ for (const fn of top5) {
1123
+ const category = fn.sourceCategory !== "unknown" ? pc.dim(` [${fn.sourceCategory}]`) : "";
1124
+ console.log(`${indent} ${formatMs(fn.selfTime)} (${fn.selfPercent}%) ${fn.functionName}${category}`);
1125
+ if (fn.scriptUrl) {
1126
+ console.log(pc.dim(`${indent} ${fn.scriptUrl}:${fn.lineNumber}`));
1127
+ }
1128
+ }
1129
+ }
1130
+ if (metrics.heap) {
1131
+ console.log("");
1132
+ console.log(`${indent}${pc.bold("Heap")}: ${formatBytes(metrics.heap.totalAllocatedBytes)} allocated`);
1133
+ }
1134
+ console.log("");
1135
+ }
1136
+ function formatMs(ms) {
1137
+ if (ms < 1)
1138
+ return `${(ms * 1000).toFixed(0)}µs`;
1139
+ if (ms < 1000)
1140
+ return `${ms.toFixed(0)}ms`;
1141
+ return `${(ms / 1000).toFixed(2)}s`;
1142
+ }
1099
1143
  function printCaptureInfo(heapSummary, trace) {
1100
1144
  console.log(pc.dim(`Heap: ${formatBytes(heapSummary.metadata.totalSize)} | ` + `Nodes: ${heapSummary.metadata.nodeCount.toLocaleString()} | ` + `Requests: ${trace.networkRequests.length} | ` + `Long tasks: ${trace.metrics.longTasks.length}`));
1101
1145
  }
@@ -1232,7 +1276,7 @@ function writeTestReport(outputPath, options) {
1232
1276
  return outputPath;
1233
1277
  }
1234
1278
  function generateTestMarkdown(options) {
1235
- const { version, findings, testTiming, profiles } = options;
1279
+ const { version, findings, testTiming, profiles, metrics } = options;
1236
1280
  const now = new Date;
1237
1281
  const sections = [];
1238
1282
  sections.push(`# Vitest Performance Report`);
@@ -1247,6 +1291,42 @@ function generateTestMarkdown(options) {
1247
1291
  const gcPercentage = totalDuration > 0 ? (totalGcTime / totalDuration * 100).toFixed(2) : "0";
1248
1292
  sections.push(`**Test run** ${totalTests} tests across ${totalFiles} files · ` + `**Total duration** ${(totalDuration / 1000).toFixed(2)}s · ` + `**Slowest file** ${slowest ? `${slowest.file} (${(slowest.duration / 1000).toFixed(2)}s)` : "—"} · ` + `**GC overhead** ${gcPercentage}% (${totalGcTime.toFixed(0)}ms)`);
1249
1293
  sections.push("");
1294
+ if (metrics) {
1295
+ sections.push(`## Performance Metrics`);
1296
+ sections.push("");
1297
+ sections.push(`| Metric | Value |`);
1298
+ sections.push(`|--------|-------|`);
1299
+ sections.push(`| Total Duration | ${fmtMs(metrics.suite.totalDuration)} |`);
1300
+ sections.push(`| Tests | ${metrics.suite.totalTests} (${metrics.suite.passCount} pass, ${metrics.suite.failCount} fail) |`);
1301
+ sections.push(`| Setup Time | ${fmtMs(metrics.suite.totalSetupTime)} |`);
1302
+ sections.push(`| Avg Test Duration | ${fmtMs(metrics.suite.averageTestDuration)} |`);
1303
+ sections.push(`| Median Test Duration | ${fmtMs(metrics.suite.medianTestDuration)} |`);
1304
+ sections.push(`| P95 Test Duration | ${fmtMs(metrics.suite.p95TestDuration)} |`);
1305
+ sections.push(`| Slowest Test | ${fmtMs(metrics.suite.slowestTestDuration)} (\`${metrics.suite.slowestTestName}\`) |`);
1306
+ sections.push("");
1307
+ if (metrics.cpu.applicationTime > 0 || metrics.cpu.gcTime > 0) {
1308
+ sections.push(`### CPU Time Breakdown`);
1309
+ sections.push("");
1310
+ sections.push(`| Category | Time | % |`);
1311
+ sections.push(`|----------|------|---|`);
1312
+ sections.push(`| Application Code | ${fmtMs(metrics.cpu.applicationTime)} | ${metrics.cpu.applicationPercent}% |`);
1313
+ sections.push(`| Dependencies | ${fmtMs(metrics.cpu.dependencyTime)} | ${metrics.cpu.dependencyPercent}% |`);
1314
+ sections.push(`| Test/Framework | ${fmtMs(metrics.cpu.testFrameworkTime)} | ${metrics.cpu.testFrameworkPercent}% |`);
1315
+ sections.push(`| GC | ${fmtMs(metrics.cpu.gcTime)} | ${metrics.cpu.gcPercentage}% |`);
1316
+ sections.push(`| Idle | ${fmtMs(metrics.cpu.idleTime)} | ${metrics.cpu.idlePercentage}% |`);
1317
+ sections.push("");
1318
+ }
1319
+ if (metrics.hotFunctions.length > 0) {
1320
+ sections.push(`### Top Hot Functions`);
1321
+ sections.push("");
1322
+ sections.push(`| Function | Self Time | % | Category |`);
1323
+ sections.push(`|----------|-----------|---|----------|`);
1324
+ for (const fn of metrics.hotFunctions.slice(0, 10)) {
1325
+ sections.push(`| \`${fn.functionName}\` | ${fmtMs(fn.selfTime)} | ${fn.selfPercent}% | ${fn.sourceCategory} |`);
1326
+ }
1327
+ sections.push("");
1328
+ }
1329
+ }
1250
1330
  const counts = {
1251
1331
  critical: findings.filter((f) => f.severity === "critical").length,
1252
1332
  warning: findings.filter((f) => f.severity === "warning").length,
@@ -1303,6 +1383,13 @@ function generateTestMarkdown(options) {
1303
1383
  return sections.join(`
1304
1384
  `);
1305
1385
  }
1386
+ function fmtMs(ms) {
1387
+ if (ms < 1)
1388
+ return `${(ms * 1000).toFixed(0)}µs`;
1389
+ if (ms < 1000)
1390
+ return `${ms.toFixed(0)}ms`;
1391
+ return `${(ms / 1000).toFixed(2)}s`;
1392
+ }
1306
1393
 
1307
1394
  // src/vitest/classify.ts
1308
1395
  import { resolve, relative } from "node:path";
@@ -1357,10 +1444,158 @@ function classifyScript(scriptUrl, projectRoot, testFiles) {
1357
1444
  }
1358
1445
  return "unknown";
1359
1446
  }
1447
+
1448
+ // src/vitest/metrics.ts
1449
+ function computeMetrics(testTiming, profiles, heapProfiles, projectRoot) {
1450
+ const allTestDurations = testTiming.flatMap((t) => t.tests.map((tc) => tc.duration)).sort((a, b) => a - b);
1451
+ const totalDuration = testTiming.reduce((s, t) => s + t.duration, 0);
1452
+ const totalTests = testTiming.reduce((s, t) => s + t.testCount, 0);
1453
+ const passCount = testTiming.reduce((s, t) => s + t.passCount, 0);
1454
+ const failCount = testTiming.reduce((s, t) => s + t.failCount, 0);
1455
+ const totalSetupTime = testTiming.reduce((s, t) => s + t.setupTime, 0);
1456
+ const averageTestDuration = totalTests > 0 ? totalDuration / totalTests : 0;
1457
+ const medianTestDuration = percentile(allTestDurations, 50);
1458
+ const p95TestDuration = percentile(allTestDurations, 95);
1459
+ const slowestTest = allTestDurations.length > 0 ? testTiming.flatMap((t) => t.tests.map((tc) => ({ ...tc, file: t.file }))).reduce((a, b) => a.duration > b.duration ? a : b) : null;
1460
+ const slowestFile = testTiming.length > 0 ? testTiming.reduce((a, b) => a.duration > b.duration ? a : b) : null;
1461
+ const suite = {
1462
+ totalDuration: round4(totalDuration),
1463
+ totalTests,
1464
+ passCount,
1465
+ failCount,
1466
+ totalSetupTime: round4(totalSetupTime),
1467
+ averageTestDuration: round4(averageTestDuration),
1468
+ medianTestDuration: round4(medianTestDuration),
1469
+ p95TestDuration: round4(p95TestDuration),
1470
+ slowestTestDuration: round4(slowestTest?.duration ?? 0),
1471
+ slowestTestName: slowestTest?.name ?? "",
1472
+ slowestFileDuration: round4(slowestFile?.duration ?? 0),
1473
+ slowestFile: relativize(slowestFile?.file ?? "", projectRoot)
1474
+ };
1475
+ const cpu = computeCpuMetrics(profiles);
1476
+ const files = {};
1477
+ for (const timing of testTiming) {
1478
+ const relPath = relativize(timing.file, projectRoot);
1479
+ const profile = profiles.find((p) => p.testFile === timing.file);
1480
+ files[relPath] = {
1481
+ duration: round4(timing.duration),
1482
+ testCount: timing.testCount,
1483
+ setupTime: round4(timing.setupTime),
1484
+ gcPercentage: round4(profile?.summary.gcPercentage ?? 0)
1485
+ };
1486
+ }
1487
+ const tests = {};
1488
+ for (const timing of testTiming) {
1489
+ const relPath = relativize(timing.file, projectRoot);
1490
+ for (const test of timing.tests) {
1491
+ const key = `${relPath}::${test.name}`;
1492
+ tests[key] = {
1493
+ duration: round4(test.duration),
1494
+ status: test.status
1495
+ };
1496
+ }
1497
+ }
1498
+ const merged = mergeHotFunctions(profiles);
1499
+ const hotFunctions = merged.slice(0, 20).map((fn) => ({
1500
+ key: `${fn.scriptUrl}:${fn.functionName}:${fn.lineNumber}`,
1501
+ functionName: fn.functionName,
1502
+ scriptUrl: relativize(fn.scriptUrl, projectRoot),
1503
+ lineNumber: fn.lineNumber,
1504
+ selfTime: round4(fn.selfTime),
1505
+ selfPercent: round4(fn.selfPercent),
1506
+ sourceCategory: fn.sourceCategory ?? "unknown"
1507
+ }));
1508
+ const heap = heapProfiles && heapProfiles.length > 0 ? {
1509
+ totalAllocatedBytes: heapProfiles.reduce((s, hp) => s + hp.summary.totalAllocatedBytes, 0)
1510
+ } : undefined;
1511
+ return {
1512
+ version: 1,
1513
+ timestamp: new Date().toISOString(),
1514
+ suite,
1515
+ cpu,
1516
+ files,
1517
+ tests,
1518
+ hotFunctions,
1519
+ heap
1520
+ };
1521
+ }
1522
+ function computeCpuMetrics(profiles) {
1523
+ if (profiles.length === 0) {
1524
+ return {
1525
+ gcPercentage: 0,
1526
+ gcTime: 0,
1527
+ idlePercentage: 0,
1528
+ idleTime: 0,
1529
+ applicationTime: 0,
1530
+ applicationPercent: 0,
1531
+ dependencyTime: 0,
1532
+ dependencyPercent: 0,
1533
+ testFrameworkTime: 0,
1534
+ testFrameworkPercent: 0
1535
+ };
1536
+ }
1537
+ const totalProfileDuration = profiles.reduce((s, p) => s + p.summary.duration, 0);
1538
+ const totalGcTime = profiles.reduce((s, p) => s + p.summary.duration * p.summary.gcPercentage / 100, 0);
1539
+ const gcPercentage = totalProfileDuration > 0 ? totalGcTime / totalProfileDuration * 100 : 0;
1540
+ const totalIdleTime = profiles.reduce((s, p) => s + p.summary.duration * p.summary.idlePercentage / 100, 0);
1541
+ const idlePercentage = totalProfileDuration > 0 ? totalIdleTime / totalProfileDuration * 100 : 0;
1542
+ let applicationTime = 0;
1543
+ let dependencyTime = 0;
1544
+ let testFrameworkTime = 0;
1545
+ for (const profile of profiles) {
1546
+ for (const script of profile.summary.scriptBreakdown) {
1547
+ switch (script.sourceCategory) {
1548
+ case "application":
1549
+ applicationTime += script.selfTime;
1550
+ break;
1551
+ case "dependency":
1552
+ dependencyTime += script.selfTime;
1553
+ break;
1554
+ case "test":
1555
+ case "framework":
1556
+ testFrameworkTime += script.selfTime;
1557
+ break;
1558
+ }
1559
+ }
1560
+ }
1561
+ const applicationPercent = totalProfileDuration > 0 ? applicationTime / totalProfileDuration * 100 : 0;
1562
+ const dependencyPercent = totalProfileDuration > 0 ? dependencyTime / totalProfileDuration * 100 : 0;
1563
+ const testFrameworkPercent = totalProfileDuration > 0 ? testFrameworkTime / totalProfileDuration * 100 : 0;
1564
+ return {
1565
+ gcPercentage: round4(gcPercentage),
1566
+ gcTime: round4(totalGcTime),
1567
+ idlePercentage: round4(idlePercentage),
1568
+ idleTime: round4(totalIdleTime),
1569
+ applicationTime: round4(applicationTime),
1570
+ applicationPercent: round4(applicationPercent),
1571
+ dependencyTime: round4(dependencyTime),
1572
+ dependencyPercent: round4(dependencyPercent),
1573
+ testFrameworkTime: round4(testFrameworkTime),
1574
+ testFrameworkPercent: round4(testFrameworkPercent)
1575
+ };
1576
+ }
1577
+ function percentile(sortedValues, p) {
1578
+ if (sortedValues.length === 0)
1579
+ return 0;
1580
+ const idx = Math.ceil(p / 100 * sortedValues.length) - 1;
1581
+ return sortedValues[Math.max(0, idx)];
1582
+ }
1583
+ function round4(n) {
1584
+ return Math.round(n * 100) / 100;
1585
+ }
1586
+ function relativize(filePath, projectRoot) {
1587
+ if (!projectRoot || !filePath)
1588
+ return filePath;
1589
+ if (filePath.startsWith(projectRoot)) {
1590
+ const rel = filePath.slice(projectRoot.length);
1591
+ return rel.startsWith("/") ? rel.slice(1) : rel;
1592
+ }
1593
+ return filePath;
1594
+ }
1360
1595
  // package.json
1361
1596
  var package_default = {
1362
1597
  name: "zeitzeuge",
1363
- version: "0.3.3",
1598
+ version: "0.3.5",
1364
1599
  description: "A deepagent to witnessing slowdowns in your test runs.",
1365
1600
  keywords: [
1366
1601
  "analysis",
@@ -1380,7 +1615,8 @@ var package_default = {
1380
1615
  zeitzeuge: "./dist/cli.js"
1381
1616
  },
1382
1617
  files: [
1383
- "dist"
1618
+ "dist",
1619
+ "vitest.d.ts"
1384
1620
  ],
1385
1621
  type: "module",
1386
1622
  module: "src/cli.ts",
@@ -1534,7 +1770,7 @@ class ZeitZeugeReporter {
1534
1770
  try {
1535
1771
  await this.runAnalysis(scopedModules);
1536
1772
  } catch (err) {
1537
- const message = err instanceof Error ? err.message : String(err);
1773
+ const message = err instanceof Error ? err.message : JSON.stringify(err ?? "Unknown error");
1538
1774
  console.error(chalk.red(`
1539
1775
  [zeitzeuge] Analysis failed: ${message}
1540
1776
  `));
@@ -1564,6 +1800,11 @@ class ZeitZeugeReporter {
1564
1800
  if (this.options.verbose && heapProfiles.length > 0) {
1565
1801
  console.log(`[zeitzeuge] ${heapProfiles.length} heap profile(s) collected`);
1566
1802
  }
1803
+ const metrics = computeMetrics(testTiming, profiles, heapProfiles, this.options.projectRoot);
1804
+ console.log(chalk.cyan(`
1805
+ zeitzeuge: Performance Metrics
1806
+ `));
1807
+ printMetricsSummary(metrics);
1567
1808
  const testSources = this.readTestSources(testTiming);
1568
1809
  const sourcePaths = this.readHotFunctionSources(profiles);
1569
1810
  const wsSpinner = this.isCI ? null : createSafeSpinner({ text: "zeitzeuge: Building analysis workspace...", color: "cyan" });
@@ -1573,7 +1814,8 @@ class ZeitZeugeReporter {
1573
1814
  heapProfiles,
1574
1815
  testSources,
1575
1816
  sourcePaths,
1576
- projectRoot: this.options.projectRoot
1817
+ projectRoot: this.options.projectRoot,
1818
+ metrics
1577
1819
  });
1578
1820
  wsSpinner?.succeed("zeitzeuge: Workspace ready");
1579
1821
  if (this.options.analyzeOnFinish) {
@@ -1593,7 +1835,8 @@ zeitzeuge: Performance Analysis
1593
1835
  version,
1594
1836
  findings,
1595
1837
  testTiming,
1596
- profiles
1838
+ profiles,
1839
+ metrics
1597
1840
  });
1598
1841
  console.log(chalk.dim(`
1599
1842
  Report written to ${reportPath}
@@ -1900,5 +2143,6 @@ function zeitzeuge(options = {}) {
1900
2143
  };
1901
2144
  }
1902
2145
  export {
1903
- zeitzeuge
2146
+ zeitzeuge,
2147
+ computeMetrics
1904
2148
  };
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Performance metrics computation for Vitest test runs.
3
+ *
4
+ * Computes a structured set of metrics from test timing and CPU/heap profile
5
+ * data so users can see where time is spent at a glance.
6
+ */
7
+ import type { TestFileTiming, CorrelatedProfile, CorrelatedHeapProfile } from './types.js';
8
+ /** Suite-level aggregate metrics. */
9
+ export interface SuiteMetrics {
10
+ totalDuration: number;
11
+ totalTests: number;
12
+ passCount: number;
13
+ failCount: number;
14
+ totalSetupTime: number;
15
+ averageTestDuration: number;
16
+ medianTestDuration: number;
17
+ p95TestDuration: number;
18
+ slowestTestDuration: number;
19
+ slowestTestName: string;
20
+ slowestFileDuration: number;
21
+ slowestFile: string;
22
+ }
23
+ /** CPU profile-derived metrics. */
24
+ export interface CpuMetrics {
25
+ gcPercentage: number;
26
+ gcTime: number;
27
+ idlePercentage: number;
28
+ idleTime: number;
29
+ applicationTime: number;
30
+ applicationPercent: number;
31
+ dependencyTime: number;
32
+ dependencyPercent: number;
33
+ testFrameworkTime: number;
34
+ testFrameworkPercent: number;
35
+ }
36
+ /** Per-file metric entry. */
37
+ export interface FileMetric {
38
+ duration: number;
39
+ testCount: number;
40
+ setupTime: number;
41
+ gcPercentage: number;
42
+ }
43
+ /** Per-test metric entry. */
44
+ export interface TestMetric {
45
+ duration: number;
46
+ status: 'pass' | 'fail' | 'skip';
47
+ }
48
+ /** Summary of a hot function for metrics display. */
49
+ export interface HotFunctionMetric {
50
+ /** Stable key: "scriptUrl:functionName:lineNumber" */
51
+ key: string;
52
+ functionName: string;
53
+ scriptUrl: string;
54
+ lineNumber: number;
55
+ selfTime: number;
56
+ selfPercent: number;
57
+ sourceCategory: string;
58
+ }
59
+ /** Complete performance metrics snapshot for a test run. */
60
+ export interface PerformanceMetrics {
61
+ /** Schema version for forward compatibility. */
62
+ version: 1;
63
+ /** ISO timestamp when the metrics were captured. */
64
+ timestamp: string;
65
+ suite: SuiteMetrics;
66
+ cpu: CpuMetrics;
67
+ /** Per-file metrics, keyed by relative file path. */
68
+ files: Record<string, FileMetric>;
69
+ /** Per-test metrics, keyed by "file::testName". */
70
+ tests: Record<string, TestMetric>;
71
+ /** Top hot functions (up to 20). */
72
+ hotFunctions: HotFunctionMetric[];
73
+ /** Heap metrics (only present if heap profiling was enabled). */
74
+ heap?: {
75
+ totalAllocatedBytes: number;
76
+ };
77
+ }
78
+ /**
79
+ * Compute performance metrics from a test run's collected data.
80
+ */
81
+ export declare function computeMetrics(testTiming: TestFileTiming[], profiles: CorrelatedProfile[], heapProfiles?: CorrelatedHeapProfile[], projectRoot?: string): PerformanceMetrics;
82
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/vitest/metrics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAKpB,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,OAAO,EAAE,CAAC,CAAC;IACX,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAElB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,UAAU,CAAC;IAEhB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,oCAAoC;IACpC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAElC,iEAAiE;IACjE,IAAI,CAAC,EAAE;QACL,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAID;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,cAAc,EAAE,EAC5B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,YAAY,CAAC,EAAE,qBAAqB,EAAE,EACtC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB,CAqGpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/vitest/reporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAkB;IAEjC,iEAAiE;IACjE,OAAO,CAAC,cAAc,CAAgB;IAEtC,uDAAuD;IACvD,OAAO,CAAC,IAAI,CAAoB;gBAEpB,OAAO,EAAE,eAAe;IAIpC,OAAO,CAAC,sBAAsB;IAU9B;;;OAGG;IACH,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI;IAQxC;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAyBpD,WAAW;IA2GzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA2F/B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAsEnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/vitest/reporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAkB;IAEjC,iEAAiE;IACjE,OAAO,CAAC,cAAc,CAAgB;IAEtC,uDAAuD;IACvD,OAAO,CAAC,IAAI,CAAoB;gBAEpB,OAAO,EAAE,eAAe;IAIpC,OAAO,CAAC,sBAAsB;IAU9B;;;OAGG;IACH,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI;IAQxC;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAyBpD,WAAW;IAyHzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA2F/B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAsEnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
@@ -227,5 +227,7 @@ export interface VitestWorkspaceOptions {
227
227
  sourcePaths?: Map<string, string>;
228
228
  /** Project root for resolving relative paths */
229
229
  projectRoot?: string;
230
+ /** Computed performance metrics for the current run. */
231
+ metrics?: import('./metrics.js').PerformanceMetrics;
230
232
  }
231
233
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vitest/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vitest/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/vitest/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAKrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzF,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,OAAO,EAAE,eAAe,CAAC;IACzB,iDAAiD;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAqNhC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CA+B9E"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/vitest/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAKrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzF,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,OAAO,EAAE,eAAe,CAAC;IACzB,iDAAiD;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA0NhC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CA+B9E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zeitzeuge",
3
- "version": "0.3.5",
3
+ "version": "0.4.0",
4
4
  "description": "A deepagent to witnessing slowdowns in your test runs.",
5
5
  "keywords": [
6
6
  "analysis",