borgmcp 5.2.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/agent-runtime.d.ts +3 -4
  2. package/dist/agent-runtime.d.ts.map +1 -1
  3. package/dist/agent-runtime.js +9 -5
  4. package/dist/agent-runtime.js.map +1 -1
  5. package/dist/agent-session-identity.d.ts +13 -0
  6. package/dist/agent-session-identity.d.ts.map +1 -0
  7. package/dist/agent-session-identity.js +106 -0
  8. package/dist/agent-session-identity.js.map +1 -0
  9. package/dist/assimilate-cmd.d.ts +1 -11
  10. package/dist/assimilate-cmd.d.ts.map +1 -1
  11. package/dist/assimilate-cmd.js +37 -48
  12. package/dist/assimilate-cmd.js.map +1 -1
  13. package/dist/assimilate-deps.d.ts.map +1 -1
  14. package/dist/assimilate-deps.js +1 -4
  15. package/dist/assimilate-deps.js.map +1 -1
  16. package/dist/claude.d.ts.map +1 -1
  17. package/dist/claude.js +36 -77
  18. package/dist/claude.js.map +1 -1
  19. package/dist/codex-app-server.d.ts +4 -6
  20. package/dist/codex-app-server.d.ts.map +1 -1
  21. package/dist/codex-app-server.js +4 -25
  22. package/dist/codex-app-server.js.map +1 -1
  23. package/dist/codex-app-wake.d.ts +8 -10
  24. package/dist/codex-app-wake.d.ts.map +1 -1
  25. package/dist/codex-app-wake.js +49 -66
  26. package/dist/codex-app-wake.js.map +1 -1
  27. package/dist/codex-launch.d.ts +15 -24
  28. package/dist/codex-launch.d.ts.map +1 -1
  29. package/dist/codex-launch.js +29 -55
  30. package/dist/codex-launch.js.map +1 -1
  31. package/dist/codex-remote.d.ts +15 -8
  32. package/dist/codex-remote.d.ts.map +1 -1
  33. package/dist/codex-remote.js +71 -70
  34. package/dist/codex-remote.js.map +1 -1
  35. package/dist/codex-wake-resolve.d.ts +12 -31
  36. package/dist/codex-wake-resolve.d.ts.map +1 -1
  37. package/dist/codex-wake-resolve.js +21 -38
  38. package/dist/codex-wake-resolve.js.map +1 -1
  39. package/dist/config-utils.js +2 -2
  40. package/dist/config-utils.js.map +1 -1
  41. package/dist/cubes.d.ts +0 -17
  42. package/dist/cubes.d.ts.map +1 -1
  43. package/dist/cubes.js +0 -81
  44. package/dist/cubes.js.map +1 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +10 -5
  47. package/dist/index.js.map +1 -1
  48. package/dist/lifecycle-log-guard.d.ts +6 -8
  49. package/dist/lifecycle-log-guard.d.ts.map +1 -1
  50. package/dist/lifecycle-log-guard.js +74 -22
  51. package/dist/lifecycle-log-guard.js.map +1 -1
  52. package/dist/log-stream.d.ts.map +1 -1
  53. package/dist/log-stream.js +4 -1
  54. package/dist/log-stream.js.map +1 -1
  55. package/dist/opencode-drone.d.ts +2 -0
  56. package/dist/opencode-drone.d.ts.map +1 -1
  57. package/dist/opencode-drone.js +16 -0
  58. package/dist/opencode-drone.js.map +1 -1
  59. package/dist/regen-format.js +1 -1
  60. package/dist/regen-format.js.map +1 -1
  61. package/dist/regen.js +11 -1
  62. package/dist/regen.js.map +1 -1
  63. package/docs/SESSION_IDENTITY.md +15 -0
  64. package/package.json +1 -1
  65. package/src/agent-runtime.ts +9 -5
  66. package/src/agent-session-identity.ts +98 -0
  67. package/src/assimilate-cmd.ts +35 -58
  68. package/src/assimilate-deps.ts +0 -4
  69. package/src/claude.ts +34 -81
  70. package/src/codex-app-server.ts +8 -25
  71. package/src/codex-app-wake.ts +46 -73
  72. package/src/codex-launch.ts +43 -76
  73. package/src/codex-remote.ts +90 -82
  74. package/src/codex-wake-resolve.ts +26 -47
  75. package/src/config-utils.ts +2 -2
  76. package/src/cubes.ts +2 -100
  77. package/src/index.ts +10 -5
  78. package/src/lifecycle-log-guard.ts +70 -26
  79. package/src/log-stream.ts +4 -1
  80. package/src/opencode-drone.ts +14 -0
  81. package/src/regen-format.ts +1 -1
  82. package/src/regen.ts +7 -1
