@a5c-ai/adapters-codecs 5.1.1-staging.0ad6ac75ae4a

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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -0
  3. package/dist/adapter-install.d.ts +20 -0
  4. package/dist/adapter-install.d.ts.map +1 -0
  5. package/dist/adapter-install.js +134 -0
  6. package/dist/adapter-install.js.map +1 -0
  7. package/dist/adapters-remote-adapter.d.ts +66 -0
  8. package/dist/adapters-remote-adapter.d.ts.map +1 -0
  9. package/dist/adapters-remote-adapter.js +292 -0
  10. package/dist/adapters-remote-adapter.js.map +1 -0
  11. package/dist/amp-adapter.d.ts +32 -0
  12. package/dist/amp-adapter.d.ts.map +1 -0
  13. package/dist/amp-adapter.js +417 -0
  14. package/dist/amp-adapter.js.map +1 -0
  15. package/dist/auth-config.d.ts +44 -0
  16. package/dist/auth-config.d.ts.map +1 -0
  17. package/dist/auth-config.js +167 -0
  18. package/dist/auth-config.js.map +1 -0
  19. package/dist/babysitter-adapter.d.ts +29 -0
  20. package/dist/babysitter-adapter.d.ts.map +1 -0
  21. package/dist/babysitter-adapter.js +335 -0
  22. package/dist/babysitter-adapter.js.map +1 -0
  23. package/dist/base-adapter-helpers.d.ts +7 -0
  24. package/dist/base-adapter-helpers.d.ts.map +1 -0
  25. package/dist/base-adapter-helpers.js +68 -0
  26. package/dist/base-adapter-helpers.js.map +1 -0
  27. package/dist/base-adapter.d.ts +157 -0
  28. package/dist/base-adapter.d.ts.map +1 -0
  29. package/dist/base-adapter.js +552 -0
  30. package/dist/base-adapter.js.map +1 -0
  31. package/dist/claude-adapter.d.ts +63 -0
  32. package/dist/claude-adapter.d.ts.map +1 -0
  33. package/dist/claude-adapter.js +546 -0
  34. package/dist/claude-adapter.js.map +1 -0
  35. package/dist/claude-agent-sdk-adapter.d.ts +40 -0
  36. package/dist/claude-agent-sdk-adapter.d.ts.map +1 -0
  37. package/dist/claude-agent-sdk-adapter.js +843 -0
  38. package/dist/claude-agent-sdk-adapter.js.map +1 -0
  39. package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts +11 -0
  40. package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts.map +1 -0
  41. package/dist/claude-code/runtime-hooks/ephemeral-config.js +153 -0
  42. package/dist/claude-code/runtime-hooks/ephemeral-config.js.map +1 -0
  43. package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts +9 -0
  44. package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts.map +1 -0
  45. package/dist/claude-code/runtime-hooks/hook-socket-server.js +89 -0
  46. package/dist/claude-code/runtime-hooks/hook-socket-server.js.map +1 -0
  47. package/dist/claude-code/runtime-hooks/lifecycle.d.ts +2 -0
  48. package/dist/claude-code/runtime-hooks/lifecycle.d.ts.map +1 -0
  49. package/dist/claude-code/runtime-hooks/lifecycle.js +24 -0
  50. package/dist/claude-code/runtime-hooks/lifecycle.js.map +1 -0
  51. package/dist/claude-remote-control-adapter.d.ts +43 -0
  52. package/dist/claude-remote-control-adapter.d.ts.map +1 -0
  53. package/dist/claude-remote-control-adapter.js +509 -0
  54. package/dist/claude-remote-control-adapter.js.map +1 -0
  55. package/dist/codex-adapter.d.ts +26 -0
  56. package/dist/codex-adapter.d.ts.map +1 -0
  57. package/dist/codex-adapter.js +336 -0
  58. package/dist/codex-adapter.js.map +1 -0
  59. package/dist/codex-sdk-adapter.d.ts +32 -0
  60. package/dist/codex-sdk-adapter.d.ts.map +1 -0
  61. package/dist/codex-sdk-adapter.js +392 -0
  62. package/dist/codex-sdk-adapter.js.map +1 -0
  63. package/dist/codex-sdk-mocks.d.ts +50 -0
  64. package/dist/codex-sdk-mocks.d.ts.map +1 -0
  65. package/dist/codex-sdk-mocks.js +97 -0
  66. package/dist/codex-sdk-mocks.js.map +1 -0
  67. package/dist/codex-websocket-adapter.d.ts +34 -0
  68. package/dist/codex-websocket-adapter.d.ts.map +1 -0
  69. package/dist/codex-websocket-adapter.js +402 -0
  70. package/dist/codex-websocket-adapter.js.map +1 -0
  71. package/dist/codex-websocket-connection.d.ts +77 -0
  72. package/dist/codex-websocket-connection.d.ts.map +1 -0
  73. package/dist/codex-websocket-connection.js +733 -0
  74. package/dist/codex-websocket-connection.js.map +1 -0
  75. package/dist/copilot-adapter.d.ts +27 -0
  76. package/dist/copilot-adapter.d.ts.map +1 -0
  77. package/dist/copilot-adapter.js +224 -0
  78. package/dist/copilot-adapter.js.map +1 -0
  79. package/dist/cursor-adapter.d.ts +32 -0
  80. package/dist/cursor-adapter.d.ts.map +1 -0
  81. package/dist/cursor-adapter.js +239 -0
  82. package/dist/cursor-adapter.js.map +1 -0
  83. package/dist/droid-adapter.d.ts +32 -0
  84. package/dist/droid-adapter.d.ts.map +1 -0
  85. package/dist/droid-adapter.js +383 -0
  86. package/dist/droid-adapter.js.map +1 -0
  87. package/dist/gemini-adapter.d.ts +38 -0
  88. package/dist/gemini-adapter.d.ts.map +1 -0
  89. package/dist/gemini-adapter.js +270 -0
  90. package/dist/gemini-adapter.js.map +1 -0
  91. package/dist/hermes-adapter.d.ts +33 -0
  92. package/dist/hermes-adapter.d.ts.map +1 -0
  93. package/dist/hermes-adapter.js +269 -0
  94. package/dist/hermes-adapter.js.map +1 -0
  95. package/dist/index.d.ts +32 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +33 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/mcp-plugins.d.ts +14 -0
  100. package/dist/mcp-plugins.d.ts.map +1 -0
  101. package/dist/mcp-plugins.js +97 -0
  102. package/dist/mcp-plugins.js.map +1 -0
  103. package/dist/omp-adapter.d.ts +26 -0
  104. package/dist/omp-adapter.d.ts.map +1 -0
  105. package/dist/omp-adapter.js +203 -0
  106. package/dist/omp-adapter.js.map +1 -0
  107. package/dist/openclaw-adapter.d.ts +32 -0
  108. package/dist/openclaw-adapter.d.ts.map +1 -0
  109. package/dist/openclaw-adapter.js +220 -0
  110. package/dist/openclaw-adapter.js.map +1 -0
  111. package/dist/opencode-adapter.d.ts +32 -0
  112. package/dist/opencode-adapter.d.ts.map +1 -0
  113. package/dist/opencode-adapter.js +315 -0
  114. package/dist/opencode-adapter.js.map +1 -0
  115. package/dist/opencode-http-adapter.d.ts +43 -0
  116. package/dist/opencode-http-adapter.d.ts.map +1 -0
  117. package/dist/opencode-http-adapter.js +378 -0
  118. package/dist/opencode-http-adapter.js.map +1 -0
  119. package/dist/opencode-http-connection.d.ts +32 -0
  120. package/dist/opencode-http-connection.d.ts.map +1 -0
  121. package/dist/opencode-http-connection.js +198 -0
  122. package/dist/opencode-http-connection.js.map +1 -0
  123. package/dist/pi-adapter.d.ts +26 -0
  124. package/dist/pi-adapter.d.ts.map +1 -0
  125. package/dist/pi-adapter.js +204 -0
  126. package/dist/pi-adapter.js.map +1 -0
  127. package/dist/pi-sdk-adapter.d.ts +46 -0
  128. package/dist/pi-sdk-adapter.d.ts.map +1 -0
  129. package/dist/pi-sdk-adapter.js +557 -0
  130. package/dist/pi-sdk-adapter.js.map +1 -0
  131. package/dist/programmatic-adapter-base.d.ts +87 -0
  132. package/dist/programmatic-adapter-base.d.ts.map +1 -0
  133. package/dist/programmatic-adapter-base.js +169 -0
  134. package/dist/programmatic-adapter-base.js.map +1 -0
  135. package/dist/provider-translation.d.ts +9 -0
  136. package/dist/provider-translation.d.ts.map +1 -0
  137. package/dist/provider-translation.js +2 -0
  138. package/dist/provider-translation.js.map +1 -0
  139. package/dist/qwen-adapter.d.ts +38 -0
  140. package/dist/qwen-adapter.d.ts.map +1 -0
  141. package/dist/qwen-adapter.js +269 -0
  142. package/dist/qwen-adapter.js.map +1 -0
  143. package/dist/remote-adapter-base.d.ts +84 -0
  144. package/dist/remote-adapter-base.d.ts.map +1 -0
  145. package/dist/remote-adapter-base.js +100 -0
  146. package/dist/remote-adapter-base.js.map +1 -0
  147. package/dist/session-fs.d.ts +89 -0
  148. package/dist/session-fs.d.ts.map +1 -0
  149. package/dist/session-fs.js +722 -0
  150. package/dist/session-fs.js.map +1 -0
  151. package/dist/shared/runtime-hooks-virtual.d.ts +2 -0
  152. package/dist/shared/runtime-hooks-virtual.d.ts.map +1 -0
  153. package/dist/shared/runtime-hooks-virtual.js +13 -0
  154. package/dist/shared/runtime-hooks-virtual.js.map +1 -0
  155. package/dist/translate-for-harness.d.ts +8 -0
  156. package/dist/translate-for-harness.d.ts.map +1 -0
  157. package/dist/translate-for-harness.js +89 -0
  158. package/dist/translate-for-harness.js.map +1 -0
  159. package/dist/translations/claude-translation.d.ts +3 -0
  160. package/dist/translations/claude-translation.d.ts.map +1 -0
  161. package/dist/translations/claude-translation.js +53 -0
  162. package/dist/translations/claude-translation.js.map +1 -0
  163. package/dist/translations/codex-translation.d.ts +3 -0
  164. package/dist/translations/codex-translation.d.ts.map +1 -0
  165. package/dist/translations/codex-translation.js +54 -0
  166. package/dist/translations/codex-translation.js.map +1 -0
  167. package/dist/translations/gemini-translation.d.ts +3 -0
  168. package/dist/translations/gemini-translation.d.ts.map +1 -0
  169. package/dist/translations/gemini-translation.js +45 -0
  170. package/dist/translations/gemini-translation.js.map +1 -0
  171. package/dist/translations/generic-openai-translation.d.ts +3 -0
  172. package/dist/translations/generic-openai-translation.d.ts.map +1 -0
  173. package/dist/translations/generic-openai-translation.js +47 -0
  174. package/dist/translations/generic-openai-translation.js.map +1 -0
  175. package/dist/translations/opencode-translation.d.ts +3 -0
  176. package/dist/translations/opencode-translation.d.ts.map +1 -0
  177. package/dist/translations/opencode-translation.js +48 -0
  178. package/dist/translations/opencode-translation.js.map +1 -0
  179. package/dist/translations/pi-translation.d.ts +3 -0
  180. package/dist/translations/pi-translation.d.ts.map +1 -0
  181. package/dist/translations/pi-translation.js +43 -0
  182. package/dist/translations/pi-translation.js.map +1 -0
  183. package/package.json +68 -0
