What's Changed
- fix(dsh): stream large transcripts without caching partial reads by @IvGolovach in #1535
- feat(cli): support offline reports and explicit pricing refresh by @IvGolovach in #1536
- fix(ranking): align profile and embed ranks with UTC windows by @IvGolovach in #1537
- feat(groups): add bounded reusable invitations with atomic redemption by @IvGolovach in #1538
- feat(proma): account for native and mirrored Agent session usage by @IvGolovach in #1539
- fix(tui): follow terminal light background via COLORFGBG by @ShryukGrandhi in #1520
- fix(opencode): read V2 providers config for model names by @cmalec in #1541
- fix(cache): stop replaying legacy OpenCode and MiMo entries over complete scans by @ualtinok in #1540
- fix(pricing): inherit input rate for pre-5.6 OpenAI cache writes by @azestkingscrown in #1543
- fix(cursor): count each Cursor usage event once across its snapshots by @greatyao in #1544
- fix(cursor): reconcile legacy snapshots with event ids by @junhoyeo in #1550
- fix(usage): bound quota HTTP requests by @dnplus in #1506
- fix(auth): replace credential files with private atomic writes by @dnplus in #1507
- fix(tui): treat only Codex cards as saved Codex accounts by @dnplus in #1508
- test(claude): make cooldown lock tests deterministic by @dnplus in #1509
- fix(core): read OpenCode configs saved with a UTF-8 BOM by @kevin9327 in #1510
- fix(report): default MiniMax summaries to M3.1 Flash by @octo-patch in #1512
- fix(codex): exempt review parent rollouts from missing usage diagnostic by @azestkingscrown in #1517
- docs(readme): port machine labels and machine,model grouping to translations by @junhoyeo in #1528
- fix(cli): dim info diagnostics in clients output by @junhoyeo in #1529
- fix(codex): match OpenCodex rows strict-first, late window second by @junhoyeo in #1530
- fix(qwen): keep reasoning inside candidates when the recorded total is 0 by @junhoyeo in #1531
- fix: machine-label follow-ups (warm-cache relabel pin, Overview machine,model fit) by @junhoyeo in #1532
- fix(submit): stop recount corrections from wearing down unexplained usage by @junhoyeo in #1553
- fix(grok): include inference duration in speed statistics by @REMIXPLAYER in #1485
- fix(submit): count cost-bearing days in active day calculations by @azestkingscrown in #1502
- feat(cli): support custom timeout and settings for cursor auto-sync on submit by @azestkingscrown in #1503
- fix(pi): count standalone usage entries by @JPFrancoia in #1484
- docs(core): clarify codex rollout unmetered activity diagnostic by @azestkingscrown in #1504
- fix(submit): heal inflated Cursor history with a recount proof by @junhoyeo in #1552
- fix(usage): cache Claude quotas without blocking TUI startup by @raw34 in #1557
- fix(usage): mark old Warp usage as cached and show its sync time by @dnplus in #1573
- fix(usage): stop reporting unknown Codex quota as 0% used by @dnplus in #1570
- fix(droid): attribute each call to the model that served it by @lingcang728 in #1568
- fix(cli): promote compact token counts at unit boundaries by @kevin9327 in #1567
- fix(submit): ship only the requested window for Cursor and Devin CLI by @Jackson57279 in #1574
- fix(usage): stop reporting unknown Copilot quota as fully available by @dnplus in #1571
- fix(usage): stop reporting unknown OpenCode Go quota as 0% used by @dnplus in #1572
- feat(copilot): discover empty-window VS Code chat sessions by @mamaruo in #1562
- fix(cursor): keep the Cursor cache under TOKSCALE_CONFIG_DIR by @dnplus in #1569
- ci: update coverage badge [skip ci] by @github-actions[bot] (75728e2)
- fix(droid): keep sessions that alternate models under the record cap by @junhoyeo in #1575
- fix(wrapped): promote compact token counts at unit boundaries by @junhoyeo in #1576
- fix(hermes): copy sessions.title onto parsed usage by @icrazt in #1590
- fix(submit): compact repeated daily regression warnings by @thedavidweng in #1581
- fix(senpi): scan OmO home-agent project children and memory transcripts by @ShryukGrandhi in #1578
- fix(submit): report mixed pricing gaps accurately by @thedavidweng in #1582
- fix(droid): keep reply counts on their transcript dates by @thedavidweng in #1579
- fix(codex): use the world_state model before any turn_context by @kevin9327 in #1583
New Contributors
- @ShryukGrandhi made their first contribution in #1520
- @icrazt made their first contribution in #1590
- @mamaruo made their first contribution in #1562
- @raw34 made their first contribution in #1557
- @greatyao made their first contribution in #1544
- @ualtinok made their first contribution in #1540
Full Changelog: v4.20.1...v4.21.0
