tokentracker-cli 0.93.6 → 0.94.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.
- package/README.de.md +1 -1
- package/README.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dashboard/dist/assets/{AchievementBadge-DsAclDw6.js → AchievementBadge-DPqwk2zI.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-D__EwC45.js → AchievementsPage-CELHoMQt.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-BAZNM3Cn.js → AchievementsSection-DdAC0VCb.js} +1 -1
- package/dashboard/dist/assets/BadgeDetailModal-Dd4I1SpM.js +1 -0
- package/dashboard/dist/assets/{BotAnimated-CwrScgrI.js → BotAnimated-DL2-4mnm.js} +1 -1
- package/dashboard/dist/assets/{Card-D7GmLoqP.js → Card-B_MpSRse.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-BEXgb5J_.js → ClawdAnimated-BLZZ4rG6.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-B9Mn3Qt2.js → CommandPalette-B-vfdIbH.js} +1 -1
- package/dashboard/dist/assets/CommunityStatsModal-aAico565.js +1 -0
- package/dashboard/dist/assets/ConfirmModal-DLnRwUXC.js +1 -0
- package/dashboard/dist/assets/{Controls-DxnaHBzv.js → Controls-FZ8wEN5w.js} +1 -1
- package/dashboard/dist/assets/DashboardPage-BByRBsbt.js +1 -0
- package/dashboard/dist/assets/{DevicePage-4yTYf29M.js → DevicePage-D2IzPc5o.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-BbderFCY.js → DialogClose-BaqQaUUk.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-BUrh0Jod.js +1 -0
- package/dashboard/dist/assets/DialogTitle-DrbKjtuS.js +1 -0
- package/dashboard/dist/assets/{FadeIn-BFLojPGG.js → FadeIn-GddKDE8i.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-CPBNn61n.js → HeaderGithubStar-DUu-Z5mE.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-DbxnLj8e.js → HoverTooltip-BmDkY35A.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-CfPtXAAF.js → IpCheckPage-CGJyqWk2.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-CocswfFj.js → LandingPage-Bd91ALUj.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-iZLxxZX-.js → LeaderboardAvatar-BGGUwXFd.js} +1 -1
- package/dashboard/dist/assets/LeaderboardPage-BMEqHwif.js +2 -0
- package/dashboard/dist/assets/{LeaderboardProfileModal-BWu8jbBW.js → LeaderboardProfileModal-BSweJqm2.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-B77gOTzr.js → LeaderboardProfilePage-CRrI3RFz.js} +1 -1
- package/dashboard/dist/assets/LimitsPage-XIRDv46K.js +5 -0
- package/dashboard/dist/assets/LocalOnlyNotice-CCD-lGWG.js +1 -0
- package/dashboard/dist/assets/{LoginCard-D592L-fh.js → LoginCard-lDuqSv4f.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-C7Qm7CVf.js → LoginModal-DStt5VXN.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-DkYw5ZQK.js → LoginPage-dmVPSL72.js} +1 -1
- package/dashboard/dist/assets/PetPage-ybcZRctF.js +1 -0
- package/dashboard/dist/assets/PopoverPopup-Dar_UjxF.js +1 -0
- package/dashboard/dist/assets/{ProviderIcon-d0_vhIkS.js → ProviderIcon-Ct9tILpz.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-UDNlpFVu.js → ResetPasswordPage-B4yLh5zx.js} +1 -1
- package/dashboard/dist/assets/SegmentedControl-BOE1CEzq.js +1 -0
- package/dashboard/dist/assets/{Select-Z2xTQ55f.js → Select-D-bSh7Zz.js} +1 -1
- package/dashboard/dist/assets/SelectItemText-DMYjXXq4.js +1 -0
- package/dashboard/dist/assets/{ServiceStatusPage-Cfr-QDZ7.js → ServiceStatusPage-CaleS-6_.js} +1 -1
- package/dashboard/dist/assets/SessionsPage-DOaY6_E9.js +2 -0
- package/dashboard/dist/assets/SettingsPage-iJH0Yyah.js +2 -0
- package/dashboard/dist/assets/SkillsPage-BkzJOBLk.js +1 -0
- package/dashboard/dist/assets/{TokenGalaxy-CjAY6rey.js → TokenGalaxy-CuXKoMPg.js} +1 -1
- package/dashboard/dist/assets/ToolbarRootContext-Dx5GB7F5.js +1 -0
- package/dashboard/dist/assets/{TrendMonitor-DAAlILwJ.js → TrendMonitor-BuKmsznP.js} +1 -1
- package/dashboard/dist/assets/WidgetsPage-DUaIyGtu.js +1 -0
- package/dashboard/dist/assets/{WrappedPage-ByYzOeZ-.js → WrappedPage-BzqlcAUC.js} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-BHz2N7Ih.css +1 -0
- package/dashboard/dist/assets/{__vite-browser-external-HdCplPKs.js → __vite-browser-external-CVIGknXl.js} +3 -3
- package/dashboard/dist/assets/{agent-logos-BW-ajJ7p.js → agent-logos-BdWWxza6.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-CA5IJkqo.js → arrow-up-right-CANSzmm-.js} +1 -1
- package/dashboard/dist/assets/{check-BBjF3bSm.js → check-BnJpzXRZ.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-DCvGp9iJ.js → chevron-right-DJm0mbG0.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-BUVUIPTX.js → composite-Ccj6KQmh.js} +1 -1
- package/dashboard/dist/assets/{copy-ahF8LGeu.js → copy-C2Yc8Evu.js} +1 -1
- package/dashboard/dist/assets/{download-DBm8dmvt.js → download-B52JTk6Y.js} +1 -1
- package/dashboard/dist/assets/{external-link-C1sJSL7J.js → external-link-DayTwZx-.js} +1 -1
- package/dashboard/dist/assets/{flame-B6xukEYd.js → flame-B8GEX2yT.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-6TqXlT3q.js → format-tokens-mhkbohkb.js} +1 -1
- package/dashboard/dist/assets/{icons-pGe_pInY.js → icons-o8bPXqRP.js} +1 -1
- package/dashboard/dist/assets/{index-I9O8xChC.js → index-Bp0ZHDtz.js} +1 -1
- package/dashboard/dist/assets/{index-Chb8mb2X.js → index-CK_CduLm.js} +1 -1
- package/dashboard/dist/assets/{index-RPV0zdZ9.js → index-MBVWUKpA.js} +1 -1
- package/dashboard/dist/assets/{info-DBfJv0yu.js → info-D94QM_vX.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-DPQsdVq5.js → limits-providers-BLzMyCiy.js} +1 -1
- package/dashboard/dist/assets/{link-2-DNEARrPY.js → link-2-CqBmFaDI.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-BCFHUr8X.js → loader-circle-SaxUpDR6.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-1EmlA2R-.js → maximize-2-BoXqARks.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-DGXFSuEq.js → modifiers.esm-Conh_-BD.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-DsPPhvsT.js → monitor-smartphone-D6qLR9qd.js} +1 -1
- package/dashboard/dist/assets/plus-D51mjIc2.js +1 -0
- package/dashboard/dist/assets/{provider-display-C20LtBC5.js → provider-display-DpHPjd_s.js} +1 -1
- package/dashboard/dist/assets/{react-B4FPJgs_.js → react-D_AcI466.js} +1 -1
- package/dashboard/dist/assets/{search-mkIFPKzW.js → search-CwLcNdvZ.js} +1 -1
- package/dashboard/dist/assets/{skills-api-D24vlu2H.js → skills-api-Dqi7Mjgo.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-BNDcP0sW.js → sortable.esm-BPDlUxPb.js} +1 -1
- package/dashboard/dist/assets/store-ikeRIRGd.js +1 -0
- package/dashboard/dist/assets/{terminal-BxVMmvEx.js → terminal-BfeX3L5T.js} +1 -1
- package/dashboard/dist/assets/{trash-2-crt9lDvj.js → trash-2-5_Qlp1k7.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-CTB_uHWV.js → use-community-stats-D90Fy2_j.js} +1 -1
- package/dashboard/dist/assets/use-limits-display-prefs-D4BYFaa-.js +1 -0
- package/dashboard/dist/assets/{use-ordered-list-BVNb5QWU.js → use-ordered-list-DJxLNdXY.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-yE3T3cat.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-Di8nY6Lr.js → use-session-efficiency-pref-CAX_GqXc.js} +1 -1
- package/dashboard/dist/assets/{use-transform-Dx9C2nBC.js → use-transform-CeW6Z5R0.js} +1 -1
- package/dashboard/dist/assets/use-usage-limits-5HP8k9a3.js +1 -0
- package/dashboard/dist/assets/{useCurrency-7dkDciam.js → useCurrency-BarGeFyK.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-DFSIAsAb.js → useTokenFormat-DUJ9iT9H.js} +1 -1
- package/dashboard/dist/assets/{zap-Png-VJSP.js → zap--m0IWoI3.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist/ip-check.html +2 -2
- package/dashboard/dist/leaderboard.html +2 -2
- package/dashboard/dist/share.html +2 -2
- package/package.json +1 -1
- package/src/commands/status.js +3 -1
- package/src/commands/sync.js +8 -3
- package/src/lib/codex-rollout-parser.js +35 -4
- package/src/lib/cursor-config.js +182 -1
- package/src/lib/fs.js +12 -3
- package/src/lib/local-api.js +57 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +758 -195
- package/src/lib/session-analytics.js +205 -10
- package/src/lib/subscription-manager.js +293 -0
- package/src/lib/telemetry.js +2 -2
- package/src/lib/usage-limits.js +55 -14
- package/dashboard/dist/assets/BadgeDetailModal-Dgeer5oB.js +0 -1
- package/dashboard/dist/assets/CommunityStatsModal-eJ_a1FMd.js +0 -1
- package/dashboard/dist/assets/ConfirmModal-CumOr2J1.js +0 -1
- package/dashboard/dist/assets/DashboardPage-BpRRXCRr.js +0 -1
- package/dashboard/dist/assets/DialogDescription-C5Ujj254.js +0 -1
- package/dashboard/dist/assets/DialogTitle-6epeLIn0.js +0 -1
- package/dashboard/dist/assets/LeaderboardPage-yqauB4Q1.js +0 -2
- package/dashboard/dist/assets/LimitsPage-C9NeIcft.js +0 -5
- package/dashboard/dist/assets/LocalOnlyNotice-HPXWU8TT.js +0 -1
- package/dashboard/dist/assets/PetPage-BOhvAJp4.js +0 -1
- package/dashboard/dist/assets/PopoverPopup-BK9aqQn1.js +0 -1
- package/dashboard/dist/assets/SegmentedControl-DE5m1pTf.js +0 -1
- package/dashboard/dist/assets/SelectItemText-Daq-XRZg.js +0 -1
- package/dashboard/dist/assets/SessionsPage-nHPj6IAt.js +0 -2
- package/dashboard/dist/assets/SettingsPage-NvxUG_9m.js +0 -2
- package/dashboard/dist/assets/SkillsPage-zFbZa42f.js +0 -1
- package/dashboard/dist/assets/ToolbarRootContext-DnC8LT_8.js +0 -1
- package/dashboard/dist/assets/WidgetsPage-CXsfi-mq.js +0 -1
- package/dashboard/dist/assets/__vite-browser-external-CiR9-j4L.css +0 -1
- package/dashboard/dist/assets/store-B2nqaAqP.js +0 -1
- package/dashboard/dist/assets/use-limits-display-prefs-DXXZpjGY.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-aSaQtoJu.js +0 -1
- package/dashboard/dist/assets/use-usage-limits-D9vQFB1H.js +0 -1
package/src/lib/local-api.js
CHANGED
|
@@ -2880,6 +2880,63 @@ function createLocalApiHandler({ queuePath }) {
|
|
|
2880
2880
|
return true;
|
|
2881
2881
|
}
|
|
2882
2882
|
|
|
2883
|
+
// --- subscription manager (manual billing plans, issue #460) ---
|
|
2884
|
+
// User-entered renewal/expiry dates. Local-only store that lives next to
|
|
2885
|
+
// queue.jsonl; distinct from usage-limits window resets and the
|
|
2886
|
+
// auto-detected subscriptions in subscriptions.js.
|
|
2887
|
+
if (p === "/functions/tokentracker-subscription-manager") {
|
|
2888
|
+
const method = String(req.method || "GET").toUpperCase();
|
|
2889
|
+
const manager = require("./subscription-manager");
|
|
2890
|
+
const trackerDir = path.dirname(qp);
|
|
2891
|
+
try {
|
|
2892
|
+
if (method === "GET") {
|
|
2893
|
+
json(res, { subscriptions: await manager.listSubscriptions({ trackerDir }) });
|
|
2894
|
+
return true;
|
|
2895
|
+
}
|
|
2896
|
+
if (method === "POST") {
|
|
2897
|
+
if (!isAuthorizedLocalMutation(req)) {
|
|
2898
|
+
json(res, { ok: false, error: "Unauthorized" }, 401);
|
|
2899
|
+
return true;
|
|
2900
|
+
}
|
|
2901
|
+
const body = await readJsonBody(req);
|
|
2902
|
+
if (body?.action === "create") {
|
|
2903
|
+
json(res, {
|
|
2904
|
+
ok: true,
|
|
2905
|
+
subscription: await manager.createSubscription({
|
|
2906
|
+
trackerDir,
|
|
2907
|
+
fields: body.subscription || body,
|
|
2908
|
+
}),
|
|
2909
|
+
});
|
|
2910
|
+
return true;
|
|
2911
|
+
}
|
|
2912
|
+
if (body?.action === "update") {
|
|
2913
|
+
json(res, {
|
|
2914
|
+
ok: true,
|
|
2915
|
+
subscription: await manager.updateSubscription({
|
|
2916
|
+
trackerDir,
|
|
2917
|
+
id: body.id,
|
|
2918
|
+
fields: body.subscription || body,
|
|
2919
|
+
}),
|
|
2920
|
+
});
|
|
2921
|
+
return true;
|
|
2922
|
+
}
|
|
2923
|
+
if (body?.action === "delete") {
|
|
2924
|
+
json(res, {
|
|
2925
|
+
ok: true,
|
|
2926
|
+
...(await manager.deleteSubscription({ trackerDir, id: body.id })),
|
|
2927
|
+
});
|
|
2928
|
+
return true;
|
|
2929
|
+
}
|
|
2930
|
+
json(res, { ok: false, error: "Unknown subscription-manager action" }, 400);
|
|
2931
|
+
return true;
|
|
2932
|
+
}
|
|
2933
|
+
json(res, { ok: false, error: "Method Not Allowed" }, 405);
|
|
2934
|
+
} catch (error) {
|
|
2935
|
+
json(res, { ok: false, error: error?.message || "Subscription operation failed" }, 400);
|
|
2936
|
+
}
|
|
2937
|
+
return true;
|
|
2938
|
+
}
|
|
2939
|
+
|
|
2883
2940
|
// --- skills manager ---
|
|
2884
2941
|
if (p === "/functions/tokentracker-skills") {
|
|
2885
2942
|
const method = String(req.method || "GET").toUpperCase();
|