@@ -0,0 +1,552 @@
1
+ /**
2
+ * BaseAgentAdapter — abstract base class for agent adapters.
3
+ *
4
+ * Provides shared utilities and hook points with sensible defaults.
5
+ * All built-in adapters extend this class.
6
+ *
7
+ * @see 05-adapter-system.md §4
8
+ */
9
+ import * as os from 'node:os';
10
+ import * as fs from 'node:fs';
11
+ import { StreamAssembler } from '@a5c-ai/comm-adapter';
12
+ import { runInstall, runUpdate } from './adapter-install.js';
13
+ import { assembleCostRecord, defaultSpawner } from './base-adapter-helpers.js';
14
+ export { defaultSpawner } from './base-adapter-helpers.js';
15
+ /**
16
+ * Abstract base class for subprocess-based agent adapters.
17
+ * Provides shared utilities and hook points with sensible defaults.
18
+ *
19
+ * Implements SubprocessAdapter from the new multi-adapter architecture.
20
+ * For HTTP/WebSocket/SDK adapters, create separate base classes.
21
+ */
22
+ // ---------------------------------------------------------------------------
23
+ // Global adapter registry — adapters self-register at import time
24
+ // ---------------------------------------------------------------------------
25
+ const ADAPTER_FACTORIES = new Map();
26
+ export function registerAdapterFactory(name, factory) {
27
+ ADAPTER_FACTORIES.set(name, factory);
28
+ }
29
+ export function getAdapterFactory(name) {
30
+ return ADAPTER_FACTORIES.get(name);
31
+ }
32
+ export function listRegisteredAdapters() {
33
+ return Array.from(ADAPTER_FACTORIES.keys());
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ export class BaseAgentAdapter {
37
+ // ── Adapter Type ──────────────────────────────────────────────────
38
+ adapterType = 'subprocess';
39
+ // ── Protected stream assembler ────────────────────────────────────
40
+ streamAssembler = new StreamAssembler();
41
+ // ── Injectable spawner for install/update/detect ──────────────────
42
+ /** Subprocess runner used by install/update/detect. Swap for tests. */
43
+ _spawner = defaultSpawner;
44
+ /** Replaces the internal Spawner (used by tests and CLI DI). */
45
+ setSpawner(spawner) {
46
+ this._spawner = spawner;
47
+ }
48
+ normalizePrompt(prompt) {
49
+ return Array.isArray(prompt) ? prompt.join('\n') : prompt;
50
+ }
51
+ stripAnsi(text) {
52
+ // eslint-disable-next-line no-control-regex
53
+ return text.replace(/\u001b\[[0-9;?]*[ -/]*[@-~]/g, '');
54
+ }
55
+ parsePlaintextEvent(line, context) {
56
+ const cleaned = this.stripAnsi(line).replace(/\r/g, '').trim();
57
+ if (!cleaned)
58
+ return null;
59
+ const base = {
60
+ runId: context.runId,
61
+ agent: this.agent,
62
+ timestamp: Date.now(),
63
+ };
64
+ const nextToolId = () => {
65
+ const key = '__plainTextToolSeq';
66
+ const current = typeof context.adapterState[key] === 'number' ? context.adapterState[key] : 0;
67
+ const next = current + 1;
68
+ context.adapterState[key] = next;
69
+ return `plaintext-tool-${next}`;
70
+ };
71
+ if (/^(thinking|reasoning)([:.\s]|$)/i.test(cleaned)) {
72
+ const delta = cleaned.replace(/^(thinking|reasoning)([:.\s-]*)/i, '').trim() || cleaned;
73
+ return { ...base, type: 'thinking_delta', delta, accumulated: delta };
74
+ }
75
+ if (/^(tool|using tool|running|executing)([:.\s]|$)/i.test(cleaned)) {
76
+ const toolName = cleaned.replace(/^(tool|using tool|running|executing)([:.\s-]*)/i, '').trim() || 'tool';
77
+ const toolCallId = nextToolId();
78
+ context.adapterState['__lastPlainTextToolId'] = toolCallId;
79
+ return {
80
+ ...base,
81
+ type: 'tool_call_start',
82
+ toolCallId,
83
+ toolName,
84
+ inputAccumulated: toolName,
85
+ };
86
+ }
87
+ if (/^(tool result|result|completed)([:.\s]|$)/i.test(cleaned)) {
88
+ const output = cleaned.replace(/^(tool result|result|completed)([:.\s-]*)/i, '').trim() || cleaned;
89
+ const toolCallId = typeof context.adapterState['__lastPlainTextToolId'] === 'string'
90
+ ? context.adapterState['__lastPlainTextToolId']
91
+ : nextToolId();
92
+ return {
93
+ ...base,
94
+ type: 'tool_result',
95
+ toolCallId,
96
+ toolName: 'tool',
97
+ output,
98
+ durationMs: 0,
99
+ };
100
+ }
101
+ if ((context.source === 'stderr' || /^error([:.\s]|$)/i.test(cleaned)) && /^error([:.\s]|$)/i.test(cleaned)) {
102
+ return {
103
+ ...base,
104
+ type: 'error',
105
+ code: 'INTERNAL',
106
+ message: cleaned.replace(/^error([:.\s-]*)/i, '').trim() || cleaned,
107
+ recoverable: false,
108
+ };
109
+ }
110
+ return {
111
+ ...base,
112
+ type: 'text_delta',
113
+ delta: cleaned,
114
+ accumulated: cleaned,
115
+ };
116
+ }
117
+ buildPromptTransport(options) {
118
+ const prompt = this.normalizePrompt(options.prompt);
119
+ if (prompt.trim().length === 0) {
120
+ return { prompt: '' };
121
+ }
122
+ if (options.nonInteractive === true || !this.capabilities.supportsStdinInjection) {
123
+ return { prompt };
124
+ }
125
+ return {
126
+ prompt,
127
+ stdin: prompt.endsWith('\n') ? prompt : `${prompt}\n`,
128
+ };
129
+ }
130
+ // ── detectInstallation ────────────────────────────────────────────
131
+ /**
132
+ * Locates the harness binary and queries its `--version`. Default
133
+ * implementation uses `which`/`where` + `<cli> --version`.
134
+ */
135
+ async detectInstallation() {
136
+ const locator = process.platform === 'win32' ? 'where' : 'which';
137
+ let binPath;
138
+ try {
139
+ const res = await this._spawner(locator, [this.cliCommand]);
140
+ if (res.code === 0) {
141
+ const first = res.stdout.split(/\r?\n/).map((l) => l.trim()).filter(Boolean)[0];
142
+ if (first)
143
+ binPath = first;
144
+ }
145
+ }
146
+ catch {
147
+ // not found
148
+ }
149
+ if (!binPath) {
150
+ return { installed: false };
151
+ }
152
+ binPath = this.resolveWindowsBinaryPath(binPath);
153
+ let version;
154
+ const versionCommands = [
155
+ this.resolveVersionProbeCommand(binPath),
156
+ ...(binPath.toLowerCase().includes(this.cliCommand.toLowerCase())
157
+ ? [{ command: this.cliCommand, args: ['--version'] }]
158
+ : []),
159
+ ];
160
+ for (const versionCommand of versionCommands) {
161
+ try {
162
+ const vres = await this._spawner(versionCommand.command, versionCommand.args);
163
+ if (vres.code !== 0) {
164
+ continue;
165
+ }
166
+ version = this.parseVersionOutput(vres.stdout + '\n' + vres.stderr);
167
+ if (version) {
168
+ break;
169
+ }
170
+ }
171
+ catch {
172
+ // ignore; still installed
173
+ }
174
+ }
175
+ const out = { installed: true, path: binPath };
176
+ if (version)
177
+ out.version = version;
178
+ return out;
179
+ }
180
+ /**
181
+ * Parses a `--version` output line. Default: first semver-like token.
182
+ * Override to accommodate bespoke version formats.
183
+ */
184
+ parseVersionOutput(raw) {
185
+ const match = raw.match(/\d+\.\d+\.\d+(?:[\w.+-]*)?/);
186
+ return match ? match[0] : undefined;
187
+ }
188
+ resolveWindowsBinaryPath(binPath) {
189
+ if (process.platform !== 'win32') {
190
+ return binPath;
191
+ }
192
+ if (/\.(cmd|bat|exe|ps1)$/i.test(binPath)) {
193
+ return binPath;
194
+ }
195
+ for (const extension of ['.cmd', '.bat', '.exe', '.ps1']) {
196
+ const candidate = `${binPath}${extension}`;
197
+ if (fs.existsSync(candidate)) {
198
+ return candidate;
199
+ }
200
+ }
201
+ return binPath;
202
+ }
203
+ resolveVersionProbeCommand(binPath) {
204
+ if (process.platform === 'win32' && /\.(cmd|bat)$/i.test(binPath)) {
205
+ const powershellShim = binPath.replace(/\.(cmd|bat)$/i, '.ps1');
206
+ if (fs.existsSync(powershellShim)) {
207
+ return {
208
+ command: 'powershell.exe',
209
+ args: ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', powershellShim, '--version'],
210
+ };
211
+ }
212
+ return {
213
+ command: 'cmd.exe',
214
+ args: ['/d', '/s', '/c', `""${binPath}" --version"`],
215
+ };
216
+ }
217
+ if (process.platform === 'win32' && /\.ps1$/i.test(binPath)) {
218
+ return {
219
+ command: 'powershell.exe',
220
+ args: ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', binPath, '--version'],
221
+ };
222
+ }
223
+ return {
224
+ command: binPath,
225
+ args: ['--version'],
226
+ };
227
+ }
228
+ // ── install ────────────────────────────────────────────────────────
229
+ /**
230
+ * Picks an install method compatible with the current platform, runs it,
231
+ * then re-detects. Honors `force` and `dryRun`.
232
+ */
233
+ _installContext() {
234
+ return {
235
+ cliCommand: this.cliCommand,
236
+ displayName: this.displayName,
237
+ spawner: this._spawner,
238
+ detectInstallation: () => this.detectInstallation(),
239
+ pickInstallMethod: () => this.pickInstallMethod(),
240
+ applyVersionToCommand: (m, v) => this.applyVersionToCommand(m, v),
241
+ deriveUpdateCommand: (m) => this.deriveUpdateCommand(m),
242
+ };
243
+ }
244
+ async install(opts = {}) {
245
+ return runInstall(this._installContext(), opts);
246
+ }
247
+ // ── update ────────────────────────────────────────────────────────
248
+ /** Runs the update/upgrade variant of the install command. */
249
+ async update(opts = {}) {
250
+ return runUpdate(this._installContext(), opts);
251
+ }
252
+ // ── Helpers ───────────────────────────────────────────────────────
253
+ /**
254
+ * Picks the first InstallMethod compatible with the current platform,
255
+ * preferring non-manual methods.
256
+ */
257
+ pickInstallMethod() {
258
+ const plat = os.platform();
259
+ const methods = this.capabilities.installMethods ?? [];
260
+ const compatible = methods.filter((m) => {
261
+ if (m.platform === 'all')
262
+ return true;
263
+ if (m.platform === plat)
264
+ return true;
265
+ // brew is acceptable on darwin/linux; npm on all
266
+ return false;
267
+ });
268
+ if (compatible.length === 0)
269
+ return undefined;
270
+ const rank = (t) => {
271
+ switch (t) {
272
+ case 'npm': return 0;
273
+ case 'brew': return plat === 'darwin' || plat === 'linux' ? 1 : 50;
274
+ case 'gh-extension': return 2;
275
+ case 'pip': return 3;
276
+ case 'winget': return plat === 'win32' ? 2 : 50;
277
+ case 'scoop': return plat === 'win32' ? 3 : 50;
278
+ case 'nix': return 6;
279
+ case 'curl': return 7;
280
+ case 'manual': return 99;
281
+ default: return 50;
282
+ }
283
+ };
284
+ return [...compatible].sort((a, b) => rank(a.type) - rank(b.type))[0];
285
+ }
286
+ /**
287
+ * Replace `<pkg>` tail with `<pkg>@<version>` for npm-typed methods.
288
+ */
289
+ applyVersionToCommand(method, version) {
290
+ if (!version)
291
+ return method.command;
292
+ if (method.type !== 'npm')
293
+ return method.command;
294
+ const parts = method.command.split(/\s+/).filter(Boolean);
295
+ if (parts.length === 0)
296
+ return method.command;
297
+ const last = parts[parts.length - 1];
298
+ // Only apply version if not already version-pinned.
299
+ if (/@\d/.test(last.replace(/^@[^@/]+\//, '')))
300
+ return method.command;
301
+ parts[parts.length - 1] = `${last}@${version}`;
302
+ return parts.join(' ');
303
+ }
304
+ /**
305
+ * Derives an update command from an install method.
306
+ */
307
+ deriveUpdateCommand(method) {
308
+ const parts = method.command.split(/\s+/).filter(Boolean);
309
+ const pkg = parts[parts.length - 1];
310
+ if (!pkg)
311
+ return null;
312
+ switch (method.type) {
313
+ case 'npm':
314
+ return `npm update -g ${pkg}`;
315
+ case 'brew':
316
+ return `brew upgrade ${pkg}`;
317
+ case 'pip':
318
+ return `pip install --upgrade ${pkg}`;
319
+ case 'winget':
320
+ return `winget upgrade ${pkg}`;
321
+ case 'scoop':
322
+ return `scoop update ${pkg}`;
323
+ case 'curl':
324
+ // Re-run the installer script.
325
+ return method.command;
326
+ case 'nix':
327
+ return `nix-env -u ${pkg}`;
328
+ case 'gh-extension':
329
+ return `gh extension upgrade ${pkg}`;
330
+ case 'manual':
331
+ return null;
332
+ default:
333
+ return null;
334
+ }
335
+ }
336
+ // ── Protected utilities ───────────────────────────────────────────
337
+ /**
338
+ * Attempts to parse a line as JSON. Returns the parsed value on success,
339
+ * or null if the line is not valid JSON. Does not throw.
340
+ */
341
+ parseJsonLine(line) {
342
+ try {
343
+ return JSON.parse(line);
344
+ }
345
+ catch {
346
+ return null;
347
+ }
348
+ }
349
+ /**
350
+ * Normalizes a raw cost/usage object from agent output into the
351
+ * standard CostRecord type.
352
+ */
353
+ assembleCostRecord(raw) {
354
+ return assembleCostRecord(raw);
355
+ }
356
+ /**
357
+ * Detects the installed CLI version. Returns null in the base implementation.
358
+ * Subclasses should override to run the agent's CLI with a version flag.
359
+ */
360
+ async detectVersionFromCli() {
361
+ return null;
362
+ }
363
+ /**
364
+ * Builds the environment variable record for the subprocess from RunOptions.
365
+ */
366
+ buildEnvFromOptions(options) {
367
+ const env = {};
368
+ // Propagate harness-specific env vars that affect config/session location
369
+ // or transport routing. Explicit RunOptions.env overrides.
370
+ const passthrough = [
371
+ 'CODEX_HOME', // codex config/session root override
372
+ 'GH_HOST', // gh copilot — GitHub Enterprise host
373
+ 'GH_TOKEN', // gh copilot auth
374
+ 'GOOGLE_APPLICATION_CREDENTIALS', // gemini service account
375
+ 'HTTPS_PROXY',
376
+ 'HTTP_PROXY',
377
+ 'NO_PROXY',
378
+ ];
379
+ for (const name of passthrough) {
380
+ const v = process.env[name];
381
+ if (v)
382
+ env[name] = v;
383
+ }
384
+ if (options.env) {
385
+ Object.assign(env, options.env);
386
+ }
387
+ return env;
388
+ }
389
+ /**
390
+ * Resolves the session ID to use for this run.
391
+ */
392
+ resolveSessionId(options) {
393
+ if (options.sessionId)
394
+ return options.sessionId;
395
+ if (options.forkSessionId)
396
+ return options.forkSessionId;
397
+ if (options.noSession)
398
+ return undefined;
399
+ return undefined;
400
+ }
401
+ // ── Hook points (overridable, with defaults) ──────────────────────
402
+ /**
403
+ * Called when the agent subprocess fails to spawn.
404
+ */
405
+ onSpawnError(error) {
406
+ return {
407
+ type: 'crash',
408
+ runId: '',
409
+ agent: this.agent,
410
+ timestamp: Date.now(),
411
+ exitCode: -1,
412
+ stderr: error.message,
413
+ };
414
+ }
415
+ /**
416
+ * Called when the inactivity timeout fires.
417
+ */
418
+ onTimeout() {
419
+ return {
420
+ type: 'error',
421
+ runId: '',
422
+ agent: this.agent,
423
+ timestamp: Date.now(),
424
+ code: 'TIMEOUT',
425
+ message: 'Inactivity timeout',
426
+ recoverable: false,
427
+ };
428
+ }
429
+ /**
430
+ * Called when the agent subprocess exits.
431
+ */
432
+ onProcessExit(exitCode, signal) {
433
+ if (exitCode === 0)
434
+ return [];
435
+ if (signal) {
436
+ return [
437
+ {
438
+ type: 'error',
439
+ runId: '',
440
+ agent: this.agent,
441
+ timestamp: Date.now(),
442
+ code: 'AGENT_CRASH',
443
+ message: `Process killed by signal: ${signal}`,
444
+ recoverable: false,
445
+ },
446
+ ];
447
+ }
448
+ return [
449
+ {
450
+ type: 'crash',
451
+ runId: '',
452
+ agent: this.agent,
453
+ timestamp: Date.now(),
454
+ exitCode,
455
+ stderr: '',
456
+ },
457
+ ];
458
+ }
459
+ /**
460
+ * Determines whether a failed run should be retried.
461
+ */
462
+ shouldRetry(event, attempt, policy) {
463
+ const maxAttempts = policy.maxAttempts ?? 3;
464
+ if (attempt >= maxAttempts)
465
+ return false;
466
+ const retryOn = policy.retryOn ?? ['RATE_LIMITED', 'AGENT_CRASH', 'TIMEOUT'];
467
+ // Check if the event has an error code
468
+ if ('code' in event && typeof event.code === 'string') {
469
+ return retryOn.includes(event.code);
470
+ }
471
+ // Check if it's a crash event
472
+ if (event.type === 'crash') {
473
+ return retryOn.includes('AGENT_CRASH');
474
+ }
475
+ return false;
476
+ }
477
+ /**
478
+ * Default hook installation: registers in .adapters/hooks.json only.
479
+ * Override in subclasses to also write native harness config (e.g.
480
+ * ~/.claude/settings.json) so the hook fires without adapters present.
481
+ */
482
+ async installHook(hookType, command, opts = {}) {
483
+ await this.registerHookInConfig(hookType, command, opts);
484
+ await this.writeNativeHook(hookType, command);
485
+ }
486
+ /** Register a hook in the unified .adapters/hooks.json store. */
487
+ async registerHookInConfig(hookType, command, opts = {}) {
488
+ const { HookConfigManager } = await import('@a5c-ai/comm-adapter');
489
+ const mgr = new HookConfigManager();
490
+ const id = opts.id ?? `${this.agent}.${hookType}.${Date.now().toString(36)}`;
491
+ await mgr.add({
492
+ id,
493
+ agent: this.agent,
494
+ hookType,
495
+ handler: 'command',
496
+ target: command,
497
+ enabled: true,
498
+ }, opts.scope ?? 'project');
499
+ }
500
+ /**
501
+ * Write the hook into the harness's native config. Default: append
502
+ * `{ command }` to `hooks[hookType]` in configFilePaths[0] if it is
503
+ * a .json file. Subclasses override to use harness-specific schema.
504
+ * Best-effort: failures are swallowed so SDK registration still succeeds.
505
+ */
506
+ async writeNativeHook(hookType, command) {
507
+ const nativePath = this.configSchema.configFilePaths?.[0];
508
+ if (!nativePath || !nativePath.endsWith('.json'))
509
+ return;
510
+ try {
511
+ await this.appendJsonHook(nativePath, hookType, { command });
512
+ }
513
+ catch {
514
+ // swallow
515
+ }
516
+ }
517
+ async uninstallHook(id, opts = {}) {
518
+ const { HookConfigManager } = await import('@a5c-ai/comm-adapter');
519
+ const mgr = new HookConfigManager();
520
+ return await mgr.remove(id, opts.scope);
521
+ }
522
+ /**
523
+ * Append `{ command }` to `hooks[hookType]` in the given JSON file,
524
+ * preserving any existing hooks and creating the parent directory if
525
+ * needed. Used by adapters that expose a simple JSON-based native
526
+ * hook config (codex, gemini, copilot, cursor, opencode, pi, omp,
527
+ * openclaw, hermes).
528
+ */
529
+ async appendJsonHook(settingsPath, hookType, entry) {
530
+ const fsp = await import('node:fs/promises');
531
+ const pathMod = await import('node:path');
532
+ let doc = {};
533
+ try {
534
+ doc = JSON.parse(await fsp.readFile(settingsPath, 'utf8'));
535
+ }
536
+ catch {
537
+ doc = {};
538
+ }
539
+ const hooks = (doc['hooks'] && typeof doc['hooks'] === 'object'
540
+ ? doc['hooks']
541
+ : {});
542
+ const existing = Array.isArray(hooks[hookType])
543
+ ? hooks[hookType].slice()
544
+ : [];
545
+ existing.push(entry);
546
+ hooks[hookType] = existing;
547
+ doc['hooks'] = hooks;
548
+ await fsp.mkdir(pathMod.dirname(settingsPath), { recursive: true });
549
+ await fsp.writeFile(settingsPath, JSON.stringify(doc, null, 2) + '\n', 'utf8');
550
+ }
551
+ }
552
+ //# sourceMappingURL=base-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * ClaudeAdapter — Claude Code CLI adapter.
3
+ */
4
+ import type { AgentCapabilities, ModelCapabilities, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, SpawnArgs, ParseContext, RunOptions, AgentEvent, InstalledPlugin, PluginInstallOptions, RuntimeHookDispatcher, RuntimeHookSetup } from '@a5c-ai/comm-adapter';
5
+ import { BaseAgentAdapter } from './base-adapter.js';
6
+ export declare class ClaudeAdapter extends BaseAgentAdapter {
7
+ readonly agent: string;
8
+ get displayName(): string;
9
+ readonly cliCommand: string;
10
+ readonly minVersion = "1.0.0";
11
+ constructor(agent?: string, cliCommand?: string);
12
+ get hostEnvSignals(): string[];
13
+ get capabilities(): AgentCapabilities;
14
+ get models(): ModelCapabilities[];
15
+ get defaultModelId(): string;
16
+ get configSchema(): AgentConfigSchema;
17
+ buildSpawnArgs(options: RunOptions): SpawnArgs;
18
+ parseEvent(line: string, context: ParseContext): AgentEvent | AgentEvent[] | null;
19
+ private buildStreamJsonUserMessage;
20
+ protected buildPromptTransport(options: RunOptions): {
21
+ prompt: string;
22
+ stdin?: string;
23
+ };
24
+ private parseToolInput;
25
+ private toolStateByIndex;
26
+ private toolStateById;
27
+ detectAuth(): Promise<AuthState>;
28
+ getAuthGuidance(): AuthSetupGuidance;
29
+ sessionDir(cwd?: string): string;
30
+ parseSessionFile(filePath: string): Promise<Session>;
31
+ listSessionFiles(_cwd?: string): Promise<string[]>;
32
+ readConfig(_cwd?: string): Promise<import('@a5c-ai/comm-adapter').AgentConfig>;
33
+ writeConfig(config: Partial<import('@a5c-ai/comm-adapter').AgentConfig>, _cwd?: string): Promise<void>;
34
+ /**
35
+ * Override: in addition to the base `which claude` + `--version` check,
36
+ * probe `~/.claude` as a secondary signal that the harness has been
37
+ * installed and initialized at least once.
38
+ */
39
+ detectInstallation(): Promise<import('@a5c-ai/comm-adapter').DetectInstallationResult>;
40
+ /**
41
+ * Write a Claude native hook into ~/.claude/settings.json in addition
42
+ * to registering with HookConfigManager. Claude supports a top-level
43
+ * `hooks` object keyed by hook type (PreToolUse/PostToolUse/Stop/...).
44
+ *
45
+ * We append the command under settings.hooks[hookType] as
46
+ * `{ matcher: '*', hooks: [{ type: 'command', command }] }`, preserving
47
+ * any existing entries.
48
+ */
49
+ protected writeNativeHook(hookType: string, command: string): Promise<void>;
50
+ /**
51
+ * Claude plugins are MCP servers stored under `mcpServers` in
52
+ * `~/.claude/settings.json`. Each entry is keyed by server id with a
53
+ * `{ command, args?, env? }` body. We treat the server id as the pluginId
54
+ * and surface an InstalledPlugin for each one.
55
+ */
56
+ private settingsPaths;
57
+ listPlugins(): Promise<InstalledPlugin[]>;
58
+ installPlugin(pluginId: string, options?: PluginInstallOptions): Promise<InstalledPlugin>;
59
+ uninstallPlugin(pluginId: string, options?: {
60
+ global?: boolean;
61
+ }): Promise<void>;
62
+ setupRuntimeHooks(options: RunOptions, dispatcher: RuntimeHookDispatcher): Promise<RuntimeHookSetup | void>;
63
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../src/claude-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,eAAe,EAEf,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAWrD,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAA+D;IACrF,IAAI,WAAW,WAAyC;IACxD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAc;IACzC,QAAQ,CAAC,UAAU,WAAW;gBAElB,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAG/C,IAAI,cAAc,aAA4C;IAE9D,IAAI,YAAY,IAAI,iBAAiB,CAgEpC;IAED,IAAI,MAAM,IAAI,iBAAiB,EAAE,CAMhC;IAED,IAAI,cAAc,WAA0E;IAE5F,IAAI,YAAY,IAAI,iBAAiB,CAWpC;IAED,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS;IAkE9C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI;IA8NjF,OAAO,CAAC,0BAA0B;cAWf,oBAAoB,CAAC,OAAO,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAchG,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,aAAa;IAUf,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,sBAAsB,EAAE,WAAW,CAAC;IAO9E,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,sBAAsB,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5G;;;;OAIG;IACY,kBAAkB,IAAI,OAAO,CAAC,OAAO,sBAAsB,EAAE,wBAAwB,CAAC;IAiBrG;;;;;;;;OAQG;cACsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1F;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAQN,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,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzF,iBAAiB,CACrB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAGpC"}