Documentation Index
Fetch the complete documentation index at: https://agentstack.cc/llms.txt
Use this file to discover all available pages before exploring further.
OpenCode Core Package Architecture
1. 包概述
packages/opencode/ 是 OpenCode 的核心包,包含了系统的核心功能实现、CLI 工具和服务端组件。它是整个 OpenCode 系统的基础,提供了 AI 辅助开发的核心能力。
核心定位
- 提供完整的 CLI 工具链
- 实现 AI 代理系统
- 管理会话和消息
- 集成多种 AI 模型提供商
- 实现语言服务器协议支持
- 提供文件系统操作和工具集
- 实现服务端 API
2. 目录结构
opencode 包采用模块化架构,各模块职责清晰:
opencode/src/
├── acp/ # Agent Client Protocol 支持
├── agent/ # AI 代理系统
├── auth/ # 认证系统
├── bun/ # Bun 运行时集成
├── bus/ # 事件总线
├── cli/ # 命令行界面
├── command/ # 内置命令
├── config/ # 配置管理
├── env/ # 环境变量管理
├── file/ # 文件系统操作
├── flag/ # 功能标志
├── format/ # 代码格式化
├── global/ # 全局变量和路径
├── id/ # 唯一标识符生成
├── ide/ # IDE 集成
├── installation/ # 安装管理
├── lsp/ # 语言服务器协议
├── mcp/ # Model Configuration Protocol
├── opencode/ # 主包入口
├── package/ # 包管理
├── permission/ # 权限管理
├── plugin/ # 插件系统
├── project/ # 项目管理
├── provider/ # AI 模型提供商
├── pty/ # 伪终端
├── question/ # 问题管理
├── session/ # 会话管理
├── server/ # 服务端实现
├── shell/ # Shell 集成
├── snapshot/ # 代码快照
├── skill/ # 技能系统
├── storage/ # 数据存储
├── tool/ # 工具集
├── util/ # 工具函数
└── worktree/ # 工作树管理
3. 核心模块
3.1 Agent 系统
Agent 系统是 OpenCode 的核心,负责协调 AI 模型和工具执行。
主要组件:
agent.ts: 代理核心实现
- 支持多种内置代理(build、plan)
核心能力:
- 代理执行计划和任务
- 管理工具调用和权限
- 协调多步操作
3.2 Session 管理
Session 模块负责管理用户会话和消息历史。
主要组件:
session/index.ts: 会话核心
session/message.ts: 消息管理
session/message-v2.ts: 消息格式 V2
session/prompt.ts: 提示处理
session/revert.ts: 消息回滚
核心能力:
- 创建和管理会话
- 存储和检索消息历史
- 支持消息回滚和恢复
- 处理用户提示和 AI 响应
3.3 Provider 集成
Provider 模块负责与各种 AI 模型提供商集成。
主要组件:
provider/provider.ts: 提供商核心
provider/models.ts: 模型管理
provider/auth.ts: 认证处理
核心能力:
- 支持多种 AI 模型(Claude、OpenAI、Google 等)
- 统一模型调用接口
- 处理模型认证
- 管理模型配置
Tool 系统提供了丰富的工具集,供 AI 代理使用。
主要组件:
tool/tool.ts: 工具核心
tool/bash.ts: Shell 命令执行
tool/edit.ts: 文件编辑
tool/lsp.ts: LSP 工具
tool/read.ts: 文件读取
tool/write.ts: 文件写入
核心能力:
- 提供 20+ 种内置工具
- 支持工具调用和权限管理
- 实现文件系统操作
- 集成 LSP 功能
- 支持网络搜索和代码执行
3.5 Server 实现
Server 模块实现了 OpenCode 的服务端 API。
主要组件:
server/server.ts: 服务器核心
server/routes/: API 路由
核心能力:
- 实现 RESTful API
- 支持 WebSocket 和 SSE
- 处理会话和消息请求
- 管理文件和项目操作
- 提供 OpenAPI 文档
3.6 Storage 系统
Storage 模块实现了数据持久化存储。
主要组件:
核心能力:
- 基于文件系统的存储
- 支持数据迁移
- 提供 CRUD 操作
- 实现并发安全
3.7 CLI 工具
CLI 模块提供了命令行界面。
主要组件:
cli/index.ts: CLI 核心
cli/cmd/: 命令实现
cli/tui/: 终端用户界面
核心能力:
- 提供 20+ 种命令
- 实现 TUI 界面
- 支持会话管理
- 提供服务器启动和管理
3.8 LSP 支持
LSP 模块提供了语言服务器协议支持。
主要组件:
lsp/index.ts: LSP 核心
lsp/client.ts: LSP 客户端
lsp/server.ts: LSP 服务器
核心能力:
- 代码补全
- 定义跳转
- 引用查找
- 代码诊断
- 格式化支持
4. 系统架构
OpenCode 核心包采用分层架构设计:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 接口层 │ │ 核心服务层 │ │ 基础设施层 │
│ │ │ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ CLI │ │ │ │ Agent │ │ │ │ 事件总线 │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ └─────────────┘ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ Server │ │ │ │ Session │ │ │ │ 配置管理 │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ └─────────────┘ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ TUI │ │ │ │ Provider │ │ │ │ 文件系统 │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ └─────────────┘ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
4.1 数据流
- 用户输入:通过 CLI、TUI 或 API 接收用户输入
- 命令处理:CLI 或 Server 解析并处理命令
- 会话管理:创建或加载会话
- 代理执行:Agent 系统协调 AI 模型和工具
- 模型调用:通过 Provider 模块调用 AI 模型
- 工具执行:执行必要的文件系统或其他工具操作
- 结果返回:将结果返回给用户
4.2 事件机制
使用事件总线(Bus)实现模块间通信:
- 会话创建/更新事件
- 消息添加/更新事件
- 工具调用事件
- 状态变更事件
5. 核心功能实现
5.1 AI 代理执行流程
// 代理执行简化流程
async function executeAgent(sessionID: string, prompt: string) {
// 1. 创建会话和消息
const session = await Session.get(sessionID)
const userMessage = await MessageV2.create({
sessionID,
role: "user",
parts: [{ type: "text", text: prompt }]
})
// 2. 选择代理
const agent = await Agent.get(session.agent || "build")
// 3. 调用 AI 模型
const response = await agent.process(userMessage)
// 4. 处理 AI 响应
const assistantMessage = await MessageV2.create({
sessionID,
role: "assistant",
parentID: userMessage.id,
parts: response.parts
})
// 5. 执行工具调用
for (const part of response.parts) {
if (part.type === "tool") {
await Tool.execute(part)
}
}
return assistantMessage
}
5.2 会话管理
// 会话管理核心功能
namespace Session {
// 创建会话
export const create = async (input?: { parentID?: string; title?: string }) => {
const session = await createNext({
directory: Instance.directory,
parentID: input?.parentID,
title: input?.title
})
return session
}
// 获取会话消息
export const messages = async (input: { sessionID: string; limit?: number }) => {
const result = [] as MessageV2.WithParts[]
for await (const msg of MessageV2.stream(input.sessionID)) {
if (input.limit && result.length >= input.limit) break
result.push(msg)
}
result.reverse()
return result
}
// 会话消息流
export function* list() {
const project = Instance.project
for (const item of await Storage.list(["session", project.id])) {
yield Storage.read<Info>(item)
}
}
}
5.3 工具执行
// 工具执行核心
namespace Tool {
// 注册工具
export const register = (tool: Tool) => {
tools.set(tool.id, tool)
}
// 执行工具
export const execute = async (part: ToolPart) => {
const tool = tools.get(part.tool)
if (!tool) {
throw new Error(`Tool ${part.tool} not found`)
}
const result = await tool.execute(part.state.input)
return result
}
}
6. 技术栈
| 技术/框架 | 用途 | 版本 |
|---|
| TypeScript | 主要开发语言 | 5.x |
| Bun | 运行时和包管理器 | 1.x |
| Hono | Web 框架 | 4.x |
| Zod | 类型验证 | 3.x |
| XDG | 目录结构 | - |
| SolidJS | TUI 界面 | 1.x |
7. 核心 API
7.1 CLI 命令
# 启动服务器
opencode serve
# 启动 Web 应用
opencode web
# 运行 TUI 界面
opencode tui
# 管理会话
opencode session list
opencode session create
# 管理模型
opencode models list
opencode models set
# 管理代理
opencode agent list
opencode agent set
7.2 服务端 API
# 会话管理
GET /session # 列出会话
POST /session # 创建会话
GET /session/:sessionID # 获取会话
DELETE /session/:sessionID # 删除会话
# 消息管理
GET /session/:sessionID/message # 获取会话消息
POST /session/:sessionID/message # 发送消息
GET /session/:sessionID/message/:id # 获取消息
# 工具管理
GET /tool # 列出工具
# 代理管理
GET /agent # 列出代理
8. 扩展能力
8.1 插件系统
OpenCode 支持通过插件扩展功能:
- 自定义工具
- 新的 AI 代理
- 模型提供商集成
- IDE 集成扩展
8.2 工具扩展
可以通过注册新工具扩展 OpenCode 的能力:
// 自定义工具示例
const MyTool: Tool = {
id: "my-tool",
name: "My Custom Tool",
description: "My custom tool description",
parameters: z.object({
input: z.string()
}),
execute: async (input) => {
// 工具实现
return { output: `Processed: ${input.input}` }
}
}
// 注册工具
Tool.register(MyTool)
9. 性能与扩展性
9.1 性能优化
- 使用 Bun 运行时提高性能
- 懒加载模块减少启动时间
- 缓存常用数据
- 异步处理长时间运行的操作
9.2 扩展性设计
- 模块化架构便于扩展
- 插件系统支持第三方扩展
- 多模型提供商支持
- 可扩展的工具系统
10. 总结
packages/opencode/ 是 OpenCode 的核心包,提供了系统的核心功能实现。它采用模块化架构设计,各模块职责清晰,便于维护和扩展。核心能力包括 AI 代理系统、会话管理、多模型支持、工具系统、LSP 支持等。
通过这个核心包,OpenCode 实现了一个功能强大的 AI 辅助开发工具,支持多种交互方式和扩展能力。