What's new
Bug fixes
- Newline rendering:
AppendOutputinsertsLineBreakinlines instead of collapsing\nto space inRichTextBlock. - Prompt cleared after Run: TextBox emptied as soon as Run is pressed.
- NewChat clears prompt:
NewChat()also resets the TextBox. - Double FocusEngagement removed: removed from
ScrollViewer; one A-press now opens the keyboard on Xbox. - Focus returns after generation: cursor moves back to TextBox when inference completes.
- Smart autoscroll: suppressed while user scrolled up; resumes when back at bottom.
- Status "Loading model…" at startup: Run disabled until model is confirmed loaded.
- Context trim aligned to n_ctx: threshold lowered 3500 → 1800; trim surfaces a status message.
- Partial save on cancel: assistant message saved with
partial=truewhen user presses Cancel.
Features
- Settings — sampling params: temperature, top_p, top_k, repetition_penalty, n_predict in Settings dialog, persisted in
settings.json. - Settings — model selection: ComboBox to switch SmolLM2-360M (bundled) / SmolLM2-1.7B (USB) / SmolLM2-360M (HF).
- History — per-item delete: ✕ button with confirmation dialog.
- History — Clear all: Secondary button with confirmation.
- History — current indicator: ● prefix on active conversation.
- History — relative timestamps: "today", "yesterday", or date.
- History — empty state: dialog with placeholder instead of silent no-op.
Tests
tests/test_chat_history.cpp: TitleFrom smoke tests on Linux CI; Save/Load/Delete/Clear suite on UWP.
Bench baseline unchanged: SmolLM2-360M 64.5 tok/s, n=990, peak=705 MB (Zen 2 Xbox Series S).