中文
文档
服务器

服务器

通过 HTTP 与 opencode 服务器交互。

opencode serve 命令运行一个无头 HTTP 服务器,它暴露一个 opencode 客户端可以使用的 OpenAPI 端点。


使用

opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]

选项

标志说明默认值
--port监听的端口4096
--hostname监听的主机名127.0.0.1
--mdns启用 mDNS 发现false
--mdns-domainmDNS 服务的自定义域名opencode.local
--cors额外允许的浏览器源[]

--cors 可以多次传入:

opencode serve --cors http://localhost:5173 --cors https://app.example.com

认证

设置 OPENCODE_SERVER_PASSWORD 以用 HTTP basic auth 保护服务器。用户名默认为 opencode,或设置 OPENCODE_SERVER_USERNAME 来覆盖它。这对 opencode serveopencode web 都适用。

OPENCODE_SERVER_PASSWORD=your-password opencode serve

工作原理

当你运行 opencode 时,它会启动一个 TUI 和一个服务器。其中 TUI 是与服务器通信的客户端。服务器暴露一个 OpenAPI 3.1 规范端点。该端点也用于生成 SDK

提示: 使用 opencode 服务器以编程方式与 opencode 交互。

这种架构让 opencode 能够支持多个客户端,并允许你以编程方式与 opencode 交互。

你可以运行 opencode serve 来启动一个独立的服务器。如果你有 opencode TUI 正在运行,opencode serve 会启动一个新服务器。


连接到现有服务器

当你启动 TUI 时,它会随机分配一个端口和主机名。你可以改为传入 --hostname--port 标志,然后用它来连接到其服务器。

/tui 端点可用于通过服务器驱动 TUI。例如,你可以预填或运行一个提示词。OpenCode IDE 插件就使用了这种设置。


规范

服务器发布一个 OpenAPI 3.1 规范,可在以下地址查看:

http://<hostname>:<port>/doc

例如 http://localhost:4096/doc。使用该规范来生成客户端或检查请求和响应类型,或在 Swagger 浏览器中查看它。


API

opencode 服务器暴露以下 API。


Global

方法路径说明响应
GET/global/health获取服务器健康状态和版本{ healthy: true, version: string }
GET/global/event获取全局事件(SSE 流)事件流

Project

方法路径说明响应
GET/project列出所有项目Project[] (opens in a new tab)
GET/project/current获取当前项目Project (opens in a new tab)

Path & VCS

方法路径说明响应
GET/path获取当前路径Path (opens in a new tab)
GET/vcs获取当前项目的 VCS 信息VcsInfo (opens in a new tab)

Instance

方法路径说明响应
POST/instance/dispose释放当前实例boolean

Config

方法路径说明响应
GET/config获取配置信息Config (opens in a new tab)
PATCH/config更新配置Config (opens in a new tab)
GET/config/providers列出提供商和默认模型{ providers: Provider[] (opens in a new tab), default: { [key: string]: string } }

Provider

方法路径说明响应
GET/provider列出所有提供商{ all: Provider[] (opens in a new tab), default: {...}, connected: string[] }
GET/provider/auth获取提供商认证方法{ [providerID: string]: ProviderAuthMethod[] (opens in a new tab) }
POST/provider/{id}/oauth/authorize使用 OAuth 授权一个提供商ProviderAuthAuthorization (opens in a new tab)
POST/provider/{id}/oauth/callback处理某个提供商的 OAuth 回调boolean

Sessions

