@agentskit/adapters 0.17.1 → 0.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.cjs +16 -23
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +16 -23
- package/dist/cli/index.js.map +1 -1
- package/package.json +4 -3
package/dist/cli/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core = require('@agentskit/core');
|
|
4
|
-
var child_process = require('child_process');
|
|
5
4
|
var promises = require('fs/promises');
|
|
5
|
+
var crossPlatform = require('@agentskit/cross-platform');
|
|
6
6
|
|
|
7
7
|
// src/cli/index.ts
|
|
8
8
|
function isAbortError(err) {
|
|
@@ -144,12 +144,11 @@ function spawnCliProcess(options, signal) {
|
|
|
144
144
|
validateOptions(options);
|
|
145
145
|
const startedAt = Date.now();
|
|
146
146
|
const redactions = redactionValues(options);
|
|
147
|
-
const child =
|
|
147
|
+
const child = crossPlatform.spawnNodeChild(options.command, options.args ?? [], {
|
|
148
148
|
cwd: options.cwd ?? process.cwd(),
|
|
149
149
|
env: buildEnvironment(options),
|
|
150
|
-
shell: false,
|
|
151
150
|
windowsHide: true,
|
|
152
|
-
stdio:
|
|
151
|
+
stdio: "pipe"
|
|
153
152
|
});
|
|
154
153
|
const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
155
154
|
const killGraceMs = options.killGraceMs ?? DEFAULT_KILL_GRACE_MS;
|
|
@@ -160,29 +159,23 @@ function spawnCliProcess(options, signal) {
|
|
|
160
159
|
let terminated = false;
|
|
161
160
|
let forceTimer;
|
|
162
161
|
let timeoutTimer;
|
|
163
|
-
const
|
|
164
|
-
if (
|
|
165
|
-
if (
|
|
166
|
-
terminated = true;
|
|
167
|
-
try {
|
|
168
|
-
child.kill("SIGTERM");
|
|
169
|
-
} catch {
|
|
162
|
+
const killTree = (signal2) => {
|
|
163
|
+
if (child.exitCode !== null || child.signalCode !== null) return;
|
|
164
|
+
if (child.pid === void 0) {
|
|
170
165
|
try {
|
|
171
|
-
child.kill();
|
|
166
|
+
child.kill(signal2);
|
|
172
167
|
} catch {
|
|
173
168
|
}
|
|
169
|
+
return;
|
|
174
170
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}, killGraceMs);
|
|
171
|
+
void crossPlatform.killProcessTree(child.pid, signal2, (sig) => child.kill(sig));
|
|
172
|
+
};
|
|
173
|
+
const terminate = (reason) => {
|
|
174
|
+
if (reason) termination = reason;
|
|
175
|
+
if (terminated || child.exitCode !== null) return;
|
|
176
|
+
terminated = true;
|
|
177
|
+
killTree("SIGTERM");
|
|
178
|
+
forceTimer = setTimeout(() => killTree("SIGKILL"), killGraceMs);
|
|
186
179
|
};
|
|
187
180
|
child.stderr.on("data", (chunk) => {
|
|
188
181
|
stderrBytes += chunk.byteLength;
|
package/dist/cli/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/stream-errors.ts","../../src/cli/process.ts","../../src/cli/json.ts","../../src/cli/prompt.ts","../../src/cli/claude-code.ts","../../src/cli/manifests.ts","../../src/cli/index.ts"],"names":["AdapterError","ErrorCodes","spawn","open","isRecord"],"mappings":"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","file":"index.cjs","sourcesContent":["import { AdapterError, ErrorCodes } from '@agentskit/core'\nimport type { StreamChunk } from '@agentskit/core'\n\n/** True when the error is a caller-initiated abort. */\nexport function isAbortError(err: unknown): boolean {\n if (err instanceof DOMException && err.name === 'AbortError') return true\n if (err instanceof Error && err.name === 'AbortError') return true\n return false\n}\n\n/**\n * Terminal adapter failure as a stream chunk (ADR 0001 A3/A9).\n * Always attaches `metadata.error` as an Error — prefer AdapterError.\n */\nexport function adapterErrorChunk(\n message: string,\n options?: { cause?: unknown; code?: string },\n): StreamChunk {\n const error = new AdapterError({\n code: options?.code ?? ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause: options?.cause,\n })\n return {\n type: 'error',\n content: message,\n metadata: { error },\n }\n}\n\n/** Validate complete tool-call args JSON before emitting A5 tool_call. */\nexport function parseCompleteToolArgs(\n args: string,\n): { ok: true; args: string } | { ok: false; error: Error } {\n const raw = args.length > 0 ? args : '{}'\n try {\n JSON.parse(raw)\n return { ok: true, args: raw }\n } catch (cause) {\n return {\n ok: false,\n error: new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'Incomplete or malformed tool-call arguments JSON',\n cause,\n }),\n }\n }\n}\n\n/**\n * Race a promise against abort. Rejects promptly with AbortError when the\n * signal fires; cleans up the abort listener either way.\n */\nexport function raceAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) {\n return Promise.reject(new DOMException('Aborted', 'AbortError'))\n }\n return new Promise<T>((resolve, reject) => {\n let settled = false\n const onAbort = (): void => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(new DOMException('Aborted', 'AbortError'))\n }\n signal.addEventListener('abort', onAbort)\n promise.then(\n value => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n resolve(value)\n },\n err => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(err)\n },\n )\n })\n}\n\n/** Abort-aware delay used by retry backoff. */\nexport async function abortableSleep(\n ms: number,\n signal: AbortSignal,\n sleep: (ms: number) => Promise<void>,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n await raceAbort(sleep(ms), signal)\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n}\n\nexport async function cancelBody(body: ReadableStream | null | undefined): Promise<void> {\n if (!body) return\n try {\n await body.cancel()\n } catch {\n // ignore\n }\n}\n","import { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'\nimport { open } from 'node:fs/promises'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { raceAbort } from '../stream-errors'\nimport type { CliDiagnostic, CliProcessOptions, CliTerminationReason } from './types'\n\nconst DEFAULT_TIMEOUT_MS = 120_000\nconst DEFAULT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024\nconst DEFAULT_KILL_GRACE_MS = 250\n\ntype TerminationReason = CliTerminationReason\n\nexport interface CliProcessResult {\n code: number | null\n signal: NodeJS.Signals | null\n stderr: string\n elapsedMs: number\n termination?: TerminationReason\n}\n\nexport interface CliProcessHandle {\n child: ChildProcessWithoutNullStreams\n completion: Promise<CliProcessResult>\n terminate: (reason?: TerminationReason) => void\n}\n\nfunction validateOptions(options: CliProcessOptions): void {\n if (options.mode !== undefined && !['review-safe', 'trusted-local', 'restricted-environment'].includes(options.mode)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI mode must be review-safe, trusted-local, or restricted-environment',\n })\n }\n if (!options.command.trim()) throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command must not be empty',\n })\n if (options.command.includes('\\0') || options.args?.some(arg => arg.includes('\\0'))) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command and arguments must not contain null bytes',\n })\n }\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name) || value?.includes('\\0')) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Invalid CLI environment variable: ${name}`,\n })\n }\n }\n if (options.timeoutMs !== undefined && (!Number.isInteger(options.timeoutMs) || options.timeoutMs < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI timeoutMs must be a positive integer',\n })\n }\n if (options.maxOutputBytes !== undefined && (!Number.isInteger(options.maxOutputBytes) || options.maxOutputBytes < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI maxOutputBytes must be a positive integer',\n })\n }\n if (options.killGraceMs !== undefined && (!Number.isInteger(options.killGraceMs) || options.killGraceMs < 0)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI killGraceMs must be a non-negative integer',\n })\n }\n}\n\nfunction redactionValues(options: CliProcessOptions): string[] {\n const values = new Set<string>()\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (value && value.length >= 4) values.add(value)\n if (options.mode === 'trusted-local' && /(?:key|token|secret|password|credential|auth)/i.test(name)) {\n const inherited = process.env[name]\n if (inherited && inherited.length >= 4) values.add(inherited)\n }\n }\n if (options.mode === 'trusted-local') {\n for (const [name, value] of Object.entries(process.env)) {\n if (value && value.length >= 4 && /(?:key|token|secret|password|credential|auth)/i.test(name)) values.add(value)\n }\n }\n return [...values].sort((left, right) => right.length - left.length)\n}\n\nexport function redactCliText(text: string, values: readonly string[] = []): string {\n let redacted = text\n for (const value of values) redacted = redacted.split(value).join('[REDACTED]')\n return redacted\n .replace(/\\bBearer\\s+[^\\s,;]+/gi, 'Bearer [REDACTED]')\n .replace(/\\b(?:sk|pk|xai|ghp|github_pat|AIza)[A-Za-z0-9_-]{10,}\\b/g, '[REDACTED]')\n}\n\nfunction emitDiagnostic(options: CliProcessOptions, diagnostic: CliDiagnostic): void {\n try {\n options.onDiagnostic?.(diagnostic)\n } catch {\n // Observability must never change process or adapter behavior.\n }\n}\n\nfunction buildEnvironment(options: CliProcessOptions): NodeJS.ProcessEnv {\n const mode = options.mode ?? 'review-safe'\n let inherited: NodeJS.ProcessEnv\n if (mode === 'trusted-local') {\n inherited = { ...process.env }\n } else {\n const entries: Array<[string, string]> = []\n for (const name of ['PATH', 'Path', 'PATHEXT', 'SystemRoot', 'WINDIR', 'TMP', 'TEMP', 'TMPDIR']) {\n const value = process.env[name]\n if (value !== undefined) entries.push([name, value])\n }\n inherited = Object.fromEntries(entries)\n }\n return { ...inherited, ...options.env }\n}\n\nexport function spawnCliProcess(options: CliProcessOptions, signal?: AbortSignal): CliProcessHandle {\n validateOptions(options)\n const startedAt = Date.now()\n const redactions = redactionValues(options)\n const child = spawn(options.command, [...(options.args ?? [])], {\n cwd: options.cwd ?? process.cwd(),\n env: buildEnvironment(options),\n shell: false,\n windowsHide: true,\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES\n const killGraceMs = options.killGraceMs ?? DEFAULT_KILL_GRACE_MS\n const stderrDecoder = new TextDecoder()\n let stderr = ''\n let stderrBytes = 0\n let termination: TerminationReason | undefined\n let terminated = false\n let forceTimer: ReturnType<typeof setTimeout> | undefined\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined\n\n const terminate = (reason?: TerminationReason): void => {\n if (reason) termination = reason\n if (terminated || child.exitCode !== null) return\n terminated = true\n try {\n child.kill('SIGTERM')\n } catch {\n try { child.kill() } catch { /* process may already be gone */ }\n }\n forceTimer = setTimeout(() => {\n if (child.exitCode !== null) return\n try {\n child.kill('SIGKILL')\n } catch {\n try { child.kill() } catch { /* process may already be gone */ }\n }\n }, killGraceMs)\n }\n\n child.stderr.on('data', (chunk: Buffer) => {\n stderrBytes += chunk.byteLength\n if (stderrBytes > maxOutputBytes) {\n terminate('output-limit')\n return\n }\n stderr += stderrDecoder.decode(chunk, { stream: true })\n })\n\n const completion = new Promise<CliProcessResult>((resolve, reject) => {\n let settled = false\n const cleanup = (): void => {\n if (timeoutTimer) clearTimeout(timeoutTimer)\n if (forceTimer) clearTimeout(forceTimer)\n signal?.removeEventListener('abort', onAbort)\n stderr += stderrDecoder.decode()\n }\n const onAbort = (): void => terminate('aborted')\n const onError = (error: Error): void => {\n if (settled) return\n settled = true\n cleanup()\n const message = redactCliText(error.message, redactions)\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs: Date.now() - startedAt,\n termination,\n success: false,\n error: message,\n })\n reject(processError('CLI process failed', message, error))\n }\n child.once('error', onError)\n child.stdin.once('error', onError)\n child.once('close', (code, childSignal) => {\n if (settled) return\n settled = true\n cleanup()\n const elapsedMs = Date.now() - startedAt\n const safeStderr = redactCliText(stderr, redactions)\n const success = code === 0 && termination === undefined\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs,\n exitCode: code,\n signal: childSignal,\n termination,\n success,\n error: success ? undefined : safeStderr.trim() || undefined,\n })\n resolve({ code, signal: childSignal, stderr: safeStderr, elapsedMs, termination })\n })\n if (signal?.aborted) onAbort()\n else signal?.addEventListener('abort', onAbort, { once: true })\n timeoutTimer = setTimeout(() => terminate('timeout'), options.timeoutMs ?? DEFAULT_TIMEOUT_MS)\n })\n\n return { child, completion, terminate }\n}\n\nexport function writeCliInput(handle: CliProcessHandle, input?: string | Uint8Array): void {\n if (input === undefined) {\n handle.child.stdin.end()\n return\n }\n handle.child.stdin.end(typeof input === 'string' ? input : Buffer.from(input))\n}\n\nexport async function readCliOutputFile(\n file: string,\n signal: AbortSignal,\n maxOutputBytes: number,\n): Promise<string> {\n let handle: Awaited<ReturnType<typeof open>> | undefined\n try {\n handle = await open(file, 'r')\n const metadata = await handle.stat()\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (!metadata.isFile()) throw processError('CLI output path is not a file', '')\n if (metadata.size > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n const timeout = AbortSignal.timeout(5_000)\n const readSignal = AbortSignal.any([signal, timeout])\n const output = await handle.readFile({ signal: readSignal })\n if (output.byteLength > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n return output.toString('utf8')\n } catch (error) {\n if (error instanceof AdapterError) throw error\n throw processError('CLI output file could not be read', '', error)\n } finally {\n await handle?.close()\n }\n}\n\nfunction processError(message: string, stderr: string, cause?: unknown): AdapterError {\n const suffix = stderr.trim() ? `: ${stderr.trim().slice(0, 1000)}` : ''\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${message}${suffix}`,\n cause,\n })\n}\n\nexport async function* readCliStdout(\n handle: CliProcessHandle,\n signal: AbortSignal,\n maxOutputBytes = DEFAULT_MAX_OUTPUT_BYTES,\n): AsyncIterableIterator<Uint8Array> {\n let outputBytes = 0\n try {\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n outputBytes += chunk.byteLength\n if (outputBytes > maxOutputBytes) {\n handle.terminate('output-limit')\n throw processError('CLI output exceeded the configured limit', '')\n }\n yield new Uint8Array(chunk)\n }\n const result = await handle.completion\n if (result.termination === 'aborted' || signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (result.termination === 'timeout') throw processError('CLI process timed out', result.stderr)\n if (result.termination === 'output-limit') throw processError('CLI output exceeded the configured limit', result.stderr)\n if (result.code !== 0) throw processError(`CLI process exited with code ${String(result.code)}`, result.stderr)\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport async function diagnoseCliProvider(\n options: CliProcessOptions & { diagnosticArgs?: readonly string[] },\n): Promise<CliDiagnostic> {\n const mode = options.mode ?? 'review-safe'\n const handle = spawnCliProcess({ ...options, protocol: options.protocol ?? 'exec-text', args: options.diagnosticArgs ?? ['--version'], timeoutMs: options.timeoutMs ?? 5_000, maxOutputBytes: options.maxOutputBytes ?? 64 * 1024 })\n try {\n const decoder = new TextDecoder()\n let output = ''\n writeCliInput(handle)\n for await (const chunk of readCliStdout(handle, new AbortController().signal, options.maxOutputBytes ?? 64 * 1024)) {\n output += decoder.decode(chunk, { stream: true })\n }\n output += decoder.decode()\n const result = await handle.completion\n if (result.code !== 0 || result.termination) return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n elapsedMs: result.elapsedMs,\n exitCode: result.code,\n signal: result.signal,\n termination: result.termination,\n error: result.stderr.trim() || `CLI exited with code ${String(result.code)}`,\n }\n return { available: true, providerId: options.providerId, command: options.command, mode, protocol: options.protocol ?? 'exec-text', elapsedMs: result.elapsedMs, exitCode: result.code, signal: result.signal, version: output.trim() || undefined }\n } catch (error) {\n return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n error: error instanceof Error ? error.message : String(error),\n }\n } finally {\n handle.terminate()\n }\n}\n\nexport async function abortableWrite(\n handle: CliProcessHandle,\n input: string,\n signal: AbortSignal,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (handle.child.stdin.write(input)) return\n let onDrain: (() => void) | undefined\n let onError: ((error: Error) => void) | undefined\n const waitForDrain = new Promise<void>((resolve, reject) => {\n onDrain = (): void => {\n handle.child.stdin.removeListener('error', onError!)\n resolve()\n }\n onError = (error: Error): void => {\n handle.child.stdin.removeListener('drain', onDrain!)\n reject(error)\n }\n handle.child.stdin.once('drain', onDrain)\n handle.child.stdin.once('error', onError)\n })\n try {\n await raceAbort(waitForDrain, signal)\n } finally {\n if (onDrain) handle.child.stdin.removeListener('drain', onDrain)\n if (onError) handle.child.stdin.removeListener('error', onError)\n }\n}\n\nexport { DEFAULT_MAX_OUTPUT_BYTES }\n","import { AdapterError, ErrorCodes, type StreamChunk } from '@agentskit/core'\n\nexport const cliError = (message: string, cause?: unknown): AdapterError => new AdapterError({ code: ErrorCodes.AK_ADAPTER_STREAM_FAILED, message, cause })\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function parseCliJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value)) throw cliError('CLI JSON response must be an object')\n const chunks: StreamChunk[] = []\n if (typeof value.text === 'string') chunks.push({ type: 'text', content: value.text })\n if (typeof value.reasoning === 'string') chunks.push({ type: 'reasoning', content: value.reasoning })\n if (Array.isArray(value.toolCalls)) {\n for (const item of value.toolCalls) {\n if (!isRecord(item) || typeof item.id !== 'string' || typeof item.name !== 'string' || typeof item.args !== 'string') {\n throw cliError('CLI JSON toolCalls must contain string id, name, and args fields')\n }\n JSON.parse(item.args)\n chunks.push({ type: 'tool_call', toolCall: { id: item.id, name: item.name, args: item.args } })\n }\n }\n if (value.usage !== undefined) {\n if (!isRecord(value.usage)) {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n const promptTokens = value.usage.promptTokens\n const completionTokens = value.usage.completionTokens\n const totalTokens = value.usage.totalTokens\n if (typeof promptTokens !== 'number' || typeof completionTokens !== 'number' || typeof totalTokens !== 'number') {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens } })\n }\n if (value.metadata !== undefined) {\n if (!isRecord(value.metadata)) throw cliError('CLI JSON metadata must be an object')\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n chunks[chunks.length - 1] = { ...chunks[chunks.length - 1], metadata: value.metadata }\n }\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n return chunks\n}\n\n","import type { AdapterRequest, ToolDefinition } from '@agentskit/core'\n\n/**\n * Serializes an `AdapterRequest` as clearly labelled prompt blocks for\n * agentic CLIs (Claude Code, Codex, ...) that read a natural-language prompt\n * from stdin.\n *\n * The generic `createCliAdapter` default writes the raw `AdapterRequest` JSON\n * to stdin, which is the right contract for a purpose-built CLI but is\n * hostile to agentic CLIs: Claude Code, for example, treats a raw JSON blob\n * containing `systemPrompt` as a prompt-injection attempt and refuses it.\n * First-party manifests for those CLIs use this serializer instead; the\n * Claude Code manifests go further and pass system instructions through\n * `--append-system-prompt` (`claudeCodeRequestArgs`) with `serializeCliMessages`\n * on stdin, because Claude Code also flags labelled `[system]`/`[tools]`\n * blocks inside the user prompt.\n *\n * Output shape:\n *\n * ```text\n * [system]\n * ...system prompt...\n *\n * [tools]\n * ...JSON list of tool definitions + response contract...\n *\n * [user]\n * ...\n *\n * [assistant]\n * ...\n * ```\n */\nexport function serializeCliPrompt(request: AdapterRequest, options: SerializeCliPromptOptions = {}): string {\n const blocks: string[] = []\n const system = request.context?.systemPrompt\n if (options.system !== false && system) blocks.push(`[system]\\n${system}`)\n const tools = request.context?.tools\n if (options.tools !== false && tools && tools.length > 0) blocks.push(`[tools]\\n${describeTools(tools)}`)\n const messages = request.messages.filter(message => message.role !== 'system' || options.system !== false)\n if (blocks.length === 0 && messages.length === 1 && messages[0]!.role === 'user') return `${messages[0]!.content}\\n`\n for (const message of messages) blocks.push(`[${message.role}]\\n${message.content}`)\n return `${blocks.join('\\n\\n')}\\n`\n}\n\nexport interface SerializeCliPromptOptions {\n /** Include the `[system]` block and `system` messages. Default `true`. */\n system?: boolean\n /** Include the `[tools]` block. Default `true`. */\n tools?: boolean\n}\n\n/**\n * Conversation-only serializer for CLIs that take the system prompt through\n * argv (see `buildCliSystemPrompt`). A single user message is written bare;\n * multi-turn conversations use `[user]`/`[assistant]`/`[tool]` blocks.\n */\nexport function serializeCliMessages(request: AdapterRequest): string {\n return serializeCliPrompt(request, { system: false, tools: false })\n}\n\n/**\n * System instructions for a request: the system prompt plus, when tools are\n * present, the tool list and the JSON tool-call contract. Returns `undefined`\n * when the request carries neither. Intended for CLIs with a system-prompt\n * flag; Claude Code treats the same text inside the user prompt as an\n * injection attempt.\n */\nexport function buildCliSystemPrompt(request: AdapterRequest): string | undefined {\n const parts: string[] = []\n if (request.context?.systemPrompt) parts.push(request.context.systemPrompt)\n const tools = request.context?.tools\n if (tools && tools.length > 0) parts.push(describeTools(tools))\n return parts.length > 0 ? parts.join('\\n\\n') : undefined\n}\n\n/** Extra `claude -p` argv: `--append-system-prompt` when the request has system instructions or tools. */\nexport function claudeCodeRequestArgs(request: AdapterRequest): readonly string[] {\n const system = buildCliSystemPrompt(request)\n return system ? ['--append-system-prompt', system] : []\n}\n\nconst TOOL_CONTRACT = [\n 'The application running you exposes the tools listed below; it executes them, not you.',\n 'To call one or more of them, reply with only a single JSON object',\n '{\"text\"?: string, \"toolCalls\": [{\"id\": string, \"name\": string, \"args\": string}]} where `args` is a JSON-encoded',\n 'string of the tool arguments and `id` is any unique string. When no tool call is needed, reply with plain text.',\n].join(' ')\n\nfunction describeTools(tools: readonly ToolDefinition[]): string {\n const definitions = tools.map(tool => ({ name: tool.name, description: tool.description, schema: tool.schema }))\n return `${TOOL_CONTRACT}\\n${JSON.stringify(definitions, null, 2)}`\n}\n","import type { StreamChunk } from '@agentskit/core'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { parseCliJsonResponse } from './json'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction claudeCodeError(message: string, cause?: unknown): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause,\n hint: 'Run `claude -p --output-format json \"ping\"` manually to inspect the envelope emitted by the installed Claude Code version.',\n })\n}\n\nfunction number(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0\n}\n\nconst RESPONSE_KEYS = ['text', 'reasoning', 'toolCalls'] as const\n\nconst FENCE = '```'\n\n/** Strips a surrounding Markdown code fence (optionally tagged `json`) without regular expressions. */\nfunction unfence(text: string): string {\n if (!text.startsWith(FENCE) || !text.endsWith(FENCE) || text.length < FENCE.length * 2) return text\n let inner = text.slice(FENCE.length, text.length - FENCE.length)\n if (inner.startsWith('json')) inner = inner.slice('json'.length)\n return inner.trim()\n}\n\n/**\n * Returns the AgentsKit CLI JSON response object embedded in a Claude Code\n * `result` string, or `undefined` when the result is plain prose.\n */\nfunction embeddedResponse(result: string): Record<string, unknown> | undefined {\n const candidate = unfence(result.trim())\n if (!candidate.startsWith('{') || !candidate.endsWith('}')) return undefined\n let value: unknown\n try {\n value = JSON.parse(candidate)\n } catch {\n return undefined\n }\n if (!isRecord(value) || !RESPONSE_KEYS.some(key => key in value)) return undefined\n return value\n}\n\n/**\n * Maps one `claude -p --output-format json` envelope to normalized stream\n * chunks. Used by the `claude-code-json` manifest with `createJsonCliAdapter`.\n *\n * - `result` becomes a `text` chunk. When the result is itself a JSON object\n * following the `CliJsonResponse` shape (`text`, `reasoning`, `toolCalls`),\n * for instance because the prompt carried a `[tools]` block, it is parsed\n * with `parseCliJsonResponse` so tool calls surface as `tool_call` chunks.\n * - `structured_output` (from `--json-schema`) is preferred over `result`\n * when it follows the same shape; otherwise it is emitted as JSON text.\n * - `usage.input_tokens` (+ cache tokens) and `usage.output_tokens` become a\n * `usage` chunk; `session_id`, `total_cost_usd`, `duration_ms`, and\n * `num_turns` are attached as metadata on the last chunk.\n * - `is_error: true` or a non-`success` subtype fails closed.\n */\nexport function parseClaudeCodeJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value) || value.type !== 'result') throw claudeCodeError('Claude Code JSON output must be a `result` envelope')\n const result = typeof value.result === 'string' ? value.result : ''\n if (value.is_error === true || (typeof value.subtype === 'string' && value.subtype !== 'success')) {\n throw claudeCodeError(`Claude Code returned ${String(value.subtype ?? 'error')}${result ? `: ${result}` : ''}`)\n }\n const chunks: StreamChunk[] = []\n const structured = isRecord(value.structured_output) ? value.structured_output : undefined\n if (structured && RESPONSE_KEYS.some(key => key in structured)) {\n chunks.push(...parseCliJsonResponse(structured))\n } else if (structured) {\n chunks.push({ type: 'text', content: JSON.stringify(structured) })\n } else {\n const embedded = embeddedResponse(result)\n if (embedded) chunks.push(...parseCliJsonResponse(embedded))\n else if (result) chunks.push({ type: 'text', content: result })\n }\n if (isRecord(value.usage)) {\n const promptTokens = number(value.usage.input_tokens) + number(value.usage.cache_creation_input_tokens) + number(value.usage.cache_read_input_tokens)\n const completionTokens = number(value.usage.output_tokens)\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens: promptTokens + completionTokens } })\n }\n if (chunks.length === 0) throw claudeCodeError('Claude Code JSON output contains no semantic output')\n const metadata: Record<string, unknown> = {}\n for (const key of ['session_id', 'total_cost_usd', 'duration_ms', 'num_turns', 'subtype'] as const) {\n if (value[key] !== undefined) metadata[key] = value[key]\n }\n const last = chunks[chunks.length - 1]!\n chunks[chunks.length - 1] = { ...last, metadata: { ...last.metadata, ...metadata } }\n return chunks\n}\n\n/**\n * Decodes Claude Code stdout before `parseClaudeCodeJsonResponse`. Claude\n * Code prints a single JSON object, but a leading warning line or trailing\n * whitespace is tolerated by taking the last complete JSON object.\n */\nexport function parseClaudeCodeJsonOutput(stdout: string): unknown {\n const trimmed = stdout.trim()\n try {\n return JSON.parse(trimmed)\n } catch (error) {\n const start = trimmed.lastIndexOf('\\n{')\n if (start < 0) throw claudeCodeError(`Claude Code stdout is not a JSON envelope: ${error instanceof Error ? error.message : String(error)}`, error)\n return JSON.parse(trimmed.slice(start + 1))\n }\n}\n","import { AdapterError, ErrorCodes, type AdapterCapabilities, type AdapterRequest } from '@agentskit/core'\nimport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nimport { diagnoseCliProvider } from './process'\nimport { claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nimport type {\n CliAdapterOptions,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliProcessOptions,\n CliProtocol,\n CliSecurityMode,\n} from './types'\n\n/**\n * A CLI provider manifest for protocol `P`. `capabilities` is restricted to\n * `CliCapabilitiesFor<P>`, so an `exec-text` manifest cannot declare\n * `structuredOutput` and a consumer cannot request `tools` from it: both are\n * compile-time errors, mirroring the runtime `validateCliProviderManifest`.\n */\nexport interface CliProviderManifestFor<P extends CliProtocol = CliProtocol> {\n id: string\n name: string\n command: string\n args: readonly string[]\n diagnosticArgs: readonly string[]\n protocol: P\n protocolVersion?: 1\n capabilities: CliCapabilitiesFor<P>\n supportedModes: readonly CliSecurityMode[]\n credentialEnv?: readonly string[]\n docsUrl?: string\n versionPattern?: string\n /**\n * Serializes the request written to the CLI's stdin. Agentic CLIs that read\n * a natural-language prompt use `serializeCliPrompt`; omit it to write the\n * raw `AdapterRequest` JSON.\n */\n serializeRequest?: CliAdapterOptions['serializeRequest']\n /**\n * Extra per-request argv appended after `args` and `CliManifestOptions.args`,\n * e.g. `--append-system-prompt` for Claude Code. Still spawned without a shell.\n */\n requestArgs?: (request: AdapterRequest) => readonly string[]\n /** `exec-json` only: decodes raw stdout before `parse`. */\n parseOutput?: CliJsonAdapterOptions['parseOutput']\n /** `exec-json` only: maps the decoded JSON value to stream chunks. */\n parse?: CliJsonAdapterOptions['parse']\n}\n\n/** Discriminated by `protocol`; see `CliProviderManifestFor`. */\nexport type CliProviderManifest =\n | CliProviderManifestFor<'exec-text'>\n | CliProviderManifestFor<'exec-json'>\n | CliProviderManifestFor<'acp'>\n\n/** Protocol of each built-in manifest id, used to type `getCliProviderManifest`. */\nexport interface BuiltInCliManifestProtocols {\n codex: 'exec-text'\n 'claude-code': 'exec-text'\n 'claude-code-json': 'exec-json'\n grok: 'acp'\n opencode: 'acp'\n}\nexport type BuiltInCliManifestId = keyof BuiltInCliManifestProtocols\n\nexport interface CliManifestOptions<P extends CliProtocol = CliProtocol> {\n args?: readonly string[]\n mode?: CliSecurityMode\n cwd?: string\n env?: Readonly<Record<string, string | undefined>>\n timeoutMs?: number\n maxOutputBytes?: number\n killGraceMs?: number\n onDiagnostic?: CliProcessOptions['onDiagnostic']\n /** Only capabilities the manifest's protocol can deliver are accepted. */\n requiredCapabilities?: CliCapabilitiesFor<P>\n}\n\nconst MODES: readonly CliSecurityMode[] = ['review-safe', 'trusted-local', 'restricted-environment']\nconst CAPABILITIES = new Set<keyof CliCapabilityRequirements>([\n 'streaming', 'structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal', 'nativeAuth',\n])\n\nconst manifests: readonly CliProviderManifest[] = [\n {\n id: 'codex',\n name: 'OpenAI Codex CLI',\n command: 'codex',\n args: ['exec'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['OPENAI_API_KEY', 'CODEX_API_KEY'],\n docsUrl: 'https://github.com/openai/codex',\n serializeRequest: serializeCliPrompt,\n },\n {\n // Plain-text transport: streams Claude Code's final answer as text.\n // No structured output, reasoning, or tool calls; use `claude-code-json`\n // for those.\n id: 'claude-code',\n name: 'Claude Code',\n command: 'claude',\n args: ['-p'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n },\n {\n // Structured transport: one `claude -p --output-format json` envelope per\n // request, parsed into text, tool_call, and usage chunks. Not streaming.\n id: 'claude-code-json',\n name: 'Claude Code (JSON output)',\n command: 'claude',\n args: ['-p', '--output-format', 'json'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-json',\n capabilities: { structuredOutput: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n parseOutput: parseClaudeCodeJsonOutput,\n parse: parseClaudeCodeJsonResponse,\n },\n {\n id: 'grok',\n name: 'Grok CLI',\n command: 'grok',\n args: ['agent', 'stdio'],\n diagnosticArgs: ['version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['XAI_API_KEY'],\n docsUrl: 'https://docs.x.ai/build/cli/headless-scripting',\n },\n {\n id: 'opencode',\n name: 'OpenCode',\n command: 'opencode',\n args: ['acp'],\n diagnosticArgs: ['--version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true },\n supportedModes: MODES,\n docsUrl: 'https://opencode.ai/docs/cli/',\n },\n]\n\nfunction manifestError(message: string): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n hint: 'Declare an explicit CLI manifest with a supported protocol, mode, and capability set.',\n })\n}\n\nfunction nonEmpty(value: string, label: string): void {\n if (!value.trim() || value.includes('\\0')) throw manifestError(`CLI manifest ${label} must be a non-empty string without null bytes`)\n}\n\nfunction validateArgs(values: readonly string[], label: string): void {\n for (const value of values) {\n if (value.includes('\\0')) throw manifestError(`CLI manifest ${label} contains a null byte`)\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction validateCapabilities(manifest: CliProviderManifest): void {\n const declared: CliCapabilityRequirements = manifest.capabilities\n for (const capability of Object.keys(declared) as Array<keyof CliCapabilityRequirements>) {\n if (!CAPABILITIES.has(capability)) throw manifestError(`CLI manifest declares unknown capability: ${capability}`)\n if (declared[capability] !== true) throw manifestError(`CLI manifest capability ${capability} must be true or omitted`)\n }\n const unsupportedByProtocol: Record<CliProtocol, readonly (keyof CliCapabilityRequirements)[]> = {\n 'exec-text': ['structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal'],\n 'exec-json': ['streaming', 'tools', 'mcp', 'plugins', 'terminal'],\n acp: ['tools', 'mcp', 'plugins', 'terminal'],\n }\n for (const capability of unsupportedByProtocol[manifest.protocol]) {\n if (declared[capability] === true) throw manifestError(`CLI manifest ${manifest.id} declares unsupported ${capability} for ${manifest.protocol}`)\n }\n}\n\nexport function validateCliProviderManifest(manifest: unknown): asserts manifest is CliProviderManifest {\n if (!isRecord(manifest)) throw manifestError('CLI manifest must be an object')\n if (typeof manifest.id !== 'string' || typeof manifest.name !== 'string' || typeof manifest.command !== 'string') {\n throw manifestError('CLI manifest id, name, and command must be strings')\n }\n if (!Array.isArray(manifest.args) || !manifest.args.every(value => typeof value === 'string') || !Array.isArray(manifest.diagnosticArgs) || !manifest.diagnosticArgs.every(value => typeof value === 'string')) {\n throw manifestError('CLI manifest args and diagnosticArgs must be string arrays')\n }\n if (manifest.protocol !== 'exec-text' && manifest.protocol !== 'exec-json' && manifest.protocol !== 'acp') {\n throw manifestError('CLI manifest protocol is unsupported')\n }\n if (!isRecord(manifest.capabilities) || !Array.isArray(manifest.supportedModes)) throw manifestError('CLI manifest capabilities and supportedModes are required')\n if (!manifest.supportedModes.every(value => typeof value === 'string')) throw manifestError('CLI manifest supportedModes must be a string array')\n const candidate = manifest as unknown as CliProviderManifest\n nonEmpty(candidate.id, 'id')\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(candidate.id)) throw manifestError(`CLI manifest id is invalid: ${candidate.id}`)\n nonEmpty(candidate.name, 'name')\n nonEmpty(candidate.command, 'command')\n validateArgs(candidate.args, 'args')\n validateArgs(candidate.diagnosticArgs, 'diagnosticArgs')\n if (candidate.protocolVersion !== undefined && candidate.protocolVersion !== 1) throw manifestError(`CLI manifest ${candidate.id} uses an unsupported protocol version`)\n if (candidate.supportedModes.length === 0 || !candidate.supportedModes.includes('review-safe')) throw manifestError(`CLI manifest ${candidate.id} must support review-safe mode`)\n for (const mode of candidate.supportedModes) {\n if (!MODES.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} declares an unknown mode: ${mode}`)\n }\n if (candidate.credentialEnv !== undefined && (!Array.isArray(candidate.credentialEnv) || !candidate.credentialEnv.every(value => typeof value === 'string'))) throw manifestError(`CLI manifest ${candidate.id} credentialEnv must be a string array`)\n for (const name of candidate.credentialEnv ?? []) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) throw manifestError(`CLI manifest ${candidate.id} declares an invalid credential environment variable`)\n }\n if (candidate.versionPattern !== undefined) {\n if (typeof candidate.versionPattern !== 'string') throw manifestError(`CLI manifest ${candidate.id} versionPattern must be a string`)\n try { new RegExp(candidate.versionPattern) } catch (error) { throw manifestError(`CLI manifest ${candidate.id} has an invalid version pattern: ${String(error)}`) }\n }\n if (candidate.docsUrl !== undefined && typeof candidate.docsUrl !== 'string') throw manifestError(`CLI manifest ${candidate.id} docsUrl must be a string`)\n for (const key of ['serializeRequest', 'requestArgs', 'parseOutput', 'parse'] as const) {\n if (candidate[key] !== undefined && typeof candidate[key] !== 'function') throw manifestError(`CLI manifest ${candidate.id} ${key} must be a function`)\n if ((key === 'parseOutput' || key === 'parse') && candidate[key] !== undefined && candidate.protocol !== 'exec-json') {\n throw manifestError(`CLI manifest ${candidate.id} declares ${key}, which only applies to the exec-json protocol`)\n }\n }\n validateCapabilities(candidate)\n}\n\nexport function listCliProviderManifests(): CliProviderManifest[] {\n return manifests.map((manifest): CliProviderManifest => ({\n ...manifest,\n args: [...manifest.args],\n diagnosticArgs: [...manifest.diagnosticArgs],\n capabilities: { ...manifest.capabilities },\n supportedModes: [...manifest.supportedModes],\n credentialEnv: manifest.credentialEnv ? [...manifest.credentialEnv] : undefined,\n }))\n}\n\n/** Built-in ids resolve to their protocol-specific manifest type; unknown ids to the union. */\nexport function getCliProviderManifest<Id extends string>(\n id: Id,\n): (Id extends BuiltInCliManifestId ? CliProviderManifestFor<BuiltInCliManifestProtocols[Id]> : CliProviderManifest) | undefined {\n return listCliProviderManifests().find(manifest => manifest.id === id) as ReturnType<typeof getCliProviderManifest<Id>>\n}\n\nexport function resolveCliManifest<M extends CliProviderManifest>(manifest: M, options: CliManifestOptions<M['protocol']> = {}): CliJsonAdapterOptions {\n validateCliProviderManifest(manifest)\n const mode = options.mode ?? 'review-safe'\n if (!manifest.supportedModes.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} does not support mode: ${mode}`)\n const args = [...manifest.args, ...(options.args ?? [])]\n const requestArgs = manifest.requestArgs\n return {\n command: manifest.command,\n args,\n buildArgs: requestArgs ? (request: AdapterRequest) => [...args, ...requestArgs(request)] : undefined,\n mode,\n cwd: options.cwd,\n env: options.env,\n timeoutMs: options.timeoutMs,\n maxOutputBytes: options.maxOutputBytes,\n killGraceMs: options.killGraceMs,\n providerId: manifest.id,\n protocol: manifest.protocol,\n onDiagnostic: options.onDiagnostic,\n requiredCapabilities: options.requiredCapabilities,\n serializeRequest: manifest.serializeRequest,\n parseOutput: manifest.parseOutput,\n parse: manifest.parse,\n }\n}\n\nfunction adapterCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n const { streaming, structuredOutput, reasoning, tools }: CliCapabilityRequirements = manifest.capabilities\n return { streaming, structuredOutput, reasoning, tools, extensions: { cli: { provider: manifest.id, protocol: manifest.protocol } } }\n}\n\nexport async function diagnoseCliProviderManifest<M extends CliProviderManifest>(\n manifest: M,\n options: Omit<CliManifestOptions<M['protocol']>, 'args'> = {},\n): Promise<CliDiagnostic> {\n validateCliProviderManifest(manifest)\n const diagnostic = await diagnoseCliProvider({\n ...resolveCliManifest(manifest, options),\n diagnosticArgs: manifest.diagnosticArgs,\n })\n if (diagnostic.available && manifest.versionPattern && !new RegExp(manifest.versionPattern).test(diagnostic.version ?? '')) {\n return { ...diagnostic, available: false, error: `CLI version does not match manifest ${manifest.id}` }\n }\n return diagnostic\n}\n\nexport function manifestCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n validateCliProviderManifest(manifest)\n return adapterCapabilities(manifest)\n}\n","import { AdapterError, ErrorCodes, type AdapterFactory, type AdapterRequest, type AdapterCapabilities, type StreamChunk, type StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from '../stream-errors'\nimport { abortableWrite, readCliOutputFile, readCliStdout, spawnCliProcess, writeCliInput } from './process'\nimport { cliError, isRecord, parseCliJsonResponse as standardJsonParser } from './json'\nexport { parseCliJsonResponse } from './json'\nexport { buildCliSystemPrompt, claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nexport type { SerializeCliPromptOptions } from './prompt'\nexport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nexport { diagnoseCliProviderManifest, getCliProviderManifest, listCliProviderManifests, manifestCapabilities, resolveCliManifest, validateCliProviderManifest } from './manifests'\nimport type {\n AcpCliAdapterOptions,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliJsonAdapterOptions,\n CliProtocol,\n CliProcessOptions,\n} from './types'\nexport type { BuiltInCliManifestId, BuiltInCliManifestProtocols, CliManifestOptions, CliProviderManifest, CliProviderManifestFor } from './manifests'\nexport { diagnoseCliProvider } from './process'\nexport type {\n AcpCliAdapterOptions,\n AcpClientInfo,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliJsonParser,\n CliJsonResponse,\n CliProtocol,\n CliProtocolCapabilityKeys,\n CliProcessOptions,\n CliSecurityMode,\n CliTerminationReason,\n CliToolCall,\n} from './types'\n\nconst defaultSerialize = (request: AdapterRequest): string => `${JSON.stringify(request)}\\n`\nfunction createFactory(\n capabilities: AdapterCapabilities,\n run: (request: AdapterRequest, signal: AbortSignal) => AsyncIterableIterator<StreamChunk>,\n): AdapterFactory {\n return {\n capabilities,\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n yield* run(request, controller.signal)\n } catch (error) {\n if (isAbortError(error) || controller.signal.aborted) return\n yield adapterErrorChunk(error instanceof Error ? error.message : String(error), { cause: error })\n }\n },\n abort: () => controller.abort(),\n }\n },\n }\n}\nfunction mergeCapabilities(base: AdapterCapabilities, override?: AdapterCapabilities): AdapterCapabilities {\n return {\n ...base,\n ...override,\n extensions: { ...base.extensions, ...override?.extensions },\n }\n}\nfunction capabilityError(capability: string, protocol: CliProtocol): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `CLI protocol ${protocol} does not support required capability: ${capability}`,\n hint: 'Use a provider manifest with a compatible protocol or remove the unsupported requirement.',\n })\n}\n\nfunction preflightCli(options: CliProcessOptions, protocol: CliProtocol): void {\n const required: CliCapabilityRequirements = options.requiredCapabilities ?? {}\n const supported: Record<string, boolean> = {\n streaming: protocol !== 'exec-json',\n structuredOutput: protocol !== 'exec-text',\n reasoning: protocol !== 'exec-text',\n tools: false,\n mcp: false,\n plugins: false,\n terminal: false,\n nativeAuth: (options.mode ?? 'review-safe') === 'trusted-local',\n }\n for (const [capability, requested] of Object.entries(required)) {\n if (requested === true && supported[capability] !== true) throw capabilityError(capability, protocol)\n }\n}\n\nasync function closeProcess(handle: ReturnType<typeof spawnCliProcess>): Promise<void> {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n}\n\nasync function* runText(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-text')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-text' }, signal)\n const decoder = new TextDecoder()\n let emitted = false\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) {\n const text = decoder.decode(bytes, { stream: true })\n if (text) {\n emitted = true\n yield { type: 'text', content: text }\n }\n }\n const trailing = decoder.decode()\n if (trailing) {\n emitted = true\n yield { type: 'text', content: trailing }\n }\n if (options.outputFile) {\n const output = await readCliOutputFile(options.outputFile, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)\n if (!output) throw cliError('CLI output file was empty')\n yield { type: 'text', content: output }\n } else if (!emitted) throw cliError('CLI returned an empty text response')\n yield { type: 'done' }\n } finally {\n await closeProcess(handle)\n }\n}\n\nfunction normalizeJsonChunks(chunks: readonly StreamChunk[]): StreamChunk[] {\n if (chunks.length === 0) throw cliError('CLI JSON parser returned no chunks')\n if (chunks.some(chunk => !isStreamChunk(chunk))) throw cliError('CLI JSON parser returned an invalid stream chunk')\n const terminalIndexes = chunks.flatMap((chunk, index) => chunk.type === 'done' || chunk.type === 'error' ? [index] : [])\n if (terminalIndexes.length > 1 || (terminalIndexes.length === 1 && terminalIndexes[0] !== chunks.length - 1)) {\n throw cliError('CLI JSON parser returned an invalid terminal sequence')\n }\n const last = chunks[chunks.length - 1]\n return last.type === 'done' || last.type === 'error' ? [...chunks] : [...chunks, { type: 'done' }]\n}\n\nfunction isStreamChunk(value: unknown): value is StreamChunk {\n return isRecord(value) && typeof value.type === 'string' && new Set([\n 'text', 'tool_call', 'tool_result', 'reasoning', 'usage', 'error', 'done',\n ]).has(value.type)\n}\n\nasync function* runJson(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliJsonAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-json')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-json' }, signal)\n const decoder = new TextDecoder()\n let output = ''\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) output += decoder.decode(bytes, { stream: true })\n output += decoder.decode()\n let value: unknown\n try {\n value = (options.parseOutput ?? JSON.parse)(output)\n } catch (error) {\n throw cliError(`CLI returned malformed JSON: ${error instanceof Error ? error.message : String(error)}`, error)\n }\n const chunks = normalizeJsonChunks((options.parse ?? standardJsonParser)(value))\n for (const chunk of chunks) yield chunk\n } finally {\n await closeProcess(handle)\n }\n}\n\ninterface AcpResponse {\n kind: 'response'\n id: string | number | null\n result?: unknown\n error?: { code?: number; message?: string }\n}\n\ninterface AcpNotification {\n kind: 'notification'\n method: string\n params?: unknown\n}\n\ninterface AcpRequest {\n kind: 'request'\n method: string\n}\n\ntype AcpMessage = AcpResponse | AcpNotification | AcpRequest\n\nfunction parseAcpMessage(value: unknown): AcpMessage {\n if (!isRecord(value) || value.jsonrpc !== '2.0') throw cliError('ACP message must be a JSON-RPC 2.0 object')\n if (typeof value.method === 'string') {\n if (value.id === undefined) return { kind: 'notification', method: value.method, params: value.params }\n return { kind: 'request', method: value.method }\n }\n if (typeof value.id === 'string' || typeof value.id === 'number' || value.id === null) {\n if (value.error !== undefined && !isRecord(value.error)) throw cliError('ACP error response is malformed')\n return { kind: 'response', id: value.id, result: value.result, error: value.error as AcpResponse['error'] }\n }\n throw cliError('ACP message has no method or response id')\n}\n\nasync function* readAcpMessages(handle: ReturnType<typeof spawnCliProcess>, signal: AbortSignal, maxOutputBytes: number): AsyncIterableIterator<AcpMessage> {\n const decoder = new TextDecoder()\n let buffer = ''\n let bytesRead = 0\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n bytesRead += chunk.byteLength\n if (bytesRead > maxOutputBytes) {\n handle.terminate('output-limit')\n throw cliError('ACP output exceeded the configured limit')\n }\n buffer += decoder.decode(chunk, { stream: true })\n let newline = buffer.indexOf('\\n')\n while (newline >= 0) {\n const line = buffer.slice(0, newline).trim()\n buffer = buffer.slice(newline + 1)\n if (line) yield parseAcpMessage(JSON.parse(line) as unknown)\n newline = buffer.indexOf('\\n')\n }\n }\n buffer += decoder.decode()\n if (buffer.trim()) yield parseAcpMessage(JSON.parse(buffer.trim()) as unknown)\n}\n\nfunction acpRequest(id: string, method: string, params: Record<string, unknown>): string {\n return `${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\\n`\n}\n\nasync function nextAcpResponse(\n iterator: AsyncIterator<AcpMessage>,\n id: string,\n): Promise<AcpResponse> {\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError(`ACP process closed before response ${id}`)\n if (next.value.kind === 'response' && next.value.id === id) {\n if (next.value.error) throw cliError(`ACP request failed: ${next.value.error.message ?? 'unknown error'}`)\n return next.value\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n }\n}\n\nfunction promptText(request: AdapterRequest, options: AcpCliAdapterOptions): string {\n if (options.toPrompt) return options.toPrompt(request)\n const system = request.context?.systemPrompt ? `[system]\\n${request.context.systemPrompt}\\n\\n` : ''\n return system + request.messages.map(message => `[${message.role}]\\n${message.content}`).join('\\n\\n')\n}\n\nfunction acpUpdateChunk(params: unknown, sessionId: string): StreamChunk | undefined {\n if (!isRecord(params) || params.sessionId !== sessionId || !isRecord(params.update)) return undefined\n const update = params.update\n if (update.sessionUpdate === 'agent_message_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'text', content: update.content.text }\n }\n if (update.sessionUpdate === 'agent_thought_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'reasoning', content: update.content.text }\n }\n if (update.sessionUpdate === 'tool_call' || update.sessionUpdate === 'tool_call_update') {\n throw cliError('ACP tool calls require an explicit client tool policy and are unsupported in this transport')\n }\n return undefined\n}\n\nasync function* runAcp(\n request: AdapterRequest,\n signal: AbortSignal,\n options: AcpCliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n if ((options.protocolVersion ?? 1) !== 1) throw cliError('Only ACP protocol version 1 is supported')\n preflightCli(options, 'acp')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'acp' }, signal)\n const iterator = readAcpMessages(handle, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)[Symbol.asyncIterator]()\n let sequence = 0\n const nextId = (): string => `agentskit-${++sequence}`\n try {\n const initializeId = nextId()\n await abortableWrite(handle, acpRequest(initializeId, 'initialize', {\n protocolVersion: 1,\n clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false, auth: { terminal: false } },\n clientInfo: options.clientInfo ?? { name: '@agentskit/adapters', version: '0.16.0' },\n }), signal)\n const initialize = await nextAcpResponse(iterator, initializeId)\n if (!isRecord(initialize.result) || initialize.result.protocolVersion !== 1) throw cliError('ACP agent did not negotiate protocol version 1')\n\n const sessionIdRequest = nextId()\n await abortableWrite(handle, acpRequest(sessionIdRequest, 'session/new', {\n cwd: options.cwd ?? process.cwd(),\n mcpServers: [],\n }), signal)\n const sessionResponse = await nextAcpResponse(iterator, sessionIdRequest)\n if (!isRecord(sessionResponse.result) || typeof sessionResponse.result.sessionId !== 'string') throw cliError('ACP session/new response has no sessionId')\n const sessionId = sessionResponse.result.sessionId\n\n const promptId = nextId()\n await abortableWrite(handle, acpRequest(promptId, 'session/prompt', {\n sessionId,\n prompt: [{ type: 'text', text: promptText(request, options) }],\n }), signal)\n let emitted = false\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError('ACP process closed before session/prompt completed')\n if (next.value.kind === 'response' && next.value.id === promptId) {\n if (next.value.error) throw cliError(`ACP prompt failed: ${next.value.error.message ?? 'unknown error'}`)\n if (!isRecord(next.value.result) || next.value.result.stopReason !== 'end_turn') throw cliError('ACP prompt did not complete with end_turn')\n break\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n if (next.value.kind === 'notification' && next.value.method === 'session/update') {\n const chunk = acpUpdateChunk(next.value.params, sessionId)\n if (chunk) {\n emitted = true\n yield chunk\n }\n }\n }\n if (!emitted) throw cliError('ACP prompt completed without semantic output')\n yield { type: 'done' }\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport function createCliAdapter(options: CliAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: true,\n tools: false,\n structuredOutput: false,\n extensions: { cli: { protocol: 'exec-text', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runText(request, signal, options))\n}\n\nexport function createJsonCliAdapter(options: CliJsonAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: false,\n tools: false,\n structuredOutput: true,\n extensions: { cli: { protocol: 'exec-json', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runJson(request, signal, options))\n}\n\nexport function createAcpCliAdapter(options: AcpCliAdapterOptions): AdapterFactory {\n return createFactory({\n streaming: true,\n tools: false,\n reasoning: true,\n structuredOutput: true,\n extensions: { cli: { protocol: 'acp', protocolVersion: options.protocolVersion ?? 1, mode: options.mode ?? 'review-safe' } },\n }, (request, signal) => runAcp(request, signal, options))\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/stream-errors.ts","../../src/cli/process.ts","../../src/cli/json.ts","../../src/cli/prompt.ts","../../src/cli/claude-code.ts","../../src/cli/manifests.ts","../../src/cli/index.ts"],"names":["AdapterError","ErrorCodes","spawnNodeChild","signal","killProcessTree","open","isRecord"],"mappings":"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","file":"index.cjs","sourcesContent":["import { AdapterError, ErrorCodes } from '@agentskit/core'\nimport type { StreamChunk } from '@agentskit/core'\n\n/** True when the error is a caller-initiated abort. */\nexport function isAbortError(err: unknown): boolean {\n if (err instanceof DOMException && err.name === 'AbortError') return true\n if (err instanceof Error && err.name === 'AbortError') return true\n return false\n}\n\n/**\n * Terminal adapter failure as a stream chunk (ADR 0001 A3/A9).\n * Always attaches `metadata.error` as an Error — prefer AdapterError.\n */\nexport function adapterErrorChunk(\n message: string,\n options?: { cause?: unknown; code?: string },\n): StreamChunk {\n const error = new AdapterError({\n code: options?.code ?? ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause: options?.cause,\n })\n return {\n type: 'error',\n content: message,\n metadata: { error },\n }\n}\n\n/** Validate complete tool-call args JSON before emitting A5 tool_call. */\nexport function parseCompleteToolArgs(\n args: string,\n): { ok: true; args: string } | { ok: false; error: Error } {\n const raw = args.length > 0 ? args : '{}'\n try {\n JSON.parse(raw)\n return { ok: true, args: raw }\n } catch (cause) {\n return {\n ok: false,\n error: new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'Incomplete or malformed tool-call arguments JSON',\n cause,\n }),\n }\n }\n}\n\n/**\n * Race a promise against abort. Rejects promptly with AbortError when the\n * signal fires; cleans up the abort listener either way.\n */\nexport function raceAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) {\n return Promise.reject(new DOMException('Aborted', 'AbortError'))\n }\n return new Promise<T>((resolve, reject) => {\n let settled = false\n const onAbort = (): void => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(new DOMException('Aborted', 'AbortError'))\n }\n signal.addEventListener('abort', onAbort)\n promise.then(\n value => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n resolve(value)\n },\n err => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(err)\n },\n )\n })\n}\n\n/** Abort-aware delay used by retry backoff. */\nexport async function abortableSleep(\n ms: number,\n signal: AbortSignal,\n sleep: (ms: number) => Promise<void>,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n await raceAbort(sleep(ms), signal)\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n}\n\nexport async function cancelBody(body: ReadableStream | null | undefined): Promise<void> {\n if (!body) return\n try {\n await body.cancel()\n } catch {\n // ignore\n }\n}\n","import type { ChildProcessWithoutNullStreams } from 'node:child_process'\nimport { open } from 'node:fs/promises'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { killProcessTree, spawnNodeChild } from '@agentskit/cross-platform'\nimport { raceAbort } from '../stream-errors'\nimport type { CliDiagnostic, CliProcessOptions, CliTerminationReason } from './types'\n\nconst DEFAULT_TIMEOUT_MS = 120_000\nconst DEFAULT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024\nconst DEFAULT_KILL_GRACE_MS = 250\n\ntype TerminationReason = CliTerminationReason\n\nexport interface CliProcessResult {\n code: number | null\n signal: NodeJS.Signals | null\n stderr: string\n elapsedMs: number\n termination?: TerminationReason\n}\n\nexport interface CliProcessHandle {\n child: ChildProcessWithoutNullStreams\n completion: Promise<CliProcessResult>\n terminate: (reason?: TerminationReason) => void\n}\n\nfunction validateOptions(options: CliProcessOptions): void {\n if (options.mode !== undefined && !['review-safe', 'trusted-local', 'restricted-environment'].includes(options.mode)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI mode must be review-safe, trusted-local, or restricted-environment',\n })\n }\n if (!options.command.trim()) throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command must not be empty',\n })\n if (options.command.includes('\\0') || options.args?.some(arg => arg.includes('\\0'))) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command and arguments must not contain null bytes',\n })\n }\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name) || value?.includes('\\0')) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Invalid CLI environment variable: ${name}`,\n })\n }\n }\n if (options.timeoutMs !== undefined && (!Number.isInteger(options.timeoutMs) || options.timeoutMs < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI timeoutMs must be a positive integer',\n })\n }\n if (options.maxOutputBytes !== undefined && (!Number.isInteger(options.maxOutputBytes) || options.maxOutputBytes < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI maxOutputBytes must be a positive integer',\n })\n }\n if (options.killGraceMs !== undefined && (!Number.isInteger(options.killGraceMs) || options.killGraceMs < 0)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI killGraceMs must be a non-negative integer',\n })\n }\n}\n\nfunction redactionValues(options: CliProcessOptions): string[] {\n const values = new Set<string>()\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (value && value.length >= 4) values.add(value)\n if (options.mode === 'trusted-local' && /(?:key|token|secret|password|credential|auth)/i.test(name)) {\n const inherited = process.env[name]\n if (inherited && inherited.length >= 4) values.add(inherited)\n }\n }\n if (options.mode === 'trusted-local') {\n for (const [name, value] of Object.entries(process.env)) {\n if (value && value.length >= 4 && /(?:key|token|secret|password|credential|auth)/i.test(name)) values.add(value)\n }\n }\n return [...values].sort((left, right) => right.length - left.length)\n}\n\nexport function redactCliText(text: string, values: readonly string[] = []): string {\n let redacted = text\n for (const value of values) redacted = redacted.split(value).join('[REDACTED]')\n return redacted\n .replace(/\\bBearer\\s+[^\\s,;]+/gi, 'Bearer [REDACTED]')\n .replace(/\\b(?:sk|pk|xai|ghp|github_pat|AIza)[A-Za-z0-9_-]{10,}\\b/g, '[REDACTED]')\n}\n\nfunction emitDiagnostic(options: CliProcessOptions, diagnostic: CliDiagnostic): void {\n try {\n options.onDiagnostic?.(diagnostic)\n } catch {\n // Observability must never change process or adapter behavior.\n }\n}\n\nfunction buildEnvironment(options: CliProcessOptions): NodeJS.ProcessEnv {\n const mode = options.mode ?? 'review-safe'\n let inherited: NodeJS.ProcessEnv\n if (mode === 'trusted-local') {\n inherited = { ...process.env }\n } else {\n const entries: Array<[string, string]> = []\n for (const name of ['PATH', 'Path', 'PATHEXT', 'SystemRoot', 'WINDIR', 'TMP', 'TEMP', 'TMPDIR']) {\n const value = process.env[name]\n if (value !== undefined) entries.push([name, value])\n }\n inherited = Object.fromEntries(entries)\n }\n return { ...inherited, ...options.env }\n}\n\nexport function spawnCliProcess(options: CliProcessOptions, signal?: AbortSignal): CliProcessHandle {\n validateOptions(options)\n const startedAt = Date.now()\n const redactions = redactionValues(options)\n // Provider CLIs are npm .cmd shims on Windows; spawnNodeChild resolves and\n // escapes them without a shell.\n const child = spawnNodeChild(options.command, options.args ?? [], {\n cwd: options.cwd ?? process.cwd(),\n env: buildEnvironment(options),\n windowsHide: true,\n stdio: 'pipe',\n })\n const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES\n const killGraceMs = options.killGraceMs ?? DEFAULT_KILL_GRACE_MS\n const stderrDecoder = new TextDecoder()\n let stderr = ''\n let stderrBytes = 0\n let termination: TerminationReason | undefined\n let terminated = false\n let forceTimer: ReturnType<typeof setTimeout> | undefined\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined\n\n // Kill the whole tree: on Windows the child is cmd.exe running the real CLI.\n const killTree = (signal: NodeJS.Signals): void => {\n if (child.exitCode !== null || child.signalCode !== null) return\n if (child.pid === undefined) {\n try { child.kill(signal) } catch { /* process may already be gone */ }\n return\n }\n void killProcessTree(child.pid, signal, sig => child.kill(sig))\n }\n\n const terminate = (reason?: TerminationReason): void => {\n if (reason) termination = reason\n if (terminated || child.exitCode !== null) return\n terminated = true\n killTree('SIGTERM')\n forceTimer = setTimeout(() => killTree('SIGKILL'), killGraceMs)\n }\n\n child.stderr.on('data', (chunk: Buffer) => {\n stderrBytes += chunk.byteLength\n if (stderrBytes > maxOutputBytes) {\n terminate('output-limit')\n return\n }\n stderr += stderrDecoder.decode(chunk, { stream: true })\n })\n\n const completion = new Promise<CliProcessResult>((resolve, reject) => {\n let settled = false\n const cleanup = (): void => {\n if (timeoutTimer) clearTimeout(timeoutTimer)\n if (forceTimer) clearTimeout(forceTimer)\n signal?.removeEventListener('abort', onAbort)\n stderr += stderrDecoder.decode()\n }\n const onAbort = (): void => terminate('aborted')\n const onError = (error: Error): void => {\n if (settled) return\n settled = true\n cleanup()\n const message = redactCliText(error.message, redactions)\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs: Date.now() - startedAt,\n termination,\n success: false,\n error: message,\n })\n reject(processError('CLI process failed', message, error))\n }\n child.once('error', onError)\n child.stdin.once('error', onError)\n child.once('close', (code, childSignal) => {\n if (settled) return\n settled = true\n cleanup()\n const elapsedMs = Date.now() - startedAt\n const safeStderr = redactCliText(stderr, redactions)\n const success = code === 0 && termination === undefined\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs,\n exitCode: code,\n signal: childSignal,\n termination,\n success,\n error: success ? undefined : safeStderr.trim() || undefined,\n })\n resolve({ code, signal: childSignal, stderr: safeStderr, elapsedMs, termination })\n })\n if (signal?.aborted) onAbort()\n else signal?.addEventListener('abort', onAbort, { once: true })\n timeoutTimer = setTimeout(() => terminate('timeout'), options.timeoutMs ?? DEFAULT_TIMEOUT_MS)\n })\n\n return { child, completion, terminate }\n}\n\nexport function writeCliInput(handle: CliProcessHandle, input?: string | Uint8Array): void {\n if (input === undefined) {\n handle.child.stdin.end()\n return\n }\n handle.child.stdin.end(typeof input === 'string' ? input : Buffer.from(input))\n}\n\nexport async function readCliOutputFile(\n file: string,\n signal: AbortSignal,\n maxOutputBytes: number,\n): Promise<string> {\n let handle: Awaited<ReturnType<typeof open>> | undefined\n try {\n handle = await open(file, 'r')\n const metadata = await handle.stat()\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (!metadata.isFile()) throw processError('CLI output path is not a file', '')\n if (metadata.size > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n const timeout = AbortSignal.timeout(5_000)\n const readSignal = AbortSignal.any([signal, timeout])\n const output = await handle.readFile({ signal: readSignal })\n if (output.byteLength > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n return output.toString('utf8')\n } catch (error) {\n if (error instanceof AdapterError) throw error\n throw processError('CLI output file could not be read', '', error)\n } finally {\n await handle?.close()\n }\n}\n\nfunction processError(message: string, stderr: string, cause?: unknown): AdapterError {\n const suffix = stderr.trim() ? `: ${stderr.trim().slice(0, 1000)}` : ''\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${message}${suffix}`,\n cause,\n })\n}\n\nexport async function* readCliStdout(\n handle: CliProcessHandle,\n signal: AbortSignal,\n maxOutputBytes = DEFAULT_MAX_OUTPUT_BYTES,\n): AsyncIterableIterator<Uint8Array> {\n let outputBytes = 0\n try {\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n outputBytes += chunk.byteLength\n if (outputBytes > maxOutputBytes) {\n handle.terminate('output-limit')\n throw processError('CLI output exceeded the configured limit', '')\n }\n yield new Uint8Array(chunk)\n }\n const result = await handle.completion\n if (result.termination === 'aborted' || signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (result.termination === 'timeout') throw processError('CLI process timed out', result.stderr)\n if (result.termination === 'output-limit') throw processError('CLI output exceeded the configured limit', result.stderr)\n if (result.code !== 0) throw processError(`CLI process exited with code ${String(result.code)}`, result.stderr)\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport async function diagnoseCliProvider(\n options: CliProcessOptions & { diagnosticArgs?: readonly string[] },\n): Promise<CliDiagnostic> {\n const mode = options.mode ?? 'review-safe'\n const handle = spawnCliProcess({ ...options, protocol: options.protocol ?? 'exec-text', args: options.diagnosticArgs ?? ['--version'], timeoutMs: options.timeoutMs ?? 5_000, maxOutputBytes: options.maxOutputBytes ?? 64 * 1024 })\n try {\n const decoder = new TextDecoder()\n let output = ''\n writeCliInput(handle)\n for await (const chunk of readCliStdout(handle, new AbortController().signal, options.maxOutputBytes ?? 64 * 1024)) {\n output += decoder.decode(chunk, { stream: true })\n }\n output += decoder.decode()\n const result = await handle.completion\n if (result.code !== 0 || result.termination) return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n elapsedMs: result.elapsedMs,\n exitCode: result.code,\n signal: result.signal,\n termination: result.termination,\n error: result.stderr.trim() || `CLI exited with code ${String(result.code)}`,\n }\n return { available: true, providerId: options.providerId, command: options.command, mode, protocol: options.protocol ?? 'exec-text', elapsedMs: result.elapsedMs, exitCode: result.code, signal: result.signal, version: output.trim() || undefined }\n } catch (error) {\n return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n error: error instanceof Error ? error.message : String(error),\n }\n } finally {\n handle.terminate()\n }\n}\n\nexport async function abortableWrite(\n handle: CliProcessHandle,\n input: string,\n signal: AbortSignal,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (handle.child.stdin.write(input)) return\n let onDrain: (() => void) | undefined\n let onError: ((error: Error) => void) | undefined\n const waitForDrain = new Promise<void>((resolve, reject) => {\n onDrain = (): void => {\n handle.child.stdin.removeListener('error', onError!)\n resolve()\n }\n onError = (error: Error): void => {\n handle.child.stdin.removeListener('drain', onDrain!)\n reject(error)\n }\n handle.child.stdin.once('drain', onDrain)\n handle.child.stdin.once('error', onError)\n })\n try {\n await raceAbort(waitForDrain, signal)\n } finally {\n if (onDrain) handle.child.stdin.removeListener('drain', onDrain)\n if (onError) handle.child.stdin.removeListener('error', onError)\n }\n}\n\nexport { DEFAULT_MAX_OUTPUT_BYTES }\n","import { AdapterError, ErrorCodes, type StreamChunk } from '@agentskit/core'\n\nexport const cliError = (message: string, cause?: unknown): AdapterError => new AdapterError({ code: ErrorCodes.AK_ADAPTER_STREAM_FAILED, message, cause })\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function parseCliJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value)) throw cliError('CLI JSON response must be an object')\n const chunks: StreamChunk[] = []\n if (typeof value.text === 'string') chunks.push({ type: 'text', content: value.text })\n if (typeof value.reasoning === 'string') chunks.push({ type: 'reasoning', content: value.reasoning })\n if (Array.isArray(value.toolCalls)) {\n for (const item of value.toolCalls) {\n if (!isRecord(item) || typeof item.id !== 'string' || typeof item.name !== 'string' || typeof item.args !== 'string') {\n throw cliError('CLI JSON toolCalls must contain string id, name, and args fields')\n }\n JSON.parse(item.args)\n chunks.push({ type: 'tool_call', toolCall: { id: item.id, name: item.name, args: item.args } })\n }\n }\n if (value.usage !== undefined) {\n if (!isRecord(value.usage)) {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n const promptTokens = value.usage.promptTokens\n const completionTokens = value.usage.completionTokens\n const totalTokens = value.usage.totalTokens\n if (typeof promptTokens !== 'number' || typeof completionTokens !== 'number' || typeof totalTokens !== 'number') {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens } })\n }\n if (value.metadata !== undefined) {\n if (!isRecord(value.metadata)) throw cliError('CLI JSON metadata must be an object')\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n chunks[chunks.length - 1] = { ...chunks[chunks.length - 1], metadata: value.metadata }\n }\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n return chunks\n}\n\n","import type { AdapterRequest, ToolDefinition } from '@agentskit/core'\n\n/**\n * Serializes an `AdapterRequest` as clearly labelled prompt blocks for\n * agentic CLIs (Claude Code, Codex, ...) that read a natural-language prompt\n * from stdin.\n *\n * The generic `createCliAdapter` default writes the raw `AdapterRequest` JSON\n * to stdin, which is the right contract for a purpose-built CLI but is\n * hostile to agentic CLIs: Claude Code, for example, treats a raw JSON blob\n * containing `systemPrompt` as a prompt-injection attempt and refuses it.\n * First-party manifests for those CLIs use this serializer instead; the\n * Claude Code manifests go further and pass system instructions through\n * `--append-system-prompt` (`claudeCodeRequestArgs`) with `serializeCliMessages`\n * on stdin, because Claude Code also flags labelled `[system]`/`[tools]`\n * blocks inside the user prompt.\n *\n * Output shape:\n *\n * ```text\n * [system]\n * ...system prompt...\n *\n * [tools]\n * ...JSON list of tool definitions + response contract...\n *\n * [user]\n * ...\n *\n * [assistant]\n * ...\n * ```\n */\nexport function serializeCliPrompt(request: AdapterRequest, options: SerializeCliPromptOptions = {}): string {\n const blocks: string[] = []\n const system = request.context?.systemPrompt\n if (options.system !== false && system) blocks.push(`[system]\\n${system}`)\n const tools = request.context?.tools\n if (options.tools !== false && tools && tools.length > 0) blocks.push(`[tools]\\n${describeTools(tools)}`)\n const messages = request.messages.filter(message => message.role !== 'system' || options.system !== false)\n if (blocks.length === 0 && messages.length === 1 && messages[0]!.role === 'user') return `${messages[0]!.content}\\n`\n for (const message of messages) blocks.push(`[${message.role}]\\n${message.content}`)\n return `${blocks.join('\\n\\n')}\\n`\n}\n\nexport interface SerializeCliPromptOptions {\n /** Include the `[system]` block and `system` messages. Default `true`. */\n system?: boolean\n /** Include the `[tools]` block. Default `true`. */\n tools?: boolean\n}\n\n/**\n * Conversation-only serializer for CLIs that take the system prompt through\n * argv (see `buildCliSystemPrompt`). A single user message is written bare;\n * multi-turn conversations use `[user]`/`[assistant]`/`[tool]` blocks.\n */\nexport function serializeCliMessages(request: AdapterRequest): string {\n return serializeCliPrompt(request, { system: false, tools: false })\n}\n\n/**\n * System instructions for a request: the system prompt plus, when tools are\n * present, the tool list and the JSON tool-call contract. Returns `undefined`\n * when the request carries neither. Intended for CLIs with a system-prompt\n * flag; Claude Code treats the same text inside the user prompt as an\n * injection attempt.\n */\nexport function buildCliSystemPrompt(request: AdapterRequest): string | undefined {\n const parts: string[] = []\n if (request.context?.systemPrompt) parts.push(request.context.systemPrompt)\n const tools = request.context?.tools\n if (tools && tools.length > 0) parts.push(describeTools(tools))\n return parts.length > 0 ? parts.join('\\n\\n') : undefined\n}\n\n/** Extra `claude -p` argv: `--append-system-prompt` when the request has system instructions or tools. */\nexport function claudeCodeRequestArgs(request: AdapterRequest): readonly string[] {\n const system = buildCliSystemPrompt(request)\n return system ? ['--append-system-prompt', system] : []\n}\n\nconst TOOL_CONTRACT = [\n 'The application running you exposes the tools listed below; it executes them, not you.',\n 'To call one or more of them, reply with only a single JSON object',\n '{\"text\"?: string, \"toolCalls\": [{\"id\": string, \"name\": string, \"args\": string}]} where `args` is a JSON-encoded',\n 'string of the tool arguments and `id` is any unique string. When no tool call is needed, reply with plain text.',\n].join(' ')\n\nfunction describeTools(tools: readonly ToolDefinition[]): string {\n const definitions = tools.map(tool => ({ name: tool.name, description: tool.description, schema: tool.schema }))\n return `${TOOL_CONTRACT}\\n${JSON.stringify(definitions, null, 2)}`\n}\n","import type { StreamChunk } from '@agentskit/core'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { parseCliJsonResponse } from './json'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction claudeCodeError(message: string, cause?: unknown): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause,\n hint: 'Run `claude -p --output-format json \"ping\"` manually to inspect the envelope emitted by the installed Claude Code version.',\n })\n}\n\nfunction number(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0\n}\n\nconst RESPONSE_KEYS = ['text', 'reasoning', 'toolCalls'] as const\n\nconst FENCE = '```'\n\n/** Strips a surrounding Markdown code fence (optionally tagged `json`) without regular expressions. */\nfunction unfence(text: string): string {\n if (!text.startsWith(FENCE) || !text.endsWith(FENCE) || text.length < FENCE.length * 2) return text\n let inner = text.slice(FENCE.length, text.length - FENCE.length)\n if (inner.startsWith('json')) inner = inner.slice('json'.length)\n return inner.trim()\n}\n\n/**\n * Returns the AgentsKit CLI JSON response object embedded in a Claude Code\n * `result` string, or `undefined` when the result is plain prose.\n */\nfunction embeddedResponse(result: string): Record<string, unknown> | undefined {\n const candidate = unfence(result.trim())\n if (!candidate.startsWith('{') || !candidate.endsWith('}')) return undefined\n let value: unknown\n try {\n value = JSON.parse(candidate)\n } catch {\n return undefined\n }\n if (!isRecord(value) || !RESPONSE_KEYS.some(key => key in value)) return undefined\n return value\n}\n\n/**\n * Maps one `claude -p --output-format json` envelope to normalized stream\n * chunks. Used by the `claude-code-json` manifest with `createJsonCliAdapter`.\n *\n * - `result` becomes a `text` chunk. When the result is itself a JSON object\n * following the `CliJsonResponse` shape (`text`, `reasoning`, `toolCalls`),\n * for instance because the prompt carried a `[tools]` block, it is parsed\n * with `parseCliJsonResponse` so tool calls surface as `tool_call` chunks.\n * - `structured_output` (from `--json-schema`) is preferred over `result`\n * when it follows the same shape; otherwise it is emitted as JSON text.\n * - `usage.input_tokens` (+ cache tokens) and `usage.output_tokens` become a\n * `usage` chunk; `session_id`, `total_cost_usd`, `duration_ms`, and\n * `num_turns` are attached as metadata on the last chunk.\n * - `is_error: true` or a non-`success` subtype fails closed.\n */\nexport function parseClaudeCodeJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value) || value.type !== 'result') throw claudeCodeError('Claude Code JSON output must be a `result` envelope')\n const result = typeof value.result === 'string' ? value.result : ''\n if (value.is_error === true || (typeof value.subtype === 'string' && value.subtype !== 'success')) {\n throw claudeCodeError(`Claude Code returned ${String(value.subtype ?? 'error')}${result ? `: ${result}` : ''}`)\n }\n const chunks: StreamChunk[] = []\n const structured = isRecord(value.structured_output) ? value.structured_output : undefined\n if (structured && RESPONSE_KEYS.some(key => key in structured)) {\n chunks.push(...parseCliJsonResponse(structured))\n } else if (structured) {\n chunks.push({ type: 'text', content: JSON.stringify(structured) })\n } else {\n const embedded = embeddedResponse(result)\n if (embedded) chunks.push(...parseCliJsonResponse(embedded))\n else if (result) chunks.push({ type: 'text', content: result })\n }\n if (isRecord(value.usage)) {\n const promptTokens = number(value.usage.input_tokens) + number(value.usage.cache_creation_input_tokens) + number(value.usage.cache_read_input_tokens)\n const completionTokens = number(value.usage.output_tokens)\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens: promptTokens + completionTokens } })\n }\n if (chunks.length === 0) throw claudeCodeError('Claude Code JSON output contains no semantic output')\n const metadata: Record<string, unknown> = {}\n for (const key of ['session_id', 'total_cost_usd', 'duration_ms', 'num_turns', 'subtype'] as const) {\n if (value[key] !== undefined) metadata[key] = value[key]\n }\n const last = chunks[chunks.length - 1]!\n chunks[chunks.length - 1] = { ...last, metadata: { ...last.metadata, ...metadata } }\n return chunks\n}\n\n/**\n * Decodes Claude Code stdout before `parseClaudeCodeJsonResponse`. Claude\n * Code prints a single JSON object, but a leading warning line or trailing\n * whitespace is tolerated by taking the last complete JSON object.\n */\nexport function parseClaudeCodeJsonOutput(stdout: string): unknown {\n const trimmed = stdout.trim()\n try {\n return JSON.parse(trimmed)\n } catch (error) {\n const start = trimmed.lastIndexOf('\\n{')\n if (start < 0) throw claudeCodeError(`Claude Code stdout is not a JSON envelope: ${error instanceof Error ? error.message : String(error)}`, error)\n return JSON.parse(trimmed.slice(start + 1))\n }\n}\n","import { AdapterError, ErrorCodes, type AdapterCapabilities, type AdapterRequest } from '@agentskit/core'\nimport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nimport { diagnoseCliProvider } from './process'\nimport { claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nimport type {\n CliAdapterOptions,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliProcessOptions,\n CliProtocol,\n CliSecurityMode,\n} from './types'\n\n/**\n * A CLI provider manifest for protocol `P`. `capabilities` is restricted to\n * `CliCapabilitiesFor<P>`, so an `exec-text` manifest cannot declare\n * `structuredOutput` and a consumer cannot request `tools` from it: both are\n * compile-time errors, mirroring the runtime `validateCliProviderManifest`.\n */\nexport interface CliProviderManifestFor<P extends CliProtocol = CliProtocol> {\n id: string\n name: string\n command: string\n args: readonly string[]\n diagnosticArgs: readonly string[]\n protocol: P\n protocolVersion?: 1\n capabilities: CliCapabilitiesFor<P>\n supportedModes: readonly CliSecurityMode[]\n credentialEnv?: readonly string[]\n docsUrl?: string\n versionPattern?: string\n /**\n * Serializes the request written to the CLI's stdin. Agentic CLIs that read\n * a natural-language prompt use `serializeCliPrompt`; omit it to write the\n * raw `AdapterRequest` JSON.\n */\n serializeRequest?: CliAdapterOptions['serializeRequest']\n /**\n * Extra per-request argv appended after `args` and `CliManifestOptions.args`,\n * e.g. `--append-system-prompt` for Claude Code. Still spawned without a shell.\n */\n requestArgs?: (request: AdapterRequest) => readonly string[]\n /** `exec-json` only: decodes raw stdout before `parse`. */\n parseOutput?: CliJsonAdapterOptions['parseOutput']\n /** `exec-json` only: maps the decoded JSON value to stream chunks. */\n parse?: CliJsonAdapterOptions['parse']\n}\n\n/** Discriminated by `protocol`; see `CliProviderManifestFor`. */\nexport type CliProviderManifest =\n | CliProviderManifestFor<'exec-text'>\n | CliProviderManifestFor<'exec-json'>\n | CliProviderManifestFor<'acp'>\n\n/** Protocol of each built-in manifest id, used to type `getCliProviderManifest`. */\nexport interface BuiltInCliManifestProtocols {\n codex: 'exec-text'\n 'claude-code': 'exec-text'\n 'claude-code-json': 'exec-json'\n grok: 'acp'\n opencode: 'acp'\n}\nexport type BuiltInCliManifestId = keyof BuiltInCliManifestProtocols\n\nexport interface CliManifestOptions<P extends CliProtocol = CliProtocol> {\n args?: readonly string[]\n mode?: CliSecurityMode\n cwd?: string\n env?: Readonly<Record<string, string | undefined>>\n timeoutMs?: number\n maxOutputBytes?: number\n killGraceMs?: number\n onDiagnostic?: CliProcessOptions['onDiagnostic']\n /** Only capabilities the manifest's protocol can deliver are accepted. */\n requiredCapabilities?: CliCapabilitiesFor<P>\n}\n\nconst MODES: readonly CliSecurityMode[] = ['review-safe', 'trusted-local', 'restricted-environment']\nconst CAPABILITIES = new Set<keyof CliCapabilityRequirements>([\n 'streaming', 'structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal', 'nativeAuth',\n])\n\nconst manifests: readonly CliProviderManifest[] = [\n {\n id: 'codex',\n name: 'OpenAI Codex CLI',\n command: 'codex',\n args: ['exec'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['OPENAI_API_KEY', 'CODEX_API_KEY'],\n docsUrl: 'https://github.com/openai/codex',\n serializeRequest: serializeCliPrompt,\n },\n {\n // Plain-text transport: streams Claude Code's final answer as text.\n // No structured output, reasoning, or tool calls; use `claude-code-json`\n // for those.\n id: 'claude-code',\n name: 'Claude Code',\n command: 'claude',\n args: ['-p'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n },\n {\n // Structured transport: one `claude -p --output-format json` envelope per\n // request, parsed into text, tool_call, and usage chunks. Not streaming.\n id: 'claude-code-json',\n name: 'Claude Code (JSON output)',\n command: 'claude',\n args: ['-p', '--output-format', 'json'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-json',\n capabilities: { structuredOutput: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n parseOutput: parseClaudeCodeJsonOutput,\n parse: parseClaudeCodeJsonResponse,\n },\n {\n id: 'grok',\n name: 'Grok CLI',\n command: 'grok',\n args: ['agent', 'stdio'],\n diagnosticArgs: ['version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['XAI_API_KEY'],\n docsUrl: 'https://docs.x.ai/build/cli/headless-scripting',\n },\n {\n id: 'opencode',\n name: 'OpenCode',\n command: 'opencode',\n args: ['acp'],\n diagnosticArgs: ['--version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true },\n supportedModes: MODES,\n docsUrl: 'https://opencode.ai/docs/cli/',\n },\n]\n\nfunction manifestError(message: string): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n hint: 'Declare an explicit CLI manifest with a supported protocol, mode, and capability set.',\n })\n}\n\nfunction nonEmpty(value: string, label: string): void {\n if (!value.trim() || value.includes('\\0')) throw manifestError(`CLI manifest ${label} must be a non-empty string without null bytes`)\n}\n\nfunction validateArgs(values: readonly string[], label: string): void {\n for (const value of values) {\n if (value.includes('\\0')) throw manifestError(`CLI manifest ${label} contains a null byte`)\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction validateCapabilities(manifest: CliProviderManifest): void {\n const declared: CliCapabilityRequirements = manifest.capabilities\n for (const capability of Object.keys(declared) as Array<keyof CliCapabilityRequirements>) {\n if (!CAPABILITIES.has(capability)) throw manifestError(`CLI manifest declares unknown capability: ${capability}`)\n if (declared[capability] !== true) throw manifestError(`CLI manifest capability ${capability} must be true or omitted`)\n }\n const unsupportedByProtocol: Record<CliProtocol, readonly (keyof CliCapabilityRequirements)[]> = {\n 'exec-text': ['structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal'],\n 'exec-json': ['streaming', 'tools', 'mcp', 'plugins', 'terminal'],\n acp: ['tools', 'mcp', 'plugins', 'terminal'],\n }\n for (const capability of unsupportedByProtocol[manifest.protocol]) {\n if (declared[capability] === true) throw manifestError(`CLI manifest ${manifest.id} declares unsupported ${capability} for ${manifest.protocol}`)\n }\n}\n\nexport function validateCliProviderManifest(manifest: unknown): asserts manifest is CliProviderManifest {\n if (!isRecord(manifest)) throw manifestError('CLI manifest must be an object')\n if (typeof manifest.id !== 'string' || typeof manifest.name !== 'string' || typeof manifest.command !== 'string') {\n throw manifestError('CLI manifest id, name, and command must be strings')\n }\n if (!Array.isArray(manifest.args) || !manifest.args.every(value => typeof value === 'string') || !Array.isArray(manifest.diagnosticArgs) || !manifest.diagnosticArgs.every(value => typeof value === 'string')) {\n throw manifestError('CLI manifest args and diagnosticArgs must be string arrays')\n }\n if (manifest.protocol !== 'exec-text' && manifest.protocol !== 'exec-json' && manifest.protocol !== 'acp') {\n throw manifestError('CLI manifest protocol is unsupported')\n }\n if (!isRecord(manifest.capabilities) || !Array.isArray(manifest.supportedModes)) throw manifestError('CLI manifest capabilities and supportedModes are required')\n if (!manifest.supportedModes.every(value => typeof value === 'string')) throw manifestError('CLI manifest supportedModes must be a string array')\n const candidate = manifest as unknown as CliProviderManifest\n nonEmpty(candidate.id, 'id')\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(candidate.id)) throw manifestError(`CLI manifest id is invalid: ${candidate.id}`)\n nonEmpty(candidate.name, 'name')\n nonEmpty(candidate.command, 'command')\n validateArgs(candidate.args, 'args')\n validateArgs(candidate.diagnosticArgs, 'diagnosticArgs')\n if (candidate.protocolVersion !== undefined && candidate.protocolVersion !== 1) throw manifestError(`CLI manifest ${candidate.id} uses an unsupported protocol version`)\n if (candidate.supportedModes.length === 0 || !candidate.supportedModes.includes('review-safe')) throw manifestError(`CLI manifest ${candidate.id} must support review-safe mode`)\n for (const mode of candidate.supportedModes) {\n if (!MODES.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} declares an unknown mode: ${mode}`)\n }\n if (candidate.credentialEnv !== undefined && (!Array.isArray(candidate.credentialEnv) || !candidate.credentialEnv.every(value => typeof value === 'string'))) throw manifestError(`CLI manifest ${candidate.id} credentialEnv must be a string array`)\n for (const name of candidate.credentialEnv ?? []) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) throw manifestError(`CLI manifest ${candidate.id} declares an invalid credential environment variable`)\n }\n if (candidate.versionPattern !== undefined) {\n if (typeof candidate.versionPattern !== 'string') throw manifestError(`CLI manifest ${candidate.id} versionPattern must be a string`)\n try { new RegExp(candidate.versionPattern) } catch (error) { throw manifestError(`CLI manifest ${candidate.id} has an invalid version pattern: ${String(error)}`) }\n }\n if (candidate.docsUrl !== undefined && typeof candidate.docsUrl !== 'string') throw manifestError(`CLI manifest ${candidate.id} docsUrl must be a string`)\n for (const key of ['serializeRequest', 'requestArgs', 'parseOutput', 'parse'] as const) {\n if (candidate[key] !== undefined && typeof candidate[key] !== 'function') throw manifestError(`CLI manifest ${candidate.id} ${key} must be a function`)\n if ((key === 'parseOutput' || key === 'parse') && candidate[key] !== undefined && candidate.protocol !== 'exec-json') {\n throw manifestError(`CLI manifest ${candidate.id} declares ${key}, which only applies to the exec-json protocol`)\n }\n }\n validateCapabilities(candidate)\n}\n\nexport function listCliProviderManifests(): CliProviderManifest[] {\n return manifests.map((manifest): CliProviderManifest => ({\n ...manifest,\n args: [...manifest.args],\n diagnosticArgs: [...manifest.diagnosticArgs],\n capabilities: { ...manifest.capabilities },\n supportedModes: [...manifest.supportedModes],\n credentialEnv: manifest.credentialEnv ? [...manifest.credentialEnv] : undefined,\n }))\n}\n\n/** Built-in ids resolve to their protocol-specific manifest type; unknown ids to the union. */\nexport function getCliProviderManifest<Id extends string>(\n id: Id,\n): (Id extends BuiltInCliManifestId ? CliProviderManifestFor<BuiltInCliManifestProtocols[Id]> : CliProviderManifest) | undefined {\n return listCliProviderManifests().find(manifest => manifest.id === id) as ReturnType<typeof getCliProviderManifest<Id>>\n}\n\nexport function resolveCliManifest<M extends CliProviderManifest>(manifest: M, options: CliManifestOptions<M['protocol']> = {}): CliJsonAdapterOptions {\n validateCliProviderManifest(manifest)\n const mode = options.mode ?? 'review-safe'\n if (!manifest.supportedModes.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} does not support mode: ${mode}`)\n const args = [...manifest.args, ...(options.args ?? [])]\n const requestArgs = manifest.requestArgs\n return {\n command: manifest.command,\n args,\n buildArgs: requestArgs ? (request: AdapterRequest) => [...args, ...requestArgs(request)] : undefined,\n mode,\n cwd: options.cwd,\n env: options.env,\n timeoutMs: options.timeoutMs,\n maxOutputBytes: options.maxOutputBytes,\n killGraceMs: options.killGraceMs,\n providerId: manifest.id,\n protocol: manifest.protocol,\n onDiagnostic: options.onDiagnostic,\n requiredCapabilities: options.requiredCapabilities,\n serializeRequest: manifest.serializeRequest,\n parseOutput: manifest.parseOutput,\n parse: manifest.parse,\n }\n}\n\nfunction adapterCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n const { streaming, structuredOutput, reasoning, tools }: CliCapabilityRequirements = manifest.capabilities\n return { streaming, structuredOutput, reasoning, tools, extensions: { cli: { provider: manifest.id, protocol: manifest.protocol } } }\n}\n\nexport async function diagnoseCliProviderManifest<M extends CliProviderManifest>(\n manifest: M,\n options: Omit<CliManifestOptions<M['protocol']>, 'args'> = {},\n): Promise<CliDiagnostic> {\n validateCliProviderManifest(manifest)\n const diagnostic = await diagnoseCliProvider({\n ...resolveCliManifest(manifest, options),\n diagnosticArgs: manifest.diagnosticArgs,\n })\n if (diagnostic.available && manifest.versionPattern && !new RegExp(manifest.versionPattern).test(diagnostic.version ?? '')) {\n return { ...diagnostic, available: false, error: `CLI version does not match manifest ${manifest.id}` }\n }\n return diagnostic\n}\n\nexport function manifestCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n validateCliProviderManifest(manifest)\n return adapterCapabilities(manifest)\n}\n","import { AdapterError, ErrorCodes, type AdapterFactory, type AdapterRequest, type AdapterCapabilities, type StreamChunk, type StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from '../stream-errors'\nimport { abortableWrite, readCliOutputFile, readCliStdout, spawnCliProcess, writeCliInput } from './process'\nimport { cliError, isRecord, parseCliJsonResponse as standardJsonParser } from './json'\nexport { parseCliJsonResponse } from './json'\nexport { buildCliSystemPrompt, claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nexport type { SerializeCliPromptOptions } from './prompt'\nexport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nexport { diagnoseCliProviderManifest, getCliProviderManifest, listCliProviderManifests, manifestCapabilities, resolveCliManifest, validateCliProviderManifest } from './manifests'\nimport type {\n AcpCliAdapterOptions,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliJsonAdapterOptions,\n CliProtocol,\n CliProcessOptions,\n} from './types'\nexport type { BuiltInCliManifestId, BuiltInCliManifestProtocols, CliManifestOptions, CliProviderManifest, CliProviderManifestFor } from './manifests'\nexport { diagnoseCliProvider } from './process'\nexport type {\n AcpCliAdapterOptions,\n AcpClientInfo,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliJsonParser,\n CliJsonResponse,\n CliProtocol,\n CliProtocolCapabilityKeys,\n CliProcessOptions,\n CliSecurityMode,\n CliTerminationReason,\n CliToolCall,\n} from './types'\n\nconst defaultSerialize = (request: AdapterRequest): string => `${JSON.stringify(request)}\\n`\nfunction createFactory(\n capabilities: AdapterCapabilities,\n run: (request: AdapterRequest, signal: AbortSignal) => AsyncIterableIterator<StreamChunk>,\n): AdapterFactory {\n return {\n capabilities,\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n yield* run(request, controller.signal)\n } catch (error) {\n if (isAbortError(error) || controller.signal.aborted) return\n yield adapterErrorChunk(error instanceof Error ? error.message : String(error), { cause: error })\n }\n },\n abort: () => controller.abort(),\n }\n },\n }\n}\nfunction mergeCapabilities(base: AdapterCapabilities, override?: AdapterCapabilities): AdapterCapabilities {\n return {\n ...base,\n ...override,\n extensions: { ...base.extensions, ...override?.extensions },\n }\n}\nfunction capabilityError(capability: string, protocol: CliProtocol): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `CLI protocol ${protocol} does not support required capability: ${capability}`,\n hint: 'Use a provider manifest with a compatible protocol or remove the unsupported requirement.',\n })\n}\n\nfunction preflightCli(options: CliProcessOptions, protocol: CliProtocol): void {\n const required: CliCapabilityRequirements = options.requiredCapabilities ?? {}\n const supported: Record<string, boolean> = {\n streaming: protocol !== 'exec-json',\n structuredOutput: protocol !== 'exec-text',\n reasoning: protocol !== 'exec-text',\n tools: false,\n mcp: false,\n plugins: false,\n terminal: false,\n nativeAuth: (options.mode ?? 'review-safe') === 'trusted-local',\n }\n for (const [capability, requested] of Object.entries(required)) {\n if (requested === true && supported[capability] !== true) throw capabilityError(capability, protocol)\n }\n}\n\nasync function closeProcess(handle: ReturnType<typeof spawnCliProcess>): Promise<void> {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n}\n\nasync function* runText(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-text')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-text' }, signal)\n const decoder = new TextDecoder()\n let emitted = false\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) {\n const text = decoder.decode(bytes, { stream: true })\n if (text) {\n emitted = true\n yield { type: 'text', content: text }\n }\n }\n const trailing = decoder.decode()\n if (trailing) {\n emitted = true\n yield { type: 'text', content: trailing }\n }\n if (options.outputFile) {\n const output = await readCliOutputFile(options.outputFile, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)\n if (!output) throw cliError('CLI output file was empty')\n yield { type: 'text', content: output }\n } else if (!emitted) throw cliError('CLI returned an empty text response')\n yield { type: 'done' }\n } finally {\n await closeProcess(handle)\n }\n}\n\nfunction normalizeJsonChunks(chunks: readonly StreamChunk[]): StreamChunk[] {\n if (chunks.length === 0) throw cliError('CLI JSON parser returned no chunks')\n if (chunks.some(chunk => !isStreamChunk(chunk))) throw cliError('CLI JSON parser returned an invalid stream chunk')\n const terminalIndexes = chunks.flatMap((chunk, index) => chunk.type === 'done' || chunk.type === 'error' ? [index] : [])\n if (terminalIndexes.length > 1 || (terminalIndexes.length === 1 && terminalIndexes[0] !== chunks.length - 1)) {\n throw cliError('CLI JSON parser returned an invalid terminal sequence')\n }\n const last = chunks[chunks.length - 1]\n return last.type === 'done' || last.type === 'error' ? [...chunks] : [...chunks, { type: 'done' }]\n}\n\nfunction isStreamChunk(value: unknown): value is StreamChunk {\n return isRecord(value) && typeof value.type === 'string' && new Set([\n 'text', 'tool_call', 'tool_result', 'reasoning', 'usage', 'error', 'done',\n ]).has(value.type)\n}\n\nasync function* runJson(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliJsonAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-json')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-json' }, signal)\n const decoder = new TextDecoder()\n let output = ''\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) output += decoder.decode(bytes, { stream: true })\n output += decoder.decode()\n let value: unknown\n try {\n value = (options.parseOutput ?? JSON.parse)(output)\n } catch (error) {\n throw cliError(`CLI returned malformed JSON: ${error instanceof Error ? error.message : String(error)}`, error)\n }\n const chunks = normalizeJsonChunks((options.parse ?? standardJsonParser)(value))\n for (const chunk of chunks) yield chunk\n } finally {\n await closeProcess(handle)\n }\n}\n\ninterface AcpResponse {\n kind: 'response'\n id: string | number | null\n result?: unknown\n error?: { code?: number; message?: string }\n}\n\ninterface AcpNotification {\n kind: 'notification'\n method: string\n params?: unknown\n}\n\ninterface AcpRequest {\n kind: 'request'\n method: string\n}\n\ntype AcpMessage = AcpResponse | AcpNotification | AcpRequest\n\nfunction parseAcpMessage(value: unknown): AcpMessage {\n if (!isRecord(value) || value.jsonrpc !== '2.0') throw cliError('ACP message must be a JSON-RPC 2.0 object')\n if (typeof value.method === 'string') {\n if (value.id === undefined) return { kind: 'notification', method: value.method, params: value.params }\n return { kind: 'request', method: value.method }\n }\n if (typeof value.id === 'string' || typeof value.id === 'number' || value.id === null) {\n if (value.error !== undefined && !isRecord(value.error)) throw cliError('ACP error response is malformed')\n return { kind: 'response', id: value.id, result: value.result, error: value.error as AcpResponse['error'] }\n }\n throw cliError('ACP message has no method or response id')\n}\n\nasync function* readAcpMessages(handle: ReturnType<typeof spawnCliProcess>, signal: AbortSignal, maxOutputBytes: number): AsyncIterableIterator<AcpMessage> {\n const decoder = new TextDecoder()\n let buffer = ''\n let bytesRead = 0\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n bytesRead += chunk.byteLength\n if (bytesRead > maxOutputBytes) {\n handle.terminate('output-limit')\n throw cliError('ACP output exceeded the configured limit')\n }\n buffer += decoder.decode(chunk, { stream: true })\n let newline = buffer.indexOf('\\n')\n while (newline >= 0) {\n const line = buffer.slice(0, newline).trim()\n buffer = buffer.slice(newline + 1)\n if (line) yield parseAcpMessage(JSON.parse(line) as unknown)\n newline = buffer.indexOf('\\n')\n }\n }\n buffer += decoder.decode()\n if (buffer.trim()) yield parseAcpMessage(JSON.parse(buffer.trim()) as unknown)\n}\n\nfunction acpRequest(id: string, method: string, params: Record<string, unknown>): string {\n return `${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\\n`\n}\n\nasync function nextAcpResponse(\n iterator: AsyncIterator<AcpMessage>,\n id: string,\n): Promise<AcpResponse> {\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError(`ACP process closed before response ${id}`)\n if (next.value.kind === 'response' && next.value.id === id) {\n if (next.value.error) throw cliError(`ACP request failed: ${next.value.error.message ?? 'unknown error'}`)\n return next.value\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n }\n}\n\nfunction promptText(request: AdapterRequest, options: AcpCliAdapterOptions): string {\n if (options.toPrompt) return options.toPrompt(request)\n const system = request.context?.systemPrompt ? `[system]\\n${request.context.systemPrompt}\\n\\n` : ''\n return system + request.messages.map(message => `[${message.role}]\\n${message.content}`).join('\\n\\n')\n}\n\nfunction acpUpdateChunk(params: unknown, sessionId: string): StreamChunk | undefined {\n if (!isRecord(params) || params.sessionId !== sessionId || !isRecord(params.update)) return undefined\n const update = params.update\n if (update.sessionUpdate === 'agent_message_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'text', content: update.content.text }\n }\n if (update.sessionUpdate === 'agent_thought_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'reasoning', content: update.content.text }\n }\n if (update.sessionUpdate === 'tool_call' || update.sessionUpdate === 'tool_call_update') {\n throw cliError('ACP tool calls require an explicit client tool policy and are unsupported in this transport')\n }\n return undefined\n}\n\nasync function* runAcp(\n request: AdapterRequest,\n signal: AbortSignal,\n options: AcpCliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n if ((options.protocolVersion ?? 1) !== 1) throw cliError('Only ACP protocol version 1 is supported')\n preflightCli(options, 'acp')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'acp' }, signal)\n const iterator = readAcpMessages(handle, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)[Symbol.asyncIterator]()\n let sequence = 0\n const nextId = (): string => `agentskit-${++sequence}`\n try {\n const initializeId = nextId()\n await abortableWrite(handle, acpRequest(initializeId, 'initialize', {\n protocolVersion: 1,\n clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false, auth: { terminal: false } },\n clientInfo: options.clientInfo ?? { name: '@agentskit/adapters', version: '0.16.0' },\n }), signal)\n const initialize = await nextAcpResponse(iterator, initializeId)\n if (!isRecord(initialize.result) || initialize.result.protocolVersion !== 1) throw cliError('ACP agent did not negotiate protocol version 1')\n\n const sessionIdRequest = nextId()\n await abortableWrite(handle, acpRequest(sessionIdRequest, 'session/new', {\n cwd: options.cwd ?? process.cwd(),\n mcpServers: [],\n }), signal)\n const sessionResponse = await nextAcpResponse(iterator, sessionIdRequest)\n if (!isRecord(sessionResponse.result) || typeof sessionResponse.result.sessionId !== 'string') throw cliError('ACP session/new response has no sessionId')\n const sessionId = sessionResponse.result.sessionId\n\n const promptId = nextId()\n await abortableWrite(handle, acpRequest(promptId, 'session/prompt', {\n sessionId,\n prompt: [{ type: 'text', text: promptText(request, options) }],\n }), signal)\n let emitted = false\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError('ACP process closed before session/prompt completed')\n if (next.value.kind === 'response' && next.value.id === promptId) {\n if (next.value.error) throw cliError(`ACP prompt failed: ${next.value.error.message ?? 'unknown error'}`)\n if (!isRecord(next.value.result) || next.value.result.stopReason !== 'end_turn') throw cliError('ACP prompt did not complete with end_turn')\n break\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n if (next.value.kind === 'notification' && next.value.method === 'session/update') {\n const chunk = acpUpdateChunk(next.value.params, sessionId)\n if (chunk) {\n emitted = true\n yield chunk\n }\n }\n }\n if (!emitted) throw cliError('ACP prompt completed without semantic output')\n yield { type: 'done' }\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport function createCliAdapter(options: CliAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: true,\n tools: false,\n structuredOutput: false,\n extensions: { cli: { protocol: 'exec-text', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runText(request, signal, options))\n}\n\nexport function createJsonCliAdapter(options: CliJsonAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: false,\n tools: false,\n structuredOutput: true,\n extensions: { cli: { protocol: 'exec-json', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runJson(request, signal, options))\n}\n\nexport function createAcpCliAdapter(options: AcpCliAdapterOptions): AdapterFactory {\n return createFactory({\n streaming: true,\n tools: false,\n reasoning: true,\n structuredOutput: true,\n extensions: { cli: { protocol: 'acp', protocolVersion: options.protocolVersion ?? 1, mode: options.mode ?? 'review-safe' } },\n }, (request, signal) => runAcp(request, signal, options))\n}\n\n"]}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isAbortError, adapterErrorChunk, raceAbort } from '../chunk-6CIB2QCH.js';
|
|
2
2
|
import { AdapterError, ErrorCodes } from '@agentskit/core';
|
|
3
|
-
import { spawn } from 'child_process';
|
|
4
3
|
import { open } from 'fs/promises';
|
|
4
|
+
import { spawnNodeChild, killProcessTree } from '@agentskit/cross-platform';
|
|
5
5
|
|
|
6
6
|
var DEFAULT_TIMEOUT_MS = 12e4;
|
|
7
7
|
var DEFAULT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024;
|
|
@@ -96,12 +96,11 @@ function spawnCliProcess(options, signal) {
|
|
|
96
96
|
validateOptions(options);
|
|
97
97
|
const startedAt = Date.now();
|
|
98
98
|
const redactions = redactionValues(options);
|
|
99
|
-
const child =
|
|
99
|
+
const child = spawnNodeChild(options.command, options.args ?? [], {
|
|
100
100
|
cwd: options.cwd ?? process.cwd(),
|
|
101
101
|
env: buildEnvironment(options),
|
|
102
|
-
shell: false,
|
|
103
102
|
windowsHide: true,
|
|
104
|
-
stdio:
|
|
103
|
+
stdio: "pipe"
|
|
105
104
|
});
|
|
106
105
|
const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
107
106
|
const killGraceMs = options.killGraceMs ?? DEFAULT_KILL_GRACE_MS;
|
|
@@ -112,29 +111,23 @@ function spawnCliProcess(options, signal) {
|
|
|
112
111
|
let terminated = false;
|
|
113
112
|
let forceTimer;
|
|
114
113
|
let timeoutTimer;
|
|
115
|
-
const
|
|
116
|
-
if (
|
|
117
|
-
if (
|
|
118
|
-
terminated = true;
|
|
119
|
-
try {
|
|
120
|
-
child.kill("SIGTERM");
|
|
121
|
-
} catch {
|
|
114
|
+
const killTree = (signal2) => {
|
|
115
|
+
if (child.exitCode !== null || child.signalCode !== null) return;
|
|
116
|
+
if (child.pid === void 0) {
|
|
122
117
|
try {
|
|
123
|
-
child.kill();
|
|
118
|
+
child.kill(signal2);
|
|
124
119
|
} catch {
|
|
125
120
|
}
|
|
121
|
+
return;
|
|
126
122
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}, killGraceMs);
|
|
123
|
+
void killProcessTree(child.pid, signal2, (sig) => child.kill(sig));
|
|
124
|
+
};
|
|
125
|
+
const terminate = (reason) => {
|
|
126
|
+
if (reason) termination = reason;
|
|
127
|
+
if (terminated || child.exitCode !== null) return;
|
|
128
|
+
terminated = true;
|
|
129
|
+
killTree("SIGTERM");
|
|
130
|
+
forceTimer = setTimeout(() => killTree("SIGKILL"), killGraceMs);
|
|
138
131
|
};
|
|
139
132
|
child.stderr.on("data", (chunk) => {
|
|
140
133
|
stderrBytes += chunk.byteLength;
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/process.ts","../../src/cli/json.ts","../../src/cli/prompt.ts","../../src/cli/claude-code.ts","../../src/cli/manifests.ts","../../src/cli/index.ts"],"names":["AdapterError","ErrorCodes","isRecord"],"mappings":"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","file":"index.js","sourcesContent":["import { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'\nimport { open } from 'node:fs/promises'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { raceAbort } from '../stream-errors'\nimport type { CliDiagnostic, CliProcessOptions, CliTerminationReason } from './types'\n\nconst DEFAULT_TIMEOUT_MS = 120_000\nconst DEFAULT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024\nconst DEFAULT_KILL_GRACE_MS = 250\n\ntype TerminationReason = CliTerminationReason\n\nexport interface CliProcessResult {\n code: number | null\n signal: NodeJS.Signals | null\n stderr: string\n elapsedMs: number\n termination?: TerminationReason\n}\n\nexport interface CliProcessHandle {\n child: ChildProcessWithoutNullStreams\n completion: Promise<CliProcessResult>\n terminate: (reason?: TerminationReason) => void\n}\n\nfunction validateOptions(options: CliProcessOptions): void {\n if (options.mode !== undefined && !['review-safe', 'trusted-local', 'restricted-environment'].includes(options.mode)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI mode must be review-safe, trusted-local, or restricted-environment',\n })\n }\n if (!options.command.trim()) throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command must not be empty',\n })\n if (options.command.includes('\\0') || options.args?.some(arg => arg.includes('\\0'))) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command and arguments must not contain null bytes',\n })\n }\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name) || value?.includes('\\0')) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Invalid CLI environment variable: ${name}`,\n })\n }\n }\n if (options.timeoutMs !== undefined && (!Number.isInteger(options.timeoutMs) || options.timeoutMs < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI timeoutMs must be a positive integer',\n })\n }\n if (options.maxOutputBytes !== undefined && (!Number.isInteger(options.maxOutputBytes) || options.maxOutputBytes < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI maxOutputBytes must be a positive integer',\n })\n }\n if (options.killGraceMs !== undefined && (!Number.isInteger(options.killGraceMs) || options.killGraceMs < 0)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI killGraceMs must be a non-negative integer',\n })\n }\n}\n\nfunction redactionValues(options: CliProcessOptions): string[] {\n const values = new Set<string>()\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (value && value.length >= 4) values.add(value)\n if (options.mode === 'trusted-local' && /(?:key|token|secret|password|credential|auth)/i.test(name)) {\n const inherited = process.env[name]\n if (inherited && inherited.length >= 4) values.add(inherited)\n }\n }\n if (options.mode === 'trusted-local') {\n for (const [name, value] of Object.entries(process.env)) {\n if (value && value.length >= 4 && /(?:key|token|secret|password|credential|auth)/i.test(name)) values.add(value)\n }\n }\n return [...values].sort((left, right) => right.length - left.length)\n}\n\nexport function redactCliText(text: string, values: readonly string[] = []): string {\n let redacted = text\n for (const value of values) redacted = redacted.split(value).join('[REDACTED]')\n return redacted\n .replace(/\\bBearer\\s+[^\\s,;]+/gi, 'Bearer [REDACTED]')\n .replace(/\\b(?:sk|pk|xai|ghp|github_pat|AIza)[A-Za-z0-9_-]{10,}\\b/g, '[REDACTED]')\n}\n\nfunction emitDiagnostic(options: CliProcessOptions, diagnostic: CliDiagnostic): void {\n try {\n options.onDiagnostic?.(diagnostic)\n } catch {\n // Observability must never change process or adapter behavior.\n }\n}\n\nfunction buildEnvironment(options: CliProcessOptions): NodeJS.ProcessEnv {\n const mode = options.mode ?? 'review-safe'\n let inherited: NodeJS.ProcessEnv\n if (mode === 'trusted-local') {\n inherited = { ...process.env }\n } else {\n const entries: Array<[string, string]> = []\n for (const name of ['PATH', 'Path', 'PATHEXT', 'SystemRoot', 'WINDIR', 'TMP', 'TEMP', 'TMPDIR']) {\n const value = process.env[name]\n if (value !== undefined) entries.push([name, value])\n }\n inherited = Object.fromEntries(entries)\n }\n return { ...inherited, ...options.env }\n}\n\nexport function spawnCliProcess(options: CliProcessOptions, signal?: AbortSignal): CliProcessHandle {\n validateOptions(options)\n const startedAt = Date.now()\n const redactions = redactionValues(options)\n const child = spawn(options.command, [...(options.args ?? [])], {\n cwd: options.cwd ?? process.cwd(),\n env: buildEnvironment(options),\n shell: false,\n windowsHide: true,\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES\n const killGraceMs = options.killGraceMs ?? DEFAULT_KILL_GRACE_MS\n const stderrDecoder = new TextDecoder()\n let stderr = ''\n let stderrBytes = 0\n let termination: TerminationReason | undefined\n let terminated = false\n let forceTimer: ReturnType<typeof setTimeout> | undefined\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined\n\n const terminate = (reason?: TerminationReason): void => {\n if (reason) termination = reason\n if (terminated || child.exitCode !== null) return\n terminated = true\n try {\n child.kill('SIGTERM')\n } catch {\n try { child.kill() } catch { /* process may already be gone */ }\n }\n forceTimer = setTimeout(() => {\n if (child.exitCode !== null) return\n try {\n child.kill('SIGKILL')\n } catch {\n try { child.kill() } catch { /* process may already be gone */ }\n }\n }, killGraceMs)\n }\n\n child.stderr.on('data', (chunk: Buffer) => {\n stderrBytes += chunk.byteLength\n if (stderrBytes > maxOutputBytes) {\n terminate('output-limit')\n return\n }\n stderr += stderrDecoder.decode(chunk, { stream: true })\n })\n\n const completion = new Promise<CliProcessResult>((resolve, reject) => {\n let settled = false\n const cleanup = (): void => {\n if (timeoutTimer) clearTimeout(timeoutTimer)\n if (forceTimer) clearTimeout(forceTimer)\n signal?.removeEventListener('abort', onAbort)\n stderr += stderrDecoder.decode()\n }\n const onAbort = (): void => terminate('aborted')\n const onError = (error: Error): void => {\n if (settled) return\n settled = true\n cleanup()\n const message = redactCliText(error.message, redactions)\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs: Date.now() - startedAt,\n termination,\n success: false,\n error: message,\n })\n reject(processError('CLI process failed', message, error))\n }\n child.once('error', onError)\n child.stdin.once('error', onError)\n child.once('close', (code, childSignal) => {\n if (settled) return\n settled = true\n cleanup()\n const elapsedMs = Date.now() - startedAt\n const safeStderr = redactCliText(stderr, redactions)\n const success = code === 0 && termination === undefined\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs,\n exitCode: code,\n signal: childSignal,\n termination,\n success,\n error: success ? undefined : safeStderr.trim() || undefined,\n })\n resolve({ code, signal: childSignal, stderr: safeStderr, elapsedMs, termination })\n })\n if (signal?.aborted) onAbort()\n else signal?.addEventListener('abort', onAbort, { once: true })\n timeoutTimer = setTimeout(() => terminate('timeout'), options.timeoutMs ?? DEFAULT_TIMEOUT_MS)\n })\n\n return { child, completion, terminate }\n}\n\nexport function writeCliInput(handle: CliProcessHandle, input?: string | Uint8Array): void {\n if (input === undefined) {\n handle.child.stdin.end()\n return\n }\n handle.child.stdin.end(typeof input === 'string' ? input : Buffer.from(input))\n}\n\nexport async function readCliOutputFile(\n file: string,\n signal: AbortSignal,\n maxOutputBytes: number,\n): Promise<string> {\n let handle: Awaited<ReturnType<typeof open>> | undefined\n try {\n handle = await open(file, 'r')\n const metadata = await handle.stat()\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (!metadata.isFile()) throw processError('CLI output path is not a file', '')\n if (metadata.size > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n const timeout = AbortSignal.timeout(5_000)\n const readSignal = AbortSignal.any([signal, timeout])\n const output = await handle.readFile({ signal: readSignal })\n if (output.byteLength > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n return output.toString('utf8')\n } catch (error) {\n if (error instanceof AdapterError) throw error\n throw processError('CLI output file could not be read', '', error)\n } finally {\n await handle?.close()\n }\n}\n\nfunction processError(message: string, stderr: string, cause?: unknown): AdapterError {\n const suffix = stderr.trim() ? `: ${stderr.trim().slice(0, 1000)}` : ''\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${message}${suffix}`,\n cause,\n })\n}\n\nexport async function* readCliStdout(\n handle: CliProcessHandle,\n signal: AbortSignal,\n maxOutputBytes = DEFAULT_MAX_OUTPUT_BYTES,\n): AsyncIterableIterator<Uint8Array> {\n let outputBytes = 0\n try {\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n outputBytes += chunk.byteLength\n if (outputBytes > maxOutputBytes) {\n handle.terminate('output-limit')\n throw processError('CLI output exceeded the configured limit', '')\n }\n yield new Uint8Array(chunk)\n }\n const result = await handle.completion\n if (result.termination === 'aborted' || signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (result.termination === 'timeout') throw processError('CLI process timed out', result.stderr)\n if (result.termination === 'output-limit') throw processError('CLI output exceeded the configured limit', result.stderr)\n if (result.code !== 0) throw processError(`CLI process exited with code ${String(result.code)}`, result.stderr)\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport async function diagnoseCliProvider(\n options: CliProcessOptions & { diagnosticArgs?: readonly string[] },\n): Promise<CliDiagnostic> {\n const mode = options.mode ?? 'review-safe'\n const handle = spawnCliProcess({ ...options, protocol: options.protocol ?? 'exec-text', args: options.diagnosticArgs ?? ['--version'], timeoutMs: options.timeoutMs ?? 5_000, maxOutputBytes: options.maxOutputBytes ?? 64 * 1024 })\n try {\n const decoder = new TextDecoder()\n let output = ''\n writeCliInput(handle)\n for await (const chunk of readCliStdout(handle, new AbortController().signal, options.maxOutputBytes ?? 64 * 1024)) {\n output += decoder.decode(chunk, { stream: true })\n }\n output += decoder.decode()\n const result = await handle.completion\n if (result.code !== 0 || result.termination) return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n elapsedMs: result.elapsedMs,\n exitCode: result.code,\n signal: result.signal,\n termination: result.termination,\n error: result.stderr.trim() || `CLI exited with code ${String(result.code)}`,\n }\n return { available: true, providerId: options.providerId, command: options.command, mode, protocol: options.protocol ?? 'exec-text', elapsedMs: result.elapsedMs, exitCode: result.code, signal: result.signal, version: output.trim() || undefined }\n } catch (error) {\n return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n error: error instanceof Error ? error.message : String(error),\n }\n } finally {\n handle.terminate()\n }\n}\n\nexport async function abortableWrite(\n handle: CliProcessHandle,\n input: string,\n signal: AbortSignal,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (handle.child.stdin.write(input)) return\n let onDrain: (() => void) | undefined\n let onError: ((error: Error) => void) | undefined\n const waitForDrain = new Promise<void>((resolve, reject) => {\n onDrain = (): void => {\n handle.child.stdin.removeListener('error', onError!)\n resolve()\n }\n onError = (error: Error): void => {\n handle.child.stdin.removeListener('drain', onDrain!)\n reject(error)\n }\n handle.child.stdin.once('drain', onDrain)\n handle.child.stdin.once('error', onError)\n })\n try {\n await raceAbort(waitForDrain, signal)\n } finally {\n if (onDrain) handle.child.stdin.removeListener('drain', onDrain)\n if (onError) handle.child.stdin.removeListener('error', onError)\n }\n}\n\nexport { DEFAULT_MAX_OUTPUT_BYTES }\n","import { AdapterError, ErrorCodes, type StreamChunk } from '@agentskit/core'\n\nexport const cliError = (message: string, cause?: unknown): AdapterError => new AdapterError({ code: ErrorCodes.AK_ADAPTER_STREAM_FAILED, message, cause })\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function parseCliJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value)) throw cliError('CLI JSON response must be an object')\n const chunks: StreamChunk[] = []\n if (typeof value.text === 'string') chunks.push({ type: 'text', content: value.text })\n if (typeof value.reasoning === 'string') chunks.push({ type: 'reasoning', content: value.reasoning })\n if (Array.isArray(value.toolCalls)) {\n for (const item of value.toolCalls) {\n if (!isRecord(item) || typeof item.id !== 'string' || typeof item.name !== 'string' || typeof item.args !== 'string') {\n throw cliError('CLI JSON toolCalls must contain string id, name, and args fields')\n }\n JSON.parse(item.args)\n chunks.push({ type: 'tool_call', toolCall: { id: item.id, name: item.name, args: item.args } })\n }\n }\n if (value.usage !== undefined) {\n if (!isRecord(value.usage)) {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n const promptTokens = value.usage.promptTokens\n const completionTokens = value.usage.completionTokens\n const totalTokens = value.usage.totalTokens\n if (typeof promptTokens !== 'number' || typeof completionTokens !== 'number' || typeof totalTokens !== 'number') {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens } })\n }\n if (value.metadata !== undefined) {\n if (!isRecord(value.metadata)) throw cliError('CLI JSON metadata must be an object')\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n chunks[chunks.length - 1] = { ...chunks[chunks.length - 1], metadata: value.metadata }\n }\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n return chunks\n}\n\n","import type { AdapterRequest, ToolDefinition } from '@agentskit/core'\n\n/**\n * Serializes an `AdapterRequest` as clearly labelled prompt blocks for\n * agentic CLIs (Claude Code, Codex, ...) that read a natural-language prompt\n * from stdin.\n *\n * The generic `createCliAdapter` default writes the raw `AdapterRequest` JSON\n * to stdin, which is the right contract for a purpose-built CLI but is\n * hostile to agentic CLIs: Claude Code, for example, treats a raw JSON blob\n * containing `systemPrompt` as a prompt-injection attempt and refuses it.\n * First-party manifests for those CLIs use this serializer instead; the\n * Claude Code manifests go further and pass system instructions through\n * `--append-system-prompt` (`claudeCodeRequestArgs`) with `serializeCliMessages`\n * on stdin, because Claude Code also flags labelled `[system]`/`[tools]`\n * blocks inside the user prompt.\n *\n * Output shape:\n *\n * ```text\n * [system]\n * ...system prompt...\n *\n * [tools]\n * ...JSON list of tool definitions + response contract...\n *\n * [user]\n * ...\n *\n * [assistant]\n * ...\n * ```\n */\nexport function serializeCliPrompt(request: AdapterRequest, options: SerializeCliPromptOptions = {}): string {\n const blocks: string[] = []\n const system = request.context?.systemPrompt\n if (options.system !== false && system) blocks.push(`[system]\\n${system}`)\n const tools = request.context?.tools\n if (options.tools !== false && tools && tools.length > 0) blocks.push(`[tools]\\n${describeTools(tools)}`)\n const messages = request.messages.filter(message => message.role !== 'system' || options.system !== false)\n if (blocks.length === 0 && messages.length === 1 && messages[0]!.role === 'user') return `${messages[0]!.content}\\n`\n for (const message of messages) blocks.push(`[${message.role}]\\n${message.content}`)\n return `${blocks.join('\\n\\n')}\\n`\n}\n\nexport interface SerializeCliPromptOptions {\n /** Include the `[system]` block and `system` messages. Default `true`. */\n system?: boolean\n /** Include the `[tools]` block. Default `true`. */\n tools?: boolean\n}\n\n/**\n * Conversation-only serializer for CLIs that take the system prompt through\n * argv (see `buildCliSystemPrompt`). A single user message is written bare;\n * multi-turn conversations use `[user]`/`[assistant]`/`[tool]` blocks.\n */\nexport function serializeCliMessages(request: AdapterRequest): string {\n return serializeCliPrompt(request, { system: false, tools: false })\n}\n\n/**\n * System instructions for a request: the system prompt plus, when tools are\n * present, the tool list and the JSON tool-call contract. Returns `undefined`\n * when the request carries neither. Intended for CLIs with a system-prompt\n * flag; Claude Code treats the same text inside the user prompt as an\n * injection attempt.\n */\nexport function buildCliSystemPrompt(request: AdapterRequest): string | undefined {\n const parts: string[] = []\n if (request.context?.systemPrompt) parts.push(request.context.systemPrompt)\n const tools = request.context?.tools\n if (tools && tools.length > 0) parts.push(describeTools(tools))\n return parts.length > 0 ? parts.join('\\n\\n') : undefined\n}\n\n/** Extra `claude -p` argv: `--append-system-prompt` when the request has system instructions or tools. */\nexport function claudeCodeRequestArgs(request: AdapterRequest): readonly string[] {\n const system = buildCliSystemPrompt(request)\n return system ? ['--append-system-prompt', system] : []\n}\n\nconst TOOL_CONTRACT = [\n 'The application running you exposes the tools listed below; it executes them, not you.',\n 'To call one or more of them, reply with only a single JSON object',\n '{\"text\"?: string, \"toolCalls\": [{\"id\": string, \"name\": string, \"args\": string}]} where `args` is a JSON-encoded',\n 'string of the tool arguments and `id` is any unique string. When no tool call is needed, reply with plain text.',\n].join(' ')\n\nfunction describeTools(tools: readonly ToolDefinition[]): string {\n const definitions = tools.map(tool => ({ name: tool.name, description: tool.description, schema: tool.schema }))\n return `${TOOL_CONTRACT}\\n${JSON.stringify(definitions, null, 2)}`\n}\n","import type { StreamChunk } from '@agentskit/core'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { parseCliJsonResponse } from './json'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction claudeCodeError(message: string, cause?: unknown): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause,\n hint: 'Run `claude -p --output-format json \"ping\"` manually to inspect the envelope emitted by the installed Claude Code version.',\n })\n}\n\nfunction number(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0\n}\n\nconst RESPONSE_KEYS = ['text', 'reasoning', 'toolCalls'] as const\n\nconst FENCE = '```'\n\n/** Strips a surrounding Markdown code fence (optionally tagged `json`) without regular expressions. */\nfunction unfence(text: string): string {\n if (!text.startsWith(FENCE) || !text.endsWith(FENCE) || text.length < FENCE.length * 2) return text\n let inner = text.slice(FENCE.length, text.length - FENCE.length)\n if (inner.startsWith('json')) inner = inner.slice('json'.length)\n return inner.trim()\n}\n\n/**\n * Returns the AgentsKit CLI JSON response object embedded in a Claude Code\n * `result` string, or `undefined` when the result is plain prose.\n */\nfunction embeddedResponse(result: string): Record<string, unknown> | undefined {\n const candidate = unfence(result.trim())\n if (!candidate.startsWith('{') || !candidate.endsWith('}')) return undefined\n let value: unknown\n try {\n value = JSON.parse(candidate)\n } catch {\n return undefined\n }\n if (!isRecord(value) || !RESPONSE_KEYS.some(key => key in value)) return undefined\n return value\n}\n\n/**\n * Maps one `claude -p --output-format json` envelope to normalized stream\n * chunks. Used by the `claude-code-json` manifest with `createJsonCliAdapter`.\n *\n * - `result` becomes a `text` chunk. When the result is itself a JSON object\n * following the `CliJsonResponse` shape (`text`, `reasoning`, `toolCalls`),\n * for instance because the prompt carried a `[tools]` block, it is parsed\n * with `parseCliJsonResponse` so tool calls surface as `tool_call` chunks.\n * - `structured_output` (from `--json-schema`) is preferred over `result`\n * when it follows the same shape; otherwise it is emitted as JSON text.\n * - `usage.input_tokens` (+ cache tokens) and `usage.output_tokens` become a\n * `usage` chunk; `session_id`, `total_cost_usd`, `duration_ms`, and\n * `num_turns` are attached as metadata on the last chunk.\n * - `is_error: true` or a non-`success` subtype fails closed.\n */\nexport function parseClaudeCodeJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value) || value.type !== 'result') throw claudeCodeError('Claude Code JSON output must be a `result` envelope')\n const result = typeof value.result === 'string' ? value.result : ''\n if (value.is_error === true || (typeof value.subtype === 'string' && value.subtype !== 'success')) {\n throw claudeCodeError(`Claude Code returned ${String(value.subtype ?? 'error')}${result ? `: ${result}` : ''}`)\n }\n const chunks: StreamChunk[] = []\n const structured = isRecord(value.structured_output) ? value.structured_output : undefined\n if (structured && RESPONSE_KEYS.some(key => key in structured)) {\n chunks.push(...parseCliJsonResponse(structured))\n } else if (structured) {\n chunks.push({ type: 'text', content: JSON.stringify(structured) })\n } else {\n const embedded = embeddedResponse(result)\n if (embedded) chunks.push(...parseCliJsonResponse(embedded))\n else if (result) chunks.push({ type: 'text', content: result })\n }\n if (isRecord(value.usage)) {\n const promptTokens = number(value.usage.input_tokens) + number(value.usage.cache_creation_input_tokens) + number(value.usage.cache_read_input_tokens)\n const completionTokens = number(value.usage.output_tokens)\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens: promptTokens + completionTokens } })\n }\n if (chunks.length === 0) throw claudeCodeError('Claude Code JSON output contains no semantic output')\n const metadata: Record<string, unknown> = {}\n for (const key of ['session_id', 'total_cost_usd', 'duration_ms', 'num_turns', 'subtype'] as const) {\n if (value[key] !== undefined) metadata[key] = value[key]\n }\n const last = chunks[chunks.length - 1]!\n chunks[chunks.length - 1] = { ...last, metadata: { ...last.metadata, ...metadata } }\n return chunks\n}\n\n/**\n * Decodes Claude Code stdout before `parseClaudeCodeJsonResponse`. Claude\n * Code prints a single JSON object, but a leading warning line or trailing\n * whitespace is tolerated by taking the last complete JSON object.\n */\nexport function parseClaudeCodeJsonOutput(stdout: string): unknown {\n const trimmed = stdout.trim()\n try {\n return JSON.parse(trimmed)\n } catch (error) {\n const start = trimmed.lastIndexOf('\\n{')\n if (start < 0) throw claudeCodeError(`Claude Code stdout is not a JSON envelope: ${error instanceof Error ? error.message : String(error)}`, error)\n return JSON.parse(trimmed.slice(start + 1))\n }\n}\n","import { AdapterError, ErrorCodes, type AdapterCapabilities, type AdapterRequest } from '@agentskit/core'\nimport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nimport { diagnoseCliProvider } from './process'\nimport { claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nimport type {\n CliAdapterOptions,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliProcessOptions,\n CliProtocol,\n CliSecurityMode,\n} from './types'\n\n/**\n * A CLI provider manifest for protocol `P`. `capabilities` is restricted to\n * `CliCapabilitiesFor<P>`, so an `exec-text` manifest cannot declare\n * `structuredOutput` and a consumer cannot request `tools` from it: both are\n * compile-time errors, mirroring the runtime `validateCliProviderManifest`.\n */\nexport interface CliProviderManifestFor<P extends CliProtocol = CliProtocol> {\n id: string\n name: string\n command: string\n args: readonly string[]\n diagnosticArgs: readonly string[]\n protocol: P\n protocolVersion?: 1\n capabilities: CliCapabilitiesFor<P>\n supportedModes: readonly CliSecurityMode[]\n credentialEnv?: readonly string[]\n docsUrl?: string\n versionPattern?: string\n /**\n * Serializes the request written to the CLI's stdin. Agentic CLIs that read\n * a natural-language prompt use `serializeCliPrompt`; omit it to write the\n * raw `AdapterRequest` JSON.\n */\n serializeRequest?: CliAdapterOptions['serializeRequest']\n /**\n * Extra per-request argv appended after `args` and `CliManifestOptions.args`,\n * e.g. `--append-system-prompt` for Claude Code. Still spawned without a shell.\n */\n requestArgs?: (request: AdapterRequest) => readonly string[]\n /** `exec-json` only: decodes raw stdout before `parse`. */\n parseOutput?: CliJsonAdapterOptions['parseOutput']\n /** `exec-json` only: maps the decoded JSON value to stream chunks. */\n parse?: CliJsonAdapterOptions['parse']\n}\n\n/** Discriminated by `protocol`; see `CliProviderManifestFor`. */\nexport type CliProviderManifest =\n | CliProviderManifestFor<'exec-text'>\n | CliProviderManifestFor<'exec-json'>\n | CliProviderManifestFor<'acp'>\n\n/** Protocol of each built-in manifest id, used to type `getCliProviderManifest`. */\nexport interface BuiltInCliManifestProtocols {\n codex: 'exec-text'\n 'claude-code': 'exec-text'\n 'claude-code-json': 'exec-json'\n grok: 'acp'\n opencode: 'acp'\n}\nexport type BuiltInCliManifestId = keyof BuiltInCliManifestProtocols\n\nexport interface CliManifestOptions<P extends CliProtocol = CliProtocol> {\n args?: readonly string[]\n mode?: CliSecurityMode\n cwd?: string\n env?: Readonly<Record<string, string | undefined>>\n timeoutMs?: number\n maxOutputBytes?: number\n killGraceMs?: number\n onDiagnostic?: CliProcessOptions['onDiagnostic']\n /** Only capabilities the manifest's protocol can deliver are accepted. */\n requiredCapabilities?: CliCapabilitiesFor<P>\n}\n\nconst MODES: readonly CliSecurityMode[] = ['review-safe', 'trusted-local', 'restricted-environment']\nconst CAPABILITIES = new Set<keyof CliCapabilityRequirements>([\n 'streaming', 'structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal', 'nativeAuth',\n])\n\nconst manifests: readonly CliProviderManifest[] = [\n {\n id: 'codex',\n name: 'OpenAI Codex CLI',\n command: 'codex',\n args: ['exec'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['OPENAI_API_KEY', 'CODEX_API_KEY'],\n docsUrl: 'https://github.com/openai/codex',\n serializeRequest: serializeCliPrompt,\n },\n {\n // Plain-text transport: streams Claude Code's final answer as text.\n // No structured output, reasoning, or tool calls; use `claude-code-json`\n // for those.\n id: 'claude-code',\n name: 'Claude Code',\n command: 'claude',\n args: ['-p'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n },\n {\n // Structured transport: one `claude -p --output-format json` envelope per\n // request, parsed into text, tool_call, and usage chunks. Not streaming.\n id: 'claude-code-json',\n name: 'Claude Code (JSON output)',\n command: 'claude',\n args: ['-p', '--output-format', 'json'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-json',\n capabilities: { structuredOutput: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n parseOutput: parseClaudeCodeJsonOutput,\n parse: parseClaudeCodeJsonResponse,\n },\n {\n id: 'grok',\n name: 'Grok CLI',\n command: 'grok',\n args: ['agent', 'stdio'],\n diagnosticArgs: ['version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['XAI_API_KEY'],\n docsUrl: 'https://docs.x.ai/build/cli/headless-scripting',\n },\n {\n id: 'opencode',\n name: 'OpenCode',\n command: 'opencode',\n args: ['acp'],\n diagnosticArgs: ['--version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true },\n supportedModes: MODES,\n docsUrl: 'https://opencode.ai/docs/cli/',\n },\n]\n\nfunction manifestError(message: string): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n hint: 'Declare an explicit CLI manifest with a supported protocol, mode, and capability set.',\n })\n}\n\nfunction nonEmpty(value: string, label: string): void {\n if (!value.trim() || value.includes('\\0')) throw manifestError(`CLI manifest ${label} must be a non-empty string without null bytes`)\n}\n\nfunction validateArgs(values: readonly string[], label: string): void {\n for (const value of values) {\n if (value.includes('\\0')) throw manifestError(`CLI manifest ${label} contains a null byte`)\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction validateCapabilities(manifest: CliProviderManifest): void {\n const declared: CliCapabilityRequirements = manifest.capabilities\n for (const capability of Object.keys(declared) as Array<keyof CliCapabilityRequirements>) {\n if (!CAPABILITIES.has(capability)) throw manifestError(`CLI manifest declares unknown capability: ${capability}`)\n if (declared[capability] !== true) throw manifestError(`CLI manifest capability ${capability} must be true or omitted`)\n }\n const unsupportedByProtocol: Record<CliProtocol, readonly (keyof CliCapabilityRequirements)[]> = {\n 'exec-text': ['structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal'],\n 'exec-json': ['streaming', 'tools', 'mcp', 'plugins', 'terminal'],\n acp: ['tools', 'mcp', 'plugins', 'terminal'],\n }\n for (const capability of unsupportedByProtocol[manifest.protocol]) {\n if (declared[capability] === true) throw manifestError(`CLI manifest ${manifest.id} declares unsupported ${capability} for ${manifest.protocol}`)\n }\n}\n\nexport function validateCliProviderManifest(manifest: unknown): asserts manifest is CliProviderManifest {\n if (!isRecord(manifest)) throw manifestError('CLI manifest must be an object')\n if (typeof manifest.id !== 'string' || typeof manifest.name !== 'string' || typeof manifest.command !== 'string') {\n throw manifestError('CLI manifest id, name, and command must be strings')\n }\n if (!Array.isArray(manifest.args) || !manifest.args.every(value => typeof value === 'string') || !Array.isArray(manifest.diagnosticArgs) || !manifest.diagnosticArgs.every(value => typeof value === 'string')) {\n throw manifestError('CLI manifest args and diagnosticArgs must be string arrays')\n }\n if (manifest.protocol !== 'exec-text' && manifest.protocol !== 'exec-json' && manifest.protocol !== 'acp') {\n throw manifestError('CLI manifest protocol is unsupported')\n }\n if (!isRecord(manifest.capabilities) || !Array.isArray(manifest.supportedModes)) throw manifestError('CLI manifest capabilities and supportedModes are required')\n if (!manifest.supportedModes.every(value => typeof value === 'string')) throw manifestError('CLI manifest supportedModes must be a string array')\n const candidate = manifest as unknown as CliProviderManifest\n nonEmpty(candidate.id, 'id')\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(candidate.id)) throw manifestError(`CLI manifest id is invalid: ${candidate.id}`)\n nonEmpty(candidate.name, 'name')\n nonEmpty(candidate.command, 'command')\n validateArgs(candidate.args, 'args')\n validateArgs(candidate.diagnosticArgs, 'diagnosticArgs')\n if (candidate.protocolVersion !== undefined && candidate.protocolVersion !== 1) throw manifestError(`CLI manifest ${candidate.id} uses an unsupported protocol version`)\n if (candidate.supportedModes.length === 0 || !candidate.supportedModes.includes('review-safe')) throw manifestError(`CLI manifest ${candidate.id} must support review-safe mode`)\n for (const mode of candidate.supportedModes) {\n if (!MODES.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} declares an unknown mode: ${mode}`)\n }\n if (candidate.credentialEnv !== undefined && (!Array.isArray(candidate.credentialEnv) || !candidate.credentialEnv.every(value => typeof value === 'string'))) throw manifestError(`CLI manifest ${candidate.id} credentialEnv must be a string array`)\n for (const name of candidate.credentialEnv ?? []) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) throw manifestError(`CLI manifest ${candidate.id} declares an invalid credential environment variable`)\n }\n if (candidate.versionPattern !== undefined) {\n if (typeof candidate.versionPattern !== 'string') throw manifestError(`CLI manifest ${candidate.id} versionPattern must be a string`)\n try { new RegExp(candidate.versionPattern) } catch (error) { throw manifestError(`CLI manifest ${candidate.id} has an invalid version pattern: ${String(error)}`) }\n }\n if (candidate.docsUrl !== undefined && typeof candidate.docsUrl !== 'string') throw manifestError(`CLI manifest ${candidate.id} docsUrl must be a string`)\n for (const key of ['serializeRequest', 'requestArgs', 'parseOutput', 'parse'] as const) {\n if (candidate[key] !== undefined && typeof candidate[key] !== 'function') throw manifestError(`CLI manifest ${candidate.id} ${key} must be a function`)\n if ((key === 'parseOutput' || key === 'parse') && candidate[key] !== undefined && candidate.protocol !== 'exec-json') {\n throw manifestError(`CLI manifest ${candidate.id} declares ${key}, which only applies to the exec-json protocol`)\n }\n }\n validateCapabilities(candidate)\n}\n\nexport function listCliProviderManifests(): CliProviderManifest[] {\n return manifests.map((manifest): CliProviderManifest => ({\n ...manifest,\n args: [...manifest.args],\n diagnosticArgs: [...manifest.diagnosticArgs],\n capabilities: { ...manifest.capabilities },\n supportedModes: [...manifest.supportedModes],\n credentialEnv: manifest.credentialEnv ? [...manifest.credentialEnv] : undefined,\n }))\n}\n\n/** Built-in ids resolve to their protocol-specific manifest type; unknown ids to the union. */\nexport function getCliProviderManifest<Id extends string>(\n id: Id,\n): (Id extends BuiltInCliManifestId ? CliProviderManifestFor<BuiltInCliManifestProtocols[Id]> : CliProviderManifest) | undefined {\n return listCliProviderManifests().find(manifest => manifest.id === id) as ReturnType<typeof getCliProviderManifest<Id>>\n}\n\nexport function resolveCliManifest<M extends CliProviderManifest>(manifest: M, options: CliManifestOptions<M['protocol']> = {}): CliJsonAdapterOptions {\n validateCliProviderManifest(manifest)\n const mode = options.mode ?? 'review-safe'\n if (!manifest.supportedModes.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} does not support mode: ${mode}`)\n const args = [...manifest.args, ...(options.args ?? [])]\n const requestArgs = manifest.requestArgs\n return {\n command: manifest.command,\n args,\n buildArgs: requestArgs ? (request: AdapterRequest) => [...args, ...requestArgs(request)] : undefined,\n mode,\n cwd: options.cwd,\n env: options.env,\n timeoutMs: options.timeoutMs,\n maxOutputBytes: options.maxOutputBytes,\n killGraceMs: options.killGraceMs,\n providerId: manifest.id,\n protocol: manifest.protocol,\n onDiagnostic: options.onDiagnostic,\n requiredCapabilities: options.requiredCapabilities,\n serializeRequest: manifest.serializeRequest,\n parseOutput: manifest.parseOutput,\n parse: manifest.parse,\n }\n}\n\nfunction adapterCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n const { streaming, structuredOutput, reasoning, tools }: CliCapabilityRequirements = manifest.capabilities\n return { streaming, structuredOutput, reasoning, tools, extensions: { cli: { provider: manifest.id, protocol: manifest.protocol } } }\n}\n\nexport async function diagnoseCliProviderManifest<M extends CliProviderManifest>(\n manifest: M,\n options: Omit<CliManifestOptions<M['protocol']>, 'args'> = {},\n): Promise<CliDiagnostic> {\n validateCliProviderManifest(manifest)\n const diagnostic = await diagnoseCliProvider({\n ...resolveCliManifest(manifest, options),\n diagnosticArgs: manifest.diagnosticArgs,\n })\n if (diagnostic.available && manifest.versionPattern && !new RegExp(manifest.versionPattern).test(diagnostic.version ?? '')) {\n return { ...diagnostic, available: false, error: `CLI version does not match manifest ${manifest.id}` }\n }\n return diagnostic\n}\n\nexport function manifestCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n validateCliProviderManifest(manifest)\n return adapterCapabilities(manifest)\n}\n","import { AdapterError, ErrorCodes, type AdapterFactory, type AdapterRequest, type AdapterCapabilities, type StreamChunk, type StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from '../stream-errors'\nimport { abortableWrite, readCliOutputFile, readCliStdout, spawnCliProcess, writeCliInput } from './process'\nimport { cliError, isRecord, parseCliJsonResponse as standardJsonParser } from './json'\nexport { parseCliJsonResponse } from './json'\nexport { buildCliSystemPrompt, claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nexport type { SerializeCliPromptOptions } from './prompt'\nexport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nexport { diagnoseCliProviderManifest, getCliProviderManifest, listCliProviderManifests, manifestCapabilities, resolveCliManifest, validateCliProviderManifest } from './manifests'\nimport type {\n AcpCliAdapterOptions,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliJsonAdapterOptions,\n CliProtocol,\n CliProcessOptions,\n} from './types'\nexport type { BuiltInCliManifestId, BuiltInCliManifestProtocols, CliManifestOptions, CliProviderManifest, CliProviderManifestFor } from './manifests'\nexport { diagnoseCliProvider } from './process'\nexport type {\n AcpCliAdapterOptions,\n AcpClientInfo,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliJsonParser,\n CliJsonResponse,\n CliProtocol,\n CliProtocolCapabilityKeys,\n CliProcessOptions,\n CliSecurityMode,\n CliTerminationReason,\n CliToolCall,\n} from './types'\n\nconst defaultSerialize = (request: AdapterRequest): string => `${JSON.stringify(request)}\\n`\nfunction createFactory(\n capabilities: AdapterCapabilities,\n run: (request: AdapterRequest, signal: AbortSignal) => AsyncIterableIterator<StreamChunk>,\n): AdapterFactory {\n return {\n capabilities,\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n yield* run(request, controller.signal)\n } catch (error) {\n if (isAbortError(error) || controller.signal.aborted) return\n yield adapterErrorChunk(error instanceof Error ? error.message : String(error), { cause: error })\n }\n },\n abort: () => controller.abort(),\n }\n },\n }\n}\nfunction mergeCapabilities(base: AdapterCapabilities, override?: AdapterCapabilities): AdapterCapabilities {\n return {\n ...base,\n ...override,\n extensions: { ...base.extensions, ...override?.extensions },\n }\n}\nfunction capabilityError(capability: string, protocol: CliProtocol): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `CLI protocol ${protocol} does not support required capability: ${capability}`,\n hint: 'Use a provider manifest with a compatible protocol or remove the unsupported requirement.',\n })\n}\n\nfunction preflightCli(options: CliProcessOptions, protocol: CliProtocol): void {\n const required: CliCapabilityRequirements = options.requiredCapabilities ?? {}\n const supported: Record<string, boolean> = {\n streaming: protocol !== 'exec-json',\n structuredOutput: protocol !== 'exec-text',\n reasoning: protocol !== 'exec-text',\n tools: false,\n mcp: false,\n plugins: false,\n terminal: false,\n nativeAuth: (options.mode ?? 'review-safe') === 'trusted-local',\n }\n for (const [capability, requested] of Object.entries(required)) {\n if (requested === true && supported[capability] !== true) throw capabilityError(capability, protocol)\n }\n}\n\nasync function closeProcess(handle: ReturnType<typeof spawnCliProcess>): Promise<void> {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n}\n\nasync function* runText(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-text')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-text' }, signal)\n const decoder = new TextDecoder()\n let emitted = false\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) {\n const text = decoder.decode(bytes, { stream: true })\n if (text) {\n emitted = true\n yield { type: 'text', content: text }\n }\n }\n const trailing = decoder.decode()\n if (trailing) {\n emitted = true\n yield { type: 'text', content: trailing }\n }\n if (options.outputFile) {\n const output = await readCliOutputFile(options.outputFile, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)\n if (!output) throw cliError('CLI output file was empty')\n yield { type: 'text', content: output }\n } else if (!emitted) throw cliError('CLI returned an empty text response')\n yield { type: 'done' }\n } finally {\n await closeProcess(handle)\n }\n}\n\nfunction normalizeJsonChunks(chunks: readonly StreamChunk[]): StreamChunk[] {\n if (chunks.length === 0) throw cliError('CLI JSON parser returned no chunks')\n if (chunks.some(chunk => !isStreamChunk(chunk))) throw cliError('CLI JSON parser returned an invalid stream chunk')\n const terminalIndexes = chunks.flatMap((chunk, index) => chunk.type === 'done' || chunk.type === 'error' ? [index] : [])\n if (terminalIndexes.length > 1 || (terminalIndexes.length === 1 && terminalIndexes[0] !== chunks.length - 1)) {\n throw cliError('CLI JSON parser returned an invalid terminal sequence')\n }\n const last = chunks[chunks.length - 1]\n return last.type === 'done' || last.type === 'error' ? [...chunks] : [...chunks, { type: 'done' }]\n}\n\nfunction isStreamChunk(value: unknown): value is StreamChunk {\n return isRecord(value) && typeof value.type === 'string' && new Set([\n 'text', 'tool_call', 'tool_result', 'reasoning', 'usage', 'error', 'done',\n ]).has(value.type)\n}\n\nasync function* runJson(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliJsonAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-json')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-json' }, signal)\n const decoder = new TextDecoder()\n let output = ''\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) output += decoder.decode(bytes, { stream: true })\n output += decoder.decode()\n let value: unknown\n try {\n value = (options.parseOutput ?? JSON.parse)(output)\n } catch (error) {\n throw cliError(`CLI returned malformed JSON: ${error instanceof Error ? error.message : String(error)}`, error)\n }\n const chunks = normalizeJsonChunks((options.parse ?? standardJsonParser)(value))\n for (const chunk of chunks) yield chunk\n } finally {\n await closeProcess(handle)\n }\n}\n\ninterface AcpResponse {\n kind: 'response'\n id: string | number | null\n result?: unknown\n error?: { code?: number; message?: string }\n}\n\ninterface AcpNotification {\n kind: 'notification'\n method: string\n params?: unknown\n}\n\ninterface AcpRequest {\n kind: 'request'\n method: string\n}\n\ntype AcpMessage = AcpResponse | AcpNotification | AcpRequest\n\nfunction parseAcpMessage(value: unknown): AcpMessage {\n if (!isRecord(value) || value.jsonrpc !== '2.0') throw cliError('ACP message must be a JSON-RPC 2.0 object')\n if (typeof value.method === 'string') {\n if (value.id === undefined) return { kind: 'notification', method: value.method, params: value.params }\n return { kind: 'request', method: value.method }\n }\n if (typeof value.id === 'string' || typeof value.id === 'number' || value.id === null) {\n if (value.error !== undefined && !isRecord(value.error)) throw cliError('ACP error response is malformed')\n return { kind: 'response', id: value.id, result: value.result, error: value.error as AcpResponse['error'] }\n }\n throw cliError('ACP message has no method or response id')\n}\n\nasync function* readAcpMessages(handle: ReturnType<typeof spawnCliProcess>, signal: AbortSignal, maxOutputBytes: number): AsyncIterableIterator<AcpMessage> {\n const decoder = new TextDecoder()\n let buffer = ''\n let bytesRead = 0\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n bytesRead += chunk.byteLength\n if (bytesRead > maxOutputBytes) {\n handle.terminate('output-limit')\n throw cliError('ACP output exceeded the configured limit')\n }\n buffer += decoder.decode(chunk, { stream: true })\n let newline = buffer.indexOf('\\n')\n while (newline >= 0) {\n const line = buffer.slice(0, newline).trim()\n buffer = buffer.slice(newline + 1)\n if (line) yield parseAcpMessage(JSON.parse(line) as unknown)\n newline = buffer.indexOf('\\n')\n }\n }\n buffer += decoder.decode()\n if (buffer.trim()) yield parseAcpMessage(JSON.parse(buffer.trim()) as unknown)\n}\n\nfunction acpRequest(id: string, method: string, params: Record<string, unknown>): string {\n return `${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\\n`\n}\n\nasync function nextAcpResponse(\n iterator: AsyncIterator<AcpMessage>,\n id: string,\n): Promise<AcpResponse> {\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError(`ACP process closed before response ${id}`)\n if (next.value.kind === 'response' && next.value.id === id) {\n if (next.value.error) throw cliError(`ACP request failed: ${next.value.error.message ?? 'unknown error'}`)\n return next.value\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n }\n}\n\nfunction promptText(request: AdapterRequest, options: AcpCliAdapterOptions): string {\n if (options.toPrompt) return options.toPrompt(request)\n const system = request.context?.systemPrompt ? `[system]\\n${request.context.systemPrompt}\\n\\n` : ''\n return system + request.messages.map(message => `[${message.role}]\\n${message.content}`).join('\\n\\n')\n}\n\nfunction acpUpdateChunk(params: unknown, sessionId: string): StreamChunk | undefined {\n if (!isRecord(params) || params.sessionId !== sessionId || !isRecord(params.update)) return undefined\n const update = params.update\n if (update.sessionUpdate === 'agent_message_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'text', content: update.content.text }\n }\n if (update.sessionUpdate === 'agent_thought_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'reasoning', content: update.content.text }\n }\n if (update.sessionUpdate === 'tool_call' || update.sessionUpdate === 'tool_call_update') {\n throw cliError('ACP tool calls require an explicit client tool policy and are unsupported in this transport')\n }\n return undefined\n}\n\nasync function* runAcp(\n request: AdapterRequest,\n signal: AbortSignal,\n options: AcpCliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n if ((options.protocolVersion ?? 1) !== 1) throw cliError('Only ACP protocol version 1 is supported')\n preflightCli(options, 'acp')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'acp' }, signal)\n const iterator = readAcpMessages(handle, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)[Symbol.asyncIterator]()\n let sequence = 0\n const nextId = (): string => `agentskit-${++sequence}`\n try {\n const initializeId = nextId()\n await abortableWrite(handle, acpRequest(initializeId, 'initialize', {\n protocolVersion: 1,\n clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false, auth: { terminal: false } },\n clientInfo: options.clientInfo ?? { name: '@agentskit/adapters', version: '0.16.0' },\n }), signal)\n const initialize = await nextAcpResponse(iterator, initializeId)\n if (!isRecord(initialize.result) || initialize.result.protocolVersion !== 1) throw cliError('ACP agent did not negotiate protocol version 1')\n\n const sessionIdRequest = nextId()\n await abortableWrite(handle, acpRequest(sessionIdRequest, 'session/new', {\n cwd: options.cwd ?? process.cwd(),\n mcpServers: [],\n }), signal)\n const sessionResponse = await nextAcpResponse(iterator, sessionIdRequest)\n if (!isRecord(sessionResponse.result) || typeof sessionResponse.result.sessionId !== 'string') throw cliError('ACP session/new response has no sessionId')\n const sessionId = sessionResponse.result.sessionId\n\n const promptId = nextId()\n await abortableWrite(handle, acpRequest(promptId, 'session/prompt', {\n sessionId,\n prompt: [{ type: 'text', text: promptText(request, options) }],\n }), signal)\n let emitted = false\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError('ACP process closed before session/prompt completed')\n if (next.value.kind === 'response' && next.value.id === promptId) {\n if (next.value.error) throw cliError(`ACP prompt failed: ${next.value.error.message ?? 'unknown error'}`)\n if (!isRecord(next.value.result) || next.value.result.stopReason !== 'end_turn') throw cliError('ACP prompt did not complete with end_turn')\n break\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n if (next.value.kind === 'notification' && next.value.method === 'session/update') {\n const chunk = acpUpdateChunk(next.value.params, sessionId)\n if (chunk) {\n emitted = true\n yield chunk\n }\n }\n }\n if (!emitted) throw cliError('ACP prompt completed without semantic output')\n yield { type: 'done' }\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport function createCliAdapter(options: CliAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: true,\n tools: false,\n structuredOutput: false,\n extensions: { cli: { protocol: 'exec-text', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runText(request, signal, options))\n}\n\nexport function createJsonCliAdapter(options: CliJsonAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: false,\n tools: false,\n structuredOutput: true,\n extensions: { cli: { protocol: 'exec-json', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runJson(request, signal, options))\n}\n\nexport function createAcpCliAdapter(options: AcpCliAdapterOptions): AdapterFactory {\n return createFactory({\n streaming: true,\n tools: false,\n reasoning: true,\n structuredOutput: true,\n extensions: { cli: { protocol: 'acp', protocolVersion: options.protocolVersion ?? 1, mode: options.mode ?? 'review-safe' } },\n }, (request, signal) => runAcp(request, signal, options))\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/process.ts","../../src/cli/json.ts","../../src/cli/prompt.ts","../../src/cli/claude-code.ts","../../src/cli/manifests.ts","../../src/cli/index.ts"],"names":["signal","AdapterError","ErrorCodes","isRecord"],"mappings":"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","file":"index.js","sourcesContent":["import type { ChildProcessWithoutNullStreams } from 'node:child_process'\nimport { open } from 'node:fs/promises'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { killProcessTree, spawnNodeChild } from '@agentskit/cross-platform'\nimport { raceAbort } from '../stream-errors'\nimport type { CliDiagnostic, CliProcessOptions, CliTerminationReason } from './types'\n\nconst DEFAULT_TIMEOUT_MS = 120_000\nconst DEFAULT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024\nconst DEFAULT_KILL_GRACE_MS = 250\n\ntype TerminationReason = CliTerminationReason\n\nexport interface CliProcessResult {\n code: number | null\n signal: NodeJS.Signals | null\n stderr: string\n elapsedMs: number\n termination?: TerminationReason\n}\n\nexport interface CliProcessHandle {\n child: ChildProcessWithoutNullStreams\n completion: Promise<CliProcessResult>\n terminate: (reason?: TerminationReason) => void\n}\n\nfunction validateOptions(options: CliProcessOptions): void {\n if (options.mode !== undefined && !['review-safe', 'trusted-local', 'restricted-environment'].includes(options.mode)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI mode must be review-safe, trusted-local, or restricted-environment',\n })\n }\n if (!options.command.trim()) throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command must not be empty',\n })\n if (options.command.includes('\\0') || options.args?.some(arg => arg.includes('\\0'))) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI command and arguments must not contain null bytes',\n })\n }\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name) || value?.includes('\\0')) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Invalid CLI environment variable: ${name}`,\n })\n }\n }\n if (options.timeoutMs !== undefined && (!Number.isInteger(options.timeoutMs) || options.timeoutMs < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI timeoutMs must be a positive integer',\n })\n }\n if (options.maxOutputBytes !== undefined && (!Number.isInteger(options.maxOutputBytes) || options.maxOutputBytes < 1)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI maxOutputBytes must be a positive integer',\n })\n }\n if (options.killGraceMs !== undefined && (!Number.isInteger(options.killGraceMs) || options.killGraceMs < 0)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'CLI killGraceMs must be a non-negative integer',\n })\n }\n}\n\nfunction redactionValues(options: CliProcessOptions): string[] {\n const values = new Set<string>()\n for (const [name, value] of Object.entries(options.env ?? {})) {\n if (value && value.length >= 4) values.add(value)\n if (options.mode === 'trusted-local' && /(?:key|token|secret|password|credential|auth)/i.test(name)) {\n const inherited = process.env[name]\n if (inherited && inherited.length >= 4) values.add(inherited)\n }\n }\n if (options.mode === 'trusted-local') {\n for (const [name, value] of Object.entries(process.env)) {\n if (value && value.length >= 4 && /(?:key|token|secret|password|credential|auth)/i.test(name)) values.add(value)\n }\n }\n return [...values].sort((left, right) => right.length - left.length)\n}\n\nexport function redactCliText(text: string, values: readonly string[] = []): string {\n let redacted = text\n for (const value of values) redacted = redacted.split(value).join('[REDACTED]')\n return redacted\n .replace(/\\bBearer\\s+[^\\s,;]+/gi, 'Bearer [REDACTED]')\n .replace(/\\b(?:sk|pk|xai|ghp|github_pat|AIza)[A-Za-z0-9_-]{10,}\\b/g, '[REDACTED]')\n}\n\nfunction emitDiagnostic(options: CliProcessOptions, diagnostic: CliDiagnostic): void {\n try {\n options.onDiagnostic?.(diagnostic)\n } catch {\n // Observability must never change process or adapter behavior.\n }\n}\n\nfunction buildEnvironment(options: CliProcessOptions): NodeJS.ProcessEnv {\n const mode = options.mode ?? 'review-safe'\n let inherited: NodeJS.ProcessEnv\n if (mode === 'trusted-local') {\n inherited = { ...process.env }\n } else {\n const entries: Array<[string, string]> = []\n for (const name of ['PATH', 'Path', 'PATHEXT', 'SystemRoot', 'WINDIR', 'TMP', 'TEMP', 'TMPDIR']) {\n const value = process.env[name]\n if (value !== undefined) entries.push([name, value])\n }\n inherited = Object.fromEntries(entries)\n }\n return { ...inherited, ...options.env }\n}\n\nexport function spawnCliProcess(options: CliProcessOptions, signal?: AbortSignal): CliProcessHandle {\n validateOptions(options)\n const startedAt = Date.now()\n const redactions = redactionValues(options)\n // Provider CLIs are npm .cmd shims on Windows; spawnNodeChild resolves and\n // escapes them without a shell.\n const child = spawnNodeChild(options.command, options.args ?? [], {\n cwd: options.cwd ?? process.cwd(),\n env: buildEnvironment(options),\n windowsHide: true,\n stdio: 'pipe',\n })\n const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES\n const killGraceMs = options.killGraceMs ?? DEFAULT_KILL_GRACE_MS\n const stderrDecoder = new TextDecoder()\n let stderr = ''\n let stderrBytes = 0\n let termination: TerminationReason | undefined\n let terminated = false\n let forceTimer: ReturnType<typeof setTimeout> | undefined\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined\n\n // Kill the whole tree: on Windows the child is cmd.exe running the real CLI.\n const killTree = (signal: NodeJS.Signals): void => {\n if (child.exitCode !== null || child.signalCode !== null) return\n if (child.pid === undefined) {\n try { child.kill(signal) } catch { /* process may already be gone */ }\n return\n }\n void killProcessTree(child.pid, signal, sig => child.kill(sig))\n }\n\n const terminate = (reason?: TerminationReason): void => {\n if (reason) termination = reason\n if (terminated || child.exitCode !== null) return\n terminated = true\n killTree('SIGTERM')\n forceTimer = setTimeout(() => killTree('SIGKILL'), killGraceMs)\n }\n\n child.stderr.on('data', (chunk: Buffer) => {\n stderrBytes += chunk.byteLength\n if (stderrBytes > maxOutputBytes) {\n terminate('output-limit')\n return\n }\n stderr += stderrDecoder.decode(chunk, { stream: true })\n })\n\n const completion = new Promise<CliProcessResult>((resolve, reject) => {\n let settled = false\n const cleanup = (): void => {\n if (timeoutTimer) clearTimeout(timeoutTimer)\n if (forceTimer) clearTimeout(forceTimer)\n signal?.removeEventListener('abort', onAbort)\n stderr += stderrDecoder.decode()\n }\n const onAbort = (): void => terminate('aborted')\n const onError = (error: Error): void => {\n if (settled) return\n settled = true\n cleanup()\n const message = redactCliText(error.message, redactions)\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs: Date.now() - startedAt,\n termination,\n success: false,\n error: message,\n })\n reject(processError('CLI process failed', message, error))\n }\n child.once('error', onError)\n child.stdin.once('error', onError)\n child.once('close', (code, childSignal) => {\n if (settled) return\n settled = true\n cleanup()\n const elapsedMs = Date.now() - startedAt\n const safeStderr = redactCliText(stderr, redactions)\n const success = code === 0 && termination === undefined\n emitDiagnostic(options, {\n providerId: options.providerId,\n command: options.command,\n mode: options.mode ?? 'review-safe',\n protocol: options.protocol,\n elapsedMs,\n exitCode: code,\n signal: childSignal,\n termination,\n success,\n error: success ? undefined : safeStderr.trim() || undefined,\n })\n resolve({ code, signal: childSignal, stderr: safeStderr, elapsedMs, termination })\n })\n if (signal?.aborted) onAbort()\n else signal?.addEventListener('abort', onAbort, { once: true })\n timeoutTimer = setTimeout(() => terminate('timeout'), options.timeoutMs ?? DEFAULT_TIMEOUT_MS)\n })\n\n return { child, completion, terminate }\n}\n\nexport function writeCliInput(handle: CliProcessHandle, input?: string | Uint8Array): void {\n if (input === undefined) {\n handle.child.stdin.end()\n return\n }\n handle.child.stdin.end(typeof input === 'string' ? input : Buffer.from(input))\n}\n\nexport async function readCliOutputFile(\n file: string,\n signal: AbortSignal,\n maxOutputBytes: number,\n): Promise<string> {\n let handle: Awaited<ReturnType<typeof open>> | undefined\n try {\n handle = await open(file, 'r')\n const metadata = await handle.stat()\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (!metadata.isFile()) throw processError('CLI output path is not a file', '')\n if (metadata.size > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n const timeout = AbortSignal.timeout(5_000)\n const readSignal = AbortSignal.any([signal, timeout])\n const output = await handle.readFile({ signal: readSignal })\n if (output.byteLength > maxOutputBytes) throw processError('CLI output file exceeded the configured limit', '')\n return output.toString('utf8')\n } catch (error) {\n if (error instanceof AdapterError) throw error\n throw processError('CLI output file could not be read', '', error)\n } finally {\n await handle?.close()\n }\n}\n\nfunction processError(message: string, stderr: string, cause?: unknown): AdapterError {\n const suffix = stderr.trim() ? `: ${stderr.trim().slice(0, 1000)}` : ''\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${message}${suffix}`,\n cause,\n })\n}\n\nexport async function* readCliStdout(\n handle: CliProcessHandle,\n signal: AbortSignal,\n maxOutputBytes = DEFAULT_MAX_OUTPUT_BYTES,\n): AsyncIterableIterator<Uint8Array> {\n let outputBytes = 0\n try {\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n outputBytes += chunk.byteLength\n if (outputBytes > maxOutputBytes) {\n handle.terminate('output-limit')\n throw processError('CLI output exceeded the configured limit', '')\n }\n yield new Uint8Array(chunk)\n }\n const result = await handle.completion\n if (result.termination === 'aborted' || signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (result.termination === 'timeout') throw processError('CLI process timed out', result.stderr)\n if (result.termination === 'output-limit') throw processError('CLI output exceeded the configured limit', result.stderr)\n if (result.code !== 0) throw processError(`CLI process exited with code ${String(result.code)}`, result.stderr)\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport async function diagnoseCliProvider(\n options: CliProcessOptions & { diagnosticArgs?: readonly string[] },\n): Promise<CliDiagnostic> {\n const mode = options.mode ?? 'review-safe'\n const handle = spawnCliProcess({ ...options, protocol: options.protocol ?? 'exec-text', args: options.diagnosticArgs ?? ['--version'], timeoutMs: options.timeoutMs ?? 5_000, maxOutputBytes: options.maxOutputBytes ?? 64 * 1024 })\n try {\n const decoder = new TextDecoder()\n let output = ''\n writeCliInput(handle)\n for await (const chunk of readCliStdout(handle, new AbortController().signal, options.maxOutputBytes ?? 64 * 1024)) {\n output += decoder.decode(chunk, { stream: true })\n }\n output += decoder.decode()\n const result = await handle.completion\n if (result.code !== 0 || result.termination) return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n elapsedMs: result.elapsedMs,\n exitCode: result.code,\n signal: result.signal,\n termination: result.termination,\n error: result.stderr.trim() || `CLI exited with code ${String(result.code)}`,\n }\n return { available: true, providerId: options.providerId, command: options.command, mode, protocol: options.protocol ?? 'exec-text', elapsedMs: result.elapsedMs, exitCode: result.code, signal: result.signal, version: output.trim() || undefined }\n } catch (error) {\n return {\n available: false,\n providerId: options.providerId,\n command: options.command,\n mode,\n protocol: options.protocol ?? 'exec-text',\n error: error instanceof Error ? error.message : String(error),\n }\n } finally {\n handle.terminate()\n }\n}\n\nexport async function abortableWrite(\n handle: CliProcessHandle,\n input: string,\n signal: AbortSignal,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (handle.child.stdin.write(input)) return\n let onDrain: (() => void) | undefined\n let onError: ((error: Error) => void) | undefined\n const waitForDrain = new Promise<void>((resolve, reject) => {\n onDrain = (): void => {\n handle.child.stdin.removeListener('error', onError!)\n resolve()\n }\n onError = (error: Error): void => {\n handle.child.stdin.removeListener('drain', onDrain!)\n reject(error)\n }\n handle.child.stdin.once('drain', onDrain)\n handle.child.stdin.once('error', onError)\n })\n try {\n await raceAbort(waitForDrain, signal)\n } finally {\n if (onDrain) handle.child.stdin.removeListener('drain', onDrain)\n if (onError) handle.child.stdin.removeListener('error', onError)\n }\n}\n\nexport { DEFAULT_MAX_OUTPUT_BYTES }\n","import { AdapterError, ErrorCodes, type StreamChunk } from '@agentskit/core'\n\nexport const cliError = (message: string, cause?: unknown): AdapterError => new AdapterError({ code: ErrorCodes.AK_ADAPTER_STREAM_FAILED, message, cause })\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function parseCliJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value)) throw cliError('CLI JSON response must be an object')\n const chunks: StreamChunk[] = []\n if (typeof value.text === 'string') chunks.push({ type: 'text', content: value.text })\n if (typeof value.reasoning === 'string') chunks.push({ type: 'reasoning', content: value.reasoning })\n if (Array.isArray(value.toolCalls)) {\n for (const item of value.toolCalls) {\n if (!isRecord(item) || typeof item.id !== 'string' || typeof item.name !== 'string' || typeof item.args !== 'string') {\n throw cliError('CLI JSON toolCalls must contain string id, name, and args fields')\n }\n JSON.parse(item.args)\n chunks.push({ type: 'tool_call', toolCall: { id: item.id, name: item.name, args: item.args } })\n }\n }\n if (value.usage !== undefined) {\n if (!isRecord(value.usage)) {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n const promptTokens = value.usage.promptTokens\n const completionTokens = value.usage.completionTokens\n const totalTokens = value.usage.totalTokens\n if (typeof promptTokens !== 'number' || typeof completionTokens !== 'number' || typeof totalTokens !== 'number') {\n throw cliError('CLI JSON usage must contain numeric promptTokens, completionTokens, and totalTokens')\n }\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens } })\n }\n if (value.metadata !== undefined) {\n if (!isRecord(value.metadata)) throw cliError('CLI JSON metadata must be an object')\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n chunks[chunks.length - 1] = { ...chunks[chunks.length - 1], metadata: value.metadata }\n }\n if (chunks.length === 0) throw cliError('CLI JSON response contains no semantic output')\n return chunks\n}\n\n","import type { AdapterRequest, ToolDefinition } from '@agentskit/core'\n\n/**\n * Serializes an `AdapterRequest` as clearly labelled prompt blocks for\n * agentic CLIs (Claude Code, Codex, ...) that read a natural-language prompt\n * from stdin.\n *\n * The generic `createCliAdapter` default writes the raw `AdapterRequest` JSON\n * to stdin, which is the right contract for a purpose-built CLI but is\n * hostile to agentic CLIs: Claude Code, for example, treats a raw JSON blob\n * containing `systemPrompt` as a prompt-injection attempt and refuses it.\n * First-party manifests for those CLIs use this serializer instead; the\n * Claude Code manifests go further and pass system instructions through\n * `--append-system-prompt` (`claudeCodeRequestArgs`) with `serializeCliMessages`\n * on stdin, because Claude Code also flags labelled `[system]`/`[tools]`\n * blocks inside the user prompt.\n *\n * Output shape:\n *\n * ```text\n * [system]\n * ...system prompt...\n *\n * [tools]\n * ...JSON list of tool definitions + response contract...\n *\n * [user]\n * ...\n *\n * [assistant]\n * ...\n * ```\n */\nexport function serializeCliPrompt(request: AdapterRequest, options: SerializeCliPromptOptions = {}): string {\n const blocks: string[] = []\n const system = request.context?.systemPrompt\n if (options.system !== false && system) blocks.push(`[system]\\n${system}`)\n const tools = request.context?.tools\n if (options.tools !== false && tools && tools.length > 0) blocks.push(`[tools]\\n${describeTools(tools)}`)\n const messages = request.messages.filter(message => message.role !== 'system' || options.system !== false)\n if (blocks.length === 0 && messages.length === 1 && messages[0]!.role === 'user') return `${messages[0]!.content}\\n`\n for (const message of messages) blocks.push(`[${message.role}]\\n${message.content}`)\n return `${blocks.join('\\n\\n')}\\n`\n}\n\nexport interface SerializeCliPromptOptions {\n /** Include the `[system]` block and `system` messages. Default `true`. */\n system?: boolean\n /** Include the `[tools]` block. Default `true`. */\n tools?: boolean\n}\n\n/**\n * Conversation-only serializer for CLIs that take the system prompt through\n * argv (see `buildCliSystemPrompt`). A single user message is written bare;\n * multi-turn conversations use `[user]`/`[assistant]`/`[tool]` blocks.\n */\nexport function serializeCliMessages(request: AdapterRequest): string {\n return serializeCliPrompt(request, { system: false, tools: false })\n}\n\n/**\n * System instructions for a request: the system prompt plus, when tools are\n * present, the tool list and the JSON tool-call contract. Returns `undefined`\n * when the request carries neither. Intended for CLIs with a system-prompt\n * flag; Claude Code treats the same text inside the user prompt as an\n * injection attempt.\n */\nexport function buildCliSystemPrompt(request: AdapterRequest): string | undefined {\n const parts: string[] = []\n if (request.context?.systemPrompt) parts.push(request.context.systemPrompt)\n const tools = request.context?.tools\n if (tools && tools.length > 0) parts.push(describeTools(tools))\n return parts.length > 0 ? parts.join('\\n\\n') : undefined\n}\n\n/** Extra `claude -p` argv: `--append-system-prompt` when the request has system instructions or tools. */\nexport function claudeCodeRequestArgs(request: AdapterRequest): readonly string[] {\n const system = buildCliSystemPrompt(request)\n return system ? ['--append-system-prompt', system] : []\n}\n\nconst TOOL_CONTRACT = [\n 'The application running you exposes the tools listed below; it executes them, not you.',\n 'To call one or more of them, reply with only a single JSON object',\n '{\"text\"?: string, \"toolCalls\": [{\"id\": string, \"name\": string, \"args\": string}]} where `args` is a JSON-encoded',\n 'string of the tool arguments and `id` is any unique string. When no tool call is needed, reply with plain text.',\n].join(' ')\n\nfunction describeTools(tools: readonly ToolDefinition[]): string {\n const definitions = tools.map(tool => ({ name: tool.name, description: tool.description, schema: tool.schema }))\n return `${TOOL_CONTRACT}\\n${JSON.stringify(definitions, null, 2)}`\n}\n","import type { StreamChunk } from '@agentskit/core'\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { parseCliJsonResponse } from './json'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction claudeCodeError(message: string, cause?: unknown): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause,\n hint: 'Run `claude -p --output-format json \"ping\"` manually to inspect the envelope emitted by the installed Claude Code version.',\n })\n}\n\nfunction number(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0\n}\n\nconst RESPONSE_KEYS = ['text', 'reasoning', 'toolCalls'] as const\n\nconst FENCE = '```'\n\n/** Strips a surrounding Markdown code fence (optionally tagged `json`) without regular expressions. */\nfunction unfence(text: string): string {\n if (!text.startsWith(FENCE) || !text.endsWith(FENCE) || text.length < FENCE.length * 2) return text\n let inner = text.slice(FENCE.length, text.length - FENCE.length)\n if (inner.startsWith('json')) inner = inner.slice('json'.length)\n return inner.trim()\n}\n\n/**\n * Returns the AgentsKit CLI JSON response object embedded in a Claude Code\n * `result` string, or `undefined` when the result is plain prose.\n */\nfunction embeddedResponse(result: string): Record<string, unknown> | undefined {\n const candidate = unfence(result.trim())\n if (!candidate.startsWith('{') || !candidate.endsWith('}')) return undefined\n let value: unknown\n try {\n value = JSON.parse(candidate)\n } catch {\n return undefined\n }\n if (!isRecord(value) || !RESPONSE_KEYS.some(key => key in value)) return undefined\n return value\n}\n\n/**\n * Maps one `claude -p --output-format json` envelope to normalized stream\n * chunks. Used by the `claude-code-json` manifest with `createJsonCliAdapter`.\n *\n * - `result` becomes a `text` chunk. When the result is itself a JSON object\n * following the `CliJsonResponse` shape (`text`, `reasoning`, `toolCalls`),\n * for instance because the prompt carried a `[tools]` block, it is parsed\n * with `parseCliJsonResponse` so tool calls surface as `tool_call` chunks.\n * - `structured_output` (from `--json-schema`) is preferred over `result`\n * when it follows the same shape; otherwise it is emitted as JSON text.\n * - `usage.input_tokens` (+ cache tokens) and `usage.output_tokens` become a\n * `usage` chunk; `session_id`, `total_cost_usd`, `duration_ms`, and\n * `num_turns` are attached as metadata on the last chunk.\n * - `is_error: true` or a non-`success` subtype fails closed.\n */\nexport function parseClaudeCodeJsonResponse(value: unknown): readonly StreamChunk[] {\n if (!isRecord(value) || value.type !== 'result') throw claudeCodeError('Claude Code JSON output must be a `result` envelope')\n const result = typeof value.result === 'string' ? value.result : ''\n if (value.is_error === true || (typeof value.subtype === 'string' && value.subtype !== 'success')) {\n throw claudeCodeError(`Claude Code returned ${String(value.subtype ?? 'error')}${result ? `: ${result}` : ''}`)\n }\n const chunks: StreamChunk[] = []\n const structured = isRecord(value.structured_output) ? value.structured_output : undefined\n if (structured && RESPONSE_KEYS.some(key => key in structured)) {\n chunks.push(...parseCliJsonResponse(structured))\n } else if (structured) {\n chunks.push({ type: 'text', content: JSON.stringify(structured) })\n } else {\n const embedded = embeddedResponse(result)\n if (embedded) chunks.push(...parseCliJsonResponse(embedded))\n else if (result) chunks.push({ type: 'text', content: result })\n }\n if (isRecord(value.usage)) {\n const promptTokens = number(value.usage.input_tokens) + number(value.usage.cache_creation_input_tokens) + number(value.usage.cache_read_input_tokens)\n const completionTokens = number(value.usage.output_tokens)\n chunks.push({ type: 'usage', usage: { promptTokens, completionTokens, totalTokens: promptTokens + completionTokens } })\n }\n if (chunks.length === 0) throw claudeCodeError('Claude Code JSON output contains no semantic output')\n const metadata: Record<string, unknown> = {}\n for (const key of ['session_id', 'total_cost_usd', 'duration_ms', 'num_turns', 'subtype'] as const) {\n if (value[key] !== undefined) metadata[key] = value[key]\n }\n const last = chunks[chunks.length - 1]!\n chunks[chunks.length - 1] = { ...last, metadata: { ...last.metadata, ...metadata } }\n return chunks\n}\n\n/**\n * Decodes Claude Code stdout before `parseClaudeCodeJsonResponse`. Claude\n * Code prints a single JSON object, but a leading warning line or trailing\n * whitespace is tolerated by taking the last complete JSON object.\n */\nexport function parseClaudeCodeJsonOutput(stdout: string): unknown {\n const trimmed = stdout.trim()\n try {\n return JSON.parse(trimmed)\n } catch (error) {\n const start = trimmed.lastIndexOf('\\n{')\n if (start < 0) throw claudeCodeError(`Claude Code stdout is not a JSON envelope: ${error instanceof Error ? error.message : String(error)}`, error)\n return JSON.parse(trimmed.slice(start + 1))\n }\n}\n","import { AdapterError, ErrorCodes, type AdapterCapabilities, type AdapterRequest } from '@agentskit/core'\nimport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nimport { diagnoseCliProvider } from './process'\nimport { claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nimport type {\n CliAdapterOptions,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliProcessOptions,\n CliProtocol,\n CliSecurityMode,\n} from './types'\n\n/**\n * A CLI provider manifest for protocol `P`. `capabilities` is restricted to\n * `CliCapabilitiesFor<P>`, so an `exec-text` manifest cannot declare\n * `structuredOutput` and a consumer cannot request `tools` from it: both are\n * compile-time errors, mirroring the runtime `validateCliProviderManifest`.\n */\nexport interface CliProviderManifestFor<P extends CliProtocol = CliProtocol> {\n id: string\n name: string\n command: string\n args: readonly string[]\n diagnosticArgs: readonly string[]\n protocol: P\n protocolVersion?: 1\n capabilities: CliCapabilitiesFor<P>\n supportedModes: readonly CliSecurityMode[]\n credentialEnv?: readonly string[]\n docsUrl?: string\n versionPattern?: string\n /**\n * Serializes the request written to the CLI's stdin. Agentic CLIs that read\n * a natural-language prompt use `serializeCliPrompt`; omit it to write the\n * raw `AdapterRequest` JSON.\n */\n serializeRequest?: CliAdapterOptions['serializeRequest']\n /**\n * Extra per-request argv appended after `args` and `CliManifestOptions.args`,\n * e.g. `--append-system-prompt` for Claude Code. Still spawned without a shell.\n */\n requestArgs?: (request: AdapterRequest) => readonly string[]\n /** `exec-json` only: decodes raw stdout before `parse`. */\n parseOutput?: CliJsonAdapterOptions['parseOutput']\n /** `exec-json` only: maps the decoded JSON value to stream chunks. */\n parse?: CliJsonAdapterOptions['parse']\n}\n\n/** Discriminated by `protocol`; see `CliProviderManifestFor`. */\nexport type CliProviderManifest =\n | CliProviderManifestFor<'exec-text'>\n | CliProviderManifestFor<'exec-json'>\n | CliProviderManifestFor<'acp'>\n\n/** Protocol of each built-in manifest id, used to type `getCliProviderManifest`. */\nexport interface BuiltInCliManifestProtocols {\n codex: 'exec-text'\n 'claude-code': 'exec-text'\n 'claude-code-json': 'exec-json'\n grok: 'acp'\n opencode: 'acp'\n}\nexport type BuiltInCliManifestId = keyof BuiltInCliManifestProtocols\n\nexport interface CliManifestOptions<P extends CliProtocol = CliProtocol> {\n args?: readonly string[]\n mode?: CliSecurityMode\n cwd?: string\n env?: Readonly<Record<string, string | undefined>>\n timeoutMs?: number\n maxOutputBytes?: number\n killGraceMs?: number\n onDiagnostic?: CliProcessOptions['onDiagnostic']\n /** Only capabilities the manifest's protocol can deliver are accepted. */\n requiredCapabilities?: CliCapabilitiesFor<P>\n}\n\nconst MODES: readonly CliSecurityMode[] = ['review-safe', 'trusted-local', 'restricted-environment']\nconst CAPABILITIES = new Set<keyof CliCapabilityRequirements>([\n 'streaming', 'structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal', 'nativeAuth',\n])\n\nconst manifests: readonly CliProviderManifest[] = [\n {\n id: 'codex',\n name: 'OpenAI Codex CLI',\n command: 'codex',\n args: ['exec'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['OPENAI_API_KEY', 'CODEX_API_KEY'],\n docsUrl: 'https://github.com/openai/codex',\n serializeRequest: serializeCliPrompt,\n },\n {\n // Plain-text transport: streams Claude Code's final answer as text.\n // No structured output, reasoning, or tool calls; use `claude-code-json`\n // for those.\n id: 'claude-code',\n name: 'Claude Code',\n command: 'claude',\n args: ['-p'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-text',\n capabilities: { streaming: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n },\n {\n // Structured transport: one `claude -p --output-format json` envelope per\n // request, parsed into text, tool_call, and usage chunks. Not streaming.\n id: 'claude-code-json',\n name: 'Claude Code (JSON output)',\n command: 'claude',\n args: ['-p', '--output-format', 'json'],\n diagnosticArgs: ['--version'],\n protocol: 'exec-json',\n capabilities: { structuredOutput: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['ANTHROPIC_API_KEY'],\n docsUrl: 'https://docs.anthropic.com/en/docs/claude-code/cli-usage',\n serializeRequest: serializeCliMessages,\n requestArgs: claudeCodeRequestArgs,\n parseOutput: parseClaudeCodeJsonOutput,\n parse: parseClaudeCodeJsonResponse,\n },\n {\n id: 'grok',\n name: 'Grok CLI',\n command: 'grok',\n args: ['agent', 'stdio'],\n diagnosticArgs: ['version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true, nativeAuth: true },\n supportedModes: MODES,\n credentialEnv: ['XAI_API_KEY'],\n docsUrl: 'https://docs.x.ai/build/cli/headless-scripting',\n },\n {\n id: 'opencode',\n name: 'OpenCode',\n command: 'opencode',\n args: ['acp'],\n diagnosticArgs: ['--version'],\n protocol: 'acp',\n protocolVersion: 1,\n capabilities: { streaming: true, structuredOutput: true, reasoning: true },\n supportedModes: MODES,\n docsUrl: 'https://opencode.ai/docs/cli/',\n },\n]\n\nfunction manifestError(message: string): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n hint: 'Declare an explicit CLI manifest with a supported protocol, mode, and capability set.',\n })\n}\n\nfunction nonEmpty(value: string, label: string): void {\n if (!value.trim() || value.includes('\\0')) throw manifestError(`CLI manifest ${label} must be a non-empty string without null bytes`)\n}\n\nfunction validateArgs(values: readonly string[], label: string): void {\n for (const value of values) {\n if (value.includes('\\0')) throw manifestError(`CLI manifest ${label} contains a null byte`)\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction validateCapabilities(manifest: CliProviderManifest): void {\n const declared: CliCapabilityRequirements = manifest.capabilities\n for (const capability of Object.keys(declared) as Array<keyof CliCapabilityRequirements>) {\n if (!CAPABILITIES.has(capability)) throw manifestError(`CLI manifest declares unknown capability: ${capability}`)\n if (declared[capability] !== true) throw manifestError(`CLI manifest capability ${capability} must be true or omitted`)\n }\n const unsupportedByProtocol: Record<CliProtocol, readonly (keyof CliCapabilityRequirements)[]> = {\n 'exec-text': ['structuredOutput', 'reasoning', 'tools', 'mcp', 'plugins', 'terminal'],\n 'exec-json': ['streaming', 'tools', 'mcp', 'plugins', 'terminal'],\n acp: ['tools', 'mcp', 'plugins', 'terminal'],\n }\n for (const capability of unsupportedByProtocol[manifest.protocol]) {\n if (declared[capability] === true) throw manifestError(`CLI manifest ${manifest.id} declares unsupported ${capability} for ${manifest.protocol}`)\n }\n}\n\nexport function validateCliProviderManifest(manifest: unknown): asserts manifest is CliProviderManifest {\n if (!isRecord(manifest)) throw manifestError('CLI manifest must be an object')\n if (typeof manifest.id !== 'string' || typeof manifest.name !== 'string' || typeof manifest.command !== 'string') {\n throw manifestError('CLI manifest id, name, and command must be strings')\n }\n if (!Array.isArray(manifest.args) || !manifest.args.every(value => typeof value === 'string') || !Array.isArray(manifest.diagnosticArgs) || !manifest.diagnosticArgs.every(value => typeof value === 'string')) {\n throw manifestError('CLI manifest args and diagnosticArgs must be string arrays')\n }\n if (manifest.protocol !== 'exec-text' && manifest.protocol !== 'exec-json' && manifest.protocol !== 'acp') {\n throw manifestError('CLI manifest protocol is unsupported')\n }\n if (!isRecord(manifest.capabilities) || !Array.isArray(manifest.supportedModes)) throw manifestError('CLI manifest capabilities and supportedModes are required')\n if (!manifest.supportedModes.every(value => typeof value === 'string')) throw manifestError('CLI manifest supportedModes must be a string array')\n const candidate = manifest as unknown as CliProviderManifest\n nonEmpty(candidate.id, 'id')\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(candidate.id)) throw manifestError(`CLI manifest id is invalid: ${candidate.id}`)\n nonEmpty(candidate.name, 'name')\n nonEmpty(candidate.command, 'command')\n validateArgs(candidate.args, 'args')\n validateArgs(candidate.diagnosticArgs, 'diagnosticArgs')\n if (candidate.protocolVersion !== undefined && candidate.protocolVersion !== 1) throw manifestError(`CLI manifest ${candidate.id} uses an unsupported protocol version`)\n if (candidate.supportedModes.length === 0 || !candidate.supportedModes.includes('review-safe')) throw manifestError(`CLI manifest ${candidate.id} must support review-safe mode`)\n for (const mode of candidate.supportedModes) {\n if (!MODES.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} declares an unknown mode: ${mode}`)\n }\n if (candidate.credentialEnv !== undefined && (!Array.isArray(candidate.credentialEnv) || !candidate.credentialEnv.every(value => typeof value === 'string'))) throw manifestError(`CLI manifest ${candidate.id} credentialEnv must be a string array`)\n for (const name of candidate.credentialEnv ?? []) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) throw manifestError(`CLI manifest ${candidate.id} declares an invalid credential environment variable`)\n }\n if (candidate.versionPattern !== undefined) {\n if (typeof candidate.versionPattern !== 'string') throw manifestError(`CLI manifest ${candidate.id} versionPattern must be a string`)\n try { new RegExp(candidate.versionPattern) } catch (error) { throw manifestError(`CLI manifest ${candidate.id} has an invalid version pattern: ${String(error)}`) }\n }\n if (candidate.docsUrl !== undefined && typeof candidate.docsUrl !== 'string') throw manifestError(`CLI manifest ${candidate.id} docsUrl must be a string`)\n for (const key of ['serializeRequest', 'requestArgs', 'parseOutput', 'parse'] as const) {\n if (candidate[key] !== undefined && typeof candidate[key] !== 'function') throw manifestError(`CLI manifest ${candidate.id} ${key} must be a function`)\n if ((key === 'parseOutput' || key === 'parse') && candidate[key] !== undefined && candidate.protocol !== 'exec-json') {\n throw manifestError(`CLI manifest ${candidate.id} declares ${key}, which only applies to the exec-json protocol`)\n }\n }\n validateCapabilities(candidate)\n}\n\nexport function listCliProviderManifests(): CliProviderManifest[] {\n return manifests.map((manifest): CliProviderManifest => ({\n ...manifest,\n args: [...manifest.args],\n diagnosticArgs: [...manifest.diagnosticArgs],\n capabilities: { ...manifest.capabilities },\n supportedModes: [...manifest.supportedModes],\n credentialEnv: manifest.credentialEnv ? [...manifest.credentialEnv] : undefined,\n }))\n}\n\n/** Built-in ids resolve to their protocol-specific manifest type; unknown ids to the union. */\nexport function getCliProviderManifest<Id extends string>(\n id: Id,\n): (Id extends BuiltInCliManifestId ? CliProviderManifestFor<BuiltInCliManifestProtocols[Id]> : CliProviderManifest) | undefined {\n return listCliProviderManifests().find(manifest => manifest.id === id) as ReturnType<typeof getCliProviderManifest<Id>>\n}\n\nexport function resolveCliManifest<M extends CliProviderManifest>(manifest: M, options: CliManifestOptions<M['protocol']> = {}): CliJsonAdapterOptions {\n validateCliProviderManifest(manifest)\n const mode = options.mode ?? 'review-safe'\n if (!manifest.supportedModes.includes(mode)) throw manifestError(`CLI manifest ${manifest.id} does not support mode: ${mode}`)\n const args = [...manifest.args, ...(options.args ?? [])]\n const requestArgs = manifest.requestArgs\n return {\n command: manifest.command,\n args,\n buildArgs: requestArgs ? (request: AdapterRequest) => [...args, ...requestArgs(request)] : undefined,\n mode,\n cwd: options.cwd,\n env: options.env,\n timeoutMs: options.timeoutMs,\n maxOutputBytes: options.maxOutputBytes,\n killGraceMs: options.killGraceMs,\n providerId: manifest.id,\n protocol: manifest.protocol,\n onDiagnostic: options.onDiagnostic,\n requiredCapabilities: options.requiredCapabilities,\n serializeRequest: manifest.serializeRequest,\n parseOutput: manifest.parseOutput,\n parse: manifest.parse,\n }\n}\n\nfunction adapterCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n const { streaming, structuredOutput, reasoning, tools }: CliCapabilityRequirements = manifest.capabilities\n return { streaming, structuredOutput, reasoning, tools, extensions: { cli: { provider: manifest.id, protocol: manifest.protocol } } }\n}\n\nexport async function diagnoseCliProviderManifest<M extends CliProviderManifest>(\n manifest: M,\n options: Omit<CliManifestOptions<M['protocol']>, 'args'> = {},\n): Promise<CliDiagnostic> {\n validateCliProviderManifest(manifest)\n const diagnostic = await diagnoseCliProvider({\n ...resolveCliManifest(manifest, options),\n diagnosticArgs: manifest.diagnosticArgs,\n })\n if (diagnostic.available && manifest.versionPattern && !new RegExp(manifest.versionPattern).test(diagnostic.version ?? '')) {\n return { ...diagnostic, available: false, error: `CLI version does not match manifest ${manifest.id}` }\n }\n return diagnostic\n}\n\nexport function manifestCapabilities(manifest: CliProviderManifest): AdapterCapabilities {\n validateCliProviderManifest(manifest)\n return adapterCapabilities(manifest)\n}\n","import { AdapterError, ErrorCodes, type AdapterFactory, type AdapterRequest, type AdapterCapabilities, type StreamChunk, type StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from '../stream-errors'\nimport { abortableWrite, readCliOutputFile, readCliStdout, spawnCliProcess, writeCliInput } from './process'\nimport { cliError, isRecord, parseCliJsonResponse as standardJsonParser } from './json'\nexport { parseCliJsonResponse } from './json'\nexport { buildCliSystemPrompt, claudeCodeRequestArgs, serializeCliMessages, serializeCliPrompt } from './prompt'\nexport type { SerializeCliPromptOptions } from './prompt'\nexport { parseClaudeCodeJsonOutput, parseClaudeCodeJsonResponse } from './claude-code'\nexport { diagnoseCliProviderManifest, getCliProviderManifest, listCliProviderManifests, manifestCapabilities, resolveCliManifest, validateCliProviderManifest } from './manifests'\nimport type {\n AcpCliAdapterOptions,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliJsonAdapterOptions,\n CliProtocol,\n CliProcessOptions,\n} from './types'\nexport type { BuiltInCliManifestId, BuiltInCliManifestProtocols, CliManifestOptions, CliProviderManifest, CliProviderManifestFor } from './manifests'\nexport { diagnoseCliProvider } from './process'\nexport type {\n AcpCliAdapterOptions,\n AcpClientInfo,\n CliCapabilitiesFor,\n CliCapabilityRequirements,\n CliAdapterOptions,\n CliDiagnostic,\n CliJsonAdapterOptions,\n CliJsonParser,\n CliJsonResponse,\n CliProtocol,\n CliProtocolCapabilityKeys,\n CliProcessOptions,\n CliSecurityMode,\n CliTerminationReason,\n CliToolCall,\n} from './types'\n\nconst defaultSerialize = (request: AdapterRequest): string => `${JSON.stringify(request)}\\n`\nfunction createFactory(\n capabilities: AdapterCapabilities,\n run: (request: AdapterRequest, signal: AbortSignal) => AsyncIterableIterator<StreamChunk>,\n): AdapterFactory {\n return {\n capabilities,\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n yield* run(request, controller.signal)\n } catch (error) {\n if (isAbortError(error) || controller.signal.aborted) return\n yield adapterErrorChunk(error instanceof Error ? error.message : String(error), { cause: error })\n }\n },\n abort: () => controller.abort(),\n }\n },\n }\n}\nfunction mergeCapabilities(base: AdapterCapabilities, override?: AdapterCapabilities): AdapterCapabilities {\n return {\n ...base,\n ...override,\n extensions: { ...base.extensions, ...override?.extensions },\n }\n}\nfunction capabilityError(capability: string, protocol: CliProtocol): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `CLI protocol ${protocol} does not support required capability: ${capability}`,\n hint: 'Use a provider manifest with a compatible protocol or remove the unsupported requirement.',\n })\n}\n\nfunction preflightCli(options: CliProcessOptions, protocol: CliProtocol): void {\n const required: CliCapabilityRequirements = options.requiredCapabilities ?? {}\n const supported: Record<string, boolean> = {\n streaming: protocol !== 'exec-json',\n structuredOutput: protocol !== 'exec-text',\n reasoning: protocol !== 'exec-text',\n tools: false,\n mcp: false,\n plugins: false,\n terminal: false,\n nativeAuth: (options.mode ?? 'review-safe') === 'trusted-local',\n }\n for (const [capability, requested] of Object.entries(required)) {\n if (requested === true && supported[capability] !== true) throw capabilityError(capability, protocol)\n }\n}\n\nasync function closeProcess(handle: ReturnType<typeof spawnCliProcess>): Promise<void> {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n}\n\nasync function* runText(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-text')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-text' }, signal)\n const decoder = new TextDecoder()\n let emitted = false\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) {\n const text = decoder.decode(bytes, { stream: true })\n if (text) {\n emitted = true\n yield { type: 'text', content: text }\n }\n }\n const trailing = decoder.decode()\n if (trailing) {\n emitted = true\n yield { type: 'text', content: trailing }\n }\n if (options.outputFile) {\n const output = await readCliOutputFile(options.outputFile, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)\n if (!output) throw cliError('CLI output file was empty')\n yield { type: 'text', content: output }\n } else if (!emitted) throw cliError('CLI returned an empty text response')\n yield { type: 'done' }\n } finally {\n await closeProcess(handle)\n }\n}\n\nfunction normalizeJsonChunks(chunks: readonly StreamChunk[]): StreamChunk[] {\n if (chunks.length === 0) throw cliError('CLI JSON parser returned no chunks')\n if (chunks.some(chunk => !isStreamChunk(chunk))) throw cliError('CLI JSON parser returned an invalid stream chunk')\n const terminalIndexes = chunks.flatMap((chunk, index) => chunk.type === 'done' || chunk.type === 'error' ? [index] : [])\n if (terminalIndexes.length > 1 || (terminalIndexes.length === 1 && terminalIndexes[0] !== chunks.length - 1)) {\n throw cliError('CLI JSON parser returned an invalid terminal sequence')\n }\n const last = chunks[chunks.length - 1]\n return last.type === 'done' || last.type === 'error' ? [...chunks] : [...chunks, { type: 'done' }]\n}\n\nfunction isStreamChunk(value: unknown): value is StreamChunk {\n return isRecord(value) && typeof value.type === 'string' && new Set([\n 'text', 'tool_call', 'tool_result', 'reasoning', 'usage', 'error', 'done',\n ]).has(value.type)\n}\n\nasync function* runJson(\n request: AdapterRequest,\n signal: AbortSignal,\n options: CliJsonAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n preflightCli(options, 'exec-json')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'exec-json' }, signal)\n const decoder = new TextDecoder()\n let output = ''\n try {\n writeCliInput(handle, (options.serializeRequest ?? defaultSerialize)(request))\n for await (const bytes of readCliStdout(handle, signal, options.maxOutputBytes)) output += decoder.decode(bytes, { stream: true })\n output += decoder.decode()\n let value: unknown\n try {\n value = (options.parseOutput ?? JSON.parse)(output)\n } catch (error) {\n throw cliError(`CLI returned malformed JSON: ${error instanceof Error ? error.message : String(error)}`, error)\n }\n const chunks = normalizeJsonChunks((options.parse ?? standardJsonParser)(value))\n for (const chunk of chunks) yield chunk\n } finally {\n await closeProcess(handle)\n }\n}\n\ninterface AcpResponse {\n kind: 'response'\n id: string | number | null\n result?: unknown\n error?: { code?: number; message?: string }\n}\n\ninterface AcpNotification {\n kind: 'notification'\n method: string\n params?: unknown\n}\n\ninterface AcpRequest {\n kind: 'request'\n method: string\n}\n\ntype AcpMessage = AcpResponse | AcpNotification | AcpRequest\n\nfunction parseAcpMessage(value: unknown): AcpMessage {\n if (!isRecord(value) || value.jsonrpc !== '2.0') throw cliError('ACP message must be a JSON-RPC 2.0 object')\n if (typeof value.method === 'string') {\n if (value.id === undefined) return { kind: 'notification', method: value.method, params: value.params }\n return { kind: 'request', method: value.method }\n }\n if (typeof value.id === 'string' || typeof value.id === 'number' || value.id === null) {\n if (value.error !== undefined && !isRecord(value.error)) throw cliError('ACP error response is malformed')\n return { kind: 'response', id: value.id, result: value.result, error: value.error as AcpResponse['error'] }\n }\n throw cliError('ACP message has no method or response id')\n}\n\nasync function* readAcpMessages(handle: ReturnType<typeof spawnCliProcess>, signal: AbortSignal, maxOutputBytes: number): AsyncIterableIterator<AcpMessage> {\n const decoder = new TextDecoder()\n let buffer = ''\n let bytesRead = 0\n for await (const chunk of handle.child.stdout as AsyncIterable<Buffer>) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n bytesRead += chunk.byteLength\n if (bytesRead > maxOutputBytes) {\n handle.terminate('output-limit')\n throw cliError('ACP output exceeded the configured limit')\n }\n buffer += decoder.decode(chunk, { stream: true })\n let newline = buffer.indexOf('\\n')\n while (newline >= 0) {\n const line = buffer.slice(0, newline).trim()\n buffer = buffer.slice(newline + 1)\n if (line) yield parseAcpMessage(JSON.parse(line) as unknown)\n newline = buffer.indexOf('\\n')\n }\n }\n buffer += decoder.decode()\n if (buffer.trim()) yield parseAcpMessage(JSON.parse(buffer.trim()) as unknown)\n}\n\nfunction acpRequest(id: string, method: string, params: Record<string, unknown>): string {\n return `${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\\n`\n}\n\nasync function nextAcpResponse(\n iterator: AsyncIterator<AcpMessage>,\n id: string,\n): Promise<AcpResponse> {\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError(`ACP process closed before response ${id}`)\n if (next.value.kind === 'response' && next.value.id === id) {\n if (next.value.error) throw cliError(`ACP request failed: ${next.value.error.message ?? 'unknown error'}`)\n return next.value\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n }\n}\n\nfunction promptText(request: AdapterRequest, options: AcpCliAdapterOptions): string {\n if (options.toPrompt) return options.toPrompt(request)\n const system = request.context?.systemPrompt ? `[system]\\n${request.context.systemPrompt}\\n\\n` : ''\n return system + request.messages.map(message => `[${message.role}]\\n${message.content}`).join('\\n\\n')\n}\n\nfunction acpUpdateChunk(params: unknown, sessionId: string): StreamChunk | undefined {\n if (!isRecord(params) || params.sessionId !== sessionId || !isRecord(params.update)) return undefined\n const update = params.update\n if (update.sessionUpdate === 'agent_message_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'text', content: update.content.text }\n }\n if (update.sessionUpdate === 'agent_thought_chunk' && isRecord(update.content) && update.content.type === 'text' && typeof update.content.text === 'string') {\n return { type: 'reasoning', content: update.content.text }\n }\n if (update.sessionUpdate === 'tool_call' || update.sessionUpdate === 'tool_call_update') {\n throw cliError('ACP tool calls require an explicit client tool policy and are unsupported in this transport')\n }\n return undefined\n}\n\nasync function* runAcp(\n request: AdapterRequest,\n signal: AbortSignal,\n options: AcpCliAdapterOptions,\n): AsyncIterableIterator<StreamChunk> {\n if ((options.protocolVersion ?? 1) !== 1) throw cliError('Only ACP protocol version 1 is supported')\n preflightCli(options, 'acp')\n const handle = spawnCliProcess({ ...options, args: options.buildArgs?.(request) ?? options.args, protocol: 'acp' }, signal)\n const iterator = readAcpMessages(handle, signal, options.maxOutputBytes ?? 8 * 1024 * 1024)[Symbol.asyncIterator]()\n let sequence = 0\n const nextId = (): string => `agentskit-${++sequence}`\n try {\n const initializeId = nextId()\n await abortableWrite(handle, acpRequest(initializeId, 'initialize', {\n protocolVersion: 1,\n clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false, auth: { terminal: false } },\n clientInfo: options.clientInfo ?? { name: '@agentskit/adapters', version: '0.16.0' },\n }), signal)\n const initialize = await nextAcpResponse(iterator, initializeId)\n if (!isRecord(initialize.result) || initialize.result.protocolVersion !== 1) throw cliError('ACP agent did not negotiate protocol version 1')\n\n const sessionIdRequest = nextId()\n await abortableWrite(handle, acpRequest(sessionIdRequest, 'session/new', {\n cwd: options.cwd ?? process.cwd(),\n mcpServers: [],\n }), signal)\n const sessionResponse = await nextAcpResponse(iterator, sessionIdRequest)\n if (!isRecord(sessionResponse.result) || typeof sessionResponse.result.sessionId !== 'string') throw cliError('ACP session/new response has no sessionId')\n const sessionId = sessionResponse.result.sessionId\n\n const promptId = nextId()\n await abortableWrite(handle, acpRequest(promptId, 'session/prompt', {\n sessionId,\n prompt: [{ type: 'text', text: promptText(request, options) }],\n }), signal)\n let emitted = false\n while (true) {\n const next = await iterator.next()\n if (next.done) throw cliError('ACP process closed before session/prompt completed')\n if (next.value.kind === 'response' && next.value.id === promptId) {\n if (next.value.error) throw cliError(`ACP prompt failed: ${next.value.error.message ?? 'unknown error'}`)\n if (!isRecord(next.value.result) || next.value.result.stopReason !== 'end_turn') throw cliError('ACP prompt did not complete with end_turn')\n break\n }\n if (next.value.kind === 'request') throw cliError(`ACP agent request is unsupported in this adapter: ${next.value.method}`)\n if (next.value.kind === 'notification' && next.value.method === 'session/update') {\n const chunk = acpUpdateChunk(next.value.params, sessionId)\n if (chunk) {\n emitted = true\n yield chunk\n }\n }\n }\n if (!emitted) throw cliError('ACP prompt completed without semantic output')\n yield { type: 'done' }\n } finally {\n handle.terminate()\n await handle.completion.catch(() => undefined)\n }\n}\n\nexport function createCliAdapter(options: CliAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: true,\n tools: false,\n structuredOutput: false,\n extensions: { cli: { protocol: 'exec-text', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runText(request, signal, options))\n}\n\nexport function createJsonCliAdapter(options: CliJsonAdapterOptions): AdapterFactory {\n return createFactory(mergeCapabilities({\n streaming: false,\n tools: false,\n structuredOutput: true,\n extensions: { cli: { protocol: 'exec-json', mode: options.mode ?? 'review-safe' } },\n }, options.capabilities), (request, signal) => runJson(request, signal, options))\n}\n\nexport function createAcpCliAdapter(options: AcpCliAdapterOptions): AdapterFactory {\n return createFactory({\n streaming: true,\n tools: false,\n reasoning: true,\n structuredOutput: true,\n extensions: { cli: { protocol: 'acp', protocolVersion: options.protocolVersion ?? 1, mode: options.mode ?? 'review-safe' } },\n }, (request, signal) => runAcp(request, signal, options))\n}\n\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentskit/adapters",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.2",
|
|
4
4
|
"description": "Provider adapters for AgentsKit.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentskit",
|
|
@@ -68,10 +68,11 @@
|
|
|
68
68
|
"dev": "tsup --watch"
|
|
69
69
|
},
|
|
70
70
|
"dependencies": {
|
|
71
|
-
"@agentskit/core": "1.12.10"
|
|
71
|
+
"@agentskit/core": "1.12.10",
|
|
72
|
+
"@agentskit/cross-platform": "0.1.0"
|
|
72
73
|
},
|
|
73
74
|
"devDependencies": {
|
|
74
|
-
"@agentskit/tools": "0.13.
|
|
75
|
+
"@agentskit/tools": "0.13.10",
|
|
75
76
|
"@langchain/core": "^1.2.11",
|
|
76
77
|
"@types/json-schema": "^7.0.15",
|
|
77
78
|
"@types/node": "^25.9.5",
|