// 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 }