方法路径说明备注
GET/session列出所有会话返回 Session[] (opens in a new tab)
POST/session创建一个新会话body: { parentID?, title? },返回 Session (opens in a new tab)
GET/session/status获取所有会话的会话状态返回 { [sessionID: string]: SessionStatus (opens in a new tab) }
GET/session/:id获取会话详情返回 Session (opens in a new tab)
DELETE/session/:id删除一个会话及其所有数据返回 boolean
PATCH/session/:id更新会话属性body: { title? },返回 Session (opens in a new tab)
GET/session/:id/children获取一个会话的子会话返回 Session[] (opens in a new tab)
GET/session/:id/todo获取一个会话的待办列表返回 Todo[] (opens in a new tab)
POST/session/:id/init分析应用并创建 AGENTS.mdbody: { messageID, providerID, modelID },返回 boolean
POST/session/:id/fork在某条消息处 fork 一个现有会话body: { messageID? },返回 Session (opens in a new tab)
POST/session/:id/abort中止一个正在运行的会话返回 boolean
POST/session/:id/share分享一个会话返回 Session (opens in a new tab)
DELETE/session/:id/share取消分享一个会话返回 Session (opens in a new tab)
GET/session/:id/diff获取此会话的 diffquery: messageID?,返回 FileDiff[] (opens in a new tab)
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 (opens in a new tab), parts: Part[] (opens in a new tab)}[]
POST/session/:id/message发送一条消息并等待响应body: { messageID?, model?, agent?, noReply?, system?, tools?, parts },返回 { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
GET/session/:id/message/:messageID获取消息详情返回 { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
POST/session/:id/prompt_async异步发送一条消息(不等待)body: 与 /session/:id/message 相同,返回 204 No Content
POST/session/:id/command执行一个斜杠命令body: { messageID?, agent?, model?, command, arguments },返回 { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
POST/session/:id/shell运行一个 shell 命令body: { agent, model?, command },返回 { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}

Commands

方法路径说明响应
GET/command列出所有命令Command[] (opens in a new tab)

Files

方法路径说明响应
GET/find?pattern=<pat>在文件中搜索文本包含 pathlinesline_numberabsolute_offsetsubmatches 的匹配对象数组
GET/find/file?query=<q>按名称查找文件和目录string[](路径)
GET/find/symbol?query=<q>查找工作区符号Symbol[] (opens in a new tab)
GET/file?path=<path>列出文件和目录FileNode[] (opens in a new tab)
GET/file/content?path=<p>读取一个文件FileContent (opens in a new tab)
GET/file/status获取被跟踪文件的状态File[] (opens in a new tab)

/find/file 查询参数

  • query(必需)—— 搜索字符串(模糊匹配)
  • type(可选)—— 将结果限制为 "file""directory"
  • directory(可选)—— 为本次搜索覆盖项目根目录
  • limit(可选)—— 最大结果数(1-200)
  • dirs(可选)—— 遗留标志("false" 仅返回文件)

Tools(实验性)

方法路径说明响应
GET/experimental/tool/ids列出所有工具 IDToolIDs (opens in a new tab)
GET/experimental/tool?provider=<p>&model=<m>列出某个模型带 JSON schema 的工具ToolList (opens in a new tab)

LSP、Formatters 与 MCP

方法路径说明响应
GET/lsp获取 LSP 服务器状态LSPStatus[] (opens in a new tab)
GET/formatter获取格式化器状态FormatterStatus[] (opens in a new tab)
GET/mcp获取 MCP 服务器状态{ [name: string]: MCPStatus (opens in a new tab) }
POST/mcp动态添加 MCP 服务器body: { name, config },返回 MCP 状态对象

Agents

方法路径说明响应
GET/agent列出所有可用的 agentsAgent[] (opens in a new tab)

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显示 toast({ title?, message, variant }boolean
GET/tui/control/next等待下一个控制请求控制请求对象
POST/tui/control/response响应一个控制请求({ body }boolean

Auth

方法路径说明响应
PUT/auth/:id设置认证凭据。Body 必须匹配提供商 schemaboolean

Events

方法路径说明响应
GET/event服务器发送事件(SSE)流。第一个事件是 server.connected,然后是总线事件服务器发送事件流

Docs

方法路径说明响应
GET/docOpenAPI 3.1 规范带 OpenAPI 规范的 HTML 页面