@a5c-ai/agent-mux-adapters 0.2.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.
- package/dist/amp-adapter.d.ts +31 -0
- package/dist/amp-adapter.d.ts.map +1 -0
- package/dist/amp-adapter.js +336 -0
- package/dist/amp-adapter.js.map +1 -0
- package/dist/auth-config.d.ts +36 -5
- package/dist/auth-config.d.ts.map +1 -1
- package/dist/auth-config.js +127 -12
- package/dist/auth-config.js.map +1 -1
- package/dist/base-adapter-helpers.d.ts +8 -0
- package/dist/base-adapter-helpers.d.ts.map +1 -0
- package/dist/base-adapter-helpers.js +68 -0
- package/dist/base-adapter-helpers.js.map +1 -0
- package/dist/base-adapter.d.ts +14 -9
- package/dist/base-adapter.d.ts.map +1 -1
- package/dist/base-adapter.js +23 -66
- package/dist/base-adapter.js.map +1 -1
- package/dist/claude-adapter.d.ts.map +1 -1
- package/dist/claude-adapter.js +5 -2
- package/dist/claude-adapter.js.map +1 -1
- package/dist/claude-agent-sdk-adapter.d.ts +53 -0
- package/dist/claude-agent-sdk-adapter.d.ts.map +1 -0
- package/dist/claude-agent-sdk-adapter.js +607 -0
- package/dist/claude-agent-sdk-adapter.js.map +1 -0
- package/dist/codex-adapter.d.ts.map +1 -1
- package/dist/codex-adapter.js +100 -12
- package/dist/codex-adapter.js.map +1 -1
- package/dist/codex-sdk-adapter.d.ts +32 -0
- package/dist/codex-sdk-adapter.d.ts.map +1 -0
- package/dist/codex-sdk-adapter.js +384 -0
- package/dist/codex-sdk-adapter.js.map +1 -0
- package/dist/codex-sdk-mocks.d.ts +51 -0
- package/dist/codex-sdk-mocks.d.ts.map +1 -0
- package/dist/codex-sdk-mocks.js +97 -0
- package/dist/codex-sdk-mocks.js.map +1 -0
- package/dist/codex-websocket-adapter.d.ts +41 -0
- package/dist/codex-websocket-adapter.d.ts.map +1 -0
- package/dist/codex-websocket-adapter.js +289 -0
- package/dist/codex-websocket-adapter.js.map +1 -0
- package/dist/codex-websocket-connection.d.ts +58 -0
- package/dist/codex-websocket-connection.d.ts.map +1 -0
- package/dist/codex-websocket-connection.js +244 -0
- package/dist/codex-websocket-connection.js.map +1 -0
- package/dist/copilot-adapter.d.ts.map +1 -1
- package/dist/copilot-adapter.js +7 -3
- package/dist/copilot-adapter.js.map +1 -1
- package/dist/cursor-adapter.d.ts.map +1 -1
- package/dist/cursor-adapter.js +11 -4
- package/dist/cursor-adapter.js.map +1 -1
- package/dist/droid-adapter.d.ts +30 -0
- package/dist/droid-adapter.d.ts.map +1 -0
- package/dist/droid-adapter.js +377 -0
- package/dist/droid-adapter.js.map +1 -0
- package/dist/gemini-adapter.d.ts.map +1 -1
- package/dist/gemini-adapter.js +6 -3
- package/dist/gemini-adapter.js.map +1 -1
- package/dist/hermes-adapter.d.ts.map +1 -1
- package/dist/hermes-adapter.js +6 -2
- package/dist/hermes-adapter.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/mocks/index.d.ts +60 -0
- package/dist/mocks/index.d.ts.map +1 -0
- package/dist/mocks/index.js +203 -0
- package/dist/mocks/index.js.map +1 -0
- package/dist/mocks/mock-types.d.ts +260 -0
- package/dist/mocks/mock-types.d.ts.map +1 -0
- package/dist/mocks/mock-types.js +12 -0
- package/dist/mocks/mock-types.js.map +1 -0
- package/dist/mocks/programmatic-mocks.d.ts +50 -0
- package/dist/mocks/programmatic-mocks.d.ts.map +1 -0
- package/dist/mocks/programmatic-mocks.js +330 -0
- package/dist/mocks/programmatic-mocks.js.map +1 -0
- package/dist/mocks/remote-mocks.d.ts +52 -0
- package/dist/mocks/remote-mocks.d.ts.map +1 -0
- package/dist/mocks/remote-mocks.js +436 -0
- package/dist/mocks/remote-mocks.js.map +1 -0
- package/dist/omp-adapter.d.ts.map +1 -1
- package/dist/omp-adapter.js +6 -3
- package/dist/omp-adapter.js.map +1 -1
- package/dist/openclaw-adapter.d.ts.map +1 -1
- package/dist/openclaw-adapter.js +6 -3
- package/dist/openclaw-adapter.js.map +1 -1
- package/dist/opencode-adapter.d.ts +2 -2
- package/dist/opencode-adapter.d.ts.map +1 -1
- package/dist/opencode-adapter.js +173 -61
- package/dist/opencode-adapter.js.map +1 -1
- package/dist/opencode-http-adapter.d.ts +41 -0
- package/dist/opencode-http-adapter.d.ts.map +1 -0
- package/dist/opencode-http-adapter.js +370 -0
- package/dist/opencode-http-adapter.js.map +1 -0
- package/dist/opencode-http-connection.d.ts +33 -0
- package/dist/opencode-http-connection.d.ts.map +1 -0
- package/dist/opencode-http-connection.js +198 -0
- package/dist/opencode-http-connection.js.map +1 -0
- package/dist/pi-adapter.d.ts.map +1 -1
- package/dist/pi-adapter.js +5 -2
- package/dist/pi-adapter.js.map +1 -1
- package/dist/pi-sdk-adapter.d.ts +46 -0
- package/dist/pi-sdk-adapter.d.ts.map +1 -0
- package/dist/pi-sdk-adapter.js +549 -0
- package/dist/pi-sdk-adapter.js.map +1 -0
- package/dist/programmatic-adapter-base.d.ts +88 -0
- package/dist/programmatic-adapter-base.d.ts.map +1 -0
- package/dist/programmatic-adapter-base.js +169 -0
- package/dist/programmatic-adapter-base.js.map +1 -0
- package/dist/qwen-adapter.d.ts.map +1 -1
- package/dist/qwen-adapter.js +5 -2
- package/dist/qwen-adapter.js.map +1 -1
- package/dist/remote-adapter-base.d.ts +85 -0
- package/dist/remote-adapter-base.d.ts.map +1 -0
- package/dist/remote-adapter-base.js +102 -0
- package/dist/remote-adapter-base.js.map +1 -0
- 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"}
|