拆解 opencode 源码 · 系列目录
叙事框架:首席架构师带你看设计权衡 总计 60 篇,已发布 5 篇,55 篇待完善
序章
第一章 前置篇(4篇)
第二章 CLI 入口与启动流程(3篇)
- ✅ yargs CLI 构建:从 index.ts 到所有子命令
- ⏳ bootstrap 做了什么:环境检测与运行时初始化
- ⏳ run 命令全流程:从
opencode到 Agent Loop
第三章 命令与工作流(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