@post-print/agent-test 0.1.13 → 0.1.15

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 (47) hide show
  1. package/README.md +72 -0
  2. package/dist/cli.d.ts +24 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +58 -8
  5. package/dist/cli.js.map +1 -1
  6. package/dist/debug-bundle.d.ts +66 -0
  7. package/dist/debug-bundle.d.ts.map +1 -0
  8. package/dist/debug-bundle.js +241 -0
  9. package/dist/debug-bundle.js.map +1 -0
  10. package/dist/expect.d.ts +9 -0
  11. package/dist/expect.d.ts.map +1 -1
  12. package/dist/expect.js +125 -46
  13. package/dist/expect.js.map +1 -1
  14. package/dist/failures.d.ts +4 -0
  15. package/dist/failures.d.ts.map +1 -0
  16. package/dist/failures.js +7 -0
  17. package/dist/failures.js.map +1 -0
  18. package/dist/index.d.ts +4 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/live-isolation.d.ts +7 -9
  23. package/dist/live-isolation.d.ts.map +1 -1
  24. package/dist/live-isolation.js +37 -10
  25. package/dist/live-isolation.js.map +1 -1
  26. package/dist/load-suite.d.ts.map +1 -1
  27. package/dist/load-suite.js +18 -7
  28. package/dist/load-suite.js.map +1 -1
  29. package/dist/mcp-config.d.ts +5 -0
  30. package/dist/mcp-config.d.ts.map +1 -0
  31. package/dist/mcp-config.js +75 -0
  32. package/dist/mcp-config.js.map +1 -0
  33. package/dist/record-trace.d.ts +8 -0
  34. package/dist/record-trace.d.ts.map +1 -1
  35. package/dist/record-trace.js +23 -4
  36. package/dist/record-trace.js.map +1 -1
  37. package/dist/run-suite.d.ts +6 -0
  38. package/dist/run-suite.d.ts.map +1 -1
  39. package/dist/run-suite.js +193 -61
  40. package/dist/run-suite.js.map +1 -1
  41. package/dist/theme.d.ts +9 -1
  42. package/dist/theme.d.ts.map +1 -1
  43. package/dist/theme.js +30 -6
  44. package/dist/theme.js.map +1 -1
  45. package/dist/types.d.ts +30 -2
  46. package/dist/types.d.ts.map +1 -1
  47. package/package.json +2 -2
package/README.md CHANGED
@@ -41,6 +41,7 @@ See repo-root `.env.example`. Common knobs:
41
41
  | Variable | Purpose |
42
42
  | ------------------------------------------- | ------------------------------------------------ |
43
43
  | `CURSOR_API_KEY` | Required for `--live` and judge classifiers |
44
+ | `AGENT_TEST_DEBUG` | Same as `--debug` when `1`/`true` |
44
45
  | `AGENT_TEST_VERBOSE` | Extra tips (e.g. OOM isolation) when `1` |
45
46
  | `AGENT_TEST_VERBOSE_PATHS` | Print full paths when `1` |
46
47
  | `AGENT_TEST_QUIET` | Suppress progress when `1` |
@@ -52,6 +53,37 @@ See repo-root `.env.example`. Common knobs:
52
53
  | `CURSOR_AGENT_MODEL` / `CURSOR_JUDGE_MODEL` | Optional model overrides |
53
54
  | `CURSOR_JUDGE_TEMPERATURE` | Optional judge temperature |
54
55
 
56
+ ## Debug mode
57
+
58
+ ```bash
59
+ npx agent-test --suites-dir agent-suites --suite smoke --debug
60
+ npx agent-test --suites-dir agent-suites --live --debug --debug-dir ./agent-test-debug
61
+ ```
62
+
63
+ `--debug` (or `AGENT_TEST_DEBUG=1`) implies `--keep-recordings`, verbose failure detail, and full paths. Failed scenarios write a bundle under the session root:
64
+
65
+ ```
66
+ sessions/<id>/<suite>/<scenario>.debug/
67
+ transcript.md
68
+ trace.json
69
+ failures.json # includes category + evidence
70
+ judge-debug.json # when judge criteria ran (SDK status/error, sizes, attempt)
71
+ environment.json # versions/models/timeout/isolation; CURSOR_API_KEY only as boolean
72
+ rerun.sh # shell-quoted exact re-run command (export CURSOR_API_KEY yourself)
73
+ ```
74
+
75
+ `--debug-dir <path>` replaces `$TMPDIR/agent-spec` as the sessions parent (`<path>/sessions/<id>/…`).
76
+
77
+ Failure categories printed on FAIL lines and in `failures.json`:
78
+
79
+ | Category | Meaning |
80
+ | --- | --- |
81
+ | `rubric_miss` | Assertion/judge criterion miss |
82
+ | `judge_infra` | Judge SDK/API failure (not a criterion miss) |
83
+ | `agent_runtime` | Agent session error, timeout, AskQuestion, subprocess exit |
84
+ | `worktree_leak` | Live agent mutated the caller working tree |
85
+ | `recording_error` | Failed to persist a staging/fixture trace |
86
+
55
87
  ## Live dogfood
