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.
- package/dashboard/dist/assets/{AchievementBadge-ClUmGxBJ.js → AchievementBadge-CpK5rOMf.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-BB0DFE3m.js → AchievementsPage-BtcQkHZR.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-BMCSk63s.js → AchievementsSection-BT50hdFh.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DzJtvuKO.js → BadgeDetailModal-DFtz7FxR.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-BviEasW4.js → BotAnimated-DuZSWD8p.js} +1 -1
- package/dashboard/dist/assets/{Card-BoHr-wLc.js → Card-BzGCR7t6.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-Bwm8BfqY.js → ClawdAnimated-tpie3z4W.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-Rb0Gfcg9.js → CommandPalette-DxL_wTUY.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-Ck7R7Q-d.js → CommunityStatsModal-5FYbcq_Q.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-52Fu9wOi.js → ConfirmModal-Dd1z1ofU.js} +1 -1
- package/dashboard/dist/assets/{Controls-YlGr187A.js → Controls-DlImhUxL.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-BRim2Rt6.js → DashboardPage-DIPzwCc4.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-3mmhzfgd.js → DevicePage-CtdxXb6m.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-D1KfBYUS.js → DialogClose-FTnu24dV.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-CqQpH51z.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-DKye2nJK.js → DialogTitle-C8_lCmoh.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-mJp_ZFst.js → FadeIn-Cw9s9Vyn.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-B2R_aqp9.js → HeaderGithubStar-C8GHdUnS.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-ElY02914.js → HoverTooltip-BFgXXFLw.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-CNzPUe3x.js → IpCheckPage-C62rs4Sf.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-L25-CxXg.js → LandingPage-qa3wKk7Y.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-BT7x5wAP.js → LeaderboardAvatar-BkznbeVC.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-bPce9gOU.js → LeaderboardPage-DTNaWWUP.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-DPrFGAp6.js → LeaderboardProfileModal-DkP4Wttv.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-j2D1pwYO.js → LeaderboardProfilePage-C7K3PNq3.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-CSED1kBx.js → LimitsPage-CdQfWCxG.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-D6OERWez.js → LocalOnlyNotice-ClvY1_wG.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-HgmRdIn8.js → LoginCard-B1kZLJZd.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-BSlEmKOV.js → LoginModal-GiYCVrbT.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-HQAhowvh.js → LoginPage-INlKWFTQ.js} +1 -1
- package/dashboard/dist/assets/{PetPage-DnbYfu-z.js → PetPage-uq1reCKp.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-DnyVdfB8.js → PopoverPopup-Dc5Z66VI.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-D8kgkZlR.js → ProviderIcon-Qh2N0LTI.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-ChtXGykP.js → ResetPasswordPage-BdlpShC8.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-dHUpXqFk.js → SegmentedControl-DCmwiJYf.js} +1 -1
- package/dashboard/dist/assets/{Select-C0tpjNiq.js → Select-BIMHJc2D.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-C3G_w14k.js → SelectItemText-CMkxqxvY.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-D6x4e1r8.js → ServiceStatusPage-C1ll8UfE.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-DZH1QMWd.js → SessionsPage-DVnwnAWa.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-DGmDb2R4.js → SettingsPage-CGs5NN_Z.js} +2 -2
- package/dashboard/dist/assets/{SkillsPage-ChloCHPa.js → SkillsPage-5hrIvbe1.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-DOC9wlkv.js → TokenGalaxy-BfD0rv-M.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BB_d-qdY.js → ToolbarRootContext-BlMLA5Ez.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-DVVzYdc7.js → TrendMonitor-DnJCeEQS.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-DHVSyU0i.js → WidgetsPage-DsKnuAcr.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-BDi28nRt.js → WrappedPage-CXwtk-hY.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-Bnc5aBhq.js → __vite-browser-external-cuNuS_b-.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-BiGvZiLq.js → agent-logos-DxLnGJgJ.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-SvD82rok.js → arrow-up-right-Cj7u2wr7.js} +1 -1
- package/dashboard/dist/assets/{check-jL5XErEW.js → check-DNFOvbbk.js} +1 -1
- package/dashboard/dist/assets/{composite-DM6geXPA.js → composite-DQR0hWa5.js} +1 -1
- package/dashboard/dist/assets/{copy-Dy_GIzj2.js → copy-D0SHZEpt.js} +1 -1
- package/dashboard/dist/assets/{download-BW_FS7nX.js → download-UlivGLVm.js} +1 -1
- package/dashboard/dist/assets/{external-link-2RIovvCT.js → external-link-rdZCNL_v.js} +1 -1
- package/dashboard/dist/assets/{flame-CIRJIxxA.js → flame-qfy_Ty_R.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-CT8ahEK4.js → format-tokens-DU-AJn2b.js} +1 -1
- package/dashboard/dist/assets/{icons-7J1WD0C-.js → icons-CZ7P_cMG.js} +1 -1
- package/dashboard/dist/assets/{index-_vJl6sF7.js → index-CXnOAYdM.js} +1 -1
- package/dashboard/dist/assets/{index-D3iSSyYr.js → index-DDfiGiEo.js} +1 -1
- package/dashboard/dist/assets/{index-Ddb2A6Mx.js → index-DKnHC0bC.js} +1 -1
- package/dashboard/dist/assets/{info-BjVWcOOC.js → info-BY3dZuIN.js} +1 -1
- package/dashboard/dist/assets/{link-2-CyRWnHWE.js → link-2-CSTcMOFn.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-DUpG5zah.js → loader-circle-yIM6ih7L.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-BVGCRkFZ.js → maximize-2-C1P3TlYj.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-CZI7rED4.js → modifiers.esm-BoQpSulH.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-DfBtd01T.js → monitor-smartphone-DafIVSH1.js} +1 -1
- package/dashboard/dist/assets/{plus-CvbLCvjV.js → plus-B4l58vrs.js} +1 -1
- package/dashboard/dist/assets/{provider-display-DC46GLrv.js → provider-display-CN_xz_OA.js} +1 -1
- package/dashboard/dist/assets/{react-mYr3J8Vw.js → react-B9dzohvC.js} +1 -1
- package/dashboard/dist/assets/{search-CFaS1rSj.js → search-B8ejosPU.js} +1 -1
- package/dashboard/dist/assets/{skills-api-B1N6seFa.js → skills-api-BLC6ZUle.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-BE2GiQaC.js → sortable.esm-BLUZnPyk.js} +1 -1
- package/dashboard/dist/assets/{store-DwBbExah.js → store-3B91_nUE.js} +1 -1
- package/dashboard/dist/assets/{terminal-Bl2BuO9x.js → terminal-DccsqdRD.js} +1 -1
- package/dashboard/dist/assets/{trash-D8beb27Y.js → trash-DfkcSCtq.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-DJG1DsXR.js → use-community-stats-CuIZHVoQ.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-DYK8iyOM.js → use-latest-request-guard-B_oV9ZfF.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-BGmcFVX3.js → use-limits-display-prefs-CXj8GHMY.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-Cqia_VIq.js → use-ordered-list-dAFHiuLi.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-UMqqLkcq.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-Mj3OeVGZ.js → use-session-efficiency-pref-B9Q45jnR.js} +1 -1
- package/dashboard/dist/assets/{use-transform-D4BQIBHx.js → use-transform-CWR6dZvr.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-BFrO7Mtq.js → use-usage-limits-BmwSEzJh.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-CYJavR2h.js → useCurrency-BjHTP-xy.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-CKruI7SP.js → useTokenFormat-DMOiOFlN.js} +1 -1
- package/dashboard/dist/assets/{zap-a82fG76c.js → zap-v0h1PWbB.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +1 -1
- package/src/commands/serve.js +147 -17
- package/src/lib/local-api.js +6 -2
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/usage-limits.js +27 -1
- package/dashboard/dist/assets/DialogDescription-BhWwQSSg.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-CmCk9Sb5.js +0 -1
package/src/lib/usage-limits.js
CHANGED
|
@@ -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 }))
|
|
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};
|