@a5c-ai/agent-mux-adapters 0.2.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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/adapter-install.d.ts +21 -0
  4. package/dist/adapter-install.d.ts.map +1 -0
  5. package/dist/adapter-install.js +114 -0
  6. package/dist/adapter-install.js.map +1 -0
  7. package/dist/agent-mux-remote-adapter.d.ts +66 -0
  8. package/dist/agent-mux-remote-adapter.d.ts.map +1 -0
  9. package/dist/agent-mux-remote-adapter.js +283 -0
  10. package/dist/agent-mux-remote-adapter.js.map +1 -0
  11. package/dist/auth-config.d.ts +14 -0
  12. package/dist/auth-config.d.ts.map +1 -0
  13. package/dist/auth-config.js +52 -0
  14. package/dist/auth-config.js.map +1 -0
  15. package/dist/base-adapter.d.ts +150 -0
  16. package/dist/base-adapter.d.ts.map +1 -0
  17. package/dist/base-adapter.js +458 -0
  18. package/dist/base-adapter.js.map +1 -0
  19. package/dist/claude-adapter.d.ts +52 -0
  20. package/dist/claude-adapter.d.ts.map +1 -0
  21. package/dist/claude-adapter.js +375 -0
  22. package/dist/claude-adapter.js.map +1 -0
  23. package/dist/codex-adapter.d.ts +26 -0
  24. package/dist/codex-adapter.d.ts.map +1 -0
  25. package/dist/codex-adapter.js +243 -0
  26. package/dist/codex-adapter.js.map +1 -0
  27. package/dist/copilot-adapter.d.ts +26 -0
  28. package/dist/copilot-adapter.d.ts.map +1 -0
  29. package/dist/copilot-adapter.js +199 -0
  30. package/dist/copilot-adapter.js.map +1 -0
  31. package/dist/cursor-adapter.d.ts +39 -0
  32. package/dist/cursor-adapter.d.ts.map +1 -0
  33. package/dist/cursor-adapter.js +247 -0
  34. package/dist/cursor-adapter.js.map +1 -0
  35. package/dist/gemini-adapter.d.ts +36 -0
  36. package/dist/gemini-adapter.d.ts.map +1 -0
  37. package/dist/gemini-adapter.js +287 -0
  38. package/dist/gemini-adapter.js.map +1 -0
  39. package/dist/hermes-adapter.d.ts +33 -0
  40. package/dist/hermes-adapter.d.ts.map +1 -0
  41. package/dist/hermes-adapter.js +269 -0
  42. package/dist/hermes-adapter.js.map +1 -0
  43. package/dist/index.d.ts +20 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +21 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mcp-plugins.d.ts +13 -0
  48. package/dist/mcp-plugins.d.ts.map +1 -0
  49. package/dist/mcp-plugins.js +63 -0
  50. package/dist/mcp-plugins.js.map +1 -0
  51. package/dist/omp-adapter.d.ts +26 -0
  52. package/dist/omp-adapter.d.ts.map +1 -0
  53. package/dist/omp-adapter.js +195 -0
  54. package/dist/omp-adapter.js.map +1 -0
  55. package/dist/openclaw-adapter.d.ts +30 -0
  56. package/dist/openclaw-adapter.d.ts.map +1 -0
  57. package/dist/openclaw-adapter.js +212 -0
  58. package/dist/openclaw-adapter.js.map +1 -0
  59. package/dist/opencode-adapter.d.ts +30 -0
  60. package/dist/opencode-adapter.d.ts.map +1 -0
  61. package/dist/opencode-adapter.js +231 -0
  62. package/dist/opencode-adapter.js.map +1 -0
  63. package/dist/pi-adapter.d.ts +26 -0
  64. package/dist/pi-adapter.d.ts.map +1 -0
  65. package/dist/pi-adapter.js +196 -0
  66. package/dist/pi-adapter.js.map +1 -0
  67. package/dist/qwen-adapter.d.ts +36 -0
  68. package/dist/qwen-adapter.d.ts.map +1 -0
  69. package/dist/qwen-adapter.js +257 -0
  70. package/dist/qwen-adapter.js.map +1 -0
  71. package/dist/session-fs.d.ts +83 -0
  72. package/dist/session-fs.d.ts.map +1 -0
  73. package/dist/session-fs.js +255 -0
  74. package/dist/session-fs.js.map +1 -0
  75. package/package.json +56 -0
