@post-print/agent-test 1.1.9 → 2.0.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.
Files changed (238) hide show
  1. package/README.md +18 -66
  2. package/dist/cli.d.ts +2 -64
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +26 -691
  5. package/dist/cli.js.map +1 -1
  6. package/dist/compare-scenario.d.ts +1 -1
  7. package/dist/compare-scenario.d.ts.map +1 -1
  8. package/dist/compare-scenario.js +72 -75
  9. package/dist/compare-scenario.js.map +1 -1
  10. package/dist/failures.d.ts +5 -1
  11. package/dist/failures.d.ts.map +1 -1
  12. package/dist/failures.js +1 -1
  13. package/dist/failures.js.map +1 -1
  14. package/dist/host-login.d.ts +1 -26
  15. package/dist/host-login.d.ts.map +1 -1
  16. package/dist/host-login.js +1 -92
  17. package/dist/host-login.js.map +1 -1
  18. package/dist/index.d.ts +6 -28
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -26
  21. package/dist/index.js.map +1 -1
  22. package/dist/scenario-story.d.ts.map +1 -1
  23. package/dist/scenario-story.js +57 -39
  24. package/dist/scenario-story.js.map +1 -1
  25. package/dist/sdk/cli.d.ts +3 -0
  26. package/dist/sdk/cli.d.ts.map +1 -0
  27. package/dist/sdk/cli.js +20 -0
  28. package/dist/sdk/cli.js.map +1 -0
  29. package/dist/sdk/definitions.d.ts +22 -0
  30. package/dist/sdk/definitions.d.ts.map +1 -0
  31. package/dist/sdk/definitions.js +58 -0
  32. package/dist/sdk/definitions.js.map +1 -0
  33. package/dist/sdk/expect.d.ts +31 -0
  34. package/dist/sdk/expect.d.ts.map +1 -0
  35. package/dist/sdk/expect.js +68 -0
  36. package/dist/sdk/expect.js.map +1 -0
  37. package/dist/sdk/judge.d.ts +16 -0
  38. package/dist/sdk/judge.d.ts.map +1 -0
  39. package/dist/sdk/judge.js +82 -0
  40. package/dist/sdk/judge.js.map +1 -0
  41. package/dist/sdk/metrics.d.ts +3 -0
  42. package/dist/sdk/metrics.d.ts.map +1 -0
  43. package/dist/sdk/metrics.js +24 -0
  44. package/dist/sdk/metrics.js.map +1 -0
  45. package/dist/sdk/reporter.d.ts +12 -0
  46. package/dist/sdk/reporter.d.ts.map +1 -0
  47. package/dist/sdk/reporter.js +58 -0
  48. package/dist/sdk/reporter.js.map +1 -0
  49. package/dist/sdk/runtime.d.ts +33 -0
  50. package/dist/sdk/runtime.d.ts.map +1 -0
  51. package/dist/sdk/runtime.js +188 -0
  52. package/dist/sdk/runtime.js.map +1 -0
  53. package/dist/sdk/test.d.ts +27 -0
  54. package/dist/sdk/test.d.ts.map +1 -0
  55. package/dist/sdk/test.js +92 -0
  56. package/dist/sdk/test.js.map +1 -0
  57. package/dist/sdk/types.d.ts +75 -0
  58. package/dist/sdk/types.d.ts.map +1 -0
  59. package/dist/sdk/types.js +2 -0
  60. package/dist/sdk/types.js.map +1 -0
  61. package/dist/sdk/usage.d.ts +10 -0
  62. package/dist/sdk/usage.d.ts.map +1 -0
  63. package/dist/sdk/usage.js +13 -0
  64. package/dist/sdk/usage.js.map +1 -0
  65. package/dist/sdk/viewer-results.d.ts +43 -0
  66. package/dist/sdk/viewer-results.d.ts.map +1 -0
  67. package/dist/sdk/viewer-results.js +126 -0
  68. package/dist/sdk/viewer-results.js.map +1 -0
  69. package/dist/sdk/viewer.d.ts +11 -0
  70. package/dist/sdk/viewer.d.ts.map +1 -0
  71. package/dist/sdk/viewer.js +160 -0
  72. package/dist/sdk/viewer.js.map +1 -0
  73. package/dist/sdk/workspace.d.ts +33 -0
  74. package/dist/sdk/workspace.d.ts.map +1 -0
  75. package/dist/sdk/workspace.js +100 -0
  76. package/dist/sdk/workspace.js.map +1 -0
  77. package/dist/types.d.ts +4 -40
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/viewer/catalog.d.ts +2 -8
  80. package/dist/viewer/catalog.d.ts.map +1 -1
  81. package/dist/viewer/catalog.js +23 -128
  82. package/dist/viewer/catalog.js.map +1 -1
  83. package/dist/viewer/client.d.ts.map +1 -1
  84. package/dist/viewer/client.js +12 -12
  85. package/dist/viewer/client.js.map +1 -1
  86. package/dist/viewer/run-controller.d.ts +4 -2
  87. package/dist/viewer/run-controller.d.ts.map +1 -1
  88. package/dist/viewer/run-controller.js +297 -248
  89. package/dist/viewer/run-controller.js.map +1 -1
  90. package/dist/viewer/server.d.ts +4 -3
  91. package/dist/viewer/server.d.ts.map +1 -1
  92. package/dist/viewer/server.js +149 -112
  93. package/dist/viewer/server.js.map +1 -1
  94. package/dist/viewer/styles.d.ts +2 -0
  95. package/dist/viewer/styles.d.ts.map +1 -0
  96. package/dist/viewer/styles.js +444 -0
  97. package/dist/viewer/styles.js.map +1 -0
  98. package/dist/worker-pool.d.ts +5 -1
  99. package/dist/worker-pool.d.ts.map +1 -1
  100. package/dist/worker-pool.js +1 -1
  101. package/dist/worker-pool.js.map +1 -1
  102. package/package.json +7 -7
  103. package/dist/check.d.ts +0 -38
  104. package/dist/check.d.ts.map +0 -1
  105. package/dist/check.js +0 -169
  106. package/dist/check.js.map +0 -1
  107. package/dist/command-allowlist.d.ts +0 -9
  108. package/dist/command-allowlist.d.ts.map +0 -1
  109. package/dist/command-allowlist.js +0 -29
  110. package/dist/command-allowlist.js.map +0 -1
  111. package/dist/debug-bundle.d.ts +0 -81
  112. package/dist/debug-bundle.d.ts.map +0 -1
  113. package/dist/debug-bundle.js +0 -392
  114. package/dist/debug-bundle.js.map +0 -1
  115. package/dist/discover-suites.d.ts +0 -2
  116. package/dist/discover-suites.d.ts.map +0 -1
  117. package/dist/discover-suites.js +0 -19
  118. package/dist/discover-suites.js.map +0 -1
  119. package/dist/doctor.d.ts +0 -24
  120. package/dist/doctor.d.ts.map +0 -1
  121. package/dist/doctor.js +0 -272
  122. package/dist/doctor.js.map +0 -1
  123. package/dist/expect.d.ts +0 -59
  124. package/dist/expect.d.ts.map +0 -1
  125. package/dist/expect.js +0 -518
  126. package/dist/expect.js.map +0 -1
  127. package/dist/host-log.d.ts +0 -17
  128. package/dist/host-log.d.ts.map +0 -1
  129. package/dist/host-log.js +0 -154
  130. package/dist/host-log.js.map +0 -1
  131. package/dist/hosts.d.ts +0 -22
  132. package/dist/hosts.d.ts.map +0 -1
  133. package/dist/hosts.js +0 -84
  134. package/dist/hosts.js.map +0 -1
  135. package/dist/html-report.d.ts +0 -18
  136. package/dist/html-report.d.ts.map +0 -1
  137. package/dist/html-report.js +0 -1276
  138. package/dist/html-report.js.map +0 -1
  139. package/dist/live-isolation.d.ts +0 -82
  140. package/dist/live-isolation.d.ts.map +0 -1
  141. package/dist/live-isolation.js +0 -399
  142. package/dist/live-isolation.js.map +0 -1
  143. package/dist/live-timeout.d.ts +0 -11
  144. package/dist/live-timeout.d.ts.map +0 -1
  145. package/dist/live-timeout.js +0 -29
  146. package/dist/live-timeout.js.map +0 -1
  147. package/dist/load-adapters.d.ts +0 -13
  148. package/dist/load-adapters.d.ts.map +0 -1
  149. package/dist/load-adapters.js +0 -76
  150. package/dist/load-adapters.js.map +0 -1
  151. package/dist/load-suite.d.ts +0 -22
  152. package/dist/load-suite.d.ts.map +0 -1
  153. package/dist/load-suite.js +0 -154
  154. package/dist/load-suite.js.map +0 -1
  155. package/dist/mcp-config.d.ts +0 -13
  156. package/dist/mcp-config.d.ts.map +0 -1
  157. package/dist/mcp-config.js +0 -121
  158. package/dist/mcp-config.js.map +0 -1
  159. package/dist/preflight.d.ts +0 -3
  160. package/dist/preflight.d.ts.map +0 -1
  161. package/dist/preflight.js +0 -17
  162. package/dist/preflight.js.map +0 -1
  163. package/dist/progress.d.ts +0 -24
  164. package/dist/progress.d.ts.map +0 -1
  165. package/dist/progress.js +0 -111
  166. package/dist/progress.js.map +0 -1
  167. package/dist/record-trace.d.ts +0 -64
  168. package/dist/record-trace.d.ts.map +0 -1
  169. package/dist/record-trace.js +0 -124
  170. package/dist/record-trace.js.map +0 -1
  171. package/dist/report-preview-server.d.ts +0 -2
  172. package/dist/report-preview-server.d.ts.map +0 -1
  173. package/dist/report-preview-server.js +0 -24
  174. package/dist/report-preview-server.js.map +0 -1
  175. package/dist/report-preview.d.ts +0 -35
  176. package/dist/report-preview.d.ts.map +0 -1
  177. package/dist/report-preview.js +0 -205
  178. package/dist/report-preview.js.map +0 -1
  179. package/dist/run-suite.d.ts +0 -139
  180. package/dist/run-suite.d.ts.map +0 -1
  181. package/dist/run-suite.js +0 -1688
  182. package/dist/run-suite.js.map +0 -1
  183. package/dist/scenario-finalizer.d.ts +0 -27
  184. package/dist/scenario-finalizer.d.ts.map +0 -1
  185. package/dist/scenario-finalizer.js +0 -39
  186. package/dist/scenario-finalizer.js.map +0 -1
  187. package/dist/scenario-retry.d.ts +0 -15
  188. package/dist/scenario-retry.d.ts.map +0 -1
  189. package/dist/scenario-retry.js +0 -52
  190. package/dist/scenario-retry.js.map +0 -1
  191. package/dist/scenario-seed.d.ts +0 -13
  192. package/dist/scenario-seed.d.ts.map +0 -1
  193. package/dist/scenario-seed.js +0 -72
  194. package/dist/scenario-seed.js.map +0 -1
  195. package/dist/suite-summary.d.ts +0 -16
  196. package/dist/suite-summary.d.ts.map +0 -1
  197. package/dist/suite-summary.js +0 -218
  198. package/dist/suite-summary.js.map +0 -1
  199. package/dist/theme.d.ts +0 -96
  200. package/dist/theme.d.ts.map +0 -1
  201. package/dist/theme.js +0 -446
  202. package/dist/theme.js.map +0 -1
  203. package/dist/validate-seeds.d.ts +0 -20
  204. package/dist/validate-seeds.d.ts.map +0 -1
  205. package/dist/validate-seeds.js +0 -72
  206. package/dist/validate-seeds.js.map +0 -1
  207. package/dist/validate-suite.d.ts +0 -24
  208. package/dist/validate-suite.d.ts.map +0 -1
  209. package/dist/validate-suite.js +0 -542
  210. package/dist/validate-suite.js.map +0 -1
  211. package/dist/viewer/cli.d.ts +0 -17
  212. package/dist/viewer/cli.d.ts.map +0 -1
  213. package/dist/viewer/cli.js +0 -38
  214. package/dist/viewer/cli.js.map +0 -1
  215. package/dist/viewer/compare-metrics.d.ts +0 -30
  216. package/dist/viewer/compare-metrics.d.ts.map +0 -1
  217. package/dist/viewer/compare-metrics.js +0 -101
  218. package/dist/viewer/compare-metrics.js.map +0 -1
  219. package/dist/viewer/context-files.d.ts +0 -8
  220. package/dist/viewer/context-files.d.ts.map +0 -1
  221. package/dist/viewer/context-files.js +0 -57
  222. package/dist/viewer/context-files.js.map +0 -1
  223. package/dist/viewer/emit.d.ts +0 -7
  224. package/dist/viewer/emit.d.ts.map +0 -1
  225. package/dist/viewer/emit.js +0 -25
  226. package/dist/viewer/emit.js.map +0 -1
  227. package/dist/viewer/live-runner.d.ts +0 -27
  228. package/dist/viewer/live-runner.d.ts.map +0 -1
  229. package/dist/viewer/live-runner.js +0 -166
  230. package/dist/viewer/live-runner.js.map +0 -1
  231. package/dist/viewer/session-server.d.ts +0 -2
  232. package/dist/viewer/session-server.d.ts.map +0 -1
  233. package/dist/viewer/session-server.js +0 -71
  234. package/dist/viewer/session-server.js.map +0 -1
  235. package/dist/warnings.d.ts +0 -3
  236. package/dist/warnings.d.ts.map +0 -1
  237. package/dist/warnings.js +0 -13
  238. package/dist/warnings.js.map +0 -1
