@post-print/agent-test 0.3.3 → 0.3.5

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.
Files changed (106) hide show
  1. package/README.md +126 -157
  2. package/dist/check.d.ts +38 -0
  3. package/dist/check.d.ts.map +1 -0
  4. package/dist/check.js +169 -0
  5. package/dist/check.js.map +1 -0
  6. package/dist/cli.d.ts +12 -14
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +342 -366
  9. package/dist/cli.js.map +1 -1
  10. package/dist/compare-scenario.d.ts +33 -0
  11. package/dist/compare-scenario.d.ts.map +1 -0
  12. package/dist/compare-scenario.js +128 -0
  13. package/dist/compare-scenario.js.map +1 -0
  14. package/dist/debug-bundle.d.ts +2 -2
  15. package/dist/debug-bundle.d.ts.map +1 -1
  16. package/dist/debug-bundle.js +12 -12
  17. package/dist/debug-bundle.js.map +1 -1
  18. package/dist/doctor.d.ts +6 -1
  19. package/dist/doctor.d.ts.map +1 -1
  20. package/dist/doctor.js +136 -14
  21. package/dist/doctor.js.map +1 -1
  22. package/dist/expect.d.ts +6 -5
  23. package/dist/expect.d.ts.map +1 -1
  24. package/dist/expect.js +67 -57
  25. package/dist/expect.js.map +1 -1
  26. package/dist/host-log.d.ts +17 -0
  27. package/dist/host-log.d.ts.map +1 -0
  28. package/dist/host-log.js +154 -0
  29. package/dist/host-log.js.map +1 -0
  30. package/dist/hosts.d.ts +22 -0
  31. package/dist/hosts.d.ts.map +1 -0
  32. package/dist/hosts.js +84 -0
  33. package/dist/hosts.js.map +1 -0
  34. package/dist/html-report.d.ts +0 -13
  35. package/dist/html-report.d.ts.map +1 -1
  36. package/dist/html-report.js +381 -318
  37. package/dist/html-report.js.map +1 -1
  38. package/dist/index.d.ts +15 -8
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +13 -7
  41. package/dist/index.js.map +1 -1
  42. package/dist/live-isolation.d.ts +11 -5
  43. package/dist/live-isolation.d.ts.map +1 -1
  44. package/dist/live-isolation.js +32 -14
  45. package/dist/live-isolation.js.map +1 -1
  46. package/dist/load-adapters.d.ts +13 -0
  47. package/dist/load-adapters.d.ts.map +1 -0
  48. package/dist/load-adapters.js +76 -0
  49. package/dist/load-adapters.js.map +1 -0
  50. package/dist/load-suite.d.ts.map +1 -1
  51. package/dist/load-suite.js +16 -0
  52. package/dist/load-suite.js.map +1 -1
  53. package/dist/mcp-config.d.ts +8 -0
  54. package/dist/mcp-config.d.ts.map +1 -1
  55. package/dist/mcp-config.js +46 -0
  56. package/dist/mcp-config.js.map +1 -1
  57. package/dist/preflight.d.ts +2 -2
  58. package/dist/preflight.d.ts.map +1 -1
  59. package/dist/preflight.js +4 -4
  60. package/dist/preflight.js.map +1 -1
  61. package/dist/progress.d.ts +7 -0
  62. package/dist/progress.d.ts.map +1 -1
  63. package/dist/progress.js +39 -9
  64. package/dist/progress.js.map +1 -1
  65. package/dist/record-trace.d.ts +11 -20
  66. package/dist/record-trace.d.ts.map +1 -1
  67. package/dist/record-trace.js +10 -57
  68. package/dist/record-trace.js.map +1 -1
  69. package/dist/report-preview-server.d.ts +2 -0
  70. package/dist/report-preview-server.d.ts.map +1 -0
  71. package/dist/report-preview-server.js +24 -0
  72. package/dist/report-preview-server.js.map +1 -0
  73. package/dist/report-preview.d.ts +11 -0
  74. package/dist/report-preview.d.ts.map +1 -0
  75. package/dist/report-preview.js +161 -0
  76. package/dist/report-preview.js.map +1 -0
  77. package/dist/run-suite.d.ts +62 -11
  78. package/dist/run-suite.d.ts.map +1 -1
  79. package/dist/run-suite.js +697 -206
  80. package/dist/run-suite.js.map +1 -1
  81. package/dist/scenario-story.d.ts +41 -0
  82. package/dist/scenario-story.d.ts.map +1 -0
  83. package/dist/scenario-story.js +198 -0
  84. package/dist/scenario-story.js.map +1 -0
  85. package/dist/suite-summary.d.ts +2 -0
  86. package/dist/suite-summary.d.ts.map +1 -1
  87. package/dist/suite-summary.js +70 -22
  88. package/dist/suite-summary.js.map +1 -1
  89. package/dist/theme.d.ts +29 -5
  90. package/dist/theme.d.ts.map +1 -1
  91. package/dist/theme.js +204 -45
  92. package/dist/theme.js.map +1 -1
  93. package/dist/types.d.ts +107 -24
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/validate-seeds.d.ts.map +1 -1
  96. package/dist/validate-seeds.js +21 -6
  97. package/dist/validate-seeds.js.map +1 -1
  98. package/dist/validate-suite.d.ts +3 -1
  99. package/dist/validate-suite.d.ts.map +1 -1
  100. package/dist/validate-suite.js +256 -22
  101. package/dist/validate-suite.js.map +1 -1
  102. package/package.json +5 -5
  103. package/dist/compare.d.ts +0 -79
  104. package/dist/compare.d.ts.map +0 -1
  105. package/dist/compare.js +0 -232
  106. package/dist/compare.js.map +0 -1
