用途:opencode worker 将 OpenCode API 封装为 iii 函数。一次 opencode::run 调用会在指定工作目录中执行一个无头 OpenCode 回合,使用与终端中相同的 agent 和工具,返回最终结果、token 用量与成本。
主要能力:OpenCode 发出的每个 JSON 事件(step_start、text、tool_use、step_finish)会原样映射到 opencode::events;翻译后的 AgentEvent 视图出现在 agent::events,供 iii 控制台和 acp worker 渲染。支持按回合指定 model(provider/model)与 agent(OpenCode agent 名称)。回合默认携带 iii 运行时上下文,agent 可通过 iii CLI 发现并调用已注册函数,可用 iii_context: false 关闭。
使用方式:需在主机上安装 opencode CLI,并配置所用 LLM 提供商的 API key(如 ANTHROPIC_API_KEY,或 opencode auth)。opencode::run 接收 prompt(或 messages 数组)及 model、cwd、agent、iii_context,返回 {session_id, opencode_session_id, result, stop_reason, usage, total_cost_usd}。传入相同 session_id 可恢复底层 OpenCode 会话(--session)。长任务可用 opencode::start 立即返回 {session_id, started},再跟进 agent::events(group_id = session_id)或 opencode::events,并用 opencode::stop 中断。其他函数包括 opencode::status(live、status、turns、usage、cost)、opencode::sessions::list,以及 run::start_and_wait 别名。
适用场景:一次调用委派完整编码任务(如“添加一个端点并运行测试”)、跨调用延续对话、不阻塞调用地运行长任务、让 agent 操作整个后端。
限制:每回合都会启动主机上的 opencode CLI,需要已安装 OpenCode 和提供商密钥,裸容器中不可用。opencode::run / opencode::start 未经人工批准不可被 agent 调用(它们会以主机 shell 和文件系统启动完整 agent),只读内省允许(见 iii-permissions.yaml)。同一 session_id 同一时间只能有一个回合,再次运行前先检查 opencode::status(live: true)。