ExAthena.Chat.Tui (ExAthena v0.12.1)

Copy Markdown View Source

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

start(opts \\ [])

@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.