Skip to content

Ubik42/OpencodeSrcChineseDoc

Repository files navigation

OpenCode src 目录完全指南

本文档是为终端 AI 工具开发新手准备的,会用生动的比喻和实例帮你理解整个架构。

什么是 OpenCode?

OpenCode 是一个终端 AI 编程助手。想象你有一个聪明的程序员朋友,ta 可以:

  • 阅读你的代码(Read 工具)
  • 帮你写代码(Edit/Write 工具)
  • 运行命令(Bash 工具)
  • 搜索文件(Glob/Grep 工具)
  • 回答编程问题

而 OpenCode 就是在终端里实现这一切的程序。


核心概念速览(先懂这些再看代码)

1. Session(会话)—— 你和 AI 的一次对话

用户: "帮我写一个排序函数"
  ↓
AI: "好的,我来写..."(调用 Write 工具)
  ↓
用户: "改成从大到小排序"
  ↓
AI: "好的,我修改一下..."(调用 Edit 工具)

这整个对话过程就是一个 Session。Session 会记住:

  • 你说过的话(消息历史)
  • AI 用过的工具(工具调用记录)
  • 文件的改动(快照和补丁)

2. Tool(工具)—— AI 的"手"

AI 模型本身只能"思考"和"说话",但不能真正操作你的电脑。工具就是 AI 的"手":

工具名 做什么 现实比喻
read 读取文件内容 打开文件看一眼
write 创建新文件 新建一个文档
edit 修改文件 用橡皮擦掉一部分,写上新内容
bash 运行命令 在终端里敲命令
glob 搜索文件名 在文件夹里找 *.js 文件
grep 搜索文件内容 全文搜索"TODO"

3. Provider(提供者)—— AI 大脑的来源

OpenCode 可以连接不同的 AI 模型,比如:

  • Anthropic Claude:Anthropic 公司的模型
  • OpenAI GPT:OpenAI 公司的模型
  • Google Gemini:Google 的模型

每个 Provider 就像不同品牌的"大脑",你可以选择用哪个。

4. Agent(代理)—— AI 的"人设"

Agent 定义了 AI 的行为模式:

  • build:写代码模式,可以读写文件
  • plan:规划模式,只规划不执行
  • explore:探索模式,快速浏览代码库

就像同一个人可以是"认真工作"或"头脑风暴"不同状态。

5. Permission(权限)—— 安全门卫

AI 想做某些事情时,可能需要你批准:

  • allow:直接允许
  • deny:直接拒绝
  • ask:每次都问你

比如删除文件这种危险操作,通常会设为 ask

6. MCP(Model Context Protocol)—— 插件协议

MCP 是一个标准协议,让 AI 可以使用外部工具。比如:

  • 连接数据库查询
  • 调用第三方 API
  • 使用专业软件

就像给 AI 装上了各种"插件"。

7. ACP(Agent Client Protocol)—— IDE 通信协议

ACP 让 IDE(如 Zed、VS Code)可以直接与 OpenCode 对话。这样你在 IDE 里就能使用 OpenCode 的全部功能。


架构全景图

┌─────────────────────────────────────────────────────────────────┐
│                        用户界面层                                 │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐             │
│  │   CLI   │  │   TUI   │  │   IDE   │  │   Web   │             │
│  │(命令行) │  │(终端UI) │  │(编辑器) │  │(浏览器) │             │
│  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘             │
│       │            │            │            │                   │
│       └────────────┴─────┬──────┴────────────┘                   │
│                          ↓                                       │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                    Server (HTTP API)                       │  │
│  │   /session  /project  /permission  /config  /event        │  │
│  └───────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────────┐
│                        核心业务层                                 │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │                      Session 会话                        │    │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐   │    │
│  │  │ Message  │ │Processor │ │ Prompt   │ │Compaction│   │    │
│  │  │  消息    │ │  处理器  │ │ 提示词   │ │  压缩    │   │    │
│  │  └──────────┘ └──────────┘ └──────────┘ └──────────┘   │    │
│  └─────────────────────────────────────────────────────────┘    │
│                                                                  │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐  │
│  │    Agent    │  │  Permission │  │         Tool            │  │
│  │   AI 人设   │  │    权限     │  │  read/write/edit/bash   │  │
│  └─────────────┘  └─────────────┘  └─────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────────┐
│                        外部连接层                                 │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐              │
│  │  Provider   │  │     MCP     │  │     LSP     │              │
│  │  AI 模型    │  │  外部工具   │  │ 语言服务器  │              │
│  └─────────────┘  └─────────────┘  └─────────────┘              │
│        ↓                ↓                ↓                       │
│   Claude/GPT      数据库/API       代码补全/诊断                  │
└─────────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────────┐
│                        基础设施层                                 │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐        │
│  │Storage │ │ Config │ │  Bus   │ │  File  │ │  Log   │        │
│  │ 存储   │ │  配置  │ │ 事件   │ │ 文件   │ │ 日志   │        │
│  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘        │
└─────────────────────────────────────────────────────────────────┘