@@ -0,0 +1,52 @@
1
+ /**
2
+ * ClaudeAdapter — Claude Code CLI adapter.
3
+ */
4
+ import type { AgentCapabilities, ModelCapabilities, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, SpawnArgs, ParseContext, RunOptions, AgentEvent, InstalledPlugin, PluginInstallOptions } from '@a5c-ai/agent-mux-core';
5
+ import { BaseAgentAdapter } from './base-adapter.js';
6
+ export declare class ClaudeAdapter extends BaseAgentAdapter {
7
+ readonly agent: "claude";
8
+ readonly displayName = "Claude Code";
9
+ readonly cliCommand = "claude";
10
+ readonly minVersion = "1.0.0";
11
+ readonly hostEnvSignals: readonly ["CLAUDECODE", "CLAUDE_CODE_SESSION_ID", "CLAUDE_CODE", "CLAUDE_PROJECT_DIR"];
12
+ readonly capabilities: AgentCapabilities;
13
+ readonly models: ModelCapabilities[];
14
+ readonly defaultModelId = "claude-sonnet-4-20250514";
15
+ readonly configSchema: AgentConfigSchema;
16
+ buildSpawnArgs(options: RunOptions): SpawnArgs;
17
+ parseEvent(line: string, context: ParseContext): AgentEvent | AgentEvent[] | null;
18
+ detectAuth(): Promise<AuthState>;
19
+ getAuthGuidance(): AuthSetupGuidance;
20
+ sessionDir(cwd?: string): string;
21
+ parseSessionFile(filePath: string): Promise<Session>;
22
+ listSessionFiles(_cwd?: string): Promise<string[]>;
23
+ readConfig(_cwd?: string): Promise<import('@a5c-ai/agent-mux-core').AgentConfig>;
24
+ writeConfig(config: Partial<import('@a5c-ai/agent-mux-core').AgentConfig>, _cwd?: string): Promise<void>;
25
+ /**
26
+ * Override: in addition to the base `which claude` + `--version` check,
27
+ * probe `~/.claude` as a secondary signal that the harness has been
28
+ * installed and initialized at least once.
29
+ */
30
+ detectInstallation(): Promise<import('@a5c-ai/agent-mux-core').DetectInstallationResult>;
31
+ /**
32
+ * Write a Claude native hook into ~/.claude/settings.json in addition
33
+ * to registering with HookConfigManager. Claude supports a top-level
34
+ * `hooks` object keyed by hook type (PreToolUse/PostToolUse/Stop/...).
35
+ *
36
+ * We append the command under settings.hooks[hookType] as
37
+ * `{ matcher: '*', hooks: [{ type: 'command', command }] }`, preserving
38
+ * any existing entries.
39
+ */
40
+ protected writeNativeHook(hookType: string, command: string): Promise<void>;
41
+ /**
42
+ * Claude plugins are MCP servers stored under `mcpServers` in
43
+ * `~/.claude/settings.json`. Each entry is keyed by server id with a
44
+ * `{ command, args?, env? }` body. We treat the server id as the pluginId
45
+ * and surface an InstalledPlugin for each one.
46
+ */
47
+ private settingsPath;
48
+ listPlugins(): Promise<InstalledPlugin[]>;
49
+ installPlugin(pluginId: string, options?: PluginInstallOptions): Promise<InstalledPlugin>;
50
+ uninstallPlugin(pluginId: string): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=claude-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../src/claude-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AASrD,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,QAAQ,CAAC,KAAK,EAAG,QAAQ,CAAU;IACnC,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,UAAU,YAAY;IAC/B,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,cAAc,yFAA0F;IAEjH,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CA4CtC;IAEF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAyDlC;IAEF,QAAQ,CAAC,cAAc,8BAA8B;IAErD,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAQtC;IAEF,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS;IAmD9C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI;IAyG3E,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAYtC,eAAe,IAAI,iBAAiB;IAkBpC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1B,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,OAAO,wBAAwB,EAAE,WAAW,CAAC;IAOhF,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,wBAAwB,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9G;;;;OAIG;IACY,kBAAkB,IAAI,OAAO,CAAC,OAAO,wBAAwB,EAAE,wBAAwB,CAAC;IAiBvG;;;;;;;;OAQG;cACsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1F;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAIL,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIzC,aAAa,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,CAAC;IAIZ,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhE"}
@@ -0,0 +1,375 @@
1
+ /**
2
+ * ClaudeAdapter — Claude Code CLI adapter.
3
+ */
4
+ import * as os from 'node:os';
5
+ import * as path from 'node:path';
6
+ import { BaseAgentAdapter } from './base-adapter.js';
7
+ import { mcpListPlugins, mcpInstallPlugin, mcpUninstallPlugin } from './mcp-plugins.js';
8
+ import { listJsonlFiles, parseJsonlSessionFile, readJsonFile, writeJsonFileAtomic, } from './session-fs.js';
9
+ export class ClaudeAdapter extends BaseAgentAdapter {
10
+ agent = 'claude';
11
+ displayName = 'Claude Code';
12
+ cliCommand = 'claude';
13
+ minVersion = '1.0.0';
14
+ hostEnvSignals = ['CLAUDECODE', 'CLAUDE_CODE_SESSION_ID', 'CLAUDE_CODE', 'CLAUDE_PROJECT_DIR'];
15
+ capabilities = {
16
+ agent: 'claude',
17
+ canResume: true,
18
+ canFork: true,
19
+ supportsMultiTurn: true,
20
+ sessionPersistence: 'file',
21
+ supportsTextStreaming: true,
22
+ supportsToolCallStreaming: true,
23
+ supportsThinkingStreaming: true,
24
+ supportsNativeTools: true,
25
+ supportsMCP: true,
26
+ supportsParallelToolCalls: true,
27
+ requiresToolApproval: true,
28
+ approvalModes: ['yolo', 'prompt', 'deny'],
29
+ supportsThinking: true,
30
+ thinkingEffortLevels: ['low', 'medium', 'high', 'max'],
31
+ supportsThinkingBudgetTokens: true,
32
+ supportsJsonMode: true,
33
+ supportsStructuredOutput: true,
34
+ supportsSkills: true,
35
+ supportsAgentsMd: true,
36
+ skillsFormat: 'file',
37
+ supportsSubagentDispatch: true,
38
+ supportsParallelExecution: true,
39
+ maxParallelTasks: 10,
40
+ supportsInteractiveMode: true,
41
+ supportsStdinInjection: true,
42
+ supportsImageInput: true,
43
+ supportsImageOutput: false,
44
+ supportsFileAttachments: true,
45
+ supportsPlugins: true,
46
+ pluginFormats: ['mcp-server'],
47
+ pluginRegistries: [{ name: 'mcp', url: 'https://modelcontextprotocol.io', searchable: false }],
48
+ supportedPlatforms: ['darwin', 'linux', 'win32'],
49
+ requiresGitRepo: false,
50
+ requiresPty: false,
51
+ authMethods: [
52
+ { type: 'api_key', name: 'API Key', description: 'ANTHROPIC_API_KEY environment variable' },
53
+ { type: 'browser_login', name: 'Browser Login', description: 'Interactive browser-based login' },
54
+ ],
55
+ authFiles: ['.claude.json', '.claude/settings.json'],
56
+ installMethods: [
57
+ { platform: 'all', type: 'npm', command: 'npm install -g @anthropic-ai/claude-code' },
58
+ ],
59
+ };
60
+ models = [
61
+ {
62
+ agent: 'claude',
63
+ modelId: 'claude-sonnet-4-20250514',
64
+ modelAlias: 'sonnet',
65
+ displayName: 'Claude Sonnet 4',
66
+ deprecated: false,
67
+ contextWindow: 200000,
68
+ maxOutputTokens: 16384,
69
+ maxThinkingTokens: 128000,
70
+ inputPricePerMillion: 3,
71
+ outputPricePerMillion: 15,
72
+ supportsThinking: true,
73
+ thinkingEffortLevels: ['low', 'medium', 'high', 'max'],
74
+ supportsToolCalling: true,
75
+ supportsParallelToolCalls: true,
76
+ supportsToolCallStreaming: true,
77
+ supportsJsonMode: true,
78
+ supportsStructuredOutput: true,
79
+ supportsTextStreaming: true,
80
+ supportsThinkingStreaming: true,
81
+ supportsImageInput: true,
82
+ supportsImageOutput: false,
83
+ supportsFileInput: true,
84
+ cliArgKey: '--model',
85
+ cliArgValue: 'claude-sonnet-4-20250514',
86
+ lastUpdated: '2025-05-14',
87
+ source: 'bundled',
88
+ },
89
+ {
90
+ agent: 'claude',
91
+ modelId: 'claude-opus-4-20250514',
92
+ modelAlias: 'opus',
93
+ displayName: 'Claude Opus 4',
94
+ deprecated: false,
95
+ contextWindow: 200000,
96
+ maxOutputTokens: 16384,
97
+ maxThinkingTokens: 128000,
98
+ inputPricePerMillion: 15,
99
+ outputPricePerMillion: 75,
100
+ supportsThinking: true,
101
+ thinkingEffortLevels: ['low', 'medium', 'high', 'max'],
102
+ supportsToolCalling: true,
103
+ supportsParallelToolCalls: true,
104
+ supportsToolCallStreaming: true,
105
+ supportsJsonMode: true,
106
+ supportsStructuredOutput: true,
107
+ supportsTextStreaming: true,
108
+ supportsThinkingStreaming: true,
109
+ supportsImageInput: true,
110
+ supportsImageOutput: false,
111
+ supportsFileInput: true,
112
+ cliArgKey: '--model',
113
+ cliArgValue: 'claude-opus-4-20250514',
114
+ lastUpdated: '2025-05-14',
115
+ source: 'bundled',
116
+ },
117
+ ];
118
+ defaultModelId = 'claude-sonnet-4-20250514';
119
+ configSchema = {
120
+ agent: 'claude',
121
+ version: 1,
122
+ fields: [],
123
+ configFilePaths: [path.join(os.homedir(), '.claude', 'settings.json')],
124
+ projectConfigFilePaths: ['.claude/settings.json'],
125
+ configFormat: 'json',
126
+ supportsProjectConfig: true,
127
+ };
128
+ buildSpawnArgs(options) {
129
+ const args = [];
130
+ // Output format — stream-json is the only format that emits incremental content blocks.
131
+ args.push('--output-format', options.outputFormat ?? 'stream-json');
132
+ args.push('--verbose');
133
+ args.push('--include-partial-messages');
134
+ // Model
135
+ if (options.model) {
136
+ args.push('--model', options.model);
137
+ }
138
+ // Session resume. `--resume` is the reconnect flag; `--session-id` is new-session.
139
+ // Heuristic: forkSessionId indicates a fork → new session-id; sessionId without fork → resume.
140
+ const sessionId = this.resolveSessionId(options);
141
+ if (sessionId) {
142
+ const isFork = options.forkSessionId != null;
143
+ args.push(isFork ? '--session-id' : '--resume', sessionId);
144
+ }
145
+ // Max turns
146
+ if (options.maxTurns != null) {
147
+ args.push('--max-turns', String(options.maxTurns));
148
+ }
149
+ // Approval mode
150
+ if (options.approvalMode === 'yolo') {
151
+ args.push('--dangerously-skip-permissions');
152
+ }
153
+ // System prompt
154
+ if (options.systemPrompt) {
155
+ args.push('--system-prompt', options.systemPrompt);
156
+ }
157
+ // Prompt
158
+ const prompt = Array.isArray(options.prompt) ? options.prompt.join('\n') : options.prompt;
159
+ args.push('--print', prompt);
160
+ return {
161
+ command: this.cliCommand,
162
+ args,
163
+ env: this.buildEnvFromOptions(options),
164
+ cwd: options.cwd ?? process.cwd(),
165
+ usePty: false,
166
+ timeout: options.timeout,
167
+ inactivityTimeout: options.inactivityTimeout,
168
+ };
169
+ }
170
+ parseEvent(line, context) {
171
+ const parsed = this.parseJsonLine(line);
172
+ if (parsed == null || typeof parsed !== 'object')
173
+ return null;
174
+ const obj = parsed;
175
+ const ts = Date.now();
176
+ const base = { runId: context.runId, agent: this.agent, timestamp: ts };
177
+ // Claude Code JSONL events have a 'type' field
178
+ const type = obj['type'];
179
+ if (type === 'assistant' || type === 'text') {
180
+ const content = (obj['content'] ?? obj['text'] ?? '');
181
+ if (content) {
182
+ return { ...base, type: 'text_delta', delta: content, accumulated: content };
183
+ }
184
+ }
185
+ if (type === 'tool_use' || type === 'tool_call') {
186
+ return {
187
+ ...base,
188
+ type: 'tool_call_start',
189
+ toolCallId: (obj['id'] ?? obj['toolCallId'] ?? ''),
190
+ toolName: (obj['name'] ?? obj['toolName'] ?? ''),
191
+ inputAccumulated: JSON.stringify(obj['input'] ?? {}),
192
+ };
193
+ }
194
+ if (type === 'tool_result') {
195
+ return {
196
+ ...base,
197
+ type: 'tool_result',
198
+ toolCallId: (obj['tool_use_id'] ?? obj['toolCallId'] ?? ''),
199
+ toolName: (obj['toolName'] ?? ''),
200
+ output: obj['content'] ?? obj['output'] ?? '',
201
+ durationMs: 0,
202
+ };
203
+ }
204
+ if (type === 'thinking') {
205
+ const thinking = (obj['thinking'] ?? obj['content'] ?? '');
206
+ return { ...base, type: 'thinking_delta', delta: thinking, accumulated: thinking };
207
+ }
208
+ if (type === 'error') {
209
+ return {
210
+ ...base,
211
+ type: 'error',
212
+ code: 'INTERNAL',
213
+ message: (obj['message'] ?? obj['error'] ?? 'Unknown error'),
214
+ recoverable: false,
215
+ };
216
+ }
217
+ // stream-json: wraps Anthropic API events inside a `stream_event` envelope.
218
+ // The interesting shapes are content_block_delta (text_delta + input_json_delta)
219
+ // and message_stop. Without this branch, live streaming output is silently dropped.
220
+ if (type === 'stream_event') {
221
+ const ev = obj['event'];
222
+ if (!ev)
223
+ return null;
224
+ const evType = ev['type'];
225
+ if (evType === 'content_block_delta') {
226
+ const delta = ev['delta'];
227
+ const dType = delta?.['type'];
228
+ if (dType === 'text_delta') {
229
+ const text = (delta?.['text'] ?? '');
230
+ return { ...base, type: 'text_delta', delta: text, accumulated: text };
231
+ }
232
+ if (dType === 'input_json_delta') {
233
+ const partial = (delta?.['partial_json'] ?? '');
234
+ return {
235
+ ...base,
236
+ type: 'tool_input_delta',
237
+ toolCallId: String(ev['index'] ?? ''),
238
+ delta: partial,
239
+ inputAccumulated: partial,
240
+ };
241
+ }
242
+ if (dType === 'thinking_delta') {
243
+ const t = (delta?.['thinking'] ?? '');
244
+ return { ...base, type: 'thinking_delta', delta: t, accumulated: t };
245
+ }
246
+ }
247
+ if (evType === 'message_stop') {
248
+ return { ...base, type: 'message_stop', text: '' };
249
+ }
250
+ return null;
251
+ }
252
+ if (type === 'result') {
253
+ const events = [];
254
+ const text = (obj['result'] ?? obj['text'] ?? '');
255
+ if (text) {
256
+ events.push({ ...base, type: 'message_stop', text });
257
+ }
258
+ const cost = this.assembleCostRecord(obj['cost'] ?? obj['usage']);
259
+ if (cost) {
260
+ events.push({ ...base, type: 'cost', cost });
261
+ }
262
+ return events.length > 0 ? events : null;
263
+ }
264
+ return null;
265
+ }
266
+ async detectAuth() {
267
+ const apiKey = process.env['ANTHROPIC_API_KEY'];
268
+ if (apiKey) {
269
+ return {
270
+ status: 'authenticated',
271
+ method: 'api_key',
272
+ identity: `sk-ant-...${apiKey.slice(-4)}`,
273
+ };
274
+ }
275
+ return { status: 'unauthenticated' };
276
+ }
277
+ getAuthGuidance() {
278
+ return {
279
+ agent: 'claude',
280
+ providerName: 'Anthropic',
281
+ steps: [
282
+ { step: 1, description: 'Get an API key from https://console.anthropic.com/settings/keys', url: 'https://console.anthropic.com/settings/keys' },
283
+ { step: 2, description: 'Set the ANTHROPIC_API_KEY environment variable', command: 'export ANTHROPIC_API_KEY=sk-ant-...' },
284
+ { step: 3, description: 'Alternatively, run `claude` and follow the browser login flow', command: 'claude' },
285
+ ],
286
+ envVars: [
287
+ { name: 'ANTHROPIC_API_KEY', description: 'Anthropic API key', required: true, exampleFormat: 'sk-ant-api03-...' },
288
+ ],
289
+ documentationUrls: ['https://docs.anthropic.com/en/docs/claude-code'],
290
+ loginCommand: 'claude',
291
+ verifyCommand: 'claude --version',
292
+ };
293
+ }
294
+ sessionDir(cwd) {
295
+ return path.join(os.homedir(), '.claude', 'projects');
296
+ }
297
+ async parseSessionFile(filePath) {
298
+ const parsed = await parseJsonlSessionFile(filePath, 'claude');
299
+ return { ...parsed, agent: 'claude', title: parsed.sessionId };
300
+ }
301
+ async listSessionFiles(_cwd) {
302
+ return listJsonlFiles(this.sessionDir());
303
+ }
304
+ async readConfig(_cwd) {
305
+ const filePath = this.configSchema.configFilePaths?.[0];
306
+ if (!filePath)
307
+ return { agent: 'claude', source: 'global' };
308
+ const data = (await readJsonFile(filePath)) ?? {};
309
+ return { agent: 'claude', source: 'global', filePaths: [filePath], ...data };
310
+ }
311
+ async writeConfig(config, _cwd) {
312
+ const filePath = this.configSchema.configFilePaths?.[0];
313
+ if (!filePath)
314
+ return;
315
+ const existing = (await readJsonFile(filePath)) ?? {};
316
+ const { agent: _a, source: _s, filePaths: _fp, ...rest } = config;
317
+ void _a;
318
+ void _s;
319
+ void _fp;
320
+ await writeJsonFileAtomic(filePath, { ...existing, ...rest });
321
+ }
322
+ /**
323
+ * Override: in addition to the base `which claude` + `--version` check,
324
+ * probe `~/.claude` as a secondary signal that the harness has been
325
+ * installed and initialized at least once.
326
+ */
327
+ async detectInstallation() {
328
+ const base = await super.detectInstallation();
329
+ const claudeDir = path.join(os.homedir(), '.claude');
330
+ let hasConfigDir = false;
331
+ try {
332
+ const { promises: fsp } = await import('node:fs');
333
+ const st = await fsp.stat(claudeDir);
334
+ hasConfigDir = st.isDirectory();
335
+ }
336
+ catch {
337
+ hasConfigDir = false;
338
+ }
339
+ const notes = hasConfigDir
340
+ ? `~/.claude config directory present`
341
+ : `~/.claude config directory not found`;
342
+ return { ...base, notes };
343
+ }
344
+ /**
345
+ * Write a Claude native hook into ~/.claude/settings.json in addition
346
+ * to registering with HookConfigManager. Claude supports a top-level
347
+ * `hooks` object keyed by hook type (PreToolUse/PostToolUse/Stop/...).
348
+ *
349
+ * We append the command under settings.hooks[hookType] as
350
+ * `{ matcher: '*', hooks: [{ type: 'command', command }] }`, preserving
351
+ * any existing entries.
352
+ */
353
+ async writeNativeHook(hookType, command) {
354
+ await this.appendJsonHook(path.join(os.homedir(), '.claude', 'settings.json'), hookType, { matcher: '*', hooks: [{ type: 'command', command }] });
355
+ }
356
+ /**
357
+ * Claude plugins are MCP servers stored under `mcpServers` in
358
+ * `~/.claude/settings.json`. Each entry is keyed by server id with a
359
+ * `{ command, args?, env? }` body. We treat the server id as the pluginId
360
+ * and surface an InstalledPlugin for each one.
361
+ */
362
+ settingsPath() {
363
+ return path.join(os.homedir(), '.claude', 'settings.json');
364
+ }
365
+ async listPlugins() {
366
+ return mcpListPlugins(this.settingsPath());
367
+ }
368
+ async installPlugin(pluginId, options) {
369
+ return mcpInstallPlugin(this.settingsPath(), pluginId, options);
370
+ }
371
+ async uninstallPlugin(pluginId) {
372
+ return mcpUninstallPlugin(this.settingsPath(), pluginId);
373
+ }
374
+ }
375
+ //# sourceMappingURL=claude-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../src/claude-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * CodexAdapter — OpenAI Codex CLI adapter.
3
+ */
4
+ import type { AgentCapabilities, ModelCapabilities, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, SpawnArgs, ParseContext, RunOptions, AgentEvent, AgentConfig } from '@a5c-ai/agent-mux-core';
5
+ import { BaseAgentAdapter } from './base-adapter.js';
6
+ export declare class CodexAdapter extends BaseAgentAdapter {
7
+ readonly agent: "codex";
8
+ readonly displayName = "OpenAI Codex";
9
+ readonly cliCommand = "codex";
10
+ readonly minVersion = "0.1.0";
11
+ readonly hostEnvSignals: readonly ["CODEX_SESSION_ID", "CODEX_RUN_ID", "CODEX_CLI"];
12
+ readonly capabilities: AgentCapabilities;
13
+ readonly models: ModelCapabilities[];
14
+ readonly defaultModelId = "o4-mini";
15
+ readonly configSchema: AgentConfigSchema;
16
+ buildSpawnArgs(options: RunOptions): SpawnArgs;
17
+ parseEvent(line: string, context: ParseContext): AgentEvent | AgentEvent[] | null;
18
+ detectAuth(): Promise<AuthState>;
19
+ getAuthGuidance(): AuthSetupGuidance;
20
+ sessionDir(_cwd?: string): string;
21
+ parseSessionFile(filePath: string): Promise<Session>;
22
+ listSessionFiles(_cwd?: string): Promise<string[]>;
23
+ readConfig(_cwd?: string): Promise<AgentConfig>;
24
+ writeConfig(config: Partial<AgentConfig>, _cwd?: string): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=codex-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-adapter.d.ts","sourceRoot":"","sources":["../src/codex-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AASrD,qBAAa,YAAa,SAAQ,gBAAgB;IAChD,QAAQ,CAAC,KAAK,EAAG,OAAO,CAAU;IAClC,QAAQ,CAAC,WAAW,kBAAkB;IACtC,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,cAAc,6DAA8D;IAErF,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CA0CtC;IAEF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAgDlC;IAEF,QAAQ,CAAC,cAAc,aAAa;IAEpC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAOtC;IAEF,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS;IAyB9C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI;IAmD3E,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAoBtC,eAAe,IAAI,iBAAiB;IAgBpC,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;CAa9E"}