Files
ratatoskr-go/cmd/ratatoskr/main.go
ki.sagidullin c2272137b3
Some checks failed
CI / test (pull_request) Failing after 1m19s
CI / build-and-package (amd64, linux) (pull_request) Failing after 58s
CI / build-and-package (amd64, windows) (pull_request) Successful in 53s
feat(ui): команды, snapshots, Fyne-окно и интеграция (--noui)
Команды (спец 12.2):
- ui.Commands: действия UI → текстовые команды канала (start/cancel/skip/
  retry/continue/approve/send), единый путь через chat.Channel.
- ui.Window = chat.Channel + View; NilWindow для headless/тестов.

Snapshots (спец 12.5):
- ui.Store: чтение-модель, возвращает только копии (ListTasks/GetTask/
  GetHistory/GetTraces); ui.DBStore поверх storage.

Fyne-окно (internal/ui/desktop, build-tag cgo):
- список задач слева, сплиты рабочей области и панели «Логи»/«Состояние»,
  ввод+кнопки команд, тёмная тема, fullscreen, сохранение layout в
  Preferences, сворачивание при закрытии крестиком.
- Колбэки View через fyne.Do (спец 12.4).

Интеграция:
- app.New(..., noUI); флаг --noui; UI собирается только с cgo (ui_cgo/
  ui_noui фабрики), приложение headless без него.
- Run: окно блокирует главную горутину; «Завершить» → cancel → graceful
  shutdown (спец 12.6).
- go.mod: fyne.io/fyne/v2 v2.6.0 (direct).
2026-08-20 08:54:55 +05:00

65 lines
2.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Command ratatoskr — оркестратор конвейера Ratatoskr (единый бинарь).
//
// Запуск: ratatoskr [-config config.yaml]
// config.yaml ищется в CWD, по умолчанию — env/дефолты.
package main
import (
"context"
"flag"
"fmt"
"log"
"os"
"github.com/kamelion/ratatoskr-go/internal/app"
)
// version — версия бинаря, вшивается при сборке:
// go build -ldflags "-X main.version=<commit-sha7>"
// Локальная сборка без ldflags оставляет "dev".
var version = "dev"
// updateToken — токен read:package для авто-обновления, вшивается при сборке:
// go build -ldflags "-X main.updateToken=<token>"
// Без ldflags — пустой; тогда используется update.token из конфига (если задан).
var updateToken = ""
func main() {
cfg := flag.String("config", "", "путь к config.yaml (по умолчанию — CWD/config.yaml)")
versionFlag := flag.Bool("version", false, "показать версию и выйти")
noUI := flag.Bool("noui", false, "работать без графического окна (headless)")
flag.Parse()
if *versionFlag {
fmt.Println("ratatoskr-go " + version)
return
}
a, err := app.New(*cfg, version, updateToken, *noUI)
if err != nil {
log.Fatalf("app init: %v", err)
}
defer func() {
if a.Store != nil {
a.Store.Close()
}
}()
// Применить отложенный свап обновления (из предыдущего /update на Windows
// или отложенной замены), если есть .new рядом с бинарём. До старта подсистем.
if a.Updater != nil {
if err := a.Updater.ApplyPendingSwap(); err != nil {
log.Printf("ratatoskr: apply-pending-swap: %v", err)
}
}
// Строка с номером версии при старте: семантическая версия (app.Version)
// + build-идентификатор (main.version, вшитый ldflag'ом) для диагностики.
log.Printf("ratatoskr: запущен (version %s, build %s)", app.Version, version)
if err := a.Run(context.Background()); err != nil {
log.Fatalf("app run: %v", err)
}
log.Print("ratatoskr: остановлен")
os.Exit(0)
}