跳到內容

伺服器

透過 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 頁面