Full-screen TUI App for mix athena.chat, built on ExRatatui.App.
Layout (see ExAthena.Chat.Tui.View):
- Header (1 row) — provider · model · mode · iter · tokens · cost.
- Messages (flex) — scrollback rendered from
state.events. - Input (3 rows) — multiline textarea bound to
state.input_ref. - Footer (1 row) — keyboard hints.
When the user types a /model or /mode command with no arg, a modal
Popup overlays the messages area with a navigable list. Streaming
tokens accumulate in state.stream_buffer and flush into the most
recent assistant row every ~60 ms (@tick_interval_ms) so a fast
stream doesn't redraw the whole frame per token.
The LLM run lives in an unsupervised Task owned by
ExAthena.Chat.Tui.Runner — see that module for the bridging
contract. The App receives :athena_event, :athena_done, and
:athena_error messages via handle_info/2.
Summary
Functions
Start the chat App and block until the user quits.
Functions
@spec start(keyword()) :: :ok
Start the chat App and block until the user quits.
Mirrors ExAthena.Chat.Repl.start/1 so the Mix task signature is unchanged.