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).
This commit is contained in:
@@ -146,9 +146,16 @@
|
||||
|
||||
### 12.7. Скоуп реализации (поэтапно)
|
||||
|
||||
- **Фаза 1**: `internal/ui` со сплитами + `TaskStore`-абстракция + **односторонний** поток: команды → Core, периодические snapshots из БД (без шины), всё через `fyne.Do`.
|
||||
- **Фаза 2**: добавить `event.Bus` — Core публикует события, UI подписывается (статусы, история, live-шаги).
|
||||
- **Фаза 3**: консистентность TG↔UI через общий маршрутизатор/шину (`UserID`, `chat.Router`).
|
||||
- [x] **Фаза 1**: `internal/ui` — Store-абстракция (копии), окно как `chat.Channel`,
|
||||
команды через канал, snapshots из БД. Fyne-реализация — `internal/ui/desktop`
|
||||
(build-tag `cgo`, требует компилятор C для GLFW).
|
||||
- [x] **Фаза 2**: `internal/events` — Bus/Hub, Core публикует события, UI подписывается
|
||||
через `Controller` (статусы, история, live-шаги, логи).
|
||||
- [ ] **Фаза 3**: консистентность TG↔UI через общий маршрутизатор/шину (`UserID`, `chat.Router`).
|
||||
|
||||
Примечание: окно (Фаза 1) собирается только с cgo; на машинах без C-компилятора
|
||||
приложение работает headless (UI=nil). Реальное окно полноценно проверяется
|
||||
на машине с MinGW-w64/gcc (`go build -ldflags ...`), здесь — только typecheck.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user