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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

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消息的组成部分(文本/工具调用/附件)
工具ToolAI 可调用的功能
提供者ProviderAI 模型服务商
代理AgentAI 的行为配置
权限Permission操作的授权控制
压缩Compaction把长对话压缩成摘要
快照Snapshot文件状态的记录
补丁Patch文件改动的记录

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

About

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

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages