# Ratatoskr-go Ratatoskr на Go — **оркестратор в единый статический бинарь** + субагенты через [opencode](https://opencode.ai) как внешний процесс. Переезд с Python-версии. ## Почему Go Агентный конвейер — это клей (HTTP/JSON к LLM, SQLite, Gitea API, Telegram), а не горячие вычисления. Цель — **один статический бинарь без runtime-зависимостей** (CGO_ENABLED=0), который решает проблему доставки/деплоя. Go: горизонт HTTP/JSON + goroutine-параллелизм research/feedback/notify + SQLite без CGO (`modernc.org/sqlite`). ## Структура ``` cmd/ratatoskr/ # точка входа, сборка бинаря internal/ app/ # компоновка (composition root), конфиг, DI dialog/ # state-machine диалога: collect→confirm→created decide/ # аналитик: промпт + разбор JSON-решения (opencode agent) research/ # исследователь: FACTS о репозитории feedback/ # feedback: транскрипт→proposals (opencode agent) opencode/ # обёртка запуска opencode-процесса, парсинг вердикта gitea/ # Gitea API-клиент: issues, labels, PR, webhook webhook/ # digest-ответы и статус в Telegram issue/ # issue: формирование тела задачи, task-tag ``` ## Сборка ```bash go build -o bin/ratatoskr ./cmd/ratatoskr # обычная CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -o bin/ratatoskr-linux-amd64 ./cmd/ratatoskr # статический бинарь ``` ## Контракты (не ломать) - `process_turn` всегда возвращает **3 значения**: `(reply, action, session)`. - `decide_fn` возвращает кортеж/структуру `(decision, err)`. - `/proposal` передаёт аналитику **полный комплект**, а не digest. - Вердикты агентов — строгий JSON; `_extract_json` устойчив к мусору. ## Eval Eval-suite (парсинг A / контракты B / качество C) — см. [дизайн в вики](../wiki/concepts/ratatoskr-evals.md). Запуск после внедрения: `go test ./...` для детерминированных уровней A+B.