@rudderhq/agent-runtime-codex-local 0.4.6-canary.9 → 0.5.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 (50) hide show
  1. package/dist/server/app-server-chat.d.ts +34 -0
  2. package/dist/server/app-server-chat.d.ts.map +1 -0
  3. package/dist/server/app-server-chat.js +584 -0
  4. package/dist/server/app-server-chat.js.map +1 -0
  5. package/dist/server/app-server-chat.test.d.ts +2 -0
  6. package/dist/server/app-server-chat.test.d.ts.map +1 -0
  7. package/dist/server/app-server-chat.test.js +431 -0
  8. package/dist/server/app-server-chat.test.js.map +1 -0
  9. package/dist/server/app-server-client.d.ts +126 -0
  10. package/dist/server/app-server-client.d.ts.map +1 -0
  11. package/dist/server/app-server-client.js +603 -0
  12. package/dist/server/app-server-client.js.map +1 -0
  13. package/dist/server/app-server-client.test.d.ts +2 -0
  14. package/dist/server/app-server-client.test.d.ts.map +1 -0
  15. package/dist/server/app-server-client.test.js +656 -0
  16. package/dist/server/app-server-client.test.js.map +1 -0
  17. package/dist/server/codex-home.d.ts +2 -2
  18. package/dist/server/codex-home.d.ts.map +1 -1
  19. package/dist/server/codex-home.js +10 -6
  20. package/dist/server/codex-home.js.map +1 -1
  21. package/dist/server/execute.d.ts.map +1 -1
  22. package/dist/server/execute.js +187 -20
  23. package/dist/server/execute.js.map +1 -1
  24. package/dist/server/index.d.ts +1 -0
  25. package/dist/server/index.d.ts.map +1 -1
  26. package/dist/server/index.js +1 -0
  27. package/dist/server/index.js.map +1 -1
  28. package/dist/server/inline-visuals.d.ts +24 -0
  29. package/dist/server/inline-visuals.d.ts.map +1 -0
  30. package/dist/server/inline-visuals.js +174 -0
  31. package/dist/server/inline-visuals.js.map +1 -0
  32. package/dist/server/inline-visuals.test.d.ts +2 -0
  33. package/dist/server/inline-visuals.test.d.ts.map +1 -0
  34. package/dist/server/inline-visuals.test.js +202 -0
  35. package/dist/server/inline-visuals.test.js.map +1 -0
  36. package/dist/ui/parse-stdout.js +2 -2
  37. package/dist/ui/parse-stdout.js.map +1 -1
  38. package/package.json +3 -2
  39. package/skills/rudder-docs/SKILL.md +161 -0
  40. package/skills/rudder-docs/evals/trigger-evals.json +82 -0
  41. package/skills/{rudder → rudder-docs}/references/api-reference.md +17 -1
  42. package/skills/{rudder → rudder-docs}/references/cli-reference.md +49 -94
  43. package/skills/rudder-docs/references/control-plane-practices.md +231 -0
  44. package/skills/{rudder → rudder-docs}/references/organization-skills.md +15 -1
  45. package/skills/rudder-docs/references/source-map.md +138 -0
  46. package/skills/visualize/SKILL.md +132 -0
  47. package/skills/visualize/agents/openai.yaml +7 -0
  48. package/skills/visualize/assets/example-chart.html +89 -0
  49. package/skills/visualize/references/runtime-contract.md +114 -0
  50. package/skills/rudder/SKILL.md +0 -314