目录结构详解

1. 用户交互层(你直接接触的)

目录 职责 通俗解释
cli/ 命令行接口 opencode run 这类命令的实现
acp/ IDE 通信 让 Zed/VS Code 能使用 OpenCode
ide/ IDE 集成 VS Code 插件的后端
pty/ 伪终端 支持交互式命令(如 vim)
shell/ Shell 执行 运行 bash 命令
share/ 分享功能 分享对话给别人看

2. 会话与智能核心(AI 的大脑)

目录 职责 通俗解释
session/ 会话管理 记录对话历史、调用 AI
agent/ Agent 配置 定义 AI 的行为模式
tool/ 工具集合 AI 能使用的所有工具
permission/ 权限管理 控制 AI 能做什么
question/ 提问机制 AI 向用户提问
skill/ 技能系统 AI 的专业技能(如写测试)
command/ 内置命令 /compact /clear 等命令
scheduler/ 任务调度 管理多个任务(开发中)

3. 项目与文件系统(管理你的代码)

目录 职责 通俗解释
project/ 项目识别 识别 Git 仓库、工作目录
file/ 文件操作 读写文件、搜索文件
worktree/ Git Worktree 创建隔离的工作目录
storage/ 数据存储 保存会话、配置到磁盘
snapshot/ 文件快照 记录文件改动
patch/ 补丁系统 生成和应用代码补丁

4. 模型与外部服务(AI 的能力来源)

目录 职责 通俗解释
provider/ AI 提供者 连接 Claude/GPT/Gemini
auth/ 认证管理 管理 API Key
mcp/ MCP 协议 连接外部工具
plugin/ 插件系统 扩展功能
lsp/ 语言服务 代码补全、错误检查
format/ 代码格式化 美化代码

5. 平台支撑(底层基础设施)

目录 职责 通俗解释
server/ HTTP 服务 提供 API 接口
bus/ 事件总线 模块间通信
config/ 配置加载 读取 opencode.json
env/ 环境变量 管理环境变量
flag/ 功能开关 控制实验性功能
global/ 全局路径 管理配置文件路径
installation/ 安装信息 版本、升级
bun/ Bun 运行时 封装 Bun API
id/ ID 生成 生成唯一标识符
util/ 工具函数 各种通用工具

一个完整的工作流程

当你输入 opencode run "写一个 hello world" 时,发生了什么?

1. CLI 解析命令
   cli/cmd/run.ts → 解析参数,创建 Instance

2. 创建 Session
   session/index.ts → 新建会话,分配 ID

3. 构建 Prompt
   session/prompt.ts → 拼接系统提示词 + 用户消息

4. 选择 Agent 和 Model
   agent/agent.ts → 选择 "build" Agent
   provider/provider.ts → 选择 Claude/GPT 模型

5. 调用 AI
   session/llm.ts → 发送请求给 AI 模型

6. 处理响应
   session/processor.ts → 处理 AI 的回复

7. 执行工具(如果 AI 要写文件)
   tool/write.ts → 检查权限 → 写入文件

8. 更新 Session
   session/index.ts → 保存消息到 Storage

9. 显示结果
   cli/ui.ts → 在终端显示结果

各模块详细文档

每个子目录都有自己的 README.md,包含:

  • 模块的具体职责
  • 关键文件说明
  • 代码示例
  • 常见问题

建议阅读顺序:

  1. session/README.md - 理解会话机制
  2. tool/README.md - 理解工具系统
  3. provider/README.md - 理解 AI 连接
  4. acp/README.md - 理解协议(可选)
  5. mcp/README.md - 理解插件(可选)

快速上手建议

如果你想理解代码流程

  1. index.ts 开始,看命令注册
  2. 找到 cli/cmd/run.ts,看 run 命令实现
  3. 进入 session/index.ts,看会话创建
  4. 进入 session/processor.ts,看 AI 调用

如果你想添加新工具

  1. 参考 tool/read.ts 的实现
  2. tool/ 下新建 mytool.ts
  3. tool/registry.ts 注册工具

如果你想接入新的 AI 模型

  1. 查看 provider/models.ts 的数据结构
  2. 在配置文件中添加 provider
  3. 参考 provider/provider.ts 的加载逻辑

常用术语表

术语 英文 解释
会话 Session 一次完整的对话
消息 Message 对话中的一条内容
部件 Part 消息的组成部分(文本/工具调用/附件)
工具 Tool AI 可调用的功能
提供者 Provider AI 模型服务商
代理 Agent AI 的行为配置
权限 Permission 操作的授权控制
压缩 Compaction 把长对话压缩成摘要
快照 Snapshot 文件状态的记录
补丁 Patch 文件改动的记录

继续深入:打开各子目录的 README.md 了解更多细节。

About

opencode源码中文文档详解,子文件夹里也都有README.md,PromptContent.md里有完整的提示词注入流程。文档OPUS4.5生成

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors