tokentracker-cli 0.47.3 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.ja.md +3 -1
  2. package/README.ko.md +3 -1
  3. package/README.md +3 -1
  4. package/README.zh-CN.md +3 -1
  5. package/dashboard/dist/assets/{ActivityHeatmap-DNXs3lKI.js → ActivityHeatmap-CItg7FNN.js} +1 -1
  6. package/dashboard/dist/assets/{Card-DH3Er6A7.js → Card-B9jWqeQm.js} +1 -1
  7. package/dashboard/dist/assets/{DashboardPage-BwObNlNQ.js → DashboardPage-D-UdQdmb.js} +1 -1
  8. package/dashboard/dist/assets/{DevicePage-C8TbfrgM.js → DevicePage-BmhKFgDo.js} +1 -1
  9. package/dashboard/dist/assets/{DialogTitle-BN06NuBQ.js → DialogTitle-Dcuz0ACc.js} +1 -1
  10. package/dashboard/dist/assets/{FadeIn-BGQdmOIT.js → FadeIn-B-oMQCv_.js} +1 -1
  11. package/dashboard/dist/assets/{HeaderGithubStar-DF-zHHNK.js → HeaderGithubStar-C6x-l5U0.js} +1 -1
  12. package/dashboard/dist/assets/IpCheckPage-D1tltH7T.js +20 -0
  13. package/dashboard/dist/assets/{LandingPage-B9OiRAGX.js → LandingPage-DnjQLNxt.js} +1 -1
  14. package/dashboard/dist/assets/{LeaderboardAvatar-CrulAkZy.js → LeaderboardAvatar-PNgWQxaR.js} +1 -1
  15. package/dashboard/dist/assets/{LeaderboardPage-pLMt5N8v.js → LeaderboardPage-DRCSwReV.js} +3 -3
  16. package/dashboard/dist/assets/{LeaderboardProfileModal-trFYROeI.js → LeaderboardProfileModal-DvbGnWDm.js} +1 -1
  17. package/dashboard/dist/assets/{LeaderboardProfilePage-XQ5aGbP1.js → LeaderboardProfilePage-Bmk16GFd.js} +1 -1
  18. package/dashboard/dist/assets/LimitsPage-DsdyKs5Z.js +2 -0
  19. package/dashboard/dist/assets/{LocalOnlyNotice-BGFFlM7g.js → LocalOnlyNotice-CIa2X9wJ.js} +1 -1
  20. package/dashboard/dist/assets/{LoginPage-0FLg6Gtf.js → LoginPage-CnDLx50g.js} +1 -1
  21. package/dashboard/dist/assets/{PopoverPopup-ClduWm0G.js → PopoverPopup-ZsSFlvKU.js} +1 -1
  22. package/dashboard/dist/assets/{Select-yOe-loKw.js → Select-CY2FgOFv.js} +1 -1
  23. package/dashboard/dist/assets/{SelectItemText-_4uFhB_8.js → SelectItemText-DI_GTNc2.js} +1 -1
  24. package/dashboard/dist/assets/{SettingsPage-mndeQq_K.js → SettingsPage-D1DZkCMo.js} +1 -1
  25. package/dashboard/dist/assets/{SkillsPage-C0NHenLh.js → SkillsPage-DorZCQ0W.js} +1 -1
  26. package/dashboard/dist/assets/{WidgetsPage-X0PwMFCK.js → WidgetsPage-BDLa_UaU.js} +1 -1
  27. package/dashboard/dist/assets/{WrappedPage-Cytzx6OI.js → WrappedPage-BKn5Q7iM.js} +1 -1
  28. package/dashboard/dist/assets/{agent-logos-CzYpdOy_.js → agent-logos-CM4Rt9bu.js} +1 -1
  29. package/dashboard/dist/assets/{arrow-up-right-CE98MOft.js → arrow-up-right-jP0XdZdv.js} +1 -1
  30. package/dashboard/dist/assets/{download-DwKe306W.js → download-D8Hvx1kr.js} +1 -1
  31. package/dashboard/dist/assets/{info-_hRvsmjv.js → info-vv2jU1_C.js} +1 -1
  32. package/dashboard/dist/assets/{main-BO2Z3JNm.js → main-9P4Ny5Xr.js} +15 -15
  33. package/dashboard/dist/assets/main-Br5SsufY.css +1 -0
  34. package/dashboard/dist/assets/use-limits-display-prefs-BZVYlv9P.js +1 -0
  35. package/dashboard/dist/assets/{use-native-settings-D40wCPJV.js → use-native-settings-CR_f7uLH.js} +1 -1
  36. package/dashboard/dist/assets/use-usage-limits-CvgpaBd_.js +1 -0
  37. package/dashboard/dist/assets/{useCurrency-CZqPmMxC.js → useCurrency-Cq0FIlJZ.js} +1 -1
  38. package/dashboard/dist/assets/{useScrollLock-D-_sDVky.js → useScrollLock-B5U1SJQV.js} +1 -1
  39. package/dashboard/dist/brand-logos/hermes.svg +1 -1
  40. package/dashboard/dist/index.html +2 -2
  41. package/dashboard/dist/share.html +2 -2
  42. package/package.json +1 -1
  43. package/src/commands/device-login.js +19 -3
  44. package/src/commands/sync.js +538 -348
  45. package/src/lib/local-api.js +11 -2
  46. package/src/lib/pricing/curated-overrides.json +2 -1
  47. package/src/lib/pricing/seed-snapshot.json +1 -1
  48. package/src/lib/rollout.js +129 -17
  49. package/src/lib/usage-limits.js +118 -25
  50. package/src/lib/wrapped-aggregator.js +12 -1
  51. package/dashboard/dist/assets/IpCheckPage-CgPFKRRL.js +0 -15
  52. package/dashboard/dist/assets/LimitsPage-CWLEVM54.js +0 -2
  53. package/dashboard/dist/assets/main-BfK9LoKV.css +0 -1
  54. package/dashboard/dist/assets/use-limits-display-prefs-ur9_stXM.js +0 -1
  55. package/dashboard/dist/assets/use-usage-limits-BhXhFRP0.js +0 -1