@@ -1,5 +1,8 @@
1
1
  import { wakePathArming } from './regen-format.js';
2
2
  import { OPENCODE_WAKE_PATH_GUIDANCE } from './opencode-wake-copy.js';
3
+ import { withCodexCwdArg } from './codex-remote.js';
4
+ import { codexBorgSessionConfigArgs } from './launch-gate.js';
5
+ import { codexAgentKindConfigArgs, codexRemoteWakeConfigArgs, codexStateRootConfigArgs, } from './agent-runtime.js';
3
6
  /**
4
7
  * The claude kickoff prompt's wake-path section (gh#929) — the SAME shared
5
8
  * `wakePathArming` the SessionStart hook + /clear orientation use (one place,
@@ -26,12 +29,8 @@ export function buildAgentKickoffPrompt(options) {
26
29
  // clause (Coordinator/Queen-only; belongs in role-text, not injected for
27
30
  // ALL). KEPT: core call + MCP-disconnect recovery + the wake-path arming
28
31
  // (claude via the shared monitorClause = buildKickoffWakePathClause; codex
29
- // via codexWakePathClause) + the claude/codex/opencode cli-branching.
30
- const codexNonceClause = options.codexWakeNonce
31
- ? `Wake target nonce: ${options.codexWakeNonce}. `
32
- : '';
33
- const codexWakePathClause = options.codexWakePathClause ??
34
- `Codex Borg wakeups use remote-control when available; if no wake arrives, run borg_regen manually when returning to the session.`;
32
+ // via the Borg-owned remote socket clause) + the cli-specific branching.
33
+ const codexWakePathClause = 'Codex Borg wakeups use the Borg-owned remote-control socket for this session.';
35
34
  const opencodeWakePathClause = OPENCODE_WAKE_PATH_GUIDANCE;
36
35
  const wakeClause = options.cli === 'claude'
37
36
  ? options.monitorClause
@@ -39,7 +38,6 @@ export function buildAgentKickoffPrompt(options) {
39
38
  ? codexWakePathClause
40
39
  : opencodeWakePathClause;
41
40
  return (`Call borg_regen and follow the playbook in its response. ` +
42
- codexNonceClause +
43
41
  `Note: at session start the borg MCP server is still spinning up in ` +
44
42
  `parallel — if a system reminder claims "MCP server disconnected" or ` +
45
43
  `the borg tools are not yet registered, do NOT bail. Make one recovery attempt via ` +
@@ -49,55 +47,31 @@ export function buildAgentKickoffPrompt(options) {
49
47
  `Never start, stop, restart, update, or recover the Borg server. ` +
50
48
  wakeClause);
51
49
  }
52
- export function socketPathFromRemoteArgs(args) {
53
- const index = args.indexOf('--remote');
54
- if (index < 0)
55
- return null;
56
- const value = args[index + 1];
57
- if (!value?.startsWith('unix://'))
58
- return null;
59
- return value.slice('unix://'.length);
60
- }
61
- export function threadIdFromPassthroughArgs(args) {
62
- if (args[0] === 'resume' && args[1] && !args[1].startsWith('-'))
63
- return args[1];
64
- const resumeIndex = args.indexOf('--resume');
65
- if (resumeIndex >= 0 && args[resumeIndex + 1])
66
- return args[resumeIndex + 1];
67
- return null;
68
- }
69
- export async function recordCodexWakeTarget(options) {
70
- try {
71
- const explicitThreadId = options.passthroughArgs
72
- ? threadIdFromPassthroughArgs(options.passthroughArgs)
73
- : null;
74
- if (explicitThreadId) {
75
- await options.deps.setCodexWakeTarget(options.cubeId, options.droneId, {
76
- threadId: explicitThreadId,
77
- socketPath: options.socketPath,
78
- });
79
- return;
80
- }
81
- const deadline = Date.now() + 15_000;
82
- while (Date.now() < deadline) {
83
- const threadId = await options.deps.findLoadedCodexThread({
84
- socketPath: options.socketPath,
85
- cwd: options.cwd,
86
- previewIncludes: options.previewNeedle,
87
- updatedAfter: options.launchedAtSeconds - 5,
88
- });
89
- if (threadId) {
90
- await options.deps.setCodexWakeTarget(options.cubeId, options.droneId, {
91
- threadId,
92
- socketPath: options.socketPath,
93
- });
94
- return;
95
- }
96
- await new Promise((resolve) => setTimeout(resolve, 500));
97
- }
50
+ export function buildCodexLaunchArgs(options) {
51
+ const passthroughArgs = options.passthroughArgs ?? [];
52
+ if (passthroughArgs.some((arg) => arg === '--remote' || arg.startsWith('--remote='))) {
53
+ return {
54
+ ready: false,
55
+ reason: 'Borg owns Codex remote control; remove the passthrough --remote option and retry.',
56
+ };
98
57
  }
99
- catch {
100
- // Best-effort mapping: launch still succeeds and manual regen remains available.
58
+ const remoteValue = `unix://${options.remote.server.socketPath}`;
59
+ if (options.remote.args.length !== 2 || options.remote.args[0] !== '--remote' || options.remote.args[1] !== remoteValue) {
60
+ return { ready: false, reason: 'The Borg-owned Codex remote socket is unavailable.' };
101
61
  }
62
+ return {
63
+ ready: true,
64
+ args: [
65
+ ...(options.accessArgs ?? []),
66
+ ...(options.approvalArgs ?? []),
67
+ ...codexBorgSessionConfigArgs(),
68
+ ...codexAgentKindConfigArgs(),
69
+ ...codexRemoteWakeConfigArgs(),
70
+ ...codexStateRootConfigArgs(),
71
+ ...(options.seatExpectationArgs ?? []),
72
+ ...options.remote.args,
73
+ ...withCodexCwdArg([...passthroughArgs, options.kickoff], options.cwd),
74
+ ],
75
+ };
102
76
  }
103
77
  //# sourceMappingURL=codex-launch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-launch.js","sourceRoot":"","sources":["../src/codex-launch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-launch.js","sourceRoot":"","sources":["../src/codex-launch.ts"],"names":[],"mappings":"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"}
@@ -17,13 +17,19 @@ export interface CodexAppServerHandle {
17
17
  /** Kill the owned app-server + remove its socket/pidfile. Wire to TUI exit. */
