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

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 (158) hide show
  1. package/README.md +3 -1
  2. package/dist/agent-mux-remote-adapter.d.ts.map +1 -1
  3. package/dist/agent-mux-remote-adapter.js +4 -0
  4. package/dist/agent-mux-remote-adapter.js.map +1 -1
  5. package/dist/amp-adapter.d.ts +2 -1
  6. package/dist/amp-adapter.d.ts.map +1 -1
  7. package/dist/amp-adapter.js +93 -17
  8. package/dist/amp-adapter.js.map +1 -1
  9. package/dist/babysitter-adapter.d.ts +29 -0
  10. package/dist/babysitter-adapter.d.ts.map +1 -0
  11. package/dist/babysitter-adapter.js +338 -0
  12. package/dist/babysitter-adapter.js.map +1 -0
  13. package/dist/base-adapter.d.ts +7 -0
  14. package/dist/base-adapter.d.ts.map +1 -1
  15. package/dist/base-adapter.js +113 -1
  16. package/dist/base-adapter.js.map +1 -1
  17. package/dist/claude-adapter.d.ts +14 -3
  18. package/dist/claude-adapter.d.ts.map +1 -1
  19. package/dist/claude-adapter.js +222 -25
  20. package/dist/claude-adapter.js.map +1 -1
  21. package/dist/claude-agent-sdk-adapter.d.ts +21 -34
  22. package/dist/claude-agent-sdk-adapter.d.ts.map +1 -1
  23. package/dist/claude-agent-sdk-adapter.js +629 -397
  24. package/dist/claude-agent-sdk-adapter.js.map +1 -1
  25. package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts +12 -0
  26. package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts.map +1 -0
  27. package/dist/claude-code/runtime-hooks/ephemeral-config.js +143 -0
  28. package/dist/claude-code/runtime-hooks/ephemeral-config.js.map +1 -0
  29. package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts +10 -0
  30. package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts.map +1 -0
  31. package/dist/claude-code/runtime-hooks/hook-socket-server.js +79 -0
  32. package/dist/claude-code/runtime-hooks/hook-socket-server.js.map +1 -0
  33. package/dist/claude-code/runtime-hooks/lifecycle.d.ts +3 -0
  34. package/dist/claude-code/runtime-hooks/lifecycle.d.ts.map +1 -0
  35. package/dist/claude-code/runtime-hooks/lifecycle.js +24 -0
  36. package/dist/claude-code/runtime-hooks/lifecycle.js.map +1 -0
  37. package/dist/claude-remote-control-adapter.d.ts +43 -0
  38. package/dist/claude-remote-control-adapter.d.ts.map +1 -0
  39. package/dist/claude-remote-control-adapter.js +505 -0
  40. package/dist/claude-remote-control-adapter.js.map +1 -0
  41. package/dist/codex-adapter.d.ts.map +1 -1
  42. package/dist/codex-adapter.js +64 -41
  43. package/dist/codex-adapter.js.map +1 -1
  44. package/dist/codex-sdk-adapter.d.ts.map +1 -1
  45. package/dist/codex-sdk-adapter.js +6 -2
  46. package/dist/codex-sdk-adapter.js.map +1 -1
  47. package/dist/codex-websocket-adapter.d.ts +11 -18
  48. package/dist/codex-websocket-adapter.d.ts.map +1 -1
  49. package/dist/codex-websocket-adapter.js +199 -90
  50. package/dist/codex-websocket-adapter.js.map +1 -1
  51. package/dist/codex-websocket-connection.d.ts +60 -40
  52. package/dist/codex-websocket-connection.d.ts.map +1 -1
  53. package/dist/codex-websocket-connection.js +692 -203
  54. package/dist/codex-websocket-connection.js.map +1 -1
  55. package/dist/copilot-adapter.d.ts.map +1 -1
  56. package/dist/copilot-adapter.js +4 -0
  57. package/dist/copilot-adapter.js.map +1 -1
  58. package/dist/cursor-adapter.d.ts +3 -1
  59. package/dist/cursor-adapter.d.ts.map +1 -1
  60. package/dist/cursor-adapter.js +5 -1
  61. package/dist/cursor-adapter.js.map +1 -1
  62. package/dist/droid-adapter.d.ts +4 -2
  63. package/dist/droid-adapter.d.ts.map +1 -1
  64. package/dist/droid-adapter.js +12 -11
  65. package/dist/droid-adapter.js.map +1 -1
  66. package/dist/gemini-adapter.d.ts +3 -1
  67. package/dist/gemini-adapter.d.ts.map +1 -1
  68. package/dist/gemini-adapter.js +5 -1
  69. package/dist/gemini-adapter.js.map +1 -1
  70. package/dist/hermes-adapter.d.ts.map +1 -1
  71. package/dist/hermes-adapter.js +4 -0
  72. package/dist/hermes-adapter.js.map +1 -1
  73. package/dist/index.d.ts +4 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +3 -10
  76. package/dist/index.js.map +1 -1
  77. package/dist/mcp-plugins.d.ts +5 -3
  78. package/dist/mcp-plugins.d.ts.map +1 -1
  79. package/dist/mcp-plugins.js +58 -24
  80. package/dist/mcp-plugins.js.map +1 -1
  81. package/dist/omp-adapter.d.ts.map +1 -1
  82. package/dist/omp-adapter.js +4 -0
  83. package/dist/omp-adapter.js.map +1 -1
  84. package/dist/openclaw-adapter.d.ts +3 -1
  85. package/dist/openclaw-adapter.d.ts.map +1 -1
  86. package/dist/openclaw-adapter.js +5 -1
  87. package/dist/openclaw-adapter.js.map +1 -1
  88. package/dist/opencode-adapter.d.ts +3 -1
  89. package/dist/opencode-adapter.d.ts.map +1 -1
  90. package/dist/opencode-adapter.js +7 -3
  91. package/dist/opencode-adapter.js.map +1 -1
  92. package/dist/opencode-http-adapter.d.ts +3 -1
  93. package/dist/opencode-http-adapter.d.ts.map +1 -1
  94. package/dist/opencode-http-adapter.js +5 -1
  95. package/dist/opencode-http-adapter.js.map +1 -1
  96. package/dist/pi-adapter.d.ts.map +1 -1
  97. package/dist/pi-adapter.js +4 -0
  98. package/dist/pi-adapter.js.map +1 -1
  99. package/dist/pi-sdk-adapter.d.ts.map +1 -1
  100. package/dist/pi-sdk-adapter.js +4 -0
  101. package/dist/pi-sdk-adapter.js.map +1 -1
  102. package/dist/provider-translation.d.ts +10 -0
  103. package/dist/provider-translation.d.ts.map +1 -0
  104. package/dist/provider-translation.js +2 -0
  105. package/dist/provider-translation.js.map +1 -0
  106. package/dist/qwen-adapter.d.ts +3 -1
  107. package/dist/qwen-adapter.d.ts.map +1 -1
  108. package/dist/qwen-adapter.js +5 -1
  109. package/dist/qwen-adapter.js.map +1 -1
  110. package/dist/session-fs.d.ts +15 -5
  111. package/dist/session-fs.d.ts.map +1 -1
  112. package/dist/session-fs.js +249 -0
  113. package/dist/session-fs.js.map +1 -1
  114. package/dist/shared/runtime-hooks-virtual.d.ts +3 -0
  115. package/dist/shared/runtime-hooks-virtual.d.ts.map +1 -0
  116. package/dist/shared/runtime-hooks-virtual.js +13 -0
  117. package/dist/shared/runtime-hooks-virtual.js.map +1 -0
  118. package/dist/translate-for-harness.d.ts +6 -0
  119. package/dist/translate-for-harness.d.ts.map +1 -0
  120. package/dist/translate-for-harness.js +36 -0
  121. package/dist/translate-for-harness.js.map +1 -0
  122. package/dist/translations/claude-translation.d.ts +4 -0
  123. package/dist/translations/claude-translation.d.ts.map +1 -0
  124. package/dist/translations/claude-translation.js +50 -0
  125. package/dist/translations/claude-translation.js.map +1 -0
  126. package/dist/translations/codex-translation.d.ts +4 -0
  127. package/dist/translations/codex-translation.d.ts.map +1 -0
  128. package/dist/translations/codex-translation.js +32 -0
  129. package/dist/translations/codex-translation.js.map +1 -0
  130. package/dist/translations/gemini-translation.d.ts +4 -0
  131. package/dist/translations/gemini-translation.d.ts.map +1 -0
  132. package/dist/translations/gemini-translation.js +20 -0
  133. package/dist/translations/gemini-translation.js.map +1 -0
  134. package/dist/translations/generic-openai-translation.d.ts +4 -0
  135. package/dist/translations/generic-openai-translation.d.ts.map +1 -0
  136. package/dist/translations/generic-openai-translation.js +19 -0
  137. package/dist/translations/generic-openai-translation.js.map +1 -0
  138. package/dist/translations/opencode-translation.d.ts +4 -0
  139. package/dist/translations/opencode-translation.d.ts.map +1 -0
  140. package/dist/translations/opencode-translation.js +51 -0
  141. package/dist/translations/opencode-translation.js.map +1 -0
  142. package/package.json +4 -2
  143. package/dist/mocks/index.d.ts +0 -60
  144. package/dist/mocks/index.d.ts.map +0 -1
  145. package/dist/mocks/index.js +0 -203
  146. package/dist/mocks/index.js.map +0 -1
  147. package/dist/mocks/mock-types.d.ts +0 -260
  148. package/dist/mocks/mock-types.d.ts.map +0 -1
  149. package/dist/mocks/mock-types.js +0 -12
  150. package/dist/mocks/mock-types.js.map +0 -1
  151. package/dist/mocks/programmatic-mocks.d.ts +0 -50
  152. package/dist/mocks/programmatic-mocks.d.ts.map +0 -1
  153. package/dist/mocks/programmatic-mocks.js +0 -330
  154. package/dist/mocks/programmatic-mocks.js.map +0 -1
  155. package/dist/mocks/remote-mocks.d.ts +0 -52
  156. package/dist/mocks/remote-mocks.d.ts.map +0 -1
  157. package/dist/mocks/remote-mocks.js +0 -436
  158. package/dist/mocks/remote-mocks.js.map +0 -1
