refactor(ui): вынести панель «Диалог» (ChatPanel) из монолита окна
Спеца 12.12: интерфейс + Nil + FormatRole в internal/ui/chat_panel.go, Fyne-реализация в internal/ui/desktop/chat_panel.go (транскрипт + композитор). Окно как chat.Channel рендерит Send/Ask/историю через Append; state_panel не трогаем.
This commit is contained in:
@@ -204,6 +204,22 @@
|
||||
- Диалог и «Состояние» — отдельные панели (chat_panel, state_panel), здесь
|
||||
не участвуют; окно оркестрирует загрузку всех панелей по выбору задачи.
|
||||
|
||||
### 12.12. Контракт виджета «Диалог» (ChatPanel)
|
||||
|
||||
Диалог — транскрипт общения с выбранной задачей + композитор (поле ввода и
|
||||
кнопки команд).
|
||||
|
||||
- Транскрипт:
|
||||
- `SetTranscript(text)` — полный рендер истории выбранной задачи;
|
||||
- `Append(text)` — добавить строку; при превышении лимита старые строки
|
||||
отбрасываются (буфер ограничен);
|
||||
- `Clear()` — очистить при недоступной задаче.
|
||||
- Композитор: поле ввода + кнопки команд, подключённые к `ui.Commands` через
|
||||
`SetCommands(c)` (ввод → `SendText`, кнопки → Start/Approve/Skip/Cancel).
|
||||
- Доставка: окно (как chat.Channel) рендерит `Send`/`Ask`/историю через
|
||||
`Append`; строка роли = pure `FormatRole(role)` (👤/🤖).
|
||||
- Обновление — на потоке Fyne; вызывающий уже внутри `fyne.Do`.
|
||||
|
||||
---
|
||||
|
||||
## Открытые пункты (TODO)
|
||||
|
||||
Reference in New Issue
Block a user