@botiverse/oar 0.13.1 → 0.13.3

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 (42) hide show
  1. package/README.md +41 -42
  2. package/dist/agents/types.d.ts +1 -1
  3. package/dist/agents/types.d.ts.map +1 -1
  4. package/dist/runtimes/codex/app-server-client.d.ts.map +1 -1
  5. package/dist/runtimes/codex/app-server-client.js +18 -6
  6. package/dist/runtimes/codex/app-server-client.js.map +1 -1
  7. package/dist/runtimes/codex/home-initialization.d.ts +4 -0
  8. package/dist/runtimes/codex/home-initialization.d.ts.map +1 -0
  9. package/dist/runtimes/codex/home-initialization.js +203 -0
  10. package/dist/runtimes/codex/home-initialization.js.map +1 -0
  11. package/dist/runtimes/codex/projection.d.ts +3 -0
  12. package/dist/runtimes/codex/projection.d.ts.map +1 -1
  13. package/dist/runtimes/codex/projection.js +19 -9
  14. package/dist/runtimes/codex/projection.js.map +1 -1
  15. package/dist/runtimes/codex/tasks.d.ts +23 -1
  16. package/dist/runtimes/codex/tasks.d.ts.map +1 -1
  17. package/dist/runtimes/codex/tasks.js +51 -1
  18. package/dist/runtimes/codex/tasks.js.map +1 -1
  19. package/dist/shared/deliver.d.ts.map +1 -1
  20. package/dist/shared/deliver.js +10 -1
  21. package/dist/shared/deliver.js.map +1 -1
  22. package/dist/shared/executable/diagnostics.d.ts +25 -0
  23. package/dist/shared/executable/diagnostics.d.ts.map +1 -0
  24. package/dist/shared/executable/diagnostics.js +49 -0
  25. package/dist/shared/executable/diagnostics.js.map +1 -0
  26. package/dist/shared/executable/process.d.ts +3 -0
  27. package/dist/shared/executable/process.d.ts.map +1 -1
  28. package/dist/shared/executable/process.js +21 -2
  29. package/dist/shared/executable/process.js.map +1 -1
  30. package/dist/shared/executable/run.d.ts +2 -0
  31. package/dist/shared/executable/run.d.ts.map +1 -1
  32. package/dist/shared/executable/run.js +33 -12
  33. package/dist/shared/executable/run.js.map +1 -1
  34. package/dist/shared/executable/version.d.ts +2 -1
  35. package/dist/shared/executable/version.d.ts.map +1 -1
  36. package/dist/shared/executable/version.js +7 -3
  37. package/dist/shared/executable/version.js.map +1 -1
  38. package/dist/shared/installation.d.ts.map +1 -1
  39. package/dist/shared/installation.js +5 -2
  40. package/dist/shared/installation.js.map +1 -1
  41. package/dist/shared/session-kernel.d.ts +1 -1
  42. package/package.json +1 -1
package/README.md CHANGED
@@ -28,22 +28,22 @@ if (installation?.kind === "available") {
28
28
  echoes, text, reasoning, tool call start / progress / end, turn start and end,
29
29
  usage, model, effort, compaction start / end, retry, background tasks and
30
30
  subagents started, updated and ended, runtime→app requests and oar's answers,
31
- control rejections, the process exit), each carrying the `seq`
32
- and `agentPath` of the record it was read from. Kinds a runtime never says
33
- (claude has no compaction start, ACP runtimes no compaction, only pi says
34
- retry) simply never appear; the runtime pages say which. It is a projection over the record stream: `session.rawEvents()`
35
- and `session.records()` expose that stream (`RawEvent`: `Frame` with the
36
- native payload verbatim, `RequestRecord`, `ResponseRecord`) for consumers
37
- who need the runtime's own frames.
31
+ control rejections, the process exit), each carrying the `seq` and
32
+ `agentPath` of the record it was read from. Kinds a runtime never says (claude
33
+ has no compaction start, ACP runtimes no compaction, only pi says retry) never
34
+ appear; the runtime pages say which. It is a projection over the record
35
+ stream, which `session.rawEvents()` and `session.records()` expose
36
+ (`RawEvent`: `Frame` with the native payload verbatim, `RequestRecord`,
37
+ `ResponseRecord`) for consumers who need the runtime's own frames.
38
38
 