18
18
  cleanup: () => void;
19
19
  }
20
- export interface CodexRemoteLaunch {
20
+ export interface CodexRemoteReadyLaunch {
21
+ ready: true;
21
22
  args: string[];
22
23
  env: Record<string, string>;
23
- warning?: string;
24
- /** Present when borg owns a per-launch app-server that must be cleaned up on TUI exit. */
25
- server?: CodexAppServerHandle;
24
+ /** Borg owns this per-launch app-server and must clean it up on TUI exit. */
25
+ server: CodexAppServerHandle;
26
26
  }
27
+ export interface CodexRemoteLaunchRefusal {
28
+ ready: false;
29
+ reason: string;
30
+ stderr: string;
31
+ }
32
+ export type CodexRemoteLaunch = CodexRemoteReadyLaunch | CodexRemoteLaunchRefusal;
27
33
  export interface CodexChild {
28
34
  pid: number | undefined;
29
35
  kill: () => void;
@@ -48,9 +54,11 @@ export interface PrepareCodexRemoteDeps {
48
54
  runtimeDir?: string;
49
55
  /** Unique socket id generator (default 32-hex). Injected for deterministic tests. */
50
56
  socketId?: () => string;
51
- /** Readiness timeout (default 30000ms) + poll interval (default 250ms). */
57
+ /** Readiness timeout (default 60000ms) + poll interval (default 250ms). */
52
58
  readyTimeoutMs?: number;
53
59
  pollIntervalMs?: number;
60
+ /** Wall clock used to enforce the readiness budget. */
61
+ now?: () => number;
54
62
  /** Whether a pid is alive (default process.kill(pid, 0)). Injected for tests. */
55
63
  isAlive?: (pid: number) => boolean;
56
64
  }
@@ -102,9 +110,8 @@ export declare function checkCodexBridgeHealthy(socketPath: string | null, deps?
102
110
  }): boolean | null;
103
111
  /**
104
112
  * Start a borg-owned per-launch Codex app-server, probe it for readiness, and
105
- * return the `--remote` launch args + an owned handle (or a fail-loud warning).
106
- * Async + lifecycle-owning: the caller MUST call `result.server?.cleanup()` on
107
- * TUI exit.
113
+ * return the `--remote` launch args + an owned handle, or a typed refusal after
114
+ * one retry. The caller MUST call `result.server.cleanup()` on TUI exit.
108
115
  */
109
116
  export declare function prepareCodexRemoteLaunch(deps: PrepareCodexRemoteDeps): Promise<CodexRemoteLaunch>;
110
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"codex-remote.d.ts","sourceRoot":"","sources":["../src/codex-remote.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,qBAAqB,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,kFAAkF;IAClF,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,UAAU,CAAC;IACnD,4FAA4F;IAC5F,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,6EAA6E;IAC7E,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACxB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAED,eAAO,MAAM,wBAAwB,QAAyC,CAAC;AAyC/E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAGrE;AAED;;;6DAG6D;AAC7D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyBjF;AAYD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,IAAI,GAAE;IACJ,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC,GACL,OAAO,GAAG,IAAI,CAahB;AAwDD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CA+F5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAC5C,sBAAsB,EACtB,gBAAgB,GAAG,YAAY,GAAG,OAAO,CAC1C,CAkGA"}
1
+ {"version":3,"file":"codex-remote.d.ts","sourceRoot":"","sources":["../src/codex-remote.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import { codexAppServerSocketConfigArgs } from './codex-wake-resolve.js';
8
8
  import { BORG_AGENT_KIND_ENV, BORG_CODEX_REMOTE_WAKE_ENV, codexAgentKindConfigArgs, codexRemoteWakeConfigArgs, codexStateRootConfigArgs, } from './agent-runtime.js';
9
9
  import { borgConfigRoot } from './private-root.js';
10
10
  export const DEFAULT_CODEX_REMOTE_DIR = join(borgConfigRoot(), 'codex-remote');
11
- const DEFAULT_CODEX_REMOTE_READY_TIMEOUT_MS = 30_000;
11
+ const DEFAULT_CODEX_REMOTE_READY_TIMEOUT_MS = 60_000;
12
12
  const MAX_CODEX_APP_SERVER_STDERR_CHARS = 16_384;
13
13
  /**
14
14
  * Keep app-server failure details useful without copying credentials or local
@@ -173,8 +173,8 @@ function pruneStaleSockets(runtimeDir, isAlive) {
173
173
  }
174
174
  }
175
175
  }
176
- function failLoud(reason) {
177
- return { args: [], env: {}, warning: reason };
176
+ function refuse(reason, stderr = '') {
177
+ return { ready: false, reason, stderr: sanitizeCodexDiagnostic(stderr).trim() };
178
178
  }
179
179
  function formatExitReason(diagnostics) {
180
180
  if (diagnostics.error)
@@ -185,21 +185,17 @@ function formatExitReason(diagnostics) {
185
185
  return `signal ${diagnostics.signal}`;
186
186
  return 'unknown exit status';
187
187
  }
188
- function formatStderr(stderr) {
189
- const trimmed = sanitizeCodexDiagnostic(stderr).trim();
190
- return trimmed ? ` Stderr: ${trimmed}` : '';
191
- }
192
188
  /**
193
189
  * Start a borg-owned per-launch Codex app-server, probe it for readiness, and
194
- * return the `--remote` launch args + an owned handle (or a fail-loud warning).
195
- * Async + lifecycle-owning: the caller MUST call `result.server?.cleanup()` on
196
- * TUI exit.
190
+ * return the `--remote` launch args + an owned handle, or a typed refusal after
191
+ * one retry. The caller MUST call `result.server.cleanup()` on TUI exit.
197
192
  */
198
193
  export async function prepareCodexRemoteLaunch(deps) {
199
194
  const runtimeDir = deps.runtimeDir ?? DEFAULT_CODEX_REMOTE_DIR;
200
195
  const isAlive = deps.isAlive ?? defaultIsAlive;
201
196
  const readyTimeoutMs = deps.readyTimeoutMs ?? DEFAULT_CODEX_REMOTE_READY_TIMEOUT_MS;
202
197
  const pollIntervalMs = deps.pollIntervalMs ?? 250;
198
+ const now = deps.now ?? Date.now;
203
199
  // 1. 0700 owned dir + prune crashed prior sockets (concurrent-safe via pid liveness).
204
200
  try {
205
201
  mkdirSync(runtimeDir, { recursive: true, mode: 0o700 });
@@ -207,80 +203,85 @@ export async function prepareCodexRemoteLaunch(deps) {
207
203
  pruneStaleSockets(runtimeDir, isAlive);
208
204
  }
209
205
  catch (err) {
210
- return failLoud(`Codex remote-wake disabled: could not prepare ${runtimeDir} (${err?.message ?? err}); run borg_regen manually.`);
211
- }
212
- // 2. unique, non-predictable socket path inside the owned dir.
213
- const id = (deps.socketId ?? (() => randomBytes(16).toString('hex')))();
214
- const socketPath = join(runtimeDir, `${id}.sock`);
215
- const pidPath = join(runtimeDir, `${id}.pid`);
216
- // 3. spawn the long-lived app-server.
217
- let child;
218
- try {
219
- child = deps.spawnAppServer(socketPath);
220
- }
221
- catch (err) {
222
- safeRm(socketPath);
223
- return failLoud(`Codex remote-wake disabled: could not start \`codex app-server\` (${sanitizeCodexDiagnostic(String(err?.message ?? err))}) — ` +
224
- `confirm the Codex executable is installed and available on PATH. ` +
225
- `Remote wake is unavailable for this session; run borg_regen manually to catch up.`);
206
+ return refuse(`could not prepare the Codex app-server runtime directory (${sanitizeCodexDiagnostic(String(err?.message ?? err))})`);
226
207
  }
227
- if (child.pid != null) {
208
+ let lastRefusal = refuse('the Codex app-server did not become ready');
209
+ for (let launchAttempt = 0; launchAttempt < 2; launchAttempt += 1) {
210
+ // Each retry owns a fresh, non-predictable socket and pidfile.
211
+ const id = (deps.socketId ?? (() => randomBytes(16).toString('hex')))();
212
+ const socketPath = join(runtimeDir, `${id}.sock`);
213
+ const pidPath = join(runtimeDir, `${id}.pid`);
214
+ let child;
228
215
  try {
229
- writeFileSync(pidPath, String(child.pid));
216
+ child = deps.spawnAppServer(socketPath);
230
217
  }
231
- catch {
232
- // pidfile is only for stale-prune; launch still proceeds.
233
- }
234
- }
235
- const cleanup = () => {
236
- try {
237
- child.kill();
238
- }
239
- catch {
240
- // best-effort
241
- }
242
- safeRm(socketPath);
243
- safeRm(pidPath);
244
- };
245
- // 4. readiness via a real protocol round-trip — bounded attempts (no clock dep).
246
- const attempts = Math.max(1, Math.ceil(readyTimeoutMs / pollIntervalMs));
247
- let ready = false;
248
- let exitDiagnostics;
249
- for (let i = 0; i < attempts && !ready; i++) {
250
- try {
251
- ready = await deps.probeReady(socketPath);
218
+ catch (err) {
219
+ safeRm(socketPath);
220
+ safeRm(pidPath);
221
+ lastRefusal = refuse(`could not start \`codex app-server\` (${sanitizeCodexDiagnostic(String(err?.message ?? err))}); confirm the Codex executable is installed and available on PATH`);
222
+ continue;
252
223
  }
253
- catch {
254
- ready = false;
224
+ if (child.pid != null) {
225
+ try {
226
+ writeFileSync(pidPath, String(child.pid));
227
+ }
228
+ catch {
229
+ // pidfile is only for stale-prune; launch still proceeds.
230
+ }
255
231
  }
256
- if (!ready) {
232
+ const cleanup = () => {
233
+ try {
234
+ child.kill();
235
+ }
236
+ catch {
237
+ // best-effort
238
+ }
239
+ safeRm(socketPath);
240
+ safeRm(pidPath);
241
+ };
242
+ // Readiness is bounded by elapsed wall time, so slow protocol probes count
243
+ // against the same cold-start budget as the poll sleeps.
244
+ const startedAt = now();
245
+ let ready = false;
246
+ let exitDiagnostics;
247
+ for (;;) {
248
+ try {
249
+ ready = await deps.probeReady(socketPath);
250
+ }
251
+ catch {
252
+ ready = false;
253
+ }
254
+ if (ready)
255
+ break;
257
256
  const diagnostics = child.diagnostics?.();
258
257
  if (diagnostics?.exited) {
259
258
  exitDiagnostics = diagnostics;
260
259
  break;
261
260
  }
261
+ const remainingMs = readyTimeoutMs - (now() - startedAt);
262
+ if (remainingMs <= 0)
263
+ break;
264
+ await deps.sleep(Math.min(pollIntervalMs, remainingMs));
262
265
  }
263
- if (!ready && i < attempts - 1)
264
- await deps.sleep(pollIntervalMs);
265
- }
266
- if (!ready) {
267
266
  const diagnostics = exitDiagnostics ?? child.diagnostics?.();
268
- cleanup();
269
- if (diagnostics?.exited) {
270
- return failLoud(`Codex remote-wake disabled: \`codex app-server\` exited before becoming ready ` +
271
- `(${formatExitReason(diagnostics)}).${formatStderr(diagnostics.stderr)} ` +
272
- `Run borg_regen manually to catch up.`);
267
+ if (!ready) {
268
+ cleanup();
269
+ if (diagnostics?.exited) {
270
+ lastRefusal = refuse(`\`codex app-server\` exited before becoming ready (${formatExitReason(diagnostics)})`, diagnostics.stderr);
271
+ }
272
+ else {
273
+ lastRefusal = refuse(`\`codex app-server\` remained running but did not become ready within ${readyTimeoutMs}ms`, diagnostics?.stderr ?? '');
274
+ }
275
+ continue;
273
276
  }
274
- return failLoud(`Codex remote-wake disabled: \`codex app-server\` remained running but did not become ready ` +
275
- `at ${sanitizeCodexDiagnostic(socketPath)} within ${readyTimeoutMs}ms.${formatStderr(diagnostics?.stderr ?? '')} ` +
276
- `Run borg_regen manually to catch up.`);
277
+ return {
278
+ ready: true,
279
+ args: ['--remote', `unix://${socketPath}`],
280
+ env: { [BORG_CODEX_REMOTE_WAKE_ENV]: '1' },
281
+ server: { pid: child.pid, socketPath, cleanup },
282
+ };
277
283
  }
278
- // 5. ready → owned remote launch.
279
- return {
280
- args: ['--remote', `unix://${socketPath}`],
281
- env: { [BORG_CODEX_REMOTE_WAKE_ENV]: '1' },
282
- server: { pid: child.pid, socketPath, cleanup },
283
- };
284
+ return lastRefusal;
284
285
  }
285
286
  /**
286
287
  * Production deps for prepareCodexRemoteLaunch — spawn the real `codex
@@ -1 +1 @@
1
- {"version":3,"file":"codex-remote.js","sourceRoot":"","sources":["../src/codex-remote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-remote.js","sourceRoot":"","sources":["../src/codex-remote.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * gh#855 — pure helpers for FRESH codex wake-target re-resolution.
3
3
  *
4
- * Root cause of codex deaf-when-idle: the wake target (socket + thread) was
5
- * resolved once at launch and never refreshed, so a missed/stale launch probe
6
- * left the drone permanently deaf. Phase 1 makes the waking borg-mcp child
7
- * authoritative about its OWN live app-server socket — the socket is injected
4
+ * Root cause of codex deaf-when-idle: stale thread selection could leave the
5
+ * drone permanently deaf. The waking borg-mcp child is authoritative about its
6
+ * OWN live app-server socket the socket is injected
8
7
  * into the child's pinned env at spawn (codex-remote.ts, via the #851 `-c
9
8
  * mcp_servers.borg.env.X` channel) — and re-resolves the loaded thread FRESH on
10
9
  * every wake (loadedThreadIds is a re-runnable RPC).
@@ -13,7 +12,7 @@
13
12
  */
14
13
  /** Pinned-env var carrying THIS drone's live app-server socket (set at spawn). */
15
14
  export declare const BORG_CODEX_APP_SERVER_SOCKET_ENV = "BORG_CODEX_APP_SERVER_SOCKET";
16
- /** The live app-server socket for this borg-mcp child, or null (un-upgraded launch). */
15
+ /** The live app-server socket for this borg-mcp child. */
17
16
  export declare function codexAppServerSocketFromEnv(env?: NodeJS.ProcessEnv): string | null;
18
17
  /**
19
18
  * The per-launch codex config override that pins THIS app-server's live socket
@@ -28,44 +27,26 @@ export interface CodexThreadInfo {
28
27
  id: string;
29
28
  cwd?: string;
30
29
  updatedAt?: number;
30
+ source?: unknown;
31
+ ephemeral?: boolean;
32
+ threadSource?: string;
33
+ preview?: string;
34
+ turns?: unknown[];
31
35
  }
36
+ export declare function isCodexSubagentSource(source: unknown): boolean;
32
37
  /**
33
38
  * Pick the loaded thread to wake on the live socket. Each borg-owned app-server
34
39
  * is fresh-per-launch / single-session, so the common case is exactly one loaded
35
40
  * thread. When more than one is loaded, prefer the thread whose cwd matches this
36
41
  * drone's working directory (sibling worktrees have distinct cwds), then the
37
- * newest by updatedAt always deterministic. No loaded thread null (no wake
42
+ * newest by updatedAt, without preferring an empty thread over one with turns.
43
+ * System, ephemeral and subagent threads are never candidates. No loaded thread → null (no wake
38
44
  * this cycle; the next wake retries, so a transient empty list never causes
39
45
  * permanent deafness).
40
46
  */
41
47
  export declare function pickFreshThread(threads: CodexThreadInfo[], opts: {
42
48
  cwd: string;
43
49
  }): string | null;
44
- /**
45
- * Pure prune: drop wake-target entries whose app-server socket is positively
46
- * dead (liveness === false), so the file self-heals. Keeps alive (true) and
47
- * indeterminate (null) entries — false-deaf-avoidance, mirroring
48
- * checkCodexBridgeHealthy's tri-state. Returns the surviving map + whether
49
- * anything changed (so the caller writes only on change).
50
- */
51
- export declare function pruneDeadWakeTargets<T extends {
52
- socketPath: string;
53
- }>(targets: Record<string, T>, socketLiveness: (socketPath: string) => boolean | null): {
54
- targets: Record<string, T>;
55
- changed: boolean;
56
- };
57
- /**
58
- * Whether the freshly-resolved target differs from what's already recorded —
59
- * so the self-healing cache write happens only on change (no file thrash on a
60
- * busy cube re-resolving the same socket+thread every wake).
61
- */
62
- export declare function wakeTargetChanged(existing: {
63
- socketPath: string;
64
- threadId: string;
65
- } | null, fresh: {
66
- socketPath: string;
67
- threadId: string;
68
- }): boolean;
69
50
  /** Base backoff for the first retry of a dropped/deferred wake. */
70
51
  export declare const WAKE_RETRY_BASE_MS = 5000;
71
52
  /** Backoff ceiling — a wedged thread is retried at most this often. */
@@ -1 +1 @@
1
- {"version":3,"file":"codex-wake-resolve.d.ts","sourceRoot":"","sources":["../src/codex-wake-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,kFAAkF;AAClF,eAAO,MAAM,gCAAgC,iCAAiC,CAAC;AAE/E,wFAAwF;AACxF,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAG/F;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAUhG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EACnE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAC1B,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GACrD;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAWlD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACzD,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAIT;AAID,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAC;AACjD;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAIvE;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,QAAQ,SAAwB,GAC/B,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAGT"}
1
+ {"version":3,"file":"codex-wake-resolve.d.ts","sourceRoot":"","sources":["../src/codex-wake-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,kFAAkF;AAClF,eAAO,MAAM,gCAAgC,iCAAiC,CAAC;AAE/E,0DAA0D;AAC1D,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAG/F;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAgBhG;AAID,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAC;AACjD;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAIvE;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,QAAQ,SAAwB,GAC/B,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAGT"}
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * gh#855 — pure helpers for FRESH codex wake-target re-resolution.
3
3
  *
4
- * Root cause of codex deaf-when-idle: the wake target (socket + thread) was
5
- * resolved once at launch and never refreshed, so a missed/stale launch probe
6
- * left the drone permanently deaf. Phase 1 makes the waking borg-mcp child
7
- * authoritative about its OWN live app-server socket — the socket is injected
4
+ * Root cause of codex deaf-when-idle: stale thread selection could leave the
5
+ * drone permanently deaf. The waking borg-mcp child is authoritative about its
6
+ * OWN live app-server socket the socket is injected
8
7
  * into the child's pinned env at spawn (codex-remote.ts, via the #851 `-c
9
8
  * mcp_servers.borg.env.X` channel) — and re-resolves the loaded thread FRESH on
10
9
  * every wake (loadedThreadIds is a re-runnable RPC).
@@ -13,7 +12,7 @@
13
12
  */
14
13
  /** Pinned-env var carrying THIS drone's live app-server socket (set at spawn). */
15
14
  export const BORG_CODEX_APP_SERVER_SOCKET_ENV = 'BORG_CODEX_APP_SERVER_SOCKET';
16
- /** The live app-server socket for this borg-mcp child, or null (un-upgraded launch). */
15
+ /** The live app-server socket for this borg-mcp child. */
17
16
  export function codexAppServerSocketFromEnv(env = process.env) {
18
17
  const v = env[BORG_CODEX_APP_SERVER_SOCKET_ENV];
19
18
  return v && v.length > 0 ? v : null;
@@ -29,22 +28,33 @@ export function codexAppServerSocketFromEnv(env = process.env) {
29
28
  export function codexAppServerSocketConfigArgs(socketPath) {
30
29
  return ['-c', `mcp_servers.borg.env.${BORG_CODEX_APP_SERVER_SOCKET_ENV}="${socketPath}"`];
31
30
  }
31
+ export function isCodexSubagentSource(source) {
32
+ if (!source || typeof source !== 'object' || Array.isArray(source))
33
+ return false;
34
+ return 'subagent' in source || 'subAgent' in source;
35
+ }
32
36
  /**
33
37
  * Pick the loaded thread to wake on the live socket. Each borg-owned app-server
34
38
  * is fresh-per-launch / single-session, so the common case is exactly one loaded
35
39
  * thread. When more than one is loaded, prefer the thread whose cwd matches this
36
40
  * drone's working directory (sibling worktrees have distinct cwds), then the
37
- * newest by updatedAt always deterministic. No loaded thread null (no wake
41
+ * newest by updatedAt, without preferring an empty thread over one with turns.
42
+ * System, ephemeral and subagent threads are never candidates. No loaded thread → null (no wake
38
43
  * this cycle; the next wake retries, so a transient empty list never causes
39
44
  * permanent deafness).
40
45
  */
41
46
  export function pickFreshThread(threads, opts) {
42
- if (threads.length === 0)
47
+ const rootThreads = threads.filter((thread) => !isCodexSubagentSource(thread.source) && thread.ephemeral !== true &&
48
+ (thread.threadSource === undefined || thread.threadSource === 'user'));
49
+ if (rootThreads.length === 0)
43
50
  return null;
44
- if (threads.length === 1)
45
- return threads[0].id;
46
- const cwdMatches = threads.filter((t) => t.cwd === opts.cwd);
47
- const pool = cwdMatches.length > 0 ? cwdMatches : threads;
51
+ if (rootThreads.length === 1)
52
+ return rootThreads[0].id;
53
+ const cwdMatches = rootThreads.filter((t) => t.cwd === opts.cwd);
54
+ let pool = cwdMatches.length > 0 ? cwdMatches : rootThreads;
55
+ if (pool.some((thread) => (thread.turns?.length ?? 0) > 0)) {
56
+ pool = pool.filter((thread) => (thread.turns?.length ?? 0) > 0 || !!thread.preview);
57
+ }
48
58
  let best = pool[0];
49
59
  for (const t of pool) {
50
60
  if ((t.updatedAt ?? 0) > (best.updatedAt ?? 0))
@@ -52,33 +62,6 @@ export function pickFreshThread(threads, opts) {
52
62
  }
53
63
  return best.id;
54
64
  }
55
- /**
56
- * Pure prune: drop wake-target entries whose app-server socket is positively
57
- * dead (liveness === false), so the file self-heals. Keeps alive (true) and
58
- * indeterminate (null) entries — false-deaf-avoidance, mirroring
59
- * checkCodexBridgeHealthy's tri-state. Returns the surviving map + whether
60
- * anything changed (so the caller writes only on change).
61
- */
62
- export function pruneDeadWakeTargets(targets, socketLiveness) {
63
- const out = {};
64
- let changed = false;
65
- for (const [key, t] of Object.entries(targets)) {
66
- if (socketLiveness(t.socketPath) === false) {
67
- changed = true;
68
- continue;
69
- }
70
- out[key] = t;
71
- }
72
- return { targets: out, changed };
73
- }
74
- /**
75
- * Whether the freshly-resolved target differs from what's already recorded —
76
- * so the self-healing cache write happens only on change (no file thrash on a
77
- * busy cube re-resolving the same socket+thread every wake).
78
- */
79
- export function wakeTargetChanged(existing, fresh) {
80
- return (!existing || existing.socketPath !== fresh.socketPath || existing.threadId !== fresh.threadId);
81
- }
82
65
  // ─── gh#857 Phase 2: durable retry + heartbeat (pure helpers) ───────────────
83
66
  /** Base backoff for the first retry of a dropped/deferred wake. */
84
67
  export const WAKE_RETRY_BASE_MS = 5_000;