import { CLIRuntimeBase } from "../cli-runtime-base.js"; import type { AgentEvent, AgentExecuteParams, McpServerConfig } from "../types.js"; /** * OpenCode CLI runtime — invokes `opencode run --format json` * and maps the streaming NDJSON output to {@link AgentEvent} instances. * * OpenCode uses a per-line envelope model where every NDJSON line has: * `{ type, timestamp, sessionID, ...data }` * * Key differences from other runtimes: * - Text events are complete parts (no delta tracking needed) * - Tool events combine use + result in a single line (buffered drain pattern) * - Usage/cost comes from `step_finish` events */ export declare class OpenCodeCliRuntime extends CLIRuntimeBase { readonly mediaCapabilities: { acceptsInbound: string[]; emitsOutbound: boolean; }; private currentSessionId; private accumulatedText; private lastStepFinish; private pendingEvents; private toolCounter; constructor(); protected get shouldSampleRss(): boolean; execute(params: AgentExecuteParams): AsyncIterable; protected buildArgs(params: AgentExecuteParams): string[]; protected extractEvent(line: string): AgentEvent | null; protected buildEnv(_params: AgentExecuteParams): Record; private handleText; private handleToolUse; private handleStepFinish; private handleError; private handleReasoning; private enrichDoneEvent; private resetState; } /** * Manages the `.opencode/config.json` lifecycle for MCP server configuration. * * OpenCode reads MCP config from its project-level settings file. Uses a * merge-restore pattern (same as Gemini and Codex): * * - **Setup**: read existing `.opencode/config.json` (if any), save a copy, * merge `mcpServers` into it, write back. * - **Teardown** (always, via `finally`): restore the original file, or remove * the file/directory we created. */ export declare class OpenCodeMcpConfigManager { private readonly mcpServers; private readonly configDir; private readonly configPath; private originalContent; private createdFile; private createdDir; constructor(workingDirectory: string | undefined, mcpServers: Record); setup(): Promise; teardown(): Promise; }