39
39
  `session.deliver(input, { when, origin })` sends input the host produces (a
40
40
  subagent's result, a finished job) at the right moment: a new turn when the
41
- session is idle, so the agent wakes, otherwise steered into the turn or
42
- queued behind it. `origin` is recorded so a UI can tell it from typed input.
41
+ session is idle, so the agent wakes, otherwise steered into the turn or queued
42
+ behind it. `origin` is recorded so a UI can tell it from typed input.
43
43
 
44
- For conversation UIs, use the browser-safe `reduceConversation` projection over
45
- `session.rawEvents()`. It joins input requests, responses and native echoes by
46
- identity, including steer → queue fallback. See the
44
+ For conversation UIs, use the browser-safe `reduceConversation` projection
45
+ over `session.rawEvents()`. It joins input requests, responses and native
46
+ echoes by identity, including steer → queue fallback. See the
47
47
  [conversation contract](https://github.com/botiverse/oar/blob/main/docs/spec/conversation.md).
48
48
 
49
49
  ## Public exports
@@ -52,12 +52,12 @@ The package has six public entry points:
52
52
 
53
53
  - `@botiverse/oar`: the full surface (runtime registry, adapters, and everything below). Node-only (adapters import `node:child_process` and runtime SDKs).
54
54
  - `@botiverse/oar/brands`: browser-safe runtime names and SVG icons.
55
- - `@botiverse/oar/observe`: browser-safe subset, the pure derivation utilities over `RawEvent`s and `Event`s (`eventsOf`, `coalesceText`, `observeAgent`, `reduceStatus`, `tasksOf`, `observeStalls`, `classifyTool`, …) with zero Node and zero adapter imports. A browser or Electron-renderer bundle can import this subpath directly without dragging Node-only modules in. The root export re-exports the same utilities for Node consumers.
55
+ - `@botiverse/oar/observe`: the browser-safe pure derivations over `RawEvent`s and `Event`s (`eventsOf`, `coalesceText`, `observeAgent`, `reduceStatus`, `tasksOf`, `observeStalls`, `classifyTool`, …) with no Node or adapter imports, so a browser or Electron-renderer bundle can import it directly. The root export re-exports the same utilities.
56
56
  - `@botiverse/oar/kernel`: the runtime-author SPI. `createSessionKernel` is the record stream every built-in adapter is built on (dense `seq`, cursor replay, control recording, the reachability rule) and `sealSession` derives the `Session` API face over an adapter. Pair with `defineRuntime` to ship a custom runtime (a scripted runtime for a host's tests, an in-process agent) without re-implementing the stream contract. `inputImagesRefusal` and `withInputImages` are the image rules every built-in runtime keeps, so a custom runtime refuses the inputs they refuse.
57
- - `@botiverse/oar/agents`: subagents. `createSubagents()` starts child sessions on any runtime, returns a report for every turn they end, takes follow-ups, enforces depth and concurrency limits, reports each child as a task, and can deliver reports into a parent session so it wakes. See [subagents](https://github.com/botiverse/oar/blob/main/docs/spec/subagents.md). Node-only.
57
+ - `@botiverse/oar/agents`: subagents. `createSubagents()` starts child sessions on any runtime, returns a report for every turn they end, takes follow-ups, enforces depth and concurrency limits, and reports each child as a task. The host takes reports with `wait` / `next` or receives them through an `onReport` hook; with `formatReport` and `reportOrigin` it can `deliver` one into a parent session so it wakes. See [subagents](https://github.com/botiverse/oar/blob/main/docs/spec/subagents.md). Node-only.
58
58
  - `@botiverse/oar/testing`: `scriptedRuntime({ turn })`, a ready-made runtime on the kernel SPI whose model is a script. It yields a real `Session` (same records, folds and control semantics) with no binary, login or provider, for hosts' tests and demos. A script can also start tasks (`turn.task`) that end after the turn, like a background command. Node-only.
59
59
 
60
- Any other deep import (`@botiverse/oar/dist/...`, source paths) is internal and may break without notice.
60
+ Brand SVG files are exported at `@botiverse/oar/assets/brands/<runtime-id>.svg`. Any other deep import (`@botiverse/oar/dist/...`, source paths) is internal and may break without notice.
61
61
 
62
62
  Antigravity, Cursor, Grok, and Kimi share an internal ACP v1 transport and session kernel, but only their concrete runtime identities are public. The registry deliberately does not expose a generic `acp` runtime.
63
63
 
@@ -66,7 +66,7 @@ The command-line interface is a separate package: `@botiverse/oar-cli`.
66
66
  `runtime.listModels(installation, options?)` lists the models an installation
67
67
  can run now (`ok`, `unauthenticated` or `unsupported`); every built-in runtime
68
68
  has it. `runtime.accountUsage(installation)` reads account quota on claude,
69
- codex, grok and kimi; its failure semantics are documented in the
69
+ codex, grok and kimi; its failure semantics are in the
70
70
  [account usage reference](https://github.com/botiverse/oar/blob/main/docs/spec/account-usage.md).
71
71
 
72
72
  `runtime.checkUpdate(installation)` reports the version the runtime's own
@@ -77,10 +77,10 @@ never by its exit code. oar never upgrades on its own. Claude, Codex, Cursor,
77
77
  Grok and Kimi have both; Antigravity has only the check; Pi moves with oar.
78
78
  See [runtime updates](https://github.com/botiverse/oar/blob/main/docs/spec/update.md).
79
79
 
80
- Images go with an input through `InputOptions.images` (absolute paths to png,
81
- jpeg, gif or webp files) on prompt, steer and queue, as the runtime's own image
82
- content. `session.capabilities.images` says whether the runtime takes them; an
83
- input it cannot deliver is rejected whole. See
80
+ Images go with an input through `InputOptions.images` (`{ path }` entries:
81
+ absolute paths to png, jpeg, gif or webp files) on prompt, steer and queue,
82
+ as the runtime's own image content. `session.capabilities.images` says whether
83
+ the runtime takes them; an input it cannot deliver is rejected whole. See
84
84
  [Images](https://github.com/botiverse/oar/blob/main/docs/spec/conversation.md#images).
85
85
 
86
86
  ## Native inventories
@@ -88,8 +88,9 @@ input it cannot deliver is rejected whole. See
88
88
  Every runtime exposes `skills(installation, options?)`,
89
89
  `mcpServers(installation, options?)`, and `tools(installation, options?)`.
90
90
  Options are `{ cwd?: string, timeoutMs?: number }`; cwd defaults to
91
- `process.cwd()`. Queries independently discover native information and do not
92
- inspect an existing Session or submit a model prompt.
91
+ `process.cwd()`. Queries discover native information independently: they do
92
+ not inspect an existing Session or submit a model prompt, though native
93
+ startup can load extensions and connect configured MCP servers.
93
94
 
94
95
  Results distinguish `ok`, `unsupported`, and `unavailable`. Successful results
95
96
  contain `items`, `scope.cwd`, `observedAt`, `view`, and `partial`. A
@@ -97,39 +98,37 @@ contain `items`, `scope.cwd`, `observedAt`, `view`, and `partial`. A
97
98
  absent, and an unsupported query never pretends to be an empty catalog.
98
99
 
99
100
  Codex and Claude expose skills and MCP discovery (tools are MCP-only); Grok
100
- exposes independent skills/MCP configuration discovery; Pi exposes skills and
101
- registered tools with active membership. Antigravity, Cursor and Kimi
102
- inventory queries are unsupported. Native startup can load extensions and connect configured
103
- MCP servers.
101
+ exposes independent skills and MCP configuration discovery; Pi exposes skills
102
+ and registered tools with active membership. Antigravity, Cursor and Kimi
103
+ inventory queries are unsupported.
104
104
 
105
- Custom runtimes should use `defineRuntime`, which fills unavailable inventory
105
+ Custom runtimes should use `defineRuntime`, which fills missing inventory
106
106
  methods with explicit unsupported results. A manually constructed `Runtime`
107
107
  must implement the three methods.
108
108
 
109
109
  ### Runtime branding
110
110
 
111
111
  `runtime.brand` contains `{ name, icon }`. Built-in icons are self-contained SVG
112
- data URIs, usable as an `<img src>` offline and serializable across IPC. No
113
- installation, login, or runtime process is needed to read branding.
114
-
115
- For browser-only consumers (without loading native SDKs):
112
+ data URIs, usable as an `<img src>` offline and serializable across IPC.
113
+ Reading branding needs no installation, login, or runtime process. Browser-only
114
+ consumers can read it without loading native SDKs:
116
115
 
117
116
  ```ts
118
117
  import { runtimeBrands } from "@botiverse/oar/brands";
119
118
  const { name, icon } = runtimeBrands.claude;
120
119
  ```
121
120
 
122
- SVG files are also exported at `@botiverse/oar/assets/brands/<runtime-id>.svg`.
123
- Their attribution and licenses ship in `assets/brands/NOTICE.md`. Pi uses the official `pi.dev` logo assets.
124
- Custom runtimes created with `defineRuntime` may supply `brand`; otherwise it
125
- defaults to `{ name: runtime.id, icon: null }`. Runtime branding identifies the
126
- provider and is independent of an application's project avatars.
127
-
128
- `brand.icons?.light` and `brand.icons?.dark` optionally override the default for
129
- light and dark **backgrounds**. They are not required to be distinct or both
130
- present. `runtimeBrandIcon(brand, theme)` returns the matching variant, falling
131
- back to `brand.icon` (including null for brands without artwork). Hosts choose
132
- the theme from their own surface, not necessarily the operating system setting.
121
+ The SVG files' attribution and licenses ship in `assets/brands/NOTICE.md`; Pi
122
+ uses the official `pi.dev` logo assets. Custom runtimes created with
123
+ `defineRuntime` may supply `brand`; otherwise it defaults to
124
+ `{ name: runtime.id, icon: null }`. Runtime branding identifies the provider
125
+ and is independent of an application's project avatars.
126
+
127
+ `brand.icons?.light` and `brand.icons?.dark` optionally override the default
128
+ for light and dark **backgrounds**; they need not be distinct or both present.
129
+ `runtimeBrandIcon(brand, theme)` returns the matching variant, falling back to
130
+ `brand.icon` (null for brands without artwork). Hosts choose the theme from
131
+ their own surface, not necessarily the operating system setting.
133
132
 
134
133
  ```ts
135
134
  import { runtimeBrands, runtimeBrandIcon } from "@botiverse/oar/brands";
@@ -17,7 +17,7 @@ export interface SubagentsOptions {
17
17
  readonly maxDepth?: number;
18
18
  /** Working directory for children that name none; `process.cwd()` by default. */
19
19
  readonly cwd?: string;
20
- /** Write each child's records to `<logDir>/<id>.jsonl` as an oar-voyage log. */
20
+ /** Write each child's records to `<logDir>/<name or runtime>-<sessionId>.jsonl` as an oar-voyage log. */
21
21
  readonly logDir?: string;
22
22
  /** Environment overlaid on every child (each spawn may add its own). */
23
23
  readonly env?: Readonly<Record<string, string>>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"app-server-client.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;GAIG;AACH,gFAAgF;AAChF,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACpF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5G,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACjD;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C;;;;;;OAMG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACrD,IAAI,IAAI,IAAI,CAAC;CACd;AAQD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,eAAe,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EACtD,GAAG,CAAC,EAAE,MAAM,GACX,eAAe,CAkHjB"}
1
+ {"version":3,"file":"app-server-client.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG5E;;;;GAIG;AACH,gFAAgF;AAChF,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACpF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5G,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACjD;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C;;;;;;OAMG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACrD,IAAI,IAAI,IAAI,CAAC;CACd;AAQD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,eAAe,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EACtD,GAAG,CAAC,EAAE,MAAM,GACX,eAAe,CAIjB"}
@@ -1,11 +1,23 @@
1
1
  import { spawnLineProcess } from "../../shared/executable/index.js";
2
+ import { processFailure } from "../../shared/executable/diagnostics.js";
2
3
  import { asRecord, parseJson } from "../../shared/json.js";
4
+ import { coordinateHomeInitialization } from "./home-initialization.js";
3
5
  export function startAppServerClient(command, env, configOverrides = {}, cwd) {
6
+ const environment = { ...process.env, ...env };
7
+ const directory = cwd ?? process.cwd();
8
+ return coordinateHomeInitialization(environment, directory, () => createAppServerClient(command, environment, configOverrides, directory));
9
+ }
10
+ function createAppServerClient(command, env, configOverrides, cwd) {
4
11
  // -c KEY=VALUE injects config at launch. This is the ONLY seam that reaches
5
12
  // codex's exec tool: thread/start.sandboxMode does not (pinned on a real
6
13
  // login: thread param honored for its own turns but exec follows config).
7
14
  const overrideArgs = Object.entries(configOverrides).flatMap(([key, value]) => ["-c", `${key}=${value}`]);
8
- const child = spawnLineProcess(command, ["app-server", ...overrideArgs, "--listen", "stdio://"], { ...(cwd === undefined ? {} : { cwd }), ...(env === undefined ? {} : { env: { ...process.env, ...env } }) });
15
+ const child = spawnLineProcess(command, ["app-server", ...overrideArgs, "--listen", "stdio://"], { cwd, env });
16
+ // Session initialization observes spawn failures through its pending RPC.
17
+ // Mark this parallel promise handled while preserving its rejection for
18
+ // callers that explicitly await spawned.
19
+ // oxlint-disable-next-line promise/prefer-await-to-then -- client construction remains synchronous
20
+ void child.spawned.catch(() => { });
9
21
  const pending = new Map();
10
22
  // Inbound frames and marks share one queue until `handle` registers the
11
23
  // handlers, so their relative order is the wire's whatever kind they are.
@@ -20,7 +32,7 @@ export function startAppServerClient(command, env, configOverrides = {}, cwd) {
20
32
  }
21
33
  };
22
34
  let nextId = 1;
23
- let exited = false;
35
+ let exitFailure = null;
24
36
  child.onLine((line) => {
25
37
  const message = asRecord(parseJson(line));
26
38
  if (message === null) {
@@ -60,9 +72,9 @@ export function startAppServerClient(command, env, configOverrides = {}, cwd) {
60
72
  }
61
73
  });
62
74
  child.onExit(() => {
63
- exited = true;
75
+ exitFailure = processFailure("app-server exited", child.diagnostics());
64
76
  for (const waiter of pending.values()) {
65
- const error = new Error("app-server exited");
77
+ const error = exitFailure;
66
78
  waiter.settled({ kind: "error", error });
67
79
  waiter.reject(error);
68
80
  }
@@ -73,8 +85,8 @@ export function startAppServerClient(command, env, configOverrides = {}, cwd) {
73
85
  exited: child.exited,
74
86
  async request(method, params, onSettled) {
75
87
  const settled = onSettled ?? (() => { });
76
- if (exited) {
77
- const error = new Error("app-server exited");
88
+ if (exitFailure !== null) {
89
+ const error = exitFailure;
78
90
  settled({ kind: "error", error });
79
91
  throw error;
80
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-server-client.js","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-server-client.js","sourceRoot":"","sources":["../../../src/runtimes/codex/app-server-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AppServerClient } from "./app-server-client.js";
2
+ /** Coordinate first initialization among this module's app-server clients only. */
3
+ export declare function coordinateHomeInitialization(env: NodeJS.ProcessEnv, cwd: string, create: () => AppServerClient): AppServerClient;
4
+ //# sourceMappingURL=home-initialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-initialization.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/home-initialization.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA4F9D,mFAAmF;AACnF,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,eAAe,GAC5B,eAAe,CA6CjB"}
@@ -0,0 +1,203 @@
1
+ import { realpathSync, statSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import path from "node:path";
4
+ const initializing = new Map();
5
+ // Only an observed successful handshake establishes readiness. Directory
6
+ // identity invalidates it when a host replaces a temporary home at the same path.
7
+ const initialized = new Map();
8
+ function homePath(env, cwd) {
9
+ const userHome = process.platform === "win32" ? homedir() : env.HOME;
10
+ const fallback = path.join(userHome === undefined || userHome === "" ? homedir() : userHome, ".codex");
11
+ const configured = env.CODEX_HOME;
12
+ const directory = path.resolve(cwd, configured === undefined || configured === "" ? fallback : configured);
13
+ try {
14
+ return realpathSync(directory);
15
+ }
16
+ catch {
17
+ return directory;
18
+ }
19
+ }
20
+ function identity(home) {
21
+ try {
22
+ const stat = statSync(home);
23
+ return stat.isDirectory() ? `${String(stat.dev)}:${String(stat.ino)}:${String(stat.birthtimeMs)}` : null;
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ /** A queued reader's existing deadline can cancel it before any process starts. */
30
+ function queuedClient(state, start) {
31
+ const ready = Promise.withResolvers();
32
+ const subscriptions = [];
33
+ const exitHandlers = [];
34
+ let actual = null;
35
+ let cancelled = false;
36
+ let handled = false;
37
+ async function spawned() { const client = await ready.promise; await client.spawned; }
38
+ async function exited() {
39
+ try {
40
+ const client = await ready.promise;
41
+ const code = await client.exited;
42
+ return code;
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ }
48
+ const spawn = spawned();
49
+ // Requests normally observe this failure; retain spawned's rejection for
50
+ // explicit callers without creating an unhandled parallel promise.
51
+ // oxlint-disable-next-line promise/prefer-await-to-then
52
+ void spawn.catch(() => { });
53
+ const exit = exited();
54
+ const begin = () => {
55
+ if (cancelled) {
56
+ return;
57
+ }
58
+ try {
59
+ actual = start();
60
+ for (const subscribe of subscriptions.splice(0)) {
61
+ subscribe(actual);
62
+ }
63
+ exitHandlers.length = 0;
64
+ ready.resolve(actual);
65
+ }
66
+ catch (error) {
67
+ ready.reject(error);
68
+ for (const handler of exitHandlers.splice(0)) {
69
+ handler(null);
70
+ }
71
+ }
72
+ };
73
+ state.waiting.add(begin);
74
+ const subscribe = (callback) => {
75
+ if (actual !== null) {
76
+ callback(actual);
77
+ }
78
+ else if (!cancelled) {
79
+ subscriptions.push(callback);
80
+ }
81
+ };
82
+ return {
83
+ spawned: spawn, exited: exit,
84
+ async request(method, params, onSettled) {
85
+ let client = null;
86
+ try {
87
+ client = await ready.promise;
88
+ }
89
+ catch (error) {
90
+ const failure = error instanceof Error ? error : new Error(String(error));
91
+ onSettled?.({ kind: "error", error: failure });
92
+ throw failure;
93
+ }
94
+ return client.request(method, params, onSettled);
95
+ },
96
+ notify(method, params) { subscribe((client) => { client.notify(method, params); }); },
97
+ handle(handlers) {
98
+ if (handled) {
99
+ throw new Error("app-server handlers are already registered");
100
+ }
101
+ handled = true;
102
+ subscribe((client) => { client.handle(handlers); });
103
+ },
104
+ mark(callback) { subscribe((client) => { client.mark(callback); }); },
105
+ onExit(handler) {
106
+ if (cancelled) {
107
+ queueMicrotask(() => { handler(null); });
108
+ return;
109
+ }
110
+ if (actual === null) {
111
+ exitHandlers.push(handler);
112
+ }
113
+ subscribe((client) => { client.onExit(handler); });
114
+ },
115
+ kill() {
116
+ if (actual !== null) {
117
+ actual.kill();
118
+ return;
119
+ }
120
+ if (cancelled) {
121
+ return;
122
+ }
123
+ cancelled = true;
124
+ state.waiting.delete(begin);
125
+ subscriptions.length = 0;
126
+ ready.reject(new Error("Codex app-server startup cancelled before spawn"));
127
+ for (const handler of exitHandlers.splice(0)) {
128
+ handler(null);
129
+ }
130
+ },
131
+ };
132
+ }
133
+ /** Coordinate first initialization among this module's app-server clients only. */
134
+ export function coordinateHomeInitialization(env, cwd, create) {
135
+ const home = homePath(env, cwd);
136
+ const active = initializing.get(home);
137
+ if (active !== undefined) {
138
+ return queuedClient(active, () => coordinateHomeInitialization(env, cwd, create));
139
+ }
140
+ const current = identity(home);
141
+ if (current !== null && initialized.get(home) === current) {
142
+ return create();
143
+ }
144
+ initialized.delete(home);
145
+ const state = { waiting: new Set() };
146
+ initializing.set(home, state);
147
+ let released = false;
148
+ const release = (success) => {
149
+ if (released) {
150
+ return;
151
+ }
152
+ released = true;
153
+ const observed = success ? identity(home) : null;
154
+ if (observed !== null) {
155
+ initialized.set(home, observed);
156
+ }
157
+ initializing.delete(home);
158
+ for (const begin of state.waiting) {
159
+ begin();
160
+ }
161
+ state.waiting.clear();
162
+ };
163
+ const createOwner = () => {
164
+ try {
165
+ return create();
166
+ }
167
+ catch (error) {
168
+ release(false);
169
+ throw error;
170
+ }
171
+ };
172
+ const client = createOwner();
173
+ client.onExit(() => { release(false); });
174
+ let accepted = false;
175
+ return {
176
+ ...client,
177
+ async request(method, params, onSettled) {
178
+ try {
179
+ return await client.request(method, params, (outcome) => {
180
+ if (method === "initialize" && outcome.kind === "result") {
181
+ accepted = true;
182
+ }
183
+ onSettled?.(outcome);
184
+ });
185
+ }
186
+ catch (error) {
187
+ if (method === "initialize") {
188
+ client.kill();
189
+ await client.exited;
190
+ release(false);
191
+ }
192
+ throw error;
193
+ }
194
+ },
195
+ notify(method, params) {
196
+ client.notify(method, params);
197
+ if (method === "initialized" && accepted) {
198
+ release(true);
199
+ }
200
+ },
201
+ };
202
+ }
203
+ //# sourceMappingURL=home-initialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-initialization.js","sourceRoot":"","sources":["../../../src/runtimes/codex/home-initialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;AACzD,yEAAyE;AACzE,kFAAkF;AAClF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C,SAAS,QAAQ,CAAC,GAAsB,EAAE,GAAW;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3G,IAAI,CAAC;QAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3G,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY,CAAC,KAAuB,EAAE,KAA4B;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,EAAmB,CAAC;IACvD,MAAM,aAAa,GAA0C,EAAE,CAAC;IAChE,MAAM,YAAY,GAAsC,EAAE,CAAC;IAC3D,IAAI,MAAM,GAA2B,IAAI,CAAC;IAC1C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,UAAU,OAAO,KAAoB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACrG,KAAK,UAAU,MAAM;QACnB,IAAI,CAAC;YAAC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YAAC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IACnH,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;IACxB,yEAAyE;IACzE,mEAAmE;IACnE,wDAAwD;IACxD,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,SAAS,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,KAAK,EAAE,CAAC;YACjB,KAAK,MAAM,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAAC,CAAC;YACvE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,CAAC,QAA2C,EAAQ,EAAE;QACtE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;aAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;IACnG,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;QAC5B,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS;YACrC,IAAI,MAAM,GAA2B,IAAI,CAAC;YAC1C,IAAI,CAAC;gBAAC,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YAAC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1E,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/C,MAAM,OAAO,CAAC;YAChB,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,CAAC,QAAQ;YACb,IAAI,OAAO,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAAC,CAAC;YAC/E,OAAO,GAAG,IAAI,CAAC;YACf,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO;YACZ,IAAI,SAAS,EAAE,CAAC;gBAAC,cAAc,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACpE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YACpD,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI;YACF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC/C,IAAI,SAAS,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACzB,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC3E,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAClE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,4BAA4B,CAC1C,GAAsB,EACtB,GAAW,EACX,MAA6B;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,4BAA4B,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,OAAO,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;IAAC,CAAC;IAC/E,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,KAAK,GAAqB,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IACvD,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAQ,EAAE;QACzC,IAAI,QAAQ,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACzB,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAAC,CAAC;QAC3D,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAC/C,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,GAAoB,EAAE;QACxC,IAAI,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;IACzE,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,GAAG,MAAM;QACT,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS;YACrC,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;oBACtD,IAAI,MAAM,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAAC,QAAQ,GAAG,IAAI,CAAC;oBAAC,CAAC;oBAC9E,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;oBAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAAC,MAAM,MAAM,CAAC,MAAM,CAAC;oBAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;gBACpF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,CAAC,MAAM,EAAE,MAAM;YACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,IAAI,MAAM,KAAK,aAAa,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { FrameBody, SessionEdge } from "../../contracts/session.js";
2
2
  import { type JsonRecord } from "../../shared/json.js";
3
+ import { type SubagentThreads } from "./tasks.js";
3
4
  export type ProjectionCommand = {
4
5
  readonly kind: "frame";
5
6
  readonly body: FrameBody;
@@ -25,6 +26,8 @@ export interface CodexProjectionState {
25
26
  * flag lets the second report close nothing instead of ending twice.
26
27
  */
27
28
  readonly compacting: boolean;
29
+ /** Subagent threads the stream reported starting: who started each, and its path. */
30
+ readonly subagents: SubagentThreads;
28
31
  }
29
32
  export declare function initialCodexProjection(rootThreadId: string): CodexProjectionState;
30
33
  /** Fold one codex notification into the next state plus commands. */
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,WAAW,EAEZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAoB3E,MAAM,MAAM,iBAAiB,GACzB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAEjF;AAuLD,qEAAqE;AACrE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,GACjB;IAAE,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,CA8B3F"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/runtimes/codex/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,WAAW,EAEZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,EAAmD,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAiBnG,MAAM,MAAM,iBAAiB,GACzB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAEjF;AA6LD,qEAAqE;AACrE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,GACjB;IAAE,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,CAkC3F"}
@@ -2,7 +2,7 @@ import { classifyFailure } from "../../shared/failure-class.js";
2
2
  import { asNumber, asRecord } from "../../shared/json.js";
3
3
  import { codexItemExitCode, codexItemInput, codexItemOutput } from "./item-detail.js";
4
4
  import { codexReasoningContent } from "./reasoning.js";
5
- import { codexTaskViews } from "./tasks.js";
5
+ import { aboutOwnChild, codexTaskViews, withStartedChild } from "./tasks.js";
6
6
  /**
7
7
  * The codex notification → record projection as a PURE FOLD (see
8
8
  * runtimes/claude/projection.ts for the shape). Every notification becomes
@@ -17,7 +17,7 @@ import { codexTaskViews } from "./tasks.js";
17
17
  const TOOL_ITEM_TYPES = new Set(["commandExecution", "fileChange", "mcpToolCall", "webSearch"]);
18
18
  const COLLAB_ITEM_TYPES = new Set(["collabAgentToolCall", "collabToolCall", "subAgentActivity"]);
19
19
  export function initialCodexProjection(rootThreadId) {
20
- return { rootThreadId, lastErrorDetail: null, compacting: false };
20
+ return { rootThreadId, lastErrorDetail: null, compacting: false, subagents: new Map() };
21
21
  }
22
22
  const COMPACTION_ITEM_TYPE = "contextCompaction";
23
23
  function isCompactionItem(params) {
@@ -129,12 +129,15 @@ function settingsViews(params) {
129
129
  }
130
130
  return events;
131
131
  }
132
- /** Edges a collaboration item establishes: the root (sender) thread spawned or addressed the named threads. */
133
- function collabEdges(state, item) {
132
+ /** Edges a collaboration item establishes: the sender thread (the reporting thread unless the item names one) spawned or addressed the named threads. */
133
+ function collabEdges(state, reporter, item) {
134
134
  if (item === null || typeof item.type !== "string" || !COLLAB_ITEM_TYPES.has(item.type)) {
135
135
  return [];
136
136
  }
137
- const parent = typeof item.senderThreadId === "string" ? item.senderThreadId : state.rootThreadId;
137
+ if (item.type === "subAgentActivity" && !aboutOwnChild(state.subagents, state.rootThreadId, reporter, item)) {
138
+ return [];
139
+ }
140
+ const parent = typeof item.senderThreadId === "string" ? item.senderThreadId : reporter;
138
141
  const receivers = Array.isArray(item.receiverThreadIds) ? item.receiverThreadIds : [];
139
142
  const children = [...receivers, item.agentThreadId]
140
143
  .filter((id) => typeof id === "string" && id.length > 0 && id !== parent);
@@ -147,7 +150,7 @@ function spanIdOf(params) {
147
150
  const turnId = asRecord(params.turn)?.id;
148
151
  return typeof turnId === "string" ? turnId : undefined;
149
152
  }
150
- function viewsFor(state, method, params) {
153
+ function viewsFor(state, reporter, method, params) {
151
154
  switch (method) {
152
155
  case "item/agentMessage/delta":
153
156
  return typeof params.delta === "string" ? [{ kind: "text_delta", text: params.delta }] : [];
@@ -179,7 +182,10 @@ function viewsFor(state, method, params) {
179
182
  return [{ kind: "compaction_ended", outcome: "completed" }];
180
183
  }
181
184
  const item = asRecord(params.item);
182
- return item?.type === "subAgentActivity" ? codexTaskViews(item) : toolViews(method, item);
185
+ if (item?.type === "subAgentActivity") {
186
+ return aboutOwnChild(state.subagents, state.rootThreadId, reporter, item) ? codexTaskViews(item) : [];
187
+ }
188
+ return toolViews(method, item);
183
189
  }
184
190
  case "turn/completed":
185
191
  return [{ kind: "turn_ended", outcome: settleOutcome(state, asRecord(params.turn)?.status) }];
@@ -197,12 +203,12 @@ export function foldCodexNotification(state, method, params) {
197
203
  const spanId = spanIdOf(params);
198
204
  const event = {
199
205
  kind: "frame",
200
- body: { type: method, native: params, events: viewsFor(state, method, params) },
206
+ body: { type: method, native: params, events: viewsFor(state, threadId, method, params) },
201
207
  ...(spanId === undefined ? {} : { spanId }),
202
208
  ...(threadId === state.rootThreadId ? {} : { sessionId: threadId }),
203
209
  };
204
210
  const links = method === "item/started" || method === "item/completed"
205
- ? collabEdges(state, asRecord(params.item)).map((edge) => ({ kind: "link", edge }))
211
+ ? collabEdges(state, threadId, asRecord(params.item)).map((edge) => ({ kind: "link", edge }))
206
212
  : [];
207
213
  let next = state;
208
214
  if (method === "error") {
@@ -223,6 +229,10 @@ export function foldCodexNotification(state, method, params) {
223
229
  else if (method === "thread/compacted" && threadId === state.rootThreadId) {
224
230
  next = { ...state, compacting: false };
225
231
  }
232
+ const subagents = withStartedChild(next.subagents, threadId, asRecord(params.item));
233
+ if (subagents !== next.subagents) {
234
+ next = { ...next, subagents };
235
+ }
226
236
  return { state: next, commands: [event, ...links] };
227
237
  }
228
238
  //# sourceMappingURL=projection.js.map