feat: opencode через HTTP API — пул serve-серверов вместо spawn/NDJSON
Runner теперь ходит к постоянным serve по HTTP API (v1.17+, /api):
- клиент Client (create/send/wait/abort/messages/verdict)
- Pool: по одному serve на каталог, ленивый подъём, root-сервер в worktree,
выделение портов, ReleaseTask при завершении задачи
- Run: CreateSession('ratatoskr-<агент>') -> Send -> поллинг Verdict из
text-частей assistant-сообщений; idle/hard таймауты дают RC=-1
- вердикт извлекается из последнего assistant text-парта (плоский text)
- тесты: unit на фейковом HTTP-сервере; e2e эмулирует serve через httptest,
агент определяется по title сессии
This commit is contained in:
@@ -81,12 +81,14 @@ type OpenCodeCfg struct {
|
||||
Serve ServeCfg `yaml:"serve"`
|
||||
}
|
||||
|
||||
// ServeCfg — управление постоянным opencode serve (режим --attach).
|
||||
// enabled=true: ratatoskr сам запускает serve (супервайзер) и подключает
|
||||
// Runner через команду `run --attach <url>`. Если задан url — вместо
|
||||
// собственного spawn используется внешний (уже запущенный) сервер.
|
||||
// enabled=false (по умолчанию): историческая модель — каждый вызов
|
||||
// сам спавнит `opencode run` (без сервера).
|
||||
// ServeCfg — настройки постоянных opencode serve-процессов (API-режим).
|
||||
// Runner ходит к serve по HTTP API (v1.17+, /api). ratatoskr сам поднимает
|
||||
// по одному serve на каталог через Pool (Hash: hostname/port; служебный
|
||||
// root-сервер в worktree живёт всё время app, остальные — лениво).
|
||||
//
|
||||
// Поля enabled/url оставлены для обратной совместимости конфига и сейчас не
|
||||
// меняют поведение: serve обязателен для API-режима, сервер всегда
|
||||
// спавнится пулом (hostname/port задают базовые значения).
|
||||
type ServeCfg struct {
|
||||
Enabled bool `yaml:"enabled" default:"false"`
|
||||
URL string `yaml:"url" env:"OPENCODE_SERVE_URL"`
|
||||
|
||||
Reference in New Issue
Block a user