tokentracker-cli 0.88.7 → 0.88.8
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/README.de.md +4 -4
- package/README.ja.md +3 -3
- package/README.ko.md +3 -3
- package/README.md +6 -5
- package/README.zh-CN.md +5 -4
- package/dashboard/dist/assets/{AchievementBadge-m7oaBLpH.js → AchievementBadge-CzfK_8kl.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-BHHh4VjM.js → AchievementsPage-PVft5lyI.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-CGLNe_1p.js → AchievementsSection-DyzHGzys.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-v1DGF6EM.js → BadgeDetailModal-CFsRpXG1.js} +1 -1
- package/dashboard/dist/assets/{Card-C16SqIR8.js → Card-Bi9dmQTP.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-Bj3ptLJv.js → ClawdAnimated-BxcZjV9b.js} +1 -1
- package/dashboard/dist/assets/{CommandPalette-BaegDLAM.js → CommandPalette-DHVK5yTu.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-CThxVFG0.js → CommunityStatsModal-BmMh7Avp.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-C0sP3Ktk.js → ConfirmModal-BjTQXMg4.js} +1 -1
- package/dashboard/dist/assets/{Controls-C8usK6RW.js → Controls-CZUbEggT.js} +1 -1
- package/dashboard/dist/assets/DashboardPage-C3x4Hew6.js +1 -0
- package/dashboard/dist/assets/{DevicePage-Cu4qqRcB.js → DevicePage-1qf6aiEH.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-DVo3jJb6.js → DialogClose-CRrlkVf0.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-tD0gEESM.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-C1UOMgTZ.js → DialogTitle-DhGyZ0Ue.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-CuQlQrvO.js → FadeIn-M8ECNbPG.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-BTt2612H.js → HeaderGithubStar-BKtQc1Si.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-CHdLolcf.js → HoverTooltip-Bo1zVtke.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-BFz8hr_3.js → IpCheckPage-B78HcgA1.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-CTyNSAYl.js → LandingPage-DSlanH3Y.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-CBdOXZWk.js → LeaderboardAvatar-Cs4IYwTC.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-DStx51Bj.js → LeaderboardPage-DXlo-PNE.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-CtxgJR07.js → LeaderboardProfileModal-CVM6FjLt.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-DrpsHTdZ.js → LeaderboardProfilePage-BO-MTMcH.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-m_itA-7d.js → LimitsPage-BohIYn9J.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-A62wFwYT.js → LocalOnlyNotice-BQ7eYwB8.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-DFJugNa-.js → LoginCard-DhOJyCcc.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-DF4BOwS6.js → LoginModal-Dfo2DSA9.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-BxFhfitr.js → LoginPage-CN-cXdsD.js} +1 -1
- package/dashboard/dist/assets/{PetPage-l4fkRsf1.js → PetPage-CQY2YUNm.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-y-OAHy4v.js → PopoverPopup-D0bYgqkq.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-DwoPHz27.js → ProviderIcon-BfiriW8d.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-CCDj94rl.js → ResetPasswordPage-CQyX1BF6.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-lEKPzZlV.js → SegmentedControl-DWhf_XGR.js} +1 -1
- package/dashboard/dist/assets/{Select-DoyUBoxn.js → Select-Dy6krqIZ.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-K8Vzn1Dd.js → SelectItemText-D1296h92.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-Cqyo7OtW.js → ServiceStatusPage-BgC3i1y-.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-BELC-8aJ.js → SessionsPage-Dyq0Q8tm.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-C6Og4tMS.js → SettingsPage-QCZksfny.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-BKKgpXc_.js → SkillsPage-BUWMr2_o.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-DoSCQSpY.js → TokenGalaxy-BHauFZfa.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-GoQP9LXi.js → ToolbarRootContext-1sViYfay.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-BHE1KkJ7.js → TrendMonitor-DM26Zn7d.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-CHBzNb19.js → WidgetsPage-DhjPczRN.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-CW_kqVoY.js → WrappedPage-BsEFzfrx.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-BgeLzJ0q.js → __vite-browser-external-BW4ueyBB.js} +6 -3
- package/dashboard/dist/assets/agent-logos-IRTgTlkV.js +1 -0
- package/dashboard/dist/assets/{arrow-up-right-5GGSSEKW.js → arrow-up-right-BapNuXPQ.js} +1 -1
- package/dashboard/dist/assets/{check-g6Fq4TSB.js → check-lpIv67Hh.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-DjPuavEP.js → chevron-right-jYAPg2OX.js} +1 -1
- package/dashboard/dist/assets/{copy-BAMl60zT.js → copy-CEdsXYF2.js} +1 -1
- package/dashboard/dist/assets/{download-BQPhL4h5.js → download-CGJA0mZj.js} +1 -1
- package/dashboard/dist/assets/{external-link-CU3XKMbZ.js → external-link-DTmmieCB.js} +1 -1
- package/dashboard/dist/assets/{flame-B85YY_rB.js → flame-C-orSEmd.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-DDxlnhNV.js → format-tokens-BQuK3UBV.js} +1 -1
- package/dashboard/dist/assets/{icons-D1e1TWTe.js → icons-DuVOMXCd.js} +1 -1
- package/dashboard/dist/assets/{index-CWMkVmon.js → index-5hluBV6Y.js} +1 -1
- package/dashboard/dist/assets/{index-BZ2hkHKk.js → index-CKG-dDk-.js} +1 -1
- package/dashboard/dist/assets/{index-sQl-P7u5.js → index-DvLGX2GN.js} +1 -1
- package/dashboard/dist/assets/{info-DlSYpCFm.js → info-EKHZ3tlo.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-DS5EIbJK.js → limits-providers-DgnwvabV.js} +1 -1
- package/dashboard/dist/assets/{link-2-DbEVoNk-.js → link-2-A2f7492I.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-CqmzGIX-.js → loader-circle-DiBM_0cy.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-Ce8X8kHQ.js → maximize-2-CmJrrSbJ.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-BQNRpVcA.js → modifiers.esm-v5P5znue.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-8drugZmh.js → monitor-smartphone-jmB0EaLx.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BayTojFu.js → provider-display-BJXN_8Ft.js} +2 -2
- package/dashboard/dist/assets/{react-BfgySeLu.js → react-DRhZt4b6.js} +1 -1
- package/dashboard/dist/assets/{search-BkGUxlXI.js → search-D9j_51N0.js} +1 -1
- package/dashboard/dist/assets/{skills-api-D80JxFc1.js → skills-api-Dywy4E7M.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-SjRQ4Ehw.js → sortable.esm-BYYlH2M3.js} +1 -1
- package/dashboard/dist/assets/{store-B3WkWBgn.js → store-Dt6GNo2E.js} +1 -1
- package/dashboard/dist/assets/{terminal-CIvEvMau.js → terminal-BfWjr1gW.js} +1 -1
- package/dashboard/dist/assets/{trash-2-BZclE0mU.js → trash-2-Ceal5Y6z.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-ChaFzJoW.js → use-community-stats-2G4i1ZwJ.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-2LALdqvT.js → use-limits-display-prefs--qpfQM72.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-10Nmxw1I.js → use-ordered-list-BRg8W35v.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-BDYfqZDy.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-CqPK4jX1.js → use-session-efficiency-pref-DHwJtj_8.js} +1 -1
- package/dashboard/dist/assets/{use-transform-s6og1tg9.js → use-transform-DaIhV0Zy.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-jyRJ_kl9.js → use-usage-limits-COggDJdz.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-hZfdhfqK.js → useCurrency-0g-kQuZf.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-DFF4vpw2.js → useScrollLock-CMMjcyJf.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-DaVdoRvh.js → useTokenFormat-BuVZXkVC.js} +1 -1
- package/dashboard/dist/assets/{zap-B1XMdyCV.js → zap-BhYCdFZP.js} +1 -1
- package/dashboard/dist/brand-logos/reasonix.png +0 -0
- package/dashboard/dist/index.html +9 -9
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/llms.txt +3 -2
- package/dashboard/dist/share.html +1 -1
- package/package.json +2 -2
- package/src/commands/init.js +10 -0
- package/src/commands/status.js +27 -5
- package/src/commands/sync.js +177 -5
- package/src/lib/install-resolver.js +35 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +768 -0
- package/src/lib/subscriptions.js +1 -0
- package/src/lib/usage-limits.js +17 -2
- package/dashboard/dist/assets/DashboardPage-DbzbT_cY.js +0 -1
- package/dashboard/dist/assets/DialogDescription-zf3KGPP3.js +0 -1
- package/dashboard/dist/assets/agent-logos-BWeWRlms.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-J12KnTgP.js +0 -1
package/src/lib/subscriptions.js
CHANGED
package/src/lib/usage-limits.js
CHANGED
|
@@ -9,6 +9,7 @@ const { performance } = require("node:perf_hooks");
|
|
|
9
9
|
const { promisify } = require("node:util");
|
|
10
10
|
|
|
11
11
|
const {
|
|
12
|
+
detectClaudeCodeCredentialsPresence,
|
|
12
13
|
detectClaudeCodeSubscriptionDetails,
|
|
13
14
|
readClaudeCodeAccessToken,
|
|
14
15
|
readCodexAccessToken,
|
|
@@ -188,6 +189,10 @@ function extractClaudeScopedWeekly(body) {
|
|
|
188
189
|
return out.length > 0 ? out : null;
|
|
189
190
|
}
|
|
190
191
|
|
|
192
|
+
// Shared by the 401 path below and by the blank-credential path in getUsageLimits:
|
|
193
|
+
// both mean "the CLI login no longer works", and both are fixed the same way.
|
|
194
|
+
const CLAUDE_AUTH_EXPIRED_MESSAGE = "Claude token expired — run `claude` once to refresh.";
|
|
195
|
+
|
|
191
196
|
async function fetchClaudeUsageLimits(accessToken, { fetchImpl = fetch, maxAttempts = 3 } = {}) {
|
|
192
197
|
const url = "https://api.anthropic.com/api/oauth/usage";
|
|
193
198
|
const headers = {
|
|
@@ -198,7 +203,7 @@ async function fetchClaudeUsageLimits(accessToken, { fetchImpl = fetch, maxAttem
|
|
|
198
203
|
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
199
204
|
const res = await fetchImpl(url, { method: "GET", headers });
|
|
200
205
|
if (res.status === 401) {
|
|
201
|
-
const err = new Error(
|
|
206
|
+
const err = new Error(CLAUDE_AUTH_EXPIRED_MESSAGE);
|
|
202
207
|
err.code = "AUTH_EXPIRED";
|
|
203
208
|
throw err;
|
|
204
209
|
}
|
|
@@ -3243,7 +3248,17 @@ async function fetchUsageLimitsUncached({
|
|
|
3243
3248
|
|
|
3244
3249
|
let claude;
|
|
3245
3250
|
if (!claudeToken) {
|
|
3246
|
-
|
|
3251
|
+
// Claude Code blanks `accessToken`/`refreshToken` in place when its login expires
|
|
3252
|
+
// (macOS Keychain item and .credentials.json alike) instead of removing the entry,
|
|
3253
|
+
// so "no token" is ambiguous: never signed in, or signed in and expired. An entry
|
|
3254
|
+
// that still exists means the latter — reporting `configured: false` there hides the
|
|
3255
|
+
// whole Claude section while the usage bars (parsed from local logs, no auth needed)
|
|
3256
|
+
// keep updating, which reads as "TokenTracker doesn't support my plan" rather than
|
|
3257
|
+
// "your CLI login expired". Existence-only probe: no secret is read here.
|
|
3258
|
+
const credentialsPresent = detectClaudeCodeCredentialsPresence({ platform, securityRunner, home });
|
|
3259
|
+
claude = credentialsPresent
|
|
3260
|
+
? { configured: true, error: CLAUDE_AUTH_EXPIRED_MESSAGE, auth_action_required: "reauth" }
|
|
3261
|
+
: { configured: false };
|
|
3247
3262
|
} else if (freshClaudeCache) {
|
|
3248
3263
|
claude = freshClaudeCache;
|
|
3249
3264
|
} else if (claudeResult && claudeResult.status === "fulfilled") {
|