tokentracker-cli 1.1.5 → 1.1.6

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 (97) hide show
  1. package/dashboard/dist/assets/{AchievementBadge-ClUmGxBJ.js → AchievementBadge-CpK5rOMf.js} +1 -1
  2. package/dashboard/dist/assets/{AchievementsPage-BB0DFE3m.js → AchievementsPage-BtcQkHZR.js} +2 -2
  3. package/dashboard/dist/assets/{AchievementsSection-BMCSk63s.js → AchievementsSection-BT50hdFh.js} +1 -1
  4. package/dashboard/dist/assets/{BadgeDetailModal-DzJtvuKO.js → BadgeDetailModal-DFtz7FxR.js} +1 -1
  5. package/dashboard/dist/assets/{BotAnimated-BviEasW4.js → BotAnimated-DuZSWD8p.js} +1 -1
  6. package/dashboard/dist/assets/{Card-BoHr-wLc.js → Card-BzGCR7t6.js} +1 -1
  7. package/dashboard/dist/assets/{ClawdAnimated-Bwm8BfqY.js → ClawdAnimated-tpie3z4W.js} +2 -2
  8. package/dashboard/dist/assets/{CommandPalette-Rb0Gfcg9.js → CommandPalette-DxL_wTUY.js} +1 -1
  9. package/dashboard/dist/assets/{CommunityStatsModal-Ck7R7Q-d.js → CommunityStatsModal-5FYbcq_Q.js} +1 -1
  10. package/dashboard/dist/assets/{ConfirmModal-52Fu9wOi.js → ConfirmModal-Dd1z1ofU.js} +1 -1
  11. package/dashboard/dist/assets/{Controls-YlGr187A.js → Controls-DlImhUxL.js} +1 -1
  12. package/dashboard/dist/assets/{DashboardPage-BRim2Rt6.js → DashboardPage-DIPzwCc4.js} +1 -1
  13. package/dashboard/dist/assets/{DevicePage-3mmhzfgd.js → DevicePage-CtdxXb6m.js} +1 -1
  14. package/dashboard/dist/assets/{DialogClose-D1KfBYUS.js → DialogClose-FTnu24dV.js} +1 -1
  15. package/dashboard/dist/assets/DialogDescription-CqQpH51z.js +1 -0
  16. package/dashboard/dist/assets/{DialogTitle-DKye2nJK.js → DialogTitle-C8_lCmoh.js} +1 -1
  17. package/dashboard/dist/assets/{FadeIn-mJp_ZFst.js → FadeIn-Cw9s9Vyn.js} +1 -1
  18. package/dashboard/dist/assets/{HeaderGithubStar-B2R_aqp9.js → HeaderGithubStar-C8GHdUnS.js} +1 -1
  19. package/dashboard/dist/assets/{HoverTooltip-ElY02914.js → HoverTooltip-BFgXXFLw.js} +1 -1
  20. package/dashboard/dist/assets/{IpCheckPage-CNzPUe3x.js → IpCheckPage-C62rs4Sf.js} +1 -1
  21. package/dashboard/dist/assets/{LandingPage-L25-CxXg.js → LandingPage-qa3wKk7Y.js} +2 -2
  22. package/dashboard/dist/assets/{LeaderboardAvatar-BT7x5wAP.js → LeaderboardAvatar-BkznbeVC.js} +1 -1
  23. package/dashboard/dist/assets/{LeaderboardPage-bPce9gOU.js → LeaderboardPage-DTNaWWUP.js} +2 -2
  24. package/dashboard/dist/assets/{LeaderboardProfileModal-DPrFGAp6.js → LeaderboardProfileModal-DkP4Wttv.js} +3 -3
  25. package/dashboard/dist/assets/{LeaderboardProfilePage-j2D1pwYO.js → LeaderboardProfilePage-C7K3PNq3.js} +1 -1
  26. package/dashboard/dist/assets/{LimitsPage-CSED1kBx.js → LimitsPage-CdQfWCxG.js} +1 -1
  27. package/dashboard/dist/assets/{LocalOnlyNotice-D6OERWez.js → LocalOnlyNotice-ClvY1_wG.js} +1 -1
  28. package/dashboard/dist/assets/{LoginCard-HgmRdIn8.js → LoginCard-B1kZLJZd.js} +1 -1
  29. package/dashboard/dist/assets/{LoginModal-BSlEmKOV.js → LoginModal-GiYCVrbT.js} +1 -1
  30. package/dashboard/dist/assets/{LoginPage-HQAhowvh.js → LoginPage-INlKWFTQ.js} +1 -1
  31. package/dashboard/dist/assets/{PetPage-DnbYfu-z.js → PetPage-uq1reCKp.js} +1 -1
  32. package/dashboard/dist/assets/{PopoverPopup-DnyVdfB8.js → PopoverPopup-Dc5Z66VI.js} +1 -1
  33. package/dashboard/dist/assets/{ProviderIcon-D8kgkZlR.js → ProviderIcon-Qh2N0LTI.js} +1 -1
  34. package/dashboard/dist/assets/{ResetPasswordPage-ChtXGykP.js → ResetPasswordPage-BdlpShC8.js} +1 -1
  35. package/dashboard/dist/assets/{SegmentedControl-dHUpXqFk.js → SegmentedControl-DCmwiJYf.js} +1 -1
  36. package/dashboard/dist/assets/{Select-C0tpjNiq.js → Select-BIMHJc2D.js} +1 -1
  37. package/dashboard/dist/assets/{SelectItemText-C3G_w14k.js → SelectItemText-CMkxqxvY.js} +1 -1
  38. package/dashboard/dist/assets/{ServiceStatusPage-D6x4e1r8.js → ServiceStatusPage-C1ll8UfE.js} +1 -1
  39. package/dashboard/dist/assets/{SessionsPage-DZH1QMWd.js → SessionsPage-DVnwnAWa.js} +1 -1
  40. package/dashboard/dist/assets/{SettingsPage-DGmDb2R4.js → SettingsPage-CGs5NN_Z.js} +2 -2
  41. package/dashboard/dist/assets/{SkillsPage-ChloCHPa.js → SkillsPage-5hrIvbe1.js} +1 -1
  42. package/dashboard/dist/assets/{TokenGalaxy-DOC9wlkv.js → TokenGalaxy-BfD0rv-M.js} +1 -1
  43. package/dashboard/dist/assets/{ToolbarRootContext-BB_d-qdY.js → ToolbarRootContext-BlMLA5Ez.js} +1 -1
  44. package/dashboard/dist/assets/{TrendMonitor-DVVzYdc7.js → TrendMonitor-DnJCeEQS.js} +1 -1
  45. package/dashboard/dist/assets/{WidgetsPage-DHVSyU0i.js → WidgetsPage-DsKnuAcr.js} +1 -1
  46. package/dashboard/dist/assets/{WrappedPage-BDi28nRt.js → WrappedPage-CXwtk-hY.js} +1 -1
  47. package/dashboard/dist/assets/{__vite-browser-external-Bnc5aBhq.js → __vite-browser-external-cuNuS_b-.js} +2 -2
  48. package/dashboard/dist/assets/{agent-logos-BiGvZiLq.js → agent-logos-DxLnGJgJ.js} +1 -1
  49. package/dashboard/dist/assets/{arrow-up-right-SvD82rok.js → arrow-up-right-Cj7u2wr7.js} +1 -1
  50. package/dashboard/dist/assets/{check-jL5XErEW.js → check-DNFOvbbk.js} +1 -1
  51. package/dashboard/dist/assets/{composite-DM6geXPA.js → composite-DQR0hWa5.js} +1 -1
  52. package/dashboard/dist/assets/{copy-Dy_GIzj2.js → copy-D0SHZEpt.js} +1 -1
  53. package/dashboard/dist/assets/{download-BW_FS7nX.js → download-UlivGLVm.js} +1 -1
  54. package/dashboard/dist/assets/{external-link-2RIovvCT.js → external-link-rdZCNL_v.js} +1 -1
  55. package/dashboard/dist/assets/{flame-CIRJIxxA.js → flame-qfy_Ty_R.js} +1 -1
  56. package/dashboard/dist/assets/{format-tokens-CT8ahEK4.js → format-tokens-DU-AJn2b.js} +1 -1
  57. package/dashboard/dist/assets/{icons-7J1WD0C-.js → icons-CZ7P_cMG.js} +1 -1
  58. package/dashboard/dist/assets/{index-_vJl6sF7.js → index-CXnOAYdM.js} +1 -1
  59. package/dashboard/dist/assets/{index-D3iSSyYr.js → index-DDfiGiEo.js} +1 -1
  60. package/dashboard/dist/assets/{index-Ddb2A6Mx.js → index-DKnHC0bC.js} +1 -1
  61. package/dashboard/dist/assets/{info-BjVWcOOC.js → info-BY3dZuIN.js} +1 -1
  62. package/dashboard/dist/assets/{link-2-CyRWnHWE.js → link-2-CSTcMOFn.js} +1 -1
  63. package/dashboard/dist/assets/{loader-circle-DUpG5zah.js → loader-circle-yIM6ih7L.js} +1 -1
  64. package/dashboard/dist/assets/{maximize-2-BVGCRkFZ.js → maximize-2-C1P3TlYj.js} +1 -1
  65. package/dashboard/dist/assets/{modifiers.esm-CZI7rED4.js → modifiers.esm-BoQpSulH.js} +1 -1
  66. package/dashboard/dist/assets/{monitor-smartphone-DfBtd01T.js → monitor-smartphone-DafIVSH1.js} +1 -1
  67. package/dashboard/dist/assets/{plus-CvbLCvjV.js → plus-B4l58vrs.js} +1 -1
  68. package/dashboard/dist/assets/{provider-display-DC46GLrv.js → provider-display-CN_xz_OA.js} +1 -1
  69. package/dashboard/dist/assets/{react-mYr3J8Vw.js → react-B9dzohvC.js} +1 -1
  70. package/dashboard/dist/assets/{search-CFaS1rSj.js → search-B8ejosPU.js} +1 -1
  71. package/dashboard/dist/assets/{skills-api-B1N6seFa.js → skills-api-BLC6ZUle.js} +1 -1
  72. package/dashboard/dist/assets/{sortable.esm-BE2GiQaC.js → sortable.esm-BLUZnPyk.js} +1 -1
  73. package/dashboard/dist/assets/{store-DwBbExah.js → store-3B91_nUE.js} +1 -1
  74. package/dashboard/dist/assets/{terminal-Bl2BuO9x.js → terminal-DccsqdRD.js} +1 -1
  75. package/dashboard/dist/assets/{trash-D8beb27Y.js → trash-DfkcSCtq.js} +1 -1
  76. package/dashboard/dist/assets/{use-community-stats-DJG1DsXR.js → use-community-stats-CuIZHVoQ.js} +1 -1
  77. package/dashboard/dist/assets/{use-latest-request-guard-DYK8iyOM.js → use-latest-request-guard-B_oV9ZfF.js} +1 -1
  78. package/dashboard/dist/assets/{use-limits-display-prefs-BGmcFVX3.js → use-limits-display-prefs-CXj8GHMY.js} +1 -1
  79. package/dashboard/dist/assets/{use-ordered-list-Cqia_VIq.js → use-ordered-list-dAFHiuLi.js} +1 -1
  80. package/dashboard/dist/assets/use-reduced-motion-UMqqLkcq.js +1 -0
  81. package/dashboard/dist/assets/{use-session-efficiency-pref-Mj3OeVGZ.js → use-session-efficiency-pref-B9Q45jnR.js} +1 -1
  82. package/dashboard/dist/assets/{use-transform-D4BQIBHx.js → use-transform-CWR6dZvr.js} +1 -1
  83. package/dashboard/dist/assets/{use-usage-limits-BFrO7Mtq.js → use-usage-limits-BmwSEzJh.js} +1 -1
  84. package/dashboard/dist/assets/{useCurrency-CYJavR2h.js → useCurrency-BjHTP-xy.js} +1 -1
  85. package/dashboard/dist/assets/{useTokenFormat-CKruI7SP.js → useTokenFormat-DMOiOFlN.js} +1 -1
  86. package/dashboard/dist/assets/{zap-a82fG76c.js → zap-v0h1PWbB.js} +1 -1
  87. package/dashboard/dist/index.html +1 -1
  88. package/dashboard/dist/ip-check.html +1 -1
  89. package/dashboard/dist/leaderboard.html +1 -1
  90. package/dashboard/dist/share.html +1 -1
  91. package/package.json +1 -1
  92. package/src/commands/serve.js +147 -17
  93. package/src/lib/local-api.js +6 -2
  94. package/src/lib/pricing/seed-snapshot.json +1 -1
  95. package/src/lib/usage-limits.js +27 -1
  96. package/dashboard/dist/assets/DialogDescription-BhWwQSSg.js +0 -1
  97. package/dashboard/dist/assets/use-reduced-motion-CmCk9Sb5.js +0 -1
@@ -105,6 +105,9 @@ const ANTIGRAVITY_NOT_RUNNING_MESSAGE = "Antigravity IDE is not running. Launch
105
105
  const CLAUDE_LIMITS_CACHE_FILE = "claude-usage-limits-cache.json";
106
106
  const CLAUDE_LIMITS_CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
107
107
  const CLAUDE_LIMITS_CACHE_FRESH_TTL_MS = 10 * 60 * 1000;
108
+ // Longer than the fresh TTL, so a prompt made after a snapshot was written always
109
+ // falls inside it (see claudeCacheAwaitsNewWindow).
110
+ const CLAUDE_UNSTARTED_WINDOW_RETRY_MS = 15 * 60 * 1000;
108
111
  // Codex has no rate-limit cooldown like Claude, but its two sequential chatgpt.com requests
109
112
  // (/wham/usage + /wham/rate-limit-reset-credits) make it the provider most exposed to slow
110
113
  // networks. Persist the last successful read so a timeout serves stale bars instead of a red
@@ -2388,9 +2391,32 @@ function claudeCacheCrossedReset(raw, { nowMs } = {}) {
2388
2391
  });
2389
2392
  }
2390
2393
 
2394
+ // An unstarted 5h/7d window (0%, `resets_at: null`) is started by the next prompt,
2395
+ // and Anthropic can lag several minutes behind it, so refetch on every poll within
2396
+ // the retry period after the last prompt, even when the live read is still empty.
2397
+ // The age is measured from the last prompt, not from the cache, because each empty
2398
+ // read rewrites the cache. history.jsonl gains a line per Claude Code prompt; only
2399
+ // its mtime is read. Model-scoped windows stay unstarted while that model is unused.
2400
+ function claudeCacheAwaitsNewWindow(raw, { home, nowMs } = {}) {
2401
+ const unstarted = [raw?.five_hour, raw?.seven_day].some((window) => (
2402
+ window && typeof window === "object" && parseTimeMs(window.resets_at) === null
2403
+ ));
2404
+ if (!unstarted) return false;
2405
+ try {
2406
+ const historyPath = path.join(home || os.homedir(), ".claude", "history.jsonl");
2407
+ const ageMs = nowMs - fs.statSync(historyPath).mtimeMs;
2408
+ // A future mtime (clock correction, copied file) would otherwise extend the retry.
2409
+ return ageMs >= 0 && ageMs < CLAUDE_UNSTARTED_WINDOW_RETRY_MS;
2410
+ } catch (_error) {
2411
+ return false;
2412
+ }
2413
+ }
2414
+
2391
2415
  function readFreshClaudeLimitsCache({ home, nowMs = Date.now() } = {}) {
2392
2416
  const raw = readClaudeLimitsCacheRaw({ home });
2393
- if (!raw || claudeCacheCrossedReset(raw, { nowMs })) return null;
2417
+ if (!raw || claudeCacheCrossedReset(raw, { nowMs }) || claudeCacheAwaitsNewWindow(raw, { home, nowMs })) {
2418
+ return null;
2419
+ }
2394
2420
  return normalizeClaudeCachedLimits(raw, {
2395
2421
  nowMs,
2396
2422
  maxAgeMs: CLAUDE_LIMITS_CACHE_FRESH_TTL_MS,
@@ -1 +0,0 @@
1
- import{r as n,v as a}from"./__vite-browser-external-Bnc5aBhq.js";import{u as p}from"./DialogTitle-DKye2nJK.js";import{u as c}from"./composite-DM6geXPA.js";const x=n.forwardRef(function(e,r){const{render:l,className:u,style:m,id:s,...t}=e,i=p(),o=c(s);return i.useSyncedValueWithCleanup("descriptionElementId",o),a("p",e,{ref:r,props:[{id:o},t]})});export{x as D};
@@ -1 +0,0 @@
1
- import{r as o}from"./__vite-browser-external-Bnc5aBhq.js";import{h as r,i as t,p as s}from"./react-mYr3J8Vw.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};