跳转到内容

服务器

通过 HTTP 与 opencode 服务器交互。

opencode serve 命令运行一个无界面的 HTTP 服务器,暴露一个 OpenAPI 端点供 opencode 客户端使用。


用法

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

选项

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

--cors 可以多次传递:

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

认证

设置 OPENCODE_SERVER_PASSWORD 以使用 HTTP 基本认证保护服务器。用户名默认为 opencode,也可以设置 OPENCODE_SERVER_USERNAME 来覆盖它。这适用于 opencode serveopencode web

Terminal window
OPENCODE_SERVER_PASSWORD=your-password opencode serve

工作原理

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

这种架构让 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。


全局

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

项目

方法路径描述响应
GET/project列出所有项目Project[]
GET/project/current获取当前项目Project

路径和 VCS

方法路径描述响应
GET/path获取当前路径Path
GET/vcs获取当前项目的 VCS 信息VcsInfo

实例

方法路径描述响应
POST/instance/dispose销毁当前实例boolean

配置

方法路径描述响应
GET/config获取配置信息Config
PATCH/config更新配置Config
GET/config/providers列出提供商和默认模型{ providers: Provider[], default: { [key: string]: string } }

提供商

方法路径描述响应
GET/provider列出所有提供商{ all: Provider[], default: {...}, connected: string[] }
GET/provider/auth获取提供商认证方式{ [providerID: string]: ProviderAuthMethod[] }
POST/provider/{id}/oauth/authorize使用 OAuth 授权提供商ProviderAuthAuthorization
POST/provider/{id}/oauth/callback处理提供商的 OAuth 回调boolean

会话

方法路径描述说明
GET/session列出所有会话返回 Session[]
POST/session创建新会话请求体:{ parentID?, title? },返回 Session
GET/session/status获取所有会话的状态返回 { [sessionID: string]: SessionStatus }
GET/session/:id获取会话详情返回 Session
DELETE/session/:id删除会话及其所有数据返回 boolean
PATCH/session/:id更新会话属性请求体:{ title? },返回 Session
GET/session/:id/children获取会话的子会话返回 Session[]
GET/session/:id/todo获取会话的待办事项列表返回 Todo[]
POST/session/:id/init分析应用并创建 AGENTS.md请求体:{ messageID, providerID, modelID },返回 boolean
POST/session/:id/fork在某条消息处分叉现有会话请求体:{ messageID? },返回 Session
POST/session/:id/abort中止正在运行的会话返回 boolean
POST/session/:id/share分享会话返回 Session
DELETE/session/:id/share取消分享会话返回 Session
GET/session/:id/diff获取本次会话的差异查询参数:messageID?,返回 FileDiff[]
POST/session/:id/summarize总结会话请求体:{ providerID, modelID },返回 boolean
POST/session/:id/revert回退消息请求体:{ messageID, partID? },返回 boolean
POST/session/:id/unrevert恢复所有已回退的消息返回 boolean
POST/session/:id/permissions/:permissionID响应权限请求请求体:{ response, remember? },返回 boolean

消息

方法路径描述说明
GET/session/:id/message列出会话中的消息查询参数:limit?,返回 { info: Message, parts: Part[]}[]
POST/session/:id/message发送消息并等待响应请求体:{ 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异步发送消息(不等待响应)请求体:与 /session/:id/message 相同,返回 204 No Content
POST/session/:id/command执行斜杠命令请求体:{ messageID?, agent?, model?, command, arguments },返回 { info: Message, parts: Part[]}
POST/session/:id/shell运行 shell 命令请求体:{ agent, model?, command },返回 { info: Message, parts: Part[]}

命令

方法路径描述响应
GET/command列出所有命令Command[]

文件

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

/find/file 查询参数

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

工具(实验性)

方法路径描述响应
GET/experimental/tool/ids列出所有工具 IDToolIDs
GET/experimental/tool?provider=<p>&model=<m>列出指定模型的工具及其 JSON SchemaToolList

LSP、格式化器和 MCP

方法路径描述响应
GET/lsp获取 LSP 服务器状态LSPStatus[]
GET/formatter获取格式化器状态FormatterStatus[]
GET/mcp获取 MCP 服务器状态{ [name: string]: MCPStatus }
POST/mcp动态添加 MCP 服务器请求体:{ name, config },返回 MCP 状态对象

代理

方法路径描述响应
GET/agent列出所有可用的代理Agent[]

日志

方法路径描述响应
POST/log写入日志条目。请求体:{ 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等待下一个控制请求控制请求对象
POST/tui/control/response响应控制请求({ body }boolean

认证

方法路径描述响应
PUT/auth/:id设置认证凭据。请求体必须匹配提供商的数据结构boolean

事件

方法路径描述响应
GET/event服务器发送事件流。第一个事件是 server.connected,之后是总线事件服务器发送事件流

文档

方法路径描述响应
GET/docOpenAPI 3.1 规范包含 OpenAPI 规范的 HTML 页面