# OpenCode HTTP API 文档 本文档整理了 OpenCode HTTP Server 的所有 API 端点。 ## 启动服务 ```bash opencode serve --port 4096 --hostname 127.0.0.1 ``` ### 选项 | 参数 | 描述 | 默认值 | |------|------|--------| | `--port` | 监听端口 | 4096 | | `--hostname` | 监听主机名 | 127.0.0.1 | | `--cors` | 允许的浏览器来源 | [] | ### 认证 设置环境变量启用 HTTP 基本认证: ```bash OPENCODE_SERVER_PASSWORD=your-password opencode serve ``` ## Global | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/global/health` | 获取服务器健康状态和版本 | `{ healthy: true, version: string }` | | GET | `/global/event` | 获取全局事件 (SSE 流) | Event stream | ## Project | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/project` | 列出所有项目 | `Project[]` | | GET | `/project/current` | 获取当前项目 | `Project` | ## Path & VCS | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/path` | 获取当前路径 | `Path` | | GET | `/vcs` | 获取当前项目的 VCS 信息 | `VcsInfo` | ## Instance | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | POST | `/instance/dispose` | 释放当前实例 | `boolean` | ## Config | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/config` | 获取配置信息 | `Config` | | PATCH | `/config` | 更新配置 | `Config` | | GET | `/config/providers` | 列出 providers 和默认模型 | `{ providers: Provider[], default: { [key: string]: string } }` | ## Provider | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/provider` | 列出所有 providers | `{ all: Provider[], default: {...}, connected: string[] }` | | GET | `/provider/auth` | 获取 provider 认证方法 | `{ [providerID: string]: ProviderAuthMethod[] }` | | POST | `/provider/{id}/oauth/authorize` | 使用 OAuth 授权 provider | `ProviderAuthAuthorization` | | POST | `/provider/{id}/oauth/callback` | 处理 OAuth 回调 | `boolean` | ## Sessions | 方法 | 路径 | 描述 | 备注 | |------|------|------|------| | GET | `/session` | 列出所有会话 | 返回 `Session[]` | | POST | `/session` | 创建新会话 | body: `{ parentID?, title? }`, 返回 `Session` | | GET | `/session/status` | 获取所有会话状态 | 返回 `{ [sessionID: string]: SessionStatus }` | | GET | `/session/:id` | 获取会话详情 | 返回 `Session` | | DELETE | `/session/:id` | 删除会话及所有数据 | 返回 `boolean` | | PATCH | `/session/:id` | 更新会话属性 | body: `{ title? }`, 返回 `Session` | | GET | `/session/:id/children` | 获取会话的子会话 | 返回 `Session[]` | | GET | `/session/:id/todo` | 获取会话的待办列表 | 返回 `Todo[]` | | POST | `/session/:id/init` | 分析应用并创建 AGENTS.md | body: `{ messageID, providerID, modelID }`, 返回 `boolean` | | POST | `/session/:id/fork` | 在某条消息处 fork 会话 | body: `{ messageID? }`, 返回 `Session` | | POST | `/session/:id/abort` | 中止运行中的会话 | 返回 `boolean` | | POST | `/session/:id/share` | 分享会话 | 返回 `Session` | | DELETE | `/session/:id/share` | 取消分享会话 | 返回 `Session` | | GET | `/session/:id/diff` | 获取会话的 diff | query: `messageID?`, 返回 `FileDiff[]` | | POST | `/session/:id/summarize` | 总结会话 | body: `{ providerID, modelID }`, 返回 `boolean` | | POST | `/session/:id/revert` | 还原消息 | body: `{ messageID, partID? }`, 返回 `boolean` | | POST | `/session/:id/unrevert` | 恢复所有还原的消息 | 返回 `boolean` | | POST | `/session/:id/permissions/:permissionID` | 响应权限请求 | body: `{ response, remember? }`, 返回 `boolean` | ## Messages | 方法 | 路径 | 描述 | 备注 | |------|------|------|------| | GET | `/session/:id/message` | 列出会话中的消息 | query: `limit?`, 返回 `{ info: Message, parts: Part[] }[]` | | POST | `/session/:id/message` | 发送消息并等待响应 | body: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, 返回 `{ info: Message, parts: Part[] }` | | GET | `/session/:id/message/:messageID` | 获取消息详情 | 返回 `{ info: Message, parts: Part[] }` | | POST | `/session/:id/prompt_async` | 异步发送消息(不等待) | body: 同 `/session/:id/message`, 返回 `204 No Content` | | POST | `/session/:id/command` | 执行斜杠命令 | body: `{ messageID?, agent?, model?, command, arguments }`, 返回 `{ info: Message, parts: Part[] }` | | POST | `/session/:id/shell` | 运行 shell 命令 | body: `{ agent, model?, command }`, 返回 `{ info: Message, parts: Part[] }` | ## Commands | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/command` | 列出所有命令 | `Command[]` | ## Files | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/find?pattern=` | 在文件中搜索文本 | 包含 `path`, `lines`, `line_number`, `absolute_offset`, `submatches` 的匹配对象数组 | | GET | `/find/file?query=` | 按名称查找文件和目录 | `string[]` (paths) | | GET | `/find/symbol?query=` | 查找工作区符号 | `Symbol[]` | | GET | `/file?path=` | 列出文件和目录 | `FileNode[]` | | GET | `/file/content?path=

