@a5c-ai/adapters-codecs 5.1.1-staging.52898ebfc24f
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/LICENSE +21 -0
- package/README.md +28 -0
- package/dist/adapter-install.d.ts +20 -0
- package/dist/adapter-install.d.ts.map +1 -0
- package/dist/adapter-install.js +134 -0
- package/dist/adapter-install.js.map +1 -0
- package/dist/adapters-remote-adapter.d.ts +66 -0
- package/dist/adapters-remote-adapter.d.ts.map +1 -0
- package/dist/adapters-remote-adapter.js +292 -0
- package/dist/adapters-remote-adapter.js.map +1 -0
- package/dist/amp-adapter.d.ts +32 -0
- package/dist/amp-adapter.d.ts.map +1 -0
- package/dist/amp-adapter.js +417 -0
- package/dist/amp-adapter.js.map +1 -0
- package/dist/auth-config.d.ts +44 -0
- package/dist/auth-config.d.ts.map +1 -0
- package/dist/auth-config.js +167 -0
- package/dist/auth-config.js.map +1 -0
- package/dist/babysitter-adapter.d.ts +29 -0
- package/dist/babysitter-adapter.d.ts.map +1 -0
- package/dist/babysitter-adapter.js +335 -0
- package/dist/babysitter-adapter.js.map +1 -0
- package/dist/base-adapter-helpers.d.ts +7 -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 +157 -0
- package/dist/base-adapter.d.ts.map +1 -0
- package/dist/base-adapter.js +552 -0
- package/dist/base-adapter.js.map +1 -0
- package/dist/claude-adapter.d.ts +63 -0
- package/dist/claude-adapter.d.ts.map +1 -0
- package/dist/claude-adapter.js +546 -0
- package/dist/claude-adapter.js.map +1 -0
- package/dist/claude-agent-sdk-adapter.d.ts +40 -0
- package/dist/claude-agent-sdk-adapter.d.ts.map +1 -0
- package/dist/claude-agent-sdk-adapter.js +843 -0
- package/dist/claude-agent-sdk-adapter.js.map +1 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts +11 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts.map +1 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.js +153 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.js.map +1 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts +9 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts.map +1 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.js +89 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.js.map +1 -0
- package/dist/claude-code/runtime-hooks/lifecycle.d.ts +2 -0
- package/dist/claude-code/runtime-hooks/lifecycle.d.ts.map +1 -0
- package/dist/claude-code/runtime-hooks/lifecycle.js +24 -0
- package/dist/claude-code/runtime-hooks/lifecycle.js.map +1 -0
- package/dist/claude-remote-control-adapter.d.ts +43 -0
- package/dist/claude-remote-control-adapter.d.ts.map +1 -0
- package/dist/claude-remote-control-adapter.js +509 -0
- package/dist/claude-remote-control-adapter.js.map +1 -0
- package/dist/codex-adapter.d.ts +26 -0
- package/dist/codex-adapter.d.ts.map +1 -0
- package/dist/codex-adapter.js +336 -0
- package/dist/codex-adapter.js.map +1 -0
- 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 +392 -0
- package/dist/codex-sdk-adapter.js.map +1 -0
- package/dist/codex-sdk-mocks.d.ts +50 -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 +34 -0
- package/dist/codex-websocket-adapter.d.ts.map +1 -0
- package/dist/codex-websocket-adapter.js +402 -0
- package/dist/codex-websocket-adapter.js.map +1 -0
- package/dist/codex-websocket-connection.d.ts +77 -0
- package/dist/codex-websocket-connection.d.ts.map +1 -0
- package/dist/codex-websocket-connection.js +733 -0
- package/dist/codex-websocket-connection.js.map +1 -0
- package/dist/copilot-adapter.d.ts +27 -0
- package/dist/copilot-adapter.d.ts.map +1 -0
- package/dist/copilot-adapter.js +224 -0
- package/dist/copilot-adapter.js.map +1 -0
- package/dist/cursor-adapter.d.ts +32 -0
- package/dist/cursor-adapter.d.ts.map +1 -0
- package/dist/cursor-adapter.js +239 -0
- package/dist/cursor-adapter.js.map +1 -0
- package/dist/droid-adapter.d.ts +32 -0
- package/dist/droid-adapter.d.ts.map +1 -0
- package/dist/droid-adapter.js +383 -0
- package/dist/droid-adapter.js.map +1 -0
- package/dist/gemini-adapter.d.ts +38 -0
- package/dist/gemini-adapter.d.ts.map +1 -0
- package/dist/gemini-adapter.js +270 -0
- package/dist/gemini-adapter.js.map +1 -0
- package/dist/hermes-adapter.d.ts +33 -0
- package/dist/hermes-adapter.d.ts.map +1 -0
- package/dist/hermes-adapter.js +269 -0
- package/dist/hermes-adapter.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-plugins.d.ts +14 -0
- package/dist/mcp-plugins.d.ts.map +1 -0
- package/dist/mcp-plugins.js +97 -0
- package/dist/mcp-plugins.js.map +1 -0
- package/dist/omp-adapter.d.ts +26 -0
- package/dist/omp-adapter.d.ts.map +1 -0
- package/dist/omp-adapter.js +203 -0
- package/dist/omp-adapter.js.map +1 -0
- package/dist/openclaw-adapter.d.ts +32 -0
- package/dist/openclaw-adapter.d.ts.map +1 -0
- package/dist/openclaw-adapter.js +220 -0
- package/dist/openclaw-adapter.js.map +1 -0
- package/dist/opencode-adapter.d.ts +32 -0
- package/dist/opencode-adapter.d.ts.map +1 -0
- package/dist/opencode-adapter.js +315 -0
- package/dist/opencode-adapter.js.map +1 -0
- package/dist/opencode-http-adapter.d.ts +43 -0
- package/dist/opencode-http-adapter.d.ts.map +1 -0
- package/dist/opencode-http-adapter.js +378 -0
- package/dist/opencode-http-adapter.js.map +1 -0
- package/dist/opencode-http-connection.d.ts +32 -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 +26 -0
- package/dist/pi-adapter.d.ts.map +1 -0
- package/dist/pi-adapter.js +204 -0
- package/dist/pi-adapter.js.map +1 -0
- 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 +557 -0
- package/dist/pi-sdk-adapter.js.map +1 -0
- package/dist/programmatic-adapter-base.d.ts +87 -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/provider-translation.d.ts +9 -0
- package/dist/provider-translation.d.ts.map +1 -0
- package/dist/provider-translation.js +2 -0
- package/dist/provider-translation.js.map +1 -0
- package/dist/qwen-adapter.d.ts +38 -0
- package/dist/qwen-adapter.d.ts.map +1 -0
- package/dist/qwen-adapter.js +269 -0
- package/dist/qwen-adapter.js.map +1 -0
- package/dist/remote-adapter-base.d.ts +84 -0
- package/dist/remote-adapter-base.d.ts.map +1 -0
- package/dist/remote-adapter-base.js +100 -0
- package/dist/remote-adapter-base.js.map +1 -0
- package/dist/session-fs.d.ts +89 -0
- package/dist/session-fs.d.ts.map +1 -0
- package/dist/session-fs.js +722 -0
- package/dist/session-fs.js.map +1 -0
- package/dist/shared/runtime-hooks-virtual.d.ts +2 -0
- package/dist/shared/runtime-hooks-virtual.d.ts.map +1 -0
- package/dist/shared/runtime-hooks-virtual.js +13 -0
- package/dist/shared/runtime-hooks-virtual.js.map +1 -0
- package/dist/translate-for-harness.d.ts +8 -0
- package/dist/translate-for-harness.d.ts.map +1 -0
- package/dist/translate-for-harness.js +89 -0
- package/dist/translate-for-harness.js.map +1 -0
- package/dist/translations/claude-translation.d.ts +3 -0
- package/dist/translations/claude-translation.d.ts.map +1 -0
- package/dist/translations/claude-translation.js +53 -0
- package/dist/translations/claude-translation.js.map +1 -0
- package/dist/translations/codex-translation.d.ts +3 -0
- package/dist/translations/codex-translation.d.ts.map +1 -0
- package/dist/translations/codex-translation.js +54 -0
- package/dist/translations/codex-translation.js.map +1 -0
- package/dist/translations/gemini-translation.d.ts +3 -0
- package/dist/translations/gemini-translation.d.ts.map +1 -0
- package/dist/translations/gemini-translation.js +45 -0
- package/dist/translations/gemini-translation.js.map +1 -0
- package/dist/translations/generic-openai-translation.d.ts +3 -0
- package/dist/translations/generic-openai-translation.d.ts.map +1 -0
- package/dist/translations/generic-openai-translation.js +47 -0
- package/dist/translations/generic-openai-translation.js.map +1 -0
- package/dist/translations/opencode-translation.d.ts +3 -0
- package/dist/translations/opencode-translation.d.ts.map +1 -0
- package/dist/translations/opencode-translation.js +48 -0
- package/dist/translations/opencode-translation.js.map +1 -0
- package/dist/translations/pi-translation.d.ts +3 -0
- package/dist/translations/pi-translation.d.ts.map +1 -0
- package/dist/translations/pi-translation.js +43 -0
- package/dist/translations/pi-translation.js.map +1 -0
- 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"}
|