What's Changed
- fix(codex): keep legacy replay turns behind child boundary by @xingfanxia in #896
- fix(claudecode): skip char-based token estimation for bare transcript files by @leecoder in #892
- fix(sessionize): normalize duration timestamps to start-anchored across parsers by @leecoder in #890
- fix(devin-desktop): show pre-dedup message count and Windows paths in clients command by @thedavidweng in #885
- fix(antigravity): resolve current IDE and CLI model aliases by @ddarkr in #891
- fix(sessionize): start-anchor duration timestamps in remaining parsers by @junhoyeo in #898
- fix(submit): prevent duplicate daily_breakdown rows on device change by @leecoder in #886
- feat(bridge): add 9Router integration via gjc-format bridge script (review fixes) by @n1klaus in #887
- fix(leaderboard): make current-user card navigate to own profile by @junhoyeo in #905
- fix(db): ship daily_breakdown dedup safety net as forward-safe migration 0016 by @junhoyeo in #907
- fix(migrations): auto-apply prod drizzle migrations via Vercel buildCommand by @junhoyeo in #904
- fix(tui): stop background cache-warning writes from corrupting TUI screen by @junhoyeo in #906
- fix(frontend): format currency in millions/billions instead of huge K values by @junhoyeo in #911
- fix(cache): complete atomic shard writes on Windows by @Nanako0129 in #914
- fix(scanner): keep explicit-home scans isolated on Windows by @Nanako0129 in #916
- test(core): isolate fixtures from inherited scan roots by @Nanako0129 in #917
- fix(submit): make daily_breakdown upsert conflict-target-agnostic (migration bridge) by @junhoyeo in #918
- fix(submit): preserve same-client usage across devices by @BenLampson in #910
- fix(migrations): retry prod migrate on transient connection drops, not just deadlocks by @junhoyeo in #919
- feat(opencode): parse OpenCode v2 session_message schema by @saiqulhaq in #920
- fix(kimi): preserve extreme token usage by @Nanako0129 in #923
- fix(pricing): resolve Kimi coding-plan model aliases by @chi2nagisa in #930
- fix(opencodereview): clamp oversized unsigned tokens by @Nanako0129 in #929
- fix(kimi): preserve larger saturated status updates by @Nanako0129 in #927
- feat(tui): add sessions tab / feat(core): populate session title in opencode parser by @cmalec in #931
- feat: import historical usage from aggregate exports (clawdboard) + optional submission provenance by @dvddvd300 in #889
- feat: add full-surface TUI theme pack by @Felictycf in #356
- ci: update coverage badge [skip ci] by @github-actions[bot] (b1e7611)
- ci(migrations): fail on journal entries drizzle would silently skip by @junhoyeo in #933
- fix(core): saturate cross-day token totals in summary, years, and import reconciliation by @junhoyeo in #934
New Contributors
- @Felictycf made their first contribution in #356
- @dvddvd300 made their first contribution in #889
- @cmalec made their first contribution in #931
- @saiqulhaq made their first contribution in #920
- @n1klaus made their first contribution in #887
- @xingfanxia made their first contribution in #896
Full Changelog: v4.5.3...v4.6.0