package/dist/compare.js DELETED
@@ -1,232 +0,0 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
2
- import { basename, dirname, resolve } from "node:path";
3
- import { scenarioCompareKey } from "./record-trace.js";
4
- function usageOf(result) {
5
- return result.usage?.total ?? result.trace?.usage;
6
- }
7
- function registryHopCount(trace) {
8
- if (!trace) {
9
- return 0;
10
- }
11
- return trace.toolCalls.filter((call) => {
12
- if (!call.name.toLowerCase().includes("read")) {
13
- return false;
14
- }
15
- return JSON.stringify(call.args ?? {})
16
- .toLowerCase()
17
- .includes(".skeleton/registry");
18
- }).length;
19
- }
20
- export function metricsFromResult(result) {
21
- const usage = usageOf(result);
22
- const trace = result.trace;
23
- return {
24
- passed: result.passed,
25
- skipped: result.skipped,
26
- durationMs: result.durationMs,
27
- toolCallCount: trace?.toolCalls.length ?? 0,
28
- skillCount: trace?.skillsInvoked?.length ?? 0,
29
- registryHopCount: registryHopCount(trace),
30
- totalTokens: usage?.totalTokens,
31
- inputTokens: usage?.inputTokens,
32
- outputTokens: usage?.outputTokens,
33
- };
34
- }
35
- function optionalDelta(a, b) {
36
- if (a === undefined || b === undefined) {
37
- return undefined;
38
- }
39
- return b - a;
40
- }
41
- function mean(values) {
42
- if (values.length === 0) {
43
- return undefined;
44
- }
45
- return values.reduce((sum, value) => sum + value, 0) / values.length;
46
- }
47
- function pairKey(result) {
48
- const id = result.compareId?.trim();
49
- if (id) {
50
- return id;
51
- }
52
- return scenarioCompareKey(result.scenario);
53
- }
54
- function formatScenarioCell(row) {
55
- if (row.aScenario && row.bScenario && row.aScenario !== row.bScenario) {
56
- return `${row.scenario} (A: ${row.aScenario} · B: ${row.bScenario})`;
57
- }
58
- return row.scenario;
59
- }
60
- /** Pair scenarios by `compareId`, then band-neutral name, across two suite reports. */
61
- export function compareSuiteReports(pair) {
62
- const aByKey = new Map();
63
- for (const result of pair.a.results) {
64
- const key = pairKey(result);
65
- if (!aByKey.has(key)) {
66
- aByKey.set(key, result);
67
- }
68
- }
69
- const bByKey = new Map();
70
- for (const result of pair.b.results) {
71
- const key = pairKey(result);
72
- if (!bByKey.has(key)) {
73
- bByKey.set(key, result);
74
- }
75
- }
76
- const keys = new Set([...aByKey.keys(), ...bByKey.keys()]);
77
- const paired = [];
78
- const onlyInA = [];
79
- const onlyInB = [];
80
- for (const key of [...keys].sort()) {
81
- const aResult = aByKey.get(key);
82
- const bResult = bByKey.get(key);
83
- if (!aResult) {
84
- onlyInB.push(bResult?.scenario ?? key);
85
- continue;
86
- }
87
- if (!bResult) {
88
- onlyInA.push(aResult.scenario);
89
- continue;
90
- }
91
- const a = metricsFromResult(aResult);
92
- const b = metricsFromResult(bResult);
93
- const delta = {
94
- scenario: key,
95
- a,
96
- b,
97
- deltas: {
98
- passedChanged: a.passed !== b.passed,
99
- durationMs: b.durationMs - a.durationMs,
100
- toolCallCount: b.toolCallCount - a.toolCallCount,
101
- skillCount: b.skillCount - a.skillCount,
102
- registryHopCount: b.registryHopCount - a.registryHopCount,
103
- totalTokens: optionalDelta(a.totalTokens, b.totalTokens),
104
- },
105
- };
106
- if (aResult.scenario !== bResult.scenario) {
107
- delta.aScenario = aResult.scenario;
108
- delta.bScenario = bResult.scenario;
109
- }
110
- paired.push(delta);
111
- }
112
- const passRegressions = paired.filter((row) => row.a.passed && !row.b.passed).length;
113
- const passImprovements = paired.filter((row) => !row.a.passed && row.b.passed).length;
114
- const durationDeltas = paired.map((row) => row.deltas.durationMs);
115
- const toolDeltas = paired.map((row) => row.deltas.toolCallCount);
116
- const tokenDeltas = paired
117
- .map((row) => row.deltas.totalTokens)
118
- .filter((value) => value !== undefined);
119
- return {
120
- aLabel: pair.aLabel,
121
- bLabel: pair.bLabel,
122
- aSuite: pair.a.suite,
123
- bSuite: pair.b.suite,
124
- paired,
125
- onlyInA,
126
- onlyInB,
127
- summary: {
128
- pairedCount: paired.length,
129
- passRegressions,
130
- passImprovements,
131
- meanDurationDeltaMs: mean(durationDeltas),
132
- meanToolCallDelta: mean(toolDeltas),
133
- meanTotalTokensDelta: mean(tokenDeltas),
134
- },
135
- };
136
- }
137
- function formatSigned(value) {
138
- if (value === undefined) {
139
- return "n/a";
140
- }
141
- if (value > 0) {
142
- return `+${value}`;
143
- }
144
- return String(value);
145
- }
146
- export function formatCompareReportMarkdown(report) {
147
- const lines = [
148
- `# Suite compare: ${report.aLabel} vs ${report.bLabel}`,
149
- "",
150
- `- A suite: \`${report.aSuite}\` (${report.aLabel})`,
151
- `- B suite: \`${report.bSuite}\` (${report.bLabel})`,
152
- `- Paired scenarios: ${report.summary.pairedCount}`,
153
- `- Pass regressions (A pass → B fail): ${report.summary.passRegressions}`,
154
- `- Pass improvements (A fail → B pass): ${report.summary.passImprovements}`,
155
- `- Mean Δ durationMs (B−A): ${formatSigned(report.summary.meanDurationDeltaMs !== undefined
156
- ? Math.round(report.summary.meanDurationDeltaMs)
157
- : undefined)}`,
158
- `- Mean Δ toolCallCount (B−A): ${formatSigned(report.summary.meanToolCallDelta !== undefined
159
- ? Math.round(report.summary.meanToolCallDelta)
160
- : undefined)}`,
161
- `- Mean Δ totalTokens (B−A): ${formatSigned(report.summary.meanTotalTokensDelta !== undefined
162
- ? Math.round(report.summary.meanTotalTokensDelta)
163
- : undefined)}`,
164
- "",
165
- ];
166
- if (report.onlyInA.length > 0) {
167
- lines.push("## Only in A", "", ...report.onlyInA.map((name) => `- ${name}`), "");
168
- }
169
- if (report.onlyInB.length > 0) {
170
- lines.push("## Only in B", "", ...report.onlyInB.map((name) => `- ${name}`), "");
171
- }
172
- lines.push("## Per-scenario deltas", "");
173
- lines.push("| Scenario | A pass | B pass | Δ durationMs | Δ tools | Δ skills | Δ registry hops | Δ totalTokens |", "| --- | --- | --- | ---: | ---: | ---: | ---: | ---: |");
174
- for (const row of report.paired) {
175
- lines.push(`| ${formatScenarioCell(row)} | ${row.a.passed ? "pass" : "fail"} | ${row.b.passed ? "pass" : "fail"} | ${formatSigned(row.deltas.durationMs)} | ${formatSigned(row.deltas.toolCallCount)} | ${formatSigned(row.deltas.skillCount)} | ${formatSigned(row.deltas.registryHopCount)} | ${formatSigned(row.deltas.totalTokens)} |`);
176
- }
177
- lines.push("");
178
- return `${lines.join("\n")}\n`;
179
- }
180
- function isSuiteRunReport(value) {
181
- if (!value || typeof value !== "object") {
182
- return false;
183
- }
184
- const record = value;
185
- return typeof record.suite === "string" && Array.isArray(record.results);
186
- }
187
- /** Load a SuiteRunReport JSON dump (single report or `{ reports: [...] }` taking the first). */
188
- export async function loadSuiteRunReport(path) {
189
- const raw = JSON.parse(await readFile(path, "utf8"));
190
- if (isSuiteRunReport(raw)) {
191
- return raw;
192
- }
193
- if (raw && typeof raw === "object" && Array.isArray(raw.reports)) {
194
- const first = raw.reports[0];
195
- if (isSuiteRunReport(first)) {
196
- return first;
197
- }
198
- }
199
- throw new Error(`invalid suite report JSON: ${path}`);
200
- }
201
- export async function writeCompareReport(options) {
202
- const { renderCompareHtmlReport } = await import("./html-report.js");
203
- await mkdir(options.outDir, { recursive: true });
204
- const jsonPath = resolve(options.outDir, "compare-report.json");
205
- const markdownPath = resolve(options.outDir, "compare-report.md");
206
- const htmlPath = resolve(options.outDir, "compare-report.html");
207
- await writeFile(jsonPath, `${JSON.stringify(options.report, null, 2)}\n`, "utf8");
208
- await writeFile(markdownPath, formatCompareReportMarkdown(options.report), "utf8");
209
- await writeFile(htmlPath, renderCompareHtmlReport(options.report), "utf8");
210
- return { jsonPath, markdownPath, htmlPath };
211
- }
212
- /** Parse `a:b` pair tokens into absolute/relative path sides. */
213
- export function parseComparePairToken(token) {
214
- const separator = token.includes(":") ? ":" : undefined;
215
- if (!separator) {
216
- throw new Error("--compare-pairs requires A:B (two suite dirs or report JSON paths)");
217
- }
218
- // Allow Windows drive letters by splitting on the last colon when both sides look like paths
219
- // with a single colon separator between them (suite-a:suite-b).
220
- const idx = token.indexOf(":");
221
- const a = token.slice(0, idx).trim();
222
- const b = token.slice(idx + 1).trim();
223
- if (!a || !b) {
224
- throw new Error("--compare-pairs requires non-empty A and B sides");
225
- }
226
- return { a, b };
227
- }
228
- export function labelForCompareSide(side) {
229
- const base = basename(side.replace(/\/$/, ""));
230
- return base.endsWith(".json") ? basename(dirname(side)) || base : base;
231
- }
232
- //# sourceMappingURL=compare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"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"}