cyrus-codex-runner 0.2.64-test.6 → 0.2.64

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 (55) hide show
  1. package/dist/CodexEventMapper.d.ts +56 -0
  2. package/dist/CodexEventMapper.d.ts.map +1 -0
  3. package/dist/CodexEventMapper.js +469 -0
  4. package/dist/CodexEventMapper.js.map +1 -0
  5. package/dist/CodexRunner.d.ts +37 -46
  6. package/dist/CodexRunner.d.ts.map +1 -1
  7. package/dist/CodexRunner.js +136 -851
  8. package/dist/CodexRunner.js.map +1 -1
  9. package/dist/CodexSkillStager.d.ts +42 -0
  10. package/dist/CodexSkillStager.d.ts.map +1 -0
  11. package/dist/CodexSkillStager.js +182 -0
  12. package/dist/CodexSkillStager.js.map +1 -0
  13. package/dist/backend/AppServerCodexBackend.d.ts +74 -0
  14. package/dist/backend/AppServerCodexBackend.d.ts.map +1 -0
  15. package/dist/backend/AppServerCodexBackend.js +352 -0
  16. package/dist/backend/AppServerCodexBackend.js.map +1 -0
  17. package/dist/backend/appServerClient.d.ts +75 -0
  18. package/dist/backend/appServerClient.d.ts.map +1 -0
  19. package/dist/backend/appServerClient.js +223 -0
  20. package/dist/backend/appServerClient.js.map +1 -0
  21. package/dist/backend/appServerEvents.d.ts +9 -0
  22. package/dist/backend/appServerEvents.d.ts.map +1 -0
  23. package/dist/backend/appServerEvents.js +110 -0
  24. package/dist/backend/appServerEvents.js.map +1 -0
  25. package/dist/backend/appServerProcess.d.ts +38 -0
  26. package/dist/backend/appServerProcess.d.ts.map +1 -0
  27. package/dist/backend/appServerProcess.js +283 -0
  28. package/dist/backend/appServerProcess.js.map +1 -0
  29. package/dist/backend/codexBinary.d.ts +24 -0
  30. package/dist/backend/codexBinary.d.ts.map +1 -0
  31. package/dist/backend/codexBinary.js +44 -0
  32. package/dist/backend/codexBinary.js.map +1 -0
  33. package/dist/backend/types.d.ts +210 -0
  34. package/dist/backend/types.d.ts.map +1 -0
  35. package/dist/backend/types.js +2 -0
  36. package/dist/backend/types.js.map +1 -0
  37. package/dist/config/CodexConfigBuilder.d.ts +40 -0
  38. package/dist/config/CodexConfigBuilder.d.ts.map +1 -0
  39. package/dist/config/CodexConfigBuilder.js +182 -0
  40. package/dist/config/CodexConfigBuilder.js.map +1 -0
  41. package/dist/config/mcpConfigTranslator.d.ts +17 -0
  42. package/dist/config/mcpConfigTranslator.d.ts.map +1 -0
  43. package/dist/config/mcpConfigTranslator.js +245 -0
  44. package/dist/config/mcpConfigTranslator.js.map +1 -0
  45. package/dist/config/sandboxPolicy.d.ts +43 -0
  46. package/dist/config/sandboxPolicy.d.ts.map +1 -0
  47. package/dist/config/sandboxPolicy.js +56 -0
  48. package/dist/config/sandboxPolicy.js.map +1 -0
  49. package/dist/index.d.ts +3 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/types.d.ts +9 -7
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +5 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appServerClient.js","sourceRoot":"","sources":["../../src/backend/appServerClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { NormalizedCodexItem } from "./types.js";
2
+ /** Notification method names emitted by the app-server that we act on. */
3
+ export type AppServerNotification = "turn/started" | "item/started" | "item/completed" | "turn/completed" | "thread/tokenUsage/updated" | (string & {});
4
+ /**
5
+ * Translate an app-server v2 thread item into a {@link NormalizedCodexItem}.
6
+ * Returns null for item types the activity mapper does not render.
7
+ */
8
+ export declare function translateAppServerItem(raw: unknown): NormalizedCodexItem | null;
9
+ //# sourceMappingURL=appServerEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appServerEvents.d.ts","sourceRoot":"","sources":["../../src/backend/appServerEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB,GAC9B,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,2BAA2B,GAC3B,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAyDjB;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,OAAO,GACV,mBAAmB,GAAG,IAAI,CA+D5B"}
@@ -0,0 +1,110 @@
1
+ function str(value) {
2
+ return typeof value === "string" ? value : "";
3
+ }
4
+ /** Map app-server execution/patch/mcp status (camelCase) to normalized status. */
5
+ function normalizeRunStatus(status) {
6
+ if (status === "inProgress")
7
+ return "in_progress";
8
+ if (status === "completed")
9
+ return "completed";
10
+ // "failed", "declined", or anything unexpected → treat as failed.
11
+ return "failed";
12
+ }
13
+ function normalizePatchStatus(status) {
14
+ return status === "completed" ? "completed" : "failed";
15
+ }
16
+ function normalizeChanges(changes) {
17
+ if (!Array.isArray(changes)) {
18
+ return [];
19
+ }
20
+ return changes.map((change) => {
21
+ const c = (change ?? {});
22
+ const kind = str(c.kind);
23
+ return {
24
+ path: str(c.path),
25
+ kind: kind === "add" || kind === "delete" || kind === "update"
26
+ ? kind
27
+ : "update",
28
+ };
29
+ });
30
+ }
31
+ function normalizeMcpResult(result) {
32
+ if (!result || typeof result !== "object") {
33
+ return undefined;
34
+ }
35
+ const r = result;
36
+ return {
37
+ content: Array.isArray(r.content) ? r.content : undefined,
38
+ // v2 uses camelCase `structuredContent`; accept snake too defensively.
39
+ structured_content: r.structuredContent ??
40
+ r.structured_content,
41
+ };
42
+ }
43
+ /**
44
+ * Translate an app-server v2 thread item into a {@link NormalizedCodexItem}.
45
+ * Returns null for item types the activity mapper does not render.
46
+ */
47
+ export function translateAppServerItem(raw) {
48
+ if (!raw || typeof raw !== "object") {
49
+ return null;
50
+ }
51
+ const item = raw;
52
+ const id = str(item.id);
53
+ switch (item.type) {
54
+ case "agentMessage":
55
+ return { type: "agent_message", id, text: str(item.text) };
56
+ case "reasoning":
57
+ return { type: "reasoning", id };
58
+ case "userMessage":
59
+ return { type: "user_message", id };
60
+ case "commandExecution":
61
+ return {
62
+ type: "command_execution",
63
+ id,
64
+ command: str(item.command),
65
+ aggregated_output: str(item.aggregatedOutput),
66
+ ...(typeof item.exitCode === "number"
67
+ ? { exit_code: item.exitCode }
68
+ : {}),
69
+ status: normalizeRunStatus(item.status),
70
+ };
71
+ case "fileChange":
72
+ return {
73
+ type: "file_change",
74
+ id,
75
+ changes: normalizeChanges(item.changes),
76
+ status: normalizePatchStatus(item.status),
77
+ };
78
+ case "mcpToolCall": {
79
+ const error = item.error && typeof item.error === "object"
80
+ ? { message: str(item.error.message) }
81
+ : undefined;
82
+ return {
83
+ type: "mcp_tool_call",
84
+ id,
85
+ server: str(item.server),
86
+ tool: str(item.tool),
87
+ arguments: item.arguments,
88
+ ...(normalizeMcpResult(item.result)
89
+ ? { result: normalizeMcpResult(item.result) }
90
+ : {}),
91
+ ...(error ? { error } : {}),
92
+ status: normalizeRunStatus(item.status),
93
+ };
94
+ }
95
+ case "webSearch":
96
+ return {
97
+ type: "web_search",
98
+ id,
99
+ query: str(item.query),
100
+ ...(item.action && typeof item.action === "object"
101
+ ? { action: item.action }
102
+ : {}),
103
+ };
104
+ default:
105
+ // userMessage handled above; plan/reasoning/etc. are not rendered as
106
+ // tool activities, so drop anything else.
107
+ return null;
108
+ }
109
+ }
110
+ //# sourceMappingURL=appServerEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appServerEvents.js","sourceRoot":"","sources":["../../src/backend/appServerEvents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type AppServerClientFactory } from "./appServerClient.js";
2
+ import type { ResolvedCodexConfig } from "./types.js";
3
+ export interface AppServerThreadHandler {
4
+ onNotification(method: string, params: unknown): void;
5
+ onProcessGone(): void;
6
+ onProcessError(error: unknown): void;
7
+ }
8
+ export interface AppServerProcessLease {
9
+ request<T = unknown>(method: string, params: unknown): Promise<T>;
10
+ registerThread(threadId: string, handler: AppServerThreadHandler): void;
11
+ unregisterThread(threadId: string, handler: AppServerThreadHandler): void;
12
+ release(): void;
13
+ }
14
+ interface AppServerProcessManagerOptions {
15
+ requestTimeoutMs?: number;
16
+ idleCloseMs?: number;
17
+ }
18
+ /**
19
+ * Owns Codex app-server processes for this Node process, pooled by launch
20
+ * configuration. Threads that share an identical launch config (command + args
21
+ * + env) reuse one process; threads with a different config get their own,
22
+ * rather than failing. This keeps the startup-cost savings of sharing while
23
+ * supporting heterogeneous concurrent sessions and confining a process crash to
24
+ * the threads that share that exact configuration.
25
+ */
26
+ export declare class AppServerProcessManager {
27
+ private readonly clientFactory;
28
+ private readonly processes;
29
+ private readonly requestTimeoutMs;
30
+ private readonly idleCloseMs;
31
+ constructor(clientFactory?: AppServerClientFactory, options?: AppServerProcessManagerOptions);
32
+ acquire(config: ResolvedCodexConfig): Promise<AppServerProcessLease>;
33
+ /** Tear down every pooled process (e.g. on shutdown or in tests). */
34
+ closeAll(): Promise<void>;
35
+ }
36
+ export declare const defaultAppServerProcessManager: AppServerProcessManager;
37
+ export {};
38
+ //# sourceMappingURL=appServerProcess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appServerProcess.d.ts","sourceRoot":"","sources":["../../src/backend/appServerProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,sBAAsB,EAE3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKtD,MAAM,WAAW,sBAAsB;IACtC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACtD,aAAa,IAAI,IAAI,CAAC;IACtB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACxE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC1E,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,UAAU,8BAA8B;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AA4OD;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAMlC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAL/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6C;IACvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAGnB,aAAa,GAAE,sBACH,EAC7B,OAAO,CAAC,EAAE,8BAA8B;IAMnC,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiC1E,qEAAqE;IAC/D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAED,eAAO,MAAM,8BAA8B,yBAAgC,CAAC"}
@@ -0,0 +1,283 @@
1
+ import { AppServerClient, } from "./appServerClient.js";
2
+ import { resolveCodexAppServerLaunch } from "./codexBinary.js";
3
+ const CLIENT_INFO = { name: "cyrus-codex-runner", version: "1.0.0" };
4
+ const DEFAULT_IDLE_CLOSE_MS = 30_000;
5
+ /**
6
+ * A single shared Codex app-server process serving every thread that shares an
7
+ * identical launch configuration (command + args + env). Individual
8
+ * CodexRunner threads acquire lightweight leases over the one JSON-RPC
9
+ * connection; notifications are fanned out to the owning thread by `threadId`.
10
+ * The process is torn down once the last lease is released (after an idle grace
11
+ * period) or when the process exits.
12
+ */
13
+ class PooledAppServerProcess {
14
+ launchOptions;
15
+ clientFactory;
16
+ idleCloseMs;
17
+ onDisposed;
18
+ client = null;
19
+ startPromise = null;
20
+ leaseCount = 0;
21
+ disposed = false;
22
+ idleTimer = null;
23
+ threadHandlers = new Map();
24
+ constructor(launchOptions, clientFactory, idleCloseMs,
25
+ /** Called when this process is fully torn down so the pool can drop it. */
26
+ onDisposed) {
27
+ this.launchOptions = launchOptions;
28
+ this.clientFactory = clientFactory;
29
+ this.idleCloseMs = idleCloseMs;
30
+ this.onDisposed = onDisposed;
31
+ }
32
+ /** Whether this process has been torn down and must not be reused. */
33
+ isDisposed() {
34
+ return this.disposed;
35
+ }
36
+ async acquireLease() {
37
+ if (this.disposed) {
38
+ throw new Error("Cannot acquire a lease on a disposed app-server process");
39
+ }
40
+ this.leaseCount += 1;
41
+ this.clearIdleTimer();
42
+ let released = false;
43
+ try {
44
+ await this.ensureStarted();
45
+ }
46
+ catch (error) {
47
+ released = true;
48
+ this.releaseRef();
49
+ throw error;
50
+ }
51
+ return {
52
+ request: (method, params) => {
53
+ const client = this.client;
54
+ if (!client) {
55
+ return Promise.reject(new Error(`Cannot send ${method}: app-server is not running`));
56
+ }
57
+ return client.request(method, params);
58
+ },
59
+ registerThread: (threadId, handler) => {
60
+ const existing = this.threadHandlers.get(threadId);
61
+ if (existing && existing !== handler) {
62
+ throw new Error(`Cannot register Codex thread ${threadId}: already registered`);
63
+ }
64
+ this.threadHandlers.set(threadId, handler);
65
+ },
66
+ unregisterThread: (threadId, handler) => {
67
+ if (this.threadHandlers.get(threadId) === handler) {
68
+ this.threadHandlers.delete(threadId);
69
+ }
70
+ },
71
+ release: () => {
72
+ if (released) {
73
+ return;
74
+ }
75
+ released = true;
76
+ this.releaseRef();
77
+ },
78
+ };
79
+ }
80
+ async close() {
81
+ this.markDisposed();
82
+ const client = this.client;
83
+ this.client = null;
84
+ await client?.close();
85
+ }
86
+ async ensureStarted() {
87
+ if (this.client) {
88
+ return;
89
+ }
90
+ if (this.startPromise) {
91
+ await this.startPromise;
92
+ return;
93
+ }
94
+ const client = this.clientFactory({
95
+ binaryPath: this.launchOptions.command,
96
+ args: this.launchOptions.args,
97
+ ...(this.launchOptions.env ? { env: this.launchOptions.env } : {}),
98
+ ...(this.launchOptions.requestTimeoutMs !== undefined
99
+ ? { requestTimeoutMs: this.launchOptions.requestTimeoutMs }
100
+ : {}),
101
+ });
102
+ this.client = client;
103
+ client.setNotificationHandler((method, params) => this.routeNotification(method, params));
104
+ client.setServerRequestHandler((method) => this.onServerRequest(method));
105
+ client.on("exit", () => this.onProcessGone());
106
+ client.on("error", (error) => this.onProcessError(error));
107
+ client.start();
108
+ const startPromise = client
109
+ .request("initialize", {
110
+ clientInfo: CLIENT_INFO,
111
+ capabilities: { experimentalApi: true },
112
+ })
113
+ .then(() => undefined)
114
+ .catch((error) => {
115
+ // Failed to initialize — tear down so the pool re-creates cleanly.
116
+ if (this.client === client) {
117
+ this.client = null;
118
+ this.markDisposed();
119
+ }
120
+ throw error;
121
+ })
122
+ .finally(() => {
123
+ if (this.startPromise === startPromise) {
124
+ this.startPromise = null;
125
+ }
126
+ });
127
+ this.startPromise = startPromise;
128
+ await startPromise;
129
+ }
130
+ routeNotification(method, params) {
131
+ const threadId = extractThreadId(params);
132
+ if (threadId) {
133
+ this.threadHandlers.get(threadId)?.onNotification(method, params);
134
+ return;
135
+ }
136
+ // No threadId on the notification. When exactly one thread is registered
137
+ // the target is unambiguous, so deliver it (robust against any
138
+ // notification type that omits the id). With multiple threads we cannot
139
+ // safely attribute it, so drop it rather than risk cross-thread delivery.
140
+ if (this.threadHandlers.size === 1) {
141
+ for (const handler of this.threadHandlers.values()) {
142
+ handler.onNotification(method, params);
143
+ }
144
+ }
145
+ }
146
+ onServerRequest(method) {
147
+ // With approvalPolicy="never" the server should not ask for approvals;
148
+ // respond defensively so a stray request can never wedge a turn.
149
+ if (/auth/i.test(method)) {
150
+ return { chatgptAuthToken: null };
151
+ }
152
+ if (/approval/i.test(method)) {
153
+ return { decision: "accept" };
154
+ }
155
+ return {};
156
+ }
157
+ onProcessGone() {
158
+ const handlers = [...new Set(this.threadHandlers.values())];
159
+ this.markDisposed();
160
+ this.client = null;
161
+ for (const handler of handlers) {
162
+ handler.onProcessGone();
163
+ }
164
+ }
165
+ onProcessError(error) {
166
+ for (const handler of new Set(this.threadHandlers.values())) {
167
+ handler.onProcessError(error);
168
+ }
169
+ }
170
+ releaseRef() {
171
+ this.leaseCount = Math.max(0, this.leaseCount - 1);
172
+ if (this.leaseCount === 0) {
173
+ this.scheduleIdleClose();
174
+ }
175
+ }
176
+ scheduleIdleClose() {
177
+ this.clearIdleTimer();
178
+ if (!this.client || this.disposed) {
179
+ return;
180
+ }
181
+ if (this.idleCloseMs <= 0) {
182
+ void this.close();
183
+ return;
184
+ }
185
+ this.idleTimer = setTimeout(() => {
186
+ // A lease may have been re-acquired during the grace period.
187
+ if (this.leaseCount === 0) {
188
+ void this.close();
189
+ }
190
+ }, this.idleCloseMs);
191
+ this.idleTimer.unref?.();
192
+ }
193
+ clearIdleTimer() {
194
+ if (this.idleTimer) {
195
+ clearTimeout(this.idleTimer);
196
+ this.idleTimer = null;
197
+ }
198
+ }
199
+ /** Tear down per-process state exactly once and notify the pool. */
200
+ markDisposed() {
201
+ if (this.disposed) {
202
+ return;
203
+ }
204
+ this.disposed = true;
205
+ this.clearIdleTimer();
206
+ this.threadHandlers.clear();
207
+ this.startPromise = null;
208
+ this.onDisposed();
209
+ }
210
+ }
211
+ /**
212
+ * Owns Codex app-server processes for this Node process, pooled by launch
213
+ * configuration. Threads that share an identical launch config (command + args
214
+ * + env) reuse one process; threads with a different config get their own,
215
+ * rather than failing. This keeps the startup-cost savings of sharing while
216
+ * supporting heterogeneous concurrent sessions and confining a process crash to
217
+ * the threads that share that exact configuration.
218
+ */
219
+ export class AppServerProcessManager {
220
+ clientFactory;
221
+ processes = new Map();
222
+ requestTimeoutMs;
223
+ idleCloseMs;
224
+ constructor(clientFactory = (options) => new AppServerClient(options), options) {
225
+ this.clientFactory = clientFactory;
226
+ this.requestTimeoutMs = options?.requestTimeoutMs;
227
+ this.idleCloseMs = options?.idleCloseMs ?? DEFAULT_IDLE_CLOSE_MS;
228
+ }
229
+ async acquire(config) {
230
+ const { command, args } = resolveCodexAppServerLaunch(config.codexPath);
231
+ const launchOptions = {
232
+ command,
233
+ args,
234
+ ...(config.env ? { env: config.env } : {}),
235
+ ...(this.requestTimeoutMs !== undefined
236
+ ? { requestTimeoutMs: this.requestTimeoutMs }
237
+ : {}),
238
+ };
239
+ const launchKey = buildLaunchKey(launchOptions);
240
+ let proc = this.processes.get(launchKey);
241
+ if (!proc || proc.isDisposed()) {
242
+ const created = new PooledAppServerProcess(launchOptions, this.clientFactory, this.idleCloseMs, () => {
243
+ // Only drop the entry if it still points at this instance — a
244
+ // replacement may already have taken its place.
245
+ if (this.processes.get(launchKey) === created) {
246
+ this.processes.delete(launchKey);
247
+ }
248
+ });
249
+ this.processes.set(launchKey, created);
250
+ proc = created;
251
+ }
252
+ return proc.acquireLease();
253
+ }
254
+ /** Tear down every pooled process (e.g. on shutdown or in tests). */
255
+ async closeAll() {
256
+ const processes = [...this.processes.values()];
257
+ this.processes.clear();
258
+ await Promise.all(processes.map((proc) => proc.close()));
259
+ }
260
+ }
261
+ export const defaultAppServerProcessManager = new AppServerProcessManager();
262
+ function extractThreadId(params) {
263
+ if (!params || typeof params !== "object") {
264
+ return undefined;
265
+ }
266
+ const p = params;
267
+ if (typeof p.threadId === "string") {
268
+ return p.threadId;
269
+ }
270
+ return typeof p.thread?.id === "string" ? p.thread.id : undefined;
271
+ }
272
+ function buildLaunchKey(options) {
273
+ return JSON.stringify({
274
+ command: options.command,
275
+ args: options.args,
276
+ env: options.env ? sortRecord(options.env) : null,
277
+ requestTimeoutMs: options.requestTimeoutMs ?? null,
278
+ });
279
+ }
280
+ function sortRecord(record) {
281
+ return Object.fromEntries(Object.entries(record).sort(([a], [b]) => a.localeCompare(b)));
282
+ }
283
+ //# sourceMappingURL=appServerProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appServerProcess.js","sourceRoot":"","sources":["../../src/backend/appServerProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAG/D,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrE,MAAM,qBAAqB,GAAG,MAAM,CAAC;AA2BrC;;;;;;;GAOG;AACH,MAAM,sBAAsB;IAST;IACA;IACA;IAEA;IAZV,MAAM,GAA4B,IAAI,CAAC;IACvC,YAAY,GAAyB,IAAI,CAAC;IAC1C,UAAU,GAAG,CAAC,CAAC;IACf,QAAQ,GAAG,KAAK,CAAC;IACjB,SAAS,GAAyC,IAAI,CAAC;IAC9C,cAAc,GAAG,IAAI,GAAG,EAAkC,CAAC;IAE5E,YACkB,aAA4B,EAC5B,aAAqC,EACrC,WAAmB;IACpC,2EAA2E;IAC1D,UAAsB;QAJtB,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAwB;QACrC,gBAAW,GAAX,WAAW,CAAQ;QAEnB,eAAU,GAAV,UAAU,CAAY;IACrC,CAAC;IAEJ,sEAAsE;IACtE,UAAU;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,YAAY;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACd,yDAAyD,CACzD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC;QACb,CAAC;QAED,OAAO;YACN,OAAO,EAAE,CAAc,MAAc,EAAE,MAAe,EAAc,EAAE;gBACrE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,OAAO,OAAO,CAAC,MAAM,CACpB,IAAI,KAAK,CAAC,eAAe,MAAM,6BAA6B,CAAC,CAC7D,CAAC;gBACH,CAAC;gBACD,OAAO,MAAM,CAAC,OAAO,CAAI,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC;YACD,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CACd,gCAAgC,QAAQ,sBAAsB,CAC9D,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;gBACvC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC;oBACnD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACtC,CAAC;YACF,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACb,IAAI,QAAQ,EAAE,CAAC;oBACd,OAAO;gBACR,CAAC;gBACD,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,aAAa;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,YAAY,CAAC;YACxB,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YACjC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO;YACtC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;YAC7B,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,KAAK,SAAS;gBACpD,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE;gBAC3D,CAAC,CAAC,EAAE,CAAC;SACN,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAChD,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CACtC,CAAC;QACF,MAAM,CAAC,uBAAuB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,MAAM,YAAY,GAAG,MAAM;aACzB,OAAO,CAAC,YAAY,EAAE;YACtB,UAAU,EAAE,WAAW;YACvB,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;SACvC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACrB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAChB,mEAAmE;YACnE,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACb,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC1B,CAAC;QACF,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,MAAM,YAAY,CAAC;IACpB,CAAC;IAEO,iBAAiB,CAAC,MAAc,EAAE,MAAe;QACxD,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClE,OAAO;QACR,CAAC;QACD,yEAAyE;QACzE,+DAA+D;QAC/D,wEAAwE;QACxE,0EAA0E;QAC1E,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;gBACpD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;IACF,CAAC;IAEO,eAAe,CAAC,MAAc;QACrC,uEAAuE;QACvE,iEAAiE;QACjE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;QACnC,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAEO,aAAa;QACpB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC;IACF,CAAC;IAEO,cAAc,CAAC,KAAc;QACpC,KAAK,MAAM,OAAO,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;IAEO,UAAU;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1B,CAAC;IACF,CAAC;IAEO,iBAAiB;QACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO;QACR,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,6DAA6D;YAC7D,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;QACF,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,CAAC;IACF,CAAC;IAED,oEAAoE;IAC5D,YAAY;QACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;CACD;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAuB;IAMjB;IALD,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IACtD,gBAAgB,CAAqB;IACrC,WAAW,CAAS;IAErC,YACkB,gBAAwC,CAAC,OAAO,EAAE,EAAE,CACpE,IAAI,eAAe,CAAC,OAAO,CAAC,EAC7B,OAAwC;QAFvB,kBAAa,GAAb,aAAa,CACD;QAG7B,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,qBAAqB,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAA2B;QACxC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,2BAA2B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,aAAa,GAAkB;YACpC,OAAO;YACP,IAAI;YACJ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS;gBACtC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBAC7C,CAAC,CAAC,EAAE,CAAC;SACN,CAAC;QACF,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;QAEhD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,sBAAsB,CACzC,aAAa,EACb,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,EAChB,GAAG,EAAE;gBACJ,8DAA8D;gBAC9D,gDAAgD;gBAChD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;oBAC/C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAClC,CAAC;YACF,CAAC,CACD,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACvC,IAAI,GAAG,OAAO,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,QAAQ;QACb,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;CACD;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,uBAAuB,EAAE,CAAC;AAE5E,SAAS,eAAe,CAAC,MAAe;IACvC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,GAAG,MAGT,CAAC;IACF,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,OAAsB;IAC7C,OAAO,IAAI,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACjD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;KAClD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAA8B;IACjD,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** How to launch a `codex app-server` process: a command + its full argv. */
2
+ export interface CodexAppServerLaunch {
3
+ command: string;
4
+ args: string[];
5
+ }
6
+ /**
7
+ * Resolve how to launch `codex app-server`.
8
+ *
9
+ * The `@openai/codex-sdk` only exposes the high-level `Codex`/`Thread` API (no
10
+ * app-server transport, no `turn/steer`), and no getter for its bundled binary,
11
+ * so we drive the CLI ourselves. Rather than re-derive the platform→vendor
12
+ * binary path (a fragile coupling to the SDK's internal layout), we invoke the
13
+ * `@openai/codex` package's **public** `bin` launcher (`bin/codex.js`) via Node:
14
+ * that launcher owns the platform-package/vendor resolution and forwards stdio
15
+ * + termination signals to the native binary. We read its location from the
16
+ * package's own `package.json` `bin` entry, so a future vendor-layout change
17
+ * upstream costs us nothing.
18
+ *
19
+ * @param override Explicit Codex binary path (from config). When set, that
20
+ * binary is launched directly (no Node launcher) — mirrors the SDK's
21
+ * `codexPathOverride`.
22
+ */
23
+ export declare function resolveCodexAppServerLaunch(override?: string): CodexAppServerLaunch;
24
+ //# sourceMappingURL=codexBinary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexBinary.d.ts","sourceRoot":"","sources":["../../src/backend/codexBinary.ts"],"names":[],"mappings":"AAQA,6EAA6E;AAC7E,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAC1C,QAAQ,CAAC,EAAE,MAAM,GACf,oBAAoB,CA2BtB"}
@@ -0,0 +1,44 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import path from "node:path";
4
+ const CODEX_NPM_NAME = "@openai/codex";
5
+ /** The `codex app-server` subcommand + transport flags shared by both launch modes. */
6
+ const APP_SERVER_ARGS = ["app-server", "--listen", "stdio://"];
7
+ /**
8
+ * Resolve how to launch `codex app-server`.
9
+ *
10
+ * The `@openai/codex-sdk` only exposes the high-level `Codex`/`Thread` API (no
11
+ * app-server transport, no `turn/steer`), and no getter for its bundled binary,
12
+ * so we drive the CLI ourselves. Rather than re-derive the platform→vendor
13
+ * binary path (a fragile coupling to the SDK's internal layout), we invoke the
14
+ * `@openai/codex` package's **public** `bin` launcher (`bin/codex.js`) via Node:
15
+ * that launcher owns the platform-package/vendor resolution and forwards stdio
16
+ * + termination signals to the native binary. We read its location from the
17
+ * package's own `package.json` `bin` entry, so a future vendor-layout change
18
+ * upstream costs us nothing.
19
+ *
20
+ * @param override Explicit Codex binary path (from config). When set, that
21
+ * binary is launched directly (no Node launcher) — mirrors the SDK's
22
+ * `codexPathOverride`.
23
+ */
24
+ export function resolveCodexAppServerLaunch(override) {
25
+ if (override) {
26
+ return { command: override, args: [...APP_SERVER_ARGS] };
27
+ }
28
+ const require = createRequire(import.meta.url);
29
+ let packageJsonPath;
30
+ try {
31
+ packageJsonPath = require.resolve(`${CODEX_NPM_NAME}/package.json`);
32
+ }
33
+ catch {
34
+ throw new Error(`Unable to locate ${CODEX_NPM_NAME}. Ensure it is installed as a dependency.`);
35
+ }
36
+ const pkg = JSON.parse(readFileSync(packageJsonPath, "utf8"));
37
+ const binRelative = typeof pkg.bin === "string" ? pkg.bin : pkg.bin?.codex;
38
+ if (!binRelative) {
39
+ throw new Error(`${CODEX_NPM_NAME} has no \`codex\` bin entry; cannot locate the CLI launcher.`);
40
+ }
41
+ const launcher = path.join(path.dirname(packageJsonPath), binRelative);
42
+ return { command: process.execPath, args: [launcher, ...APP_SERVER_ARGS] };
43
+ }
44
+ //# sourceMappingURL=codexBinary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexBinary.js","sourceRoot":"","sources":["../../src/backend/codexBinary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,cAAc,GAAG,eAAe,CAAC;AACvC,uFAAuF;AACvF,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAQxE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,2BAA2B,CAC1C,QAAiB;IAEjB,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACJ,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,cAAc,eAAe,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,KAAK,CACd,oBAAoB,cAAc,2CAA2C,CAC7E,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAE3D,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC3E,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACd,GAAG,cAAc,8DAA8D,CAC/E,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;IACvE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;AAC5E,CAAC"}