@a5c-ai/agent-mux-adapters 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/amp-adapter.d.ts +31 -0
  2. package/dist/amp-adapter.d.ts.map +1 -0
  3. package/dist/amp-adapter.js +336 -0
  4. package/dist/amp-adapter.js.map +1 -0
  5. package/dist/base-adapter-helpers.d.ts +8 -0
  6. package/dist/base-adapter-helpers.d.ts.map +1 -0
  7. package/dist/base-adapter-helpers.js +68 -0
  8. package/dist/base-adapter-helpers.js.map +1 -0
  9. package/dist/base-adapter.d.ts +14 -9
  10. package/dist/base-adapter.d.ts.map +1 -1
  11. package/dist/base-adapter.js +23 -66
  12. package/dist/base-adapter.js.map +1 -1
  13. package/dist/claude-adapter.d.ts.map +1 -1
  14. package/dist/claude-adapter.js +5 -2
  15. package/dist/claude-adapter.js.map +1 -1
  16. package/dist/claude-agent-sdk-adapter.d.ts +53 -0
  17. package/dist/claude-agent-sdk-adapter.d.ts.map +1 -0
  18. package/dist/claude-agent-sdk-adapter.js +607 -0
  19. package/dist/claude-agent-sdk-adapter.js.map +1 -0
  20. package/dist/codex-adapter.d.ts.map +1 -1
  21. package/dist/codex-adapter.js +99 -11
  22. package/dist/codex-adapter.js.map +1 -1
  23. package/dist/codex-sdk-adapter.d.ts +32 -0
  24. package/dist/codex-sdk-adapter.d.ts.map +1 -0
  25. package/dist/codex-sdk-adapter.js +384 -0
  26. package/dist/codex-sdk-adapter.js.map +1 -0
  27. package/dist/codex-sdk-mocks.d.ts +51 -0
  28. package/dist/codex-sdk-mocks.d.ts.map +1 -0
  29. package/dist/codex-sdk-mocks.js +97 -0
  30. package/dist/codex-sdk-mocks.js.map +1 -0
  31. package/dist/codex-websocket-adapter.d.ts +41 -0
  32. package/dist/codex-websocket-adapter.d.ts.map +1 -0
  33. package/dist/codex-websocket-adapter.js +289 -0
  34. package/dist/codex-websocket-adapter.js.map +1 -0
  35. package/dist/codex-websocket-connection.d.ts +58 -0
  36. package/dist/codex-websocket-connection.d.ts.map +1 -0
  37. package/dist/codex-websocket-connection.js +244 -0
  38. package/dist/codex-websocket-connection.js.map +1 -0
  39. package/dist/copilot-adapter.d.ts.map +1 -1
  40. package/dist/copilot-adapter.js +7 -3
  41. package/dist/copilot-adapter.js.map +1 -1
  42. package/dist/cursor-adapter.d.ts.map +1 -1
  43. package/dist/cursor-adapter.js +5 -2
  44. package/dist/cursor-adapter.js.map +1 -1
  45. package/dist/droid-adapter.d.ts +30 -0
  46. package/dist/droid-adapter.d.ts.map +1 -0
  47. package/dist/droid-adapter.js +377 -0
  48. package/dist/droid-adapter.js.map +1 -0
  49. package/dist/gemini-adapter.d.ts.map +1 -1
  50. package/dist/gemini-adapter.js +5 -2
  51. package/dist/gemini-adapter.js.map +1 -1
  52. package/dist/hermes-adapter.d.ts.map +1 -1
  53. package/dist/hermes-adapter.js +6 -2
  54. package/dist/hermes-adapter.js.map +1 -1
  55. package/dist/index.d.ts +10 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +20 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/mocks/index.d.ts +60 -0
  60. package/dist/mocks/index.d.ts.map +1 -0
  61. package/dist/mocks/index.js +203 -0
  62. package/dist/mocks/index.js.map +1 -0
  63. package/dist/mocks/mock-types.d.ts +260 -0
  64. package/dist/mocks/mock-types.d.ts.map +1 -0
  65. package/dist/mocks/mock-types.js +12 -0
  66. package/dist/mocks/mock-types.js.map +1 -0
  67. package/dist/mocks/programmatic-mocks.d.ts +50 -0
  68. package/dist/mocks/programmatic-mocks.d.ts.map +1 -0
  69. package/dist/mocks/programmatic-mocks.js +330 -0
  70. package/dist/mocks/programmatic-mocks.js.map +1 -0
  71. package/dist/mocks/remote-mocks.d.ts +52 -0
  72. package/dist/mocks/remote-mocks.d.ts.map +1 -0
  73. package/dist/mocks/remote-mocks.js +436 -0
  74. package/dist/mocks/remote-mocks.js.map +1 -0
  75. package/dist/omp-adapter.d.ts.map +1 -1
  76. package/dist/omp-adapter.js +6 -3
  77. package/dist/omp-adapter.js.map +1 -1
  78. package/dist/openclaw-adapter.d.ts.map +1 -1
  79. package/dist/openclaw-adapter.js +6 -3
  80. package/dist/openclaw-adapter.js.map +1 -1
  81. package/dist/opencode-adapter.d.ts +2 -2
  82. package/dist/opencode-adapter.d.ts.map +1 -1
  83. package/dist/opencode-adapter.js +172 -60
  84. package/dist/opencode-adapter.js.map +1 -1
  85. package/dist/opencode-http-adapter.d.ts +41 -0
  86. package/dist/opencode-http-adapter.d.ts.map +1 -0
  87. package/dist/opencode-http-adapter.js +370 -0
  88. package/dist/opencode-http-adapter.js.map +1 -0
  89. package/dist/opencode-http-connection.d.ts +33 -0
  90. package/dist/opencode-http-connection.d.ts.map +1 -0
  91. package/dist/opencode-http-connection.js +198 -0
  92. package/dist/opencode-http-connection.js.map +1 -0
  93. package/dist/pi-adapter.d.ts.map +1 -1
  94. package/dist/pi-adapter.js +5 -2
  95. package/dist/pi-adapter.js.map +1 -1
  96. package/dist/pi-sdk-adapter.d.ts +46 -0
  97. package/dist/pi-sdk-adapter.d.ts.map +1 -0
  98. package/dist/pi-sdk-adapter.js +549 -0
  99. package/dist/pi-sdk-adapter.js.map +1 -0
  100. package/dist/programmatic-adapter-base.d.ts +88 -0
  101. package/dist/programmatic-adapter-base.d.ts.map +1 -0
  102. package/dist/programmatic-adapter-base.js +169 -0
  103. package/dist/programmatic-adapter-base.js.map +1 -0
  104. package/dist/qwen-adapter.d.ts.map +1 -1
  105. package/dist/qwen-adapter.js +5 -2
  106. package/dist/qwen-adapter.js.map +1 -1
  107. package/dist/remote-adapter-base.d.ts +85 -0
  108. package/dist/remote-adapter-base.d.ts.map +1 -0
  109. package/dist/remote-adapter-base.js +102 -0
  110. package/dist/remote-adapter-base.js.map +1 -0
  111. package/package.json +2 -2
