Features
- feat(ui): live
42 t/spill on the streaming reply card; settled card shows1.2k tok · 42 t/ssummary. Computed via the bundled DeepSeek tokenizer; gated below 4 tokens / 500 ms so the first chunk doesn't print bogus rates. (#334, PR #356) - feat(ui):
spacetoggles pause / resume on the auto-mode 5-second undo countdown. While paused the bar freezes at the captured fraction, the badge swaps toNs · paused. (#337, PR #356) - feat(ui):
ctrl-otoggles "expanded" mode on the live streaming card so a long plan / todo can be read while it's still being written. Up to 60 visual lines + a⋯ N earlier lines aboveoverflow hint. Auto-resets to collapsed at turn end. (#335, #337, PR #359)
Bug fixes
- fix(ui):
splitCardStreamonly treated the LAST card as live, committing every earlier card to Ink's<Static>. When the model streamed reasoning then content, the reasoning card was frozen into<Static>while stillstreaming: true— whenreasoning.endlater flippedstreaming: false, the spinner kept spinning forever. The split now scans for the first unsettled card and keeps everything from that index onward live. (PR #358) - fix(ui): SessionPicker hardcoded
¥and ran USD → CNY itself, so USD-wallet users saw¥X.XXin the session list.SessionMetagainsbalanceCurrency; picker accepts awalletCurrencyprop. (#312, PR #357) - fix(dashboard): cost displays were hardcoded to
$viafmtUsd(), so a CNY-wallet user sawsession $0.5190while the same session read¥0.024in the CLI. Dashboard now mirrors the CLI's currency-awareformatCost()for overview, chat rail, and chat status-bar costs. Claude-equivalent comparisons stay USD by design. (PR #360)