Перейти к содержимому

Сервер

Взаимодействуйте с сервером opencode через HTTP.

Команда opencode serve запускает автономный HTTP-сервер, который предоставляет конечную точку OpenAPI, которую может использовать клиент с открытым кодом.


Использование

Окно терминала
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]

Параметры

ФлагОписаниеПо умолчанию
--portPort to listen on4096
--hostnameHostname to listen on127.0.0.1
--mdnsEnable mDNS discoveryfalse
--mdns-domainCustom domain name for mDNS serviceopencode.local
--corsAdditional browser origins to allow[]

--cors можно передать несколько раз:

Окно терминала
opencode serve --cors http://localhost:5173 --cors https://app.example.com

Аутентификация

Установите OPENCODE_SERVER_PASSWORD, чтобы защитить сервер с помощью базовой аутентификации HTTP. Имя пользователя по умолчанию — opencode или установите OPENCODE_SERVER_USERNAME, чтобы переопределить его. Это относится как к opencode serve, так и к opencode web.

Окно терминала
OPENCODE_SERVER_PASSWORD=your-password opencode serve

Как это работает

Когда вы запускаете opencode, он запускает TUI и сервер. Где находится TUI клиент, который общается с сервером. Сервер предоставляет спецификацию OpenAPI 3.1. конечная точка. Эта конечная точка также используется для создания файла SDK.

Эта архитектура позволяет открытому коду поддерживать несколько клиентов и позволяет программно взаимодействовать с открытым кодом.

Вы можете запустить opencode serve, чтобы запустить автономный сервер. Если у вас есть TUI с открытым кодом запущен, opencode serve запустит новый сервер.


Подключиться к существующему серверу

Когда вы запускаете TUI, он случайным образом назначает порт и имя хоста. Вместо этого вы можете передать --hostname и --port flags. Затем используйте это для подключения к его серверу.

Конечную точку /tui можно использовать для управления TUI через сервер. Например, вы можете предварительно заполнить или запустить подсказку. Эта настройка используется плагинами opencode IDE.


Спецификация

Сервер публикует спецификацию OpenAPI 3.1, которую можно просмотреть по адресу:

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

For example, http://localhost:4096/doc. Use the spec to generate clients or inspect request and response types. Or view it in a Swagger explorer.


API

Сервер opencode предоставляет следующие API.


Глобальный

МетодПутьОписаниеОтвет
GET/global/healthGet server health and version{ healthy: true, version: string }
GET/global/eventGet global events (SSE stream)Event stream

Проект

МетодПутьОписаниеОтвет
GET/projectList all projectsProject[]
GET/project/currentGet the current projectProject

Путь и система контроля версий

МетодПутьОписаниеОтвет
GET/pathGet the current pathPath
GET/vcsGet VCS info for the current projectVcsInfo

Пример

МетодПутьОписаниеОтвет
POST/instance/disposeDispose the current instanceboolean

Конфигурация

МетодПутьОписаниеОтвет
GET/configGet config infoConfig
PATCH/configUpdate configConfig
GET/config/providersList providers and default models{ providers: Provider[], default: { [key: string]: string } }

Поставщик

МетодПутьОписаниеОтвет
GET/providerList all providers{ all: Provider[], default: {...}, connected: string[] }
GET/provider/authGet provider authentication methods{ [providerID: string]: ProviderAuthMethod[] }
POST/provider/{id}/oauth/authorizeAuthorize a provider using OAuthProviderAuthAuthorization
POST/provider/{id}/oauth/callbackHandle OAuth callback for a providerboolean

Сессии