@@ -0,0 +1,431 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { parseCodexStdoutLine } from "../ui/parse-stdout.js";
6
+ import { executeCodexAppServerChat } from "./app-server-chat.js";
7
+ let root = "";
8
+ let fakeCodex = "";
9
+ async function waitFor(read, timeoutMs = 2_000) {
10
+ const deadline = Date.now() + timeoutMs;
11
+ while (Date.now() < deadline) {
12
+ const value = read();
13
+ if (value !== null)
14
+ return value;
15
+ await new Promise((resolve) => setTimeout(resolve, 10));
16
+ }
17
+ throw new Error("Timed out waiting for fake App Server state");
18
+ }
19
+ beforeEach(async () => {
20
+ root = await fs.mkdtemp(path.join(os.tmpdir(), "rudder-codex-app-chat-"));
21
+ fakeCodex = path.join(root, "fake-codex.mjs");
22
+ await fs.writeFile(fakeCodex, `#!/usr/bin/env node
23
+ import readline from "node:readline";
24
+
25
+ const threadId = "thread-app-1";
26
+ const turnId = "turn-app-1";
27
+ const send = (message) => process.stdout.write(JSON.stringify(message) + "\\n");
28
+ const finish = (status = "completed") => {
29
+ send({ method: "thread/tokenUsage/updated", params: {
30
+ threadId,
31
+ turnId,
32
+ tokenUsage: {
33
+ total: { totalTokens: 9, inputTokens: 4, cachedInputTokens: 1, outputTokens: 5, reasoningOutputTokens: 0 },
34
+ last: { totalTokens: 9, inputTokens: 4, cachedInputTokens: 1, outputTokens: 5, reasoningOutputTokens: 0 },
35
+ modelContextWindow: 1000,
36
+ },
37
+ } });
38
+ send({ method: "item/agentMessage/delta", params: { threadId, turnId, itemId: "agent-1", delta: "Steered " } });
39
+ send({ method: "item/agentMessage/delta", params: { threadId, turnId, itemId: "agent-1", delta: "reply" } });
40
+ send({ method: "item/completed", params: {
41
+ threadId,
42
+ turnId,
43
+ completedAtMs: Date.now(),
44
+ item: { type: "agentMessage", id: "agent-1", text: "Steered reply", phase: null, memoryCitation: null },
45
+ } });
46
+ send({ method: "turn/completed", params: {
47
+ threadId,
48
+ turn: { id: turnId, items: [], itemsView: { type: "full" }, status, error: null, startedAt: 1, completedAt: 2, durationMs: 1 },
49
+ } });
50
+ };
51
+
52
+ const rl = readline.createInterface({ input: process.stdin });
53
+ rl.on("line", (line) => {
54
+ const message = JSON.parse(line);
55
+ if (message.method === "initialized") return;
56
+ if (message.method === "initialize") {
57
+ send({ id: message.id, result: { userAgent: "fake", platformFamily: "unix", platformOs: "macos" } });
58
+ return;
59
+ }
60
+ if (message.method === "thread/start" || message.method === "thread/resume") {
61
+ send({ id: message.id, result: { thread: { id: threadId } } });
62
+ return;
63
+ }
64
+ if (message.method === "turn/start") {
65
+ send({ id: message.id, result: { turn: { id: turnId } } });
66
+ send({ method: "turn/started", params: { threadId, turn: { id: turnId } } });
67
+ if (process.env.RUDDER_TEST_DUAL_REASONING_STREAM === "1") {
68
+ for (const delta of ["I will use ", "visualize once."]) {
69
+ send({ method: "item/reasoning/summaryTextDelta", params: {
70
+ threadId, turnId, itemId: "reason-1", summaryIndex: 0, delta,
71
+ } });
72
+ send({ method: "item/reasoning/textDelta", params: {
73
+ threadId, turnId, itemId: "reason-1", contentIndex: 0, delta,
74
+ } });
75
+ }
76
+ send({ method: "item/completed", params: {
77
+ threadId,
78
+ turnId,
79
+ item: { type: "reasoning", id: "reason-1", summary: ["I will use visualize once."], content: [] },
80
+ } });
81
+ finish("completed");
82
+ }
83
+ if (process.env.RUDDER_TEST_RAW_REASONING_STREAM === "1") {
84
+ for (const delta of ["Raw-only ", "reasoning."]) {
85
+ send({ method: "item/reasoning/textDelta", params: {
86
+ threadId, turnId, itemId: "reason-raw", contentIndex: 0, delta,
87
+ } });
88
+ }
89
+ finish("interrupted");
90
+ }
91
+ if (process.env.RUDDER_TEST_MULTIPART_REASONING_STREAM === "1") {
92
+ send({ method: "item/reasoning/summaryPartAdded", params: {
93
+ threadId, turnId, itemId: "reason-multipart", summaryIndex: 0,
94
+ } });
95
+ send({ method: "item/reasoning/summaryTextDelta", params: {
96
+ threadId, turnId, itemId: "reason-multipart", summaryIndex: 0, delta: "Inspect the state.",
97
+ } });
98
+ send({ method: "item/reasoning/summaryPartAdded", params: {
99
+ threadId, turnId, itemId: "reason-multipart", summaryIndex: 1,
100
+ } });
101
+ send({ method: "item/reasoning/summaryTextDelta", params: {
102
+ threadId, turnId, itemId: "reason-multipart", summaryIndex: 1, delta: "Apply the fix.",
103
+ } });
104
+ send({ method: "item/completed", params: {
105
+ threadId,
106
+ turnId,
107
+ item: { type: "reasoning", id: "reason-multipart", summary: ["Inspect the state.", "Apply the fix."], content: [] },
108
+ } });
109
+ finish("completed");
110
+ }
111
+ return;
112
+ }
113
+ if (message.method === "turn/steer") {
114
+ send({ id: message.id, result: { turnId } });
115
+ finish("completed");
116
+ return;
117
+ }
118
+ if (message.method === "turn/interrupt") {
119
+ send({ id: message.id, result: {} });
120
+ finish("interrupted");
121
+ }
122
+ });
123
+ process.on("SIGTERM", () => {
124
+ if (process.env.RUDDER_TEST_IGNORE_SIGTERM !== "1") process.exit(0);
125
+ });
126
+ `, "utf8");
127
+ await fs.chmod(fakeCodex, 0o755);
128
+ });
129
+ afterEach(async () => {
130
+ await fs.rm(root, { recursive: true, force: true });
131
+ });
132
+ describe("executeCodexAppServerChat", () => {
133
+ it("does not leak dispose rejection when setup logging fails before awaiting the turn", async () => {
134
+ const result = await executeCodexAppServerChat({
135
+ command: fakeCodex,
136
+ cwd: root,
137
+ env: { ...process.env, PATH: process.env.PATH ?? "" },
138
+ prompt: "Initial request",
139
+ model: "gpt-test",
140
+ modelReasoningEffort: "high",
141
+ search: false,
142
+ bypassApprovalsAndSandbox: true,
143
+ imagePaths: [],
144
+ sessionId: null,
145
+ timeoutSec: 5,
146
+ onLog: vi.fn(async (_stream, chunk) => {
147
+ if (chunk.includes('"type":"thread.started"')) {
148
+ throw new Error("thread started log failed");
149
+ }
150
+ }),
151
+ });
152
+ expect(result).toMatchObject({
153
+ exitCode: 1,
154
+ errorMessage: "thread started log failed",
155
+ });
156
+ });
157
+ it("does not leak dispose rejection when control registration fails after turn start", async () => {
158
+ const result = await executeCodexAppServerChat({
159
+ command: fakeCodex,
160
+ cwd: root,
161
+ env: { ...process.env, PATH: process.env.PATH ?? "" },
162
+ prompt: "Initial request",
163
+ model: "gpt-test",
164
+ modelReasoningEffort: "high",
165
+ search: false,
166
+ bypassApprovalsAndSandbox: true,
167
+ imagePaths: [],
168
+ sessionId: null,
169
+ timeoutSec: 5,
170
+ onLog: vi.fn(async () => undefined),
171
+ controlAttempt: {
172
+ attemptEpoch: 1,
173
+ ownerToken: "owner-1",
174
+ register: vi.fn(async () => {
175
+ throw new Error("control registration failed");
176
+ }),
177
+ complete: vi.fn(async () => undefined),
178
+ },
179
+ });
180
+ expect(result).toMatchObject({
181
+ exitCode: 1,
182
+ errorMessage: "control registration failed",
183
+ });
184
+ });
185
+ it("publishes a native same-turn Steer handle and returns per-turn usage", async () => {
186
+ let handle = null;
187
+ const stdoutLines = [];
188
+ const handleLease = {
189
+ isCurrent: () => true,
190
+ release: vi.fn(async () => handle?.dispose()),
191
+ };
192
+ const execution = executeCodexAppServerChat({
193
+ command: fakeCodex,
194
+ cwd: root,
195
+ env: { ...process.env, PATH: process.env.PATH ?? "" },
196
+ prompt: "Initial request",
197
+ model: "gpt-test",
198
+ modelReasoningEffort: "high",
199
+ search: true,
200
+ bypassApprovalsAndSandbox: true,
201
+ imagePaths: [],
202
+ sessionId: null,
203
+ timeoutSec: 5,
204
+ onLog: vi.fn(async (stream, chunk) => {
205
+ if (stream === "stdout")
206
+ stdoutLines.push(chunk.trim());
207
+ }),
208
+ controlAttempt: {
209
+ attemptEpoch: 1,
210
+ ownerToken: "owner-1",
211
+ register: vi.fn(async (published) => {
212
+ handle = published;
213
+ return handleLease;
214
+ }),
215
+ complete: vi.fn(async () => undefined),
216
+ },
217
+ });
218
+ const activeHandle = await waitFor(() => handle);
219
+ const steerResult = await activeHandle.steer({
220
+ text: "Change direction",
221
+ clientMessageId: "client-control-1",
222
+ });
223
+ const result = await execution;
224
+ expect(steerResult).toEqual({
225
+ disposition: "accepted_current",
226
+ providerThreadId: "thread-app-1",
227
+ providerTurnId: "turn-app-1",
228
+ });
229
+ expect(result).toMatchObject({
230
+ exitCode: 0,
231
+ timedOut: false,
232
+ summary: "Steered reply",
233
+ sessionId: "thread-app-1",
234
+ providerTurnId: "turn-app-1",
235
+ usage: { inputTokens: 4, cachedInputTokens: 1, outputTokens: 5 },
236
+ });
237
+ expect(result.stdout).toContain('"type":"turn.completed"');
238
+ const assistantEntries = stdoutLines
239
+ .filter((line) => line.includes('"type":"item.completed"'))
240
+ .flatMap((line) => parseCodexStdoutLine(line, "2026-07-16T00:00:00.000Z"))
241
+ .filter((entry) => entry.kind === "assistant");
242
+ expect(assistantEntries).toEqual([
243
+ expect.objectContaining({ kind: "assistant", text: "Steered ", delta: true }),
244
+ expect.objectContaining({ kind: "assistant", text: "reply", delta: true }),
245
+ ]);
246
+ expect(stdoutLines.filter((line) => line.includes('"text":"Steered reply"'))).toEqual([]);
247
+ });
248
+ it("projects one readable reasoning stream when Codex emits summary and raw deltas", async () => {
249
+ const stdoutLines = [];
250
+ const result = await executeCodexAppServerChat({
251
+ command: fakeCodex,
252
+ cwd: root,
253
+ env: {
254
+ ...process.env,
255
+ PATH: process.env.PATH ?? "",
256
+ RUDDER_TEST_DUAL_REASONING_STREAM: "1",
257
+ },
258
+ prompt: "Explain your next step",
259
+ model: "gpt-test",
260
+ modelReasoningEffort: "high",
261
+ search: false,
262
+ bypassApprovalsAndSandbox: true,
263
+ imagePaths: [],
264
+ sessionId: null,
265
+ timeoutSec: 5,
266
+ onLog: vi.fn(async (stream, chunk) => {
267
+ if (stream === "stdout")
268
+ stdoutLines.push(chunk.trim());
269
+ }),
270
+ });
271
+ expect(result.exitCode).toBe(0);
272
+ const thinkingEntries = stdoutLines
273
+ .filter((line) => line.includes('"type":"item.completed"'))
274
+ .flatMap((line) => parseCodexStdoutLine(line, "2026-07-16T00:00:00.000Z"))
275
+ .filter((entry) => entry.kind === "thinking");
276
+ expect(thinkingEntries).toEqual([
277
+ expect.objectContaining({ kind: "thinking", text: "I will use ", delta: true }),
278
+ expect.objectContaining({ kind: "thinking", text: "visualize once.", delta: true }),
279
+ ]);
280
+ expect(thinkingEntries.map((entry) => entry.text).join("")).toBe("I will use visualize once.");
281
+ });
282
+ it("keeps raw-only reasoning visible when no readable summary stream exists", async () => {
283
+ const stdoutLines = [];
284
+ const result = await executeCodexAppServerChat({
285
+ command: fakeCodex,
286
+ cwd: root,
287
+ env: {
288
+ ...process.env,
289
+ PATH: process.env.PATH ?? "",
290
+ RUDDER_TEST_RAW_REASONING_STREAM: "1",
291
+ },
292
+ prompt: "Explain with a raw-only model",
293
+ model: "gpt-test",
294
+ modelReasoningEffort: "high",
295
+ search: false,
296
+ bypassApprovalsAndSandbox: true,
297
+ imagePaths: [],
298
+ sessionId: null,
299
+ timeoutSec: 5,
300
+ onLog: vi.fn(async (stream, chunk) => {
301
+ if (stream === "stdout")
302
+ stdoutLines.push(chunk.trim());
303
+ }),
304
+ });
305
+ expect(result.errorMessage).toBe("Codex turn interrupted");
306
+ const thinkingText = stdoutLines
307
+ .filter((line) => line.includes('"type":"item.completed"'))
308
+ .flatMap((line) => parseCodexStdoutLine(line, "2026-07-16T00:00:00.000Z"))
309
+ .filter((entry) => entry.kind === "thinking")
310
+ .map((entry) => entry.text)
311
+ .join("");
312
+ expect(thinkingText).toBe("Raw-only reasoning.");
313
+ });
314
+ it("preserves readable boundaries between multiple reasoning summary parts", async () => {
315
+ const stdoutLines = [];
316
+ const result = await executeCodexAppServerChat({
317
+ command: fakeCodex,
318
+ cwd: root,
319
+ env: {
320
+ ...process.env,
321
+ PATH: process.env.PATH ?? "",
322
+ RUDDER_TEST_MULTIPART_REASONING_STREAM: "1",
323
+ },
324
+ prompt: "Explain two steps",
325
+ model: "gpt-test",
326
+ modelReasoningEffort: "high",
327
+ search: false,
328
+ bypassApprovalsAndSandbox: true,
329
+ imagePaths: [],
330
+ sessionId: null,
331
+ timeoutSec: 5,
332
+ onLog: vi.fn(async (stream, chunk) => {
333
+ if (stream === "stdout")
334
+ stdoutLines.push(chunk.trim());
335
+ }),
336
+ });
337
+ expect(result.exitCode).toBe(0);
338
+ const thinkingText = stdoutLines
339
+ .filter((line) => line.includes('"type":"item.completed"'))
340
+ .flatMap((line) => parseCodexStdoutLine(line, "2026-07-16T00:00:00.000Z"))
341
+ .filter((entry) => entry.kind === "thinking")
342
+ .map((entry) => entry.text)
343
+ .join("");
344
+ expect(thinkingText).toBe("Inspect the state.\nApply the fix.");
345
+ });
346
+ it("uses native interrupt before process termination when Stop aborts the turn", async () => {
347
+ const controller = new AbortController();
348
+ let handle = null;
349
+ const execution = executeCodexAppServerChat({
350
+ command: fakeCodex,
351
+ cwd: root,
352
+ env: { ...process.env, PATH: process.env.PATH ?? "" },
353
+ prompt: "Long request",
354
+ model: "gpt-test",
355
+ modelReasoningEffort: "high",
356
+ search: false,
357
+ bypassApprovalsAndSandbox: true,
358
+ imagePaths: [],
359
+ sessionId: null,
360
+ timeoutSec: 5,
361
+ abortSignal: controller.signal,
362
+ onLog: vi.fn(async () => undefined),
363
+ controlAttempt: {
364
+ attemptEpoch: 1,
365
+ ownerToken: "owner-1",
366
+ register: vi.fn(async (published) => {
367
+ handle = published;
368
+ return {
369
+ isCurrent: () => true,
370
+ release: vi.fn(async () => published.dispose()),
371
+ };
372
+ }),
373
+ complete: vi.fn(async () => undefined),
374
+ },
375
+ });
376
+ await waitFor(() => handle);
377
+ controller.abort();
378
+ const result = await execution;
379
+ expect(result.signal).toBe("SIGTERM");
380
+ expect(result.timedOut).toBe(false);
381
+ expect(result.stdout).toContain('"subtype":"interrupted"');
382
+ expect(result.stdout).not.toContain('"text":"Steered reply"');
383
+ expect(result.summary).toBe("");
384
+ });
385
+ it("force-kills an App Server process that ignores graceful shutdown", async () => {
386
+ let handle = null;
387
+ let childPid = null;
388
+ const startedAt = Date.now();
389
+ const execution = executeCodexAppServerChat({
390
+ command: fakeCodex,
391
+ cwd: root,
392
+ env: {
393
+ ...process.env,
394
+ PATH: process.env.PATH ?? "",
395
+ RUDDER_TEST_IGNORE_SIGTERM: "1",
396
+ },
397
+ prompt: "Initial request",
398
+ model: "gpt-test",
399
+ modelReasoningEffort: "high",
400
+ search: false,
401
+ bypassApprovalsAndSandbox: true,
402
+ imagePaths: [],
403
+ sessionId: null,
404
+ timeoutSec: 5,
405
+ onLog: vi.fn(async () => undefined),
406
+ onSpawn: async ({ pid }) => {
407
+ childPid = pid;
408
+ },
409
+ controlAttempt: {
410
+ attemptEpoch: 1,
411
+ ownerToken: "owner-1",
412
+ register: vi.fn(async (published) => {
413
+ handle = published;
414
+ return {
415
+ isCurrent: () => true,
416
+ release: vi.fn(async () => undefined),
417
+ };
418
+ }),
419
+ complete: vi.fn(async () => undefined),
420
+ },
421
+ });
422
+ const activeHandle = await waitFor(() => handle);
423
+ await activeHandle.steer({ text: "Finish", clientMessageId: "control-1" });
424
+ const result = await execution;
425
+ expect(result.exitCode).toBe(0);
426
+ expect(Date.now() - startedAt).toBeGreaterThanOrEqual(1_800);
427
+ expect(childPid).not.toBeNull();
428
+ expect(() => process.kill(childPid, 0)).toThrow();
429
+ }, 10_000);
430
+ });
431
+ //# sourceMappingURL=app-server-chat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-server-chat.test.js","sourceRoot":"","sources":["../../src/server/app-server-chat.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import type { ChildProcess } from "node:child_process";
2
+ export type CodexAppServerRequestId = string | number;
3
+ export type CodexAppServerClientState = "new" | "initializing" | "ready" | "closed" | "failed";
4
+ export interface CodexAppServerTransportExit {
5
+ code: number | null;
6
+ signal: NodeJS.Signals | null;
7
+ error?: Error;
8
+ }
9
+ export interface CodexAppServerTransport {
10
+ write(serializedMessage: string): void;
11
+ onStdout(listener: (chunk: Buffer | Uint8Array | string) => void): () => void;
12
+ onExit(listener: (exit: CodexAppServerTransportExit) => void): () => void;
13
+ terminate?(): void;
14
+ }
15
+ export interface CodexAppServerClientInfo {
16
+ name: string;
17
+ title?: string;
18
+ version: string;
19
+ }
20
+ export interface CodexAppServerNotification {
21
+ method: string;
22
+ params?: unknown;
23
+ }
24
+ export interface CodexAppServerNotificationContext {
25
+ signal: AbortSignal;
26
+ }
27
+ export interface CodexAppServerServerRequest {
28
+ id: CodexAppServerRequestId;
29
+ method: string;
30
+ params?: unknown;
31
+ }
32
+ export interface CodexAppServerServerRequestContext extends CodexAppServerServerRequest {
33
+ signal: AbortSignal;
34
+ }
35
+ export type CodexAppServerServerRequestHandler = (request: CodexAppServerServerRequestContext) => unknown | Promise<unknown>;
36
+ export interface CodexAppServerClientOptions {
37
+ transport: CodexAppServerTransport;
38
+ clientInfo: CodexAppServerClientInfo;
39
+ capabilities?: Record<string, unknown> | null;
40
+ requestTimeoutMs?: number;
41
+ serverRequestTimeoutMs?: number;
42
+ notificationDrainTimeoutMs?: number;
43
+ maxServerRequestIds?: number;
44
+ maxFrameBytes?: number;
45
+ abortSignal?: AbortSignal;
46
+ serverRequestHandlers?: Readonly<Record<string, CodexAppServerServerRequestHandler>>;
47
+ onNotification?: (notification: CodexAppServerNotification, context: CodexAppServerNotificationContext) => void | Promise<void>;
48
+ onCapabilityGateClosed?: (error: CodexAppServerProtocolError) => void;
49
+ onError?: (error: Error) => void;
50
+ }
51
+ interface RpcErrorShape {
52
+ code: number;
53
+ message: string;
54
+ data?: unknown;
55
+ }
56
+ export declare class CodexAppServerProtocolError extends Error {
57
+ readonly name = "CodexAppServerProtocolError";
58
+ }
59
+ export declare class CodexAppServerClosedError extends Error {
60
+ readonly name = "CodexAppServerClosedError";
61
+ }
62
+ export declare class CodexAppServerTimeoutError extends Error {
63
+ readonly name = "CodexAppServerTimeoutError";
64
+ }
65
+ export declare class CodexAppServerRpcError extends Error {
66
+ readonly name = "CodexAppServerRpcError";
67
+ readonly code: number;
68
+ readonly data: unknown;
69
+ constructor(error: RpcErrorShape);
70
+ }
71
+ export declare function createCodexAppServerStdioTransport(child: ChildProcess): CodexAppServerTransport;
72
+ export declare class CodexAppServerClient {
73
+ private readonly transport;
74
+ private readonly options;
75
+ private readonly framer;
76
+ private readonly requestTimeoutMs;
77
+ private readonly serverRequestTimeoutMs;
78
+ private readonly notificationDrainTimeoutMs;
79
+ private readonly maxServerRequestIds;
80
+ private readonly serverRequestHandlers;
81
+ private readonly pendingClientRequests;
82
+ private readonly completedClientRequestIds;
83
+ private readonly pendingServerRequests;
84
+ private readonly completedServerRequestIds;
85
+ private notificationChain;
86
+ private readonly notificationAbortController;
87
+ private nextRequestId;
88
+ private stateValue;
89
+ private protocolCompatibleValue;
90
+ private capabilityGateErrorValue;
91
+ private initializePromise;
92
+ private closing;
93
+ private transportOpen;
94
+ private removeStdoutListener;
95
+ private removeExitListener;
96
+ private removeAbortListener;
97
+ constructor(options: CodexAppServerClientOptions);
98
+ get state(): CodexAppServerClientState;
99
+ get protocolCompatible(): boolean;
100
+ get capabilityGateError(): CodexAppServerProtocolError | null;
101
+ get pendingRequestCount(): number;
102
+ get pendingServerRequestCount(): number;
103
+ initialize(): Promise<unknown>;
104
+ request<TResult = unknown>(method: string, params?: unknown, timeoutMs?: number): Promise<TResult>;
105
+ notify(method: string, params?: unknown): void;
106
+ dispose(reason?: string): void;
107
+ private sendRequest;
108
+ private writeMessage;
109
+ private handleStdout;
110
+ private handleLine;
111
+ private handleResponse;
112
+ private handleNotification;
113
+ private handleServerRequest;
114
+ private respondToServerRequest;
115
+ private rememberCompletedServerRequest;
116
+ private rememberCompletedClientRequest;
117
+ private handleExit;
118
+ private failProtocol;
119
+ private closeCapabilityGate;
120
+ private notifyCapabilityGateClosed;
121
+ private shutdown;
122
+ private finishNotificationDrain;
123
+ private reportError;
124
+ }
125
+ export {};
126
+ //# sourceMappingURL=app-server-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-server-client.d.ts","sourceRoot":"","sources":["../../src/server/app-server-client.ts"],"names":[],"mappings":"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"}