@agentproto/driver-agent-cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-YQHVLX6O.mjs → chunk-KHHRPQ2Q.mjs} +379 -41
- package/dist/chunk-KHHRPQ2Q.mjs.map +1 -0
- package/dist/index.d.ts +193 -13
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/manifest/index.d.ts +2 -2
- package/dist/manifest/index.mjs +2 -2
- package/dist/{schema-CCSzIDMJ.d.ts → schema-Ds8jc9fL.d.ts} +136 -2
- package/package.json +2 -2
- package/dist/chunk-YQHVLX6O.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema.ts","../src/protocol/acp-client.ts","../src/protocol/print-arm.ts","../src/manifest/compose.ts","../src/define-agent-cli.ts"],"names":["spawn"],"mappings":"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","file":"chunk-YQHVLX6O.mjs","sourcesContent":["/**\n * AIP-45 AGENT-CLI.md frontmatter zod schema.\n *\n * Mirrors `resources/aip-45/draft/AGENT-CLI.schema.json`. AIP-45 is a\n * sibling of AIP-29 (CLI.md, tool CLIs) covering interactive\n * agent-as-process binaries. The `protocol` discriminator (acp / mcp\n * / proprietary) selects the wire arm; cross-field rules ensure the\n * matching arm-specific block is present.\n *\n * Both authoring paths (`define-agent-cli.ts` and\n * `manifest/index.ts`) validate against this schema, so every\n * field-level constraint runs in both paths from a single source of\n * truth.\n */\n\nimport { z } from \"zod\"\n\nconst ID_PATTERN = /^[a-z0-9][a-z0-9-]{1,63}$/\nconst SEMVER_PATTERN = /^\\d+\\.\\d+\\.\\d+(?:[-+][\\w.-]+)?$/\nconst TAG_PATTERN = /^[a-z0-9][a-z0-9-]{0,63}$/\nconst SEMVER_RANGE_PATTERN = /^[><=^~ \\d.\\-+\\w*xX|, ]+$/\nconst ADAPTER_PATTERN = /^@?[a-z0-9][a-z0-9-./]*$/\nconst BIN_PATTERN = /^[A-Za-z0-9._\\-/]+$/\nconst MODE_ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,63}$/\nconst OPTION_ID_PATTERN = /^[a-z0-9][a-z0-9_]{0,63}$/\n\nconst CONTINUATION_STRATEGY_IDS = [\n \"none\",\n \"pinned-session\",\n \"transcript\",\n \"native-resume\",\n] as const\n\nconst CONTINUATION_KEY_SCOPES = [\n \"conversation\",\n \"operator\",\n \"user\",\n \"guild\",\n \"workspace\",\n] as const\n\n// AIP-29 install methods, mirrored locally to avoid a runtime cross-package import.\n// Schema-level $ref to AIP-29 is preserved on the JSON Schema side\n// (resources/aip-45/draft/AGENT-CLI.schema.json); this zod copy is the\n// TS-side mirror used by `defineAgentCli`. When AIP-29 grows new\n// install methods, both sides update together via scaffold-aip.\n\nconst installMethodSchema = z.discriminatedUnion(\"method\", [\n z.object({ method: z.literal(\"brew\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"apt\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"dnf\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"pacman\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"choco\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"scoop\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"npm\"), package: z.string(), global: z.boolean().optional(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"pip\"), package: z.string(), user: z.boolean().optional(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"cargo\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({ method: z.literal(\"go\"), package: z.string(), experimental: z.boolean().optional() }).strict(),\n z.object({\n method: z.literal(\"curl\"),\n url: z.string().url(),\n verify_sha256: z.string().regex(/^[a-f0-9]{64}$/).optional(),\n experimental: z.boolean().optional(),\n }).strict(),\n z.object({\n method: z.literal(\"download\"),\n url: z.string().url(),\n extract_bin: z.string(),\n verify_sha256: z.string().regex(/^[a-f0-9]{64}$/).optional(),\n experimental: z.boolean().optional(),\n }).strict(),\n z.object({ method: z.literal(\"vendored\"), path: z.string(), experimental: z.boolean().optional() }).strict(),\n])\n\nconst versionCheckSchema = z.object({\n cmd: z.string(),\n parse: z.string().describe(\"ECMAScript regex with at least one capture group.\"),\n range: z.string().regex(SEMVER_RANGE_PATTERN).describe(\"npm-style semver range.\"),\n timeout_ms: z.number().int().min(100).default(5000),\n}).strict()\n\nconst SETUP_STEP_ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,63}$/\nconst SECRET_SLUG_PATTERN = /^([a-z][a-z0-9-]*[a-z0-9]\\/)?[a-z][a-z0-9-]*[a-z0-9]$/\n\n// `skip_if`: re-runnable health check that, when matching, skips the\n// enclosing setup step. Lets `agentproto setup <slug>` re-runs be\n// idempotent without external completion-ledger state.\nconst skipIfSchema = z\n .object({\n cmd: z.string(),\n exit_code: z.number().int().default(0),\n timeout_ms: z.number().int().min(100).default(5_000),\n })\n .strict()\n\n// `persist`: where the captured value lands so the runner can reuse\n// it on every spawn. Exactly one of env / secret_slug / cmd, enforced\n// via discriminated union.\nconst persistEnvSchema = z\n .object({ env: z.string().regex(/^[A-Z][A-Z0-9_]*$/) })\n .strict()\nconst persistSecretSchema = z\n .object({ secret_slug: z.string().regex(SECRET_SLUG_PATTERN).min(2).max(80) })\n .strict()\nconst persistCmdSchema = z.object({ cmd: z.string() }).strict()\nconst setupPersistSchema = z.union([\n persistEnvSchema,\n persistSecretSchema,\n persistCmdSchema,\n])\n\n// AIP-29 § Setup. Mirrors `resources/aip-29/draft/CLI.schema.json#/$defs/setupStep`.\n// The runner runs steps in declared order, persists completion per\n// (bundle.id, workspace.id, user.id), and surfaces `setup_required`\n// to headless callers when steps remain pending.\nconst setupStepSchema = z.discriminatedUnion(\"kind\", [\n z\n .object({\n id: z.string().regex(SETUP_STEP_ID_PATTERN),\n kind: z.literal(\"cmd\"),\n cmd: z.string(),\n description: z.string().max(2000).optional(),\n skip_if: skipIfSchema.optional(),\n timeout_ms: z.number().int().min(100).default(60_000),\n interactive: z.boolean().default(false),\n persist: setupPersistSchema.optional(),\n })\n .strict(),\n z\n .object({\n id: z.string().regex(SETUP_STEP_ID_PATTERN),\n kind: z.literal(\"prompt\"),\n prompt: z.string().min(1),\n description: z.string().max(2000).optional(),\n type: z.enum([\"text\", \"select\", \"boolean\", \"secret\"]).default(\"text\"),\n default: z.string().optional(),\n options: z\n .union([\n z.array(z.string().min(1)).min(1),\n z\n .object({\n cmd: z.string(),\n timeout_ms: z.number().int().min(100).default(30_000),\n })\n .strict(),\n ])\n .optional(),\n skip_if: skipIfSchema.optional(),\n persist: setupPersistSchema.optional(),\n })\n .strict(),\n z\n .object({\n id: z.string().regex(SETUP_STEP_ID_PATTERN),\n kind: z.literal(\"oauth\"),\n secret_slug: z.string().regex(SECRET_SLUG_PATTERN).min(2).max(80),\n description: z.string().max(2000).optional(),\n skip_if: skipIfSchema.optional(),\n })\n .strict(),\n z\n .object({\n id: z.string().regex(SETUP_STEP_ID_PATTERN),\n kind: z.literal(\"external\"),\n url: z.string().url(),\n description: z.string().max(2000).optional(),\n callback: z\n .object({\n param: z.string().min(1).optional(),\n timeout_ms: z.number().int().min(1_000).default(600_000),\n })\n .strict()\n .optional(),\n skip_if: skipIfSchema.optional(),\n persist: setupPersistSchema.optional(),\n })\n .strict(),\n])\n\nconst authSchema = z.object({\n ref: z.string().optional(),\n state: z.object({\n paths: z.array(z.string()).optional(),\n env: z.array(z.string()).optional(),\n }).strict().optional(),\n login: z.object({\n cmd: z.string(),\n interactive: z.boolean().optional(),\n requires_callback_url: z.boolean().optional(),\n }).strict().optional(),\n refresh: z.object({\n cmd: z.string(),\n interval_s: z.number().int().positive().optional(),\n }).strict().optional(),\n expiry: z.object({\n parse: z.string().optional(),\n grace_s: z.number().int().nonnegative().optional(),\n }).strict().optional(),\n}).strict()\n\nconst sessionSchema = z.object({\n mode: z.enum([\"ephemeral\", \"persistent\", \"resumable\"]).default(\"ephemeral\"),\n idle_timeout_ms: z.number().int().min(1000).default(600_000),\n max_turns: z.number().int().positive().optional(),\n context_carryover: z.boolean().default(true),\n}).strict()\n\nconst modelsSchema = z.object({\n default: z.string().optional(),\n allowed: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n // How a model is selected at session start: \"config\" (ACP\n // set_config_option, default) | \"command\" (a `/model <id>` control turn,\n // for agents like hermes that ignore the ACP session model config).\n apply: z.enum([\"config\", \"command\"]).optional(),\n}).strict()\n\nconst capabilitiesSchema = z.object({\n streaming: z.boolean().optional(),\n tool_calls: z.boolean().optional(),\n sub_agents: z.boolean().optional(),\n file_io: z.boolean().optional(),\n multimodal: z.boolean().optional(),\n resumable: z.boolean().optional(),\n bidirectional: z.boolean().optional(),\n /**\n * Adapter can ingest a filesystem path that the host UI just placed\n * on disk (host-side drag-drop into a terminal pastes the path\n * here). Implies the adapter has a Read-file tool wired so the\n * dropped path actually does something. Hosts gate drag-drop UI on\n * this flag — defaults to false (conservative).\n */\n file_attach: z.boolean().optional(),\n}).strict()\n\nconst modeSchema = z.object({\n id: z.string().regex(MODE_ID_PATTERN),\n description: z.string().optional(),\n bin_args_append: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n}).strict()\n\nconst optionSchema = z.object({\n id: z.string().regex(OPTION_ID_PATTERN),\n type: z.enum([\"boolean\", \"integer\", \"string\", \"enum\"]),\n description: z.string().optional(),\n enum: z.array(z.string()).min(1).optional(),\n default: z.union([z.boolean(), z.number(), z.string()]).optional(),\n min: z.number().int().optional(),\n max: z.number().int().optional(),\n bin_args_template: z.array(z.string()).optional(),\n bin_args_append_when_true: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n}).strict().refine(\n // type === \"enum\" REQUIRES an `enum` array. The JSON Schema enforces\n // this via `if/then`; the zod side mirrors with a refine so both\n // validation paths reject the same shapes.\n o => o.type !== \"enum\" || (Array.isArray(o.enum) && o.enum.length > 0),\n { message: \"option.type === 'enum' requires a non-empty `enum` array\" }\n)\n\nconst continuationStrategyIdSchema = z.enum(CONTINUATION_STRATEGY_IDS)\n\nconst continuationSchema = z.object({\n default: continuationStrategyIdSchema,\n supported: z.array(continuationStrategyIdSchema).min(1),\n pinned_session: z.object({\n idle_timeout_ms: z.number().int().min(1000).default(1_800_000),\n key_scope: z\n .array(z.enum(CONTINUATION_KEY_SCOPES))\n .min(1)\n .default([\"conversation\", \"operator\"]),\n }).strict().optional(),\n}).strict().refine(\n // The chosen `default` must appear in `supported` — otherwise the\n // host has no valid strategy to fall back to.\n c => c.supported.includes(c.default),\n {\n message: \"continuation.default must be a member of continuation.supported\",\n }\n)\n\nconst mcpBlockSchema = z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n transport: z.enum([\"stdio\", \"http\", \"sse\"]),\n url: z.string().url().optional(),\n}).strict()\n\nexport const agentCliFrontmatterSchema = z\n .object({\n name: z.string().min(1).max(80),\n id: z.string().regex(ID_PATTERN),\n description: z.string().min(1).max(2000),\n version: z.string().regex(SEMVER_PATTERN),\n bin: z.string().regex(BIN_PATTERN),\n bin_args: z.array(z.string()).optional(),\n install: z.array(installMethodSchema).min(1),\n version_check: versionCheckSchema,\n setup: z.array(setupStepSchema).optional(),\n auth: authSchema.optional(),\n sandbox: z.union([z.string(), z.record(z.string(), z.unknown())]),\n runner: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n protocol: z.enum([\"acp\", \"mcp\", \"proprietary\", \"print\"]),\n acp: z.string().optional(),\n mcp: mcpBlockSchema.optional(),\n adapter: z.string().regex(ADAPTER_PATTERN).optional(),\n session: sessionSchema.optional(),\n models: modelsSchema.optional(),\n capabilities: capabilitiesSchema.optional(),\n modes: z.array(modeSchema).optional(),\n options: z.array(optionSchema).optional(),\n continuation: continuationSchema.optional(),\n requires: z.object({\n os: z.array(z.enum([\"darwin\", \"linux\", \"windows\"])).optional(),\n arch: z.array(z.enum([\"x64\", \"arm64\", \"x86\", \"arm\"])).optional(),\n min_disk_mb: z.number().int().nonnegative().optional(),\n min_memory_mb: z.number().int().nonnegative().optional(),\n }).strict().optional(),\n examples: z.array(z.object({\n goal: z.string(),\n prompt: z.string(),\n note: z.string().optional(),\n }).strict()).optional(),\n tags: z.array(z.string().regex(TAG_PATTERN)).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n .superRefine((m, ctx) => {\n // Unique mode ids — duplicates would silently shadow.\n if (m.modes) {\n const seen = new Set<string>()\n for (const mode of m.modes) {\n if (seen.has(mode.id)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"modes\"],\n message: `Duplicate mode id '${mode.id}' — mode ids must be unique within a manifest.`,\n })\n }\n seen.add(mode.id)\n }\n }\n // Unique setup step ids — duplicates would silently shadow each\n // other in the host's completion ledger, leading to one step\n // never re-prompting and another always re-prompting.\n if (m.setup) {\n const seen = new Set<string>()\n for (const step of m.setup) {\n if (seen.has(step.id)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"setup\"],\n message: `Duplicate setup step id '${step.id}' — step ids must be unique within a manifest.`,\n })\n }\n seen.add(step.id)\n }\n }\n // Unique option ids — same reasoning as modes.\n if (m.options) {\n const seen = new Set<string>()\n for (const opt of m.options) {\n if (seen.has(opt.id)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"options\"],\n message: `Duplicate option id '${opt.id}' — option ids must be unique within a manifest.`,\n })\n }\n seen.add(opt.id)\n }\n }\n // continuation.default === \"native-resume\" requires capabilities.resumable: true.\n // Mirrors the JSON Schema's allOf rule so both validation paths\n // reject the same shape.\n if (\n m.continuation?.default === \"native-resume\" &&\n !m.capabilities?.resumable\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"continuation\", \"default\"],\n message:\n \"continuation.default === 'native-resume' requires capabilities.resumable: true.\",\n })\n }\n })\n .describe(\n \"Validates the YAML frontmatter portion of an AIP-45 AGENT-CLI.md manifest.\",\n )\n\nexport type AgentCliFrontmatter = z.infer<typeof agentCliFrontmatterSchema>\n\n// Re-export the per-call config schema for hosts that want to validate\n// `OPERATOR.runtime.config` against a manifest at load time. Validation\n// against the manifest's modes/options/continuation lives in\n// `manifest/compose.ts` (the spawn-arg composer) — this schema covers\n// only the SHAPE checks (types, enum values).\nexport const runtimeConfigSchema = z.object({\n mode: z.string().optional(),\n options: z.record(z.string(), z.union([z.boolean(), z.number(), z.string()]))\n .optional(),\n continuation: continuationStrategyIdSchema.optional(),\n}).strict()\n\nexport type RuntimeConfigInput = z.infer<typeof runtimeConfigSchema>\n","/**\n * AIP-45 protocol arm: `protocol: \"acp\"`.\n *\n * Wraps a subprocess's stdio in an `@agentproto/acp` client and\n * exposes the `AgentCliClient` shape the runner consumes. Each\n * `send()` call delegates to a single AcpClientSession.prompt() and\n * forwards the resulting StreamEvent stream.\n */\n\nimport type { ChildProcess } from \"node:child_process\"\nimport { Readable, Writable } from \"node:stream\"\nimport {\n createAcpClient,\n type AcpClient,\n type AcpClientSession,\n} from \"@agentproto/acp/client\"\nimport type {\n AgentCliClient,\n AgentCliConnectOptions,\n StreamEvent,\n} from \"../types.js\"\n\n/**\n * Outcome the host returns to the agent on a permission request.\n *\n * Mirrors the upstream ACP `RequestPermissionResponse` shape EXACTLY —\n * note the doubly-nested `outcome` field: the outer is the response\n * envelope, the inner is the discriminator (string literal, not a\n * `{ type: ... }` object). Get this wrong and the agent silently\n * interprets the response as a refusal (\"User refused permission to\n * run tool\"), so we type it strictly here.\n *\n * { outcome: { outcome: \"selected\", optionId: \"...\" } }\n * { outcome: { outcome: \"cancelled\" } }\n */\nexport type AcpPermissionOutcome =\n | { outcome: { outcome: \"selected\"; optionId: string } }\n | { outcome: { outcome: \"cancelled\" } }\n\nexport interface AcpPermissionRequestParams {\n sessionId?: string\n toolCall?: {\n toolCallId?: string\n title?: string\n kind?: string\n rawInput?: unknown\n }\n options?: Array<{ optionId: string; name?: string; kind?: string }>\n}\n\nexport type AcpPermissionHandler = (\n params: AcpPermissionRequestParams\n) => Promise<AcpPermissionOutcome> | AcpPermissionOutcome\n\n/**\n * Default handler: pick the first option whose `kind` starts with\n * `allow_` (Claude Code offers `allow_once` and `allow_always`).\n * Falls back to the first option if none match — keeps the agent\n * unblocked rather than throwing on an unfamiliar option set.\n *\n * Mirrors the trust model of in-process Mastra agents: the user\n * approved the operator binding once; subsequent tool calls don't\n * re-prompt by default. Hosts that want explicit per-call gating\n * pass their own `onPermissionRequest`.\n */\nexport const autoAllowPermissionHandler: AcpPermissionHandler = ({\n options,\n}) => {\n if (!options || options.length === 0) {\n // No options offered — return cancelled so the agent gets a\n // deterministic answer instead of hanging on a dropped request.\n return { outcome: { outcome: \"cancelled\" } }\n }\n const allow =\n options.find(o => typeof o.kind === \"string\" && o.kind.startsWith(\"allow_\")) ??\n options[0]\n return { outcome: { outcome: \"selected\", optionId: allow!.optionId } }\n}\n\nexport interface AcpProtocolOptions {\n child: ChildProcess\n cwd: string\n clientInfo?: { name: string; title?: string; version?: string }\n /** Called when the agent asks for permission to run a tool (Write,\n * Bash, ...). Defaults to `autoAllowPermissionHandler`. Pass a\n * custom handler to plumb requests through a UI / governance\n * policy. Throwing or returning a rejected promise bubbles to the\n * agent as an internal error. */\n onPermissionRequest?: AcpPermissionHandler\n}\n\nexport function createAcpProtocolArm(\n options: AcpProtocolOptions,\n): AgentCliClient {\n const { child, cwd } = options\n\n if (!child.stdin || !child.stdout) {\n throw new Error(\n \"AcpProtocolArm: subprocess must be spawned with piped stdin + stdout\",\n )\n }\n\n const output = Writable.toWeb(child.stdin) as WritableStream<Uint8Array>\n const input = Readable.toWeb(child.stdout) as ReadableStream<Uint8Array>\n\n let client: AcpClient | null = null\n let session: AcpClientSession | null = null\n const pendingByTurn = new Map<string, AsyncIterable<StreamEvent>>()\n\n return {\n get sessionId(): string | undefined {\n return session?.sessionId\n },\n async connect(opts: AgentCliConnectOptions) {\n const permissionHandler =\n options.onPermissionRequest ?? autoAllowPermissionHandler\n client = await createAcpClient({\n output,\n input,\n clientInfo: options.clientInfo,\n capabilities: {\n fs: { readTextFile: true, writeTextFile: true },\n },\n // Wire the permission handler so the agent's `session/request_permission`\n // callbacks get a real answer instead of bubbling up as\n // \"AcpClient.requestPermission: no handler configured\" → which\n // surfaces in the chat as an opaque \"Internal error\" when the\n // agent tries to Write / Bash anything gated.\n handlers: {\n requestPermission: async (params: unknown) =>\n permissionHandler(params as AcpPermissionRequestParams),\n } as never,\n })\n // When the host hands us a `resumeSessionId`, reattach to the\n // agent's existing session via `loadSession` so the conversation\n // (model context, tool history, working files) carries over a\n // cold start. We trust the host to only send ids it persisted\n // from a prior turn; if the agent's `loadSession: true` capability\n // wasn't advertised the SDK call surfaces the per-protocol error.\n //\n // No silent fallback to `newSession` on resume failure — that\n // would create a new session quietly and lose continuity, which\n // is the bug we're trying to prevent. Let the error propagate.\n if (opts.resumeSessionId) {\n session = await client.loadSession({\n sessionId: opts.resumeSessionId,\n cwd,\n mcpServers: opts.mcpServers,\n })\n } else {\n session = await client.newSession({\n cwd,\n mcpServers: opts.mcpServers,\n ...(opts.model ? { model: opts.model } : {}),\n ...(opts.effort ? { effort: opts.effort } : {}),\n })\n }\n },\n async send(turnId, message) {\n if (!session) throw new Error(\"AcpProtocolArm.send: not connected\")\n // ACP's `prompt` field is `ContentBlock[]` — multiple blocks\n // together form the user's turn (text + image + resource_link\n // + ...). Callers MAY pass either:\n // - a single block (`{type:\"text\",text:\"...\"}`) — wrapped\n // into a one-element array for the wire\n // - an array of blocks — forwarded verbatim, supporting\n // multimodal turns without callers re-shaping per-arm\n const messages = Array.isArray(message) ? message : [message]\n const stream = session.prompt({ messages })\n pendingByTurn.set(turnId, stream)\n },\n async *events(): AsyncIterable<StreamEvent> {\n const last = Array.from(pendingByTurn.values()).at(-1)\n if (!last) return\n for await (const evt of last) yield evt\n },\n async cancel(_turnId) {\n if (!session) return\n await session.cancel()\n },\n async close() {\n if (session) await session.close()\n if (client) await client.close()\n },\n }\n}\n","/**\n * AIP-45 protocol arm: `protocol: \"print\"`.\n *\n * Drives `claude -p --output-format stream-json [--resume <id>]` — one\n * fresh subprocess per turn, no long-lived ACP connection. Simpler than\n * the ACP arm and immune to the stale-proxy race condition: the session\n * object itself never dies between turns; only the per-turn child does.\n *\n * The `sessionId` property starts empty (or pre-seeded with a\n * `resumeSessionId`) and is updated after the first successful turn from\n * the `result` event's `session_id` field. Subsequent turns pass\n * `--resume <sessionId>` so Claude Code rehydrates the conversation from\n * its JSONL store.\n */\n\nimport { spawn } from \"node:child_process\"\nimport { createInterface } from \"node:readline\"\nimport type { AgentCliRuntimeSession, StreamEvent } from \"../types.js\"\n\nexport interface PrintArmOptions {\n bin: string\n /** Base argv passed to the binary BEFORE print flags and prompt.\n * Typically permission-mode and model overrides from `composeSpawn`. */\n baseArgs: string[]\n cwd: string\n env: Record<string, string>\n /** Pre-seed from `resumeSessionId` so the first turn reattaches. */\n resumeSessionId?: string\n}\n\nexport function createPrintSession(opts: PrintArmOptions): AgentCliRuntimeSession {\n let sessionId = opts.resumeSessionId ?? \"\"\n let activeChild: ReturnType<typeof spawn> | null = null\n\n return {\n get sessionId(): string {\n return sessionId\n },\n\n async *send(message: unknown): AsyncIterable<StreamEvent> {\n const prompt = extractPromptText(message)\n\n const args: string[] = [\n ...opts.baseArgs,\n \"--print\",\n \"--output-format\",\n \"stream-json\",\n \"--no-interactive\",\n ...(sessionId ? [\"--resume\", sessionId] : []),\n prompt,\n ]\n\n const child = spawn(opts.bin, args, {\n cwd: opts.cwd,\n env: opts.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n })\n activeChild = child\n\n const stderrLines: string[] = []\n const STDERR_KEEP = 80\n child.stderr?.setEncoding(\"utf8\")\n child.stderr?.on(\"data\", (chunk: string) => {\n for (const line of chunk.split(/\\r?\\n/)) {\n if (!line) continue\n stderrLines.push(line)\n if (stderrLines.length > STDERR_KEEP) stderrLines.shift()\n }\n })\n\n try {\n if (!child.stdout) throw new Error(\"print-arm: child has no stdout pipe\")\n const rl = createInterface({ input: child.stdout, crlfDelay: Infinity })\n\n let capturedSessionId = \"\"\n for await (const line of rl) {\n if (!line.trim()) continue\n let evt: Record<string, unknown>\n try {\n evt = JSON.parse(line) as Record<string, unknown>\n } catch {\n continue\n }\n\n if (\n evt.type === \"result\" &&\n typeof evt.session_id === \"string\" &&\n evt.session_id\n ) {\n capturedSessionId = evt.session_id\n }\n\n const sid = capturedSessionId || sessionId || \"\"\n const mapped = mapEvent(evt, sid, stderrLines)\n if (!mapped) continue\n\n yield mapped\n }\n\n const exitCode = await waitForExit(child)\n if (capturedSessionId) sessionId = capturedSessionId\n\n if (exitCode !== 0 && exitCode !== null) {\n const errEvt: StreamEvent = {\n kind: \"error\",\n error: {\n message: `claude exited with code ${exitCode}`,\n ...(stderrLines.length\n ? { data: { stderr: stderrLines.join(\"\\n\") } }\n : {}),\n },\n }\n yield errEvt\n }\n } finally {\n activeChild = null\n }\n },\n\n async cancel(): Promise<void> {\n activeChild?.kill(\"SIGTERM\")\n },\n\n async close(): Promise<void> {\n activeChild?.kill(\"SIGTERM\")\n },\n }\n}\n\nfunction extractPromptText(message: unknown): string {\n if (typeof message === \"string\") return message\n if (message !== null && typeof message === \"object\") {\n const m = message as Record<string, unknown>\n if (typeof m.text === \"string\") return m.text\n if (Array.isArray(message)) {\n return (message as Array<Record<string, unknown>>)\n .filter(b => b.type === \"text\" && typeof b.text === \"string\")\n .map(b => b.text as string)\n .join(\"\\n\")\n }\n }\n return JSON.stringify(message)\n}\n\nfunction mapEvent(\n evt: Record<string, unknown>,\n sessionId: string,\n stderrLines: string[],\n): StreamEvent | null {\n switch (evt.type) {\n case \"text\":\n return typeof evt.text === \"string\"\n ? { kind: \"text-delta\", sessionId, text: evt.text }\n : null\n\n case \"thinking\":\n return typeof evt.thinking === \"string\"\n ? { kind: \"thought\", sessionId, text: evt.thinking }\n : null\n\n case \"tool_use\":\n return {\n kind: \"tool-call\",\n sessionId,\n toolCallId: typeof evt.id === \"string\" ? evt.id : \"\",\n toolName: typeof evt.name === \"string\" ? evt.name : \"?\",\n arguments: evt.input ?? {},\n }\n\n case \"tool_result\":\n return {\n kind: \"tool-result\",\n sessionId,\n toolCallId:\n typeof evt.tool_use_id === \"string\" ? evt.tool_use_id : \"\",\n result: evt.content ?? null,\n isError: evt.is_error === true,\n }\n\n case \"result\":\n if (\n evt.subtype === \"error_during_execution\" ||\n evt.is_error === true\n ) {\n return {\n kind: \"error\",\n sessionId,\n error: {\n message:\n typeof evt.error === \"string\" ? evt.error : \"Unknown error\",\n ...(stderrLines.length\n ? { data: { stderr: stderrLines.join(\"\\n\") } }\n : {}),\n },\n }\n }\n if (evt.subtype === \"success\") {\n return { kind: \"turn-end\", sessionId, reason: \"completed\" }\n }\n return null\n\n case \"system\":\n case \"assistant\":\n // skip: init metadata and full message recap (streaming text-delta covers it)\n return null\n\n default:\n return null\n }\n}\n\nfunction waitForExit(child: ReturnType<typeof spawn>): Promise<number | null> {\n return new Promise(resolve => {\n child.once(\"exit\", code => resolve(code))\n child.once(\"error\", () => resolve(null))\n })\n}\n","/**\n * Spawn-argument composer.\n *\n * Pure function: given an `AgentCliHandle` and a per-call\n * `RuntimeConfig`, produces the final `binArgs + env` to pass to the\n * runtime's `start()`. Validates the config against the manifest's\n * declared `modes` / `options` / `continuation.supported`; unknown ids\n * throw `RuntimeConfigError` (the host should NOT spawn — the user\n * configured something the manifest doesn't accept).\n *\n * Composition order (matches AIP-45 spec):\n * 1. Manifest's default `bin_args` (from `handle.bin_args`).\n * 2. Mode patch (`bin_args_append`, `env`) when `config.mode` set.\n * 3. Option patches in DECLARATION order (`bin_args_template` /\n * `bin_args_append_when_true` / `env`) for each option present\n * in `config.options`.\n *\n * Mode is applied before options because modes are coarse profile\n * switches (claude-code's `--permission-mode`) — options refine them.\n * Within options, declaration order is honoured so adapter authors\n * can express \"this flag must come after that one\" without the host\n * needing to know the rule.\n */\n\nimport type {\n AgentCliHandle,\n AgentCliOption,\n RuntimeConfig,\n} from \"../types.js\"\n\n/**\n * Thrown when `RuntimeConfig` references manifest entries that don't\n * exist or violates a declared constraint (type / enum / bounds). The\n * `code` field lets callers map to friendly UI messages without\n * inspecting the message string.\n */\nexport class RuntimeConfigError extends Error {\n readonly code:\n | \"unknown_mode\"\n | \"unknown_option\"\n | \"option_type_mismatch\"\n | \"option_enum_violation\"\n | \"option_bounds_violation\"\n | \"unsupported_continuation\"\n readonly path: string\n constructor(\n code: RuntimeConfigError[\"code\"],\n path: string,\n message: string\n ) {\n super(`[${code} at ${path}] ${message}`)\n this.code = code\n this.path = path\n this.name = \"RuntimeConfigError\"\n }\n}\n\n/**\n * Resolved spawn args + env. The runtime's `start()` impl merges\n * `env` into the host process env / sandbox env before exec.\n */\nexport interface ComposedSpawn {\n binArgs: string[]\n env: Record<string, string>\n}\n\n/**\n * Compose the final spawn args from a manifest + per-call config.\n * Pure — no I/O, no sandbox access, no global state. Safe to call\n * repeatedly with the same input.\n *\n * `config` may be undefined or an empty object — both fall back to\n * the manifest's defaults verbatim (manifest `bin_args`, no mode\n * patch, no option patches). Continuation is not applied here — the\n * `ContinuationStrategy` registry handles that — but we DO validate\n * `config.continuation` against `manifest.continuation.supported` so\n * a misconfigured operator fails fast at compose time, not at the\n * point the strategy tries to acquire a session.\n */\nexport function composeSpawn(\n handle: AgentCliHandle,\n config?: RuntimeConfig\n): ComposedSpawn {\n const binArgs: string[] = [...(handle.bin_args ?? [])]\n const env: Record<string, string> = {}\n\n if (!config) return { binArgs, env }\n\n // ── Mode patch ──────────────────────────────────────────────────\n if (config.mode !== undefined) {\n const mode = (handle.modes ?? []).find(m => m.id === config.mode)\n if (!mode) {\n const known = (handle.modes ?? []).map(m => m.id).join(\", \") || \"(none)\"\n throw new RuntimeConfigError(\n \"unknown_mode\",\n \"config.mode\",\n `Mode '${config.mode}' is not declared by manifest '${handle.id}'. Known modes: ${known}`\n )\n }\n if (mode.bin_args_append) binArgs.push(...mode.bin_args_append)\n if (mode.env) Object.assign(env, mode.env)\n }\n\n // ── Option patches (declaration order) ──────────────────────────\n if (config.options && Object.keys(config.options).length > 0) {\n const declared = handle.options ?? []\n const declaredById = new Map(declared.map(o => [o.id, o]))\n // Reject unknown ids first so the operator sees ALL the typos\n // (not just the one we hit first when iterating declared).\n for (const id of Object.keys(config.options)) {\n if (!declaredById.has(id)) {\n const known = declared.map(o => o.id).join(\", \") || \"(none)\"\n throw new RuntimeConfigError(\n \"unknown_option\",\n `config.options.${id}`,\n `Option '${id}' is not declared by manifest '${handle.id}'. Known options: ${known}`\n )\n }\n }\n // Then apply patches in declaration order so adapter-author intent\n // wins over operator-config key order.\n for (const option of declared) {\n if (!(option.id in config.options)) continue\n const value = config.options[option.id] as boolean | number | string\n validateOptionValue(option, value)\n const patch = renderOptionPatch(option, value)\n binArgs.push(...patch.binArgs)\n Object.assign(env, patch.env)\n }\n }\n\n // ── Continuation validation (no patch — strategy registry owns) ─\n if (config.continuation !== undefined && handle.continuation) {\n if (!handle.continuation.supported.includes(config.continuation)) {\n throw new RuntimeConfigError(\n \"unsupported_continuation\",\n \"config.continuation\",\n `Continuation strategy '${config.continuation}' is not in manifest '${handle.id}'.continuation.supported (${handle.continuation.supported.join(\", \")}).`\n )\n }\n }\n\n return { binArgs, env }\n}\n\n/**\n * Resolve the continuation strategy id to use for this call. Operator\n * config wins; manifest default is the fallback; \"none\" if neither\n * declares anything (preserves pre-AIP-45-extension behaviour).\n */\nexport function resolveContinuationStrategy(\n handle: AgentCliHandle,\n config?: RuntimeConfig\n): import(\"../types.js\").ContinuationStrategyId {\n if (config?.continuation) return config.continuation\n return handle.continuation?.default ?? \"none\"\n}\n\nfunction validateOptionValue(\n option: AgentCliOption,\n value: boolean | number | string\n): void {\n const path = `config.options.${option.id}`\n switch (option.type) {\n case \"boolean\":\n if (typeof value !== \"boolean\") {\n throw new RuntimeConfigError(\n \"option_type_mismatch\",\n path,\n `Expected boolean, got ${typeof value} (${JSON.stringify(value)}).`\n )\n }\n return\n case \"integer\":\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n throw new RuntimeConfigError(\n \"option_type_mismatch\",\n path,\n `Expected integer, got ${typeof value === \"number\" ? \"non-integer number\" : typeof value} (${JSON.stringify(value)}).`\n )\n }\n if (option.min !== undefined && value < option.min) {\n throw new RuntimeConfigError(\n \"option_bounds_violation\",\n path,\n `Value ${value} is below the declared minimum ${option.min}.`\n )\n }\n if (option.max !== undefined && value > option.max) {\n throw new RuntimeConfigError(\n \"option_bounds_violation\",\n path,\n `Value ${value} is above the declared maximum ${option.max}.`\n )\n }\n return\n case \"string\":\n if (typeof value !== \"string\") {\n throw new RuntimeConfigError(\n \"option_type_mismatch\",\n path,\n `Expected string, got ${typeof value} (${JSON.stringify(value)}).`\n )\n }\n return\n case \"enum\":\n if (typeof value !== \"string\") {\n throw new RuntimeConfigError(\n \"option_type_mismatch\",\n path,\n `Expected string (enum value), got ${typeof value} (${JSON.stringify(value)}).`\n )\n }\n if (!(option.enum ?? []).includes(value)) {\n throw new RuntimeConfigError(\n \"option_enum_violation\",\n path,\n `Value '${value}' is not in the declared enum (${(option.enum ?? []).join(\", \")}).`\n )\n }\n return\n }\n}\n\nfunction renderOptionPatch(\n option: AgentCliOption,\n value: boolean | number | string\n): { binArgs: string[]; env: Record<string, string> } {\n const stringValue = String(value)\n\n // boolean type: only emit the bare flag when value === true and the\n // option declared `bin_args_append_when_true`. Honor `env` too —\n // adapter authors might want to surface the bool via env.\n if (option.type === \"boolean\") {\n if (value !== true) return { binArgs: [], env: {} }\n return {\n binArgs: option.bin_args_append_when_true\n ? [...option.bin_args_append_when_true]\n : [],\n env: option.env ? interpolateEnv(option.env, stringValue) : {},\n }\n }\n\n // value-bearing types — apply `bin_args_template` (with `{value}`\n // interpolation) and merge `env`.\n return {\n binArgs: option.bin_args_template\n ? option.bin_args_template.map(token =>\n token.replace(/\\{value\\}/g, stringValue)\n )\n : [],\n env: option.env ? interpolateEnv(option.env, stringValue) : {},\n }\n}\n\nfunction interpolateEnv(\n env: Record<string, string>,\n value: string\n): Record<string, string> {\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(env)) {\n out[k] = v.replace(/\\{value\\}/g, value)\n }\n return out\n}\n","import { spawn, type ChildProcess } from \"node:child_process\"\nimport { randomUUID } from \"node:crypto\"\nimport { createDoctype } from \"@agentproto/define-doctype\"\nimport { agentCliFrontmatterSchema } from \"./schema.js\"\nimport { createAcpProtocolArm } from \"./protocol/acp-client.js\"\nimport { createPrintSession } from \"./protocol/print-arm.js\"\nimport { composeSpawn } from \"./manifest/compose.js\"\nimport type {\n AgentCliClient,\n AgentCliDefinition,\n AgentCliHandle,\n AgentCliRuntime,\n AgentCliRuntimeSession,\n AgentCliStartOptions,\n StreamEvent,\n} from \"./types.js\"\n\nexport const defineAgentCli = createDoctype<AgentCliDefinition, AgentCliHandle>(\n {\n aip: 45,\n name: \"agent-cli\",\n readIdentity: (def) => def.id,\n validate(def) {\n const result = agentCliFrontmatterSchema.safeParse(def)\n if (!result.success) {\n throw new Error(\n `defineAgentCli (AIP-45): ${result.error.issues\n .map((i) => `${i.path.join(\".\")}: ${i.message}`)\n .join(\"; \")}`,\n )\n }\n\n const data = result.data\n\n if (data.protocol === \"acp\" && !data.acp) {\n throw new Error(\n \"defineAgentCli (AIP-45): `acp` ref is required when protocol=acp\",\n )\n }\n if (data.protocol === \"mcp\" && !data.mcp) {\n throw new Error(\n \"defineAgentCli (AIP-45): `mcp` block is required when protocol=mcp\",\n )\n }\n if (data.protocol === \"proprietary\" && !data.adapter) {\n throw new Error(\n \"defineAgentCli (AIP-45): `adapter` package is required when protocol=proprietary\",\n )\n }\n\n if (\n data.session?.mode === \"resumable\" &&\n data.capabilities?.resumable !== true\n ) {\n throw new Error(\n \"defineAgentCli (AIP-45): session.mode=resumable requires capabilities.resumable: true\",\n )\n }\n },\n build(def) {\n return { ...def } as AgentCliHandle\n },\n },\n)\n\nexport function createAgentCliRuntime(\n definition: AgentCliHandle,\n): AgentCliRuntime {\n return {\n definition,\n async start(opts?: AgentCliStartOptions): Promise<AgentCliRuntimeSession> {\n const cwd = opts?.cwd ?? process.cwd()\n // Compose final argv + env from the manifest + per-call config.\n // Mode patches and option patches land BEFORE the host-provided\n // env so an operator-set option can be observed by the CLI even\n // when the manifest also touches the same env key (operator\n // intent wins). Validation runs here too — a misconfigured\n // operator throws RuntimeConfigError before we exec anything.\n const composed = composeSpawn(definition, opts?.config)\n const env: Record<string, string> = {\n ...filterStringEnv(process.env),\n ...composed.env,\n ...(opts?.env ?? {}),\n }\n\n // The print arm spawns a fresh subprocess per turn — no\n // long-lived child, no AgentCliClient connect/events cycle.\n // Short-circuit here so buildProtocolArm is never called for it.\n if (definition.protocol === \"print\") {\n return createPrintSession({\n bin: definition.bin,\n baseArgs: composed.binArgs,\n cwd,\n env,\n ...(opts?.resumeSessionId\n ? { resumeSessionId: opts.resumeSessionId }\n : {}),\n })\n }\n\n const child = spawn(definition.bin, composed.binArgs, {\n cwd,\n env,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n signal: opts?.signal,\n })\n\n // Drain child.stderr — without this the kernel pipe buffer\n // (~64 KB on macOS / Linux) eventually fills up and blocks the\n // child mid-write, hanging the entire ACP exchange. Buffer the\n // last few KB so a downstream error event can attach the tail\n // for debugging — adapters like claude-agent-acp print useful\n // context here (\"not authenticated\", \"model gated\") that the\n // JSON-RPC reply would otherwise reduce to \"Invalid params\".\n const stderrBuf: string[] = []\n const STDERR_KEEP_LINES = 80\n child.stderr?.setEncoding(\"utf8\")\n child.stderr?.on(\"data\", (chunk: string) => {\n for (const line of chunk.split(/\\r?\\n/)) {\n if (!line) continue\n stderrBuf.push(line)\n if (stderrBuf.length > STDERR_KEEP_LINES) stderrBuf.shift()\n }\n })\n\n const arm = buildProtocolArm(definition, child, cwd)\n arm._stderrTail = () => stderrBuf.join(\"\\n\")\n\n const abortController = new AbortController()\n if (opts?.signal) {\n opts.signal.addEventListener(\"abort\", () => abortController.abort(), {\n once: true,\n })\n }\n // Extract model + effort from the config options so the protocol\n // arm can apply them via ACP session/set_config_option — the ACP\n // wrapper (claude-agent-acp) does not read its own CLI args and\n // forward them to claude, so bin_args_template alone is not\n // sufficient. The compose step still adds them to binArgs as a\n // best-effort fallback for non-ACP arms.\n const optModel = opts?.config?.options?.model\n const optEffort = opts?.config?.options?.effort\n // Model-selection strategy (AgentCliModels.apply, default \"config\"):\n // \"config\" → apply via ACP session config (set_config_option) at\n // connect — works for claude-code.\n // \"command\" → the ACP session config is a no-op on this agent\n // (e.g. hermes silently keeps its own default), so we\n // DON'T pass model to connect; instead we send a\n // `/model <id>` control turn after newSession (below).\n const modelApply = definition.models?.apply ?? \"config\"\n const configModel =\n optModel && modelApply === \"config\" ? String(optModel) : undefined\n await arm.connect({\n cwd,\n env,\n abortSignal: abortController.signal,\n ...(opts?.resumeSessionId\n ? { resumeSessionId: opts.resumeSessionId }\n : {}),\n ...(opts?.mcpServers ? { mcpServers: opts.mcpServers } : {}),\n ...(configModel ? { model: configModel } : {}),\n ...(optEffort ? { effort: String(optEffort) } : {}),\n })\n\n // \"command\" model strategy: switch the model via a drained `/model\n // <id>` control turn. Best-effort — a failure is warned, never fatal,\n // so the session still starts (on the agent's default model).\n if (optModel && modelApply === \"command\") {\n await applyModelCommand(arm, String(optModel))\n }\n\n // Prefer the protocol-layer session id (ACP, etc.) so the host\n // can persist it for a future native-resume. Fall back to a\n // random UUID for protocols that don't model sessions — keeps\n // the field always-populated for downstream loggers.\n const sessionId = arm.sessionId ?? randomUUID()\n\n return {\n sessionId,\n send(message): AsyncIterable<StreamEvent> {\n const turnId = randomUUID()\n return promptTurn(arm, turnId, message)\n },\n async cancel() {\n abortController.abort()\n },\n async close() {\n await arm.close()\n if (!child.killed) child.kill(\"SIGTERM\")\n },\n }\n },\n }\n}\n\n/**\n * Switch the active model via a `/model <id>` control turn, for adapters\n * whose ACP session config doesn't select the model (`models.apply:\n * \"command\"`, e.g. hermes). The turn is fully drained so the switch\n * completes before the caller's first real turn. Best-effort: a transport\n * failure or a missing acknowledgement is warned, never thrown — the\n * session simply continues on the agent's default model.\n */\nasync function applyModelCommand(\n arm: AgentCliClient,\n modelId: string,\n): Promise<void> {\n const turnId = randomUUID()\n let acked = false\n try {\n for await (const evt of promptTurn(arm, turnId, {\n type: \"text\",\n text: `/model ${modelId}`,\n })) {\n // Loose check across the serialised event — hermes replies\n // \"Model switched to: <id> · Provider: …\". We don't couple to a\n // specific StreamEvent shape; any \"switch\" mention = acknowledged.\n if (/switch|model\\s+set|now using/i.test(JSON.stringify(evt))) acked = true\n }\n } catch (err) {\n console.warn(\n `[agent-cli] /model ${modelId} control turn failed (continuing on default):`,\n err instanceof Error ? err.message : err,\n )\n return\n }\n if (!acked) {\n console.warn(\n `[agent-cli] /model ${modelId}: no switch acknowledgement — agent may be on its default model`,\n )\n }\n}\n\nasync function* promptTurn(\n arm: AgentCliClient,\n turnId: string,\n message: unknown,\n): AsyncIterable<StreamEvent> {\n await arm.send(turnId, message)\n // Re-attach the recent stderr tail to error events. The ACP layer\n // surfaces a terse `{message: \"Invalid params\"}`; the child's\n // stderr almost always has a more useful line (\"npx claude-agent-acp:\n // not authenticated, run `claude login`\"). Hosts read `error.data`\n // when present, falling back to `message` for older payloads.\n const stderrTail = arm._stderrTail\n for await (const evt of arm.events()) {\n if (evt.kind === \"error\" && typeof stderrTail === \"function\") {\n const tail = stderrTail()\n if (tail) {\n const existing = (evt.error.data ?? {}) as Record<string, unknown>\n evt.error.data = { ...existing, stderr: tail }\n }\n }\n yield evt\n }\n}\n\nfunction buildProtocolArm(\n def: AgentCliHandle,\n child: ChildProcess,\n cwd: string,\n): AgentCliClient {\n switch (def.protocol) {\n case \"acp\":\n return createAcpProtocolArm({\n child,\n cwd,\n clientInfo: { name: def.id, version: def.version },\n })\n case \"mcp\":\n throw new Error(\"createAgentCliRuntime: mcp protocol arm not yet implemented\")\n case \"proprietary\":\n throw new Error(\n \"createAgentCliRuntime: proprietary protocol arm not yet implemented\",\n )\n case \"print\":\n // Unreachable: print is handled by the early-return in start() above.\n throw new Error(\"createAgentCliRuntime: print arm bypasses buildProtocolArm\")\n }\n}\n\nfunction filterStringEnv(env: NodeJS.ProcessEnv): Record<string, string> {\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(env)) {\n if (typeof v === \"string\") out[k] = v\n }\n return out\n}\n"]}
|