МетодПутьОписаниеПримечания
GET/sessionList all sessionsReturns Session[]
POST/sessionCreate a new sessionbody: { parentID?, title? }, returns Session
GET/session/statusGet session status for all sessionsReturns { [sessionID: string]: SessionStatus }
GET/session/:idGet session detailsReturns Session
DELETE/session/:idDelete a session and all its dataReturns boolean
PATCH/session/:idUpdate session propertiesbody: { title? }, returns Session
GET/session/:id/childrenGet a session’s child sessionsReturns Session[]
GET/session/:id/todoGet the todo list for a sessionReturns Todo[]
POST/session/:id/initAnalyze app and create AGENTS.mdbody: { messageID, providerID, modelID }, returns boolean
POST/session/:id/forkFork an existing session at a messagebody: { messageID? }, returns Session
POST/session/:id/abortAbort a running sessionReturns boolean
POST/session/:id/shareShare a sessionReturns Session
DELETE/session/:id/shareUnshare a sessionReturns Session
GET/session/:id/diffGet the diff for this sessionquery: messageID?, returns FileDiff[]
POST/session/:id/summarizeSummarize the sessionbody: { providerID, modelID }, returns boolean
POST/session/:id/revertRevert a messagebody: { messageID, partID? }, returns boolean
POST/session/:id/unrevertRestore all reverted messagesReturns boolean
POST/session/:id/permissions/:permissionIDRespond to a permission requestbody: { response, remember? }, returns boolean

Сообщения

МетодПутьОписаниеПримечания
GET/session/:id/messageList messages in a sessionquery: limit?, returns { info: Message, parts: Part[]}[]
POST/session/:id/messageSend a message and wait for responsebody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, returns { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDGet message detailsReturns { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncSend a message asynchronously (no wait)body: same as /session/:id/message, returns 204 No Content
POST/session/:id/commandExecute a slash commandbody: { messageID?, agent?, model?, command, arguments }, returns { info: Message, parts: Part[]}
POST/session/:id/shellRun a shell commandbody: { agent, model?, command }, returns { info: Message, parts: Part[]}

Команды

МетодПутьОписаниеОтвет
GET/commandList all commandsCommand[]

Файлы

МетодПутьОписаниеОтвет
GET/find?pattern=<pat>Search for text in filesArray of match objects with path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Find files and directories by namestring[] (paths)
GET/find/symbol?query=<q>Find workspace symbolsSymbol[]
GET/file?path=<path>List files and directoriesFileNode[]
GET/file/content?path=<p>Read a fileFileContent
GET/file/statusGet status for tracked filesFile[]

/find/file параметры запроса

  • query (обязательно) — строка поиска (нечеткое совпадение)
  • type (необязательно) — ограничить результаты "file" или "directory".
  • directory (необязательно) — переопределить корень проекта для поиска.
  • limit (необязательно) — максимальное количество результатов (1–200)
  • dirs (необязательно) — устаревший флаг ("false" возвращает только файлы)

Инструменты (Экспериментальные)

МетодПутьОписаниеОтвет
GET/experimental/tool/idsList all tool IDsToolIDs
GET/experimental/tool?provider=<p>&model=<m>List tools with JSON schemas for a modelToolList

LSP, форматтеры и MCP

МетодПутьОписаниеОтвет
GET/lspGet LSP server statusLSPStatus[]
GET/formatterGet formatter statusFormatterStatus[]
GET/mcpGet MCP server status{ [name: string]: MCPStatus }
POST/mcpAdd MCP server dynamicallybody: { name, config }, returns MCP status object

Агенты

МетодПутьОписаниеОтвет
GET/agentList all available agentsAgent[]

Ведение журнала

МетодПутьОписаниеОтвет
POST/logWrite log entry. Body: { service, level, message, extra? }boolean

TUI

МетодПутьОписаниеОтвет
POST/tui/append-promptAppend text to the promptboolean
POST/tui/open-helpOpen the help dialogboolean
POST/tui/open-sessionsOpen the session selectorboolean
POST/tui/open-themesOpen the theme selectorboolean
POST/tui/open-modelsOpen the model selectorboolean
POST/tui/submit-promptSubmit the current promptboolean
POST/tui/clear-promptClear the promptboolean
POST/tui/execute-commandExecute a command ({ command })boolean
POST/tui/show-toastShow toast ({ title?, message, variant })boolean
GET/tui/control/nextWait for the next control requestControl request object
POST/tui/control/responseRespond to a control request ({ body })boolean

Авторизация

МетодПутьОписаниеОтвет
PUT/auth/:idSet authentication credentials. Body must match provider schemaboolean

События

МетодПутьОписаниеОтвет
GET/eventServer-sent events stream. First event is server.connected, then bus eventsServer-sent events stream

Документы

МетодПутьОписаниеОтвет
GET/docOpenAPI 3.1 specificationHTML page with OpenAPI spec