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

Сервер

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

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


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

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

Параметры

ФлагОписаниеПо умолчанию
--portПорт для прослушивания4096
--hostnameИмя хоста для прослушивания127.0.0.1
--mdnsВключить обнаружение mDNSfalse
--mdns-domainПользовательское доменное имя для mDNSopencode.local
--corsРазрешенные дополнительные источники (CORS)[]

--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/healthПолучить состояние и версию сервера{ healthy: true, version: string }
GET/global/eventПолучить глобальные события (поток SSE)Поток событий

Проект

МетодПутьОписаниеОтвет
GET/projectСписок всех проектовProject[]
GET/project/currentПолучить текущий проектProject

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

МетодПутьОписаниеОтвет
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Авторизация провайдера через OAuthProviderAuthAuthorization
POST/provider/{id}/oauth/callbackОбработка callback OAuth для провайдераboolean

Сессии

МетодПутьОписаниеПримечания
GET/sessionСписок всех сессийВозвращает Session[]
POST/sessionСоздать новую сессиюbody: { parentID?, title? }, возвращает Session
GET/session/statusПолучить статус всех сессийВозвращает { [sessionID: string]: SessionStatus }
GET/session/:idПолучить детали сессииВозвращает Session
DELETE/session/:idУдалить сессию и все её данныеВозвращает boolean
PATCH/session/:idОбновить свойства сессииbody: { title? }, возвращает Session
GET/session/:id/childrenПолучить дочерние сессииВозвращает Session[]
GET/session/:id/todoПолучить список задач для сессииВозвращает Todo[]
POST/session/:id/initАнализ приложения и создание AGENTS.mdbody: { messageID, providerID, modelID }, возвращает boolean
POST/session/:id/forkОтветвление сессии от сообщенияbody: { messageID? }, возвращает Session
POST/session/:id/abortПрервать запущенную сессиюВозвращает boolean
POST/session/:id/shareПоделиться сессиейВозвращает Session
DELETE/session/:id/shareОтменить общий доступ к сессииВозвращает Session
GET/session/:id/diffПолучить diff для этой сессииquery: messageID?, возвращает FileDiff[]
POST/session/:id/summarizeСуммировать сессиюbody: { providerID, modelID }, возвращает boolean
POST/session/:id/revertОтменить сообщениеbody: { messageID, partID? }, возвращает boolean
POST/session/:id/unrevertВосстановить все отмененные сообщенияВозвращает boolean
POST/session/:id/permissions/:permissionIDОтветить на запрос разрешенияbody: { response, remember? }, возвращает boolean

Сообщения

МетодПутьОписаниеПримечания
GET/session/:id/messageСписок сообщений в сессииquery: limit?, возвращает { info: Message, parts: Part[]}[]
POST/session/:id/messageОтправить сообщение и ждать ответаbody: { 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Отправить сообщение асинхронно (без ожидания)body: как в /session/:id/message, возвращает 204 No Content
POST/session/:id/commandВыполнить слэш-командуbody: { messageID?, agent?, model?, command, arguments }, возвращает { info: Message, parts: Part[]}
POST/session/:id/shellЗапустить команду оболочкиbody: { agent, model?, command }, возвращает { info: Message, parts: Part[]}

Команды

МетодПутьОписаниеОтвет
GET/commandСписок всех командCommand[]

Файлы

МетодПутьОписаниеОтвет
GET/find?pattern=<pat>Поиск текста в файлахМассив объектов совпадения с path, lines, line_number, absolute_offset, submatches
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Список всех идентификаторов инструментовToolIDs
GET/experimental/tool?provider=<p>&model=<m>Список инструментов со схемами JSON для моделиToolList

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

МетодПутьОписаниеОтвет
GET/lspПолучить статус сервера LSPLSPStatus[]
GET/formatterПолучить статус форматераFormatterStatus[]
GET/mcpПолучить статус сервера MCP{ [name: string]: MCPStatus }
POST/mcpДобавить сервер MCP динамическиbody: { name, config }, возвращает статус объекта MCP

Агенты

МетодПутьОписаниеОтвет
GET/agentСписок всех доступных агентовAgent[]

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

МетодПутьОписаниеОтвет
POST/logЗаписать запись в журнал. Body: { 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Установить учетные данные аутентификации. Body должен соответствовать схеме провайдераboolean

События

МетодПутьОписаниеОтвет
GET/eventПоток событий, отправляемых сервером. Первое событие — server.connected, затем события шиныПоток событий, отправляемых сервером

Документы

МетодПутьОписаниеОтвет
GET/docСпецификация OpenAPI 3.1HTML-страница со спецификацией OpenAPI