Appearance
Delegate
Назначение
Управление несколькими серверами OpenCode через один чат-ориентированный API. Подключается к уже запущенному opencode serve или сам устанавливает, запускает и туннелирует OpenCode на удалённом хосте по SSH.
Построен по тем же конвенциям Clean Architecture, что и ai-router: service-common для конфигурации, логирования, HTTP-lifecycle, JWT и миграций.
Порты
- HTTP: 8117 (desktop-режим, по умолчанию
127.0.0.1:8117) - БД: SQLite
./data/delegate.db(desktop) / PostgreSQL (platform)
Статус развёртывания
В prod-каталог services.yaml Delegate пока не входит: сервис работает автономно (desktop-режим) или в platform-режиме с PostgreSQL.
Ключевые возможности
- Несколько одновременных подключений OpenCode
- Чат-сессии, асинхронные промпты, SSE-события, abort и ответы на permission-запросы
- Установка/запуск/стоп/рестарт OpenCode на удалённом хосте по SSH с локальным port forwarding
- Desktop-режим (SQLite) и platform-режим (PostgreSQL,
JWT_SECRET,ENCRYPTION_KEY) - Опциональная публикация событий в NATS
- Swagger:
/swagger/index.html
Основные эндпоинты
| Метод | Путь | Назначение |
|---|---|---|
| GET/POST | /api/v1/servers | Список / регистрация серверов |
| GET/PATCH/DELETE | /api/v1/servers/:id | Карточка сервера |
| POST | /api/v1/servers/:id/install|start|stop|restart | Управление OpenCode на хосте |
| GET | /api/v1/servers/:id/health|projects|agents | Статус и сущности OpenCode |
| GET/POST | /api/v1/chats | Чат-сессии |
| GET/POST | /api/v1/chats/:id/messages | Сообщения |
| GET | /api/v1/chats/:id/events | SSE-события |
| POST | /api/v1/chats/:id/abort | Прерывание хода |
| POST | /api/v1/chats/:id/permissions/:permissionID | Ответ на permission-запрос |
Конфигурация
| Переменная | По умолчанию | Описание |
|---|---|---|
PORT | 8117 | Порт сервера |
RUNTIME_MODE | desktop | desktop (SQLite) или platform (PostgreSQL) |
API_TOKEN | — | Защита локальных API-маршрутов |
JWT_SECRET | — | Platform-режим |
ENCRYPTION_KEY | — | Platform-режим |
SSH_KNOWN_HOSTS | ~/.ssh/known_hosts | Известные host-ключи SSH |
Host-ключи SSH должны уже быть в SSH_KNOWN_HOSTS — Delegate никогда не отключает проверку host-key.