Three changes from testing the launcher:
1. Remove the multi-line composer. It rendered as a small box floating
in a large empty form. That is structural, not a styling miss: Vicinae
always renders a Form.TextArea inside FormField, which reserves two
ninths of the width for a label gutter and two ninths as an empty
right spacer. With no way to reclaim that width, and no clean
full-width variant available, prompts stay single line.
2. Resume the most recent conversation when the command opens. Every
launch used to start a fresh chat, so there was no way to continue
anything. Starting over is now explicit: cmd+N, or "New chat" in the
dropdown.
3. One row per message instead of one row per turn. Storage keeps a
question and its answer together because that is what gets replayed to
the model; thread.ts flattens that so each side gets its own icon and
weight. Rows are a fixed single line and the renderer draws title
bright and subtitle muted, so the question goes in the subtitle and
the answer in the title -- that is what dims the user and brightens
Lam. Icons are Person and Stars.
The detail panel now shows the whole thread rather than the selected
message. Vicinae resets list selection to the first row on every model
change and streaming changes the model on every flush, so the selected
row cannot be relied on to stay put while an answer arrives.
Verified by running it: the existing saved session resumed and rendered
as four rows (two dim questions, two bright answers) with the thread in
the detail panel. typecheck, eslint, 107 tests and vici build all pass.