56
88
 
57
89
  Live runs need `CURSOR_API_KEY` and a suites directory that exists. Preflight fails when the resolved suites directory is missing (default `agent-suites/` if `--suites-dir` is omitted).
@@ -70,6 +102,46 @@ Skills that expect multi-turn Socratic dialogue (for example `crystallize`) will
70
102
 
71
103
  Do not weaken dialogue-first product skills for CI; reshape the suite contract instead.
72
104
 
105
+ ## MCP servers
106
+
107
+ Live Cursor runs can attach **inline** MCP servers from suite/scenario JSON. Ambient project/user MCP (`.cursor/mcp.json`) is not loaded — tests stay hermetic.
108
+
109
+ ```json
110
+ {
111
+ "defaults": {
112
+ "mcpServers": {
113
+ "docs": {
114
+ "type": "http",
115
+ "url": "https://example.com/mcp",
116
+ "headers": { "Authorization": "Bearer ${DOCS_TOKEN}" }
117
+ }
118
+ }
119
+ },
120
+ "scenarios": [
121
+ {
122
+ "name": "use echo",
123
+ "prompt": "Call the echo tool with text hello.",
124
+ "mcpServers": {
125
+ "echo": {
126
+ "type": "stdio",
127
+ "command": "node",
128
+ "args": ["packages/test/fixtures/mcp-echo/server.mjs"]
129
+ }
130
+ },
131
+ "rubric": {
132
+ "mustCallTool": ["echo:hello"],
133
+ "mustNotCallTool": ["shell"]
134
+ }
135
+ }
136
+ ]
137
+ }
138
+ ```
139
+
140
+ - Suite `defaults.mcpServers` merge with scenario `mcpServers` by server name (scenario wins).
141
+ - `${ENV_VAR}` placeholders expand in `command`, `args`, `env`, `url`, `headers`, and OAuth fields at run time.
142
+ - Rubric `mustCallTool` / `mustNotCallTool` match tool **name** substrings (works with MCP name prefixes). Use `name:argFragment` to also require a substring in JSON args.
143
+ - Replay hosts ignore `mcpServers` but still score recorded `toolCalls` against those matchers.
144
+
73
145
  ## Library
74
146
 
