44 lines
2.1 KiB
Go
44 lines
2.1 KiB
Go
package ui
|
||
|
||
// ChatPanel — панель «Диалог» (спец 12.12): транскрипт диалога выбранной
|
||
// задачи + композитор (поле ввода и кнопки команд).
|
||
//
|
||
// Транскрипт — буфер ограниченного размера; при превышении лимита старые
|
||
// строки отбрасываются. Композитор подключается к ui.Commands через
|
||
// SetCommands. Обновление — на потоке Fyne; вызывающий уже внутри fyne.Do.
|
||
type ChatPanel interface {
|
||
// SetTranscript заменяет содержимое диалога полным рендером.
|
||
SetTranscript(text string)
|
||
// Append добавляет строку в диалог (буфер ограничен).
|
||
Append(text string)
|
||
// Clear очищает диалог (задача недоступна/не выбрана).
|
||
Clear()
|
||
// SetCommands подключает команды к композитору (ввод + кнопки).
|
||
SetCommands(c *Commands)
|
||
// SetBoundTask сообщает панели задачу, к которой привязана вкладка
|
||
// (0 — свободный чат). Кнопка «Перезапустить» (/retry N) активна только
|
||
// для вкладки с привязанной задачей.
|
||
SetBoundTask(taskID int64)
|
||
}
|
||
|
||
// NilChatPanel — no-op реализация ChatPanel для headless-режима и тестов.
|
||
type NilChatPanel struct{}
|
||
|
||
// NewNilChatPanel создаёт NilChatPanel.
|
||
func NewNilChatPanel() *NilChatPanel { return &NilChatPanel{} }
|
||
|
||
func (NilChatPanel) SetTranscript(string) {}
|
||
func (NilChatPanel) Append(string) {}
|
||
func (NilChatPanel) Clear() {}
|
||
func (NilChatPanel) SetCommands(*Commands) {}
|
||
func (NilChatPanel) SetBoundTask(int64) {}
|
||
|
||
// FormatRole — строка роли в диалоге (pure-функция, спец 12.12).
|
||
func FormatRole(role string) string {
|
||
switch role {
|
||
case "user":
|
||
return "👤 "
|
||
default:
|
||
return "🤖 "
|
||
}
|
||
} |