` | 读取文件 | `FileContent` | | GET | `/file/status` | 获取跟踪文件的状态 | `File[]` | ### `/find/file` 查询参数 - `query` (必需) - 搜索字符串(模糊匹配) - `type` (可选) - 限制结果为 `"file"` 或 `"directory"` - `directory` (可选) - 覆盖搜索的项目根目录 - `limit` (可选) - 最大结果数 (1-200) - `dirs` (可选) - 传统标志 (`"false"` 仅返回文件) ## Tools (Experimental) | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/experimental/tool/ids` | 列出所有工具 ID | `ToolIDs` | | GET | `/experimental/tool?provider=

&model=` | 列出模型的 JSON schema 工具 | `ToolList` | ## LSP, Formatters & MCP | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/lsp` | 获取 LSP 服务器状态 | `LSPStatus[]` | | GET | `/formatter` | 获取格式化程序状态 | `FormatterStatus[]` | | GET | `/mcp` | 获取 MCP 服务器状态 | `{ [name: string]: MCPStatus }` | | POST | `/mcp` | 动态添加 MCP 服务器 | body: `{ name, config }`, 返回 MCP status object | ## Agents | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/agent` | 列出所有可用代理 | `Agent[]` | ## Logging | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | POST | `/log` | 写入日志条目 | body: `{ service, level, message, extra? }`, 返回 `boolean` | ## TUI | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | POST | `/tui/append-prompt` | 将文本追加到提示符 | `boolean` | | POST | `/tui/open-help` | 打开帮助对话框 | `boolean` | | POST | `/tui/open-sessions` | 打开会话选择器 | `boolean` | | POST | `/tui/open-themes` | 打开主题选择器 | `boolean` | | POST | `/tui/open-models` | 打开模型选择器 | `boolean` | | POST | `/tui/submit-prompt` | 提交当前提示符 | `boolean` | | POST | `/tui/clear-prompt` | 清除提示符 | `boolean` | | POST | `/tui/execute-command` | 执行命令 (`{ command }`) | `boolean` | | POST | `/tui/show-toast` | 显示通知 (`{ title?, message, variant }`) | `boolean` | | GET | `/tui/control/next` | 等待下一个控制请求 | Control request object | | POST | `/tui/control/response` | 响应控制请求 (`{ body }`) | `boolean` | ## Auth | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | PUT | `/auth/:id` | 设置认证凭据 | body 必须匹配 provider schema, 返回 `boolean` | ## Events | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/event` | Server-Sent Events 流 | 第一个事件是 `server.connected`, 然后是 bus events | ## Docs | 方法 | 路径 | 描述 | 响应 | |------|------|------|------| | GET | `/doc` | OpenAPI 3.1 规范 | 带有 OpenAPI 规范的 HTML 页面 | ## 查看 OpenAPI 规范 服务器发布 OpenAPI 3.1 规范,可通过以下地址查看: ``` http://:/doc ``` 例如:`http://localhost:4096/doc`