Команды (спец 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).
47 lines
2.0 KiB
Go
47 lines
2.0 KiB
Go
package ui
|
||
|
||
import "fmt"
|
||
|
||
// Commands — отображение действий UI в текстовые команды канала.
|
||
//
|
||
// UI — это chat.Channel, поэтому все действия пользователя (кнопки, ввод)
|
||
// превращаются в текстовые сообщения, которые уходят в Router → Core. Это
|
||
// сохраняет единый путь команд (спец 12.2): никаких прямых вызовов Core из
|
||
// виджетов — только текст через канал.
|
||
type Commands struct {
|
||
// Submit отправляет текст пользователя в канал (обычно — window.Submit).
|
||
Submit func(text string)
|
||
}
|
||
|
||
// NewCommands создаёт Commands с отправкой через fn.
|
||
func NewCommands(fn func(text string)) *Commands {
|
||
if fn == nil {
|
||
fn = func(string) {}
|
||
}
|
||
return &Commands{Submit: fn}
|
||
}
|
||
|
||
// Start — новая задача (/start).
|
||
func (c *Commands) Start() { c.Submit("/start") }
|
||
|
||
// Cancel — отмена текущей задачи (/cancel).
|
||
func (c *Commands) Cancel() { c.Submit("/cancel") }
|
||
|
||
// Skip — пропустить сбор, сформировать черновик (/skip).
|
||
func (c *Commands) Skip() { c.Submit("/skip") }
|
||
|
||
// Retry — перезапустить задачу N (/retry N).
|
||
func (c *Commands) Retry(id int64) { c.Submit(fmt.Sprintf("/retry %d", id)) }
|
||
|
||
// Status — запросить статус задачи N (/status N).
|
||
func (c *Commands) Status(id int64) { c.Submit(fmt.Sprintf("/status %d", id)) }
|
||
|
||
// Continue — продолжить задачу N (/continue N).
|
||
func (c *Commands) Continue(id int64) { c.Submit(fmt.Sprintf("/continue %d", id)) }
|
||
|
||
// Approve — одобрить черновик («создавай»).
|
||
func (c *Commands) Approve() { c.Submit("создавай") }
|
||
|
||
// SendText — обычное сообщение пользователя (ввод в поле).
|
||
func (c *Commands) SendText(text string) { c.Submit(text) }
|