Команды (спец 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).
- View — интерфейс Fyne-слоя: колбэки на все доменные события + логи.
- Controller подписывается на доменную и логовую шины (через events.Hub)
и диспатчит события в View; колбэки выполняются в горутинах Hub, поэтому
реализация Fyne обязана обновлять виджеты через fyne.Do (спец 12.4).
- Close отписывает контроллер (сворачивание окна) без остановки Core.
- NilView — no-op для headless (--noui) и тестов.
- Юнит-тесты: доставка доменных/логовых событий, остановка после Close.