@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,31 @@
1
+ /**
2
+ * Adapter for Sourcegraph Amp CLI.
3
+ *
4
+ * Amp is Sourcegraph's agentic coding assistant with multi-model support,
5
+ * specialized subagents (Oracle, Librarian), and advanced code understanding.
6
+ */
7
+ import { BaseAgentAdapter } from './base-adapter.js';
8
+ import type { AgentCapabilities, ModelCapabilities, AuthState, AuthSetupGuidance, Session, RunOptions, SpawnArgs, ParseContext, AgentEvent, InstalledPlugin, PluginInstallOptions, AgentConfig } from '@a5c-ai/agent-mux-core';
9
+ export declare class AmpAdapter extends BaseAgentAdapter {
10
+ readonly agent: "amp";
11
+ readonly displayName = "Sourcegraph Amp";
12
+ readonly cliCommand = "amp";
13
+ readonly minVersion = "2.0.0";
14
+ readonly hostEnvSignals: string[];
15
+ readonly capabilities: AgentCapabilities;
16
+ readonly models: ModelCapabilities[];
17
+ readonly defaultModelId = "amp-oracle";
18
+ buildSpawnArgs(options: RunOptions): SpawnArgs;
19
+ parseEvent(line: string, context: ParseContext): AgentEvent | AgentEvent[] | null;
20
+ sessionDir(_cwd?: string): string;
21
+ parseSessionFile(filePath: string): Promise<Session>;
22
+ listSessionFiles(_cwd?: string): Promise<string[]>;
23
+ detectAuth(): Promise<AuthState>;
24
+ getAuthGuidance(): AuthSetupGuidance;
25
+ readConfig(_cwd?: string): Promise<AgentConfig>;
26
+ writeConfig(config: Partial<AgentConfig>, _cwd?: string): Promise<void>;
27
+ listPlugins(): Promise<InstalledPlugin[]>;
28
+ installPlugin(_pluginId: string, _options?: PluginInstallOptions): Promise<InstalledPlugin>;
29
+ uninstallPlugin(_pluginId: string): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=amp-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amp-adapter.d.ts","sourceRoot":"","sources":["../src/amp-adapter.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAUhC,qBAAa,UAAW,SAAQ,gBAAgB;IAC9C,QAAQ,CAAC,KAAK,EAAG,KAAK,CAAU;IAChC,QAAQ,CAAC,WAAW,qBAAqB;IACzC,QAAQ,CAAC,UAAU,SAAS;IAC5B,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,cAAc,WAAmD;IAE1E,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAgDtC;IAEF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAoDlC;IAEF,QAAQ,CAAC,cAAc,gBAAgB;IAEvC,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS;IAyD9C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI;IA0FjF,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,IAAI,OAAO,CAAC,SAAS,CAAC;IAYtC,eAAe,IAAI,iBAAiB;IAwC9B,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAM/C,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvE,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAKzC,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,eAAe,CAAC;IAIrB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxD"}
@@ -0,0 +1,336 @@
1
+ // @ts-nocheck -- TODO(amp-adapter): align with current ModelCapabilities/AgentEvent types
2
+ /**
3
+ * Adapter for Sourcegraph Amp CLI.
4
+ *
5
+ * Amp is Sourcegraph's agentic coding assistant with multi-model support,
6
+ * specialized subagents (Oracle, Librarian), and advanced code understanding.
7
+ */
8
+ import { BaseAgentAdapter } from './base-adapter.js';
9
+ import { homedir } from 'node:os';
10
+ import { join } from 'node:path';
11
+ import { listJsonlFiles, parseJsonlSessionFile, readJsonFile, writeJsonFileAtomic, } from './session-fs.js';
12
+ export class AmpAdapter extends BaseAgentAdapter {
13
+ agent = 'amp';
14
+ displayName = 'Sourcegraph Amp';
15
+ cliCommand = 'amp';
16
+ minVersion = '2.0.0';
17
+ hostEnvSignals = ['SOURCEGRAPH_ACCESS_TOKEN', 'AMP_CONFIG_PATH'];
18
+ capabilities = {
19
+ agent: 'amp',
20
+ canResume: true,
21
+ canFork: true,
22
+ supportsMultiTurn: true,
23
+ sessionPersistence: 'file',
24
+ supportsTextStreaming: true,
25
+ supportsToolCallStreaming: true,
26
+ supportsNativeTools: true,
27
+ supportsMCP: true,
28
+ supportsSubagentDispatch: true,
29
+ supportsParallelExecution: true,
30
+ maxParallelTasks: 8,
31
+ requiresToolApproval: true,
32
+ approvalModes: ['yolo', 'prompt'],
33
+ supportedPlatforms: ['darwin', 'linux', 'win32'],
34
+ requiresGitRepo: false,
35
+ requiresPty: false,
36
+ authMethods: [
37
+ {
38
+ type: 'api_key',
39
+ name: 'Sourcegraph Access Token',
40
+ description: 'SOURCEGRAPH_ACCESS_TOKEN environment variable',
41
+ },
42
+ {
43
+ type: 'browser_login',
44
+ name: 'Sourcegraph OAuth',
45
+ description: 'Interactive browser-based login',
46
+ },
47
+ ],
48
+ installMethods: [
49
+ {
50
+ platform: 'all',
51
+ type: 'npm',
52
+ command: 'npm install -g @sourcegraph/amp-cli',
53
+ },
54
+ {
55
+ platform: 'unix',
56
+ type: 'curl',
57
+ command: 'curl -fsSL https://get.sourcegraph.com/amp | bash',
58
+ },
59
+ {
60
+ platform: 'all',
61
+ type: 'manual',
62
+ description: 'Download from GitHub Releases',
63
+ url: 'https://github.com/sourcegraph/amp/releases',
64
+ },
65
+ ],
66
+ };
67
+ models = [
68
+ {
69
+ agent: 'amp',
70
+ modelId: 'claude-3-5-sonnet-20241022',
71
+ displayName: 'Claude 3.5 Sonnet',
72
+ modelAlias: 'claude-sonnet',
73
+ deprecated: false,
74
+ contextWindow: 200000,
75
+ maxOutputTokens: 8192,
76
+ inputPricePerMillion: 3.0,
77
+ outputPricePerMillion: 15.0,
78
+ supportsToolCalling: true,
79
+ supportsParallelToolCalls: true,
80
+ },
81
+ {
82
+ agent: 'amp',
83
+ modelId: 'gpt-4o',
84
+ displayName: 'GPT-4o',
85
+ modelAlias: 'gpt-4o',
86
+ deprecated: false,
87
+ contextWindow: 128000,
88
+ maxOutputTokens: 4096,
89
+ inputPricePerMillion: 5.0,
90
+ outputPricePerMillion: 15.0,
91
+ supportsToolCalling: true,
92
+ supportsParallelToolCalls: true,
93
+ },
94
+ {
95
+ agent: 'amp',
96
+ modelId: 'amp-oracle',
97
+ displayName: 'Amp Oracle (Multi-Model)',
98
+ modelAlias: 'oracle',
99
+ deprecated: false,
100
+ contextWindow: 200000,
101
+ maxOutputTokens: 8192,
102
+ description: 'Multi-model routing with specialized subagents',
103
+ supportsToolCalling: true,
104
+ supportsParallelToolCalls: true,
105
+ },
106
+ {
107
+ agent: 'amp',
108
+ modelId: 'gemini-1.5-pro',
109
+ displayName: 'Gemini 1.5 Pro',
110
+ modelAlias: 'gemini-pro',
111
+ deprecated: false,
112
+ contextWindow: 2000000,
113
+ maxOutputTokens: 8192,
114
+ inputPricePerMillion: 1.25,
115
+ outputPricePerMillion: 5.0,
116
+ supportsToolCalling: true,
117
+ supportsParallelToolCalls: true,
118
+ },
119
+ ];
120
+ defaultModelId = 'amp-oracle';
121
+ buildSpawnArgs(options) {
122
+ const args = [];
123
+ // Command selection
124
+ if (options.sessionId) {
125
+ args.push('resume', options.sessionId);
126
+ }
127
+ else {
128
+ args.push('chat');
129
+ }
130
+ // Output format
131
+ args.push('--output', 'jsonl');
132
+ args.push('--stream');
133
+ // Model selection
134
+ if (options.model) {
135
+ args.push('--model', options.model);
136
+ }
137
+ // System prompt
138
+ if (options.systemPrompt) {
139
+ args.push('--system', options.systemPrompt);
140
+ }
141
+ // Tool approval mode
142
+ if (options.approvalMode === 'yolo') {
143
+ args.push('--auto-approve');
144
+ }
145
+ // Max turns
146
+ if (options.maxTurns) {
147
+ args.push('--max-turns', String(options.maxTurns));
148
+ }
149
+ // Working directory
150
+ if (options.cwd) {
151
+ args.push('--cwd', options.cwd);
152
+ }
153
+ const { prompt, stdin } = this.buildPromptTransport(options);
154
+ if (stdin === undefined) {
155
+ args.push('--headless');
156
+ args.push('--prompt', prompt);
157
+ }
158
+ return {
159
+ command: this.cliCommand,
160
+ args,
161
+ cwd: options.cwd,
162
+ env: {
163
+ ...process.env,
164
+ ...options.env,
165
+ },
166
+ stdin,
167
+ };
168
+ }
169
+ parseEvent(line, context) {
170
+ const trimmed = line.trim();
171
+ if (!trimmed)
172
+ return null;
173
+ try {
174
+ const parsed = JSON.parse(trimmed);
175
+ const baseEvent = {
176
+ agent: this.agent,
177
+ runId: context.runId,
178
+ timestamp: Date.now(),
179
+ };
180
+ switch (parsed.type) {
181
+ case 'session_start':
182
+ return {
183
+ type: 'session_start',
184
+ ...baseEvent,
185
+ sessionId: parsed.sessionId,
186
+ turnCount: 0,
187
+ resumed: false,
188
+ };
189
+ case 'text_delta':
190
+ return {
191
+ type: 'text_delta',
192
+ ...baseEvent,
193
+ delta: parsed.content || parsed.delta,
194
+ accumulated: parsed.accumulated,
195
+ };
196
+ case 'tool_call_start':
197
+ return {
198
+ type: 'tool_call_start',
199
+ ...baseEvent,
200
+ toolCallId: parsed.id,
201
+ toolName: parsed.tool || parsed.name,
202
+ arguments: parsed.arguments || parsed.args,
203
+ };
204
+ case 'tool_result':
205
+ return {
206
+ type: 'tool_result',
207
+ ...baseEvent,
208
+ toolCallId: parsed.id,
209
+ toolName: parsed.tool || parsed.name,
210
+ output: parsed.result || parsed.output,
211
+ durationMs: parsed.duration || parsed.durationMs,
212
+ };
213
+ case 'cost':
214
+ return {
215
+ type: 'cost',
216
+ ...baseEvent,
217
+ cost: {
218
+ totalUsd: parsed.totalUsd || parsed.total,
219
+ inputTokens: parsed.inputTokens || parsed.input || 0,
220
+ outputTokens: parsed.outputTokens || parsed.output || 0,
221
+ thinkingTokens: parsed.thinkingTokens || 0,
222
+ cacheReadTokens: parsed.cacheReadTokens,
223
+ cacheCreationTokens: parsed.cacheCreationTokens,
224
+ },
225
+ };
226
+ case 'error':
227
+ return {
228
+ type: 'error',
229
+ ...baseEvent,
230
+ code: parsed.code,
231
+ message: parsed.message,
232
+ recoverable: parsed.recoverable ?? true,
233
+ fatal: parsed.fatal ?? false,
234
+ };
235
+ case 'session_end':
236
+ return {
237
+ type: 'session_end',
238
+ ...baseEvent,
239
+ sessionId: parsed.sessionId,
240
+ reason: parsed.reason,
241
+ finalTurnCount: parsed.turnCount || parsed.turns,
242
+ };
243
+ default:
244
+ return null;
245
+ }
246
+ }
247
+ catch {
248
+ return null;
249
+ }
250
+ }
251
+ sessionDir(_cwd) {
252
+ return join(homedir(), '.config', 'amp', 'sessions');
253
+ }
254
+ async parseSessionFile(filePath) {
255
+ const parsed = await parseJsonlSessionFile(filePath, 'amp');
256
+ return { ...parsed, agent: 'amp', title: parsed.sessionId };
257
+ }
258
+ async listSessionFiles(_cwd) {
259
+ return listJsonlFiles(this.sessionDir());
260
+ }
261
+ async detectAuth() {
262
+ const token = process.env['SOURCEGRAPH_ACCESS_TOKEN'];
263
+ if (token) {
264
+ return {
265
+ status: 'authenticated',
266
+ method: 'api_key',
267
+ identity: `token-...${token.slice(-4)}`,
268
+ };
269
+ }
270
+ return { status: 'unauthenticated' };
271
+ }
272
+ getAuthGuidance() {
273
+ return {
274
+ agent: 'amp',
275
+ providerName: 'Sourcegraph Amp',
276
+ steps: [
277
+ {
278
+ step: 1,
279
+ description: 'Sign up for a Sourcegraph account at sourcegraph.com',
280
+ url: 'https://sourcegraph.com/sign-up',
281
+ },
282
+ {
283
+ step: 2,
284
+ description: 'Install the Amp CLI',
285
+ command: 'npm install -g @sourcegraph/amp-cli',
286
+ },
287
+ {
288
+ step: 3,
289
+ description: 'Generate an access token in Sourcegraph settings',
290
+ url: 'https://sourcegraph.com/users/settings/tokens',
291
+ },
292
+ {
293
+ step: 4,
294
+ description: 'Authenticate with Sourcegraph',
295
+ command: 'amp auth login',
296
+ },
297
+ ],
298
+ envVars: [
299
+ {
300
+ name: 'SOURCEGRAPH_ACCESS_TOKEN',
301
+ description: 'Sourcegraph access token for API authentication',
302
+ required: false,
303
+ exampleFormat: 'sgp_...',
304
+ },
305
+ ],
306
+ documentationUrls: ['https://docs.sourcegraph.com/amp'],
307
+ loginCommand: 'amp auth login',
308
+ verifyCommand: 'amp --version',
309
+ };
310
+ }
311
+ async readConfig(_cwd) {
312
+ const configPath = join(homedir(), '.config', 'amp', 'config.json');
313
+ const data = (await readJsonFile(configPath)) ?? {};
314
+ return { agent: 'amp', source: 'global', filePaths: [configPath], ...data };
315
+ }
316
+ async writeConfig(config, _cwd) {
317
+ const configPath = join(homedir(), '.config', 'amp', 'config.json');
318
+ const existing = (await readJsonFile(configPath)) ?? {};
319
+ const { agent: _a, source: _s, filePaths: _fp, ...rest } = config;
320
+ void _a;
321
+ void _s;
322
+ void _fp;
323
+ await writeJsonFileAtomic(configPath, { ...existing, ...rest });
324
+ }
325
+ async listPlugins() {
326
+ // Amp doesn't have native plugin support in the same way Claude does
327
+ return [];
328
+ }
329
+ async installPlugin(_pluginId, _options) {
330
+ throw new Error('Amp does not support plugin installation via agent-mux');
331
+ }
332
+ async uninstallPlugin(_pluginId) {
333
+ throw new Error('Amp does not support plugin uninstallation via agent-mux');
334
+ }
335
+ }
336
+ //# sourceMappingURL=amp-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amp-adapter.js","sourceRoot":"","sources":["../src/amp-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CostRecord, Spawner } from '@a5c-ai/agent-mux-core';
2
+ /**
3
+ * Default Spawner that runs the command via `child_process.spawn`, capturing
4
+ * stdout/stderr. `shell: false`, `windowsHide: true`.
5
+ */
6
+ export declare const defaultSpawner: Spawner;
7
+ export declare function assembleCostRecord(raw: unknown): CostRecord | null;
8
+ //# sourceMappingURL=base-adapter-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter-helpers.d.ts","sourceRoot":"","sources":["../src/base-adapter-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,OAiBzB,CAAC;AAEL,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CA2BlE"}
@@ -0,0 +1,68 @@
1
+ import { spawn } from 'node:child_process';
2
+ /**
3
+ * Default Spawner that runs the command via `child_process.spawn`, capturing
4
+ * stdout/stderr. `shell: false`, `windowsHide: true`.
5
+ */
6
+ export const defaultSpawner = (command, args, options) => new Promise((resolve, reject) => {
7
+ const child = spawn(command, args, {
8
+ stdio: ['ignore', 'pipe', 'pipe'],
9
+ shell: false,
10
+ windowsHide: true,
11
+ env: options?.env ? { ...process.env, ...options.env } : process.env,
12
+ cwd: options?.cwd,
13
+ });
14
+ let stdout = '';
15
+ let stderr = '';
16
+ child.stdout?.setEncoding('utf8');
17
+ child.stderr?.setEncoding('utf8');
18
+ child.stdout?.on('data', (c) => { stdout += c; });
19
+ child.stderr?.on('data', (c) => { stderr += c; });
20
+ child.on('error', (err) => reject(err));
21
+ child.on('exit', (code) => resolve({ code: code ?? 1, stdout, stderr }));
22
+ });
23
+ export function assembleCostRecord(raw) {
24
+ if (raw == null || typeof raw !== 'object')
25
+ return null;
26
+ const obj = raw;
27
+ const totalUsd = extractNumber(obj, ['totalUsd', 'total_usd', 'cost', 'total_cost', 'totalCost']) ?? 0;
28
+ const inputTokens = extractNumber(obj, ['inputTokens', 'input_tokens', 'prompt_tokens']) ?? 0;
29
+ const outputTokens = extractNumber(obj, ['outputTokens', 'output_tokens', 'completion_tokens']) ?? 0;
30
+ const thinkingTokens = extractNumber(obj, ['thinkingTokens', 'thinking_tokens', 'reasoning_tokens']);
31
+ const cacheCreationTokens = extractNumber(obj, ['cacheCreationTokens', 'cache_creation_tokens', 'cache_write_tokens']);
32
+ const cacheReadTokens = extractNumber(obj, ['cacheReadTokens', 'cache_read_tokens', 'cache_read_input_tokens']);
33
+ const cachedTokens = extractNumber(obj, ['cachedTokens', 'cached_tokens']) ??
34
+ ((cacheCreationTokens != null && cacheReadTokens != null) ? cacheCreationTokens + cacheReadTokens : undefined);
35
+ if (totalUsd === 0 && inputTokens === 0 && outputTokens === 0)
36
+ return null;
37
+ const record = {
38
+ totalUsd,
39
+ inputTokens,
40
+ outputTokens,
41
+ };
42
+ if (thinkingTokens != null)
43
+ record.thinkingTokens = thinkingTokens;
44
+ if (cachedTokens != null)
45
+ record.cachedTokens = cachedTokens;
46
+ if (cacheCreationTokens != null)
47
+ record.cacheCreationTokens = cacheCreationTokens;
48
+ if (cacheReadTokens != null)
49
+ record.cacheReadTokens = cacheReadTokens;
50
+ return record;
51
+ }
52
+ function extractNumber(obj, keys) {
53
+ for (const key of keys) {
54
+ const val = obj[key];
55
+ if (typeof val === 'number' && Number.isFinite(val))
56
+ return val;
57
+ if (typeof val === 'object' && val !== null) {
58
+ const nested = val;
59
+ for (const nk of Object.keys(nested)) {
60
+ const nv = nested[nk];
61
+ if (typeof nv === 'number' && Number.isFinite(nv))
62
+ return nv;
63
+ }
64
+ }
65
+ }
66
+ return undefined;
67
+ }
68
+ //# sourceMappingURL=base-adapter-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter-helpers.js","sourceRoot":"","sources":["../src/base-adapter-helpers.ts"],"names":[],"mappings":"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"}
@@ -6,18 +6,18 @@
6
6
  *
7
7
  * @see 05-adapter-system.md §4
8
8
  */
9
- import type { AgentName, CostRecord, RetryPolicy, AgentCapabilities, ModelCapabilities, AgentConfig, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, InstalledPlugin, PluginInstallOptions, PluginSearchOptions, PluginListing, SpawnArgs, ParseContext, AgentAdapter, RunOptions, AgentEvent, DetectInstallationResult, InstallResult, AdapterInstallOptions, AdapterUpdateOptions, Spawner, InstallMethod } from '@a5c-ai/agent-mux-core';
9
+ import type { AgentName, CostRecord, RetryPolicy, AgentCapabilities, ModelCapabilities, AgentConfig, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, InstalledPlugin, PluginInstallOptions, PluginSearchOptions, PluginListing, SpawnArgs, ParseContext, SubprocessAdapter, RunOptions, AgentEvent, DetectInstallationResult, InstallResult, AdapterInstallOptions, AdapterUpdateOptions, Spawner, InstallMethod } from '@a5c-ai/agent-mux-core';
10
10
  import { StreamAssembler } from '@a5c-ai/agent-mux-core';
11
+ export { defaultSpawner } from './base-adapter-helpers.js';
11
12
  /**
12
- * Default Spawner that runs the command via `child_process.spawn`, capturing
13
- * stdout/stderr. `shell: false`, `windowsHide: true`.
14
- */
15
- export declare const defaultSpawner: Spawner;
16
- /**
17
- * Abstract base class for agent adapters. Provides shared utilities
18
- * and hook points with sensible defaults.
13
+ * Abstract base class for subprocess-based agent adapters.
14
+ * Provides shared utilities and hook points with sensible defaults.
15
+ *
16
+ * Implements SubprocessAdapter from the new multi-adapter architecture.
17
+ * For HTTP/WebSocket/SDK adapters, create separate base classes.
19
18
  */
20
- export declare abstract class BaseAgentAdapter implements AgentAdapter {
19
+ export declare abstract class BaseAgentAdapter implements SubprocessAdapter {
20
+ readonly adapterType: "subprocess";
21
21
  abstract readonly agent: AgentName;
22
22
  abstract readonly displayName: string;
23
23
  abstract readonly cliCommand: string;
@@ -44,6 +44,11 @@ export declare abstract class BaseAgentAdapter implements AgentAdapter {
44
44
  protected _spawner: Spawner;
45
45
  /** Replaces the internal Spawner (used by tests and CLI DI). */
46
46
  setSpawner(spawner: Spawner): void;
47
+ protected normalizePrompt(prompt: string | string[]): string;
48
+ protected buildPromptTransport(options: RunOptions): {
49
+ prompt: string;
50
+ stdin?: string;
51
+ };
47
52
  /**
48
53
  * Locates the harness binary and queries its `--version`. Default
49
54
  * implementation uses `which`/`where` + `<cli> --version`.
@@ -1 +1 @@
1
- {"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"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"}
@@ -6,36 +6,21 @@
6
6
  *
7
7
  * @see 05-adapter-system.md §4
8
8
  */
9
- import { spawn } from 'node:child_process';
10
9
  import * as os from 'node:os';
11
10
  import { StreamAssembler } from '@a5c-ai/agent-mux-core';
12
11
  import { runInstall, runUpdate } from './adapter-install.js';
12
+ import { assembleCostRecord, defaultSpawner } from './base-adapter-helpers.js';
13
+ export { defaultSpawner } from './base-adapter-helpers.js';
13
14
  /**
14
- * Default Spawner that runs the command via `child_process.spawn`, capturing
15
- * stdout/stderr. `shell: false`, `windowsHide: true`.
16
- */
17
- export const defaultSpawner = (command, args, options) => new Promise((resolve, reject) => {
18
- const child = spawn(command, args, {
19
- stdio: ['ignore', 'pipe', 'pipe'],
20
- shell: false,
21
- windowsHide: true,
22
- env: options?.env ? { ...process.env, ...options.env } : process.env,
23
- cwd: options?.cwd,
24
- });
25
- let stdout = '';
26
- let stderr = '';
27
- child.stdout?.setEncoding('utf8');
28
- child.stderr?.setEncoding('utf8');
29
- child.stdout?.on('data', (c) => { stdout += c; });
30
- child.stderr?.on('data', (c) => { stderr += c; });
31
- child.on('error', (err) => reject(err));
32
- child.on('exit', (code) => resolve({ code: code ?? 1, stdout, stderr }));
33
- });
34
- /**
35
- * Abstract base class for agent adapters. Provides shared utilities
36
- * and hook points with sensible defaults.
15
+ * Abstract base class for subprocess-based agent adapters.
16
+ * Provides shared utilities and hook points with sensible defaults.
17
+ *
18
+ * Implements SubprocessAdapter from the new multi-adapter architecture.
19
+ * For HTTP/WebSocket/SDK adapters, create separate base classes.
37
20
  */
38
21
  export class BaseAgentAdapter {
22
+ // ── Adapter Type ──────────────────────────────────────────────────
23
+ adapterType = 'subprocess';
39
24
  // ── Protected stream assembler ────────────────────────────────────
40
25
  streamAssembler = new StreamAssembler();
41
26
  // ── Injectable spawner for install/update/detect ──────────────────
@@ -45,6 +30,19 @@ export class BaseAgentAdapter {
45
30
  setSpawner(spawner) {
46
31
  this._spawner = spawner;
47
32
  }
33
+ normalizePrompt(prompt) {
34
+ return Array.isArray(prompt) ? prompt.join('\n') : prompt;
35
+ }
36
+ buildPromptTransport(options) {
37
+ const prompt = this.normalizePrompt(options.prompt);
38
+ if (options.nonInteractive === true || !this.capabilities.supportsStdinInjection) {
39
+ return { prompt };
40
+ }
41
+ return {
42
+ prompt,
43
+ stdin: prompt.endsWith('\n') ? prompt : `${prompt}\n`,
44
+ };
45
+ }
48
46
  // ── detectInstallation ────────────────────────────────────────────
49
47
  /**
50
48
  * Locates the harness binary and queries its `--version`. Default
@@ -216,28 +214,7 @@ export class BaseAgentAdapter {
216
214
  * standard CostRecord type.
217
215
  */
218
216
  assembleCostRecord(raw) {
219
- if (raw == null || typeof raw !== 'object')
220
- return null;
221
- const obj = raw;
222
- // Try common field names for total cost
223
- const totalUsd = extractNumber(obj, ['totalUsd', 'total_usd', 'cost', 'total_cost', 'totalCost']) ?? 0;
224
- const inputTokens = extractNumber(obj, ['inputTokens', 'input_tokens', 'prompt_tokens']) ?? 0;
225
- const outputTokens = extractNumber(obj, ['outputTokens', 'output_tokens', 'completion_tokens']) ?? 0;
226
- const thinkingTokens = extractNumber(obj, ['thinkingTokens', 'thinking_tokens', 'reasoning_tokens']);
227
- const cachedTokens = extractNumber(obj, ['cachedTokens', 'cached_tokens', 'cache_read_input_tokens']);
228
- // Must have at least some recognizable data
229
- if (totalUsd === 0 && inputTokens === 0 && outputTokens === 0)
230
- return null;
231
- const record = {
232
- totalUsd,
233
- inputTokens,
234
- outputTokens,
235
- };
236
- if (thinkingTokens != null)
237
- record.thinkingTokens = thinkingTokens;
238
- if (cachedTokens != null)
239
- record.cachedTokens = cachedTokens;
240
- return record;
217
+ return assembleCostRecord(raw);
241
218
  }
242
219
  /**
243
220
  * Detects the installed CLI version. Returns null in the base implementation.
@@ -435,24 +412,4 @@ export class BaseAgentAdapter {
435
412
  await fsp.writeFile(settingsPath, JSON.stringify(doc, null, 2) + '\n', 'utf8');
436
413
  }
437
414
  }
438
- // ---------------------------------------------------------------------------
439
- // Helpers
440
- // ---------------------------------------------------------------------------
441
- function extractNumber(obj, keys) {
442
- for (const key of keys) {
443
- const val = obj[key];
444
- if (typeof val === 'number' && Number.isFinite(val))
445
- return val;
446
- // Check nested objects
447
- if (typeof val === 'object' && val !== null) {
448
- const nested = val;
449
- for (const nk of Object.keys(nested)) {
450
- const nv = nested[nk];
451
- if (typeof nv === 'number' && Number.isFinite(nv))
452
- return nv;
453
- }
454
- }
455
- }
456
- return undefined;
457
- }
458
415
  //# sourceMappingURL=base-adapter.js.map