@@ -0,0 +1,51 @@
1
+ /**
2
+ * OpenAI-shaped type defs + mock chat/function helpers for CodexSdkAdapter.
3
+ * Extracted to keep codex-sdk-adapter.ts under the 400-line cap.
4
+ */
5
+ export interface OpenAIMessage {
6
+ role: 'system' | 'user' | 'assistant' | 'function';
7
+ content: string;
8
+ name?: string;
9
+ function_call?: {
10
+ name: string;
11
+ arguments: string;
12
+ };
13
+ }
14
+ export interface OpenAICompletionChunk {
15
+ id: string;
16
+ object: 'chat.completion.chunk';
17
+ created: number;
18
+ model: string;
19
+ choices: Array<{
20
+ index: number;
21
+ delta: {
22
+ role?: string;
23
+ content?: string;
24
+ function_call?: {
25
+ name?: string;
26
+ arguments?: string;
27
+ };
28
+ };
29
+ finish_reason?: string | null;
30
+ }>;
31
+ usage?: {
32
+ prompt_tokens: number;
33
+ completion_tokens: number;
34
+ total_tokens: number;
35
+ };
36
+ }
37
+ export interface OpenAIFunction {
38
+ name: string;
39
+ description: string;
40
+ parameters: Record<string, unknown>;
41
+ }
42
+ export declare function createOpenAIClient(): object;
43
+ export declare function createChatCompletion(params: {
44
+ model: string;
45
+ messages: OpenAIMessage[];
46
+ functions: OpenAIFunction[];
47
+ stream: boolean;
48
+ temperature: number;
49
+ }): Promise<AsyncIterable<OpenAICompletionChunk>>;
50
+ export declare function executeMockFunction(name: string, arguments_: string): Promise<string>;
51
+ //# sourceMappingURL=codex-sdk-mocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-sdk-mocks.d.ts","sourceRoot":"","sources":["../src/codex-sdk-mocks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,uBAAuB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE;YACL,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,aAAa,CAAC,EAAE;gBACd,IAAI,CAAC,EAAE,MAAM,CAAC;gBACd,SAAS,CAAC,EAAE,MAAM,CAAC;aACpB,CAAC;SACH,CAAC;QACF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC,CAAC;IACH,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAsEhD;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3F"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * OpenAI-shaped type defs + mock chat/function helpers for CodexSdkAdapter.
3
+ * Extracted to keep codex-sdk-adapter.ts under the 400-line cap.
4
+ */
5
+ export function createOpenAIClient() {
6
+ // Real impl: return new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
7
+ return {};
8
+ }
9
+ export async function createChatCompletion(params) {
10
+ const mockChunks = [
11
+ {
12
+ id: 'chatcmpl-123',
13
+ object: 'chat.completion.chunk',
14
+ created: Date.now(),
15
+ model: params.model,
16
+ choices: [
17
+ {
18
+ index: 0,
19
+ delta: { role: 'assistant', content: "I'll help you with that task. Let me " },
20
+ finish_reason: null,
21
+ },
22
+ ],
23
+ },
24
+ {
25
+ id: 'chatcmpl-123',
26
+ object: 'chat.completion.chunk',
27
+ created: Date.now(),
28
+ model: params.model,
29
+ choices: [
30
+ {
31
+ index: 0,
32
+ delta: { content: 'execute some code to solve this.' },
33
+ finish_reason: null,
34
+ },
35
+ ],
36
+ },
37
+ {
38
+ id: 'chatcmpl-123',
39
+ object: 'chat.completion.chunk',
40
+ created: Date.now(),
41
+ model: params.model,
42
+ choices: [
43
+ {
44
+ index: 0,
45
+ delta: {
46
+ function_call: {
47
+ name: 'execute_code',
48
+ arguments: '{\n "language": "python",\n "code": "print(\\"Hello from Codex SDK!\\")"',
49
+ },
50
+ },
51
+ finish_reason: null,
52
+ },
53
+ ],
54
+ },
55
+ {
56
+ id: 'chatcmpl-123',
57
+ object: 'chat.completion.chunk',
58
+ created: Date.now(),
59
+ model: params.model,
60
+ choices: [
61
+ {
62
+ index: 0,
63
+ delta: { function_call: { arguments: '\n}' } },
64
+ finish_reason: 'function_call',
65
+ },
66
+ ],
67
+ usage: { prompt_tokens: 150, completion_tokens: 50, total_tokens: 200 },
68
+ },
69
+ ];
70
+ return {
71
+ async *[Symbol.asyncIterator]() {
72
+ for (const chunk of mockChunks) {
73
+ await new Promise((resolve) => setTimeout(resolve, 100));
74
+ yield chunk;
75
+ }
76
+ },
77
+ };
78
+ }
79
+ export async function executeMockFunction(name, arguments_) {
80
+ try {
81
+ const args = JSON.parse(arguments_);
82
+ switch (name) {
83
+ case 'execute_code':
84
+ return `Executed ${args.language} code:\n${args.code}\n\nOutput: Hello from Codex SDK!`;
85
+ case 'read_file':
86
+ return `Mock file contents for: ${args.path}`;
87
+ case 'write_file':
88
+ return `Successfully wrote ${args.content.length} characters to ${args.path}`;
89
+ default:
90
+ return `Unknown function: ${name}`;
91
+ }
92
+ }
93
+ catch (error) {
94
+ return `Error executing function ${name}: ${error}`;
95
+ }
96
+ }
97
+ //# sourceMappingURL=codex-sdk-mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-sdk-mocks.js","sourceRoot":"","sources":["../src/codex-sdk-mocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * CodexWebSocketAdapter — WebSocket-based Codex adapter for real-time communication.
3
+ *
4
+ * Uses the Codex app-server architecture with WebSocket connections for
5
+ * bidirectional real-time communication and enhanced streaming capabilities.
6
+ */
7
+ import type { AgentCapabilities, ModelCapabilities, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, RunOptions, AgentConfig, RemoteConnection, ServerInfo } from '@a5c-ai/agent-mux-core';
8
+ import { BaseRemoteAdapter } from './remote-adapter-base.js';
9
+ export { CodexWebSocketConnection } from './codex-websocket-connection.js';
10
+ export declare class CodexWebSocketAdapter extends BaseRemoteAdapter {
11
+ readonly agent: "codex-websocket";
12
+ readonly displayName = "Codex (WebSocket)";
13
+ readonly connectionType: "websocket";
14
+ readonly minVersion = "0.1.0";
15
+ readonly hostEnvSignals: readonly ["CODEX_APP_SERVER", "OPENAI_API_KEY"];
16
+ readonly capabilities: AgentCapabilities;
17
+ readonly models: ModelCapabilities[];
18
+ readonly defaultModelId = "o4-mini";
19
+ readonly configSchema: AgentConfigSchema;
20
+ connect(options: RunOptions): Promise<RemoteConnection>;
21
+ disconnect(connection: RemoteConnection): Promise<void>;
22
+ startServer(): Promise<ServerInfo>;
23
+ stopServer(serverInfo: ServerInfo): Promise<void>;
24
+ healthCheck(serverInfo: ServerInfo): Promise<{
25
+ status: 'healthy' | 'unhealthy' | 'starting';
26
+ lastCheck: Date;
27
+ details?: string;
28
+ }>;
29
+ detectAuth(): Promise<AuthState>;
30
+ getAuthGuidance(): AuthSetupGuidance;
31
+ sessionDir(_cwd?: string): string;
32
+ parseSessionFile(filePath: string): Promise<Session>;
33
+ listSessionFiles(_cwd?: string): Promise<string[]>;
34
+ readConfig(_cwd?: string): Promise<AgentConfig>;
35
+ writeConfig(config: Partial<AgentConfig>, _cwd?: string): Promise<void>;
36
+ /**
37
+ * Ensure a Codex app-server is running, starting one if needed.
38
+ */
39
+ protected ensureServer(): Promise<ServerInfo>;
40
+ }
41
+ //# sourceMappingURL=codex-websocket-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-websocket-adapter.d.ts","sourceRoot":"","sources":["../src/codex-websocket-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,UAAU,EAEV,WAAW,EACX,gBAAgB,EAEhB,UAAU,EAEX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAS7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,qBAAa,qBAAsB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,KAAK,EAAG,iBAAiB,CAAU;IAC5C,QAAQ,CAAC,WAAW,uBAAuB;IAC3C,QAAQ,CAAC,cAAc,EAAG,WAAW,CAAU;IAC/C,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,cAAc,kDAAmD;IAE1E,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CA0CtC;IAEF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAsDlC;IAEF,QAAQ,CAAC,cAAc,aAAa;IAEpC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAOtC;IAEI,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6BvD,UAAU,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC;IAsBlC,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;QAAC,SAAS,EAAE,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBjI,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAuBtC,eAAe,IAAI,iBAAiB;IA8BpC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAI3B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpD,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIlD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO/C,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7E;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC;CAcpD"}
@@ -0,0 +1,289 @@
1
+ /**
2
+ * CodexWebSocketAdapter — WebSocket-based Codex adapter for real-time communication.
3
+ *
4
+ * Uses the Codex app-server architecture with WebSocket connections for
5
+ * bidirectional real-time communication and enhanced streaming capabilities.
6
+ */
7
+ import * as os from 'node:os';
8
+ import * as path from 'node:path';
9
+ import { BaseRemoteAdapter } from './remote-adapter-base.js';
10
+ import { listJsonlFiles, parseJsonlSessionFile, readJsonFile, writeJsonFileAtomic, } from './session-fs.js';
11
+ import { readAuthConfigIdentity } from './auth-config.js';
12
+ import { CodexWebSocketConnection } from './codex-websocket-connection.js';
13
+ export { CodexWebSocketConnection } from './codex-websocket-connection.js';
14
+ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
15
+ agent = 'codex-websocket';
16
+ displayName = 'Codex (WebSocket)';
17
+ connectionType = 'websocket';
18
+ minVersion = '0.1.0';
19
+ hostEnvSignals = ['CODEX_APP_SERVER', 'OPENAI_API_KEY'];
20
+ capabilities = {
21
+ agent: 'codex-websocket',
22
+ canResume: true,
23
+ canFork: false,
24
+ supportsMultiTurn: true,
25
+ sessionPersistence: 'file',
26
+ supportsTextStreaming: true,
27
+ supportsToolCallStreaming: true,
28
+ supportsThinkingStreaming: false,
29
+ supportsNativeTools: true,
30
+ supportsMCP: false,
31
+ supportsParallelToolCalls: true,
32
+ requiresToolApproval: true,
33
+ approvalModes: ['yolo', 'prompt', 'deny'],
34
+ supportsThinking: false,
35
+ thinkingEffortLevels: [],
36
+ supportsThinkingBudgetTokens: false,
37
+ supportsJsonMode: true,
38
+ supportsStructuredOutput: true,
39
+ supportsSkills: false,
40
+ supportsAgentsMd: false,
41
+ skillsFormat: null,
42
+ supportsSubagentDispatch: false,
43
+ supportsParallelExecution: false,
44
+ supportsInteractiveMode: true,
45
+ supportsStdinInjection: true,
46
+ supportsImageInput: false,
47
+ supportsImageOutput: false,
48
+ supportsFileAttachments: false,
49
+ supportsPlugins: false,
50
+ pluginFormats: [],
51
+ pluginRegistries: [],
52
+ supportedPlatforms: ['darwin', 'linux', 'win32'],
53
+ requiresGitRepo: false,
54
+ requiresPty: false,
55
+ authMethods: [
56
+ { type: 'api_key', name: 'API Key', description: 'OPENAI_API_KEY environment variable' },
57
+ ],
58
+ authFiles: ['.codex/config.json'],
59
+ installMethods: [
60
+ { platform: 'all', type: 'npm', command: 'npm install -g @openai/codex-server' },
61
+ ],
62
+ };
63
+ models = [
64
+ {
65
+ agent: 'codex-websocket',
66
+ modelId: 'o4-mini',
67
+ displayName: 'o4-mini (WebSocket)',
68
+ deprecated: false,
69
+ contextWindow: 200000,
70
+ maxOutputTokens: 100000,
71
+ supportsThinking: true,
72
+ thinkingEffortLevels: ['low', 'medium', 'high'],
73
+ supportsToolCalling: true,
74
+ supportsParallelToolCalls: true,
75
+ supportsToolCallStreaming: true,
76
+ supportsJsonMode: true,
77
+ supportsStructuredOutput: true,
78
+ supportsTextStreaming: true,
79
+ supportsThinkingStreaming: false,
80
+ supportsImageInput: false,
81
+ supportsImageOutput: false,
82
+ supportsFileInput: false,
83
+ inputPricePerMillion: 0.15,
84
+ outputPricePerMillion: 0.6,
85
+ cachedInputPricePerMillion: 0.075,
86
+ cliArgKey: 'model',
87
+ cliArgValue: 'o4-mini',
88
+ lastUpdated: '2026-04-01',
89
+ source: 'bundled',
90
+ },
91
+ {
92
+ agent: 'codex-websocket',
93
+ modelId: 'codex-mini-latest',
94
+ displayName: 'Codex Mini (WebSocket)',
95
+ deprecated: false,
96
+ contextWindow: 200000,
97
+ maxOutputTokens: 100000,
98
+ supportsThinking: false,
99
+ supportsToolCalling: true,
100
+ supportsParallelToolCalls: true,
101
+ supportsToolCallStreaming: true,
102
+ supportsJsonMode: true,
103
+ supportsStructuredOutput: true,
104
+ supportsTextStreaming: true,
105
+ supportsThinkingStreaming: false,
106
+ supportsImageInput: false,
107
+ supportsImageOutput: false,
108
+ supportsFileInput: false,
109
+ inputPricePerMillion: 0.1,
110
+ outputPricePerMillion: 0.4,
111
+ cachedInputPricePerMillion: 0.05,
112
+ cliArgKey: 'model',
113
+ cliArgValue: 'codex-mini-latest',
114
+ lastUpdated: '2026-04-01',
115
+ source: 'bundled',
116
+ },
117
+ ];
118
+ defaultModelId = 'o4-mini';
119
+ configSchema = {
120
+ agent: 'codex-websocket',
121
+ version: 1,
122
+ fields: [],
123
+ configFilePaths: [path.join(os.homedir(), '.codex', 'config.json')],
124
+ configFormat: 'json',
125
+ supportsProjectConfig: false,
126
+ };
127
+ async connect(options) {
128
+ // Get or start Codex app-server
129
+ const serverInfo = await this.ensureServer();
130
+ // Create WebSocket connection
131
+ const connectionId = this.generateConnectionId();
132
+ const websocketUrl = serverInfo.endpoint.replace('http', 'ws') + '/ws';
133
+ const connection = new CodexWebSocketConnection({
134
+ websocketUrl,
135
+ connectionId,
136
+ });
137
+ await connection.connect();
138
+ // Initialize chat session
139
+ await connection.send({
140
+ type: 'chat',
141
+ prompt: Array.isArray(options.prompt) ? options.prompt.join('\n') : options.prompt,
142
+ model: options.model || this.defaultModelId,
143
+ stream: true,
144
+ max_tokens: options.maxTokens,
145
+ temperature: 0.1,
146
+ });
147
+ this.registerConnection(connection);
148
+ return connection;
149
+ }
150
+ async disconnect(connection) {
151
+ if (connection.connectionType === 'websocket') {
152
+ await connection.close();
153
+ this.unregisterConnection(connection.connectionId);
154
+ }
155
+ }
156
+ async startServer() {
157
+ const serverId = this.generateServerId();
158
+ const port = await this.findAvailablePort(8765);
159
+ // In real implementation, this would start the actual Codex app-server
160
+ // const serverProcess = spawn('codex-server', ['--port', port.toString(), '--host', '127.0.0.1']);
161
+ const serverInfo = {
162
+ serverId,
163
+ serverType: 'codex-websocket',
164
+ endpoint: `http://127.0.0.1:${port}`,
165
+ port,
166
+ startedAt: new Date(),
167
+ };
168
+ // Simulate server startup delay
169
+ await new Promise(resolve => setTimeout(resolve, 1000));
170
+ this.registerServer(serverInfo);
171
+ return serverInfo;
172
+ }
173
+ async stopServer(serverInfo) {
174
+ // In real implementation, this would stop the Codex app-server process
175
+ this.unregisterServer(serverInfo.serverId);
176
+ }
177
+ async healthCheck(serverInfo) {
178
+ try {
179
+ // In real implementation, this would check WebSocket connectivity
180
+ // const ws = new WebSocket(serverInfo.endpoint.replace('http', 'ws') + '/health');
181
+ return {
182
+ status: 'healthy',
183
+ lastCheck: new Date(),
184
+ };
185
+ }
186
+ catch (error) {
187
+ return {
188
+ status: 'unhealthy',
189
+ lastCheck: new Date(),
190
+ details: error instanceof Error ? error.message : String(error),
191
+ };
192
+ }
193
+ }
194
+ async detectAuth() {
195
+ const apiKey = process.env['OPENAI_API_KEY'];
196
+ if (apiKey) {
197
+ return {
198
+ status: 'authenticated',
199
+ method: 'api_key',
200
+ identity: `openai:...${apiKey.slice(-4)}`,
201
+ };
202
+ }
203
+ // Check config files
204
+ const codexHome = process.env['CODEX_HOME'] ?? path.join(os.homedir(), '.codex');
205
+ const found = await readAuthConfigIdentity([
206
+ path.join(codexHome, 'auth.json'),
207
+ path.join(codexHome, 'credentials.json'),
208
+ ]);
209
+ if (found) {
210
+ return { status: 'authenticated', method: found.method, identity: found.identity };
211
+ }
212
+ return { status: 'unauthenticated' };
213
+ }
214
+ getAuthGuidance() {
215
+ return {
216
+ agent: 'codex-websocket',
217
+ providerName: 'OpenAI',
218
+ steps: [
219
+ {
220
+ step: 1,
221
+ description: 'Get an API key from https://platform.openai.com/api-keys',
222
+ url: 'https://platform.openai.com/api-keys'
223
+ },
224
+ {
225
+ step: 2,
226
+ description: 'Set the OPENAI_API_KEY environment variable',
227
+ command: 'export OPENAI_API_KEY=sk-...'
228
+ },
229
+ {
230
+ step: 3,
231
+ description: 'Install the Codex app-server',
232
+ command: 'npm install -g @openai/codex-server'
233
+ },
234
+ ],
235
+ envVars: [
236
+ { name: 'OPENAI_API_KEY', description: 'OpenAI API key', required: true, exampleFormat: 'sk-...' },
237
+ { name: 'CODEX_APP_SERVER', description: 'Codex app-server endpoint URL', required: false, exampleFormat: 'http://localhost:8765' },
238
+ ],
239
+ documentationUrls: ['https://developers.openai.com/codex/app-server'],
240
+ verifyCommand: 'codex-server --version',
241
+ };
242
+ }
243
+ sessionDir(_cwd) {
244
+ return path.join(os.homedir(), '.codex', 'sessions');
245
+ }
246
+ async parseSessionFile(filePath) {
247
+ const parsed = await parseJsonlSessionFile(filePath, 'codex-websocket');
248
+ return { ...parsed, agent: 'codex-websocket' };
249
+ }
250
+ async listSessionFiles(_cwd) {
251
+ return listJsonlFiles(this.sessionDir());
252
+ }
253
+ async readConfig(_cwd) {
254
+ const filePath = this.configSchema.configFilePaths?.[0];
255
+ if (!filePath)
256
+ return { agent: 'codex-websocket', source: 'global' };
257
+ const data = (await readJsonFile(filePath)) ?? {};
258
+ return { agent: 'codex-websocket', source: 'global', filePaths: [filePath], ...data };
259
+ }
260
+ async writeConfig(config, _cwd) {
261
+ const filePath = this.configSchema.configFilePaths?.[0];
262
+ if (!filePath)
263
+ return;
264
+ const existing = (await readJsonFile(filePath)) ?? {};
265
+ const { agent: _a, source: _s, filePaths: _fp, ...rest } = config;
266
+ void _a;
267
+ void _s;
268
+ void _fp;
269
+ await writeJsonFileAtomic(filePath, { ...existing, ...rest });
270
+ }
271
+ // ── Private helper methods ──────────────────────────────────────────
272
+ /**
273
+ * Ensure a Codex app-server is running, starting one if needed.
274
+ */
275
+ async ensureServer() {
276
+ // Check if we already have a running server
277
+ for (const server of this.managedServers.values()) {
278
+ if (server.serverType === 'codex-websocket') {
279
+ const health = await this.healthCheck?.(server);
280
+ if (health?.status === 'healthy') {
281
+ return server;
282
+ }
283
+ }
284
+ }
285
+ // Start a new server
286
+ return await this.startServer();
287
+ }
288
+ }
289
+ //# sourceMappingURL=codex-websocket-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-websocket-adapter.js","sourceRoot":"","sources":["../src/codex-websocket-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * WebSocket connection + mock response simulator for CodexWebSocketAdapter.
3
+ * Extracted to keep codex-websocket-adapter.ts under the 400-line cap.
4
+ */
5
+ import type { AgentEvent, WebSocketConnection } from '@a5c-ai/agent-mux-core';
6
+ export interface CodexWebSocketMessage {
7
+ id: string;
8
+ type: 'request' | 'response' | 'event' | 'error';
9
+ payload: unknown;
10
+ timestamp: number;
11
+ }
12
+ export interface CodexChatRequest {
13
+ id: string;
14
+ prompt: string;
15
+ model?: string;
16
+ stream?: boolean;
17
+ max_tokens?: number;
18
+ temperature?: number;
19
+ tools?: Array<{
20
+ type: 'function';
21
+ function: {
22
+ name: string;
23
+ description: string;
24
+ parameters: Record<string, unknown>;
25
+ };
26
+ }>;
27
+ }
28
+ export interface CodexStreamEvent {
29
+ id: string;
30
+ type: 'text_delta' | 'tool_call' | 'tool_result' | 'error' | 'done';
31
+ data: unknown;
32
+ }
33
+ export declare class CodexWebSocketConnection implements WebSocketConnection {
34
+ readonly connectionId: string;
35
+ readonly connectionType: "websocket";
36
+ readonly websocketUrl: string;
37
+ readonly endpoint: string;
38
+ private ws;
39
+ private eventEmitter;
40
+ private messageQueue;
41
+ private subscriptions;
42
+ private connected;
43
+ private requestId;
44
+ constructor(options: {
45
+ websocketUrl: string;
46
+ connectionId: string;
47
+ });
48
+ connect(): Promise<void>;
49
+ send(data: unknown): Promise<void>;
50
+ receive(): AsyncIterableIterator<AgentEvent>;
51
+ subscribe(channel: string): AsyncIterableIterator<AgentEvent>;
52
+ unsubscribe(channel: string): Promise<void>;
53
+ close(): Promise<void>;
54
+ private parseMessageToEvent;
55
+ private handleMockResponse;
56
+ private simulateChatResponse;
57
+ }
58
+ //# sourceMappingURL=codex-websocket-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-websocket-connection.d.ts","sourceRoot":"","sources":["../src/codex-websocket-connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE9E,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACrC,CAAC;KACH,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IACpE,IAAI,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,wBAAyB,YAAW,mBAAmB;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAG,WAAW,CAAU;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAK;gBAEV,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAM7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBxB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjC,OAAO,IAAI,qBAAqB,CAAC,UAAU,CAAC;IAgCnD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAAC,UAAU,CAAC;IAwBvD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,CAAC,mBAAmB;IAgF3B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;CAoC7B"}