1. bun run --cwd packages/app dev
作用:启动前端开发服务器
- 运行在
packages/app目录 - 启动 Vite 开发服务器
- 提供 Web 界面
- 默认端口通常是 3000 或 5173
- 提供前端界面
- 热重载
- 开发环境配置
2. bun run --cwd packages/opencode src/index.ts serve
作用:启动后端服务器
- 运行在
packages/opencode目录 - 启动 OpenCode 核心服务器
- 默认端口是 4096
- 提供 API 服务
- 处理 AI 模型调用
- 管理会话和消息
- 执行文件系统操作
- 协调工具调用
为什么需要同时运行
OpenCode 采用 客户端-服务器架构:- 前端(
packages/app):用户界面,负责展示和交互 - 后端(
packages/opencode):核心功能,处理业务逻辑和 AI 交互
- 获取会话数据
- 发送用户输入
- 接收 AI 响应
- 执行文件操作
- 调用工具
执行流程
- 首先启动后端服务器:
bun run --cwd packages/opencode src/index.ts serve - 然后启动前端开发服务器:
bun run --cwd packages/app dev - 打开前端页面,即可与 OpenCode 进行交互
启动tui
TUI是否需要启动server:
TUI 界面确实可以直接启动 agent 和调用模型,但**并不是通过启动完整的服务器**,而是通过以下方式:- 直接调用核心功能:
- TUI 直接导入和调用
packages/opencode中的核心模块 - 绕过了 HTTP 服务器层,直接使用本地代码
- TUI 直接导入和调用
- 本地功能调用:
- Agent 调用:直接使用
Agent模块 - 模型调用:直接使用
Provider模块 - 会话管理:直接使用
Session模块
- Agent 调用:直接使用
- 服务器的作用:
- 当你使用
serve命令时,启动的是一个 HTTP 服务器 - 这个服务器提供 API 接口,供外部客户端(如 Web 界面)调用
- TUI 作为内置客户端,不需要通过 HTTP 接口,直接调用核心功能
- 当你使用
技术实现差异
| 功能 | TUI 实现方式 | 服务器实现方式 | |------|-------------|---------------| | Agent 调用 | 直接调用Agent 模块 | 通过 HTTP API /agent 接口 |
| 模型调用 | 直接调用 Provider 模块 | 通过会话相关的 HTTP API |
| 会话管理 | 直接调用 Session 模块 | 通过 /session 相关接口 |
| 存储访问 | 直接调用 Storage 模块 | 通过文件和会话接口 |
为什么 TUI 不需要启动服务器
这是因为:- 代码架构:核心功能被设计为可重用的模块,可以被不同的界面直接调用
- 本地执行:TUI 运行在本地终端,与核心代码在同一个进程中
- 性能考虑:直接调用比通过 HTTP 接口更快,响应更及时
- 简化设计:TUI 作为内置界面,不需要网络层的复杂性
验证方法
你可以通过以下方式验证:- 启动 TUI
bun dev - 尝试使用 agent 和模型功能
- 检查系统的网络连接:不会有 4096 端口的监听
总结
TUI 确实可以启动 agent 和调用模型,但这是通过**直接调用本地核心功能**实现的,而不是通过启动完整的 HTTP 服务器。服务器的主要作用是为外部客户端(如 Web 界面)提供 API 接口,而 TUI 作为内置界面,直接与核心代码交互。 所以,当你执行bun dev 时,**不会**启动 4096 端口的服务器,但 TUI 仍然可以正常使用所有核心功能。