@@ -1,22 +1,18 @@
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
- */
1
+ import * as fs from 'node:fs';
7
2
  import * as os from 'node:os';
8
3
  import * as path from 'node:path';
9
- import { BaseRemoteAdapter } from './remote-adapter-base.js';
10
- import { listJsonlFiles, parseJsonlSessionFile, readJsonFile, writeJsonFileAtomic, } from './session-fs.js';
4
+ import { spawn } from 'node:child_process';
11
5
  import { readAuthConfigIdentity } from './auth-config.js';
6
+ import { BaseRemoteAdapter } from './remote-adapter-base.js';
12
7
  import { CodexWebSocketConnection } from './codex-websocket-connection.js';
8
+ import { listJsonlFiles, parseCodexSessionFile, readJsonFile, writeJsonFileAtomic, } from './session-fs.js';
13
9
  export { CodexWebSocketConnection } from './codex-websocket-connection.js';
14
10
  export class CodexWebSocketAdapter extends BaseRemoteAdapter {
15
11
  agent = 'codex-websocket';
16
- displayName = 'Codex (WebSocket)';
12
+ displayName = 'Codex (App Server)';
17
13
  connectionType = 'websocket';
18
- minVersion = '0.1.0';
19
- hostEnvSignals = ['CODEX_APP_SERVER', 'OPENAI_API_KEY'];
14
+ minVersion = '0.121.0';
15
+ hostEnvSignals = ['CODEX_APP_SERVER', 'OPENAI_API_KEY', 'CODEX_CLI'];
20
16
  capabilities = {
21
17
  agent: 'codex-websocket',
22
18
  canResume: true,
@@ -25,46 +21,57 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
25
21
  sessionPersistence: 'file',
26
22
  supportsTextStreaming: true,
27
23
  supportsToolCallStreaming: true,
28
- supportsThinkingStreaming: false,
24
+ supportsThinkingStreaming: true,
29
25
  supportsNativeTools: true,
30
- supportsMCP: false,
26
+ supportsMCP: true,
31
27
  supportsParallelToolCalls: true,
32
28
  requiresToolApproval: true,
33
29
  approvalModes: ['yolo', 'prompt', 'deny'],
34
- supportsThinking: false,
35
- thinkingEffortLevels: [],
30
+ runtimeHooks: {
31
+ preToolUse: 'unsupported',
32
+ postToolUse: 'unsupported',
33
+ sessionStart: 'unsupported',
34
+ sessionEnd: 'unsupported',
35
+ stop: 'unsupported',
36
+ userPromptSubmit: 'unsupported',
37
+ },
38
+ supportsThinking: true,
39
+ thinkingEffortLevels: ['low', 'medium', 'high', 'max'],
36
40
  supportsThinkingBudgetTokens: false,
37
41
  supportsJsonMode: true,
38
42
  supportsStructuredOutput: true,
39
- supportsSkills: false,
40
- supportsAgentsMd: false,
41
- skillsFormat: null,
42
- supportsSubagentDispatch: false,
43
- supportsParallelExecution: false,
43
+ structuredSessionTransport: 'persistent',
44
+ sessionControlPlane: 'external-host',
45
+ supportsSkills: true,
46
+ supportsAgentsMd: true,
47
+ skillsFormat: 'directory',
48
+ supportsSubagentDispatch: true,
49
+ supportsParallelExecution: true,
44
50
  supportsInteractiveMode: true,
45
51
  supportsStdinInjection: true,
46
- supportsImageInput: false,
52
+ supportsImageInput: true,
47
53
  supportsImageOutput: false,
48
- supportsFileAttachments: false,
49
- supportsPlugins: false,
50
- pluginFormats: [],
51
- pluginRegistries: [],
54
+ supportsFileAttachments: true,
55
+ supportsPlugins: true,
56
+ pluginFormats: ['mcp-server'],
57
+ pluginRegistries: [{ name: 'mcp', url: 'https://modelcontextprotocol.io', searchable: false }],
52
58
  supportedPlatforms: ['darwin', 'linux', 'win32'],
53
59
  requiresGitRepo: false,
54
60
  requiresPty: false,
55
61
  authMethods: [
56
62
  { type: 'api_key', name: 'API Key', description: 'OPENAI_API_KEY environment variable' },
63
+ { type: 'oauth', name: 'ChatGPT Login', description: 'Local Codex CLI account login' },
57
64
  ],
58
- authFiles: ['.codex/config.json'],
65
+ authFiles: ['.codex/auth.json', '.codex/credentials.json'],
59
66
  installMethods: [
60
- { platform: 'all', type: 'npm', command: 'npm install -g @openai/codex-server' },
67
+ { platform: 'all', type: 'npm', command: 'npm install -g @openai/codex' },
61
68
  ],
62
69
  };
63
70
  models = [
64
71
  {
65
72
  agent: 'codex-websocket',
66
73
  modelId: 'o4-mini',
67
- displayName: 'o4-mini (WebSocket)',
74
+ displayName: 'o4-mini',
68
75
  deprecated: false,
69
76
  contextWindow: 200000,
70
77
  maxOutputTokens: 100000,
@@ -76,10 +83,10 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
76
83
  supportsJsonMode: true,
77
84
  supportsStructuredOutput: true,
78
85
  supportsTextStreaming: true,
79
- supportsThinkingStreaming: false,
80
- supportsImageInput: false,
86
+ supportsThinkingStreaming: true,
87
+ supportsImageInput: true,
81
88
  supportsImageOutput: false,
82
- supportsFileInput: false,
89
+ supportsFileInput: true,
83
90
  inputPricePerMillion: 0.15,
84
91
  outputPricePerMillion: 0.6,
85
92
  cachedInputPricePerMillion: 0.075,
@@ -91,11 +98,12 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
91
98
  {
92
99
  agent: 'codex-websocket',
93
100
  modelId: 'codex-mini-latest',
94
- displayName: 'Codex Mini (WebSocket)',
101
+ displayName: 'Codex Mini',
95
102
  deprecated: false,
96
103
  contextWindow: 200000,
97
104
  maxOutputTokens: 100000,
98
105
  supportsThinking: false,
106
+ thinkingEffortLevels: [],
99
107
  supportsToolCalling: true,
100
108
  supportsParallelToolCalls: true,
101
109
  supportsToolCallStreaming: true,
@@ -103,9 +111,9 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
103
111
  supportsStructuredOutput: true,
104
112
  supportsTextStreaming: true,
105
113
  supportsThinkingStreaming: false,
106
- supportsImageInput: false,
114
+ supportsImageInput: true,
107
115
  supportsImageOutput: false,
108
- supportsFileInput: false,
116
+ supportsFileInput: true,
109
117
  inputPricePerMillion: 0.1,
110
118
  outputPricePerMillion: 0.4,
111
119
  cachedInputPricePerMillion: 0.05,
@@ -124,63 +132,97 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
124
132
  configFormat: 'json',
125
133
  supportsProjectConfig: false,
126
134
  };
135
+ serverProcesses = new Map();
127
136
  async connect(options) {
128
- // Get or start Codex app-server
129
137
  const serverInfo = await this.ensureServer();
130
- // Create WebSocket connection
131
- const connectionId = this.generateConnectionId();
132
- const websocketUrl = serverInfo.endpoint.replace('http', 'ws') + '/ws';
133
138
  const connection = new CodexWebSocketConnection({
134
- websocketUrl,
135
- connectionId,
139
+ websocketUrl: serverInfo.endpoint,
140
+ connectionId: this.generateConnectionId(),
141
+ prompt: Array.isArray(options.prompt) ? options.prompt.join('\n') : options.prompt ?? '',
142
+ cwd: options.cwd ?? process.cwd(),
143
+ requestedModel: options.model,
144
+ approvalMode: options.approvalMode ?? 'prompt',
145
+ sessionId: options.sessionId,
146
+ models: this.models,
136
147
  });
137
148
  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
149
  this.registerConnection(connection);
148
150
  return connection;
149
151
  }
150
152
  async disconnect(connection) {
151
- if (connection.connectionType === 'websocket') {
152
- await connection.close();
153
- this.unregisterConnection(connection.connectionId);
154
- }
153
+ await connection.close();
154
+ this.unregisterConnection(connection.connectionId);
155
155
  }
156
156
  async startServer() {
157
+ const external = process.env['CODEX_APP_SERVER'];
158
+ if (external) {
159
+ return {
160
+ serverId: 'codex-app-server-external',
161
+ serverType: 'codex-websocket',
162
+ endpoint: this.normalizeEndpoint(external),
163
+ port: this.extractPort(external),
164
+ startedAt: new Date(),
165
+ };
166
+ }
167
+ const resolved = this.resolveCodexCommand();
168
+ if (!resolved) {
169
+ throw new Error('Could not locate the Codex CLI needed for app-server transport');
170
+ }
171
+ const port = await this.findAvailablePort(32150);
157
172
  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']);
173
+ const endpoint = `ws://127.0.0.1:${port}`;
174
+ const child = spawn(resolved.command, [...resolved.args, 'app-server', '--listen', endpoint], {
175
+ cwd: process.cwd(),
176
+ env: process.env,
177
+ stdio: ['ignore', 'ignore', 'pipe'],
178
+ });
179
+ let startupError = '';
180
+ child.stderr?.on('data', (chunk) => {
181
+ startupError += String(chunk);
182
+ });
183
+ child.once('error', (error) => {
184
+ startupError += error.message;
185
+ });
186
+ child.once('exit', (code) => {
187
+ if (code !== 0 && this.serverProcesses.has(serverId)) {
188
+ this.serverProcesses.delete(serverId);
189
+ }
190
+ });
161
191
  const serverInfo = {
162
192
  serverId,
163
193
  serverType: 'codex-websocket',
164
- endpoint: `http://127.0.0.1:${port}`,
194
+ endpoint,
195
+ pid: child.pid,
165
196
  port,
166
197
  startedAt: new Date(),
167
198
  };
168
- // Simulate server startup delay
169
- await new Promise(resolve => setTimeout(resolve, 1000));
199
+ this.serverProcesses.set(serverId, child);
170
200
  this.registerServer(serverInfo);
201
+ const started = await this.waitForHealthy(serverInfo, 10_000);
202
+ if (!started) {
203
+ this.serverProcesses.delete(serverId);
204
+ this.unregisterServer(serverId);
205
+ child.kill();
206
+ throw new Error(startupError.trim() || 'Timed out waiting for codex app-server to become ready');
207
+ }
171
208
  return serverInfo;
172
209
  }
173
210
  async stopServer(serverInfo) {
174
- // In real implementation, this would stop the Codex app-server process
211
+ const processHandle = this.serverProcesses.get(serverInfo.serverId);
212
+ if (processHandle && !processHandle.killed) {
213
+ processHandle.kill();
214
+ }
215
+ this.serverProcesses.delete(serverInfo.serverId);
175
216
  this.unregisterServer(serverInfo.serverId);
176
217
  }
177
218
  async healthCheck(serverInfo) {
219
+ const readyUrl = `${serverInfo.endpoint.replace(/^ws/, 'http')}/readyz`;
178
220
  try {
179
- // In real implementation, this would check WebSocket connectivity
180
- // const ws = new WebSocket(serverInfo.endpoint.replace('http', 'ws') + '/health');
221
+ const response = await fetch(readyUrl);
181
222
  return {
182
- status: 'healthy',
223
+ status: response.ok ? 'healthy' : 'unhealthy',
183
224
  lastCheck: new Date(),
225
+ details: response.ok ? undefined : `HTTP ${response.status}`,
184
226
  };
185
227
  }
186
228
  catch (error) {
@@ -200,7 +242,6 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
200
242
  identity: `openai:...${apiKey.slice(-4)}`,
201
243
  };
202
244
  }
203
- // Check config files
204
245
  const codexHome = process.env['CODEX_HOME'] ?? path.join(os.homedir(), '.codex');
205
246
  const found = await readAuthConfigIdentity([
206
247
  path.join(codexHome, 'auth.json'),
@@ -218,33 +259,34 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
218
259
  steps: [
219
260
  {
220
261
  step: 1,
221
- description: 'Get an API key from https://platform.openai.com/api-keys',
222
- url: 'https://platform.openai.com/api-keys'
262
+ description: 'Install the Codex CLI',
263
+ command: 'npm install -g @openai/codex',
223
264
  },
224
265
  {
225
266
  step: 2,
226
- description: 'Set the OPENAI_API_KEY environment variable',
227
- command: 'export OPENAI_API_KEY=sk-...'
267
+ description: 'Authenticate with either OPENAI_API_KEY or the Codex login flow',
268
+ command: 'codex',
228
269
  },
229
270
  {
230
271
  step: 3,
231
- description: 'Install the Codex app-server',
232
- command: 'npm install -g @openai/codex-server'
272
+ description: 'Verify the app-server surface is available',
273
+ command: 'codex app-server --help',
233
274
  },
234
275
  ],
235
276
  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' },
277
+ { name: 'OPENAI_API_KEY', description: 'OpenAI API key', required: false, exampleFormat: 'sk-...' },
278
+ { name: 'CODEX_APP_SERVER', description: 'Optional external Codex app-server WebSocket endpoint', required: false, exampleFormat: 'ws://127.0.0.1:32150' },
238
279
  ],
239
- documentationUrls: ['https://developers.openai.com/codex/app-server'],
240
- verifyCommand: 'codex-server --version',
280
+ documentationUrls: ['https://developers.openai.com/codex/sdk'],
281
+ loginCommand: 'codex',
282
+ verifyCommand: 'codex app-server --help',
241
283
  };
242
284
  }
243
285
  sessionDir(_cwd) {
244
286
  return path.join(os.homedir(), '.codex', 'sessions');
245
287
  }
246
288
  async parseSessionFile(filePath) {
247
- const parsed = await parseJsonlSessionFile(filePath, 'codex-websocket');
289
+ const parsed = await parseCodexSessionFile(filePath, 'codex-websocket');
248
290
  return { ...parsed, agent: 'codex-websocket' };
249
291
  }
250
292
  async listSessionFiles(_cwd) {
@@ -262,28 +304,95 @@ export class CodexWebSocketAdapter extends BaseRemoteAdapter {
262
304
  if (!filePath)
263
305
  return;
264
306
  const existing = (await readJsonFile(filePath)) ?? {};
265
- const { agent: _a, source: _s, filePaths: _fp, ...rest } = config;
266
- void _a;
267
- void _s;
268
- void _fp;
307
+ const { agent: _agent, source: _source, filePaths: _filePaths, ...rest } = config;
308
+ void _agent;
309
+ void _source;
310
+ void _filePaths;
269
311
  await writeJsonFileAtomic(filePath, { ...existing, ...rest });
270
312
  }
271
- // ── Private helper methods ──────────────────────────────────────────
272
- /**
273
- * Ensure a Codex app-server is running, starting one if needed.
274
- */
275
313
  async ensureServer() {
276
- // Check if we already have a running server
277
314
  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;
315
+ if (server.serverType !== 'codex-websocket') {
316
+ continue;
317
+ }
318
+ const health = await this.healthCheck?.(server);
319
+ if (health?.status === 'healthy') {
320
+ return server;
321
+ }
322
+ }
323
+ return this.startServer();
324
+ }
325
+ async waitForHealthy(serverInfo, timeoutMs) {
326
+ const startedAt = Date.now();
327
+ while (Date.now() - startedAt < timeoutMs) {
328
+ const health = await this.healthCheck(serverInfo);
329
+ if (health.status === 'healthy') {
330
+ return true;
331
+ }
332
+ await new Promise((resolve) => setTimeout(resolve, 250));
333
+ }
334
+ return false;
335
+ }
336
+ resolveCodexCommand() {
337
+ const resolved = this.findCommandInPath('codex');
338
+ if (!resolved) {
339
+ return null;
340
+ }
341
+ if (process.platform === 'win32' && /\.(cmd|bat)$/i.test(resolved)) {
342
+ const powershellShim = resolved.replace(/\.(cmd|bat)$/i, '.ps1');
343
+ if (fs.existsSync(powershellShim)) {
344
+ return {
345
+ command: 'powershell.exe',
346
+ args: ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', powershellShim],
347
+ };
348
+ }
349
+ return {
350
+ command: 'cmd.exe',
351
+ args: ['/d', '/s', '/c', resolved],
352
+ };
353
+ }
354
+ if (process.platform === 'win32' && /\.ps1$/i.test(resolved)) {
355
+ return {
356
+ command: 'powershell.exe',
357
+ args: ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', resolved],
358
+ };
359
+ }
360
+ return { command: resolved, args: [] };
361
+ }
362
+ findCommandInPath(command) {
363
+ const pathEnv = process.env['PATH'];
364
+ if (!pathEnv) {
365
+ return null;
366
+ }
367
+ const extensions = process.platform === 'win32'
368
+ ? ['.exe', '.cmd', '.bat', '.ps1', '']
369
+ : [''];
370
+ for (const directory of pathEnv.split(path.delimiter)) {
371
+ for (const extension of extensions) {
372
+ const candidate = path.join(directory, `${command}${extension}`);
373
+ if (fs.existsSync(candidate)) {
374
+ return candidate;
282
375
  }
283
376
  }
284
377
  }
285
- // Start a new server
286
- return await this.startServer();
378
+ return null;
379
+ }
380
+ normalizeEndpoint(endpoint) {
381
+ if (endpoint.startsWith('http://')) {
382
+ return endpoint.replace(/^http/, 'ws');
383
+ }
384
+ if (endpoint.startsWith('https://')) {
385
+ return endpoint.replace(/^https/, 'wss');
386
+ }
387
+ return endpoint;
388
+ }
389
+ extractPort(endpoint) {
390
+ try {
391
+ return Number(new URL(endpoint).port || 0);
392
+ }
393
+ catch {
394
+ return 0;
395
+ }
287
396
  }
288
397
  }
289
398
  //# sourceMappingURL=codex-websocket-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-websocket-adapter.js","sourceRoot":"","sources":["../src/codex-websocket-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-websocket-adapter.js","sourceRoot":"","sources":["../src/codex-websocket-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,58 +1,78 @@
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;
1
+ import WebSocket from 'ws';
2
+ import type { AgentEvent, InteractionResponse, ModelCapabilities, WebSocketConnection, WebSocketMessage } from '@a5c-ai/agent-mux-core';
3
+ type ApprovalMode = 'yolo' | 'prompt' | 'deny';
4
+ interface QueuedUserMessage {
5
+ type: 'user_message';
6
+ text: string;
11
7
  }
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;
8
+ interface QueuedInteractionResponse {
9
+ type: 'interaction_response';
10
+ interactionId: string;
11
+ response: InteractionResponse;
32
12
  }
13
+ type SendPayload = QueuedUserMessage | QueuedInteractionResponse | WebSocketMessage | Record<string, unknown>;
33
14
  export declare class CodexWebSocketConnection implements WebSocketConnection {
34
15
  readonly connectionId: string;
35
16
  readonly connectionType: "websocket";
36
17
  readonly websocketUrl: string;
37
18
  readonly endpoint: string;
19
+ private readonly prompt;
20
+ private readonly cwd;
21
+ private readonly requestedModel?;
22
+ private readonly approvalMode;
23
+ private readonly initialSessionId?;
24
+ private readonly models;
25
+ private readonly createSocket;
38
26
  private ws;
39
- private eventEmitter;
40
- private messageQueue;
41
- private subscriptions;
42
27
  private connected;
43
- private requestId;
28
+ private closed;
29
+ private requestSeq;
30
+ private pendingResponses;
31
+ private pendingInteractionRequests;
32
+ private eventQueue;
33
+ private waitingResolver;
34
+ private threadId;
35
+ private currentTurnId;
36
+ private currentModelId;
37
+ private turnIndex;
38
+ private textByItemId;
39
+ private thinkingByItemId;
44
40
  constructor(options: {
45
41
  websocketUrl: string;
46
42
  connectionId: string;
43
+ prompt: string;
44
+ cwd: string;
45
+ requestedModel?: string;
46
+ approvalMode: ApprovalMode;
47
+ sessionId?: string;
48
+ models: ModelCapabilities[];
49
+ createSocket?: (url: string) => WebSocket;
47
50
  });
48
51
  connect(): Promise<void>;
49
- send(data: unknown): Promise<void>;
52
+ send(data: SendPayload): Promise<void>;
50
53
  receive(): AsyncIterableIterator<AgentEvent>;
51
- subscribe(channel: string): AsyncIterableIterator<AgentEvent>;
52
- unsubscribe(channel: string): Promise<void>;
54
+ subscribe(_channel: string): AsyncIterableIterator<AgentEvent>;
55
+ unsubscribe(_channel: string): Promise<void>;
53
56
  close(): Promise<void>;
54
- private parseMessageToEvent;
55
- private handleMockResponse;
56
- private simulateChatResponse;
57
+ private handleIncomingMessage;
58
+ private handleResponse;
59
+ private handleServerRequest;
60
+ private handleNotification;
61
+ private handleItemStarted;
62
+ private handleItemCompleted;
63
+ private startTurn;
64
+ private sendUserMessage;
65
+ private sendInteractionResponse;
66
+ private buildInteractionResult;
67
+ private request;
68
+ private notify;
69
+ private asTextInput;
70
+ private mapApprovalPolicy;
71
+ private buildCostRecord;
72
+ private isUserMessagePayload;
73
+ private isInteractionResponsePayload;
74
+ private pushEvent;
75
+ private baseEvent;
57
76
  }
77
+ export {};
58
78
  //# sourceMappingURL=codex-websocket-connection.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"codex-websocket-connection.d.ts","sourceRoot":"","sources":["../src/codex-websocket-connection.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,KAAK,EACV,UAAU,EAEV,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAiC/C,UAAU,iBAAiB;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,KAAK,WAAW,GAAG,iBAAiB,GAAG,yBAAyB,GAAG,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9G,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,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,gBAAgB,CAA+C;IACvE,OAAO,CAAC,0BAA0B,CAAgD;IAClF,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,eAAe,CAAqD;IAC5E,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,gBAAgB,CAA6B;gBAEzC,OAAO,EAAE;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,YAAY,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC5B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;KAC3C;IAaK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyGxB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrC,OAAO,IAAI,qBAAqB,CAAC,UAAU,CAAC;IAiBnD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAAC,UAAU,CAAC;IAIxD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiBd,qBAAqB;IA2CnC,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,mBAAmB;IA2E3B,OAAO,CAAC,kBAAkB;IA+H1B,OAAO,CAAC,iBAAiB;IAkEzB,OAAO,CAAC,mBAAmB;YAoGb,SAAS;YAaT,eAAe;YAef,uBAAuB;IAUrC,OAAO,CAAC,sBAAsB;YA0BhB,OAAO;YAaP,MAAM;IAOpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,SAAS;CAOlB"}