Files
electron-opencode/doc/OpenCode API 总结与对话功能接口分析.md
2026-04-11 16:54:09 +08:00

8.9 KiB
Raw Blame History

OpenCode API 总结与对话功能接口分析

1. 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 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> 在文件中搜索文本 pattern 匹配对象数组
GET /find/file?query=<q> 按名称查找文件和目录 query string[](路径)
GET /find/symbol?query=<q> 查找工作区符号 query Symbol[]
GET /file?path=<path> 列出文件和目录 path FileNode[]
GET /file/content?path=<p> 读取文件 path FileContent
GET /file/status 获取已跟踪文件的状态 File[]
工具(实验性) GET /experimental/tool/ids 列出所有工具 ID ToolIDs
GET /experimental/tool?provider=<p>&model=<m> 列出指定模型的工具及其 JSON Schema provider, model ToolList
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 服务器发送事件流 服务器发送事件流
文档 GET /doc OpenAPI 3.1 规范 包含 OpenAPI 规范的 HTML 页面

2. 对话功能接口分析

根据您的需求,实现对话功能,最核心的接口是 消息 (Message) 类别下的 API。

具体来说,您应该使用以下接口:

  • POST /session/:id/message: 这个接口用于发送消息并等待响应。这是实现对话功能最主要的接口,您可以通过它向 OpenCode 服务器发送用户输入的消息,并获取服务器返回的对话响应。请求体中可以包含 messageID (可选), model (可选), agent (可选), noReply (可选), system (可选), tools (可选), parts 等参数,返回 { info: Message, parts: Part[]},其中 info 包含消息的元数据,parts 包含消息的具体内容。

  • GET /session/:id/message: 这个接口用于列出会话中的消息。在对话过程中,您可能需要获取历史消息记录以展示给用户或进行上下文管理。通过 limit? 查询参数可以限制返回的消息数量,返回 { info: Message, parts: Part[]}[]

  • GET /session/:id/message/:messageID: 这个接口用于获取消息详情。如果您需要获取特定消息的详细信息,可以使用此接口,返回 { info: Message, parts: Part[]}

  • POST /session/:id/prompt_async: 这个接口用于异步发送消息(不等待响应)。如果您希望发送消息后立即返回,不等待服务器的响应,可以使用此接口。这在某些场景下可能有助于提高用户体验,例如在后台处理耗时操作时。请求体与 POST /session/:id/message 相同,返回 204 No Content

除了上述消息相关的接口,会话 (Session) 类别下的接口也至关重要,特别是:

  • POST /session: 用于创建新会话。在开始新的对话之前,您需要创建一个会话。请求体可以包含 parentID? (可选) 和 title? (可选),返回 Session 对象。

  • GET /session: 用于列出所有会话。您可以获取当前用户的所有会话列表,以便用户选择或管理历史对话。

总结:

要实现对话功能,您首先需要通过 POST /session 创建一个会话,然后使用 POST /session/:id/message 发送用户消息并接收响应。同时,您可以使用 GET /session/:id/message 来获取历史消息,以维护对话上下文。POST /session/:id/prompt_async 可以用于异步发送消息,提升用户体验。