Skip to main content
这两个命令分别用于启动 OpenCode 的不同组件:

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 响应
  • 执行文件操作
  • 调用工具

执行流程

  1. 首先启动后端服务器:bun run --cwd packages/opencode src/index.ts serve
  2. 然后启动前端开发服务器:bun run --cwd packages/app dev
  3. 打开前端页面,即可与 OpenCode 进行交互
后端服务器是必需的,因为所有核心功能都在后端实现,前端只是一个界面层。

启动tui

bun run --cwd packages/opencode --conditions=browser src/index.ts

TUI是否需要启动server:

TUI 界面确实可以直接启动 agent 和调用模型,但**并不是通过启动完整的服务器**,而是通过以下方式:
  1. 直接调用核心功能
    • TUI 直接导入和调用 packages/opencode 中的核心模块
    • 绕过了 HTTP 服务器层,直接使用本地代码
  2. 本地功能调用
    • Agent 调用:直接使用 Agent 模块
    • 模型调用:直接使用 Provider 模块
    • 会话管理:直接使用 Session 模块
  3. 服务器的作用
    • 当你使用 serve 命令时,启动的是一个 HTTP 服务器
    • 这个服务器提供 API 接口,供外部客户端(如 Web 界面)调用
    • TUI 作为内置客户端,不需要通过 HTTP 接口,直接调用核心功能

技术实现差异

| 功能 | TUI 实现方式 | 服务器实现方式 | |------|-------------|---------------| | Agent 调用 | 直接调用 Agent 模块 | 通过 HTTP API /agent 接口 | | 模型调用 | 直接调用 Provider 模块 | 通过会话相关的 HTTP API | | 会话管理 | 直接调用 Session 模块 | 通过 /session 相关接口 | | 存储访问 | 直接调用 Storage 模块 | 通过文件和会话接口 |

为什么 TUI 不需要启动服务器

这是因为:
  1. 代码架构:核心功能被设计为可重用的模块,可以被不同的界面直接调用
  2. 本地执行:TUI 运行在本地终端,与核心代码在同一个进程中
  3. 性能考虑:直接调用比通过 HTTP 接口更快,响应更及时
  4. 简化设计:TUI 作为内置界面,不需要网络层的复杂性

验证方法

你可以通过以下方式验证:
  1. 启动 TUIbun dev
  2. 尝试使用 agent 和模型功能
  3. 检查系统的网络连接:不会有 4096 端口的监听

总结

TUI 确实可以启动 agent 和调用模型,但这是通过**直接调用本地核心功能**实现的,而不是通过启动完整的 HTTP 服务器。服务器的主要作用是为外部客户端(如 Web 界面)提供 API 接口,而 TUI 作为内置界面,直接与核心代码交互。 所以,当你执行 bun dev 时,**不会**启动 4096 端口的服务器,但 TUI 仍然可以正常使用所有核心功能。