跳转至

OpenCode 源码课程

返回学习入口

OpenCode 围绕服务化 Session 组织运行过程:Project 和 Config 先选定这次运行要用的环境,Provider(模型提供商)接好模型接口,Session Prompt 再驱动主循环,让 Processor(处理器)接住模型流和工具结果,最后由 Server 与 Protocol 把这套核心能力交给多个客户端使用。

OpenCode 系统地图

这条课程适合谁

如果你已经读完基础导读,想看 TUI(终端用户界面)、Desktop、Web 和协议客户端怎样共用一个 Agent 核心,OpenCode 很适合作为下一站。它没有停在最小 Loop 上,还把 Project、Server 和持久化边界摆到了同一条运行链里。

锁定来源

课程基于 OpenCode 提交 3a31c4ea801915c0b050df4b3842997ea62b6e93

先看一项任务

客户端先在某个 Project 里创建或选中 Session,Prompt 主链随后把消息、Agent 配置和工具组到一起,再向 Provider 发起模型请求。模型开始流式返回后,Processor 会逐项处理事件和工具状态,权限询问则跟着 Session 事件送到客户端,用户给出的结果还会写回原来的 Session。

TUI / Desktop / Web / ACP
  → Server / Protocol
  → Project 与 Session
  → Prompt / LLM
  → Processor 与 Tools
  → Permission / Question
  → Message Store 与下一轮

OpenCode 端到端任务流程

图里的客户端只负责展示询问和结果,服务核心才真正维护 Session 状态。即使同时接入多个客户端,也不会因此复制出多套 Agent Loop(智能体循环)。

仓库地图

区域 首轮关注点
packages/opencode/src/project 与 Config 工作区和配置怎样建立
packages/opencode/src/provider 多 Provider 怎样归一化
packages/opencode/src/session Prompt、LLM、Processor、消息和压缩
Tools 与 Permission 工具副作用和用户询问
Agent、Skills、Plugins、MCP、LSP 运行时扩展和上下文来源
packages/serverpackages/protocol 多客户端怎样共享服务核心
TUI、Desktop、Web、ACP 同一事件在不同表面怎样呈现

Permission(权限)规则可以决定产品是否放行某个动作,用户询问也能在执行前把流程停下来,但这两层都不会自动变成操作系统 Sandbox,进程到底被隔离到什么程度,仍要看宿主和另行配置的执行环境。这两层不能混。

三层读法

  • Starter:先读 Runtime、Session Prompt 和工具权限,跟完一次请求。
  • Builder:继续读 Storage、Compaction、Revert 与扩展,解释状态怎样被改写。
  • Maintainer:检查 Server、Protocol、Share、Telemetry 与多客户端一致性边界。

阅读顺序

  1. Runtime、Project、Config 与 Provider
  2. Session Prompt、LLM 与 Processor
  3. Tools、Permission、Question 与 Patch
  4. Storage、Compaction 与 Revert
  5. Agents、Skills、Plugins、MCP 与 LSP
  6. Server、Protocol 与多产品表面
  7. Share、Telemetry 与 Eval 边界

用贯穿任务复盘

复盘时从客户端选择 Server/Directory 开始,沿着一次真实运行往下讲:Project、Config 和 Provider 怎样把实例建起来,Session Prompt 怎样驱动 LLM 与 Processor,Permission Question 怎样送到客户端,Message 和 Part 怎样落盘,Compaction(上下文压缩)与 Revert 又怎样改写模型下一轮真正能看到的历史。最后再看各种产品表面怎样从同一个 Server 读取事实。

读到最后,你还要逐个判断 Share 同步、OpenTelemetry Span、Session Idle 和独立测试到底各自能证明什么。它们都能关联到同一个 Session,但这几类证据不能互相替代。

完成课程后应该能回答

  • Project、Config、Provider 和 Session 的创建顺序。
  • Prompt 怎样形成模型请求,Processor 怎样消费结果。
  • 工具和权限事件怎样跨服务端与客户端。
  • Message、History、Compaction 和 Revert 如何改变 Session。
  • 多种产品表面共享了哪些协议和状态。
  • Share、Telemetry 和测试能支持哪些核对,哪些仍需外部 Eval。

从第一篇开始:Runtime、Project、Config 与 Provider