Skip to content

5.9b HTTP API 参考

💡 一句话总结:OpenCode 服务器提供完整的 REST API,支持编程方式与 OpenCode 交互。

📝 课程笔记

本课核心知识点整理:

5.9b HTTP API 参考学霸笔记


学完你能做什么

  • 理解 OpenCode API 的整体结构
  • 使用 API 管理会话和消息
  • 通过 API 执行命令和操作文件
  • 监听 SSE 事件流

API 概览

OpenCode 服务器发布 OpenAPI 3.1 规范,可在以下地址查看交互式文档:

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

例如:http://localhost:4096/doc

本章下面的大部分 /session/file/event 路径属于 V1 API。v1.18.22 同时保留 V1,并通过 /api/* 扩展 V2;升级不会自动把现有 V1 调用改成 V2。

来源:packages/sdk/js/package.json:12-20V1 sdk.gen.ts:431-700V2 sdk.gen.ts:5426-5873

V2 API 扩展

V2 不只是模型目录。目标版本已经扩展到会话、问题、当前位置、事件流、历史分页、运行时操作和权限请求:

方法路径描述
GET/api/location解析当前 directory/workspace 位置
GET / POST/api/session带分页的会话列表 / 创建会话
GET/api/session/:sessionID获取会话
GET/api/session/:sessionID/historyafterlimit 读取有限事件页
GET/api/session/:sessionID/event回放后持续订阅该会话事件
POST/api/session/:sessionID/interrupt中断当前进程拥有的活动执行
GET/api/session/:sessionID/question列出 session 的待处理问题
POST/api/session/:sessionID/question/:requestID/reply回答待处理问题
POST/api/session/:sessionID/question/:requestID/reject拒绝待处理问题
GET / POST/api/session/:sessionID/permission列出或创建 session 级权限请求
GET/api/permission/request按位置列出待处理权限请求
GET/api/eventV2 服务器事件 SSE

来源:sdk.gen.ts:5038-5058sdk.gen.ts:5171-5424sdk.gen.ts:5426-5793sdk.gen.ts:6319-6405sdk.gen.ts:6549-6559


认证

如果服务器设置了 OPENCODE_SERVER_PASSWORD 环境变量,所有 API 请求都需要 HTTP Basic Auth 认证。

curl 示例

bash
# 带 Basic Auth 认证
curl -u opencode:your-password http://localhost:4096/global/health

# 或手动设置 Authorization header
curl -H "Authorization: Basic $(echo -n 'opencode:your-password' | base64)" \
  http://localhost:4096/global/health

认证参数

参数说明
用户名默认 opencode,或 OPENCODE_SERVER_USERNAME 环境变量的值
密码OPENCODE_SERVER_PASSWORD 环境变量的值

全局 API

/global

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

示例

bash
# 未配置服务器密码时
curl http://localhost:4096/global/health

# 配置 OPENCODE_SERVER_PASSWORD 后,health 也需要 Basic Auth
curl -u opencode:your-password http://localhost:4096/global/health

响应:

json
{
  "healthy": true,
  "version": "1.0.48"
}

来源:opencode/packages/opencode/src/server/server.ts:131-150


项目 API

/project

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

来源:opencode/packages/web/src/content/docs/server.mdx:88-94


路径与版本控制 API

/path, /vcs

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

来源:opencode/packages/web/src/content/docs/server.mdx:97-103


实例 API

/instance

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

来源:opencode/packages/web/src/content/docs/server.mdx:106-111


配置 API

/config

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

来源:opencode/packages/web/src/content/docs/server.mdx:114-121


提供商 API

/provider

方法路径描述响应
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

来源:opencode/packages/web/src/content/docs/server.mdx:124-132


会话 API

/session

这是最常用的 API,用于管理对话会话。

方法路径描述备注
GET/session列出所有会话返回 Session[]
POST/session创建新会话body: { parentID?, title? }
GET/session/status获取所有会话状态{ [sessionID: string]: SessionStatus }
GET/session/:id获取会话详情返回 Session
DELETE/session/:id删除会话及其数据返回 boolean
PATCH/session/:id更新会话属性body: { title? }
GET/session/:id/children获取子会话返回 Session[]
GET/session/:id/todo获取会话的待办列表返回 Todo[]
POST/session/:id/init分析应用并创建 AGENTS.mdbody: { messageID, providerID, modelID }
POST/session/:id/fork从指定消息分叉会话body: { messageID? }
POST/session/:id/abort中止运行中的会话返回 boolean
POST/session/:id/share分享会话返回 Session
DELETE/session/:id/share取消分享返回 Session
GET/session/:id/diff获取会话的文件差异query: messageID?
POST/session/:id/summarize总结会话body: { providerID, modelID }
POST/session/:id/revert撤销到指定消息/部件,并默认回滚关联文件补丁body: { messageID, partID? }
POST/session/:id/unrevert重做已撤销的消息与文件状态返回 Session
POST/session/:id/permissions/:permissionID响应权限请求body: { response }

来源:opencode/packages/web/src/content/docs/server.mdx:135-157

revert 不是只隐藏聊天消息:服务会定位目标边界、收集之后的 patch、恢复 snapshot 并更新会话 diff;unrevert 会恢复原 snapshot 并清除 revert 状态。两者都要求 session 不在运行中。配置 snapshot: false 只会禁用文件 snapshot 的 undo/redo,消息边界的撤销语义仍然存在。

来源:session/revert.ts:38-98config.ts:52-55V1 sdk.gen.ts:678-700

示例 - 创建新会话

bash
curl -X POST http://localhost:4096/session \
  -H "Content-Type: application/json" \
  -d '{"title": "代码审查会话"}'

Workspace API(实验性)

v1.18.22 的 workspace 是 adapter 驱动的:内置 adapter 为 worktree,API 支持列出 adapter、创建/发现 workspace、查看连接状态和 warp session。请求可通过 directory / workspace query 进行 workspace-aware 路由;warpcopyChanges 会复制 Git patch。

方法路径描述
GET/experimental/workspace/adapter列出当前项目可用 adapter
GET / POST/experimental/workspace列出 / 创建 workspace
POST/experimental/workspace/sync-list注册 adapter 发现但尚未登记的 workspace
GET/experimental/workspace/status获取连接状态
POST/experimental/workspace/warp移动 session,可选 copyChanges

历史边界

v1.16.0 Release 的 managed workspace cloning 曾承诺保留脏文件和未跟踪文件;目标 tag 的当前路径已经是 adapter/worktree。该历史能力不能直接视为 v1.18.22 当前 API 的行为,copyChanges 的实现证据是 Git patch,不含“复制所有未跟踪文件”的承诺。

当前实现:workspace API 路径:12-47workspace API 端点:53-127workspace.ts:492-538workspace.ts:559-620workspace-routing.ts:148-185。历史证据:v1.16.0 Release、commit 5661af203487b90cf9ee0844b198b03cce26c412


消息 API

/session/:id/message

方法路径描述备注
GET/session/:id/message列出消息query: limit?
POST/session/:id/message发送消息并等待响应body 见下方
GET/session/:id/message/:messageID获取消息详情返回 { info, parts }
POST/session/:id/prompt_async异步发送消息(不等待)返回 204 No Content
POST/session/:id/command执行斜杠命令body: { command, arguments, ... }
POST/session/:id/shell运行 shell 命令body: { agent, model?, command }

发送消息的请求体

typescript
{
  messageID?: string,     // 可选,消息 ID
  model?: {               // 可选,指定模型
    providerID: string,
    modelID: string
  },
  agent?: string,         // 可选,指定 agent
  noReply?: boolean,      // 可选,不等待回复
  system?: string,        // 可选,系统提示
  tools?: Record<string, boolean>, // 已废弃,优先使用 permission 配置
  parts: Part[]           // 消息内容
}

来源:opencode/packages/web/src/content/docs/server.mdx:160-170

示例 - 发送消息

bash
curl -X POST http://localhost:4096/session/abc123/message \
  -H "Content-Type: application/json" \
  -d '{
    "parts": [
      {"type": "text", "text": "解释这段代码的作用"}
    ]
  }'

命令 API

/command

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

来源:opencode/packages/web/src/content/docs/server.mdx:173-178


文件 API

/find, /file

方法路径描述响应
GET/find?pattern=<pat>搜索文件内容匹配结果数组
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" 只返回文件

来源:opencode/packages/web/src/content/docs/server.mdx:181-199

示例 - 搜索文件

bash
# 搜索文件名包含 "config" 的文件
curl "http://localhost:4096/find/file?query=config&limit=10"

# 搜索文件内容
curl "http://localhost:4096/find?pattern=TODO"

工具 API(实验性)

/experimental/tool

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

来源:opencode/packages/web/src/content/docs/server.mdx:202-208


LSP、格式化器与 MCP API

/lsp, /formatter, /mcp

方法路径描述响应
GET/lsp获取 LSP 服务器状态LSPStatus[]
GET/formatter获取格式化器状态FormatterStatus[]
GET/mcp获取 MCP 服务器状态{ [name: string]: MCPStatus }
POST/mcp动态添加 MCP 服务器body: { name, config }
POST/mcp/:name/auth启动 MCP OAuth 认证{ authorizationUrl: string }
POST/mcp/:name/auth/callback处理 MCP OAuth 回调boolean

来源:opencode/packages/web/src/content/docs/server.mdx:211-218, server.ts:2197-2230


Agent API

/agent

方法路径描述响应
GET/agent列出所有可用 agentAgent[]

来源:opencode/packages/web/src/content/docs/server.mdx:222-227


日志 API

/log

方法路径描述响应
POST/log写入日志条目boolean

请求体:

typescript
{
  service: string,           // 服务名称
  level: "debug" | "info" | "warn" | "error",
  message: string,           // 日志消息
  extra?: Record<string, any> // 附加元数据
}

来源:opencode/packages/web/src/content/docs/server.mdx:230-235


TUI 控制 API

/tui

用于远程控制 TUI 界面,IDE 插件主要使用这些接口。

方法路径描述响应
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执行命令body: { command }
POST/tui/show-toast显示提示通知body: { title?, message, variant }
GET/tui/control/next等待下一个控制请求Control request object
POST/tui/control/response响应控制请求body: { body }

来源:opencode/packages/web/src/content/docs/server.mdx:238-253

示例 - 远程控制 TUI

bash
# 向提示框添加文本
curl -X POST http://localhost:4096/tui/append-prompt \
  -H "Content-Type: application/json" \
  -d '{"text": "请帮我审查这段代码"}'

# 提交提示
curl -X POST http://localhost:4096/tui/submit-prompt

# 显示通知
curl -X POST http://localhost:4096/tui/show-toast \
  -H "Content-Type: application/json" \
  -d '{"message": "操作完成", "variant": "success"}'

认证 API

/auth

方法路径描述响应
PUT/auth/:id设置认证凭据boolean

请求体必须匹配对应提供商的 schema。

来源:opencode/packages/web/src/content/docs/server.mdx:256-261


事件流 API

/event

方法路径描述响应
GET/eventSSE 事件流Server-sent events

连接后,首先收到 server.connected 事件,之后是各种总线事件。

来源:opencode/packages/web/src/content/docs/server.mdx:264-269

示例 - 监听事件

bash
curl -N http://localhost:4096/event

输出示例:

event: server.connected
data: {}

event: session.created
data: {"id":"abc123","title":"新会话"}

event: message.created
data: {"sessionID":"abc123","content":"..."}

API 文档

/doc

方法路径描述响应
GET/docOpenAPI 3.1 规范文档HTML 页面

来源:opencode/packages/web/src/content/docs/server.mdx:272-277


类型定义

完整的 TypeScript 类型定义可在 SDK 中查看:

https://github.com/anomalyco/opencode/blob/v1.18.22/packages/sdk/js/src/gen/types.gen.ts

常用类型:

  • Session - 会话信息
  • Message - 消息信息
  • Part - 消息内容部分
  • Provider - 提供商信息
  • Agent - Agent 信息
  • Config - 配置信息

踩坑提醒

现象原因解决
请求返回 CORS 错误客户端来源未在白名单启动时添加 --cors <origin>
消息发送后无响应使用了 prompt_async改用 /session/:id/message 同步接口
SSE 连接频繁断开网络超时或代理问题检查代理设置,增加超时时间
404 错误会话或消息 ID 不存在先通过 GET 接口确认资源存在
实验性 API 不可用功能可能变更或移除查看最新文档确认

本课小结

你学会了:

  1. API 结构:19 个 API 分类,覆盖会话、消息、文件、工具等
  2. 会话管理:创建、查询、分叉、分享会话
  3. 消息交互:同步/异步发送消息,执行命令
  4. 文件操作:搜索、读取、列出文件
  5. TUI 控制:远程操控 TUI 界面
  6. 事件监听:通过 SSE 接收实时事件

相关资源


下一课预告

下一课我们将学习如何使用 SDK 进行开发。