OpenCode Core Package Architecture
1. 包概述
packages/opencode/ 是 OpenCode 的核心包,包含了系统的核心功能实现、CLI 工具和服务端组件。它是整个 OpenCode 系统的基础,提供了 AI 辅助开发的核心能力。
核心定位
- 提供完整的 CLI 工具链
- 实现 AI 代理系统
- 管理会话和消息
- 集成多种 AI 模型提供商
- 实现语言服务器协议支持
- 提供文件系统操作和工具集
- 实现服务端 API
2. 目录结构
opencode 包采用模块化架构,各模块职责清晰: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: 消息格式 V2session/prompt.ts: 提示处理session/revert.ts: 消息回滚
- 创建和管理会话
- 存储和检索消息历史
- 支持消息回滚和恢复
- 处理用户提示和 AI 响应
3.3 Provider 集成
Provider 模块负责与各种 AI 模型提供商集成。 主要组件:provider/provider.ts: 提供商核心provider/models.ts: 模型管理provider/auth.ts: 认证处理
- 支持多种 AI 模型(Claude、OpenAI、Google 等)
- 统一模型调用接口
- 处理模型认证
- 管理模型配置
3.4 Tool 系统
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 模块实现了数据持久化存储。 主要组件:storage/storage.ts: 存储核心
- 基于文件系统的存储
- 支持数据迁移
- 提供 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 核心包采用分层架构设计:4.1 数据流
- 用户输入:通过 CLI、TUI 或 API 接收用户输入
- 命令处理:CLI 或 Server 解析并处理命令
- 会话管理:创建或加载会话
- 代理执行:Agent 系统协调 AI 模型和工具
- 模型调用:通过 Provider 模块调用 AI 模型
- 工具执行:执行必要的文件系统或其他工具操作
- 结果返回:将结果返回给用户
4.2 事件机制
使用事件总线(Bus)实现模块间通信:- 会话创建/更新事件
- 消息添加/更新事件
- 工具调用事件
- 状态变更事件
5. 核心功能实现
5.1 AI 代理执行流程
5.2 会话管理
5.3 工具执行
6. 技术栈
| 技术/框架 | 用途 | 版本 |
|---|---|---|
| TypeScript | 主要开发语言 | 5.x |
| Bun | 运行时和包管理器 | 1.x |
| Hono | Web 框架 | 4.x |
| Zod | 类型验证 | 3.x |
| XDG | 目录结构 | - |
| SolidJS | TUI 界面 | 1.x |
7. 核心 API
7.1 CLI 命令
7.2 服务端 API
8. 扩展能力
8.1 插件系统
OpenCode 支持通过插件扩展功能:- 自定义工具
- 新的 AI 代理
- 模型提供商集成
- IDE 集成扩展
8.2 工具扩展
可以通过注册新工具扩展 OpenCode 的能力:9. 性能与扩展性
9.1 性能优化
- 使用 Bun 运行时提高性能
- 懒加载模块减少启动时间
- 缓存常用数据
- 异步处理长时间运行的操作
9.2 扩展性设计
- 模块化架构便于扩展
- 插件系统支持第三方扩展
- 多模型提供商支持
- 可扩展的工具系统
10. 总结
packages/opencode/ 是 OpenCode 的核心包,提供了系统的核心功能实现。它采用模块化架构设计,各模块职责清晰,便于维护和扩展。核心能力包括 AI 代理系统、会话管理、多模型支持、工具系统、LSP 支持等。
通过这个核心包,OpenCode 实现了一个功能强大的 AI 辅助开发工具,支持多种交互方式和扩展能力。