OpenCode 源码解析 · 第 8 讲
OpenCode 源码解析 第 8 讲:ACP 子代理协议 基于 dev 分支源码 · 2026-07-14 什么是 ACP? ACP(Agent Client Protocol)是 OpenCode 实现的一个 标准化代理客户端协议 ,让外部编辑器、IDE 和其他客户端能以统一的方式与 OpenCode 的 AI 能力交互。它基于 @agentclientprotocol/sdk (v0.21.0)构建,本质上是一个 JSON-RPC 风格的适配器层 ——把 OpenCode 内部的 session、tool、permission 等核心能力翻译成协议客户端能理解的请求/响应。 源码位置: packages/opencode/src/acp/ ,共 12 个文件,约 3,446 行 TypeScript。 外部客户端(IDE / 编辑器 / CLI) JSON-RPC over @agentclientprotocol/sdk ACP 适配器层(12 文件 / 3,446 行) service.ts · session.ts · event.ts · tool.ts · permission.ts · content.ts · directory.ts · usage.ts OpenCode SDK Client(内部 API 调用) OpenCode 核心能力 Session · Tool · Permission · Provider · MCP ACP 的 12 个核心模块 模块 行数 职责 service.ts 1,097 主服务:initialize / session / prompt 等全部协议方法 event.ts 342 事件订阅:实时推送 message/tool/permission 事件 tool.ts 364 工具调用翻译:pending/running/completed/error 状态机 permission.ts 254 权限请求:requestPermission → reply 桥接 content.ts 269 内容转换:ContentBlock ↔ PromptPart 双向映射 session.ts 232 会话状态:Map 存储 + Effect Ref 管理 usage.ts 239 用量追踪:token 统计 + 上下文限制 + 费用计算 directory.ts 212 目录快照:provider/mode/command 聚合 config-option.ts 203 配置选项:model/effort/mode 的 ACP 映射 error.ts 97 错误类型:9 种 TaggedError → RequestError agent.ts 95 Agent 门面:Effect → Promise 桥接 profile.ts 42 性能分析:OPENCODE_ACP_PROFILE 环境变量 一、ACP 服务入口:service.ts(1,097 行) service.ts 是 ACP 的核心,实现了完整的 ACPService.Interface 接口,包含 13 个协议方法: 1. initialize — 握手:返回协议版本、能力声明、认证方法 2. authenticate — 认证:支持 "opencode-login" 和 terminal-auth 3. newSession — 创建会话:加载目录快照、选择默认模型 4. loadSession — 加载历史会话:恢复消息、模型、MCP 服务器 5. listSessions — 列出会话:合并内存与服务端会话 6. resumeSession — 恢复会话:重新加载最近 20 条消息 7. closeSession — 关闭会话:中止底层 session、清理资源 8. forkSession — 分叉会话:复制当前会话到新实例 9. setSessionConfigOption — 配置选项:切换 model/effort/mode 10. setSessionMode — 设置模式 11. setSessionModel — 设置模型 12. prompt — 发送提示:核心对话入口 13. cancel …
阅读全文:OpenCode 源码解析 第 8 讲