Releases: junhoyeo/tokscale
Releases Β· junhoyeo/tokscale
Release list
v4.15.0
What's Changed
- fix(tui): enable full color in tmux with 256color or truecolor support by @ParkSnoopy in #1210
- style(tui): collapse a nested condition rustfmt and clippy disagreed over by @junhoyeo (62ca1eb)
- perf(opencode): skip legacy JSON files SQLite already supersedes by @junhoyeo in #1215
- perf(copilot): move request DOMs out of session lines instead of cloning by @junhoyeo in #1226
- fix(dsh): attribute usage to the served model by @IvGolovach in #1221
- fix(pricing): apply xAI long-context rates request-wide by @IvGolovach in #1223
- fix(groups): align all-time filters and member search by @IvGolovach in #1224
- fix(scanner): discover Devin CLI AppData sessions on Windows by @mikemikimike in #1222
- perf(leaderboard): keep the default leaderboard cache warm by @pleahmacaka in #1208
- fix(frontend): preserve parser growth after re-attribution by @IvGolovach in #1220
- fix(pricing): align provider-scoped submission resolution by @IvGolovach in #1219
- perf(opencode): scan only rows changed since the last cached parse by @junhoyeo in #1212
- fix(scanner): bound scan parallelism and prune Code/logs for #1153 by @azestkingscrown in #1213
- feat(clients): add LM Studio usage parsing by @The-Minion-oOo in #1217
- feat(usage): add Antigravity subscription quota via the local language server by @lingcang728 in #1216
- ci: update coverage badge [skip ci] by @github-actions[bot] (51d09fa)
- perf(submit): fold the report during the parse instead of collecting every message by @junhoyeo in #1225
- ci: update coverage badge [skip ci] by @github-actions[bot] (6df8a21)
- test(frontend): make high-water replays prove they were not frozen by @junhoyeo in #1227
- perf(copilot): keep only the request fields the parser reads by @junhoyeo in #1228
- fix: close eleven defects found by adversarial review by @junhoyeo in #1229
New Contributors
- @lingcang728 made their first contribution in #1216
- @The-Minion-oOo made their first contribution in #1217
- @pleahmacaka made their first contribution in #1208
- @mikemikimike made their first contribution in #1222
- @ParkSnoopy made their first contribution in #1210
Full Changelog: v4.14.0...v4.15.0
v4.14.0
What's Changed
- refactor(sessions): share read-only SQLite opening by @junhoyeo in #1093
- feat(submit): expose reconciliation census gate inputs by @IvGolovach in #1083
- fix(pricing): separate estimates from submission-safe matches by @IvGolovach in #1084
- fix(cache): preserve completeness when merging retained and live messages by @IvGolovach in #1085
- fix(claude): discover sessions under CLAUDE_CONFIG_DIR instead of a fixed ~/.claude root by @Excelius-Wang in #1102
- refactor(core): consolidate direct cached parse lanes by @junhoyeo in #1094
- fix(cache): read source cache shards lazily and release consumed payloads by @junhoyeo in #1108
- fix(cache): preserve live Claude metadata when merging completeness by @junhoyeo in #1110
- fix(claude): resolve diagnostics cache from config root by @junhoyeo in #1109
- fix(pricing): reject cross-provider model-part submissions by @junhoyeo in #1111
- ci: update coverage badge [skip ci] by @github-actions[bot] (e903173)
- fix(cli): align month titles with bucket dates by @junhoyeo in #1096
- test(tui): isolate cache and widget config tests by @junhoyeo in #1097
- fix(tests): isolate core and CLI cache fixtures by @junhoyeo in #1098
- fix(senpi): discover OmO task child sessions by @ashmoonori-afk in #1113
- fix(senpi): discover OmO child sessions without duplicate scans by @junhoyeo in #1115
- feat(clients): add Cherry Studio support (#1105) by xmL (0db29e9)
- feat(clients): add Cherry Studio support by @sakuralmx in #1105
- fix(clients): follow a redirected home for the AppData scan root by @junhoyeo in #1121
- test(claude): cover retained-completed vs live-partial cross-file merge by @junhoyeo in #1118
- fix(claude): select model-scoped weekly limits by kind, not is_active by @junhoyeo in #1119
- fix(droid): attribute session usage to the replies that spent it, and bound it server-side by @junhoyeo in #1120
- fix(pricing): break equal-length candidate key ties deterministically by @Yuxin-Qiao in #1092
- test: make the #1092 tiebreak regression non-vacuous and de-flake the TUI cache tests by @junhoyeo in #1125
- fix(workspace): make workspace rows distinguishable as rendered, and bound the filesystem work behind them by @junhoyeo in #1124
- ci: update coverage badge [skip ci] by @github-actions[bot] (e8ee234)
- feat(clients): add DeepSeek Harness support by @junhoyeo in #1126
- fix(cli): force HTTP/1.1 for Windows Antigravity RPC to prevent multiplexing freeze by @marshallcodes in #1127
- feat: add ccusage import format by @aron-intframe in #1128
- fix(core): preserve records after invalid JSONL bytes by @junhoyeo in #1095
- ci: update coverage badge [skip ci] by @github-actions[bot] (05000f9)
- fix(antigravity): stop re-probing plaintext on a port already known to speak TLS by @junhoyeo in #1130
- test(claude): pin that the provenance rebuild clears a stale char estimate by @junhoyeo in #1139
- fix(core): recover BOM-prefixed Pi transcripts and align Prime's accounting walk by @junhoyeo in #1134
- refactor(core): share one SQLite driver across the OpenCode-schema parsers by @junhoyeo in #1133
- perf(cli): drop the image codecs and SVG font stacks nothing renders by @junhoyeo in #1132
- refactor(core): share SQLite, usage-struct and JSONL drivers across the session parsers by @junhoyeo in #1137
- perf: replace vendored OpenSSL with rustls by @junhoyeo in #1138
- fix(wrapped): point the OpenClaw logo at a URL that resolves by @junhoyeo in #1141
- refactor(core): put the Pi-format parsers on the shared session drivers by @junhoyeo in #1143
- fix(antigravity-cli): resolve routing-label rows from display labels by @azestkingscrown in #1131
- feat: add MiniMax Code headless usage tracking by @hetaoBackend in #1136
- fix(pricing): resolve OpenAI Daybreak Blue alias by @aravhawk in #1140
- fix(pricing): correct MiniMax-M3 first-party rates in alias regression fixture by @octo-patch in #1144
- fix(codex): stop counting reasoning tokens twice by @junhoyeo in #1146
- fix(pricing): price Kimi Work models and correct the kimi-for-coding target by @junhoyeo in #1147
- fix(frontend): make quickstart label scroll to commands by @xtianxx in #1135
- feat(clients): add fx (vercel-labs) session parsing by @thedavidweng in #1160
- fix(cursor): preserve exported token buckets and costs by @carlosflorencio in #1154
- fix(opencode): support session_v2 metadata by @nulluserid in #1156
- style(opencode): satisfy rustfmt in session_v2 tests by @junhoyeo (ee26e61)
- ci(release): fail fast when the release base is stale by @junhoyeo (b069c85)
- docs(readme): document submit exclusion warnings and the custom-pricing fix path by @thedavidweng in #1167
- fix(scanner): remove nested par_bridge to prevent futex deadlock on large directories by @aruru10313 in #1164
- fix(cli): do not wait on stdout pump thread if headless capture times out by @aruru10313 in #1166
- feat(submit): print a fix hint after unpriced-exclusion warnings by @thedavidweng in #1168
- fix(dsh): count the compaction summarize call, and close two hygiene gaps by @junhoyeo in #1162
- feat(kimi): discover Kimi Work sessions natively by @REMIXPLAYER in #1170
- fix: close two hang/double-count gaps found by adversarial review by @junhoyeo in #1173
- fix(tui): rebuild the aggregate cache when the parser generation changes by @junhoyeo in #1174
- chore(cache): delete the pre-v2 monolith once the shard cache is in use by @junhoyeo in #1176
- chore: resolve strict Clippy warnings by @aruru10313 in #1172
- feat(import): attribute ccusage --by-agent rows to the agent that reported them by @aron-intframe in #1190
- fix(antigravity): parse standalone usage timestamps by @jh-qu in #1151
- fix(core): parse kind-1 updates for VS Code Copilot Chat v3 by @aruru10313 in #1182
- feat(profile): add weekly and monthly ranks by @0thernet in #1179
- feat(embed): add weekly and monthly stats and ranks by @0thernet in #1178
- feat(tui): add light mode (white background) toggle to the interactive TUI by @YunhaoFu in #1177
- feat(usage): add OpenCode Go subscription usage provider by @stevejkang in #1189
- fix(usage): respect Retry-After on Claude 429 and block requests during cooldown by @stevejkang in #1188
- fix(pricing): resolve provider-specific model aliases by @Jackson57279 in #1186
- fix(cursor): extend timeout to 120s for explicit sync of large CSV exports by @aruru10313 in #1183
- fix(cli): work around an Antigravity RPC sync hang on Windows via curl.exe fallback by @marshallcodes in #1180
- fix(copilot): support GH_TOKEN env and legacy Windows hosts path for credential detection by @xtianxx in #1191
- feat(sessions): add Oh My Pi (omp) as a local session source by @bn852j6nky-code in #1161
- fix(leaderboard): match period rank tiebreakers across profile and embed surfaces by @junhoyeo ...
v4.13.0
What's Changed
- fix(core): join client scan roots with native path separators by @Felictycf in #1075
- fix(antigravity_cli): resolve aliases before rejecting ambiguous display labels in SessionModels by @azestkingscrown in #1059
- docs(ci): stop crediting the windows leg with two defects it did not find by @junhoyeo in #1073
- docs(test): show the native separator on the emitted side of the scan-path contrast by @junhoyeo in #1079
- fix(pricing): keep bare routing labels off model-part index fallbacks by @thedavidweng in #1072
- feat(codex): add OpenCode OAuth usage fallback by @j-chmielewski in #1077
- fix(pricing): alias bare minimax-m3 spelling to first-party key by @Felictycf in #1076
- test(cli): widen the headless capture timing gap instead of the bound by @junhoyeo in #1081
- feat(prime-agent): add local session support by @junhoyeo in #1080
- fix(tui): gate Apple Terminal truecolor on TERM_PROGRAM_VERSION by @Yuxin-Qiao in #1061
- feat(clients): add Freebuff session parsing by @thedavidweng in #1064
- fix(cache): defer TUI warnings until terminal restore by @fzlzjerry in #1065
- fix(prime-agent): correct fork accounting and session roots by @junhoyeo in #1082
- ci: update coverage badge [skip ci] by @github-actions[bot] (bf20c28)
- [ImgBot] Optimize images by @imgbot[bot] in #1087
- fix(pricing): treat
deepseek-aianddeepseekas one vendor by @junhoyeo in #1074 - fix(copilot): attribute desktop usage to the run that spent it by @MoerAI in #1032
- fix(prime-agent): cache reconciliation accounting by @junhoyeo in #1088
- fix(reports): preserve reasoning totals and client display metadata by @junhoyeo in #1091
New Contributors
- @fzlzjerry made their first contribution in #1065
- @j-chmielewski made their first contribution in #1077
- @azestkingscrown made their first contribution in #1059
Full Changelog: v4.12.0...v4.13.0
v4.12.0
What's Changed
- feat(submit): let a submission declare its cost incomplete by @junhoyeo in #1058
- fix(pricing): resolve Anthropic moving aliases and Cursor's free cache creation by @junhoyeo in #1067
- ci(windows): make the windows-latest test leg a hard gate by @junhoyeo in #1068
- fix(pricing): let custom-pricing.json express a free model by @junhoyeo in #1069
- fix(pricing): refuse to price router labels, prefer original vendor on ties by @junhoyeo in #1070
Full Changelog: v4.11.0...v4.12.0
v4.11.0
What's Changed
- fix(submit): exclude unpriced usage without aborting by @Soju06 in #1053
- fix(claude): stop char-estimating tool_result input tokens by @Yuxin-Qiao in #1037
- fix(claude): drop tool results that inherit the
<synthetic>placeholder by @IngTian in #1045 - fix(antigravity-cli): attribute turns whose blob omits responseModel by @haunchen in #1051
- fix(submit): reject exclusions no pricing dataset backs by @junhoyeo in #1055
- fix(report): stop summaries rendering an empty cost as "-0.00" by @junhoyeo in #1056
- docs(claude): correct the synthetic-placeholder guard's stated failure mode by @junhoyeo in #1057
New Contributors
Full Changelog: v4.10.0...v4.11.0
v4.10.0
What's Changed
- fix(cursor): increase HTTP timeout to 15 seconds by @RawToast in #1025
- ci(test): run the suite on windows-latest (advisory) and fix the $HOME redirect by @junhoyeo in #1012
- feat(moderation): tell a hidden user they are hidden, and how to appeal by @junhoyeo in #1020
- fix(tencent-buddy): don't double-count cached input tokens by @Yuxin-Qiao in #1023
- fix(usage): stop tokscale from rewriting Codex's auth.json by @junhoyeo in #1017
- fix(grok): parse unified usage with scoped attribution by @jR4dh3y in #1000
- feat(submit): populate per-device client/bucket token high-water marks by @junhoyeo in #1015
- fix(cli): pin the timezone usage days are bucketed into by @junhoyeo in #1016
- fix(pricing): resolve gemini-default routing label for submission by @Yuxin-Qiao in #1026
- fix(pricing): compose routing-prefix and tier-suffix stripping by @MoerAI in #1029
- fix(pricing): keep published cache rates so submit stops rejecting Codex usage by @MoerAI in #1028
- feat(clients): add standalone Cline CLI and Kimchi sessions by @jR4dh3y in #998
- fix(sync): hold the antigravity and trae sync locks in the OS by @MoerAI in #1030
- test(submit): reproduce timezone re-split double count (#960) by @Yuxin-Qiao in #1033
- perf(leaderboard): move leaderboard aggregation into PostgreSQL by @junhoyeo in #871
- feat(infra): add optional self-hosting support (Docker/Podman + Makefile) by @slmingol in #969
- feat(reasonix): parse local session usage by @swarnimarun in #732
- feat(submit): record unguarded daily totals in a shadow table (#960) by @Yuxin-Qiao in #1034
- fix(claude): skip synthetic tool-result attribution by @junhoyeo in #1038
- docs: update README with instructions on how to run the application by @junhoyeo (068fefe)
- docs(readme): sync localized documentation by @junhoyeo in #1039
- ci: route checks by changed targets by @junhoyeo in #1040
- ci: update coverage badge [skip ci] by @github-actions[bot] (ff73f39)
- fix(grok): keep parsing session files past undecodable lines by @junhoyeo in #1041
- fix(pricing): price free models whose rows omit cache rates by @junhoyeo in #1042
- fix(pricing): stop pricing fetches from writing the cache when the caller opted out by @junhoyeo in #1043
- fix(windows): repair the Windows test leg and the three product bugs it was hiding (52 β 0) by @junhoyeo in #1046
New Contributors
- @Yuxin-Qiao made their first contribution in #1023
- @swarnimarun made their first contribution in #732
- @slmingol made their first contribution in #969
- @MoerAI made their first contribution in #1029
- @jR4dh3y made their first contribution in #1000
Full Changelog: v4.9.0...v4.10.0
v4.9.0
What's Changed
- feat: recognize OrcaRouter as a provider in display and pricing by @jinhaosong-source in #1004
- fix: gracefully fall back when LiteLLM pricing fetch fails by @shunkakinoki in #1003
- fix(usage): stop tokscale from rewriting Claude Code's credentials by @junhoyeo in #1005
- fix(windows): stop lock and PID probes silently failing off Unix by @junhoyeo in #1007
- fix(cache): keep Claude turns a transcript rewrite dropped by @junhoyeo in #1008
- fix(pricing): centralize degraded source fallback by @junhoyeo in #1006
- test(pricing): cover OrcaRouter reseller semantics by @junhoyeo in #1009
New Contributors
- @jinhaosong-source made their first contribution in #1004
Full Changelog: v4.8.1...v4.9.0
v4.8.1
What's Changed
- fix(provider-identity): recognize bare k2/k3 Kimi model ids by @junhoyeo in #996
- docs: revise README by @junhoyeo (4136f98)
Full Changelog: v4.8.0...v4.8.1
v4.8.0
What's Changed
- feat(sponsors): make project funding discoverable by @junhoyeo in #950
- Add function to union MiMo Code databases from multiple directories by @zhangyunan1994 in #949
- feat(landing): add a dedicated sponsor section by @junhoyeo in #951
- feat(cli): add android-arm64 prebuilt for Termux by @alifakbar111 in #948
- chore(ci): prevent PR and release build drift by @junhoyeo in #953
- fix(submit): preserve usage history after local session cleanup by @junhoyeo (d9df8c9)
- fix(submit): derive session metrics per device and harden the active-time guard by @junhoyeo in #955
- feat(sessions): query session_model_usage for per-model token breakdown in Hermes parser by @n1klaus in #961
- feat(tui): show model names with family-shade colors in Sessions tab by @cmalec in #956
- ci: update coverage badge [skip ci] by @github-actions[bot] (3a2d2c5)
- fix(submit): clamp submission token aggregates to bigint by @junhoyeo in #959
- fix(kimi): resolve symbolic usage models from requests by @mijanx in #967
- feat(cursor): auto-login from local Cursor desktop state.vscdb by @FlintyLemming in #968
- docs(tui): propose a width-budgeted column set for the Sessions tab by @junhoyeo in #965
- fix(tui): budget the Sessions columns instead of over-subscribing them by @junhoyeo in #966
- feat(frontend): add display timezone preference for profile charts by @junhoyeo in #952
- fix(autosubmit): verify macOS launchd activation before reporting success by @Mathews-Tom in #971
- chore: ignore Claude Code worktrees by @junhoyeo in #974
- fix(autosubmit): report when the scheduled copy is a stale build by @junhoyeo in #973
- feat(frontend): add sitemap.xml and robots.txt by @junhoyeo (8e80ba1)
- fix(frontend): canonicalize the query-param variants of indexable pages by @junhoyeo (9d4bcde)
- docs(frontend): correct the homeUrl trailing-slash comment by @junhoyeo (e632b8d)
- fix(frontend): anchor core-page lastmod to real submission activity by @junhoyeo (52d37e9)
- feat(frontend): add privacy, terms, and contact pages by @junhoyeo (a15ca1c)
- fix(frontend): give each indexable page its own title and description by @junhoyeo (1594ecf)
- feat(frontend): render per-profile and per-group Open Graph cards by @junhoyeo (1c39f7c)
- fix(embed): coerce the bigint rank so UserEmbedStats.rank is really a number by @junhoyeo (fcdbc0d)
- feat(og): brand the cards with Manrope, Pretendard, and the wordmark by @junhoyeo (4b3f9bb)
- fix(9router): read usageHistory table, handle missing requestDetails by @n1klaus in #975
- fix(kimi): treat a blank KIMI_CODE_HOME as unset by @junhoyeo in #976
- fix(kimi): reject non-positive wire timestamps instead of bucketing pre-epoch by @junhoyeo in #977
- fix(opencodereview): keep timestampless llm_response records distinct by @junhoyeo in #978
- feat(clients): add Senpi (OmO Native) token usage tracking by @junhoyeo in #979
- test(provider): lock family matching for version-suffixed model ids by @junhoyeo in #981
- fix(provider): ignore Ollama route prefixes during inference by @junhoyeo in #982
- feat(moderation): hide suspect accounts from the leaderboard without deleting them by @junhoyeo in #980
- fix(tui): stop forcing Terminal.app into compatible color mode by @jyuwaaw in #983
- fix(moderation): drop the implied-rate floor that flagged 38 innocent accounts by @junhoyeo in #984
- feat(report): add MiniMax summarizer backend via OpenAI-compatible API by @octo-patch in #985
- docs(design): recovery plan for ratchet inflation that preserves cleanup protection by @junhoyeo (db82945)
- docs(design): confirm the invariant assumption; flag session rotation as a second cause by @junhoyeo (10c88c9)
- docs(design): gate on the token total, not active time by @junhoyeo (1d844c3)
- docs(design): rebuild the plan against the actual merge path by @junhoyeo (1a66757)
- docs(design): reorder by risk -- fix the read path before rewriting any rows by @junhoyeo (a435091)
- docs(design): bucket the high-water by month; a lifetime total swallows new work by @junhoyeo (e770eff)
- docs(design): stop calling bucketing a fix; measure the width and pin the key by @junhoyeo (01612a1)
- docs(design): fold in audit findings; the heal would have silently no-opped by @junhoyeo (96e58fd)
- docs(design): fix a stale header and a Phase 2 edge that zeroes live accounts by @junhoyeo (f0d2938)
- docs(design): split Phase 4 into a recorded snapshot and an offline reconcile by @junhoyeo (152f238)
- fix(leaderboard): sum only the filtered client's tokens on period boards by @junhoyeo in #988
- fix(submit): stop the alias fold from mutating the stored raw breakdown by @junhoyeo in #989
- fix(opencodereview): parse the client on the submit path, not just locally by @junhoyeo in #990
- fix(groups): sum only the filtered client's tokens on group period boards by @junhoyeo in #991
- fix(profile): stop the day aggregator from mutating stored breakdown rows by @junhoyeo in #992
- docs(design): mark the #960 adjacent fixes as landed and refresh the citations by @junhoyeo (7e1c702)
- docs(agents): document the rg pitfalls that silently produce empty results by @junhoyeo (f786367)
- docs(design): record the #960 census and re-gate the phases on what it showed by @junhoyeo (80491ad)
- docs(design): measure Phase 1's write cost and move it off the submit transaction by @junhoyeo (8a06eb5)
- docs(design): add Phase 1.5 dual-read, and record why the warm-up is forced by @junhoyeo (7490fa4)
- docs(design): verify Phase 3's cost instead of asserting it by @junhoyeo (5678d0a)
- feat: add Augment Code (Auggie) local session client by @luancm in #987
- fix(release): allow first-time publish of new platform packages in npm release-state check by @junhoyeo in #995
- fix: clean up lint regressions from the augment client merge by @junhoyeo (fce7747)
New Contributors
- @luancm made their first contribution in #987
- @octo-patch made their first contribution in #985
- @jyuwaaw made their first contribution in #983
- @FlintyLemming made their first contribution in #968
- @alifakbar111 made their first contribution in #948
- @zhangyunan1994 made their first contribution in #949
Full Changelog: v4.7.0...v4.8.0
v4.7.0
What's Changed
- fix: pricing, parser, and TUI fixes from adversarial bug hunt by @junhoyeo in #944
- fix(copilot): preserve duplicate span metadata by @Nanako0129 in #943
- feat: read opencode model names from user config for TUI display by @cmalec in #946
- fix(submit): let complete-day resubmits heal alias-folded double counts by @junhoyeo in #945
Full Changelog: v4.6.1...v4.7.0