package/dist/theme.js DELETED
@@ -1,446 +0,0 @@
1
- import { basename, join } from "node:path";
2
- import { pathToFileURL } from "node:url";
3
- import chalk from "chalk";
4
- const FALLBACK_COLUMNS = 80;
5
- const MIN_WRAP_COLS = 40;
6
- const STORY_GUTTER = " ";
7
- const STORY_LABEL_WIDTH = 12;
8
- const STORY_INDENT = STORY_GUTTER.length + STORY_LABEL_WIDTH;
9
- /** Word-wrap width for a line that already has `indent` visible columns. */
10
- export function wrapColumnWidth(indent, columns = process.stdout.columns) {
11
- const cols = typeof columns === "number" && columns > 0 ? columns : FALLBACK_COLUMNS;
12
- return Math.max(MIN_WRAP_COLS, cols - indent);
13
- }
14
- /** OSC 8 hyperlink: ESC ] 8 ; ; URL BEL text ESC ] 8 ; ; BEL */
15
- const OSC8_OPEN = "\u001b]8;;";
16
- const OSC8_CLOSE = "\u0007";
17
- /** Always enable ANSI color — agent-test is a human CLI, not a pipe filter. */
18
- export function configureCliColor() {
19
- chalk.level = 3;
20
- }
21
- export function colorEnabled() {
22
- return chalk.level > 0;
23
- }
24
- /** OSC-8 hyperlink. Cursor opens `http://` in the browser and `file://` in the editor. */
25
- export function formatHyperlink(url, display) {
26
- return `${OSC8_OPEN}${url}${OSC8_CLOSE}${display}${OSC8_OPEN}${OSC8_CLOSE}`;
27
- }
28
- /**
29
- * Wrap a filesystem path in an OSC-8 `file://` hyperlink.
30
- * Display text stays a plain path for copy-paste.
31
- */
32
- export function formatFileHyperlink(absolutePath, display = absolutePath) {
33
- return formatHyperlink(pathToFileURL(absolutePath).href, display);
34
- }
35
- /** Truncate long temp/session paths to `…/last` or `…/parent/last`. */
36
- export function truncatePath(path) {
37
- if (process.env.AGENT_TEST_VERBOSE_PATHS === "1" ||
38
- process.env.AGENT_TEST_DEBUG === "1" ||
39
- process.env.AGENT_TEST_DEBUG === "true") {
40
- return path;
41
- }
42
- const parts = path.split("/").filter(Boolean);
43
- if (parts.length <= 2) {
44
- return path;
45
- }
46
- return `…/${parts.slice(-2).join("/")}`;
47
- }
48
- /** Word-wrap text at `cols` without breaking words when possible. */
49
- export function wrapText(text, cols = wrapColumnWidth(0)) {
50
- const words = text.trim().split(/\s+/).filter(Boolean);
51
- if (words.length === 0) {
52
- return [];
53
- }
54
- const lines = [];
55
- let current = words[0] ?? "";
56
- for (let i = 1; i < words.length; i++) {
57
- const word = words[i] ?? "";
58
- if (`${current} ${word}`.length <= cols) {
59
- current = `${current} ${word}`;
60
- }
61
- else {
62
- lines.push(current);
63
- current = word;
64
- }
65
- }
66
- lines.push(current);
67
- return lines;
68
- }
69
- export function formatTokenNumber(totalTokens) {
70
- if (totalTokens >= 1_000_000) {
71
- return `${(totalTokens / 1_000_000).toFixed(1)}M`;
72
- }
73
- if (totalTokens >= 1000) {
74
- return `${(totalTokens / 1000).toFixed(1)}k`;
75
- }
76
- return String(totalTokens);
77
- }
78
- export function formatTokenCount(totalTokens) {
79
- return `${formatTokenNumber(totalTokens)} tok`;
80
- }
81
- const FAILURE_CATEGORY_LABEL = {
82
- rubric_miss: "rubric",
83
- judge_infra: "judge infra",
84
- judge_parse: "judge parse",
85
- agent_runtime: "agent runtime",
86
- worktree_leak: "worktree leak",
87
- recording_error: "recording",
88
- };
89
- export function formatFailureCategory(category) {
90
- if (!category) {
91
- return undefined;
92
- }
93
- return FAILURE_CATEGORY_LABEL[category] ?? category.replaceAll("_", " ");
94
- }
95
- export function formatDurationLabel(ms) {
96
- if (ms < 1000) {
97
- return `${Math.round(ms)}ms`;
98
- }
99
- return `${(ms / 1000).toFixed(1)}s`;
100
- }
101
- /** Elapsed clock for an in-flight agent. Tenths of a second. */
102
- export function formatClock(ms) {
103
- return `${Math.max(0, ms / 1000).toFixed(1)}s`;
104
- }
105
- /** Visible character count that skips CSI color sequences. */
106
- export function visibleLength(text) {
107
- let count = 0;
108
- for (let index = 0; index < text.length; index++) {
109
- if (text.charCodeAt(index) === 27) {
110
- const end = text.indexOf("m", index);
111
- if (end === -1) {
112
- break;
113
- }
114
- index = end;
115
- continue;
116
- }
117
- count += 1;
118
- }
119
- return count;
120
- }
121
- /** Keep a live clock line on one terminal row so `\r` can overwrite it. */
122
- export function clipToColumns(text, columns) {
123
- const cols = Math.max(20, columns);
124
- if (visibleLength(text) <= cols) {
125
- return text;
126
- }
127
- let count = 0;
128
- let end = 0;
129
- for (let index = 0; index < text.length; index++) {
130
- if (text.charCodeAt(index) === 27) {
131
- const seqEnd = text.indexOf("m", index);
132
- if (seqEnd === -1) {
133
- end = text.length;
134
- break;
135
- }
136
- index = seqEnd;
137
- end = index + 1;
138
- continue;
139
- }
140
- if (count >= cols - 1) {
141
- break;
142
- }
143
- count += 1;
144
- end = index + 1;
145
- }
146
- return `${text.slice(0, end)}…`;
147
- }
148
- function criterionLabel(count) {
149
- return count === 1 ? "1 criterion" : `${count} criteria`;
150
- }
151
- export const theme = {
152
- suiteHeader(name, host, count) {
153
- const scenarios = count === 1 ? "1 scenario" : `${count} scenarios`;
154
- return `${chalk.bold.cyan(name)} ${chalk.dim("·")} ${chalk.dim(host)} ${chalk.dim("·")} ${chalk.dim(scenarios)}`;
155
- },
156
- scenarioTitle(index, total, name, host) {
157
- return `\n${chalk.bold(`[${index}/${total}]`)} ${chalk.bold.white(name)} ${chalk.dim(`(${host})`)}`;
158
- },
159
- scenarioLabel(name, host) {
160
- return host ? `${chalk.bold.white(name)} ${chalk.dim(`(${host})`)}` : chalk.bold.white(name);
161
- },
162
- scenarioDescription(text) {
163
- return wrapText(text.trim(), wrapColumnWidth(4)).map((line) => ` ${chalk.dim(line)}`);
164
- },
165
- phaseTree(_prefix, message) {
166
- return ` ${message}`;
167
- },
168
- hostLog(level, service, detail) {
169
- const levelColor = level === "error" ? chalk.red : level === "warn" ? chalk.yellow : chalk.dim;
170
- return ` ${chalk.dim("host")} ${levelColor(level.toUpperCase())} ${chalk.dim(service)} ${chalk.dim(detail)}`;
171
- },
172
- path(p) {
173
- return chalk.cyan(truncatePath(p));
174
- },
175
- basename(p) {
176
- return chalk.cyan(basename(p));
177
- },
178
- duration(label) {
179
- return chalk.yellow(label);
180
- },
181
- phaseDim(message) {
182
- return chalk.dim(message);
183
- },
184
- phase(label, detail) {
185
- if (!detail) {
186
- return chalk.dim(label);
187
- }
188
- return `${chalk.dim(label)} ${detail}`;
189
- },
190
- agentClock(elapsedLabel, preview) {
191
- const clock = theme.phase("agent", theme.duration(elapsedLabel));
192
- if (!preview) {
193
- return clock;
194
- }
195
- return `${clock} ${chalk.dim(preview)}`;
196
- },
197
- liveTool(name, detail) {
198
- if (!detail) {
199
- return chalk.dim(name);
200
- }
201
- return `${chalk.dim(name)} ${chalk.cyan(detail)}`;
202
- },
203
- statusCompleted(status) {
204
- return status === "completed" ? chalk.green(status) : chalk.red(status);
205
- },
206
- tip(message) {
207
- return chalk.dim.italic(message);
208
- },
209
- /**
210
- * Tip line with a clickable target.
211
- * `http://` stays visible so Cursor can open the browser.
212
- * A filesystem path stays visible. Cursor opens that path in the editor.
213
- */
214
- fileTip(label, pathOrUrl) {
215
- if (pathOrUrl.startsWith("http://") || pathOrUrl.startsWith("https://")) {
216
- return theme.tip(`${formatHyperlink(pathOrUrl, label)} ${pathOrUrl}`);
217
- }
218
- return theme.tip(`${label} file ${formatFileHyperlink(pathOrUrl)}`);
219
- },
220
- warn(message) {
221
- return `${chalk.yellow("⚠")} ${chalk.yellow(message)}`;
222
- },
223
- banner(mode = "live") {
224
- return `${chalk.bold.cyan("agent-test")} ${chalk.dim(mode)}`;
225
- },
226
- bannerDetail(message) {
227
- return ` ${chalk.dim(message)}`;
228
- },
229
- bannerSession(path) {
230
- return ` ${chalk.dim("session")} ${chalk.cyan(truncatePath(path))}`;
231
- },
232
- bannerHints(hints) {
233
- return ` ${chalk.dim(hints.join(" · "))}`;
234
- },
235
- runSummary(text) {
236
- return text
237
- .split("\n")
238
- .map((line) => (line.startsWith("failures") ? chalk.red(line) : chalk.dim(line)))
239
- .join("\n");
240
- },
241
- summary(suite, passed, failed, skipped) {
242
- const parts = [
243
- `${chalk.bold.cyan(suite)}:`,
244
- chalk.green(`${passed} passed`),
245
- failed > 0 ? chalk.red(`${failed} failed`) : chalk.dim(`${failed} failed`),
246
- chalk.dim(`${skipped} skipped`),
247
- ];
248
- return parts.join(" ");
249
- },
250
- failedScenariosHeader() {
251
- return chalk.dim("Failed scenarios:");
252
- },
253
- failedScenarioName(name) {
254
- return ` ${chalk.red("✗")} ${name}`;
255
- },
256
- verboseFailure(matcher, message, evidence, category) {
257
- const prefix = category ? `${chalk.dim(category)} ` : "";
258
- const base = ` ${prefix}${chalk.dim(matcher)} ${message}`;
259
- if (!evidence) {
260
- return base;
261
- }
262
- return `${base}\n ${chalk.dim(evidence)}`;
263
- },
264
- debugBundlePointer(path) {
265
- return theme.phase("debug", theme.path(path));
266
- },
267
- judgePhase(count) {
268
- return theme.phase("judge", chalk.dim(`(${criterionLabel(count)})`));
269
- },
270
- isolationNote() {
271
- return chalk.dim.italic("isolated subprocesses");
272
- },
273
- skipped(label) {
274
- return `${chalk.dim(label)} — ${chalk.dim("skipped")}`;
275
- },
276
- scenarioVerdict(options) {
277
- const mark = options.passed ? chalk.bold.green("✓") : chalk.bold.red("✗");
278
- const status = options.passed ? chalk.bold.green("PASS") : chalk.bold.red("FAIL");
279
- const duration = chalk.yellow(formatDurationLabel(options.durationMs));
280
- const tokens = options.totalTokens !== undefined
281
- ? chalk.dim(` · ${formatTokenCount(options.totalTokens)}`)
282
- : "";
283
- const primaryCategory = !options.passed
284
- ? formatFailureCategory(options.failureCategory)
285
- : undefined;
286
- const category = primaryCategory ? `${chalk.yellow(primaryCategory)} ` : "";
287
- const lines = ["", ` ${mark} ${status} ${category}${duration}${tokens}`, ""];
288
- if (options.story) {
289
- const sectionLines = options.story.sections
290
- ? renderStorySections(options.story.sections, options.story.verdict, options.passed)
291
- : [
292
- ...storyLines("criteria", options.story.criteria),
293
- ...blankIf(options.story.criteria.length > 0 &&
294
- (options.story.result.length > 0 || options.story.verdict.length > 0)),
295
- ...storyLines("result", options.story.result),
296
- ...blankIf(options.story.result.length > 0 && options.story.verdict.length > 0),
297
- ...storyLines("result", options.story.verdict, options.passed, {
298
- continueLabel: options.story.result.length > 0,
299
- }),
300
- ];
301
- lines.push(...sectionLines);
302
- lines.push("");
303
- if (options.debug) {
304
- const evidenceCols = wrapColumnWidth(STORY_INDENT);
305
- for (const failure of options.rubricFailures ?? []) {
306
- if (!failure.evidence) {
307
- continue;
308
- }
309
- for (const wrapped of wrapText(failure.evidence, evidenceCols)) {
310
- lines.push(`${STORY_GUTTER}${" ".repeat(STORY_LABEL_WIDTH)}${chalk.dim(wrapped)}`);
311
- }
312
- }
313
- }
314
- }
315
- else {
316
- const bodyCols = wrapColumnWidth(STORY_INDENT);
317
- for (const verdict of options.judgeVerdicts ?? []) {
318
- const color = verdict.pass ? chalk.green : chalk.red;
319
- lines.push(`${STORY_GUTTER}${chalk.dim("judge".padEnd(STORY_LABEL_WIDTH))}${chalk.dim(verdict.question)}`);
320
- for (const wrapped of wrapText(verdict.rationale, bodyCols)) {
321
- lines.push(`${STORY_GUTTER}${" ".repeat(STORY_LABEL_WIDTH)}${color(wrapped)}`);
322
- }
323
- lines.push("");
324
- }
325
- for (const failure of options.rubricFailures ?? []) {
326
- const categoryLabel = formatFailureCategory(failure.category) ?? "rubric";
327
- lines.push(`${STORY_GUTTER}${chalk.yellow(categoryLabel.padEnd(STORY_LABEL_WIDTH))}${chalk.dim(failure.matcher)}`);
328
- for (const wrapped of wrapText(failure.message, bodyCols)) {
329
- lines.push(`${STORY_GUTTER}${" ".repeat(STORY_LABEL_WIDTH)}${chalk.yellow(wrapped)}`);
330
- }
331
- if (options.debug && failure.evidence) {
332
- for (const wrapped of wrapText(failure.evidence, bodyCols)) {
333
- lines.push(`${STORY_GUTTER}${" ".repeat(STORY_LABEL_WIDTH)}${chalk.dim(wrapped)}`);
334
- }
335
- }
336
- lines.push("");
337
- }
338
- }
339
- if (options.debug && options.debugBundleDir) {
340
- lines.push(` ${chalk.dim("debug")} ${chalk.cyan(truncatePath(join(options.debugBundleDir, "transcript.md")))}`);
341
- }
342
- return lines;
343
- },
344
- };
345
- function blankIf(condition) {
346
- return condition ? [""] : [];
347
- }
348
- function checkMark(status) {
349
- if (status === "pass") {
350
- return "✓";
351
- }
352
- if (status === "fail") {
353
- return "✗";
354
- }
355
- return "·";
356
- }
357
- function checkColor(status) {
358
- if (status === "pass") {
359
- return chalk.green;
360
- }
361
- if (status === "fail") {
362
- return chalk.red;
363
- }
364
- return (text) => text;
365
- }
366
- function renderCheckLines(check, cols) {
367
- const hang = " ".repeat(STORY_LABEL_WIDTH);
368
- const mark = checkMark(check.status);
369
- const color = checkColor(check.status);
370
- const wrapped = wrapText(`${mark} ${check.text}`, cols);
371
- const body = wrapped.length > 0 ? wrapped : [`${mark} ${check.text}`];
372
- return body.map((part) => `${STORY_GUTTER}${hang}${color(part)}`);
373
- }
374
- function renderStorySections(sections, verdict, passed) {
375
- const titled = sections.some((section) => section.title);
376
- if (!titled && sections.length === 1 && sections[0]) {
377
- const section = sections[0];
378
- const checkTexts = section.checks.map((check) => `${checkMark(check.status)} ${check.text}`);
379
- const notes = section.notes ?? [];
380
- return [
381
- ...storyLines("criteria", checkTexts),
382
- ...blankIf(checkTexts.length > 0 && (notes.length > 0 || verdict.length > 0)),
383
- ...storyLines("result", notes),
384
- ...blankIf(notes.length > 0 && verdict.length > 0),
385
- ...storyLines("result", verdict, passed, { continueLabel: notes.length > 0 }),
386
- ];
387
- }
388
- const cols = wrapColumnWidth(STORY_INDENT);
389
- const hang = " ".repeat(STORY_LABEL_WIDTH);
390
- const lines = [];
391
- for (const [index, section] of sections.entries()) {
392
- if (index > 0) {
393
- lines.push("");
394
- }
395
- if (section.title) {
396
- lines.push(`${STORY_GUTTER}${chalk.bold(section.title)}`);
397
- }
398
- if (section.description) {
399
- for (const part of wrapText(section.description, cols)) {
400
- lines.push(`${STORY_GUTTER}${hang}${chalk.dim(part)}`);
401
- }
402
- }
403
- for (const check of section.checks) {
404
- lines.push(...renderCheckLines(check, cols));
405
- }
406
- for (const note of section.notes ?? []) {
407
- const wrapped = wrapText(note, cols);
408
- const body = wrapped.length > 0 ? wrapped : [note];
409
- for (const part of body) {
410
- lines.push(`${STORY_GUTTER}${hang}${part}`);
411
- }
412
- }
413
- }
414
- if (verdict.length > 0) {
415
- if (lines.length > 0) {
416
- lines.push("");
417
- }
418
- lines.push(...storyLines("result", verdict, passed));
419
- }
420
- return lines;
421
- }
422
- function storyLines(label, values, passed, options) {
423
- if (values.length === 0) {
424
- return [];
425
- }
426
- const lines = [];
427
- const hang = " ".repeat(STORY_LABEL_WIDTH);
428
- const cols = wrapColumnWidth(STORY_INDENT);
429
- const continueLabel = options?.continueLabel === true;
430
- for (const [index, value] of values.entries()) {
431
- if (index > 0 && passed !== undefined) {
432
- lines.push("");
433
- }
434
- const wrapped = wrapText(value, cols);
435
- const body = wrapped.length > 0 ? wrapped : [value];
436
- for (const [wrapIndex, part] of body.entries()) {
437
- const prefix = index === 0 && wrapIndex === 0 && !continueLabel
438
- ? chalk.dim(label.padEnd(STORY_LABEL_WIDTH))
439
- : hang;
440
- const color = passed === false ? chalk.yellow : passed === true ? chalk.green : (text) => text;
441
- lines.push(`${STORY_GUTTER}${prefix}${color(part)}`);
442
- }
443
- }
444
- return lines;
445
- }
446
- //# sourceMappingURL=theme.js.map
package/dist/theme.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export interface SeedValidationIssue {
2
- suite: string;
3
- scenario: string;
4
- seedPatch: string;
5
- message: string;
6
- }
7
- export interface SeedValidationReport {
8
- ok: boolean;
9
- issues: SeedValidationIssue[];
10
- checked: number;
11
- }
12
- /** Apply each seedPatch in a sealed workspace to verify hunks match the current baseline. */
13
- export declare function validateSeedPatches(options: {
14
- cwd: string;
15
- suitesDir: string;
16
- rubricsDir?: string;
17
- filter?: string;
18
- }): Promise<SeedValidationReport>;
19
- export declare function formatSeedValidationReport(report: SeedValidationReport): string;
20
- //# sourceMappingURL=validate-seeds.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-seeds.d.ts","sourceRoot":"","sources":["../src/validate-seeds.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,6FAA6F;AAC7F,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAsChC;AA6BD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAQ/E"}
@@ -1,72 +0,0 @@
1
- import { resolve } from "node:path";
2
- import { createSealedWorkspace, defaultSealedOverlayPaths, isCallerHeadWorkspace, } from "@post-print/agent-harness";
3
- import { discoverSuites } from "./discover-suites.js";
4
- import { loadSuiteFile } from "./load-suite.js";
5
- import { seedScenarioWorktree } from "./scenario-seed.js";
6
- import { resolveScenarioWorkspaceRel } from "./validate-suite.js";
7
- /** Apply each seedPatch in a sealed workspace to verify hunks match the current baseline. */
8
- export async function validateSeedPatches(options) {
9
- const suitesDir = resolve(options.cwd, options.suitesDir);
10
- const suitePaths = await discoverSuites(suitesDir);
11
- const filtered = options.filter
12
- ? suitePaths.filter((path) => path.includes(`/${options.filter}/`) ||
13
- path.endsWith(`/${options.filter}/scenarios.json`))
14
- : suitePaths;
15
- const issues = [];
16
- let checked = 0;
17
- for (const suitePath of filtered) {
18
- const suite = await loadSuiteFile(suitePath, { rubricsDir: options.rubricsDir });
19
- for (const scenario of suite.scenarios) {
20
- if (!scenario.seedPatch) {
21
- continue;
22
- }
23
- checked++;
24
- try {
25
- await validateOneSeed(options.cwd, scenario.seedPatch, {
26
- stageOnly: scenario.seedStageOnly,
27
- workspace: resolveScenarioWorkspaceRel(suite, scenario),
28
- });
29
- }
30
- catch (error) {
31
- issues.push({
32
- suite: suite.name,
33
- scenario: scenario.name,
34
- seedPatch: scenario.seedPatch,
35
- message: error instanceof Error ? error.message : String(error),
36
- });
37
- }
38
- }
39
- }
40
- return { ok: issues.length === 0, issues, checked };
41
- }
42
- async function validateOneSeed(repoRoot, seedPatch, options) {
43
- let cleanup;
44
- let applyPath;
45
- try {
46
- const sealed = await createSealedWorkspace({
47
- callerCwd: repoRoot,
48
- workspace: options.workspace,
49
- overlayPaths: isCallerHeadWorkspace(options.workspace)
50
- ? defaultSealedOverlayPaths()
51
- : undefined,
52
- });
53
- cleanup = sealed.cleanup;
54
- applyPath = sealed.path;
55
- await seedScenarioWorktree(repoRoot, applyPath, seedPatch, {
56
- stageOnly: options.stageOnly,
57
- });
58
- }
59
- finally {
60
- if (cleanup) {
61
- await cleanup().catch(() => undefined);
62
- }
63
- }
64
- }
65
- export function formatSeedValidationReport(report) {
66
- if (report.ok) {
67
- return `Validated ${report.checked} seed patch(es): OK`;
68
- }
69
- const lines = report.issues.map((issue) => ` - ${issue.suite}/${issue.scenario} (${issue.seedPatch}): ${issue.message}`);
70
- return [`Seed validation failed (${report.issues.length} issue(s)):`, ...lines].join("\n");
71
- }
72
- //# sourceMappingURL=validate-seeds.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-seeds.js","sourceRoot":"","sources":["../src/validate-seeds.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import type { AgentScenario, AgentSuiteFile } from "./types.js";
2
- export interface SuiteValidationIssue {
3
- suitePath: string;
4
- scenario?: string;
5
- field: string;
6
- message: string;
7
- }
8
- export interface SuiteValidationReport {
9
- ok: boolean;
10
- issues: SuiteValidationIssue[];
11
- suitesChecked: number;
12
- scenariosChecked: number;
13
- }
14
- /** Semantic validation beyond structural loadSuiteFile checks. */
15
- export declare function validateSuiteFile(suitePath: string, suite: AgentSuiteFile): SuiteValidationIssue[];
16
- export declare function validateSuitePaths(suitePaths: string[], options?: {
17
- validatePaths?: boolean;
18
- repoRoot?: string;
19
- rubricsDir?: string;
20
- }): Promise<SuiteValidationReport>;
21
- export declare function formatValidationReport(report: SuiteValidationReport): string;
22
- /** Scenario workspace wins over suite defaults. Caller HEAD when omit or `"."`. */
23
- export declare function resolveScenarioWorkspaceRel(suite: Pick<AgentSuiteFile, "defaults">, scenario: Pick<AgentScenario, "workspace">): string | undefined;
24
- //# sourceMappingURL=validate-suite.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-suite.d.ts","sourceRoot":"","sources":["../src/validate-suite.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACX,aAAa,EACb,cAAc,EAKd,MAAM,YAAY,CAAC;AAiEpB,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAspBD,kEAAkE;AAClE,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,cAAc,GACnB,oBAAoB,EAAE,CAsCxB;AAED,wBAAsB,kBAAkB,CACvC,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,OAAO,CAAC,qBAAqB,CAAC,CAyHhC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAY5E;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EACvC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GACxC,MAAM,GAAG,SAAS,CAIpB"}