@@ -122,7 +122,9 @@ function readProjectQueueData(projectQueuePath) {
122
122
  try {
123
123
  const row = JSON.parse(line);
124
124
  const key = `${row.project_key || ""}|${row.source || ""}|${row.hour_start || ""}`;
125
- seen.set(key, row);
125
+ // Same legacy-row corrections as the main queue (codex inclusive-input,
126
+ // cursor billable=0) so both read paths report identical numbers.
127
+ seen.set(key, normalizeQueueRow(row));
126
128
  } catch {
127
129
  // skip malformed
128
130
  }
@@ -472,7 +474,7 @@ function aggregateHourlyByDay(rows, dayKey, timeZoneContext) {
472
474
  }
473
475
  const bucket = byHour.get(hourKey);
474
476
  bucket.total_tokens += row.total_tokens || 0;
475
- bucket.billable_total_tokens += row.total_tokens || 0;
477
+ bucket.billable_total_tokens += row.billable_total_tokens ?? row.total_tokens ?? 0;
476
478
  bucket.input_tokens += row.input_tokens || 0;
477
479
  bucket.output_tokens += row.output_tokens || 0;
478
480
  bucket.cached_input_tokens += row.cached_input_tokens || 0;
@@ -2133,4 +2135,11 @@ module.exports = {
2133
2135
  getModelPricing,
2134
2136
  computeRowCost,
2135
2137
  ensurePricingLoaded,
2138
+ // Shared legacy-row correction so every queue reader (main queue, project
2139
+ // queue, wrapped aggregator) reports the same numbers for the same data.
2140
+ normalizeQueueRow,
2141
+ // Machine-stable identity (config.json machineId) — shared with
2142
+ // `tracker device-login` so the CLI device-flow anchors its cloud device
2143
+ // to the machine, not the hostname.
2144
+ getOrCreateMachineId,
2136
2145
  };
@@ -2,7 +2,7 @@
2
2
  "_meta": {
3
3
  "note": "Curated price overrides. Always wins over LiteLLM. Two reasons to live here: (1) self-defined alias names that LiteLLM will never carry (kiro-*, hy3-*, composer-*, kimi-for-coding, free-tier OpenRouter routes); (2) prices we want to pin even if LiteLLM has the model (e.g. cache_write fields LiteLLM often omits). Units: USD per million tokens. Edit this file to override pricing without redeploying.",
4
4
  "units": "usd_per_million_tokens",
5
- "deepseek_v4_pro_discount_expiry": "2026-05-31T15:59:00Z DeepSeek v4-pro is currently at a 75% promotional discount. After expiry the prices revert to 4x: input $1.74/M, output $3.48/M, cache_read $0.0145/M, cache_write $1.74/M. Update this file before the cutover."
5
+ "deepseek_v4_pro_pricing_note": "The 2026-05-31 promotional-expiry warning is obsolete: api-docs.deepseek.com/quick_start/pricing verified on 2026-06-10 still lists input $0.435/M, output $0.87/M, cache_read $0.003625/M as the official v4-pro rates (the discount became the list price). Do NOT 'restore' the old 4x rates; re-verify against the official page before any change."
6
6
  },
7
7
  "exact": {
8
8
  "claude-fable-5": { "input": 10, "output": 50, "cache_read": 1, "cache_write": 12.5, "note": "Fable 5 — Anthropic's top tier above Opus. Not yet in LiteLLM. $10/$50 per MTok; cache_read 0.1x, cache_write 1.25x. Remove once LiteLLM carries it." },
@@ -63,6 +63,7 @@
63
63
  { "match": "minimax-m2.7", "ref": "MiniMax-M2.7" },
64
64
  { "match": "deepseek-v4-flash", "ref": "deepseek-v4-flash" },
65
65
  { "match": "deepseek-v4-pro", "ref": "deepseek-v4-pro" },
66
+ { "match": "kimi-k2.6", "ref": "kimi-k2.6" },
66
67
  { "match": "kimi", "ref": "kimi-k2.5" },
67
68
  { "match": "glm-4.5-airx", "ref": "glm-4.5-airx" },
68
69
  { "match": "glm-4.5-air", "ref": "glm-4.5-air" },