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.
Files changed (64) hide show
  1. package/README.de.md +5 -4
  2. package/README.ja.md +5 -4
  3. package/README.ko.md +5 -4
  4. package/README.md +5 -4
  5. package/README.zh-CN.md +5 -4
  6. package/dashboard/dist/assets/{ActivityHeatmap-CtDL5OPO.js → ActivityHeatmap-DkoSqxrd.js} +1 -1
  7. package/dashboard/dist/assets/{Card-C5lKqKNT.js → Card-DleS-r54.js} +1 -1
  8. package/dashboard/dist/assets/{CommunityStatsModal-XnEef7Ra.js → CommunityStatsModal-DV41-F9D.js} +1 -1
  9. package/dashboard/dist/assets/{ConfirmModal-CkZvn-sV.js → ConfirmModal-Dgp07Uka.js} +1 -1
  10. package/dashboard/dist/assets/{DashboardPage-TmZBLaB9.js → DashboardPage-EKy2BzUx.js} +1 -1
  11. package/dashboard/dist/assets/{DevicePage-BhDh3VIP.js → DevicePage-eJInQ2UX.js} +1 -1
  12. package/dashboard/dist/assets/{DialogClose-CddI1gcT.js → DialogClose-DEfesqFq.js} +1 -1
  13. package/dashboard/dist/assets/DialogDescription-D6txiEc4.js +1 -0
  14. package/dashboard/dist/assets/{DialogTitle-Cvpx9Lfv.js → DialogTitle-v1JrTvr4.js} +1 -1
  15. package/dashboard/dist/assets/{FadeIn-BojLJcFD.js → FadeIn-hqIBbKaJ.js} +1 -1
  16. package/dashboard/dist/assets/{HeaderGithubStar-BrSt1RIj.js → HeaderGithubStar-C4zauuP2.js} +1 -1
  17. package/dashboard/dist/assets/{IpCheckPage-DxuF-1tF.js → IpCheckPage-CiRcccks.js} +1 -1
  18. package/dashboard/dist/assets/{LandingPage-DmCjJVwh.js → LandingPage-CbOHycnd.js} +1 -1
  19. package/dashboard/dist/assets/{LeaderboardAvatar-B8SGUidW.js → LeaderboardAvatar-CQL1iOTS.js} +1 -1
  20. package/dashboard/dist/assets/{LeaderboardPage-D7CQCdDr.js → LeaderboardPage-BuEp247d.js} +2 -2
  21. package/dashboard/dist/assets/{LeaderboardProfileModal-Dv7CQVqB.js → LeaderboardProfileModal-DT8hrPkI.js} +1 -1
  22. package/dashboard/dist/assets/{LeaderboardProfilePage-BtGLbQnT.js → LeaderboardProfilePage-B-M0AXMb.js} +1 -1
  23. package/dashboard/dist/assets/{LimitsPage-DRf6h5_2.js → LimitsPage-Df2es3Xs.js} +1 -1
  24. package/dashboard/dist/assets/{LocalOnlyNotice-BnlODmxA.js → LocalOnlyNotice-DJIfKTKo.js} +1 -1
  25. package/dashboard/dist/assets/{LoginPage-CYXdV0X0.js → LoginPage-DtaaIy_8.js} +1 -1
  26. package/dashboard/dist/assets/{PopoverPopup-x5vYN3uF.js → PopoverPopup-CqWH6aB9.js} +1 -1
  27. package/dashboard/dist/assets/{ResetPasswordPage-D8ifLVwK.js → ResetPasswordPage-DCH5GU1c.js} +1 -1
  28. package/dashboard/dist/assets/{Select-CaaIuo5M.js → Select-BwyliVKJ.js} +1 -1
  29. package/dashboard/dist/assets/{SelectItemText-CdJ-E-d1.js → SelectItemText-B5_DKKEv.js} +1 -1
  30. package/dashboard/dist/assets/{SettingsPage-Dc7v5PEC.js → SettingsPage-BoAFdOUa.js} +1 -1
  31. package/dashboard/dist/assets/{SkillsPage-CRbEMatQ.js → SkillsPage-BVdre-kF.js} +1 -1
  32. package/dashboard/dist/assets/{WidgetsPage-xgy8mLMV.js → WidgetsPage-CtjV405P.js} +1 -1
  33. package/dashboard/dist/assets/{WrappedPage-BdpfOWJu.js → WrappedPage-DGmPdtHt.js} +1 -1
  34. package/dashboard/dist/assets/{agent-logos-CrxAAMko.js → agent-logos-DqevdWvx.js} +1 -1
  35. package/dashboard/dist/assets/{arrow-up-right-D23bZC75.js → arrow-up-right-DA5Pybq1.js} +1 -1
  36. package/dashboard/dist/assets/check-BWzAT1oX.js +1 -0
  37. package/dashboard/dist/assets/{copy-hiVk9JEl.js → copy-CsQRTd89.js} +1 -1
  38. package/dashboard/dist/assets/{download-CqLiBDG-.js → download-TEHkAKT0.js} +1 -1
  39. package/dashboard/dist/assets/{format-tokens-Ck5lRlFd.js → format-tokens-CtFO_jkz.js} +1 -1
  40. package/dashboard/dist/assets/{info-CxDHBJXB.js → info-Dxn3fiaX.js} +1 -1
  41. package/dashboard/dist/assets/main-Dxi4sSXf.js +1128 -0
  42. package/dashboard/dist/assets/{use-community-stats-CeaLHlCk.js → use-community-stats-BLNxr-bQ.js} +1 -1
  43. package/dashboard/dist/assets/{use-limits-display-prefs-CvDWYfjp.js → use-limits-display-prefs-CC7gb303.js} +1 -1
  44. package/dashboard/dist/assets/{use-native-settings-HuxDwmn6.js → use-native-settings-SYtjLlxZ.js} +1 -1
  45. package/dashboard/dist/assets/{use-ordered-list-KIV2M5tf.js → use-ordered-list-_O8onJV7.js} +1 -1
  46. package/dashboard/dist/assets/{use-quality-per-dollar-pref-BbsMhRJt.js → use-quality-per-dollar-pref-tuspH_6n.js} +1 -1
  47. package/dashboard/dist/assets/{use-usage-limits-COBOepfU.js → use-usage-limits-whCVzQbf.js} +1 -1
  48. package/dashboard/dist/assets/{useCurrency-DbBq0Fal.js → useCurrency-BiDjYxfm.js} +1 -1
  49. package/dashboard/dist/assets/{useScrollLock-C4eBSnib.js → useScrollLock-DK-ndHcw.js} +1 -1
  50. package/dashboard/dist/index.html +1 -1
  51. package/dashboard/dist/share.html +1 -1
  52. package/package.json +1 -1
  53. package/src/commands/status.js +47 -4
  54. package/src/commands/sync.js +72 -18
  55. package/src/lib/local-api.js +24 -2
  56. package/src/lib/pricing/curated-overrides.json +7 -2
  57. package/src/lib/pricing/seed-snapshot.json +1 -1
  58. package/src/lib/rollout.js +385 -0
  59. package/src/lib/sqlite-reader.js +24 -6
  60. package/src/lib/usage-limits.js +200 -29
  61. package/src/lib/zcode-limits.js +375 -40
  62. package/dashboard/dist/assets/DialogDescription-DeEet5bz.js +0 -1
  63. package/dashboard/dist/assets/check-fkZxgcVQ.js +0 -1
  64. package/dashboard/dist/assets/main-B0LYKUIY.js +0 -1127
@@ -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
  }