tokentracker-cli 0.72.1 → 0.74.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 +5 -4
- package/README.ja.md +5 -4
- package/README.ko.md +5 -4
- package/README.md +5 -4
- package/README.zh-CN.md +5 -4
- package/dashboard/dist/assets/{ActivityHeatmap-CtDL5OPO.js → ActivityHeatmap-DkoSqxrd.js} +1 -1
- package/dashboard/dist/assets/{Card-C5lKqKNT.js → Card-DleS-r54.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-XnEef7Ra.js → CommunityStatsModal-DV41-F9D.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-CkZvn-sV.js → ConfirmModal-Dgp07Uka.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-TmZBLaB9.js → DashboardPage-EKy2BzUx.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-BhDh3VIP.js → DevicePage-eJInQ2UX.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-CddI1gcT.js → DialogClose-DEfesqFq.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-D6txiEc4.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-Cvpx9Lfv.js → DialogTitle-v1JrTvr4.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-BojLJcFD.js → FadeIn-hqIBbKaJ.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-BrSt1RIj.js → HeaderGithubStar-C4zauuP2.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-DxuF-1tF.js → IpCheckPage-CiRcccks.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-DmCjJVwh.js → LandingPage-CbOHycnd.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardAvatar-B8SGUidW.js → LeaderboardAvatar-CQL1iOTS.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-D7CQCdDr.js → LeaderboardPage-BuEp247d.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-Dv7CQVqB.js → LeaderboardProfileModal-DT8hrPkI.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfilePage-BtGLbQnT.js → LeaderboardProfilePage-B-M0AXMb.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-DRf6h5_2.js → LimitsPage-Df2es3Xs.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-BnlODmxA.js → LocalOnlyNotice-DJIfKTKo.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-CYXdV0X0.js → LoginPage-DtaaIy_8.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-x5vYN3uF.js → PopoverPopup-CqWH6aB9.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-D8ifLVwK.js → ResetPasswordPage-DCH5GU1c.js} +1 -1
- package/dashboard/dist/assets/{Select-CaaIuo5M.js → Select-BwyliVKJ.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-CdJ-E-d1.js → SelectItemText-B5_DKKEv.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-Dc7v5PEC.js → SettingsPage-BoAFdOUa.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-CRbEMatQ.js → SkillsPage-BVdre-kF.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-xgy8mLMV.js → WidgetsPage-CtjV405P.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-BdpfOWJu.js → WrappedPage-DGmPdtHt.js} +1 -1
- package/dashboard/dist/assets/{agent-logos-CrxAAMko.js → agent-logos-DqevdWvx.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-D23bZC75.js → arrow-up-right-DA5Pybq1.js} +1 -1
- package/dashboard/dist/assets/check-BWzAT1oX.js +1 -0
- package/dashboard/dist/assets/{copy-hiVk9JEl.js → copy-CsQRTd89.js} +1 -1
- package/dashboard/dist/assets/{download-CqLiBDG-.js → download-TEHkAKT0.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-Ck5lRlFd.js → format-tokens-CtFO_jkz.js} +1 -1
- package/dashboard/dist/assets/{info-CxDHBJXB.js → info-Dxn3fiaX.js} +1 -1
- package/dashboard/dist/assets/main-Dxi4sSXf.js +1128 -0
- package/dashboard/dist/assets/{use-community-stats-CeaLHlCk.js → use-community-stats-BLNxr-bQ.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-CvDWYfjp.js → use-limits-display-prefs-CC7gb303.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-HuxDwmn6.js → use-native-settings-SYtjLlxZ.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-KIV2M5tf.js → use-ordered-list-_O8onJV7.js} +1 -1
- package/dashboard/dist/assets/{use-quality-per-dollar-pref-BbsMhRJt.js → use-quality-per-dollar-pref-tuspH_6n.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-COBOepfU.js → use-usage-limits-whCVzQbf.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-DbBq0Fal.js → useCurrency-BiDjYxfm.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-C4eBSnib.js → useScrollLock-DK-ndHcw.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +1 -1
- package/src/commands/status.js +47 -4
- package/src/commands/sync.js +72 -18
- package/src/lib/local-api.js +24 -2
- package/src/lib/pricing/curated-overrides.json +7 -2
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +385 -0
- package/src/lib/sqlite-reader.js +24 -6
- package/src/lib/usage-limits.js +200 -29
- package/src/lib/zcode-limits.js +375 -40
- package/dashboard/dist/assets/DialogDescription-DeEet5bz.js +0 -1
- package/dashboard/dist/assets/check-fkZxgcVQ.js +0 -1
- package/dashboard/dist/assets/main-B0LYKUIY.js +0 -1127
package/src/lib/local-api.js
CHANGED
|
@@ -528,6 +528,8 @@ function readJsonBody(req) {
|
|
|
528
528
|
function runSyncCommand(extraEnv = {}, opts = {}) {
|
|
529
529
|
return new Promise((resolve, reject) => {
|
|
530
530
|
const args = [TRACKER_BIN, "sync"];
|
|
531
|
+
if (opts.auto === true) args.push("--auto");
|
|
532
|
+
if (opts.background === true) args.push("--background");
|
|
531
533
|
if (opts.drain === true) args.push("--drain");
|
|
532
534
|
const child = spawn(process.execPath, args, {
|
|
533
535
|
env: { ...process.env, ...extraEnv },
|
|
@@ -1489,6 +1491,9 @@ function createLocalApiHandler({ queuePath }) {
|
|
|
1489
1491
|
}
|
|
1490
1492
|
const extraEnv = {};
|
|
1491
1493
|
const drain = body.drain === true;
|
|
1494
|
+
const auto = body.auto === true && !drain;
|
|
1495
|
+
const background =
|
|
1496
|
+
auto && (body.background === true || body.lightweight === true);
|
|
1492
1497
|
if (typeof body.deviceToken === "string" && body.deviceToken.trim()) {
|
|
1493
1498
|
extraEnv.TOKENTRACKER_DEVICE_TOKEN = body.deviceToken.trim();
|
|
1494
1499
|
}
|
|
@@ -1502,7 +1507,7 @@ function createLocalApiHandler({ queuePath }) {
|
|
|
1502
1507
|
extraEnv.TOKENTRACKER_INSFORGE_BASE_URL = allowedBaseUrl;
|
|
1503
1508
|
localSyncBaseUrl = allowedBaseUrl;
|
|
1504
1509
|
}
|
|
1505
|
-
if (!extraEnv.TOKENTRACKER_DEVICE_TOKEN && getCloudSyncPref() && getRefreshTokenForCloud()) {
|
|
1510
|
+
if (!background && !extraEnv.TOKENTRACKER_DEVICE_TOKEN && getCloudSyncPref() && getRefreshTokenForCloud()) {
|
|
1506
1511
|
let issuedToken = null;
|
|
1507
1512
|
try {
|
|
1508
1513
|
issuedToken = await issueDeviceTokenForLocalSync(qp, { baseUrl: localSyncBaseUrl });
|
|
@@ -1520,7 +1525,7 @@ function createLocalApiHandler({ queuePath }) {
|
|
|
1520
1525
|
extraEnv.TOKENTRACKER_DEVICE_TOKEN = issuedToken;
|
|
1521
1526
|
}
|
|
1522
1527
|
}
|
|
1523
|
-
const result = await runSyncCommand(extraEnv, { drain });
|
|
1528
|
+
const result = await runSyncCommand(extraEnv, { drain, auto, background });
|
|
1524
1529
|
try {
|
|
1525
1530
|
const { resetUsageLimitsCache } = require("./usage-limits");
|
|
1526
1531
|
resetUsageLimitsCache();
|
|
@@ -1969,6 +1974,23 @@ function createLocalApiHandler({ queuePath }) {
|
|
|
1969
1974
|
return true;
|
|
1970
1975
|
}
|
|
1971
1976
|
|
|
1977
|
+
// --- telemetry preference (anonymous analytics opt-out mirror) ---
|
|
1978
|
+
// The dashboard's analytics init on localhost / native-app surfaces asks
|
|
1979
|
+
// this before sending anything, so TOKENTRACKER_NO_TELEMETRY /
|
|
1980
|
+
// DO_NOT_TRACK / config.json `"telemetry": false` turn off dashboard
|
|
1981
|
+
// analytics together with the daily heartbeat (src/lib/telemetry.js).
|
|
1982
|
+
if (p === "/functions/tokentracker-telemetry-pref") {
|
|
1983
|
+
const { isTelemetryDisabled } = require("./telemetry");
|
|
1984
|
+
let config = {};
|
|
1985
|
+
try {
|
|
1986
|
+
config = JSON.parse(fs.readFileSync(path.join(path.dirname(qp), "config.json"), "utf8")) || {};
|
|
1987
|
+
} catch {
|
|
1988
|
+
config = {};
|
|
1989
|
+
}
|
|
1990
|
+
json(res, { disabled: isTelemetryDisabled({ env: process.env, config }) });
|
|
1991
|
+
return true;
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1972
1994
|
// --- machine-id (stable per-machine device identity for cloud sync) ---
|
|
1973
1995
|
// The dashboard reads this before issuing a cloud device token so the
|
|
1974
1996
|
// device_name keys on the MACHINE, not the browser — see
|
|
@@ -56,7 +56,9 @@
|
|
|
56
56
|
"MiniMax-M2.1": { "input": 0.5, "output": 3, "cache_read": 0.05 },
|
|
57
57
|
"antigravity-gpt-oss-120b": { "input": 2.5, "output": 10, "cache_read": 0, "note": "Antigravity bridge alias. Approximate with GPT-4o-class pricing until Google exposes route-specific billing metadata." },
|
|
58
58
|
"sakana/fugu-ultra": { "input": 5, "output": 30, "cache_read": 0.5, "cache_write": 5, "note": "Sakana Fugu Ultra — multi-agent orchestration via an OpenAI-compatible API (sakana.ai PAYG + OpenRouter), used through Codex/Cursor/Cline/ZCode etc. OpenRouter rates: $5/$30 per MTok in/out, cache_read $0.5/M; no published cache-write surcharge, so cache_write = input. Subscriptions ($20/$100/$200) bill against this token-equivalent rate." },
|
|
59
|
-
"longcat-2.0": { "input": 0.278, "output": 1.111, "cache_read": 0.00556, "cache_write": 0.278, "note": "Meituan LongCat-2.0, seen via ZCode custom-provider routing (issue #276). Official longcat.chat/platform launch-promo rate: RMB 2 / 0.04 (cache hit) / 8 per MTok in/read/out, converted at ~7.2 RMB/USD. Standard list price is RMB 5/0.10/20 (2.5x) once the promo ends — re-verify against longcat.chat/platform/docs/zh/Pricing/LongCat-2.0.html before assuming either is permanent. DeepSeek-style cache: no write surcharge, so cache_write = input." }
|
|
59
|
+
"longcat-2.0": { "input": 0.278, "output": 1.111, "cache_read": 0.00556, "cache_write": 0.278, "note": "Meituan LongCat-2.0, seen via ZCode custom-provider routing (issue #276). Official longcat.chat/platform launch-promo rate: RMB 2 / 0.04 (cache hit) / 8 per MTok in/read/out, converted at ~7.2 RMB/USD. Standard list price is RMB 5/0.10/20 (2.5x) once the promo ends — re-verify against longcat.chat/platform/docs/zh/Pricing/LongCat-2.0.html before assuming either is permanent. DeepSeek-style cache: no write surcharge, so cache_write = input." },
|
|
60
|
+
"step-3.7-flash": { "input": 0.2, "output": 1.15, "cache_read": 0.04, "cache_write": 0.2, "note": "StepFun Step 3.7 Flash (issue #283). Official platform.stepfun.ai pricing: $0.20 / $0.04 (cache hit) / $1.15 per MTok in/read/out. No published cache-write surcharge, so cache_write = input." },
|
|
61
|
+
"step-3.5-flash": { "input": 0.1, "output": 0.3, "cache_read": 0.02, "cache_write": 0.1, "note": "StepFun Step 3.5 Flash incl. dated snapshots like step-3.5-flash-2603 (issue #283). Official platform.stepfun.ai pricing: $0.10 / $0.02 (cache hit) / $0.30 per MTok in/read/out. No published cache-write surcharge, so cache_write = input." }
|
|
60
62
|
},
|
|
61
63
|
"alias": {
|
|
62
64
|
"auto": "composer-1"
|
|
@@ -88,6 +90,9 @@
|
|
|
88
90
|
{ "match": "glm-5.1", "ref": "glm-5.1" },
|
|
89
91
|
{ "match": "glm-5", "ref": "glm-5" },
|
|
90
92
|
{ "match": "fugu", "ref": "sakana/fugu-ultra" },
|
|
91
|
-
{ "match": "longcat", "ref": "longcat-2.0" }
|
|
93
|
+
{ "match": "longcat", "ref": "longcat-2.0" },
|
|
94
|
+
{ "match": "step-3.7-flash", "ref": "step-3.7-flash" },
|
|
95
|
+
{ "match": "step-3.5-flash", "ref": "step-3.5-flash" },
|
|
96
|
+
{ "match": "stepfun", "ref": "step-3.7-flash" }
|
|
92
97
|
]
|
|
93
98
|
}
|