@mongodb-js/harness-tester 3.1.1-pre.1 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -88,7 +88,7 @@ if (turn.state === "elicitation") {
88
88
  | `GROVE_API_KEY` | Provider key for the grove gateway (required). |
89
89
  | `AGENT_E2E_MODEL` | Shared model override (overridden by the per-harness vars). |
90
90
  | `AGENT_E2E_CODEX_MODEL` | Codex model override (default: host config model, else `gpt-6-luna`). |
91
- | `AGENT_E2E_CLAUDE_MODEL` | Claude model override (default: `claude-haiku-5-5`). |
91
+ | `AGENT_E2E_CLAUDE_MODEL` | Claude model override (default: `claude-haiku-4-5`). |
92
92
  | `AGENT_E2E_CODEX_BIN` | Codex binary path (default: `codex`). |
93
93
  | `AGENT_E2E_CLAUDE_BIN` | Claude binary path (default: `claude`). |
94
94
  | `AGENT_E2E_TUI_BACKEND` | tui-test backend: `alacritty` (default), `ghostty`, `rio`. |
@@ -1 +1 @@
1
- {"version":3,"file":"claudeConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK3E,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAKjD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAIvE;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBnF;AAED,uGAAuG;AACvG,qBAAa,mBAAoB,YAAW,kBAAkB;IAC1D,QAAQ,CAAC,aAAa,uBAAuB;IAC7C,QAAQ,CAAC,cAAc,qBAAqB;IAE5C,sEAAsE;IACtE,cAAc,IAAI,MAAM;IAIxB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM;CAgBpD;AAWD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,OAAO,EACP,OAAO,GACV,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAChC,GAAG,IAAI,CA6BP;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,aAAuB,GAC1B,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAsBP"}
1
+ {"version":3,"file":"claudeConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAS3E,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAKjD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAIvE;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBnF;AAED,uGAAuG;AACvG,qBAAa,mBAAoB,YAAW,kBAAkB;IAC1D,QAAQ,CAAC,aAAa,uBAAuB;IAC7C,QAAQ,CAAC,cAAc,qBAAqB;IAE5C,sEAAsE;IACtE,cAAc,IAAI,MAAM;IAIxB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM;CAgBpD;AAWD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,OAAO,EACP,OAAO,GACV,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAChC,GAAG,IAAI,CA6BP;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,aAAuB,GAC1B,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CA4BP"}
@@ -2,8 +2,12 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { canonicalPath, oauthCredentialStoreKey } from "../shared.js";
5
- /** Default model: grove serves the undated id; `haiku` resolves to a dated id it lacks. */
6
- const DEFAULT_CLAUDE_MODEL = "claude-haiku-5-5";
5
+ /**
6
+ * Default model: grove serves undated ids, while `haiku` resolves to a dated id it
7
+ * lacks. `claude-haiku-5-5` is catalog-only (no deployment), so pin the latest haiku
8
+ * grove actually deploys.
9
+ */
10
+ const DEFAULT_CLAUDE_MODEL = "claude-haiku-4-5";
7
11
  /** Minimum reasoning effort for e2e runs (mirrors the codex harness's `"low"`). */
8
12
  export const DEFAULT_CLAUDE_EFFORT_LEVEL = "low";
9
13
  /** Grove gateway Anthropic endpoint (no trailing /v1; claude appends it). */
@@ -119,6 +123,12 @@ export function seedClaudeHome({ homeDir, workDir, mcpServerName = "mongo", }) {
119
123
  hasCompletedOnboarding: true,
120
124
  shiftEnterKeyBindingInstalled: true,
121
125
  theme: "dark",
126
+ // Suppress Claude Code's auto-mode onboarding. It interposes a blocking
127
+ // "Make auto mode your default permission mode?" dialog (and related
128
+ // notices) that stalls the TUI before the composer is ready.
129
+ hasSeenAutoDefaultNudge: true,
130
+ hasSeenAutoModeEntryWarning: true,
131
+ hasSeenAutoDefaultNotice: true,
122
132
  // Mark the test workdir trusted so the trust gate never shows.
123
133
  projects: {
124
134
  [canonical]: { hasTrustDialogAccepted: true, allowedTools: [] },
@@ -1 +1 @@
1
- {"version":3,"file":"claudeConfig.js","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claudeConfig.js","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,17 @@
1
1
  import type { AgentHarnessConfig, AgentHarnessOptions } from "../types.js";
2
+ /**
3
+ * Abort a model response stream after this long without a chunk, then retry.
4
+ * Codex's default is 5 minutes, which outlives a test's turn budget.
5
+ */
6
+ export declare const STREAM_IDLE_TIMEOUT_MS = 30000;
2
7
  /** {@link AgentHarnessConfig} for codex (OpenAI CLI agent). */
3
8
  export declare class CodexHarnessConfig implements AgentHarnessConfig {
4
9
  readonly homeDirEnvVar = "CODEX_HOME";
5
10
  readonly configFileName = "config.toml";
11
+ private readonly binaryPath;
12
+ constructor({ binaryPath }?: {
13
+ binaryPath?: string;
14
+ });
6
15
  /** Directory codex uses for its config/auth/caches (`CODEX_HOME` or ~/.codex). */
7
16
  getHostHomeDir(): string;
8
17
  /** Path to the user's real codex config (outside the hermetic session). */
@@ -30,6 +39,22 @@ export declare class CodexHarnessConfig implements AgentHarnessConfig {
30
39
  /** Whitelist the session to MCP tools only: disable shell + web-search. */
31
40
  private buildSandboxToml;
32
41
  private buildMcpServerToml;
42
+ /**
43
+ * Render codex's built-in model catalog (`codex debug models`) into the
44
+ * session home. Used on machines without a cached catalog (CI): without a
45
+ * catalog codex applies its built-in 10k-token tool truncation, which drops
46
+ * the server's larger tool definitions.
47
+ */
48
+ private renderBuiltinCatalog;
49
+ /**
50
+ * Catalog to copy into the hermetic home with the active model's truncation
51
+ * limit lifted: the host's catalog when it lists the active model, else
52
+ * codex's built-in one. The host cache can be stale and lack newer models,
53
+ * in which case codex falls back to its 10k-token tool truncation.
54
+ */
55
+ private resolveModelCatalogPath;
56
+ /** Whether a model catalog file lists the given model slug. */
57
+ private catalogHasModel;
33
58
  buildConfig(options: AgentHarnessOptions, sessionHomeDir: string): string;
34
59
  }
35
60
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"codexConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAiB3E,+DAA+D;AAC/D,qBAAa,kBAAmB,YAAW,kBAAkB;IACzD,QAAQ,CAAC,aAAa,gBAAgB;IACtC,QAAQ,CAAC,cAAc,iBAAiB;IAExC,kFAAkF;IAClF,cAAc,IAAI,MAAM;IAIxB,2EAA2E;IAC3E,iBAAiB,IAAI,MAAM;IAI3B,+FAA+F;IAC/F,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUrD;;;OAGG;IACH,2BAA2B,IAAI,MAAM,GAAG,SAAS;IAUjD,kGAAkG;IAClG,OAAO,CAAC,iBAAiB;IAYzB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IA6BvC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAIhC,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IA4B1B,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;CAgD5E;AAWD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,EACtC,OAAO,EACP,OAAO,GACV,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAChC,GAAG,IAAI,CAwBP"}
1
+ {"version":3,"file":"codexConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAY3E;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAO7C,+DAA+D;AAC/D,qBAAa,kBAAmB,YAAW,kBAAkB;IACzD,QAAQ,CAAC,aAAa,gBAAgB;IACtC,QAAQ,CAAC,cAAc,iBAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,EAAE,UAAuD,EAAE,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAIrG,kFAAkF;IAClF,cAAc,IAAI,MAAM;IAIxB,2EAA2E;IAC3E,iBAAiB,IAAI,MAAM;IAI3B,+FAA+F;IAC/F,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUrD;;;OAGG;IACH,2BAA2B,IAAI,MAAM,GAAG,SAAS;IAUjD,kGAAkG;IAClG,OAAO,CAAC,iBAAiB;IAgBzB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IA6BvC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAIhC,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IAwC1B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAgB/B,+DAA+D;IAC/D,OAAO,CAAC,eAAe;IASvB,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;CA2C5E;AAWD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,EACtC,OAAO,EACP,OAAO,GACV,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAChC,GAAG,IAAI,CAwBP"}
@@ -1,3 +1,4 @@
1
+ import { execFileSync } from "node:child_process";
1
2
  import fs, { existsSync } from "node:fs";
2
3
  import os from "node:os";
3
4
  import path from "node:path";
@@ -10,15 +11,21 @@ import { canonicalPath, oauthCredentialStoreKey } from "../shared.js";
10
11
  const DEFAULT_CODEX_MODEL = "gpt-6-luna";
11
12
  /** Reasoning effort applied to the harness session's model. */
12
13
  const DEFAULT_CODEX_REASONING_EFFORT = "low";
14
+ /**
15
+ * Abort a model response stream after this long without a chunk, then retry.
16
+ * Codex's default is 5 minutes, which outlives a test's turn budget.
17
+ */
18
+ export const STREAM_IDLE_TIMEOUT_MS = 30000;
13
19
  function tomlString(value) {
14
20
  // TOML basic strings: escape backslash + double quote.
15
21
  return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
16
22
  }
17
23
  /** {@link AgentHarnessConfig} for codex (OpenAI CLI agent). */
18
24
  export class CodexHarnessConfig {
19
- constructor() {
25
+ constructor({ binaryPath = process.env.AGENT_E2E_CODEX_BIN ?? "codex" } = {}) {
20
26
  this.homeDirEnvVar = "CODEX_HOME";
21
27
  this.configFileName = "config.toml";
28
+ this.binaryPath = binaryPath;
22
29
  }
23
30
  /** Directory codex uses for its config/auth/caches (`CODEX_HOME` or ~/.codex). */
24
31
  getHostHomeDir() {
@@ -62,6 +69,10 @@ export class CodexHarnessConfig {
62
69
  `env_key_instructions = "Set GROVE_API_KEY in your environment"`,
63
70
  `supports_websockets = false`,
64
71
  `env_http_headers = { "api-key" = "GROVE_API_KEY" }`,
72
+ // The default 5-minute idle timeout is longer than a test's turn budget, so a
73
+ // stalled response stream (seen behind CI's proxy) looks like a hang. Abort and
74
+ // retry much sooner so a transient stall recovers within the harness timeout.
75
+ `stream_idle_timeout_ms = ${STREAM_IDLE_TIMEOUT_MS}`,
65
76
  ].join("\n");
66
77
  }
67
78
  /**
@@ -102,6 +113,14 @@ export class CodexHarnessConfig {
102
113
  buildMcpServerToml(options, mcpServerName) {
103
114
  // Codex's 10s default MCP startup timeout is too short for this server.
104
115
  const startupTimeout = "startup_timeout_sec = 60";
116
+ // Auto-approve MCP tool calls: codex otherwise interposes a blocking
117
+ // tool-approval prompt the harness cannot answer. The server's own
118
+ // elicitation (confirmation-required tools) is still surfaced.
119
+ const toolsApprovalMode = 'default_tools_approval_mode = "approve"';
120
+ // Wait for the tool catalog before accepting a prompt: otherwise codex
121
+ // shows an idle composer while the MCP servers boot, and a prompt sent
122
+ // in that window runs without the server's tools.
123
+ const startupReadiness = 'startup_readiness = "catalog"';
105
124
  if (options.stdioServer) {
106
125
  const { command, args, env } = options.stdioServer;
107
126
  const envLines = Object.entries(env).map(([k, v]) => `${k} = ${tomlString(v)}`);
@@ -110,6 +129,8 @@ export class CodexHarnessConfig {
110
129
  `command = ${tomlString(command)}`,
111
130
  `args = [${args.map((a) => tomlString(a)).join(", ")}]`,
112
131
  startupTimeout,
132
+ toolsApprovalMode,
133
+ startupReadiness,
113
134
  ...(envLines.length ? [``, `[mcp_servers.${mcpServerName}.env]`, ...envLines] : []),
114
135
  ].join("\n");
115
136
  }
@@ -117,6 +138,8 @@ export class CodexHarnessConfig {
117
138
  `[mcp_servers.${mcpServerName}]`,
118
139
  `url = ${tomlString(options.serverUrl ?? "")}`,
119
140
  startupTimeout,
141
+ toolsApprovalMode,
142
+ startupReadiness,
120
143
  ];
121
144
  const headerLines = Object.entries(options.headers ?? {}).map(([k, v]) => `${tomlString(k)} = ${tomlString(v)}`);
122
145
  if (headerLines.length > 0) {
@@ -124,21 +147,68 @@ export class CodexHarnessConfig {
124
147
  }
125
148
  return lines.join("\n");
126
149
  }
150
+ /**
151
+ * Render codex's built-in model catalog (`codex debug models`) into the
152
+ * session home. Used on machines without a cached catalog (CI): without a
153
+ * catalog codex applies its built-in 10k-token tool truncation, which drops
154
+ * the server's larger tool definitions.
155
+ */
156
+ renderBuiltinCatalog(sessionHomeDir) {
157
+ const dest = path.join(sessionHomeDir, "builtin-model-catalog.json");
158
+ try {
159
+ const json = execFileSync(this.binaryPath, ["debug", "models"], {
160
+ env: { ...process.env, CODEX_HOME: sessionHomeDir },
161
+ encoding: "utf8",
162
+ timeout: 30000,
163
+ stdio: ["ignore", "pipe", "ignore"],
164
+ });
165
+ JSON.parse(json);
166
+ fs.writeFileSync(dest, json);
167
+ return dest;
168
+ }
169
+ catch {
170
+ return undefined;
171
+ }
172
+ }
173
+ /**
174
+ * Catalog to copy into the hermetic home with the active model's truncation
175
+ * limit lifted: the host's catalog when it lists the active model, else
176
+ * codex's built-in one. The host cache can be stale and lack newer models,
177
+ * in which case codex falls back to its 10k-token tool truncation.
178
+ */
179
+ resolveModelCatalogPath(sessionHomeDir, activeModel) {
180
+ const hostCatalog = this.resolveHostModelCatalogPath();
181
+ const hostHasModel = hostCatalog !== undefined && existsSync(hostCatalog) && this.catalogHasModel(hostCatalog, activeModel);
182
+ const source = (hostHasModel ? hostCatalog : undefined) ??
183
+ this.renderBuiltinCatalog(sessionHomeDir) ??
184
+ (hostCatalog !== undefined && existsSync(hostCatalog) ? hostCatalog : undefined);
185
+ if (!source) {
186
+ return undefined;
187
+ }
188
+ const dest = path.join(sessionHomeDir, "model-catalog.json");
189
+ this.copyCatalogWithLiftedTruncation({ source, dest, activeModel });
190
+ return dest;
191
+ }
192
+ /** Whether a model catalog file lists the given model slug. */
193
+ catalogHasModel(catalogPath, model) {
194
+ try {
195
+ const catalog = JSON.parse(fs.readFileSync(catalogPath, "utf8"));
196
+ return (catalog.models ?? []).some((entry) => entry.slug === model);
197
+ }
198
+ catch {
199
+ return false;
200
+ }
201
+ }
127
202
  buildConfig(options, sessionHomeDir) {
128
203
  const { mcpServerName = "mongo", model, workDir } = options;
129
204
  // Model: `options.model` > the model codex already uses > fallback.
130
205
  const resolvedModel = model ?? this.getHostTopLevelValue("model") ?? DEFAULT_CODEX_MODEL;
131
- // Copy the model catalog so codex can resolve model metadata (without it the turn dies early).
206
+ // Copy the model catalog so codex can resolve model metadata and does not
207
+ // truncate the server's tool definitions from the model request.
132
208
  const catalogLines = [];
133
- const catalogSource = this.resolveHostModelCatalogPath();
134
- if (catalogSource && existsSync(catalogSource)) {
135
- const catalogDest = path.join(sessionHomeDir, "model-catalog.json");
136
- this.copyCatalogWithLiftedTruncation({
137
- source: catalogSource,
138
- dest: catalogDest,
139
- activeModel: resolvedModel,
140
- });
141
- catalogLines.push(`model_catalog_json = ${tomlString(catalogDest)}`);
209
+ const catalogSource = this.resolveModelCatalogPath(sessionHomeDir, resolvedModel);
210
+ if (catalogSource) {
211
+ catalogLines.push(`model_catalog_json = ${tomlString(catalogSource)}`);
142
212
  }
143
213
  const lines = [
144
214
  "# Minimal hermetic codex config for the MongoDB MCP server agent e2e test.",
@@ -1 +1 @@
1
- {"version":3,"file":"codexConfig.js","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codexConfig.js","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type Backend } from "@microsoft/tui-test";
2
2
  import { type CodexState } from "./codexSession.js";
3
3
  import type { AgentHarness, AgentHarnessOptions, AgentSession } from "../types.js";
4
+ export declare function buildCodexTuiArgs(helpText: string): string[];
4
5
  export interface CodexTuiHarnessOptions {
5
6
  /** Override the codex binary path (default: "codex" on PATH). */
6
7
  binaryPath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"codexHarness.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI5D,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACnC,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,eAAgB,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;gBAExC,OAAO,GAAE,sBAA2B;IAQhD,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,OAAO;IAIrB,2FAA2F;IAC3F,WAAW,IAAI,OAAO;IAehB,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;CA8BnE"}
1
+ {"version":3,"file":"codexHarness.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI5D,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,MAAM,WAAW,sBAAsB;IACnC,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,eAAgB,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;gBAExC,OAAO,GAAE,sBAA2B;IAQhD,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,OAAO;IAIrB,2FAA2F;IAC3F,WAAW,IAAI,OAAO;IAehB,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;CAoCnE"}
@@ -6,6 +6,9 @@ import { CodexHarnessConfig, seedCodexOAuthCredentials } from "./codexConfig.js"
6
6
  import { assertRemoteServerOptions, resolveBackend } from "../shared.js";
7
7
  import { HarnessLogger } from "../logger.js";
8
8
  import { CodexTuiSession } from "./codexSession.js";
9
+ export function buildCodexTuiArgs(helpText) {
10
+ return /^\s*--no-daemon(?:\s|$)/m.test(helpText) ? ["--no-daemon"] : [];
11
+ }
9
12
  export class CodexTuiHarness {
10
13
  constructor(options = {}) {
11
14
  this.name = "codex-tui";
@@ -40,8 +43,14 @@ export class CodexTuiHarness {
40
43
  }
41
44
  async start(options) {
42
45
  assertRemoteServerOptions(options);
46
+ const binaryPath = this.getBinaryPath();
47
+ const helpText = execFileSync(binaryPath, ["--help"], {
48
+ encoding: "utf8",
49
+ timeout: 30000,
50
+ stdio: ["ignore", "pipe", "ignore"],
51
+ });
43
52
  // Per-session CODEX_HOME: developer config untouched, no state reused across sessions.
44
- const config = new CodexHarnessConfig();
53
+ const config = new CodexHarnessConfig({ binaryPath });
45
54
  const codexHome = path.join(options.workDir, `codex-home-${Math.random().toString(36).slice(2, 8)}`);
46
55
  await fs.mkdir(codexHome, { recursive: true });
47
56
  const configToml = config.buildConfig(options, codexHome);
@@ -51,7 +60,7 @@ export class CodexTuiHarness {
51
60
  backend: this.backend,
52
61
  timeouts: { ready: 60000, text: 60000, idle: 60000 },
53
62
  });
54
- await terminal.run(this.getBinaryPath(), [], {
63
+ await terminal.run(binaryPath, buildCodexTuiArgs(helpText), {
55
64
  cwd: options.workDir,
56
65
  cols: this.cols,
57
66
  rows: this.rows,
@@ -1 +1 @@
1
- {"version":3,"file":"codexHarness.js","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codexHarness.js","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,10 @@ export declare class CodexTuiSession extends TuiSessionBase {
12
12
  protected isWorking(text: string): boolean;
13
13
  protected isComposerIdle(text: string): boolean;
14
14
  protected isTransitional(text: string): boolean;
15
+ protected isElicitation(text: string): boolean;
15
16
  /**
16
- * Codex renders the elicitation as a numbered list using the schema's verbatim
17
- * enumNames ("Yes, I confirm"/"No, I do not confirm"), so type the label.
17
+ * Codex renders the elicitation as a numbered picker with the cursor on the
18
+ * first option, so navigate to the chosen option before submitting.
18
19
  */
19
20
  protected sendChoice(choice: "confirm" | "decline"): Promise<void>;
20
21
  protected extractToolCalls(delta: string): ToolCallRecord[];
@@ -1 +1 @@
1
- {"version":3,"file":"codexSession.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;AAElC,qBAAa,eAAgB,SAAQ,cAAc;gBACnC,EACR,QAAQ,EACR,OAAO,EACP,OAAO,GACV,EAAE;QACC,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,mBAAmB,CAAC;QAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;KACvC;IAID,SAAS,KAAK,KAAK,IAAI,MAAM,CAE5B;IAED,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1C,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;cAI5B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxD;;;OAGG;cACsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjF,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;CAG9D"}
1
+ {"version":3,"file":"codexSession.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;AAElC,qBAAa,eAAgB,SAAQ,cAAc;gBACnC,EACR,QAAQ,EACR,OAAO,EACP,OAAO,GACV,EAAE;QACC,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,mBAAmB,CAAC;QAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;KACvC;IAID,SAAS,KAAK,KAAK,IAAI,MAAM,CAE5B;IAED,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1C,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;cAI5B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;cAIrC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvD;;;OAGG;cACsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjF,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;CAG9D"}
@@ -1,5 +1,5 @@
1
1
  import { parseTuiTranscript } from "./codexParseTuiTranscript.js";
2
- import { isCodexComposerIdle, isCodexTransitional, isCodexWorking } from "./codexTuiMarkers.js";
2
+ import { isCodexComposerIdle, isCodexElicitation, isCodexTransitional, isCodexWorking } from "./codexTuiMarkers.js";
3
3
  import { TuiSessionBase } from "../tuiSession.js";
4
4
  export class CodexTuiSession extends TuiSessionBase {
5
5
  constructor({ terminal, options, onState, }) {
@@ -17,13 +17,17 @@ export class CodexTuiSession extends TuiSessionBase {
17
17
  isTransitional(text) {
18
18
  return isCodexTransitional(text);
19
19
  }
20
+ isElicitation(text) {
21
+ return isCodexElicitation(text);
22
+ }
20
23
  /**
21
- * Codex renders the elicitation as a numbered list using the schema's verbatim
22
- * enumNames ("Yes, I confirm"/"No, I do not confirm"), so type the label.
24
+ * Codex renders the elicitation as a numbered picker with the cursor on the
25
+ * first option, so navigate to the chosen option before submitting.
23
26
  */
24
27
  async sendChoice(choice) {
25
- const label = choice === "decline" ? "No, I do not confirm" : "Yes, I confirm";
26
- await this.terminal.type(label);
28
+ if (choice === "decline") {
29
+ await this.terminal.keyboard.press("Down");
30
+ }
27
31
  await this.terminal.keyboard.press("Enter");
28
32
  }
29
33
  extractToolCalls(delta) {
@@ -1 +1 @@
1
- {"version":3,"file":"codexSession.js","sourceRoot":"","sources":["../../../src/harness/codex/codexSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAC;AAKjE,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC/C,YAAY,EACR,QAAQ,EACR,OAAO,EACP,OAAO,GAKV;QACG,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAc,KAAK;QACf,OAAO,OAAO,CAAC;IACnB,CAAC;IAES,SAAS,CAAC,IAAY;QAC5B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAES,cAAc,CAAC,IAAY;QACjC,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEkB,cAAc,CAAC,IAAY;QAC1C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACgB,KAAK,CAAC,UAAU,CAAC,MAA6B;QAC7D,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC/E,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAES,gBAAgB,CAAC,KAAa;QACpC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;CACJ"}
1
+ {"version":3,"file":"codexSession.js","sourceRoot":"","sources":["../../../src/harness/codex/codexSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAC;AAKjE,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC/C,YAAY,EACR,QAAQ,EACR,OAAO,EACP,OAAO,GAKV;QACG,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAc,KAAK;QACf,OAAO,OAAO,CAAC;IACnB,CAAC;IAES,SAAS,CAAC,IAAY;QAC5B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAES,cAAc,CAAC,IAAY;QACjC,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEkB,cAAc,CAAC,IAAY;QAC1C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEkB,aAAa,CAAC,IAAY;QACzC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACgB,KAAK,CAAC,UAAU,CAAC,MAA6B;QAC7D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAES,gBAAgB,CAAC,KAAa;QACpC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;CACJ"}
@@ -13,4 +13,6 @@ export declare function isCodexWorking(text: string): boolean;
13
13
  export declare function isCodexComposerIdle(text: string): boolean;
14
14
  /** Whether the viewport shows a transient startup/reconnect banner (not a real input prompt). */
15
15
  export declare function isCodexTransitional(text: string): boolean;
16
+ /** Whether the viewport shows the server's confirmation form. */
17
+ export declare function isCodexElicitation(text: string): boolean;
16
18
  //# sourceMappingURL=codexTuiMarkers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codexTuiMarkers.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexTuiMarkers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,iGAAiG;AACjG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"codexTuiMarkers.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexTuiMarkers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2BH,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,iGAAiG;AACjG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -21,6 +21,13 @@ const COMPOSER_IDLE_MARKER = "Ask Codex to do anything";
21
21
  const WORKING_MARKER = /^[^\s›].*\(\d+[smh](?:[ \t]\d+[smh])*[ \t]•[ \t][^)]*to interrupt\)(?:[ \t]·[ \t].*)?[ \t]*$/m;
22
22
  /** Transient banners rendered as "neither working nor idle" that are not input prompts. */
23
23
  const TRANSITIONAL_MARKER = /^[ \t]*(?:Waiting for startup|Reconnecting to app-server|Loading earlier messages)\b/m;
24
+ /**
25
+ * The confirmation form the server elicits before a destructive tool runs.
26
+ * Codex renders the message ("Do you confirm the execution of the action?")
27
+ * and the Yes/No options; the marker separates a real elicitation from a
28
+ * transient "neither working nor idle" frame such as the just-submitted prompt.
29
+ */
30
+ const ELICITATION_MARKER = /\bconfirm\b/i;
24
31
  /** Whether the viewport shows an in-progress turn, regardless of the status header. */
25
32
  export function isCodexWorking(text) {
26
33
  return WORKING_MARKER.test(text);
@@ -33,4 +40,8 @@ export function isCodexComposerIdle(text) {
33
40
  export function isCodexTransitional(text) {
34
41
  return TRANSITIONAL_MARKER.test(text);
35
42
  }
43
+ /** Whether the viewport shows the server's confirmation form. */
44
+ export function isCodexElicitation(text) {
45
+ return ELICITATION_MARKER.test(text);
46
+ }
36
47
  //# sourceMappingURL=codexTuiMarkers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codexTuiMarkers.js","sourceRoot":"","sources":["../../../src/harness/codex/codexTuiMarkers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mFAAmF;AACnF,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,+FAA+F,CAAC;AAEvH,2FAA2F;AAC3F,MAAM,mBAAmB,GAAG,uFAAuF,CAAC;AAEpH,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAC/C,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"codexTuiMarkers.js","sourceRoot":"","sources":["../../../src/harness/codex/codexTuiMarkers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mFAAmF;AACnF,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,+FAA+F,CAAC;AAEvH,2FAA2F;AAC3F,MAAM,mBAAmB,GAAG,uFAAuF,CAAC;AAEpH;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAE1C,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAC/C,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC"}
@@ -1,5 +1,13 @@
1
1
  import type { TuiTest } from "@microsoft/tui-test";
2
2
  import type { AgentHarnessOptions, AgentSession, AgentTurn, AgentTurnState, ToolCallRecord } from "./types.js";
3
+ /** Forget previously tracked sessions; call at the start of each test. */
4
+ export declare function resetSessionSnapshots(): void;
5
+ /**
6
+ * Print the poll snapshot history of every session tracked since the last
7
+ * reset. Always visible (not gated on `AGENT_E2E_DEBUG`): call it when a test
8
+ * fails, since the failing run is usually not one debug mode was enabled for.
9
+ */
10
+ export declare function dumpSessionSnapshots(reason: string): void;
3
11
  /** Per-poll state shared by both agent TUI sessions. */
4
12
  export interface TuiState {
5
13
  /** True while the session's status/footer shows an in-progress turn. */
@@ -26,12 +34,22 @@ export declare abstract class TuiSessionBase implements AgentSession {
26
34
  /** Transcript snapshot the current turn started from (so chooseOption can continue it). */
27
35
  private currentTurnStartText;
28
36
  private currentState;
37
+ /** Recent poll snapshots across all turns, kept so a failure can be diagnosed without `AGENT_E2E_DEBUG`. */
38
+ private readonly snapshotHistory;
29
39
  get state(): AgentTurnState;
30
40
  protected constructor({ terminal, options, onState, }: {
31
41
  terminal: TuiTest;
32
42
  options: AgentHarnessOptions;
33
43
  onState?: (state: TuiState) => void;
34
44
  });
45
+ /** Record one poll snapshot, evicting the oldest past {@link SNAPSHOT_HISTORY_LIMIT}. */
46
+ private recordSnapshot;
47
+ /**
48
+ * Print the retained snapshots. Unlike the per-poll debug stream this is
49
+ * always visible: a failed test (assertion, harness abort, or vitest's own
50
+ * timeout) is undiagnosable without the state history.
51
+ */
52
+ dumpSnapshotHistory(reason: string): void;
35
53
  /** Agent label used in debug/error output (e.g. "codex"). */
36
54
  protected abstract get label(): string;
37
55
  private get log();
@@ -61,6 +79,14 @@ export declare abstract class TuiSessionBase implements AgentSession {
61
79
  * states must not be mistaken for an elicitation. Harnesses opt in.
62
80
  */
63
81
  protected isTransitional?(text: string): boolean;
82
+ /**
83
+ * Whether the viewport is a confirmation prompt the agent is waiting on.
84
+ * The default is permissive: any frame that is neither working nor idle
85
+ * counts. Harnesses whose transient frames look the same (e.g. codex's
86
+ * just-submitted prompt) override this with a positive marker so such a
87
+ * frame is not reported as an elicitation before the turn has begun.
88
+ */
89
+ protected isElicitation(text: string): boolean;
64
90
  protected approveTool(): Promise<void>;
65
91
  prompt(prompt: string): Promise<AgentTurn>;
66
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tuiSession.d.ts","sourceRoot":"","sources":["../../src/harness/tuiSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAY/G,wDAAwD;AACxD,MAAM,WAAW,QAAQ;IACrB,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,YAAY,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,8BAAsB,cAAe,YAAW,YAAY;IACxD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,IAAI,CAA4B;IACxC,6EAA6E;IAC7E,OAAO,CAAC,oBAAoB,CAAqB;IACjD,2FAA2F;IAC3F,OAAO,CAAC,oBAAoB,CAAM;IAClC,OAAO,CAAC,YAAY,CAA+B;IAEnD,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,SAAS,aAAa,EAClB,QAAQ,EACR,OAAO,EACP,OAAO,GACV,EAAE;QACC,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,mBAAmB,CAAC;QAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;KACvC;IAMD,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC;IACvC,OAAO,KAAK,GAAG,GAEd;IACD,sDAAsD;IACtD,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IACnD,iEAAiE;IACjE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IACxD,kEAAkE;IAClE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAEpE,qDAAqD;IAC/C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAKrE;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3E,qFAAqF;IACrF,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;cAEhC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAShD;;;OAGG;YACW,QAAQ;IAqHtB,4EAA4E;YAC9D,gBAAgB;YAahB,YAAY;YAIZ,cAAc;YAId,SAAS;IAgBvB,OAAO,CAAC,UAAU;IAWZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
1
+ {"version":3,"file":"tuiSession.d.ts","sourceRoot":"","sources":["../../src/harness/tuiSession.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,28 @@ const TYPE_TO_ENTER_DELAY_MS = 800;
7
7
  const IDLE_BAIL_GRACE_MS = 30000;
8
8
  /** How long the not-working+not-idle state must persist before we treat it as an awaited confirmation. */
9
9
  const CONFIRMATION_PENDING_GRACE_MS = 1000;
10
+ /** Codex may briefly show an idle composer between commentary and a tool call. */
11
+ const TURN_COMPLETE_GRACE_MS = 1000;
12
+ /** How many poll snapshots to retain for the on-failure dump (~1 per 500ms). */
13
+ const SNAPSHOT_HISTORY_LIMIT = 240;
14
+ /** Viewport characters kept per retained snapshot, so the dump stays readable. */
15
+ const SNAPSHOT_VIEWPORT_CHARS = 600;
16
+ /** Sessions created since the last {@link resetSessionSnapshots}, in creation order. */
17
+ const trackedSessions = [];
18
+ /** Forget previously tracked sessions; call at the start of each test. */
19
+ export function resetSessionSnapshots() {
20
+ trackedSessions.length = 0;
21
+ }
22
+ /**
23
+ * Print the poll snapshot history of every session tracked since the last
24
+ * reset. Always visible (not gated on `AGENT_E2E_DEBUG`): call it when a test
25
+ * fails, since the failing run is usually not one debug mode was enabled for.
26
+ */
27
+ export function dumpSessionSnapshots(reason) {
28
+ for (const session of trackedSessions) {
29
+ session.dumpSnapshotHistory(reason);
30
+ }
31
+ }
10
32
  /**
11
33
  * Shared polling loop + terminal helpers for agent TUI sessions. Subclasses
12
34
  * supply only the agent-specific bits: the label, the in-progress and idle
@@ -20,9 +42,33 @@ export class TuiSessionBase {
20
42
  /** Transcript snapshot the current turn started from (so chooseOption can continue it). */
21
43
  this.currentTurnStartText = "";
22
44
  this.currentState = "completed";
45
+ /** Recent poll snapshots across all turns, kept so a failure can be diagnosed without `AGENT_E2E_DEBUG`. */
46
+ this.snapshotHistory = [];
23
47
  this.terminal = terminal;
24
48
  this.options = options;
25
49
  this.onState = onState ?? ((state) => this.printState(state));
50
+ trackedSessions.push(this);
51
+ }
52
+ /** Record one poll snapshot, evicting the oldest past {@link SNAPSHOT_HISTORY_LIMIT}. */
53
+ recordSnapshot(state) {
54
+ const viewport = state.viewport.slice(-SNAPSHOT_VIEWPORT_CHARS);
55
+ this.snapshotHistory.push(`t=${(state.elapsedMs / 1000).toFixed(1)}s working=${state.working} idle=${state.composerIdle}\n${viewport}`);
56
+ if (this.snapshotHistory.length > SNAPSHOT_HISTORY_LIMIT) {
57
+ this.snapshotHistory.shift();
58
+ }
59
+ }
60
+ /**
61
+ * Print the retained snapshots. Unlike the per-poll debug stream this is
62
+ * always visible: a failed test (assertion, harness abort, or vitest's own
63
+ * timeout) is undiagnosable without the state history.
64
+ */
65
+ dumpSnapshotHistory(reason) {
66
+ if (this.snapshotHistory.length === 0) {
67
+ return;
68
+ }
69
+ this.log.info(`${reason}; last ${this.snapshotHistory.length} poll snapshot(s) follow` +
70
+ ` (set AGENT_E2E_DEBUG=1 for the full transcript stream):\n` +
71
+ this.snapshotHistory.join("\n---\n"));
26
72
  }
27
73
  get log() {
28
74
  return (this._log ?? (this._log = new HarnessLogger(`${this.label}-tui`)));
@@ -36,6 +82,9 @@ export class TuiSessionBase {
36
82
  * completion, returning the completed {@link AgentTurn}.
37
83
  */
38
84
  async chooseOption(choice) {
85
+ if (this.currentState !== "elicitation") {
86
+ throw new Error(`${this.label} TUI has no pending elicitation`);
87
+ }
39
88
  await this.sendChoice(choice);
40
89
  return this.pollTurn(false);
41
90
  }
@@ -43,6 +92,16 @@ export class TuiSessionBase {
43
92
  isToolApproval(text) {
44
93
  return /Allow the .* MCP server to run tool/.test(text);
45
94
  }
95
+ /**
96
+ * Whether the viewport is a confirmation prompt the agent is waiting on.
97
+ * The default is permissive: any frame that is neither working nor idle
98
+ * counts. Harnesses whose transient frames look the same (e.g. codex's
99
+ * just-submitted prompt) override this with a positive marker so such a
100
+ * frame is not reported as an elicitation before the turn has begun.
101
+ */
102
+ isElicitation(text) {
103
+ return !this.isWorking(text) && !this.isComposerIdle(text);
104
+ }
46
105
  async approveTool() {
47
106
  await this.terminal.keyboard.press("Enter");
48
107
  }
@@ -63,15 +122,19 @@ export class TuiSessionBase {
63
122
  const timeoutMs = this.options.promptTimeoutMs ?? DEFAULT_PROMPT_TIMEOUT_MS;
64
123
  const deadline = Date.now() + timeoutMs;
65
124
  const startedAt = Date.now();
125
+ // Keep history across turns (an assertion may fail on any of them) but mark the boundary.
126
+ this.snapshotHistory.push(`=== new turn (${stopOnElicitation ? "prompt" : "chooseOption"}) ===`);
66
127
  let lastError = "";
67
- // A turn is only "real" once we have observed it begin: the working marker,
68
- // the composer leaving its idle placeholder, or the transcript growing past
69
- // the prompt echo. Without this the first poll after Enter (before the agent
70
- // has rendered anything) satisfies `!working && composerIdle` and returns a
71
- // bogus empty turn.
72
- let sawTurnActivity = false;
128
+ // A turn is only "real" once we have observed it begin: the working
129
+ // marker or the composer leaving its idle placeholder. Without this the
130
+ // first poll after Enter (before the agent has rendered anything)
131
+ // satisfies `!working && composerIdle` and returns a bogus empty turn.
132
+ // Transcript growth is deliberately not a signal: the prompt echo lands
133
+ // in the transcript before the agent starts, so it would arm the guard
134
+ // during the same pre-turn idle window.
135
+ // A choice continues an already-active turn, even if it completes before the first poll.
136
+ let sawTurnActivity = !stopOnElicitation;
73
137
  let confirmationPendingSinceMs;
74
- let prevDeltaLength;
75
138
  let idleSinceMs;
76
139
  while (Date.now() < deadline) {
77
140
  const full = await this.transcriptText();
@@ -84,16 +147,23 @@ export class TuiSessionBase {
84
147
  elapsedMs: Date.now() - startedAt,
85
148
  };
86
149
  this.onState(state);
87
- if (state.working ||
88
- !state.composerIdle ||
89
- (prevDeltaLength !== undefined && delta.length > prevDeltaLength)) {
150
+ this.recordSnapshot(state);
151
+ // A transitional banner ("Waiting for startup", ...) also renders as
152
+ // "not idle", but it is pre-turn chrome rather than the turn beginning:
153
+ // counting it would mark the turn active before the agent has started,
154
+ // so the next poll (idle composer, agent still booting) would return a
155
+ // bogus completed turn.
156
+ const transitional = this.isTransitional?.(viewport) ?? false;
157
+ if (state.working || (!state.composerIdle && !transitional)) {
90
158
  sawTurnActivity = true;
91
159
  }
92
- prevDeltaLength = delta.length;
93
160
  // Agent is awaiting input when not working and not idle; require that
94
161
  // state to persist a couple of polls so we do not fire mid-transition.
95
- if (sawTurnActivity && !state.working && !state.composerIdle) {
96
- if (this.isTransitional?.(viewport)) {
162
+ // The positive `isElicitation` marker keeps a transient frame that only
163
+ // looks like input (e.g. codex's just-submitted prompt) from firing.
164
+ const awaitingInput = this.isElicitation(viewport) || this.isToolApproval(viewport);
165
+ if (sawTurnActivity && !state.working && !state.composerIdle && awaitingInput) {
166
+ if (transitional) {
97
167
  confirmationPendingSinceMs = undefined;
98
168
  }
99
169
  else {
@@ -122,10 +192,11 @@ export class TuiSessionBase {
122
192
  else {
123
193
  confirmationPendingSinceMs = undefined;
124
194
  }
125
- // Turn done when the in-progress marker is gone and the composer is idle.
126
- if (!state.working && state.composerIdle) {
127
- if (sawTurnActivity ||
128
- (idleSinceMs !== undefined && state.elapsedMs - idleSinceMs >= IDLE_BAIL_GRACE_MS)) {
195
+ if (!state.working && state.composerIdle && !transitional) {
196
+ idleSinceMs ?? (idleSinceMs = state.elapsedMs);
197
+ const idleDurationMs = state.elapsedMs - idleSinceMs;
198
+ if ((sawTurnActivity && idleDurationMs >= TURN_COMPLETE_GRACE_MS) ||
199
+ idleDurationMs >= IDLE_BAIL_GRACE_MS) {
129
200
  this.log.debug(`<<turn complete after ${state.elapsedMs}ms>>`);
130
201
  this.onState({
131
202
  ...state,
@@ -133,7 +204,6 @@ export class TuiSessionBase {
133
204
  });
134
205
  return await this.buildTurn(startText);
135
206
  }
136
- idleSinceMs ?? (idleSinceMs = state.elapsedMs);
137
207
  }
138
208
  else {
139
209
  idleSinceMs = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"tuiSession.js","sourceRoot":"","sources":["../../src/harness/tuiSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tuiSession.js","sourceRoot":"","sources":["../../src/harness/tuiSession.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAgent.d.ts","sourceRoot":"","sources":["../src/useAgent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,0EAA0E;IAC1E,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,mBAAmB,CAAC;CACnF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,GAAG,YAAY,CA0C7E"}
1
+ {"version":3,"file":"useAgent.d.ts","sourceRoot":"","sources":["../src/useAgent.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,0EAA0E;IAC1E,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,mBAAmB,CAAC;CACnF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,GAAG,YAAY,CAiD7E"}
package/dist/useAgent.js CHANGED
@@ -3,6 +3,7 @@ import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { afterAll, beforeAll, beforeEach } from "vitest";
5
5
  import { DEFAULT_PROMPT_TIMEOUT_MS } from "./harness/shared.js";
6
+ import { dumpSessionSnapshots, resetSessionSnapshots } from "./harness/tuiSession.js";
6
7
  /**
7
8
  * Agent e2e suite setup: temp workdir, availability skip gate, and base
8
9
  * session options. Call inside a `describe` block with the harness to drive.
@@ -18,10 +19,17 @@ export function useAgent({ harness }) {
18
19
  if (!isHarnessAvailable()) {
19
20
  ctx.skip(`harness '${harness.name}' not available; agent e2e suite skipped`);
20
21
  }
22
+ // Always surface the harness snapshot history when a test fails, debug mode or not.
23
+ // Hooking the test failure (not the session) also covers assertion failures after a
24
+ // turn the harness considered complete, and vitest's own timeout killing the test.
25
+ resetSessionSnapshots();
26
+ ctx.onTestFailed(() => dumpSessionSnapshots(`test "${ctx.task.name}" failed`));
21
27
  });
22
28
  afterAll(async () => {
23
29
  if (workDir) {
24
- await fs.rm(workDir, { recursive: true, force: true });
30
+ // Codex's app-server daemon can outlive the TUI and keep writing lock
31
+ // files into the workdir, racing the removal (ENOTEMPTY); retry briefly.
32
+ await fs.rm(workDir, { recursive: true, force: true, maxRetries: 10, retryDelay: 200 });
25
33
  }
26
34
  });
27
35
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"useAgent.js","sourceRoot":"","sources":["../src/useAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAWhE;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,EAA6B;IAC3D,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,gBAAqC,CAAC;IAC1C,MAAM,kBAAkB,GAAG,GAAY,EAAE,CAAC,CAAC,gBAAgB,KAAhB,gBAAgB,GAAK,OAAO,CAAC,WAAW,EAAE,EAAC,CAAC;IAEvF,SAAS,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,0CAA0C,CAAC,CAAC;QACjF,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAChB,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO;QACP,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO;QACtB,kBAAkB;QAClB,YAAY,EAAE,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,OAAO;YACP,yEAAyE;YACzE,GAAG,CAAC,GAAuB,EAAE;gBACzB,MAAM,KAAK,GACP,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;oBACnE,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;oBACrE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;gBAChC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,CAAC,CAAC,EAAE;YACJ,eAAe,EAAE,yBAAyB;YAC1C,6DAA6D;YAC7D,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;YACpC,GAAG,SAAS;SACf,CAAC;KACkB,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"useAgent.js","sourceRoot":"","sources":["../src/useAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAWtF;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,EAA6B;IAC3D,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,gBAAqC,CAAC;IAC1C,MAAM,kBAAkB,GAAG,GAAY,EAAE,CAAC,CAAC,gBAAgB,KAAhB,gBAAgB,GAAK,OAAO,CAAC,WAAW,EAAE,EAAC,CAAC;IAEvF,SAAS,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,0CAA0C,CAAC,CAAC;QACjF,CAAC;QACD,oFAAoF;QACpF,oFAAoF;QACpF,mFAAmF;QACnF,qBAAqB,EAAE,CAAC;QACxB,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAChB,IAAI,OAAO,EAAE,CAAC;YACV,sEAAsE;YACtE,yEAAyE;YACzE,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5F,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO;QACP,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO;QACtB,kBAAkB;QAClB,YAAY,EAAE,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,OAAO;YACP,yEAAyE;YACzE,GAAG,CAAC,GAAuB,EAAE;gBACzB,MAAM,KAAK,GACP,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;oBACnE,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;oBACrE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;gBAChC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,CAAC,CAAC,EAAE;YACJ,eAAe,EAAE,yBAAyB;YAC1C,6DAA6D;YAC7D,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;YACpC,GAAG,SAAS;SACf,CAAC;KACkB,CAAC;AAC7B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mongodb-js/harness-tester",
3
- "version": "3.1.1-pre.1",
3
+ "version": "3.2.1",
4
4
  "type": "module",
5
5
  "description": "Tooling to drive real LLM coding-agent CLIs (codex, claude) interactively through their TUIs for end-to-end tests",
6
6
  "license": "Apache-2.0",