ratatoskr-go: стартовый каркас (Go-бинарь, CI, structure)
All checks were successful
build-test / build (push) Successful in 47s

This commit is contained in:
Hermes
2026-08-14 08:53:57 +05:00
commit 53cf901707
7 changed files with 171 additions and 0 deletions

26
internal/app/app.go Normal file
View File

@@ -0,0 +1,26 @@
// Package app — composition root: конфигурация, DI, жизненный цикл процесса.
package app
// Config — конфигурация конвейера (env или config-файл).
type Config struct {
GiteaURL string
GiteaToken string
IssueRepo string
// TODO: Telegram, LiteLLM, SQLite (opencode.db), gateway, webhook secret.
}
// App — собранный конвейер (все зависимости).
type App struct {
Config Config
// TODO: *dialog.Controller, *gitea.Client, *opencode.Runner, ...
}
// New читает конфиг и собирает приложение. Стартовая заглушка.
func New(configPath string) (*App, error) {
var c Config
_ = configPath // TODO: загрузка из env/config
// TODO: слой failures/classes ошибок по конвенции проекта.
// Использовать в рантайме (например, лимиты диалога):
c.IssueRepo = "kamelion/ratatoskr-go" // placeholder
return &App{Config: c}, nil
}

15
internal/app/app_test.go Normal file
View File

@@ -0,0 +1,15 @@
package app
import "testing"
// Контракт: process_turn (после внедрения) должен возвращать 3 значения.
// Здесь — placeholder-проверка, что composition root собирается без сбоев.
func TestNew(t *testing.T) {
a, err := New("")
if err != nil {
t.Fatalf("New() err = %v", err)
}
if a.Config.IssueRepo == "" {
t.Fatal("IssueRepo пуст — каркас не инициализирован")
}
}