75
147
  ```ts
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,26 @@
1
1
  #!/usr/bin/env -S node --disable-warning=ExperimentalWarning
2
- export {};
2
+ import { type AgentHost } from "@post-print/agent-harness";
3
+ export interface ParsedCliArgs {
4
+ cwd: string;
5
+ suitesDir: string;
6
+ host?: AgentHost;
7
+ filter?: string;
8
+ scenarioFilter?: string;
9
+ stagingSessionId?: string;
10
+ record: boolean;
11
+ recordFixtures: boolean;
12
+ live: boolean;
13
+ judge?: boolean;
14
+ worktree?: boolean;
15
+ keepRecordings: boolean;
16
+ timeoutMs?: number;
17
+ noTimeout: boolean;
18
+ allowUserInput: boolean;
19
+ doctor: boolean;
20
+ htmlReport: boolean;
21
+ debug: boolean;
22
+ debugDir?: string;
23
+ }
24
+ /** Parse agent-test CLI argv (exported for unit tests). */
25
+ export declare function parseCliArgs(argv: string[]): ParsedCliArgs;
3
26
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,KAAK,SAAS,EAAiC,MAAM,2BAA2B,CAAC;AAqB1F,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CA8G1D"}
package/dist/cli.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env -S node --disable-warning=ExperimentalWarning
2
+ import { resolve } from "node:path";
2
3
  import { fileURLToPath } from "node:url";
3
4
  import { cleanupStaleScenarioWorktrees } from "@post-print/agent-harness";
4
5
  import { isCliMain } from "./cli-entry.js";
@@ -6,13 +7,14 @@ import { runDoctor } from "./doctor.js";
6
7
  import { writeHtmlReport } from "./html-report.js";
7
8
  import { assertLiveDogfoodPreflight } from "./preflight.js";
8
9
  import { logProgress } from "./progress.js";
9
- import { cleanupLegacyRepoRecordings, cleanupStagingSession, createLiveStagingSessionId, getLiveStagingSessionRoot, } from "./record-trace.js";
10
+ import { cleanupLegacyRepoRecordings, cleanupStagingSession, createLiveStagingSessionId, getLiveStagingSessionRoot, setLiveStagingRootOverride, } from "./record-trace.js";
10
11
  import { registerLiveRunHandlers, runAllSuites } from "./run-suite.js";
11
12
  import { configureCliColor, theme } from "./theme.js";
12
13
  import { suppressNoisyRuntimeWarnings } from "./warnings.js";
13
14
  suppressNoisyRuntimeWarnings();
14
15
  configureCliColor();
15
- function parseArgs(argv) {
16
+ /** Parse agent-test CLI argv (exported for unit tests). */
17
+ export function parseCliArgs(argv) {
16
18
  const cwd = process.cwd();
17
19
  let suitesDir = "agent-suites";
18
20
  let host;
@@ -30,6 +32,8 @@ function parseArgs(argv) {
30
32
  let allowUserInput = false;
31
33
  let doctor = false;
32
34
  let htmlReport = true;
35
+ let debug = process.env.AGENT_TEST_DEBUG === "1" || process.env.AGENT_TEST_DEBUG === "true";
36
+ let debugDir;
33
37
  for (let i = 2; i < argv.length; i++) {
34
38
  const token = argv[i];
35
39
  if (token === "--host" && argv[i + 1]) {
@@ -87,6 +91,17 @@ function parseArgs(argv) {
87
91
  else if (token === "--no-html-report") {
88
92
  htmlReport = false;
89
93
  }
94
+ else if (token === "--debug") {
95
+ debug = true;
96
+ }
97
+ else if (token === "--debug-dir") {
98
+ const value = argv[++i];
99
+ if (!value || value.startsWith("-")) {
100
+ throw new Error("--debug-dir requires a non-empty path argument");
101
+ }
102
+ debugDir = value;
103
+ debug = true;
104
+ }
90
105
  else if (token && !token.startsWith("-")) {
91
106
  filter = token;
92
107
  }
@@ -97,6 +112,12 @@ function parseArgs(argv) {
97
112
  judge = judge ?? true;
98
113
  worktree = worktree ?? true;
99
114
  }
115
+ if (debug) {
116
+ keepRecordings = true;
117
+ process.env.AGENT_TEST_DEBUG = "1";
118
+ process.env.AGENT_TEST_VERBOSE = process.env.AGENT_TEST_VERBOSE ?? "1";
119
+ process.env.AGENT_TEST_VERBOSE_PATHS = process.env.AGENT_TEST_VERBOSE_PATHS ?? "1";
120
+ }
100
121
  return {
101
122
  cwd,
102
123
  suitesDir,
@@ -115,6 +136,8 @@ function parseArgs(argv) {
115
136
  allowUserInput,
116
137
  doctor,
117
138
  htmlReport,
139
+ debug,
140
+ debugDir: debugDir ? resolve(cwd, debugDir) : undefined,
118
141
  };
119
142
  }
120
143
  async function cleanupLiveRunArtifacts(cwd, stagingSessionRoot, keepRecordings) {
@@ -135,7 +158,14 @@ async function cleanupLiveRunArtifacts(cwd, stagingSessionRoot, keepRecordings)
135
158
  }
136
159
  }
137
160
  async function main() {
138
- const args = parseArgs(process.argv);
161
+ let args;
162
+ try {
163
+ args = parseCliArgs(process.argv);
164
+ }
165
+ catch (error) {
166
+ console.error(error instanceof Error ? error.message : error);
167
+ return 1;
168
+ }
139
169
  if (args.doctor) {
140
170
  const report = runDoctor();
141
171
  for (const message of report.messages) {
@@ -143,11 +173,16 @@ async function main() {
143
173
  }
144
174
  return report.ok ? 0 : 1;
145
175
  }
176
+ if (args.debugDir) {
177
+ setLiveStagingRootOverride(args.debugDir);
178
+ }
146
179
  const isChild = process.env.AGENT_TEST_CHILD === "1";
147
- const verbose = process.env.AGENT_TEST_VERBOSE === "1";
180
+ const verbose = args.debug || process.env.AGENT_TEST_VERBOSE === "1" || process.env.AGENT_TEST_DEBUG === "1";
148
181
  const stagingSessionId = args.stagingSessionId?.trim() ||
149
182
  process.env.AGENT_TEST_STAGING_SESSION_ID?.trim() ||
150
- (args.live || (args.record && !args.recordFixtures) ? createLiveStagingSessionId() : undefined);
183
+ (args.live || args.debug || (args.record && !args.recordFixtures)
184
+ ? createLiveStagingSessionId()
185
+ : undefined);
151
186
  const stagingSessionRoot = stagingSessionId
152
187
  ? getLiveStagingSessionRoot(stagingSessionId)
153
188
  : undefined;
@@ -178,17 +213,20 @@ async function main() {
178
213
  if (removed.length > 0) {
179
214
  console.log(theme.warn(`Cleaned ${removed.length} stale agent-test worktree(s) from a prior crash`));
180
215
  }
181
- console.log(theme.banner("live"));
216
+ console.log(theme.banner(args.debug ? "live debug" : "live"));
182
217
  if (stagingSessionRoot) {
183
218
  console.log(theme.bannerSession(stagingSessionRoot));
184
219
  }
185
220
  if (worktreeDisabled) {
186
221
  console.warn(theme.warn("running in repo cwd — agent file edits will persist in your working tree"));
187
222
  }
188
- if (process.env.AGENT_TEST_VERBOSE === "1") {
223
+ if (args.debug || process.env.AGENT_TEST_VERBOSE === "1") {
189
224
  if (!args.keepRecordings) {
190
225
  console.log(` ${theme.tip("traces removed on exit unless --keep-recordings")}`);
191
226
  }
227
+ else {
228
+ console.log(` ${theme.tip("debug: recordings kept")}`);
229
+ }
192
230
  console.log(` ${theme.tip("exit 137 = macOS OOM — isolated subprocesses (AGENT_TEST_NO_ISOLATE=1 to disable)")}`);
193
231
  }
194
232
  else if (!args.keepRecordings) {
@@ -196,11 +234,17 @@ async function main() {
196
234
  }
197
235
  }
198
236
  }
237
+ else if (args.debug && !isChild && stagingSessionRoot) {
238
+ console.log(theme.banner("debug"));
239
+ console.log(theme.bannerSession(stagingSessionRoot));
240
+ }
199
241
  const reports = await runAllSuites({
200
242
  ...args,
201
243
  stagingSessionId,
202
244
  timeoutMs: args.timeoutMs,
203
245
  allowUserInput: args.allowUserInput,
246
+ debug: args.debug,
247
+ debugDir: args.debugDir,
204
248
  });
205
249
  let exitCode = 0;
206
250
  if (!isChild) {
@@ -213,13 +257,19 @@ async function main() {
213
257
  console.log(theme.failedScenarioName(result.scenario));
214
258
  if (verbose) {
215
259
  for (const failure of result.failures) {
216
- console.log(theme.verboseFailure(failure.matcher, failure.message));
260
+ console.log(theme.verboseFailure(failure.matcher, failure.message, failure.evidence, failure.category));
217
261
  }
218
262
  }
263
+ if (args.debug && result.debugBundleDir) {
264
+ console.log(` ${theme.tip(result.debugBundleDir)}`);
265
+ }
219
266
  }
220
267
  }
221
268
  console.log(theme.summary(report.suite, report.passed, report.failed, report.skipped));
222
269
  }
270
+ if (args.debug && stagingSessionRoot) {
271
+ console.log(`\n${theme.tip(`debug session: ${stagingSessionRoot}`)}`);
272
+ }
223
273
  if (args.htmlReport && reports.length > 0) {
224
274
  try {
225
275
  const reportPath = await writeHtmlReport(reports, {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { AgentTrace } from "@post-print/agent-harness";
2
+ import type { AgentScenario, AssertionFailure, JudgeVerdictResult, ScenarioResult } from "./types.js";
3
+ export interface DebugRerunOptions {
4
+ cliPath: string;
5
+ cwd: string;
6
+ suitesDir: string;
7
+ suite: string;
8
+ scenario: string;
9
+ live: boolean;
10
+ host?: string;
11
+ judge?: boolean;
12
+ worktree?: boolean;
13
+ timeoutMs?: number;
14
+ noTimeout?: boolean;
15
+ allowUserInput?: boolean;
16
+ debugDir?: string;
17
+ keepRecordings?: boolean;
18
+ }
19
+ export interface DebugEnvironmentSnapshot {
20
+ nodeVersion: string;
21
+ bunVersion?: string;
22
+ packageVersion: string;
23
+ host?: string;
24
+ suite: string;
25
+ scenario: string;
26
+ cursorApiKeySet: boolean;
27
+ cursorAgentModel?: string;
28
+ cursorJudgeModel?: string;
29
+ cursorJudgeTemperature?: string;
30
+ timeoutMs?: number;
31
+ worktree?: boolean;
32
+ isolateLive?: boolean;
33
+ agentTestEnv: Record<string, string | undefined>;
34
+ }
35
+ export interface WriteDebugBundleOptions {
36
+ dir: string;
37
+ result: ScenarioResult;
38
+ trace?: AgentTrace;
39
+ scenario: AgentScenario;
40
+ environment: DebugEnvironmentSnapshot;
41
+ rerun: DebugRerunOptions;
42
+ }
43
+ /** Shell-quote a single argument for POSIX sh. */
44
+ export declare function shellQuote(value: string): string;
45
+ /** Flatten text for a single `# …` shell comment (no newline breakout). */
46
+ export declare function shellCommentText(value: string): string;
47
+ export declare function buildRerunCommand(options: DebugRerunOptions): string;
48
+ export declare function collectDebugEnvironment(options: {
49
+ suite: string;
50
+ scenario: string;
51
+ packageVersion: string;
52
+ host?: string;
53
+ timeoutMs?: number;
54
+ worktree?: boolean;
55
+ isolateLive?: boolean;
56
+ }): DebugEnvironmentSnapshot;
57
+ export declare function formatTranscriptMarkdown(options: {
58
+ scenario: AgentScenario;
59
+ trace?: AgentTrace;
60
+ failures: AssertionFailure[];
61
+ judgeVerdicts?: JudgeVerdictResult[];
62
+ }): string;
63
+ export declare function getDebugBundleDir(stagingSessionId: string, suiteName: string, scenarioName: string, getSessionRoot: (sessionId: string) => string): string;
64
+ /** Persist a failed-scenario debug bundle (trace, failures, transcript, judge, env, rerun). */
65
+ export declare function writeDebugBundle(options: WriteDebugBundleOptions): Promise<string>;
66
+ //# sourceMappingURL=debug-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-bundle.d.ts","sourceRoot":"","sources":["../src/debug-bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ import { access, chmod, mkdir, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { scenarioArtifactSlug } from "./record-trace.js";
4
+ const AGENT_TEST_ENV_KEYS = [
5
+ "AGENT_TEST_VERBOSE",
6
+ "AGENT_TEST_VERBOSE_PATHS",
7
+ "AGENT_TEST_QUIET",
8
+ "AGENT_TEST_TIMEOUT_MS",
9
+ "AGENT_TEST_ALLOW_IN_PLACE",
10
+ "AGENT_TEST_NO_WORKTREE",
11
+ "AGENT_TEST_NO_ISOLATE",
12
+ "AGENT_TEST_SCENARIO_SETTLE_MS",
13
+ "AGENT_TEST_DEBUG",
14
+ "AGENT_TEST_CHILD",
15
+ ];
16
+ /** Shell-quote a single argument for POSIX sh. */
17
+ export function shellQuote(value) {
18
+ if (value.length === 0) {
19
+ return "''";
20
+ }
21
+ if (/^[A-Za-z0-9_./:@%+=,-]+$/.test(value)) {
22
+ return value;
23
+ }
24
+ return `'${value.replace(/'/g, `'\\''`)}'`;
25
+ }
26
+ /** Flatten text for a single `# …` shell comment (no newline breakout). */
27
+ export function shellCommentText(value) {
28
+ return value.replace(/[\r\n]+/g, " ").trim();
29
+ }
30
+ export function buildRerunCommand(options) {
31
+ const args = [options.cliPath];
32
+ if (options.live) {
33
+ args.push("--live");
34
+ }
35
+ args.push("--suites-dir", options.suitesDir, "--suite", options.suite, "--scenario", options.scenario);
36
+ if (options.host) {
37
+ args.push("--host", options.host);
38
+ }
39
+ if (options.judge === false) {
40
+ args.push("--no-judge");
41
+ }
42
+ else if (options.judge === true && !options.live) {
43
+ args.push("--judge");
44
+ }
45
+ if (options.worktree === false) {
46
+ args.push("--no-worktree");
47
+ }
48
+ if (options.noTimeout) {
49
+ args.push("--no-timeout");
50
+ }
51
+ else if (options.timeoutMs !== undefined) {
52
+ args.push("--timeout-ms", String(options.timeoutMs));
53
+ }
54
+ if (options.allowUserInput) {
55
+ args.push("--allow-user-input");
56
+ }
57
+ args.push("--debug");
58
+ if (options.debugDir) {
59
+ args.push("--debug-dir", options.debugDir);
60
+ }
61
+ if (options.keepRecordings !== false) {
62
+ args.push("--keep-recordings");
63
+ }
64
+ return [shellQuote(process.execPath), ...args.map(shellQuote)].join(" ");
65
+ }
66
+ export function collectDebugEnvironment(options) {
67
+ const agentTestEnv = {};
68
+ for (const key of AGENT_TEST_ENV_KEYS) {
69
+ const value = process.env[key];
70
+ if (value !== undefined) {
71
+ agentTestEnv[key] = value;
72
+ }
73
+ }
74
+ return {
75
+ nodeVersion: process.versions.node,
76
+ bunVersion: process.versions.bun,
77
+ packageVersion: options.packageVersion,
78
+ host: options.host,
79
+ suite: options.suite,
80
+ scenario: options.scenario,
81
+ cursorApiKeySet: Boolean(process.env.CURSOR_API_KEY?.trim()),
82
+ cursorAgentModel: process.env.CURSOR_AGENT_MODEL,
83
+ cursorJudgeModel: process.env.CURSOR_JUDGE_MODEL,
84
+ cursorJudgeTemperature: process.env.CURSOR_JUDGE_TEMPERATURE,
85
+ timeoutMs: options.timeoutMs,
86
+ worktree: options.worktree,
87
+ isolateLive: options.isolateLive,
88
+ agentTestEnv,
89
+ };
90
+ }
91
+ function compactToolArgs(input) {
92
+ if (input === undefined) {
93
+ return "";
94
+ }
95
+ const raw = typeof input === "string" ? input : JSON.stringify(input);
96
+ if (raw.length <= 160) {
97
+ return raw;
98
+ }
99
+ return `${raw.slice(0, 160)}…`;
100
+ }
101
+ export function formatTranscriptMarkdown(options) {
102
+ const lines = [
103
+ `# ${options.scenario.name}`,
104
+ "",
105
+ "## Prompt",
106
+ "",
107
+ "```",
108
+ options.scenario.prompt,
109
+ "```",
110
+ "",
111
+ "## Transcript",
112
+ "",
113
+ ];
114
+ const trace = options.trace;
115
+ if (!trace) {
116
+ lines.push("_No trace available._", "");
117
+ }
118
+ else {
119
+ if (trace.routing) {
120
+ lines.push("### Routing", "", "```json", JSON.stringify(trace.routing, null, 2), "```", "");
121
+ }
122
+ const events = [
123
+ ...trace.messages.map((message, index) => ({
124
+ kind: "message",
125
+ seq: message.seq ?? index,
126
+ message,
127
+ })),
128
+ ...trace.toolCalls.map((tool, index) => ({
129
+ kind: "tool",
130
+ seq: tool.seq ?? 10_000 + index,
131
+ tool,
132
+ })),
133
+ ].sort((a, b) => a.seq - b.seq);
134
+ for (const event of events) {
135
+ if (event.kind === "message") {
136
+ lines.push(`### ${event.message.role}`, "", event.message.content, "");
137
+ }
138
+ else {
139
+ lines.push(`### tool: ${event.tool.name}`, "", "```", compactToolArgs(event.tool.args), "```", "");
140
+ }
141
+ }
142
+ if (trace.shellCommands.length > 0) {
143
+ lines.push("### Shell commands", "");
144
+ for (const cmd of trace.shellCommands) {
145
+ lines.push(`- \`${cmd}\``);
146
+ }
147
+ lines.push("");
148
+ }
149
+ }
150
+ if (options.judgeVerdicts?.length) {
151
+ lines.push("## Judge", "");
152
+ for (const verdict of options.judgeVerdicts) {
153
+ const mark = verdict.pass ? "PASS" : "FAIL";
154
+ lines.push(`### ${mark} \`${verdict.id}\``, "", verdict.question, "", verdict.rationale, "");
155
+ if (verdict.infraError) {
156
+ lines.push(`**infraError:** ${verdict.infraError}`, "");
157
+ }
158
+ }
159
+ }
160
+ if (options.failures.length > 0) {
161
+ lines.push("## Failures", "");
162
+ for (const failure of options.failures) {
163
+ lines.push(`- **${failure.category}** \`${failure.matcher}\`: ${failure.message}`);
164
+ if (failure.evidence) {
165
+ lines.push(` - evidence: ${failure.evidence}`);
166
+ }
167
+ }
168
+ lines.push("");
169
+ }
170
+ return `${lines.join("\n")}\n`;
171
+ }
172
+ export function getDebugBundleDir(stagingSessionId, suiteName, scenarioName, getSessionRoot) {
173
+ return join(getSessionRoot(stagingSessionId), suiteName, `${scenarioArtifactSlug(scenarioName)}.debug`);
174
+ }
175
+ /** Persist a failed-scenario debug bundle (trace, failures, transcript, judge, env, rerun). */
176
+ export async function writeDebugBundle(options) {
177
+ const { dir, result, trace, scenario, environment, rerun } = options;
178
+ await mkdir(dir, { recursive: true });
179
+ const failuresPath = join(dir, "failures.json");
180
+ const transcriptPath = join(dir, "transcript.md");
181
+ const environmentPath = join(dir, "environment.json");
182
+ const rerunPath = join(dir, "rerun.sh");
183
+ await writeFile(failuresPath, `${JSON.stringify(result.failures, null, 2)}\n`, "utf8");
184
+ await writeFile(environmentPath, `${JSON.stringify(environment, null, 2)}\n`, "utf8");
185
+ if (trace) {
186
+ await writeFile(transcriptPath, formatTranscriptMarkdown({
187
+ scenario,
188
+ trace,
189
+ failures: result.failures,
190
+ judgeVerdicts: result.judgeVerdicts,
191
+ }), "utf8");
192
+ const payload = {
193
+ messages: trace.messages,
194
+ toolCalls: trace.toolCalls,
195
+ shellCommands: trace.shellCommands,
196
+ gitDiff: trace.gitDiff,
197
+ prBody: trace.prBody,
198
+ artifacts: trace.artifacts,
199
+ routing: trace.routing,
200
+ skillsInvoked: trace.skillsInvoked,
201
+ assistantTextBeforeTools: trace.assistantTextBeforeTools,
202
+ judgeVerdicts: trace.judgeVerdicts,
203
+ };
204
+ await writeFile(join(dir, "trace.json"), `${JSON.stringify(payload, null, 2)}\n`, "utf8");
205
+ }
206
+ else {
207
+ // Parent rewrite after a failed staging load must not clobber a richer child bundle.
208
+ let transcriptExists = false;
209
+ try {
210
+ await access(transcriptPath);
211
+ transcriptExists = true;
212
+ }
213
+ catch {
214
+ transcriptExists = false;
215
+ }
216
+ if (!transcriptExists) {
217
+ await writeFile(transcriptPath, formatTranscriptMarkdown({
218
+ scenario,
219
+ trace,
220
+ failures: result.failures,
221
+ judgeVerdicts: result.judgeVerdicts,
222
+ }), "utf8");
223
+ }
224
+ }
225
+ if (result.judgeVerdicts?.length) {
226
+ await writeFile(join(dir, "judge-debug.json"), `${JSON.stringify(result.judgeVerdicts, null, 2)}\n`, "utf8");
227
+ }
228
+ const rerunBody = [
229
+ "#!/usr/bin/env bash",
230
+ "set -euo pipefail",
231
+ `# Re-run failed scenario ${shellCommentText(scenario.name)}`,
232
+ `# Requires CURSOR_API_KEY in the environment for --live.`,
233
+ `cd ${shellQuote(rerun.cwd)}`,
234
+ buildRerunCommand(rerun),
235
+ "",
236
+ ].join("\n");
237
+ await writeFile(rerunPath, rerunBody, "utf8");
238
+ await chmod(rerunPath, 0o755);
239
+ return dir;
240
+ }
241
+ //# sourceMappingURL=debug-bundle.js.map