@obversa/engine-opencode-cli 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/opencode-cli.ts"],"names":["path","measuredUsage","effective"],"mappings":"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","file":"index.js","sourcesContent":["import {\n existsSync,\n mkdtempSync,\n mkdirSync,\n readdirSync,\n realpathSync,\n rmSync,\n statSync,\n} from 'node:fs';\nimport { tmpdir, userInfo } from 'node:os';\nimport {\n delimiter,\n dirname,\n isAbsolute,\n join,\n relative,\n sep,\n} from 'node:path';\nimport { isDeepStrictEqual } from 'node:util';\nimport {\n EngineError,\n EngineIncompleteResultError,\n assertReadAccess,\n canonicalJson,\n classifyEngineFailure,\n cloneFrozenJson,\n engineSelection,\n reportedUsage,\n type AgentRequest,\n type AgentResult,\n type AgentResultPart,\n type Engine,\n type EngineEventSink,\n type EngineFailureKind,\n type EngineSelectionRecord,\n type JsonObject,\n type JsonValue,\n type UsageReceipt,\n validateAgentResult,\n validateIncompleteResultEvidence,\n modelIdentity,\n} from '@obversa/api';\nimport {\n attemptEnvironment,\n retryAfterHeaderToMs,\n scrubCapture,\n DEFAULT_OWNED_COMMAND_LIMITS,\n OwnedCommandError,\n ownedCommandIdentity,\n resolveCommandExecutable,\n runOwnedCommand,\n} from '@obversa/core/command';\n\nconst SUPPORTED_VERSION = '1.18.23';\nconst VERSION_TIMEOUT_MS = 10_000;\nconst VERSION_TEARDOWN_MS = 1_000;\nconst VERSION_OUTPUT_BYTES = 4_096;\nconst OPENCODE_VERSION = /^\\d+\\.\\d+\\.\\d+$/u;\nconst CONTROL_CHARACTER = /[\\u0000-\\u001f\\u007f]/u;\nconst STRUCTURED_RESULT_MARKER = 'OBVERSA_STRUCTURED_RESULT_V1\\n';\nconst CONFIG_INTERPOLATION = /\\{(?:env|file):/u;\nconst STEP_FINISH_REASONS = new Set([\n 'stop',\n 'length',\n 'tool-calls',\n 'content-filter',\n 'error',\n 'unknown',\n]);\nconst BASE_SYSTEM_PROMPT =\n 'Execute one isolated Obversa node attempt. Follow only this system prompt and the user prompt. Use only the declared tools and permissions.';\nconst STRUCTURED_RESULT_INSTRUCTION = [\n 'Your final answer must be one completed text part beginning with exactly:',\n 'OBVERSA_STRUCTURED_RESULT_V1',\n 'After that marker and one newline, write exactly one JSON value and nothing else.',\n].join('\\n');\n\nconst CAPABILITIES = new Set([\n 'read',\n 'edit',\n 'glob',\n 'grep',\n 'bash',\n 'task',\n 'todowrite',\n 'webfetch',\n 'websearch',\n]);\nconst FILESYSTEM_CAPABILITIES = new Set([\n 'read',\n 'edit',\n 'glob',\n 'grep',\n 'bash',\n]);\nconst WRITE_CAPABILITIES = new Set(['edit', 'bash']);\nconst PATTERN_PERMISSIONS = new Set([\n 'read',\n 'edit',\n 'glob',\n 'grep',\n 'bash',\n 'task',\n]);\nconst PERMISSION_NAMES = new Map<string, string>([\n ['read', 'read'],\n ['edit', 'edit'],\n ['write', 'edit'],\n ['applypatch', 'edit'],\n ['glob', 'glob'],\n ['grep', 'grep'],\n ['bash', 'bash'],\n ['task', 'task'],\n ['todowrite', 'todowrite'],\n ['webfetch', 'webfetch'],\n ['websearch', 'websearch'],\n]);\n\nexport interface OpenCodeCliIdentity {\n readonly provider: string | null;\n readonly modelFamily: string | null;\n}\n\nexport interface OpenCodeCliEngineOptions {\n readonly executable: string;\n readonly version: string;\n readonly identity: OpenCodeCliIdentity;\n /** Exact host-selected values copied into the clean child environment. */\n readonly environment?: Readonly<Record<string, string>>;\n /** Exact provider-keyed OpenCode auth data copied into the child environment. */\n readonly auth?: JsonObject;\n /** Extra directories the managed-config check also reads, beyond the real\n * system paths. Production callers pass none; a caller must pass a\n * directory deliberately, so an ambient environment variable cannot. */\n readonly managedConfigDirectories?: readonly string[];\n}\n\nexport interface OpenCodeSeatOptions {\n readonly executable: string;\n readonly tools?: readonly string[];\n}\n\nexport interface OpenCodeSeat {\n readonly engine: OpenCodeCliEngine;\n readonly identity: {\n readonly adapter: 'opencode-cli';\n readonly provider: string;\n readonly modelFamily: string;\n readonly model: string;\n readonly tools: readonly string[];\n };\n}\n\n/** Create the OpenCode seat used by declarative team workflows. */\nexport function opencode(modelName: string, options: OpenCodeSeatOptions): OpenCodeSeat {\n const selected = model(modelName);\n const { modelFamily } = modelIdentity(selected.value);\n return {\n engine: new OpenCodeCliEngine({\n executable: options.executable,\n version: SUPPORTED_VERSION,\n identity: { provider: selected.provider, modelFamily },\n }),\n identity: {\n adapter: 'opencode-cli',\n provider: selected.provider,\n modelFamily,\n model: selected.value,\n tools: options.tools ?? ['read', 'grep'],\n },\n };\n}\n\nexport interface OpenCodeInvocation {\n readonly args: readonly string[];\n readonly stdin: string;\n readonly environment: Readonly<Record<string, string>>;\n readonly configDirectory: string;\n}\n\ninterface TextObservation {\n readonly text: string;\n}\n\ninterface OpenCodeAccumulator {\n readonly frames: JsonValue[];\n readonly seenParts: Map<string, string>;\n readonly text: TextObservation[];\n sessionId: string | null;\n protocolError: Error | null;\n terminalError: JsonObject | null;\n stopReason: string | null;\n stepCount: number;\n usageValid: boolean;\n inputTokens: number;\n outputTokens: number;\n cacheCreationInputTokens: number;\n cacheReadInputTokens: number;\n}\n\ninterface PermissionBuild {\n readonly capabilities: readonly string[];\n readonly tools: JsonObject;\n readonly permission: JsonObject;\n}\n\nfunction text(value: unknown, field: string): string {\n if (\n typeof value !== 'string'\n || value.length === 0\n || value !== value.trim()\n || CONTROL_CHARACTER.test(value)\n ) {\n throw new TypeError(\n `${field} must be a non-empty trimmed string without control characters`,\n );\n }\n return value;\n}\n\nfunction nullableText(value: unknown, field: string): string | null {\n return value === null ? null : text(value, field);\n}\n\nfunction object(value: unknown, field: string): JsonObject {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError(`${field} must be an object`);\n }\n return value as JsonObject;\n}\n\nfunction safeInteger(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0) {\n throw new TypeError(`${field} must be a non-negative safe integer`);\n }\n return value as number;\n}\n\nfunction safeSum(left: number, right: number): number | undefined {\n const result = left + right;\n return Number.isSafeInteger(result) ? result : undefined;\n}\n\nfunction model(value: unknown): { readonly value: string; readonly provider: string } {\n const checked = text(value, 'OpenCode request model');\n const slash = checked.indexOf('/');\n if (\n slash < 1\n || slash === checked.length - 1\n || checked.includes(' ')\n // A second separator is the same malformed request as a missing one, and\n // it reads as a family: `anthropic//unknown` walked past the refusal the\n // `unknown` placeholder exists to trigger. It refuses here with the\n // wording this adapter already uses for a malformed request model, and\n // the shared derivation refuses it again on its own account.\n || checked.indexOf('/', slash + 1) !== -1\n ) {\n throw new TypeError('OpenCode request model must use provider/model format');\n }\n // A model name carrying one of OpenCode's config interpolation tokens would\n // expand inside the config file, so it is refused where the name is checked\n // rather than read as an identity: the reason a reader needs is the token,\n // not the family it happens to derive. The serialized config keeps the same\n // guard for every other field it carries.\n if (CONFIG_INTERPOLATION.test(checked)) {\n throw new TypeError(\n 'OpenCode request model must not carry config interpolation tokens {env:...} or {file:...}',\n );\n }\n // The provider comes from the one derivation every harness that runs other\n // providers' models shares, so it is lowercased exactly where the family is\n // and a seat cannot report a provider in one case and a family in another.\n // `value` stays the string the caller gave, which is what reaches the CLI.\n const derived = modelIdentity(checked);\n if (derived.provider === undefined) {\n throw new TypeError('OpenCode request model must use provider/model format');\n }\n return Object.freeze({ value: checked, provider: derived.provider });\n}\n\nfunction providerForModel(\n selectedModel: { readonly provider: string },\n identity: OpenCodeCliIdentity,\n): string {\n const asserted = nullableText(identity.provider, 'OpenCode provider');\n if (asserted !== null && asserted !== selectedModel.provider) {\n throw new TypeError(\n `OpenCode provider identity ${asserted} does not match model provider ${selectedModel.provider}`,\n );\n }\n return selectedModel.provider;\n}\n\n/**\n * The model family this call serves, read from the model the request names.\n *\n * A class can be constructed with a family, and that family is a claim about\n * what the class serves rather than a fact about this request: one instance\n * built for `opencode` can be handed `anthropic/claude-sonnet-4-5`, and the\n * recorded identity has to be the family that actually answers or a panel\n * comparing families is comparing tool names. So the family is derived from\n * the request model through the shared derivation, and a constructed family\n * that disagrees is refused, the way a constructed provider already is.\n */\nfunction familyForModel(\n selectedModel: { readonly value: string },\n identity: OpenCodeCliIdentity,\n): string {\n const asserted = nullableText(identity.modelFamily, 'OpenCode model family');\n const derived = modelIdentity(selectedModel.value).modelFamily;\n if (asserted !== null && asserted !== derived) {\n throw new TypeError(\n `OpenCode model family identity ${asserted} does not match model family ${derived}`,\n );\n }\n return derived;\n}\n\nfunction selectedEnvironment(\n raw: Readonly<Record<string, string>> | undefined,\n): Readonly<Record<string, string>> {\n const selected: Record<string, string> = {};\n for (const [name, value] of Object.entries(raw ?? {})) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(name)) {\n throw new TypeError(`OpenCode environment name ${name} is invalid`);\n }\n if (typeof value !== 'string' || value.includes('\\0')) {\n throw new TypeError(\n `OpenCode environment value ${name} must be a string without NUL`,\n );\n }\n if (\n name === 'HOME'\n || name === 'TMPDIR'\n || name.startsWith('XDG_')\n || name.startsWith('OPENCODE_')\n ) {\n throw new TypeError(`OpenCode environment cannot replace ${name}`);\n }\n selected[name] = value;\n }\n return Object.freeze(selected);\n}\n\nfunction authValue(value: JsonObject | undefined): JsonObject {\n if (value === undefined) return Object.freeze({});\n if (\n typeof value !== 'object'\n || value === null\n || Array.isArray(value)\n ) {\n throw new TypeError('OpenCode auth must be a provider-keyed object');\n }\n const checked = cloneFrozenJson(value);\n for (const [provider, rawEntry] of Object.entries(checked)) {\n text(provider, 'OpenCode auth provider');\n const entry = object(rawEntry, `OpenCode auth entry ${provider}`);\n if (entry.type === 'wellknown') {\n throw new TypeError('OpenCode wellknown auth is not isolated');\n }\n if (entry.type === 'api') {\n for (const field of Object.keys(entry)) {\n if (!['type', 'key', 'metadata'].includes(field)) {\n throw new TypeError(`OpenCode api auth field ${field} is not supported`);\n }\n }\n if (typeof entry.key !== 'string') {\n throw new TypeError('OpenCode api auth key must be a string');\n }\n if (entry.metadata !== undefined) {\n const metadata = object(\n entry.metadata,\n `OpenCode api auth metadata ${provider}`,\n );\n if (Object.values(metadata).some((item) => typeof item !== 'string')) {\n throw new TypeError('OpenCode api auth metadata values must be strings');\n }\n }\n continue;\n }\n if (entry.type === 'oauth') {\n for (const field of Object.keys(entry)) {\n if (![\n 'type',\n 'refresh',\n 'access',\n 'expires',\n 'accountId',\n 'enterpriseUrl',\n ].includes(field)) {\n throw new TypeError(`OpenCode oauth auth field ${field} is not supported`);\n }\n }\n if (typeof entry.refresh !== 'string' || typeof entry.access !== 'string') {\n throw new TypeError('OpenCode oauth auth tokens must be strings');\n }\n safeInteger(entry.expires, 'OpenCode oauth auth expiry');\n for (const field of ['accountId', 'enterpriseUrl'] as const) {\n if (entry[field] !== undefined && typeof entry[field] !== 'string') {\n throw new TypeError(`OpenCode oauth auth ${field} must be a string`);\n }\n }\n continue;\n }\n throw new TypeError(`OpenCode auth type ${String(entry.type)} is not supported`);\n }\n return checked;\n}\n\n/** The managed-config files a machine may control, from the real system\n * locations plus any extra directories the caller supplies. Production\n * callers pass no extras; tests pass their fixture directory. */\nfunction managedConfigSources(extraDirectories: readonly string[] = []): readonly string[] {\n const systemDirectory = process.platform === 'darwin'\n ? '/Library/Application Support/opencode'\n : process.platform === 'win32'\n ? 'C:\\\\ProgramData\\\\opencode'\n : '/etc/opencode';\n const directories = [systemDirectory, ...extraDirectories];\n const sources = directories.flatMap((directory) => [\n join(directory, 'opencode.json'),\n join(directory, 'opencode.jsonc'),\n ]);\n if (process.platform === 'darwin') {\n let user = 'user';\n try {\n user = userInfo().username || user;\n } catch {\n // Match OpenCode's fixed fallback without trusting HOME or USER.\n }\n sources.push(\n join(\n '/Library/Managed Preferences',\n user,\n 'ai.opencode.managed.plist',\n ),\n '/Library/Managed Preferences/ai.opencode.managed.plist',\n );\n }\n return Object.freeze(sources);\n}\n\n/** The first managed-config file that exists on disk, or undefined. Pure: it\n * reads only the source list it is given. */\nfunction findManagedConfig(sources: readonly string[]): string | undefined {\n return sources.find((candidate) => existsSync(candidate));\n}\n\n/** Refuse to run when a managed config file exists, naming the exact file. */\nfunction assertNoManagedConfig(sources: readonly string[]): void {\n const source = findManagedConfig(sources);\n if (source !== undefined) {\n throw new TypeError(`managed OpenCode config is not isolated: ${source}`);\n }\n}\n\nfunction assertNoProjectInstructions(\n workspace: string,\n capabilities: readonly string[],\n): void {\n if (!capabilities.some((capability) => FILESYSTEM_CAPABILITIES.has(capability))) {\n return;\n }\n const instructionNames = new Set(['agents.md', 'claude.md', 'context.md']);\n const pending = [{ directory: workspace, root: true }];\n const visited = new Set<string>();\n while (pending.length > 0) {\n const { directory, root } = pending.pop()!;\n let resolvedDirectory: string;\n let entries: ReturnType<typeof readdirSync>;\n try {\n resolvedDirectory = realpathSync(directory);\n if (visited.has(resolvedDirectory)) continue;\n visited.add(resolvedDirectory);\n entries = readdirSync(resolvedDirectory, { withFileTypes: true });\n } catch (error) {\n throw new TypeError(\n `OpenCode could not inspect project instructions under ${directory}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n for (const entry of entries) {\n const path = join(resolvedDirectory, entry.name);\n if (!root && instructionNames.has(entry.name.toLowerCase())) {\n throw new TypeError(\n `OpenCode project instruction ${path} is not isolated`,\n );\n }\n if (entry.isSymbolicLink()) {\n let target: string;\n let directoryTarget: boolean;\n try {\n target = realpathSync(path);\n directoryTarget = statSync(target).isDirectory();\n } catch (error) {\n throw new TypeError(\n `OpenCode could not inspect project symlink ${path}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n const pathFromWorkspace = relative(workspace, target);\n if (\n pathFromWorkspace === '..'\n || pathFromWorkspace.startsWith(`..${sep}`)\n || isAbsolute(pathFromWorkspace)\n ) {\n throw new TypeError(\n `OpenCode symlink ${path} resolves outside the workspace`,\n );\n }\n if (directoryTarget) {\n if (target === workspace) {\n throw new TypeError(\n `OpenCode symlink ${path} resolves to the workspace root`,\n );\n }\n pending.push({ directory: target, root: false });\n }\n } else if (entry.isDirectory()) {\n pending.push({ directory: path, root: false });\n }\n }\n }\n}\n\nfunction authRedactions(value: JsonObject): Readonly<Record<string, string>> {\n const redactions: Record<string, string> = {\n OPENCODE_AUTH_CONTENT: canonicalJson(value),\n };\n const pending: unknown[] = [value];\n let index = 0;\n while (pending.length > 0) {\n const current = pending.pop();\n if (typeof current === 'string') {\n redactions[`OPENCODE_AUTH_VALUE_${index}`] = current;\n index += 1;\n } else if (Array.isArray(current)) {\n pending.push(...current);\n } else if (typeof current === 'object' && current !== null) {\n pending.push(...Object.values(current));\n }\n }\n return Object.freeze(redactions);\n}\n\nfunction scrubExactValues(\n raw: string,\n redactions: Readonly<Record<string, string>>,\n): string {\n const values = [...new Set(Object.values(redactions))]\n .filter((value) => value.length > 0)\n .sort((left, right) => right.length - left.length);\n let result = raw;\n for (const value of values) result = result.split(value).join('[redacted]');\n return result;\n}\n\nfunction requestedCapabilities(request: AgentRequest): readonly string[] {\n assertReadAccess(request);\n const capabilities = engineSelection({\n adapter: 'opencode-cli',\n capabilities: request.tools ?? [],\n }).capabilities;\n for (const capability of capabilities) {\n if (!CAPABILITIES.has(capability)) {\n throw new TypeError(\n `OpenCode cannot represent capability ${capability}`,\n );\n }\n }\n if (request.leaf !== false && capabilities.includes('task')) {\n throw new TypeError('OpenCode leaf attempts cannot expose task');\n }\n const workspaceMode = request.workspaceMode ?? 'none';\n if (workspaceMode !== 'write' && capabilities.includes('task')) {\n throw new TypeError(`OpenCode workspace mode ${workspaceMode} cannot expose task capability`);\n }\n if (workspaceMode === 'none') {\n const unsafe = capabilities.find(\n (capability) => FILESYSTEM_CAPABILITIES.has(capability),\n );\n if (unsafe !== undefined) {\n throw new TypeError(\n `OpenCode workspace mode none cannot expose capability ${unsafe}`,\n );\n }\n }\n if (workspaceMode === 'read') {\n const unsafe = capabilities.find(\n (capability) => WRITE_CAPABILITIES.has(capability),\n );\n if (unsafe !== undefined) {\n throw new TypeError(\n `OpenCode read-only workspace cannot expose capability ${unsafe}`,\n );\n }\n if (!capabilities.some((capability) => ['read', 'glob', 'grep'].includes(capability))) {\n throw new TypeError('OpenCode read workspace requires a file-reading capability');\n }\n }\n if (workspaceMode !== 'none' && workspaceMode !== 'read' && workspaceMode !== 'write') {\n throw new TypeError('OpenCode workspace mode must be none, read, or write');\n }\n return capabilities;\n}\n\nfunction permissionRule(\n raw: string,\n): { readonly permission: string; readonly pattern: string | null } {\n const checked = text(raw, 'OpenCode permission rule');\n const match = /^([A-Za-z][A-Za-z0-9_]*)(?:\\(([^\\u0000-\\u001f\\u007f]+)\\))?$/u\n .exec(checked);\n if (!match) {\n throw new TypeError(`OpenCode cannot represent permission rule ${checked}`);\n }\n const permission = PERMISSION_NAMES.get(match[1]!.toLowerCase());\n if (permission === undefined) {\n throw new TypeError(`OpenCode cannot represent permission rule ${checked}`);\n }\n return Object.freeze({ permission, pattern: match[2] ?? null });\n}\n\nfunction permissions(request: AgentRequest): PermissionBuild {\n const capabilities = requestedCapabilities(request);\n const toolValues: Record<string, JsonValue> = { '*': false };\n for (const capability of capabilities) toolValues[capability] = true;\n\n const permissionValues: Record<string, JsonValue> = { '*': 'deny' };\n const seen = new Set<string>();\n for (const raw of request.allowedTools ?? []) {\n if (seen.has(raw)) throw new TypeError('allowedTools must be unique');\n seen.add(raw);\n const rule = permissionRule(raw);\n if (rule.pattern !== null && !PATTERN_PERMISSIONS.has(rule.permission)) {\n throw new TypeError(\n `OpenCode permission ${rule.permission} does not accept patterns`,\n );\n }\n if (!capabilities.includes(rule.permission)) {\n throw new TypeError(\n `OpenCode permission ${raw} has no declared ${rule.permission} capability`,\n );\n }\n if (rule.pattern === null) {\n if (Object.hasOwn(permissionValues, rule.permission)) {\n throw new TypeError(\n `OpenCode permission ${rule.permission} has overlapping rules`,\n );\n }\n permissionValues[rule.permission] = 'allow';\n continue;\n }\n const current = permissionValues[rule.permission];\n if (typeof current === 'string') {\n throw new TypeError(\n `OpenCode permission ${rule.permission} has overlapping rules`,\n );\n }\n const patterns: Record<string, JsonValue> = current === undefined\n ? { '*': 'deny' as JsonValue }\n : { ...(current as JsonObject) };\n if (Object.hasOwn(patterns, rule.pattern)) {\n throw new TypeError(`OpenCode permission rule ${raw} is duplicated`);\n }\n patterns[rule.pattern] = 'allow';\n permissionValues[rule.permission] = patterns;\n }\n return Object.freeze({\n capabilities,\n tools: cloneFrozenJson(toolValues),\n permission: cloneFrozenJson(permissionValues),\n });\n}\n\nfunction trustedSystemPrompt(request: AgentRequest): string {\n let prompt: string;\n if (request.systemMode === 'replace') {\n if (request.system === undefined) {\n throw new TypeError('OpenCode system replacement requires system text');\n }\n prompt = request.system;\n } else {\n prompt = request.system === undefined\n ? BASE_SYSTEM_PROMPT\n : `${BASE_SYSTEM_PROMPT}\\n\\n${request.system}`;\n }\n if (request.jsonSchema !== undefined) {\n prompt = `${prompt}\\n\\n${STRUCTURED_RESULT_INSTRUCTION}`;\n }\n return prompt;\n}\n\nfunction configFor(\n request: AgentRequest,\n selectedModel: { readonly value: string; readonly provider: string },\n built: PermissionBuild,\n): JsonObject {\n const agent = {\n mode: 'primary',\n model: selectedModel.value,\n prompt: trustedSystemPrompt(request),\n tools: built.tools,\n permission: built.permission,\n } as const;\n return cloneFrozenJson({\n share: 'disabled',\n autoupdate: false,\n snapshot: false,\n model: selectedModel.value,\n small_model: selectedModel.value,\n enabled_providers: [selectedModel.provider],\n default_agent: 'build',\n plugin: [],\n instructions: [],\n mcp: {},\n lsp: false,\n formatter: false,\n tools: built.tools,\n permission: built.permission,\n agent: { build: agent },\n });\n}\n\nfunction serializedConfig(value: JsonObject): string {\n const encoded = JSON.stringify(value);\n if (CONFIG_INTERPOLATION.test(encoded)) {\n throw new TypeError(\n 'OpenCode config interpolation tokens {env:...} and {file:...} are not allowed',\n );\n }\n return encoded;\n}\n\nexport function buildOpenCodeInvocation(\n request: AgentRequest,\n options: OpenCodeCliEngineOptions,\n rawDirectory: string,\n): OpenCodeInvocation {\n if (typeof request.cwd !== 'string' || !isAbsolute(request.cwd)) {\n throw new TypeError('OpenCode request cwd must be an absolute path');\n }\n if (\n (request as AgentRequest & { readonly memory?: unknown }).memory !==\n undefined\n ) {\n throw new TypeError('OpenCode CLI does not bridge Obversa memory');\n }\n if (request.env !== undefined && Object.keys(request.env).length > 0) {\n throw new TypeError(\n 'OpenCode request environment is not allowed; select values in the constructor environment',\n );\n }\n if (!isAbsolute(rawDirectory)) {\n throw new TypeError('OpenCode isolation directory must be an absolute path');\n }\n if (typeof options.executable !== 'string' || !isAbsolute(options.executable)) {\n throw new TypeError('OpenCode executable must be an absolute path');\n }\n if (options.version !== SUPPORTED_VERSION) {\n throw new TypeError(`OpenCode CLI version must be ${SUPPORTED_VERSION}`);\n }\n\n const selectedModel = model(request.model);\n providerForModel(selectedModel, options.identity);\n familyForModel(selectedModel, options.identity);\n const built = permissions(request);\n if (\n built.capabilities.includes('websearch')\n && selectedModel.provider !== 'opencode'\n && selectedModel.provider !== 'opencode-go'\n ) {\n throw new TypeError(\n `OpenCode provider ${selectedModel.provider} cannot expose websearch`,\n );\n }\n const directory = realpathSync(rawDirectory);\n const home = join(directory, 'home');\n const dataHome = join(directory, 'xdg-data');\n const configHome = join(directory, 'xdg-config');\n const cacheHome = join(directory, 'xdg-cache');\n const stateHome = join(directory, 'xdg-state');\n const temporary = join(directory, 'tmp');\n for (const path of [home, dataHome, configHome, cacheHome, stateHome, temporary]) {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n }\n\n const selected = selectedEnvironment(options.environment);\n const auth = authValue(options.auth);\n const config = configFor(request, selectedModel, built);\n const configContent = serializedConfig(config);\n const attempt = attemptEnvironment({ ...request, env: undefined }) ?? {};\n const path = selected.PATH ?? [\n dirname(process.execPath),\n dirname(options.executable),\n '/usr/bin',\n '/bin',\n '/usr/sbin',\n '/sbin',\n ].filter((value, index, values) => values.indexOf(value) === index)\n .join(delimiter);\n const environment = Object.freeze({\n ...selected,\n ...attempt,\n PATH: path,\n HOME: home,\n XDG_DATA_HOME: dataHome,\n XDG_CONFIG_HOME: configHome,\n XDG_CACHE_HOME: cacheHome,\n XDG_STATE_HOME: stateHome,\n TMPDIR: temporary,\n OPENCODE_CONFIG_DIR: join(configHome, 'opencode'),\n OPENCODE_CONFIG_CONTENT: configContent,\n OPENCODE_AUTH_CONTENT: canonicalJson(auth),\n OPENCODE_DISABLE_PROJECT_CONFIG: '1',\n OPENCODE_PURE: '1',\n OPENCODE_DISABLE_DEFAULT_PLUGINS: '1',\n OPENCODE_DISABLE_EXTERNAL_SKILLS: '1',\n OPENCODE_DISABLE_CLAUDE_CODE: '1',\n OPENCODE_DISABLE_AUTOUPDATE: '1',\n OPENCODE_DISABLE_LSP_DOWNLOAD: '1',\n OPENCODE_DISABLE_SHARE: '1',\n });\n return Object.freeze({\n args: Object.freeze([\n 'run',\n '--format',\n 'json',\n '--pure',\n '--model',\n selectedModel.value,\n '--dir',\n request.cwd,\n ]),\n stdin: request.prompt,\n environment,\n configDirectory: configHome,\n });\n}\n\nfunction partKey(part: JsonObject): string {\n return `${part.sessionID}/${part.messageID}/${part.id}`;\n}\n\nfunction consumePart(\n raw: unknown,\n expectedType: string,\n wrapperSessionId: string,\n accumulator: OpenCodeAccumulator,\n): JsonObject | null {\n const part = object(raw, `OpenCode ${expectedType} part`);\n const id = text(part.id, `OpenCode ${expectedType} part id`);\n const sessionId = text(\n part.sessionID,\n `OpenCode ${expectedType} part sessionID`,\n );\n text(part.messageID, `OpenCode ${expectedType} part messageID`);\n if (part.type !== expectedType) {\n throw new TypeError(\n `OpenCode ${expectedType} wrapper contained ${String(part.type)} part`,\n );\n }\n if (sessionId !== wrapperSessionId) {\n throw new TypeError('OpenCode part session did not match its wrapper session');\n }\n const key = partKey({ ...part, id });\n const encoded = canonicalJson(part);\n const prior = accumulator.seenParts.get(key);\n if (prior !== undefined) {\n if (prior !== encoded) {\n throw new TypeError(`OpenCode emitted conflicting duplicate part ${key}`);\n }\n return null;\n }\n accumulator.seenParts.set(key, encoded);\n return part;\n}\n\nfunction consumeUsage(\n part: JsonObject,\n accumulator: OpenCodeAccumulator,\n): void {\n try {\n const tokens = object(part.tokens, 'OpenCode step tokens');\n const cache = object(tokens.cache, 'OpenCode step cache tokens');\n const input = safeInteger(tokens.input, 'OpenCode input tokens');\n const output = safeInteger(tokens.output, 'OpenCode output tokens');\n const reasoning = safeInteger(tokens.reasoning, 'OpenCode reasoning tokens');\n const cacheRead = safeInteger(cache.read, 'OpenCode cache read tokens');\n const cacheWrite = safeInteger(cache.write, 'OpenCode cache write tokens');\n const inputWithRead = safeSum(input, cacheRead);\n const inputTotal = inputWithRead === undefined\n ? undefined\n : safeSum(inputWithRead, cacheWrite);\n const outputTotal = safeSum(output, reasoning);\n const nextInput = inputTotal === undefined\n ? undefined\n : safeSum(accumulator.inputTokens, inputTotal);\n const nextOutput = outputTotal === undefined\n ? undefined\n : safeSum(accumulator.outputTokens, outputTotal);\n const nextRead = safeSum(accumulator.cacheReadInputTokens, cacheRead);\n const nextWrite = safeSum(accumulator.cacheCreationInputTokens, cacheWrite);\n if (\n nextInput === undefined\n || nextOutput === undefined\n || nextRead === undefined\n || nextWrite === undefined\n ) {\n throw new TypeError('OpenCode usage totals overflowed');\n }\n accumulator.inputTokens = nextInput;\n accumulator.outputTokens = nextOutput;\n accumulator.cacheReadInputTokens = nextRead;\n accumulator.cacheCreationInputTokens = nextWrite;\n accumulator.stepCount += 1;\n } catch {\n accumulator.usageValid = false;\n }\n}\n\nfunction consumeLine(\n line: string,\n accumulator: OpenCodeAccumulator,\n onEvent: EngineEventSink,\n structured: boolean,\n capabilities: readonly string[],\n): void {\n if (line.trim().length === 0 || accumulator.protocolError !== null) return;\n try {\n const frame = object(JSON.parse(line), 'OpenCode stream frame');\n const type = text(frame.type, 'OpenCode stream frame type');\n safeInteger(frame.timestamp, 'OpenCode stream frame timestamp');\n const sessionId = text(frame.sessionID, 'OpenCode stream frame sessionID');\n if (accumulator.sessionId === null) accumulator.sessionId = sessionId;\n if (accumulator.sessionId !== sessionId) {\n throw new TypeError('OpenCode stream changed session identity');\n }\n accumulator.frames.push(cloneFrozenJson(frame));\n\n if (type === 'error') {\n if (accumulator.terminalError !== null) {\n throw new TypeError('OpenCode emitted more than one terminal error');\n }\n accumulator.terminalError = object(frame.error, 'OpenCode stream error');\n return;\n }\n if (type === 'text') {\n const part = consumePart(frame.part, 'text', sessionId, accumulator);\n if (part === null) return;\n const value = typeof part.text === 'string'\n ? part.text\n : (() => { throw new TypeError('OpenCode text part text must be a string'); })();\n const time = object(part.time, 'OpenCode text part time');\n safeInteger(time.end, 'OpenCode text part end time');\n accumulator.text.push({ text: value });\n if (!structured || !value.includes(STRUCTURED_RESULT_MARKER)) {\n onEvent({ type: 'text', delta: value });\n }\n return;\n }\n if (type === 'reasoning') {\n const part = consumePart(frame.part, 'reasoning', sessionId, accumulator);\n if (part === null) return;\n if (typeof part.text !== 'string') {\n throw new TypeError('OpenCode reasoning part text must be a string');\n }\n onEvent({ type: 'thinking', delta: part.text });\n return;\n }\n if (type === 'tool_use') {\n const part = consumePart(frame.part, 'tool', sessionId, accumulator);\n if (part === null) return;\n const name = text(part.tool, 'OpenCode tool name');\n const capability = name === 'write' || name === 'apply_patch'\n ? 'edit'\n : name;\n if (!capabilities.includes(capability)) {\n throw new TypeError(`OpenCode emitted undeclared tool ${name}`);\n }\n const state = object(part.state, 'OpenCode tool state');\n if (state.status !== 'completed' && state.status !== 'error') {\n throw new TypeError('OpenCode tool terminal state must be completed or error');\n }\n onEvent({ type: 'tool', name, phase: 'use' });\n onEvent({ type: 'tool', name, phase: 'result' });\n return;\n }\n if (type === 'step_start') {\n consumePart(frame.part, 'step-start', sessionId, accumulator);\n return;\n }\n if (type === 'step_finish') {\n const part = consumePart(frame.part, 'step-finish', sessionId, accumulator);\n if (part !== null) {\n const reason = text(part.reason, 'OpenCode step reason');\n if (!STEP_FINISH_REASONS.has(reason)) {\n throw new TypeError(`OpenCode step reason ${reason} is invalid`);\n }\n accumulator.stopReason = reason;\n consumeUsage(part, accumulator);\n }\n return;\n }\n throw new TypeError(`OpenCode emitted unsupported event type ${type}`);\n } catch (error) {\n accumulator.protocolError = error instanceof Error\n ? error\n : new Error(String(error));\n }\n}\n\nfunction resultParts(\n accumulator: OpenCodeAccumulator,\n): readonly AgentResultPart[] {\n return Object.freeze(accumulator.text.map((part, index, values) =>\n Object.freeze({\n kind: 'assistant' as const,\n text: part.text,\n final: index === values.length - 1,\n }),\n ));\n}\n\nfunction usage(accumulator: OpenCodeAccumulator): UsageReceipt {\n if (!accumulator.usageValid || accumulator.stepCount === 0) {\n return Object.freeze({ kind: 'unknown' });\n }\n return reportedUsage({\n inputTokens: accumulator.inputTokens,\n outputTokens: accumulator.outputTokens,\n ...(accumulator.cacheCreationInputTokens === 0\n ? {}\n : {\n cacheCreationInputTokens: accumulator.cacheCreationInputTokens,\n }),\n ...(accumulator.cacheReadInputTokens === 0\n ? {}\n : { cacheReadInputTokens: accumulator.cacheReadInputTokens }),\n });\n}\n\nfunction errorMessage(raw: JsonObject): string {\n const data: JsonObject = typeof raw.data === 'object' && raw.data !== null\n ? object(raw.data, 'OpenCode error data')\n : Object.freeze({});\n const detail = typeof data.message === 'string'\n ? data.message\n : typeof data.responseBody === 'string'\n ? data.responseBody\n : typeof raw.name === 'string'\n ? raw.name\n : 'OpenCode failed';\n return detail;\n}\n\nfunction nativeFailure(raw: JsonObject): EngineFailureKind {\n const name = typeof raw.name === 'string' ? raw.name : '';\n const data: JsonObject = typeof raw.data === 'object' && raw.data !== null\n ? object(raw.data, 'OpenCode error data')\n : Object.freeze({});\n const status = Number.isSafeInteger(data.statusCode)\n ? data.statusCode as number\n : undefined;\n const detail = errorMessage(raw);\n const responseBody = typeof data.responseBody === 'string'\n ? data.responseBody\n : '';\n if (name === 'ProviderAuthError') return 'auth';\n if (name === 'APIError' && status === 401) {\n if (/CreditsError|no payment|insufficient balance/iu.test(responseBody)) {\n return 'billing';\n }\n if (/MonthlyLimitError/iu.test(responseBody)) return 'quota';\n if (/UserLimitError/iu.test(responseBody)) return 'rate-limit';\n if (/ModelError/iu.test(responseBody)) return 'model-unavailable';\n }\n if (status === 401) return 'auth';\n if (name === 'MessageAbortedError') return 'aborted';\n if (status === 402) return 'billing';\n if (status === 404) return 'model-unavailable';\n if (status === 408) return 'timeout';\n if (status === 429) {\n if (/credit balance|insufficient funds|out of credits|exhausted credit/iu.test(detail)) {\n return 'billing';\n }\n const classified = classifyEngineFailure(new Error(detail));\n return classified === 'billing' || classified === 'quota' ? classified : 'rate-limit';\n }\n if (status !== undefined && status >= 500) return 'transient';\n return classifyEngineFailure(new Error(detail));\n}\n\nfunction header(\n raw: JsonObject,\n name: string,\n): string | undefined {\n const data = typeof raw.data === 'object' && raw.data !== null\n ? object(raw.data, 'OpenCode error data')\n : undefined;\n const headers = data !== undefined\n && typeof data.responseHeaders === 'object'\n && data.responseHeaders !== null\n ? object(data.responseHeaders, 'OpenCode response headers')\n : undefined;\n if (headers === undefined) return undefined;\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === name && typeof value === 'string') return value;\n }\n return undefined;\n}\n\nfunction resetAtHeader(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n const trimmed = value.trim();\n if (/^\\d+$/u.test(trimmed)) {\n const numeric = Number(trimmed);\n if (!Number.isSafeInteger(numeric)) return undefined;\n const milliseconds = numeric < 10_000_000_000\n ? numeric * 1_000\n : numeric;\n return Number.isSafeInteger(milliseconds) ? milliseconds : undefined;\n }\n const parsed = Date.parse(trimmed);\n return Number.isNaN(parsed) ? undefined : parsed;\n}\n\nfunction nativeLimitHints(raw: JsonObject | null): {\n readonly retryAfterMs?: number;\n readonly resetAt?: number;\n} {\n if (raw === null) return Object.freeze({});\n const retryAfterMs = retryAfterHeaderToMs(header(raw, 'retry-after'));\n const resetAt = resetAtHeader(\n header(raw, 'x-ratelimit-reset')\n ?? header(raw, 'x-rate-limit-reset'),\n );\n return Object.freeze({\n ...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n ...(resetAt === undefined ? {} : { resetAt }),\n });\n}\n\nfunction loopError(\n kind: EngineFailureKind,\n message: string,\n hints: { readonly retryAfterMs?: number; readonly resetAt?: number } = {},\n): EngineError {\n return new EngineError({ kind, message, ...hints });\n}\n\nfunction typedFailureMessage(kind: EngineFailureKind, detail: string): string {\n const label = kind === 'auth'\n ? 'authentication failed'\n : kind === 'billing'\n ? 'payment required'\n : kind === 'model-unavailable'\n ? 'model unavailable'\n : kind === 'rate-limit'\n ? 'rate limit reached'\n : kind === 'quota'\n ? 'quota reached'\n : kind === 'transient'\n ? 'service unavailable'\n : kind === 'timeout'\n ? 'timed out'\n : kind === 'aborted'\n ? 'aborted'\n : kind === 'invalid-config'\n ? 'invalid configuration'\n : 'failed';\n return `OpenCode ${label}: ${detail}`;\n}\n\nfunction transportFailure(\n kind: EngineFailureKind,\n message: string,\n exitCode: number | null,\n): AgentResult['transportFailure'] {\n return Object.freeze({ kind, message, exitCode });\n}\n\nexport { assertNoManagedConfig, findManagedConfig, managedConfigSources };\n\nexport class OpenCodeCliEngine implements Engine {\n readonly name = 'opencode-cli';\n readonly #executable: string;\n readonly #version: string;\n readonly #identity: OpenCodeCliIdentity;\n readonly #environment: Readonly<Record<string, string>>;\n readonly #auth: JsonObject;\n readonly #authRedactions: Readonly<Record<string, string>>;\n readonly #options: OpenCodeCliEngineOptions;\n #versionObservation: Promise<string> | undefined;\n\n constructor(options: OpenCodeCliEngineOptions) {\n if (typeof options.executable !== 'string' || !isAbsolute(options.executable)) {\n throw new TypeError('OpenCode executable must be an absolute path');\n }\n this.#executable = text(options.executable, 'OpenCode executable');\n if (options.version !== SUPPORTED_VERSION) {\n throw new TypeError(`OpenCode CLI version must be ${SUPPORTED_VERSION}`);\n }\n this.#version = options.version;\n const checked = engineSelection({\n adapter: 'opencode-cli',\n adapterVersion: this.#version,\n provider: nullableText(options.identity.provider, 'OpenCode provider'),\n modelFamily: nullableText(\n options.identity.modelFamily,\n 'OpenCode model family',\n ),\n });\n this.#identity = Object.freeze({\n provider: checked.provider,\n modelFamily: checked.modelFamily,\n });\n this.#environment = selectedEnvironment(options.environment);\n this.#auth = authValue(options.auth);\n this.#authRedactions = authRedactions(this.#auth);\n const managedConfigDirectories = Object.freeze([\n ...(options.managedConfigDirectories ?? []),\n ]);\n this.#options = Object.freeze({\n executable: this.#executable,\n version: this.#version,\n identity: this.#identity,\n ...(Object.keys(this.#environment).length === 0\n ? {}\n : { environment: this.#environment }),\n ...(Object.keys(this.#auth).length === 0 ? {} : { auth: this.#auth }),\n ...(managedConfigDirectories.length === 0\n ? {}\n : { managedConfigDirectories }),\n });\n }\n\n async admit(\n request: Omit<AgentRequest, 'prompt'>,\n signal: AbortSignal,\n expectedSelection?: EngineSelectionRecord,\n ): Promise<EngineSelectionRecord> {\n if (signal.aborted) throw loopError('aborted', 'OpenCode admission was aborted before start');\n let normalized: AgentRequest;\n let selected: EngineSelectionRecord;\n try {\n assertNoManagedConfig(managedConfigSources(this.#options.managedConfigDirectories));\n const selectedModel = model(request.model);\n const selectedProvider = providerForModel(selectedModel, this.#identity);\n const selectedFamily = familyForModel(selectedModel, this.#identity);\n const capabilities = requestedCapabilities({ ...request, prompt: '' });\n if (typeof request.cwd !== 'string' || !isAbsolute(request.cwd)) {\n throw new TypeError('OpenCode request cwd must be an absolute path');\n }\n const cwd = realpathSync(request.cwd);\n assertNoProjectInstructions(cwd, capabilities);\n normalized = { ...request, cwd, prompt: '' };\n const timeout = request.timeoutMs ?? DEFAULT_OWNED_COMMAND_LIMITS.timeoutMs;\n const grace = request.timeoutGraceMs ?? DEFAULT_OWNED_COMMAND_LIMITS.teardownGraceMs;\n const output = request.maxOutputBytes ?? DEFAULT_OWNED_COMMAND_LIMITS.maxOutputBytes;\n const memory = request.maxMemoryBytes ?? DEFAULT_OWNED_COMMAND_LIMITS.maxMemoryBytes;\n if (!Number.isSafeInteger(timeout) || timeout < 1 || timeout > 2_147_483_647\n || !Number.isSafeInteger(grace) || grace < 0 || grace > 2_147_483_647 - timeout\n || !Number.isSafeInteger(output) || output < 0\n || !Number.isSafeInteger(memory) || memory < 1) {\n throw new TypeError('OpenCode request command limits are invalid');\n }\n ownedCommandIdentity({\n adapter: 'opencode-cli', runId: request.attempt?.runId,\n leafId: request.attempt?.leafId, attemptId: request.attempt?.attemptId,\n });\n selected = engineSelection({\n adapter: 'opencode-cli', adapterVersion: this.#version,\n provider: selectedProvider, modelFamily: selectedFamily,\n model: selectedModel.value, executable: this.#executable, capabilities,\n });\n if (expectedSelection !== undefined\n && !isDeepStrictEqual(engineSelection(expectedSelection), selected)) {\n throw new TypeError('OpenCode expected selection does not match its configured path and request');\n }\n let validationDirectory: string;\n try {\n validationDirectory = mkdtempSync(join(tmpdir(), 'lines-opencode-admission-'));\n } catch {\n throw loopError(\n 'unknown',\n 'OpenCode admission temporary configuration could not be created',\n );\n }\n\n let validationFailed = false;\n let validationFailure: unknown;\n try {\n buildOpenCodeInvocation(normalized, this.#options, validationDirectory);\n } catch (error) {\n validationFailed = true;\n validationFailure = error instanceof TypeError || error instanceof EngineError\n ? error\n : loopError(\n 'unknown',\n 'OpenCode admission temporary configuration could not be prepared',\n );\n }\n try {\n rmSync(validationDirectory, { recursive: true, force: true });\n } catch {\n if (!validationFailed) {\n throw loopError(\n 'unknown',\n 'OpenCode admission temporary configuration could not be removed',\n );\n }\n }\n if (validationFailed) throw validationFailure;\n } catch (error) {\n if (error instanceof EngineError) throw error;\n const diagnostic = error instanceof Error ? error.message : 'invalid request';\n throw loopError('invalid-config', scrubCapture(\n scrubExactValues(diagnostic, { ...this.#authRedactions, ...this.#environment }),\n { ...this.#environment }, 700,\n ));\n }\n // Check the retained absolute path; never choose another command through PATH.\n try { resolveCommandExecutable(this.#executable); }\n catch { throw loopError('missing-cli', 'OpenCode configured executable is missing or not runnable'); }\n const version = await (this.#versionObservation ??= this.#observeVersion(normalized, signal)\n .catch((error: unknown) => { this.#versionObservation = undefined; throw error; }));\n if (signal.aborted) throw loopError('aborted', 'OpenCode admission was aborted');\n return engineSelection({ ...selected, adapterVersion: version });\n }\n\n async #observeVersion(request: AgentRequest, signal: AbortSignal): Promise<string> {\n let directory: string;\n try {\n directory = mkdtempSync(join(tmpdir(), 'lines-opencode-version-'));\n } catch {\n throw loopError(\n 'unknown',\n 'OpenCode version temporary configuration could not be created',\n );\n }\n\n let version: string | undefined;\n let versionFailed = false;\n let versionFailure: unknown;\n try {\n const invocation = buildOpenCodeInvocation(request, this.#options, directory);\n // Close the window between the admission check and this spawn: the\n // workspace walk above takes real time and a machine-managed config\n // can arrive inside it. The between-admission-and-spawn case in the\n // plugin's spec demonstrates the arrival on the run path.\n assertNoManagedConfig(managedConfigSources(this.#options.managedConfigDirectories));\n const command = await runOwnedCommand({\n executable: this.#executable,\n args: ['--version'],\n cwd: request.cwd!,\n env: invocation.environment,\n inheritParentEnv: false,\n stdin: '',\n ...ownedCommandIdentity({\n adapter: 'opencode-cli', runId: request.attempt?.runId,\n leafId: request.attempt?.leafId, attemptId: request.attempt?.attemptId,\n }),\n timeoutMs: Math.min(request.timeoutMs ?? VERSION_TIMEOUT_MS, VERSION_TIMEOUT_MS),\n teardownGraceMs: Math.min(request.timeoutGraceMs ?? VERSION_TEARDOWN_MS, VERSION_TEARDOWN_MS),\n maxOutputBytes: Math.min(request.maxOutputBytes ?? VERSION_OUTPUT_BYTES, VERSION_OUTPUT_BYTES),\n maxMemoryBytes: request.maxMemoryBytes ?? DEFAULT_OWNED_COMMAND_LIMITS.maxMemoryBytes,\n }, signal);\n if (command.aborted || signal.aborted) throw loopError('aborted', 'OpenCode version check was aborted');\n if (command.timedOut) throw loopError('timeout', 'OpenCode version check timed out');\n if (command.exitCode !== 0) throw loopError('invalid-config', 'OpenCode version command did not succeed');\n const observed = new TextDecoder().decode(command.stdout).trim();\n if (!OPENCODE_VERSION.test(observed)) {\n throw loopError('invalid-config', 'OpenCode returned an unsupported version format');\n }\n if (observed !== SUPPORTED_VERSION) {\n throw loopError('invalid-config', 'OpenCode observed version does not match its supported version');\n }\n version = observed;\n } catch (error) {\n versionFailed = true;\n versionFailure = error;\n }\n\n try {\n rmSync(directory, { recursive: true, force: true });\n } catch {\n if (!versionFailed) {\n throw loopError(\n 'unknown',\n 'OpenCode version temporary configuration could not be removed',\n );\n }\n }\n\n if (versionFailed) {\n const error = versionFailure;\n if (error instanceof EngineError) throw error;\n if (signal.aborted) throw loopError('aborted', 'OpenCode version check was aborted');\n if (error instanceof OwnedCommandError) {\n if (error.code === 'INVALID_EXECUTABLE') {\n throw loopError('missing-cli', 'OpenCode configured executable could not start');\n }\n if (error.code === 'SPAWN_FAILED') {\n try { resolveCommandExecutable(this.#executable); }\n catch { throw loopError('missing-cli', 'OpenCode configured executable is missing or not runnable'); }\n throw loopError('unknown', 'OpenCode version process could not start');\n }\n if (error.code === 'OUTPUT_LIMIT' || error.code === 'INVALID_COMMAND') {\n throw loopError('invalid-config', 'OpenCode version command exceeded or rejected its limits');\n }\n }\n if (error instanceof TypeError) {\n throw loopError('invalid-config', 'OpenCode version configuration is invalid');\n }\n throw loopError('unknown', 'OpenCode version check could not complete');\n }\n\n return version!;\n }\n\n async run(\n request: AgentRequest,\n onEvent: EngineEventSink,\n signal: AbortSignal,\n ): Promise<AgentResult> {\n if (signal.aborted) {\n throw loopError('aborted', 'OpenCode attempt was aborted before start');\n }\n const { prompt: _prompt, ...staticRequest } = request;\n const requested = await this.admit(staticRequest, signal);\n const capabilities = requested.capabilities;\n if (typeof request.cwd !== 'string' || !isAbsolute(request.cwd)) {\n throw new TypeError('OpenCode request cwd must be an absolute path');\n }\n const cwd = realpathSync(request.cwd);\n assertNoProjectInstructions(cwd, capabilities);\n const normalized: AgentRequest = { ...request, cwd };\n const directory = mkdtempSync(join(tmpdir(), 'lines-opencode-'));\n const accumulator: OpenCodeAccumulator = {\n frames: [],\n seenParts: new Map(),\n text: [],\n sessionId: null,\n protocolError: null,\n terminalError: null,\n stopReason: null,\n stepCount: 0,\n usageValid: true,\n inputTokens: 0,\n outputTokens: 0,\n cacheCreationInputTokens: 0,\n cacheReadInputTokens: 0,\n };\n const decoder = new TextDecoder();\n let buffer = '';\n const parserAbort = new AbortController();\n const commandSignal = AbortSignal.any([signal, parserAbort.signal]);\n const structured = request.jsonSchema !== undefined;\n const scrub = (value: string): string => scrubCapture(\n scrubExactValues(value, {\n ...this.#authRedactions,\n ...this.#environment,\n }),\n { ...this.#environment },\n 700,\n );\n const owner = ownedCommandIdentity({\n adapter: 'opencode-cli',\n runId: request.attempt?.runId,\n leafId: request.attempt?.leafId,\n attemptId: request.attempt?.attemptId,\n });\n const startedAt = Date.now();\n\n try {\n const invocation = buildOpenCodeInvocation(\n normalized,\n this.#options,\n directory,\n );\n // Close the window between the admission check and this spawn: a\n // machine-managed config can arrive after admission passes. The\n // between-admission-and-spawn case in the plugin's spec\n // demonstrates the arrival.\n assertNoManagedConfig(managedConfigSources(this.#options.managedConfigDirectories));\n const command = await runOwnedCommand({\n executable: this.#executable,\n args: invocation.args,\n cwd,\n env: invocation.environment,\n inheritParentEnv: false,\n stdin: invocation.stdin,\n ...owner,\n ...DEFAULT_OWNED_COMMAND_LIMITS,\n timeoutMs:\n request.timeoutMs ?? DEFAULT_OWNED_COMMAND_LIMITS.timeoutMs,\n teardownGraceMs:\n request.timeoutGraceMs ?? DEFAULT_OWNED_COMMAND_LIMITS.teardownGraceMs,\n maxOutputBytes:\n request.maxOutputBytes ?? DEFAULT_OWNED_COMMAND_LIMITS.maxOutputBytes,\n maxMemoryBytes:\n request.maxMemoryBytes ?? DEFAULT_OWNED_COMMAND_LIMITS.maxMemoryBytes,\n }, commandSignal, {\n onStdout(chunk) {\n buffer += decoder.decode(chunk, { stream: true });\n let newline: number;\n while ((newline = buffer.indexOf('\\n')) >= 0) {\n consumeLine(\n buffer.slice(0, newline),\n accumulator,\n onEvent,\n structured,\n capabilities,\n );\n buffer = buffer.slice(newline + 1);\n if (accumulator.protocolError !== null) {\n parserAbort.abort();\n return;\n }\n }\n },\n });\n buffer += decoder.decode();\n if (buffer.trim().length > 0) {\n consumeLine(buffer, accumulator, onEvent, structured, capabilities);\n }\n\n if (accumulator.protocolError !== null) {\n throw loopError(\n 'invalid-config',\n `OpenCode returned an invalid JSON protocol: ${scrub(accumulator.protocolError.message)}`,\n );\n }\n const aborted = command.aborted || signal.aborted;\n if (aborted && accumulator.stopReason !== 'stop') {\n throw loopError('aborted', 'OpenCode attempt was aborted');\n }\n\n const stderr = scrub(new TextDecoder().decode(command.stderr));\n const nativeKind = accumulator.terminalError === null\n ? undefined\n : nativeFailure(accumulator.terminalError);\n const nativeMessage = accumulator.terminalError === null\n ? ''\n : scrub(errorMessage(accumulator.terminalError));\n const failed = aborted\n || command.timedOut\n || command.exitCode !== 0\n || accumulator.terminalError !== null;\n const parts = resultParts(accumulator);\n if (\n accumulator.stopReason === 'error'\n || accumulator.stopReason === 'content-filter'\n ) {\n throw loopError(\n 'unknown',\n `OpenCode ended with ${accumulator.stopReason}`,\n );\n }\n if (accumulator.stopReason === 'length') {\n const measuredUsage = usage(accumulator);\n const effective = requested;\n onEvent({\n type: 'usage',\n usage: measuredUsage,\n model: effective.model ?? 'unknown',\n });\n throw new EngineIncompleteResultError(\n 'OpenCode output ended at the token limit',\n validateIncompleteResultEvidence({\n parts,\n usage: measuredUsage,\n requested,\n effective,\n stopReason: 'length',\n ...(failed\n ? {\n transportFailure: transportFailure(\n command.timedOut\n ? 'timeout'\n : nativeKind ?? classifyEngineFailure(new Error(stderr)),\n nativeMessage || stderr || 'OpenCode transport failed',\n command.exitCode,\n ),\n }\n : {}),\n raw: cloneFrozenJson(accumulator.frames),\n }),\n );\n }\n const markedFinal = accumulator.stopReason === 'stop';\n if (!markedFinal) {\n if (!failed) {\n throw loopError(\n 'invalid-config',\n 'OpenCode completed without a final step',\n );\n }\n const kind = command.timedOut\n ? 'timeout'\n : nativeKind ?? classifyEngineFailure(new Error(stderr));\n throw loopError(\n kind,\n typedFailureMessage(\n kind,\n nativeMessage || stderr || 'incomplete result',\n ),\n nativeLimitHints(accumulator.terminalError),\n );\n }\n\n if (parts.length === 0) {\n if (failed) {\n const kind = command.timedOut\n ? 'timeout'\n : nativeKind ?? classifyEngineFailure(new Error(stderr));\n throw loopError(\n kind,\n typedFailureMessage(\n kind,\n nativeMessage || stderr || 'OpenCode produced no result text',\n ),\n nativeLimitHints(accumulator.terminalError),\n );\n }\n const measuredUsage = usage(accumulator);\n const effective = requested;\n onEvent({\n type: 'usage',\n usage: measuredUsage,\n model: effective.model ?? 'unknown',\n });\n throw new EngineIncompleteResultError(\n 'OpenCode completed without a final text part',\n validateIncompleteResultEvidence({\n parts,\n usage: measuredUsage,\n requested,\n effective,\n stopReason: 'stop',\n raw: cloneFrozenJson(accumulator.frames),\n }),\n );\n }\n\n const measuredUsage = usage(accumulator);\n const effective = requested;\n onEvent({\n type: 'usage',\n usage: measuredUsage,\n model: effective.model ?? 'unknown',\n });\n const late = request.timeoutMs !== undefined\n && Date.now() - startedAt > request.timeoutMs;\n const failureKind = aborted\n ? 'aborted'\n : command.timedOut\n ? 'timeout'\n : nativeKind ?? classifyEngineFailure(new Error(stderr));\n const transportMessage = nativeMessage\n || stderr\n || 'OpenCode transport failed after its final result';\n return validateAgentResult({\n parts,\n usage: measuredUsage,\n requested,\n effective,\n ...(accumulator.stopReason === null\n ? {}\n : { stopReason: accumulator.stopReason }),\n ...(failed\n ? {\n transportFailure: transportFailure(\n failureKind,\n transportMessage,\n command.exitCode,\n ),\n }\n : late\n ? {\n transportFailure: transportFailure(\n 'timeout',\n 'OpenCode result arrived after the soft timeout',\n command.exitCode,\n ),\n }\n : {}),\n raw: cloneFrozenJson(accumulator.frames),\n });\n } catch (error) {\n if (error instanceof OwnedCommandError && error.code === 'INVALID_EXECUTABLE') {\n throw loopError('missing-cli', 'OpenCode configured executable could not start');\n }\n if (error instanceof OwnedCommandError && error.code === 'SPAWN_FAILED') {\n try { resolveCommandExecutable(this.#executable); }\n catch { throw loopError('missing-cli', 'OpenCode configured executable is missing or not runnable'); }\n throw loopError('unknown', 'OpenCode model process could not start');\n }\n throw error;\n } finally {\n rmSync(directory, { recursive: true, force: true });\n }\n }\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { type AgentRequest, type AgentResult, type Engine, type EngineEventSink, type EngineSelectionRecord, type JsonObject } from '@obversa/api';
2
+ export interface OpenCodeCliIdentity {
3
+ readonly provider: string | null;
4
+ readonly modelFamily: string | null;
5
+ }
6
+ export interface OpenCodeCliEngineOptions {
7
+ readonly executable: string;
8
+ readonly version: string;
9
+ readonly identity: OpenCodeCliIdentity;
10
+ /** Exact host-selected values copied into the clean child environment. */
11
+ readonly environment?: Readonly<Record<string, string>>;
12
+ /** Exact provider-keyed OpenCode auth data copied into the child environment. */
13
+ readonly auth?: JsonObject;
14
+ /** Extra directories the managed-config check also reads, beyond the real
15
+ * system paths. Production callers pass none; a caller must pass a
16
+ * directory deliberately, so an ambient environment variable cannot. */
17
+ readonly managedConfigDirectories?: readonly string[];
18
+ }
19
+ export interface OpenCodeSeatOptions {
20
+ readonly executable: string;
21
+ readonly tools?: readonly string[];
22
+ }
23
+ export interface OpenCodeSeat {
24
+ readonly engine: OpenCodeCliEngine;
25
+ readonly identity: {
26
+ readonly adapter: 'opencode-cli';
27
+ readonly provider: string;
28
+ readonly modelFamily: string;
29
+ readonly model: string;
30
+ readonly tools: readonly string[];
31
+ };
32
+ }
33
+ /** Create the OpenCode seat used by declarative team workflows. */
34
+ export declare function opencode(modelName: string, options: OpenCodeSeatOptions): OpenCodeSeat;
35
+ export interface OpenCodeInvocation {
36
+ readonly args: readonly string[];
37
+ readonly stdin: string;
38
+ readonly environment: Readonly<Record<string, string>>;
39
+ readonly configDirectory: string;
40
+ }
41
+ /** The managed-config files a machine may control, from the real system
42
+ * locations plus any extra directories the caller supplies. Production
43
+ * callers pass no extras; tests pass their fixture directory. */
44
+ declare function managedConfigSources(extraDirectories?: readonly string[]): readonly string[];
45
+ /** The first managed-config file that exists on disk, or undefined. Pure: it
46
+ * reads only the source list it is given. */
47
+ declare function findManagedConfig(sources: readonly string[]): string | undefined;
48
+ /** Refuse to run when a managed config file exists, naming the exact file. */
49
+ declare function assertNoManagedConfig(sources: readonly string[]): void;
50
+ export declare function buildOpenCodeInvocation(request: AgentRequest, options: OpenCodeCliEngineOptions, rawDirectory: string): OpenCodeInvocation;
51
+ export { assertNoManagedConfig, findManagedConfig, managedConfigSources };
52
+ export declare class OpenCodeCliEngine implements Engine {
53
+ #private;
54
+ readonly name = "opencode-cli";
55
+ constructor(options: OpenCodeCliEngineOptions);
56
+ admit(request: Omit<AgentRequest, 'prompt'>, signal: AbortSignal, expectedSelection?: EngineSelectionRecord): Promise<EngineSelectionRecord>;
57
+ run(request: AgentRequest, onEvent: EngineEventSink, signal: AbortSignal): Promise<AgentResult>;
58
+ }
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@obversa/engine-opencode-cli",
3
+ "version": "0.1.0",
4
+ "description": "Run one isolated engine attempt through a fresh OpenCode CLI process.",
5
+ "author": "Jonny Neill <jonnyneill@hotmail.com>",
6
+ "type": "module",
7
+ "license": "MIT",
8
+ "sideEffects": false,
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "engines": {
13
+ "node": ">=22.12.0"
14
+ },
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "dependencies": {
29
+ "@obversa/api": "^0.1.0",
30
+ "@obversa/core": "^0.1.0"
31
+ },
32
+ "keywords": [
33
+ "agent",
34
+ "graph",
35
+ "workflow",
36
+ "runtime",
37
+ "obversa"
38
+ ],
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/jonny981/obversa.git"
42
+ },
43
+ "homepage": "https://docs.obversa.ai",
44
+ "bugs": {
45
+ "url": "https://github.com/jonny981/obversa/issues"
46
+ },
47
+ "scripts": {
48
+ "build": "tsup && tsc -p tsconfig.build.json",
49
+ "test": "vitest run",
50
+ "typecheck": "tsc --noEmit -p tsconfig.json",
51
+ "typecheck:ts6": "tsc6 --noEmit -p tsconfig.json"
52
+ }
53
+ }