Сервер
Взаимодействуйте с сервером opencode через HTTP.
Команда opencode serve запускает headless HTTP-сервер, который предоставляет конечную точку OpenAPI, которую может использовать клиент opencode.
Использование
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]Параметры
| Флаг | Описание | По умолчанию |
|---|---|---|
--port | Порт для прослушивания | 4096 |
--hostname | Имя хоста для прослушивания | 127.0.0.1 |
--mdns | Включить обнаружение mDNS | false |
--mdns-domain | Пользовательское доменное имя для службы mDNS | opencode.local |
--cors | Дополнительные разрешённые источники браузера | [] |
--cors можно передавать несколько раз:
opencode serve --cors http://localhost:5173 --cors https://app.example.comАутентификация
Установите OPENCODE_SERVER_PASSWORD для защиты сервера с помощью HTTP Basic Auth. Имя пользователя по умолчанию opencode, или установите OPENCODE_SERVER_USERNAME для его изменения. Это применяется как к opencode serve, так и к opencode web.
OPENCODE_SERVER_PASSWORD=your-password opencode serveКак это работает
Когда вы запускаете opencode, он запускает TUI и сервер. TUI — это клиент, который общается с сервером. Сервер предоставляет конечную точку спецификации OpenAPI 3.1. Эта конечная точка также используется для генерации SDK.
Совет: Используйте сервер opencode для программного взаимодействия с opencode.
Эта архитектура позволяет opencode поддерживать несколько клиентов и позволяет вам программно взаимодействовать с opencode.
Вы можете запустить opencode serve для запуска автономного сервера. Если у вас уже запущен TUI opencode, opencode serve запустит новый сервер.
Подключение к существующему серверу
Когда вы запускаете TUI, он случайным образом назначает порт и имя хоста. Вместо этого вы можете передать флаги --hostname и --port. Затем используйте их для подключения к серверу.
Конечная точка /tui может использоваться для управления TUI через сервер. Например, вы можете предварительно заполнить или выполнить промпт. Эта настройка используется плагинами IDE OpenCode.
Спецификация
Сервер публикует спецификацию OpenAPI 3.1, которую можно просмотреть по адресу:
http://<hostname>:<port>/docНапример, http://localhost:4096/doc. Используйте спецификацию для генерации клиентов или проверки типов запросов и ответов. Или просмотрите её в Swagger Explorer.
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 callback провайдера | 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.md | body: { 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 | Выполнить slash-команду | body: { messageID?, agent?, model?, command, arguments }, возвращает { info: Message, parts: Part[] } |
POST | /session/:id/shell | Выполнить 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 | Список всех ID инструментов | ToolIDs |
GET | /experimental/tool?provider=<p>&model=<m> | Список инструментов с JSON-схемами для модели | ToolList |
LSP, Форматтеры и MCP
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /lsp | Получить статус LSP-сервера | LSPStatus[] |
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 |
Auth
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
PUT | /auth/:id | Установить учётные данные аутентификации. Body должен соответствовать схеме провайдера | boolean |
События
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /event | Поток Server-sent events. Первое событие — server.connected, затем события шины | Поток Server-sent events |
Документация
| Метод | Путь | Описание | Ответ |
|---|---|---|---|
GET | /doc | Спецификация OpenAPI 3.1 | HTML-страница со спецификацией OpenAPI |