@rk0429/agentic-relay 16.0.0 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -118,6 +118,13 @@ built-in default for backend auto-selection. `task_retention_days` prunes
118
118
  expired `done` / `archived` leaf tasks during subsequent task reads; terminal
119
119
  tasks with children or dependants are retained until they become isolated.
120
120
 
121
+ For Codex-backed leaf agents, relay also applies a narrow bootstrap guard:
122
+ sibling Codex launches are slightly staggered, and if a child emits
123
+ `thread.started` but never materializes its local state bootstrap, relay writes
124
+ diagnostics under `.relay/diagnostics/<session>/attempt-N/`, terminates the
125
+ stalled child, and retries once for read-only task types (`research`,
126
+ `document_review`, `code_review`).
127
+
121
128
  Persisted relay files are created with private permissions (`0600`), and a
122
129
  repeatable non-functional benchmark can be run with:
123
130
 
@@ -125,6 +132,13 @@ repeatable non-functional benchmark can be run with:
125
132
  pnpm benchmark:nf
126
133
  ```
127
134
 
135
+ To stress-test Codex bootstrap behavior and collect per-run artifacts under
136
+ `./tmp`, run:
137
+
138
+ ```bash
139
+ pnpm stress:codex-bootstrap -- --count 20 --concurrency 4
140
+ ```
141
+
128
142
  ## Use From This Workspace
129
143
 
130
144
  This workspace is configured to consume the published package via
@@ -5,6 +5,7 @@ import { CliBackendExecutor } from "../infrastructure/backends/cli-backend-execu
5
5
  import { RelayStore } from "../infrastructure/store/relay-store.js";
6
6
  export declare class SpawnAgentsService {
7
7
  private readonly dependencies;
8
+ private codexLaunchSlot;
8
9
  constructor(dependencies: {
9
10
  backendRegistry: BackendRegistry;
10
11
  backendExecutor: Pick<CliBackendExecutor, "execute">;
@@ -17,6 +18,8 @@ export declare class SpawnAgentsService {
17
18
  signal?: AbortSignal;
18
19
  }): Promise<SpawnAgentResult[]>;
19
20
  private spawnSingleAgent;
21
+ private executeWithBootstrapRecovery;
22
+ private waitForCodexLaunchWindow;
20
23
  private persistSuccess;
21
24
  private persistFailure;
22
25
  }
@@ -1,18 +1,33 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { DepthLimitError, ValidationError } from "../core/errors.js";
2
+ import path from "node:path";
3
+ import { DepthLimitError, RelayError, ValidationError } from "../core/errors.js";
3
4
  import { resolveConfiguredMaxDepth } from "../domain/config.js";
4
5
  import { getCurrentDepth, resolveMaxDepth, validateDepth } from "../domain/depth.js";
5
6
  import { buildCrossBackendHandoffPrompt, createCrossBackendHandoffInfo, } from "../domain/handoff.js";
6
7
  import { canSpawnAgents } from "../domain/redelegation.js";
7
8
  import { resolveRole } from "../domain/role.js";
8
9
  import { resolveBackend, validateRoutingRules } from "../domain/routing.js";
10
+ const CODEX_START_STAGGER_MS = 250;
11
+ const CODEX_BOOTSTRAP_GRACE_MS = 10_000;
12
+ const CODEX_BOOTSTRAP_POLL_INTERVAL_MS = 500;
13
+ const RETRYABLE_BOOTSTRAP_TASK_TYPES = new Set([
14
+ "research",
15
+ "document_review",
16
+ "code_review",
17
+ ]);
9
18
  export class SpawnAgentsService {
10
19
  dependencies;
20
+ codexLaunchSlot = Promise.resolve();
11
21
  constructor(dependencies) {
12
22
  this.dependencies = dependencies;
13
23
  }
14
24
  async spawnAgents(input, options = {}) {
15
25
  const env = this.dependencies.env ?? process.env;
26
+ if (env.RELAY_ALLOW_SPAWN_AGENTS === "0") {
27
+ throw new ValidationError("spawn_agents is disabled for this agent context.", {
28
+ recoveryHint: "Only orchestration agents can recursively call spawn_agents. Return your findings to the parent agent instead.",
29
+ });
30
+ }
16
31
  const currentDepth = getCurrentDepth(env);
17
32
  const relayConfig = await this.dependencies.store.readConfig();
18
33
  const maxDepth = resolveMaxDepth(input.max_depth, env, resolveConfiguredMaxDepth(relayConfig));
@@ -126,7 +141,7 @@ export class SpawnAgentsService {
126
141
  });
127
142
  }
128
143
  try {
129
- executionResult = await this.dependencies.backendExecutor.execute({
144
+ executionResult = await this.executeWithBootstrapRecovery({
130
145
  relaySessionId,
131
146
  backend: routing.resolved,
132
147
  prompt,
@@ -134,7 +149,6 @@ export class SpawnAgentsService {
134
149
  backendSessionId: handoff
135
150
  ? undefined
136
151
  : resumeMetadata?.backendSessionId ?? agent.session_id,
137
- cwd: this.dependencies.cwd,
138
152
  env: {
139
153
  ...process.env,
140
154
  ...(this.dependencies.env ?? {}),
@@ -143,6 +157,8 @@ export class SpawnAgentsService {
143
157
  RELAY_AGENT_ID: relaySessionId,
144
158
  RELAY_ALLOW_SPAWN_AGENTS: canSpawnAgents(resolvedTaskType) ? "1" : "0",
145
159
  },
160
+ resolvedTaskType,
161
+ agent,
146
162
  signal,
147
163
  });
148
164
  }
@@ -194,6 +210,62 @@ export class SpawnAgentsService {
194
210
  summaryLength,
195
211
  });
196
212
  }
213
+ async executeWithBootstrapRecovery(options) {
214
+ const maxAttempts = shouldRetryBootstrapStall(options.backend, options.resolvedTaskType) ? 2 : 1;
215
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
216
+ if (options.backend === "codex") {
217
+ await this.waitForCodexLaunchWindow();
218
+ }
219
+ try {
220
+ const result = await this.dependencies.backendExecutor.execute({
221
+ relaySessionId: options.relaySessionId,
222
+ backend: options.backend,
223
+ prompt: options.prompt,
224
+ systemPrompt: options.systemPrompt,
225
+ backendSessionId: options.backendSessionId,
226
+ cwd: this.dependencies.cwd,
227
+ env: options.env,
228
+ signal: options.signal,
229
+ bootstrapWatchdog: options.backend === "codex"
230
+ ? {
231
+ graceMs: CODEX_BOOTSTRAP_GRACE_MS,
232
+ pollIntervalMs: CODEX_BOOTSTRAP_POLL_INTERVAL_MS,
233
+ diagnosticsDir: path.join(this.dependencies.cwd, ".relay", "diagnostics", options.relaySessionId, `attempt-${attempt}`),
234
+ }
235
+ : undefined,
236
+ });
237
+ return result;
238
+ }
239
+ catch (error) {
240
+ if (attempt < maxAttempts &&
241
+ isBootstrapStallError(error)) {
242
+ await this.dependencies.store.appendLog(createLogEntry({
243
+ sessionId: options.relaySessionId,
244
+ taskId: options.agent.task_id,
245
+ backend: options.backend,
246
+ eventType: "agent_bootstrap_stalled",
247
+ status: "error",
248
+ details: {
249
+ attempt,
250
+ retry_scheduled: true,
251
+ error: error.message,
252
+ ...(typeof error.causeData === "object" && error.causeData
253
+ ? error.causeData
254
+ : {}),
255
+ },
256
+ }));
257
+ continue;
258
+ }
259
+ throw error;
260
+ }
261
+ }
262
+ throw new RelayError("BACKEND_BOOTSTRAP_STALLED", "Codex bootstrap recovery exhausted.");
263
+ }
264
+ async waitForCodexLaunchWindow() {
265
+ const previous = this.codexLaunchSlot;
266
+ this.codexLaunchSlot = previous.then(() => delay(CODEX_START_STAGGER_MS));
267
+ await previous;
268
+ }
197
269
  async persistSuccess(options) {
198
270
  const summary = summarize(options.executionResult.output, options.summaryLength);
199
271
  const responsePath = await this.dependencies.store.writeResponse(options.relaySessionId, options.executionResult.output);
@@ -215,6 +287,11 @@ export class SpawnAgentsService {
215
287
  backend: options.backend,
216
288
  eventType: "agent_completed",
217
289
  status: "success",
290
+ details: {
291
+ process_id: options.executionResult.runtime?.processId,
292
+ backend_thread_id: options.executionResult.runtime?.backendThreadId,
293
+ bootstrap_completed: options.executionResult.runtime?.bootstrapCompleted,
294
+ },
218
295
  }));
219
296
  if (options.agent.task_id) {
220
297
  await this.dependencies.taskService?.onAgentCompleted({
@@ -244,6 +321,7 @@ export class SpawnAgentsService {
244
321
  }
245
322
  async persistFailure(options) {
246
323
  const message = options.error instanceof Error ? options.error.message : String(options.error);
324
+ const relayError = options.error instanceof RelayError ? options.error : undefined;
247
325
  const responsePath = await this.dependencies.store.writeResponse(options.relaySessionId, message);
248
326
  const backend = options.backend ?? "claude";
249
327
  await this.dependencies.store.appendLog(createLogEntry({
@@ -254,9 +332,13 @@ export class SpawnAgentsService {
254
332
  status: "error",
255
333
  details: {
256
334
  error: message,
335
+ error_code: relayError?.code,
257
336
  role: options.agent.role,
258
337
  task_type: options.agent.task_type,
259
338
  fallback_reason: options.routing?.fallbackReason,
339
+ ...(typeof relayError?.causeData === "object" && relayError.causeData
340
+ ? relayError.causeData
341
+ : {}),
260
342
  },
261
343
  }));
262
344
  if (options.agent.task_id) {
@@ -290,6 +372,17 @@ export class SpawnAgentsService {
290
372
  };
291
373
  }
292
374
  }
375
+ function shouldRetryBootstrapStall(backend, taskType) {
376
+ return backend === "codex" && taskType !== undefined && RETRYABLE_BOOTSTRAP_TASK_TYPES.has(taskType);
377
+ }
378
+ function isBootstrapStallError(error) {
379
+ return error instanceof RelayError && error.code === "BACKEND_BOOTSTRAP_STALLED";
380
+ }
381
+ function delay(ms) {
382
+ return new Promise((resolve) => {
383
+ setTimeout(resolve, ms);
384
+ });
385
+ }
293
386
  function buildAgentSystemPrompt(roleDefinitionBody, userSystemPrompt, relaySessionId) {
294
387
  const relayInstruction = [
295
388
  "You are running as an agentic-relay child agent.",
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-agents-service.js","sourceRoot":"","sources":["../../src/application/spawn-agents-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn-agents-service.js","sourceRoot":"","sources":["../../src/application/spawn-agents-service.ts"],"names":[],"mappings":"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"}
@@ -339,7 +339,7 @@ export interface LogEntry {
339
339
  session_id: string;
340
340
  task_id?: string;
341
341
  backend?: BackendType;
342
- event_type: "agent_spawned" | "agent_completed" | "agent_failed" | "routing_fallback" | "task_status_changed";
342
+ event_type: "agent_spawned" | "agent_completed" | "agent_failed" | "agent_bootstrap_stalled" | "routing_fallback" | "task_status_changed";
343
343
  status: "running" | "success" | "error";
344
344
  details?: Record<string, unknown>;
345
345
  }
@@ -378,8 +378,23 @@ export interface SpawnExecutionRequest {
378
378
  cwd: string;
379
379
  env: NodeJS.ProcessEnv;
380
380
  signal?: AbortSignal;
381
+ bootstrapWatchdog?: BootstrapWatchdogConfig;
382
+ }
383
+ export interface BootstrapWatchdogConfig {
384
+ graceMs?: number;
385
+ pollIntervalMs?: number;
386
+ codexHome?: string;
387
+ diagnosticsDir?: string;
388
+ collectProcessArtifacts?: boolean;
389
+ }
390
+ export interface BackendExecutionRuntimeInfo {
391
+ processId?: number;
392
+ backendThreadId?: string;
393
+ bootstrapCompleted?: boolean;
394
+ diagnosticsDir?: string;
381
395
  }
382
396
  export interface BackendExecutionResult {
383
397
  output: string;
384
398
  backendSessionId: string;
399
+ runtime?: BackendExecutionRuntimeInfo;
385
400
  }
@@ -2,6 +2,7 @@ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { RelayError } from "../../core/errors.js";
5
+ import { CodexBootstrapTracker, startCodexBootstrapWatchdog, } from "../diagnostics/codex-bootstrap.js";
5
6
  export class CliBackendExecutor {
6
7
  backendRegistry;
7
8
  processExecutor;
@@ -52,17 +53,69 @@ export class CliBackendExecutor {
52
53
  async executeCodex(request, command, cliFlags, tempDir) {
53
54
  const outputFile = path.join(tempDir, "codex-last-message.txt");
54
55
  const args = request.backendSessionId
55
- ? ["exec", "resume", request.backendSessionId]
56
+ ? ["exec", "resume"]
56
57
  : ["exec"];
58
+ const relayMcpEnvOverride = buildCodexRelayMcpEnvOverride(request.env);
59
+ const bootstrapTracker = new CodexBootstrapTracker();
60
+ let processKiller;
61
+ if (relayMcpEnvOverride) {
62
+ args.push("-c", relayMcpEnvOverride);
63
+ }
57
64
  const prompt = applySystemPrompt(request.prompt, request.systemPrompt);
58
- args.push("--json", "-o", outputFile, ...cliFlags, prompt);
59
- const result = await this.processExecutor.execute({
60
- command,
61
- args,
62
- cwd: request.cwd,
63
- env: request.env,
64
- signal: request.signal,
65
- });
65
+ args.push("--json", "-o", outputFile, ...cliFlags);
66
+ if (request.backendSessionId) {
67
+ args.push(request.backendSessionId);
68
+ }
69
+ args.push(prompt);
70
+ const watchdog = request.bootstrapWatchdog
71
+ ? startCodexBootstrapWatchdog({
72
+ tracker: bootstrapTracker,
73
+ killProcess: (signal) => processKiller?.(signal) ?? false,
74
+ diagnosticsDir: request.bootstrapWatchdog.diagnosticsDir ??
75
+ path.join(request.cwd, ".relay", "diagnostics", request.relaySessionId),
76
+ codexHome: request.bootstrapWatchdog.codexHome,
77
+ graceMs: request.bootstrapWatchdog.graceMs,
78
+ pollIntervalMs: request.bootstrapWatchdog.pollIntervalMs,
79
+ collectProcessArtifacts: request.bootstrapWatchdog.collectProcessArtifacts,
80
+ })
81
+ : null;
82
+ let result;
83
+ try {
84
+ result = await this.processExecutor.execute({
85
+ command,
86
+ args,
87
+ cwd: request.cwd,
88
+ env: request.env,
89
+ signal: request.signal,
90
+ observer: {
91
+ onSpawn: ({ pid, kill }) => {
92
+ bootstrapTracker.onSpawn(pid);
93
+ processKiller = kill;
94
+ },
95
+ onStdout: (chunk) => {
96
+ bootstrapTracker.onStdout(chunk);
97
+ },
98
+ onStderr: (chunk) => {
99
+ bootstrapTracker.onStderr(chunk);
100
+ },
101
+ },
102
+ });
103
+ }
104
+ finally {
105
+ watchdog?.stop();
106
+ }
107
+ const watchdogResult = watchdog ? await watchdog.result : null;
108
+ if (watchdogResult) {
109
+ throw new RelayError("BACKEND_BOOTSTRAP_STALLED", `Codex child bootstrap stalled before state persistence was materialized. Diagnostics: ${watchdogResult.diagnosticsDir}`, {
110
+ causeData: {
111
+ process_id: bootstrapTracker.snapshot().processId,
112
+ backend_thread_id: bootstrapTracker.snapshot().threadId,
113
+ diagnostics_dir: watchdogResult.diagnosticsDir,
114
+ probe: watchdogResult.probe,
115
+ },
116
+ recoveryHint: "Inspect the captured diagnostics bundle, then retry the child agent once bootstrap contention subsides.",
117
+ });
118
+ }
66
119
  const output = await safeReadFile(outputFile);
67
120
  if (result.exitCode !== 0) {
68
121
  throw new RelayError("BACKEND_EXECUTION_FAILED", result.stderr.trim() || output.trim() || "Codex execution failed.");
@@ -73,6 +126,11 @@ export class CliBackendExecutor {
73
126
  return {
74
127
  output: output.trim() || extractText(result.stdout).trim(),
75
128
  backendSessionId,
129
+ runtime: {
130
+ processId: bootstrapTracker.snapshot().processId,
131
+ backendThreadId: bootstrapTracker.snapshot().threadId,
132
+ bootstrapCompleted: bootstrapTracker.snapshot().bootstrapCompleted,
133
+ },
76
134
  };
77
135
  }
78
136
  async executeGemini(request, command, settingsOverrides, tempDir) {
@@ -117,6 +175,69 @@ function applySystemPrompt(prompt, systemPrompt) {
117
175
  prompt,
118
176
  ].join("\n");
119
177
  }
178
+ const CODEX_RELAY_ENV_KEYS = [
179
+ "RELAY_CALL_DEPTH",
180
+ "RELAY_MAX_DEPTH",
181
+ "RELAY_AGENT_ID",
182
+ "RELAY_ALLOW_SPAWN_AGENTS",
183
+ ];
184
+ function buildCodexRelayMcpEnvOverride(env) {
185
+ const entries = CODEX_RELAY_ENV_KEYS.flatMap((key) => {
186
+ const value = env?.[key];
187
+ return value === undefined ? [] : [[key, value]];
188
+ });
189
+ if (entries.length === 0) {
190
+ return undefined;
191
+ }
192
+ const inlineTable = entries
193
+ .map(([key, value]) => `${key}=${formatTomlBasicString(value)}`)
194
+ .join(", ");
195
+ return `mcp_servers.agentic-relay.env={${inlineTable}}`;
196
+ }
197
+ function formatTomlBasicString(value) {
198
+ let escaped = "";
199
+ for (const char of value) {
200
+ switch (char) {
201
+ case "\"":
202
+ escaped += "\\\"";
203
+ break;
204
+ case "\\":
205
+ escaped += "\\\\";
206
+ break;
207
+ case "\b":
208
+ escaped += "\\b";
209
+ break;
210
+ case "\t":
211
+ escaped += "\\t";
212
+ break;
213
+ case "\n":
214
+ escaped += "\\n";
215
+ break;
216
+ case "\f":
217
+ escaped += "\\f";
218
+ break;
219
+ case "\r":
220
+ escaped += "\\r";
221
+ break;
222
+ default: {
223
+ const codePoint = char.codePointAt(0);
224
+ if (codePoint === undefined) {
225
+ break;
226
+ }
227
+ if (codePoint > 0xFFFF) {
228
+ escaped += `\\U${codePoint.toString(16).padStart(8, "0")}`;
229
+ break;
230
+ }
231
+ if (codePoint < 0x20 || codePoint === 0x7F) {
232
+ escaped += `\\u${codePoint.toString(16).padStart(4, "0")}`;
233
+ break;
234
+ }
235
+ escaped += char;
236
+ }
237
+ }
238
+ }
239
+ return `"${escaped}"`;
240
+ }
120
241
  async function safeReadFile(filePath) {
121
242
  try {
122
243
  return await readFile(filePath, "utf8");
@@ -1 +1 @@
1
- {"version":3,"file":"cli-backend-executor.js","sourceRoot":"","sources":["../../../src/infrastructure/backends/cli-backend-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-backend-executor.js","sourceRoot":"","sources":["../../../src/infrastructure/backends/cli-backend-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ export interface CodexBootstrapProbe {
2
+ stateDbPath?: string;
3
+ threadRowFound: boolean;
4
+ rolloutPath?: string;
5
+ rolloutFileExists: boolean;
6
+ error?: string;
7
+ }
8
+ export interface CodexBootstrapSnapshot {
9
+ processId?: number;
10
+ threadId?: string;
11
+ threadStartedAt?: number;
12
+ sawProgressBeyondThreadStart: boolean;
13
+ bootstrapCompleted: boolean;
14
+ stdout: string;
15
+ stderr: string;
16
+ }
17
+ export interface CodexBootstrapWatchdogOptions {
18
+ tracker: CodexBootstrapTracker;
19
+ killProcess: (signal?: NodeJS.Signals) => boolean;
20
+ diagnosticsDir: string;
21
+ codexHome?: string;
22
+ graceMs?: number;
23
+ pollIntervalMs?: number;
24
+ collectProcessArtifacts?: boolean;
25
+ }
26
+ export interface CodexBootstrapWatchdogResult {
27
+ diagnosticsDir: string;
28
+ probe: CodexBootstrapProbe;
29
+ reason: string;
30
+ }
31
+ export declare class CodexBootstrapTracker {
32
+ private processId?;
33
+ private threadId?;
34
+ private threadStartedAt?;
35
+ private sawProgressBeyondThreadStart;
36
+ private bootstrapCompleted;
37
+ private stdout;
38
+ private stderr;
39
+ onSpawn(pid: number): void;
40
+ onStdout(chunk: string): void;
41
+ onStderr(chunk: string): void;
42
+ markBootstrapComplete(): void;
43
+ snapshot(): CodexBootstrapSnapshot;
44
+ private refreshSignals;
45
+ }
46
+ export declare function startCodexBootstrapWatchdog(options: CodexBootstrapWatchdogOptions): {
47
+ result: Promise<CodexBootstrapWatchdogResult | null>;
48
+ stop: () => void;
49
+ };
50
+ export declare function probeCodexBootstrap(options: {
51
+ threadId: string;
52
+ codexHome?: string;
53
+ }): Promise<CodexBootstrapProbe>;
54
+ export declare function collectCodexBootstrapDiagnostics(options: {
55
+ diagnosticsDir: string;
56
+ snapshot: CodexBootstrapSnapshot;
57
+ probe: CodexBootstrapProbe;
58
+ reason: string;
59
+ collectProcessArtifacts: boolean;
60
+ }): Promise<string>;
@@ -0,0 +1,268 @@
1
+ import { execFile } from "node:child_process";
2
+ import { access, mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
3
+ import { constants as fsConstants } from "node:fs";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { DatabaseSync } from "node:sqlite";
7
+ import { promisify } from "node:util";
8
+ const execFileAsync = promisify(execFile);
9
+ const DEFAULT_WATCHDOG_GRACE_MS = 10_000;
10
+ const DEFAULT_WATCHDOG_POLL_MS = 500;
11
+ const DEFAULT_COMMAND_TIMEOUT_MS = 4_000;
12
+ export class CodexBootstrapTracker {
13
+ processId;
14
+ threadId;
15
+ threadStartedAt;
16
+ sawProgressBeyondThreadStart = false;
17
+ bootstrapCompleted = false;
18
+ stdout = "";
19
+ stderr = "";
20
+ onSpawn(pid) {
21
+ this.processId = pid;
22
+ }
23
+ onStdout(chunk) {
24
+ this.stdout += chunk;
25
+ this.refreshSignals();
26
+ }
27
+ onStderr(chunk) {
28
+ this.stderr += chunk;
29
+ }
30
+ markBootstrapComplete() {
31
+ this.bootstrapCompleted = true;
32
+ }
33
+ snapshot() {
34
+ return {
35
+ processId: this.processId,
36
+ threadId: this.threadId,
37
+ threadStartedAt: this.threadStartedAt,
38
+ sawProgressBeyondThreadStart: this.sawProgressBeyondThreadStart,
39
+ bootstrapCompleted: this.bootstrapCompleted,
40
+ stdout: this.stdout,
41
+ stderr: this.stderr,
42
+ };
43
+ }
44
+ refreshSignals() {
45
+ for (const line of this.stdout.split(/\r?\n/)) {
46
+ const candidate = line.trim();
47
+ if (!candidate.startsWith("{")) {
48
+ continue;
49
+ }
50
+ const parsed = tryParseJson(candidate);
51
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
52
+ continue;
53
+ }
54
+ const eventType = parsed.type;
55
+ if (eventType === "thread.started") {
56
+ const threadId = parsed.thread_id;
57
+ if (typeof threadId === "string" && threadId.length > 0) {
58
+ this.threadId = threadId;
59
+ }
60
+ this.threadStartedAt ??= Date.now();
61
+ continue;
62
+ }
63
+ if (eventType === "turn.started" ||
64
+ eventType === "item.completed" ||
65
+ eventType === "turn.completed") {
66
+ this.sawProgressBeyondThreadStart = true;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ export function startCodexBootstrapWatchdog(options) {
72
+ let active = true;
73
+ let resolveStopped;
74
+ const stopped = new Promise((resolve) => {
75
+ resolveStopped = resolve;
76
+ });
77
+ const result = (async () => {
78
+ while (active) {
79
+ const tick = await Promise.race([
80
+ delay(options.pollIntervalMs ?? DEFAULT_WATCHDOG_POLL_MS).then(() => "tick"),
81
+ stopped.then(() => "stopped"),
82
+ ]);
83
+ if (!active || tick === "stopped") {
84
+ return null;
85
+ }
86
+ const snapshot = options.tracker.snapshot();
87
+ if (snapshot.bootstrapCompleted || snapshot.sawProgressBeyondThreadStart) {
88
+ return null;
89
+ }
90
+ if (!snapshot.threadId || !snapshot.threadStartedAt) {
91
+ continue;
92
+ }
93
+ const probe = await probeCodexBootstrap({
94
+ threadId: snapshot.threadId,
95
+ codexHome: options.codexHome,
96
+ });
97
+ if (probe.threadRowFound && probe.rolloutFileExists) {
98
+ options.tracker.markBootstrapComplete();
99
+ return null;
100
+ }
101
+ if (Date.now() - snapshot.threadStartedAt < (options.graceMs ?? DEFAULT_WATCHDOG_GRACE_MS)) {
102
+ continue;
103
+ }
104
+ const reason = "Codex child emitted thread.started but did not materialize state persistence before the bootstrap grace period elapsed.";
105
+ const diagnosticsDir = await collectCodexBootstrapDiagnostics({
106
+ diagnosticsDir: options.diagnosticsDir,
107
+ snapshot,
108
+ probe,
109
+ reason,
110
+ collectProcessArtifacts: options.collectProcessArtifacts ?? true,
111
+ });
112
+ options.killProcess("SIGTERM");
113
+ return {
114
+ diagnosticsDir,
115
+ probe,
116
+ reason,
117
+ };
118
+ }
119
+ return null;
120
+ })();
121
+ return {
122
+ result,
123
+ stop: () => {
124
+ active = false;
125
+ resolveStopped();
126
+ },
127
+ };
128
+ }
129
+ export async function probeCodexBootstrap(options) {
130
+ const codexHome = options.codexHome ?? path.join(os.homedir(), ".codex");
131
+ const stateDbPath = await findNewestStateDbPath(codexHome);
132
+ if (!stateDbPath) {
133
+ return {
134
+ threadRowFound: false,
135
+ rolloutFileExists: false,
136
+ error: `No state*.sqlite file found under ${codexHome}`,
137
+ };
138
+ }
139
+ try {
140
+ // node:sqlite avoids adding a third-party sqlite dependency just for diagnostics.
141
+ const db = new DatabaseSync(stateDbPath, { readOnly: true });
142
+ try {
143
+ const row = db
144
+ .prepare("SELECT rollout_path FROM threads WHERE id = ?")
145
+ .get(options.threadId);
146
+ const rolloutPath = row?.rollout_path;
147
+ const rolloutFileExists = typeof rolloutPath === "string" && rolloutPath.length > 0
148
+ ? await pathExists(rolloutPath)
149
+ : false;
150
+ return {
151
+ stateDbPath,
152
+ threadRowFound: row !== undefined,
153
+ rolloutPath,
154
+ rolloutFileExists,
155
+ };
156
+ }
157
+ finally {
158
+ db.close();
159
+ }
160
+ }
161
+ catch (error) {
162
+ return {
163
+ stateDbPath,
164
+ threadRowFound: false,
165
+ rolloutFileExists: false,
166
+ error: error instanceof Error ? error.message : String(error),
167
+ };
168
+ }
169
+ }
170
+ export async function collectCodexBootstrapDiagnostics(options) {
171
+ await mkdir(options.diagnosticsDir, { recursive: true });
172
+ const summary = {
173
+ capturedAt: new Date().toISOString(),
174
+ reason: options.reason,
175
+ processId: options.snapshot.processId,
176
+ threadId: options.snapshot.threadId,
177
+ threadStartedAt: options.snapshot.threadStartedAt === undefined
178
+ ? undefined
179
+ : new Date(options.snapshot.threadStartedAt).toISOString(),
180
+ sawProgressBeyondThreadStart: options.snapshot.sawProgressBeyondThreadStart,
181
+ bootstrapCompleted: options.snapshot.bootstrapCompleted,
182
+ probe: options.probe,
183
+ };
184
+ await Promise.all([
185
+ writeFile(path.join(options.diagnosticsDir, "summary.json"), `${JSON.stringify(summary, null, 2)}\n`, "utf8"),
186
+ writeFile(path.join(options.diagnosticsDir, "stdout.jsonl"), options.snapshot.stdout, "utf8"),
187
+ writeFile(path.join(options.diagnosticsDir, "stderr.txt"), options.snapshot.stderr, "utf8"),
188
+ ]);
189
+ if (options.collectProcessArtifacts && options.snapshot.processId !== undefined) {
190
+ await captureProcessArtifacts(options.diagnosticsDir, options.snapshot.processId);
191
+ }
192
+ return options.diagnosticsDir;
193
+ }
194
+ async function captureProcessArtifacts(diagnosticsDir, pid) {
195
+ const pidText = String(pid);
196
+ const samplePath = path.join(diagnosticsDir, "sample.txt");
197
+ const [lsofOutput, psOutput] = await Promise.all([
198
+ captureCommand("lsof", ["-p", pidText]),
199
+ captureCommand("ps", ["-M", "-p", pidText, "-o", "pid,state,wchan,command"]),
200
+ ]);
201
+ await Promise.all([
202
+ writeFile(path.join(diagnosticsDir, "lsof.txt"), lsofOutput, "utf8"),
203
+ writeFile(path.join(diagnosticsDir, "ps.txt"), psOutput, "utf8"),
204
+ ]);
205
+ const sampleResult = await captureCommand("sample", [pidText, "1", "1", "-file", samplePath]);
206
+ if (await pathExists(samplePath)) {
207
+ const contents = await readFile(samplePath, "utf8");
208
+ await writeFile(samplePath, contents, "utf8");
209
+ }
210
+ else {
211
+ await writeFile(path.join(diagnosticsDir, "sample.txt"), sampleResult, "utf8");
212
+ }
213
+ }
214
+ async function captureCommand(command, args) {
215
+ try {
216
+ const { stdout, stderr } = await execFileAsync(command, args, {
217
+ timeout: DEFAULT_COMMAND_TIMEOUT_MS,
218
+ maxBuffer: 4 * 1024 * 1024,
219
+ });
220
+ return `${stdout}${stderr ? `\n[stderr]\n${stderr}` : ""}`.trim();
221
+ }
222
+ catch (error) {
223
+ return `Failed to capture ${command} ${args.join(" ")}: ${error instanceof Error ? error.message : String(error)}\n`;
224
+ }
225
+ }
226
+ async function findNewestStateDbPath(codexHome) {
227
+ try {
228
+ const entries = await readdir(codexHome, { withFileTypes: true });
229
+ const stateFiles = await Promise.all(entries
230
+ .filter((entry) => entry.isFile() && /^state.*\.sqlite$/.test(entry.name))
231
+ .map(async (entry) => {
232
+ const filePath = path.join(codexHome, entry.name);
233
+ const metadata = await stat(filePath);
234
+ return {
235
+ filePath,
236
+ modifiedAtMs: metadata.mtimeMs,
237
+ };
238
+ }));
239
+ stateFiles.sort((left, right) => right.modifiedAtMs - left.modifiedAtMs);
240
+ return stateFiles[0]?.filePath;
241
+ }
242
+ catch {
243
+ return undefined;
244
+ }
245
+ }
246
+ async function pathExists(targetPath) {
247
+ try {
248
+ await access(targetPath, fsConstants.F_OK);
249
+ return true;
250
+ }
251
+ catch {
252
+ return false;
253
+ }
254
+ }
255
+ function tryParseJson(value) {
256
+ try {
257
+ return JSON.parse(value);
258
+ }
259
+ catch {
260
+ return undefined;
261
+ }
262
+ }
263
+ function delay(ms) {
264
+ return new Promise((resolve) => {
265
+ setTimeout(resolve, ms);
266
+ });
267
+ }
268
+ //# sourceMappingURL=codex-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-bootstrap.js","sourceRoot":"","sources":["../../../src/infrastructure/diagnostics/codex-bootstrap.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export interface ProcessExecutionInput {
4
4
  cwd: string;
5
5
  env: NodeJS.ProcessEnv;
6
6
  signal?: AbortSignal;
7
+ observer?: ProcessExecutionObserver;
7
8
  }
8
9
  export interface InteractiveProcessInput {
9
10
  command: string;
@@ -15,10 +16,20 @@ export interface ProcessExecutionOutput {
15
16
  exitCode: number;
16
17
  stdout: string;
17
18
  stderr: string;
19
+ signal?: NodeJS.Signals | null;
18
20
  }
19
21
  export interface ProcessExecutor {
20
22
  execute(input: ProcessExecutionInput): Promise<ProcessExecutionOutput>;
21
23
  }
24
+ export interface ProcessExecutionObserver {
25
+ onSpawn?(spawn: ProcessSpawnHandle): void;
26
+ onStdout?(chunk: string): void;
27
+ onStderr?(chunk: string): void;
28
+ }
29
+ export interface ProcessSpawnHandle {
30
+ pid: number;
31
+ kill(signal?: NodeJS.Signals): boolean;
32
+ }
22
33
  export interface InteractiveProcessRunner {
23
34
  run(input: InteractiveProcessInput): Promise<number>;
24
35
  }
@@ -8,6 +8,12 @@ export class ChildProcessExecutor {
8
8
  env: input.env,
9
9
  stdio: ["ignore", "pipe", "pipe"],
10
10
  });
11
+ if (child.pid !== undefined) {
12
+ input.observer?.onSpawn?.({
13
+ pid: child.pid,
14
+ kill: (signal) => child.kill(signal),
15
+ });
16
+ }
11
17
  let stdout = "";
12
18
  let stderr = "";
13
19
  let settled = false;
@@ -21,10 +27,14 @@ export class ChildProcessExecutor {
21
27
  };
22
28
  input.signal?.addEventListener("abort", abort, { once: true });
23
29
  child.stdout.on("data", (chunk) => {
24
- stdout += chunk.toString();
30
+ const text = chunk.toString();
31
+ stdout += text;
32
+ input.observer?.onStdout?.(text);
25
33
  });
26
34
  child.stderr.on("data", (chunk) => {
27
- stderr += chunk.toString();
35
+ const text = chunk.toString();
36
+ stderr += text;
37
+ input.observer?.onStderr?.(text);
28
38
  });
29
39
  child.on("error", (error) => {
30
40
  if (settled) {
@@ -35,7 +45,7 @@ export class ChildProcessExecutor {
35
45
  causeData: { command: input.command, args: input.args },
36
46
  }));
37
47
  });
38
- child.on("close", (exitCode) => {
48
+ child.on("close", (exitCode, signal) => {
39
49
  if (settled) {
40
50
  return;
41
51
  }
@@ -45,6 +55,7 @@ export class ChildProcessExecutor {
45
55
  exitCode: exitCode ?? 1,
46
56
  stdout,
47
57
  stderr,
58
+ signal,
48
59
  });
49
60
  });
50
61
  });
@@ -1 +1 @@
1
- {"version":3,"file":"process-executor.js","sourceRoot":"","sources":["../../../src/infrastructure/process/process-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-executor.js","sourceRoot":"","sources":["../../../src/infrastructure/process/process-executor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rk0429/agentic-relay",
3
- "version": "16.0.0",
3
+ "version": "16.1.0",
4
4
  "displayName": "agentic-relay",
5
5
  "description": "Unified MCP relay for Claude Code, Codex CLI, and Gemini CLI",
6
6
  "type": "module",
@@ -89,6 +89,7 @@
89
89
  "typecheck": "tsc -p tsconfig.json --noEmit",
90
90
  "test": "vitest run",
91
91
  "benchmark:nf": "node scripts/benchmark-nonfunctional.mjs",
92
+ "stress:codex-bootstrap": "tsx scripts/stress-codex-bootstrap.ts",
92
93
  "relay": "tsx src/bin/relay.ts",
93
94
  "vscode:prepublish": "pnpm build",
94
95
  "prepublishOnly": "pnpm typecheck && pnpm test && pnpm build"
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env tsx
2
+ import { spawn } from "node:child_process";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import process from "node:process";
6
+ import {
7
+ CodexBootstrapTracker,
8
+ probeCodexBootstrap,
9
+ startCodexBootstrapWatchdog,
10
+ } from "../src/infrastructure/diagnostics/codex-bootstrap.js";
11
+
12
+ interface CliOptions {
13
+ count: number;
14
+ concurrency: number;
15
+ prompt: string;
16
+ graceMs: number;
17
+ pollMs: number;
18
+ cwd: string;
19
+ codexCommand: string;
20
+ outDir: string;
21
+ }
22
+
23
+ interface CaseResult {
24
+ caseId: string;
25
+ status: "success" | "process_failed" | "bootstrap_stalled";
26
+ exitCode: number;
27
+ signal: NodeJS.Signals | null;
28
+ processId?: number;
29
+ threadId?: string;
30
+ bootstrapCompleted: boolean;
31
+ diagnosticsDir?: string;
32
+ rolloutPath?: string;
33
+ }
34
+
35
+ async function main(): Promise<void> {
36
+ const options = parseArgs(process.argv.slice(2));
37
+ await mkdir(options.outDir, { recursive: true });
38
+
39
+ const results = await runWithConcurrency(options);
40
+ const summary = {
41
+ generatedAt: new Date().toISOString(),
42
+ options,
43
+ total: results.length,
44
+ byStatus: countByStatus(results),
45
+ results,
46
+ };
47
+
48
+ const summaryPath = path.join(options.outDir, "summary.json");
49
+ await writeFile(summaryPath, `${JSON.stringify(summary, null, 2)}\n`, "utf8");
50
+
51
+ process.stdout.write(
52
+ [
53
+ `out_dir=${options.outDir}`,
54
+ `summary=${summaryPath}`,
55
+ `total=${summary.total}`,
56
+ `success=${summary.byStatus.success ?? 0}`,
57
+ `process_failed=${summary.byStatus.process_failed ?? 0}`,
58
+ `bootstrap_stalled=${summary.byStatus.bootstrap_stalled ?? 0}`,
59
+ ].join("\n") + "\n",
60
+ );
61
+ }
62
+
63
+ async function runWithConcurrency(options: CliOptions): Promise<CaseResult[]> {
64
+ const pending = Array.from({ length: options.count }, (_, index) => index + 1);
65
+ const results: CaseResult[] = [];
66
+
67
+ await Promise.all(
68
+ Array.from({ length: options.concurrency }, async () => {
69
+ while (pending.length > 0) {
70
+ const next = pending.shift();
71
+ if (next === undefined) {
72
+ return;
73
+ }
74
+
75
+ const result = await runCase(next, options);
76
+ results.push(result);
77
+ }
78
+ }),
79
+ );
80
+
81
+ return results.sort((left, right) => left.caseId.localeCompare(right.caseId));
82
+ }
83
+
84
+ async function runCase(index: number, options: CliOptions): Promise<CaseResult> {
85
+ const caseId = `case-${String(index).padStart(3, "0")}`;
86
+ const caseDir = path.join(options.outDir, caseId);
87
+ await mkdir(caseDir, { recursive: true });
88
+
89
+ const tracker = new CodexBootstrapTracker();
90
+
91
+ return await new Promise<CaseResult>((resolve, reject) => {
92
+ const child = spawn(
93
+ options.codexCommand,
94
+ ["exec", "--json", options.prompt],
95
+ {
96
+ cwd: options.cwd,
97
+ stdio: ["ignore", "pipe", "pipe"],
98
+ },
99
+ );
100
+
101
+ if (child.pid !== undefined) {
102
+ tracker.onSpawn(child.pid);
103
+ }
104
+
105
+ child.stdout.on("data", (chunk: Buffer | string) => {
106
+ tracker.onStdout(chunk.toString());
107
+ });
108
+ child.stderr.on("data", (chunk: Buffer | string) => {
109
+ tracker.onStderr(chunk.toString());
110
+ });
111
+
112
+ child.on("error", reject);
113
+
114
+ const watchdog = startCodexBootstrapWatchdog({
115
+ tracker,
116
+ killProcess: (signal?: NodeJS.Signals) => child.kill(signal),
117
+ diagnosticsDir: path.join(caseDir, "diagnostics"),
118
+ graceMs: options.graceMs,
119
+ pollIntervalMs: options.pollMs,
120
+ collectProcessArtifacts: true,
121
+ });
122
+
123
+ child.on("close", async (exitCode, signal) => {
124
+ watchdog.stop();
125
+ const watchdogResult = await watchdog.result;
126
+ const snapshot = tracker.snapshot();
127
+ const probe =
128
+ snapshot.threadId === undefined
129
+ ? {
130
+ threadRowFound: false,
131
+ rolloutFileExists: false,
132
+ }
133
+ : await probeCodexBootstrap({ threadId: snapshot.threadId });
134
+
135
+ const result: CaseResult = {
136
+ caseId,
137
+ status:
138
+ watchdogResult !== null
139
+ ? "bootstrap_stalled"
140
+ : (exitCode ?? 1) === 0
141
+ ? "success"
142
+ : "process_failed",
143
+ exitCode: exitCode ?? 1,
144
+ signal,
145
+ processId: snapshot.processId,
146
+ threadId: snapshot.threadId,
147
+ bootstrapCompleted: snapshot.bootstrapCompleted,
148
+ diagnosticsDir: watchdogResult?.diagnosticsDir,
149
+ rolloutPath: probe.rolloutPath,
150
+ };
151
+
152
+ await writeFile(
153
+ path.join(caseDir, "result.json"),
154
+ `${JSON.stringify(result, null, 2)}\n`,
155
+ "utf8",
156
+ );
157
+ resolve(result);
158
+ });
159
+ });
160
+ }
161
+
162
+ function countByStatus(results: CaseResult[]): Record<CaseResult["status"], number> {
163
+ return results.reduce<Record<CaseResult["status"], number>>(
164
+ (counts, result) => {
165
+ counts[result.status] = (counts[result.status] ?? 0) + 1;
166
+ return counts;
167
+ },
168
+ {
169
+ success: 0,
170
+ process_failed: 0,
171
+ bootstrap_stalled: 0,
172
+ },
173
+ );
174
+ }
175
+
176
+ function parseArgs(argv: string[]): CliOptions {
177
+ if (argv.includes("--help")) {
178
+ printHelp();
179
+ process.exit(0);
180
+ }
181
+
182
+ return {
183
+ count: readNumberFlag(argv, "--count", 10),
184
+ concurrency: readNumberFlag(argv, "--concurrency", 2),
185
+ prompt: readStringFlag(argv, "--prompt", "Respond with exactly OK."),
186
+ graceMs: readNumberFlag(argv, "--grace-ms", 10_000),
187
+ pollMs: readNumberFlag(argv, "--poll-ms", 500),
188
+ cwd: readStringFlag(argv, "--cwd", process.cwd()),
189
+ codexCommand: readStringFlag(argv, "--codex-command", "codex"),
190
+ outDir: readStringFlag(
191
+ argv,
192
+ "--out-dir",
193
+ path.join(process.cwd(), "tmp", `codex-bootstrap-stress-${Date.now()}`),
194
+ ),
195
+ };
196
+ }
197
+
198
+ function readNumberFlag(argv: string[], flag: string, fallback: number): number {
199
+ const raw = readStringFlag(argv, flag, String(fallback));
200
+ const parsed = Number.parseInt(raw, 10);
201
+ if (!Number.isInteger(parsed) || parsed <= 0) {
202
+ throw new Error(`${flag} must be a positive integer. Received: ${raw}`);
203
+ }
204
+ return parsed;
205
+ }
206
+
207
+ function readStringFlag(argv: string[], flag: string, fallback: string): string {
208
+ const index = argv.indexOf(flag);
209
+ if (index === -1) {
210
+ return fallback;
211
+ }
212
+
213
+ const value = argv[index + 1];
214
+ if (!value) {
215
+ throw new Error(`Missing value for ${flag}`);
216
+ }
217
+ return value;
218
+ }
219
+
220
+ function printHelp(): void {
221
+ process.stdout.write(
222
+ [
223
+ "Usage: pnpm stress:codex-bootstrap -- [options]",
224
+ "",
225
+ "Options:",
226
+ " --count <n> Number of codex exec runs to launch (default: 10)",
227
+ " --concurrency <n> Concurrent launches (default: 2)",
228
+ " --prompt <text> Prompt passed to codex exec",
229
+ " --grace-ms <ms> Bootstrap grace period before stall capture",
230
+ " --poll-ms <ms> Poll interval for bootstrap checks",
231
+ " --cwd <path> Working directory for codex exec",
232
+ " --codex-command <c> Codex executable to invoke (default: codex)",
233
+ " --out-dir <path> Output directory for per-case artifacts",
234
+ ].join("\n") + "\n",
235
+ );
236
+ }
237
+
238
+ main().catch((error) => {
239
+ const message = error instanceof Error ? error.message : String(error);
240
+ process.stderr.write(`${message}\n`);
241
+ process.exitCode = 1;
242
+ });