拆解 opencode 源码 · 系列目录

叙事框架:首席架构师带你看设计权衡 总计 60 篇,已发布 5 篇,55 篇待完善


序章

第一章 前置篇(4篇)

第二章 CLI 入口与启动流程(3篇)

第三章 命令与工作流(5篇)

  • ⏳ 斜杠命令系统:/review /commit /diff 的注册与执行
  • ⏳ /config:配置管理的命令行入口
  • ⏳ Git 集成:代理中的版本控制工作流
  • ⏳ project/workspace 管理:工作单元的组织方式
  • ⏳ 错误处理体系:从 error.ts 到用户提示的完整链路

第四章 Agent 系统(6篇)

  • ⏳ Agent 定义体系:Info Schema、注册与发现
  • ⏳ 子代理 SubAgent 机制:权限隔离与调用链
  • ⏳ Agent 生成:LLM 动态创建 agent
  • ⏳ 编译器 Prompts:四个核心 txt 的设计意图
  • ⏳ 代理调度:primary vs subagent vs all 模式
  • ⏳ 上下文压缩策略:token 溢出时的降级

第五章 Session 会话引擎(8篇)

  • ⏳ Session 数据结构:行模型与版本演进
  • ⏳ 消息系统:MessageV1 → MessageV2 的演进
  • ⏳ 会话持久化:drizzle-orm 与 SQLite 存储
  • ⏳ LLM 调用层:request → ai-sdk → provider 链路
  • ⏳ Prompt 组装:14 个模型特定 prompt 的适配逻辑
  • ⏳ 状态机:run-state → retry → overflow 管理
  • ⏳ 工具执行上下文:tool-output-store 与结果流
  • ⏳ 会话摘要与成本追踪

第六章 Tool 工具系统(10篇)

  • ⏳ Tool 接口设计:统一抽象与 Builder 模式
  • ⏳ 工具注册中心:registry 的注册与发现机制
  • ⏳ read:最核心的工具实现
  • ⏳ write/edit:文件写入与精确替换
  • ⏳ bash/grep/glob:搜索与执行工具
  • ⏳ websearch/webfetch:网络工具实现
  • ⏳ plan/task/todo:多步骤计划与子代理工具
  • ⏳ question:交互式确认机制的设计
  • ⏳ apply_patch/truncate:diff 应用与截断策略
  • ⏳ JSON Schema 自动生成:从 Zod 到 LLM 工具定义

第七章 事件与存储层(5篇)

  • ⏳ 事件系统:EventV2 架构与模块间通信
  • ⏳ 存储层设计:storage/ 与 SQLite 持久化
  • ⏳ 快照机制:snapshot 的安全回退设计
  • ⏳ 后台任务:background job 的异步处理架构
  • ⏳ 配置系统:config/ 的加载、合并与热更新

第八章 Skill 技能系统(2篇)

  • ⏳ Skill 发现机制:文件扫描与热加载
  • ⏳ Skill 执行链路:index → discovery → session 注入

第九章 MCP 协议层(3篇)

  • ⏳ MCP 客户端:协议适配与服务管理
  • ⏳ OAuth 认证流:MCP 服务器授权机制
  • ⏳ MCP 工具桥接:外部工具集成模式

第十章 权限系统(3篇)

  • ⏳ 权限评估引擎:规则匹配与决策树
  • ⏳ 权限规则定义:Arity 检测与层级划分
  • ⏳ 权限在工具调用链中的位置与执行流程

第十一章 Provider 与 LLM 对接(3篇)

  • ⏳ Provider 抽象层:多模型供应商统一接口
  • ⏳ 模型切换与 fallback 策略
  • ⏳ Auth 凭证管理:API key 安全存储

第十二章 Effect-ts 运行时(3篇)

  • ⏳ Layer 系统:依赖注入与服务组合
  • ⏳ Instance 生命周期:state/registry/ref 管理
  • ⏳ Runtime 与 Bridge:跨包通信机制

第十三章 Plugin 与扩展机制(2篇)

  • ⏳ Plugin 加载:发现、验证与启动
  • ⏳ 扩展点设计:插件能在哪些位置介入

第十四章 手写还原(3篇)

  • ⏳ 手写最小 Tool 系统
  • ⏳ 手写最小 Agent Loop
  • ⏳ 手写 Effect-ts 式 DI 容器

最后更新:2026-06