tokentracker-cli 0.88.0 → 0.88.1

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 (101) hide show
  1. package/README.de.md +2 -1
  2. package/README.ja.md +2 -1
  3. package/README.ko.md +2 -1
  4. package/README.md +9 -6
  5. package/README.zh-CN.md +2 -1
  6. package/dashboard/dist/assets/{AchievementBadge-C6LBwlRW.js → AchievementBadge-Crrws1U1.js} +1 -1
  7. package/dashboard/dist/assets/{AchievementsPage-bIFOA_jG.js → AchievementsPage-C65tiTnu.js} +2 -2
  8. package/dashboard/dist/assets/{AchievementsSection-54qFstYv.js → AchievementsSection-Gc28pe4U.js} +1 -1
  9. package/dashboard/dist/assets/{BadgeDetailModal-DuQD9WfI.js → BadgeDetailModal-D_jEjBVd.js} +1 -1
  10. package/dashboard/dist/assets/{Card-BSSB4fdU.js → Card-DlZueiVg.js} +1 -1
  11. package/dashboard/dist/assets/{ClawdAnimated-D3CW-PaV.js → ClawdAnimated-DrwVfg1s.js} +1 -1
  12. package/dashboard/dist/assets/{CommandPalette-BDNpgOLw.js → CommandPalette-Dj753h1Y.js} +1 -1
  13. package/dashboard/dist/assets/{CommunityStatsModal-DOh00zEU.js → CommunityStatsModal-PiK4kOib.js} +1 -1
  14. package/dashboard/dist/assets/{ConfirmModal-BZnKmQvp.js → ConfirmModal-CJz-TMiD.js} +1 -1
  15. package/dashboard/dist/assets/{Controls-CB1IsIKx.js → Controls-DZ0W7HPO.js} +1 -1
  16. package/dashboard/dist/assets/{DashboardPage-dGdEyi6L.js → DashboardPage-DEDZy960.js} +1 -1
  17. package/dashboard/dist/assets/{DevicePage-Pa-RjGEW.js → DevicePage-BR60A3uN.js} +1 -1
  18. package/dashboard/dist/assets/{DialogClose-BFix8fA1.js → DialogClose-qcbYLZ_r.js} +1 -1
  19. package/dashboard/dist/assets/DialogDescription-DMUlPgjH.js +1 -0
  20. package/dashboard/dist/assets/{DialogTitle-Djq8dbvr.js → DialogTitle-KMA1u6gh.js} +1 -1
  21. package/dashboard/dist/assets/{FadeIn-BbDnYSlD.js → FadeIn-BtTL9V_I.js} +1 -1
  22. package/dashboard/dist/assets/{HeaderGithubStar-VK0p8KvI.js → HeaderGithubStar-Ckp60oxi.js} +1 -1
  23. package/dashboard/dist/assets/{HoverTooltip-CxE_Tdkx.js → HoverTooltip-DaCmGdvh.js} +1 -1
  24. package/dashboard/dist/assets/{IpCheckPage-Ce5PrAlg.js → IpCheckPage-Bs2xgpWT.js} +1 -1
  25. package/dashboard/dist/assets/{LandingPage-CLcEW-uO.js → LandingPage-Dj6382lF.js} +2 -2
  26. package/dashboard/dist/assets/{LeaderboardAvatar-CeEVv5Lf.js → LeaderboardAvatar-4LQRczW4.js} +1 -1
  27. package/dashboard/dist/assets/{LeaderboardPage-BRtYEATU.js → LeaderboardPage-BKTbW7CC.js} +2 -2
  28. package/dashboard/dist/assets/{LeaderboardProfileModal-BnUJjdzX.js → LeaderboardProfileModal-BP-I9FrE.js} +3 -3
  29. package/dashboard/dist/assets/{LeaderboardProfilePage-Cp_U5Cu-.js → LeaderboardProfilePage-CWzqXfsO.js} +1 -1
  30. package/dashboard/dist/assets/{LimitsPage-Dk83mCC3.js → LimitsPage-DJL3rkrZ.js} +1 -1
  31. package/dashboard/dist/assets/{LocalOnlyNotice-B0IFxbO0.js → LocalOnlyNotice-CJ8aY8Yg.js} +1 -1
  32. package/dashboard/dist/assets/{LoginCard-BNiVZu18.js → LoginCard-RfbqlInv.js} +1 -1
  33. package/dashboard/dist/assets/{LoginModal-DsMQpIhI.js → LoginModal-DEgSV0ho.js} +1 -1
  34. package/dashboard/dist/assets/{LoginPage-CRrHrKIB.js → LoginPage-biogQhPJ.js} +1 -1
  35. package/dashboard/dist/assets/{PetPage-DkBEl1o-.js → PetPage-bbmFMllf.js} +1 -1
  36. package/dashboard/dist/assets/{PopoverPopup-D1Vj1Efz.js → PopoverPopup-Bx_a2ATx.js} +1 -1
  37. package/dashboard/dist/assets/{ProviderIcon-7UhSc2T5.js → ProviderIcon-ClMKnRNE.js} +1 -1
  38. package/dashboard/dist/assets/{ResetPasswordPage-BHNRVdD_.js → ResetPasswordPage-B0aAisWC.js} +1 -1
  39. package/dashboard/dist/assets/{SegmentedControl-BV-qV5Kt.js → SegmentedControl-85G6K4nz.js} +1 -1
  40. package/dashboard/dist/assets/{Select-BuECb0BN.js → Select-D-PLRmNY.js} +1 -1
  41. package/dashboard/dist/assets/{SelectItemText-BGD0xkvB.js → SelectItemText-DOQMVovf.js} +1 -1
  42. package/dashboard/dist/assets/{ServiceStatusPage-DYlfwLvY.js → ServiceStatusPage-C2fq26Du.js} +1 -1
  43. package/dashboard/dist/assets/{SessionsPage-BJsG4Y6A.js → SessionsPage-B-Gzrsxr.js} +1 -1
  44. package/dashboard/dist/assets/{SettingsPage-BWoQPbMV.js → SettingsPage-DzjURmD5.js} +1 -1
  45. package/dashboard/dist/assets/{SkillsPage-DrnjNKaO.js → SkillsPage-Bmu5fgPF.js} +1 -1
  46. package/dashboard/dist/assets/{TokenGalaxy-Bw1qTfSn.js → TokenGalaxy-DFVGDrXI.js} +1 -1
  47. package/dashboard/dist/assets/{ToolbarRootContext-BL8XQ3_A.js → ToolbarRootContext-CgWa03di.js} +1 -1
  48. package/dashboard/dist/assets/{TrendMonitor-CiaCIHjy.js → TrendMonitor-CbLhCRaf.js} +1 -1
  49. package/dashboard/dist/assets/{WidgetsPage-CpbdEZpd.js → WidgetsPage-CClBDKNb.js} +1 -1
  50. package/dashboard/dist/assets/{WrappedPage-BgXFgYTU.js → WrappedPage-B1QPw5JI.js} +1 -1
  51. package/dashboard/dist/assets/{__vite-browser-external-DzYphO_x.js → __vite-browser-external-CV_fKq4F.js} +2 -2
  52. package/dashboard/dist/assets/{agent-logos-DmIjuARU.js → agent-logos-D-hDhb_B.js} +1 -1
  53. package/dashboard/dist/assets/{arrow-up-right-BO9KkOdd.js → arrow-up-right-DAr-mJ3B.js} +1 -1
  54. package/dashboard/dist/assets/{check-pWcM1WkS.js → check-DPefl5-t.js} +1 -1
  55. package/dashboard/dist/assets/{chevron-right-9BfpWAq6.js → chevron-right-MlzWycxC.js} +1 -1
  56. package/dashboard/dist/assets/{copy-CEJGOfxH.js → copy-B_53rp1c.js} +1 -1
  57. package/dashboard/dist/assets/{download-DGn3ZMbn.js → download-DnlmdACw.js} +1 -1
  58. package/dashboard/dist/assets/{external-link-Cr0IWKOC.js → external-link-DytBHNpR.js} +1 -1
  59. package/dashboard/dist/assets/{flame-Desm841m.js → flame-CO4NpDfZ.js} +1 -1
  60. package/dashboard/dist/assets/{format-tokens-nrsS_nVp.js → format-tokens-CwDQe65M.js} +1 -1
  61. package/dashboard/dist/assets/{icons-Dz6888iB.js → icons-DvviMgxO.js} +1 -1
  62. package/dashboard/dist/assets/{index-A1XQdrLM.js → index-B0Lzl2gQ.js} +1 -1
  63. package/dashboard/dist/assets/{index-Ck7-nAuV.js → index-Dz9TFADl.js} +1 -1
  64. package/dashboard/dist/assets/{index-D-wYrxD4.js → index-hGGiJmvs.js} +1 -1
  65. package/dashboard/dist/assets/{info-DYk5fAf_.js → info-BY_SOAny.js} +1 -1
  66. package/dashboard/dist/assets/{limits-providers-Bnp3QYj9.js → limits-providers-Cpis_64d.js} +1 -1
  67. package/dashboard/dist/assets/{link-2-CXFEilGt.js → link-2-DaIthsuC.js} +1 -1
  68. package/dashboard/dist/assets/{loader-circle-D9TcNFLI.js → loader-circle-DXLU_CS0.js} +1 -1
  69. package/dashboard/dist/assets/{maximize-2-Bqi02woy.js → maximize-2-CnLZ2V-D.js} +1 -1
  70. package/dashboard/dist/assets/{modifiers.esm-DBig_B4D.js → modifiers.esm-CtoD-5nh.js} +1 -1
  71. package/dashboard/dist/assets/{monitor-smartphone-B6Xb6Q2B.js → monitor-smartphone-CwfUXtG9.js} +1 -1
  72. package/dashboard/dist/assets/{provider-display-D9VqWtF5.js → provider-display-C0gDapSI.js} +1 -1
  73. package/dashboard/dist/assets/{react-fhU3Lic-.js → react-BNEThWJE.js} +1 -1
  74. package/dashboard/dist/assets/{search-Dxo_rl9c.js → search-GYLDIV-1.js} +1 -1
  75. package/dashboard/dist/assets/{skills-api-BycDG-Gj.js → skills-api-noC3sCP_.js} +1 -1
  76. package/dashboard/dist/assets/{sortable.esm-BgR0p3Td.js → sortable.esm-Bm4LZh1T.js} +1 -1
  77. package/dashboard/dist/assets/{store-XGqQuDi9.js → store-DWhiUbOS.js} +1 -1
  78. package/dashboard/dist/assets/{terminal-Btw95Xe9.js → terminal-BEQDw7-4.js} +1 -1
  79. package/dashboard/dist/assets/{trash-2-MzI5KdIA.js → trash-2-Cm7eF7SC.js} +1 -1
  80. package/dashboard/dist/assets/{use-community-stats-DqXdGI7Z.js → use-community-stats-9a-td9J_.js} +1 -1
  81. package/dashboard/dist/assets/{use-limits-display-prefs-DCC_HO5d.js → use-limits-display-prefs-XY6qQJai.js} +1 -1
  82. package/dashboard/dist/assets/{use-ordered-list-BrWqGdXP.js → use-ordered-list-BEaiYX4S.js} +1 -1
  83. package/dashboard/dist/assets/use-reduced-motion-C9_Q8rAl.js +1 -0
  84. package/dashboard/dist/assets/{use-session-efficiency-pref-fF02PDXr.js → use-session-efficiency-pref-oDZEyqyO.js} +1 -1
  85. package/dashboard/dist/assets/{use-transform-BU3YFLLq.js → use-transform-LKaVzl1V.js} +1 -1
  86. package/dashboard/dist/assets/{use-usage-limits-Z_aa7E3w.js → use-usage-limits-DY3e5o6f.js} +1 -1
  87. package/dashboard/dist/assets/{useCurrency-BSydrVhG.js → useCurrency-CSRY4U-t.js} +1 -1
  88. package/dashboard/dist/assets/{useScrollLock-DfukCBjz.js → useScrollLock-CSZXl0Pl.js} +1 -1
  89. package/dashboard/dist/assets/{useTokenFormat-Dh2VNPFE.js → useTokenFormat-f1kcdHaP.js} +1 -1
  90. package/dashboard/dist/assets/{zap-T24MagjI.js → zap-BMZr9Qc1.js} +1 -1
  91. package/dashboard/dist/index.html +1 -1
  92. package/dashboard/dist/ip-check.html +1 -1
  93. package/dashboard/dist/leaderboard.html +1 -1
  94. package/dashboard/dist/share.html +1 -1
  95. package/package.json +1 -1
  96. package/src/commands/init.js +16 -0
  97. package/src/commands/status.js +57 -0
  98. package/src/lib/pricing/seed-snapshot.json +1 -1
  99. package/src/lib/rollout.js +129 -0
  100. package/dashboard/dist/assets/DialogDescription-BBVopkKB.js +0 -1
  101. package/dashboard/dist/assets/use-reduced-motion-BbtvaYmJ.js +0 -1
@@ -15998,6 +15998,130 @@ function isCjkCodePoint(code) {
15998
15998
  );
15999
15999
  }
16000
16000
 
16001
+ // ── Trae SOLO (ByteDance AI IDE) ─────────────────────────────────────────────
16002
+ // https://www.trae.ai
16003
+ //
16004
+ // Trae SOLO is scoped to detection (init) + entitlement display (status):
16005
+ // - init: resolveTraeStoragePath() proves an install exists.
16006
+ // - status: readTraeEntitlementFromStorage() serves the plan/limits snapshot.
16007
+ // Trae SOLO does NOT expose per-request token usage in a readable local format
16008
+ // (session transcripts are SQLCipher-encrypted; memory summaries carry no
16009
+ // token counts), so the token-count-only queue is intentionally never written
16010
+ // for this provider — the cloud hourly table stays clean.
16011
+ function resolveTraePath(env = process.env) {
16012
+ const override = env.TOKENTRACKER_TRAE_HOME;
16013
+ if (typeof override === "string" && override.trim().length > 0) {
16014
+ return override.trim();
16015
+ }
16016
+ const home = require("node:os").homedir();
16017
+ if (process.platform === "darwin") {
16018
+ return path.join(home, "Library", "Application Support", "TRAE SOLO");
16019
+ }
16020
+ if (process.platform === "win32") {
16021
+ // A Windows box with no APPDATA still keeps Trae under the standard
16022
+ // roaming profile — falling through to the dot-dir below would point at
16023
+ // a location Trae never writes.
16024
+ const appData = typeof env.APPDATA === "string" ? env.APPDATA.trim() : "";
16025
+ return appData
16026
+ ? path.join(appData, "TRAE SOLO")
16027
+ : path.join(home, "AppData", "Roaming", "TRAE SOLO");
16028
+ }
16029
+ // Linux and friends: TRAE SOLO ships official builds for macOS/Windows
16030
+ // only, so there is no verified app-data layout to default to. Fall back to
16031
+ // a deterministic home-dir path (best-effort detection);
16032
+ // TOKENTRACKER_TRAE_HOME always wins for unusual installs.
16033
+ return path.join(home, ".trae-solo");
16034
+ }
16035
+
16036
+ function resolveTraeStoragePath(env = process.env) {
16037
+ const traHome = resolveTraePath(env);
16038
+ if (!traHome) return null;
16039
+ const p = path.join(traHome, "User", "globalStorage", "storage.json");
16040
+ return fssync.existsSync(p) ? p : null;
16041
+ }
16042
+
16043
+ /**
16044
+ * Extract the Trae SOLO entitlement snapshot from parsed storage.json
16045
+ * serverData (the value under iCubeServerData://icube.cloudide).
16046
+ * Returns a normalized entitlement object, or null when the serverData
16047
+ * carries no valid entitlementInfo. Shared by the status read path
16048
+ * (readTraeEntitlementFromStorage).
16049
+ */
16050
+ function normalizeTraeEntitlement(serverData) {
16051
+ let ent;
16052
+ try {
16053
+ ent = typeof serverData === "string" ? JSON.parse(serverData) : serverData;
16054
+ } catch {
16055
+ return null;
16056
+ }
16057
+ // The parsed serverData may legitimately be JSON `null` (e.g. the string
16058
+ // "null") or another non-object — treat it as no valid snapshot.
16059
+ if (!ent || typeof ent !== "object" || Array.isArray(ent)) return null;
16060
+ const entitlementInfo = ent.entitlementInfo;
16061
+ if (!entitlementInfo || typeof entitlementInfo !== "object") return null;
16062
+ const detail = entitlementInfo.detail || {};
16063
+ return {
16064
+ identity: entitlementInfo.identityStr,
16065
+ identity_code: entitlementInfo.identity,
16066
+ has_package: entitlementInfo.hasPackage,
16067
+ is_dollar_billing: entitlementInfo.isDollarUsageBilling,
16068
+ pro_period: entitlementInfo.proPeriod,
16069
+ enable_solo_builder: entitlementInfo.enableSoloBuilder,
16070
+ enable_solo_coder: entitlementInfo.enableSoloCoder,
16071
+ fast_request_per: detail.fastRequestPer,
16072
+ in_waitlist: detail.inWaitlist,
16073
+ };
16074
+ }
16075
+
16076
+ /**
16077
+ * Read the current Trae SOLO entitlement snapshot straight from the Trae
16078
+ * Local State storage.json, without touching the token-count-only queue
16079
+ * (CLAUDE.md privacy contract). Returns a normalized entitlement object
16080
+ * with a captured_at timestamp, or null when storage.json is missing,
16081
+ * unparseable, or carries no valid entitlement snapshot.
16082
+ */
16083
+ function readTraeEntitlementFromStorage(storagePath) {
16084
+ if (!storagePath) return null;
16085
+ let fd;
16086
+ try {
16087
+ fd = fssync.openSync(storagePath, "r");
16088
+ } catch {
16089
+ return null;
16090
+ }
16091
+ let stat = null;
16092
+ let raw;
16093
+ try {
16094
+ stat = fssync.fstatSync(fd);
16095
+ raw = fssync.readFileSync(fd, "utf8");
16096
+ } catch {
16097
+ return null;
16098
+ } finally {
16099
+ try {
16100
+ fssync.closeSync(fd);
16101
+ } catch {
16102
+ // fd already closed; nothing to do.
16103
+ }
16104
+ }
16105
+ let storage;
16106
+ try {
16107
+ storage = JSON.parse(raw);
16108
+ } catch {
16109
+ return null;
16110
+ }
16111
+ if (!storage || typeof storage !== "object" || Array.isArray(storage)) {
16112
+ return null;
16113
+ }
16114
+ const serverKey = "iCubeServerData://icube.cloudide";
16115
+ const serverData = storage[serverKey];
16116
+ if (!serverData) return null;
16117
+ const entitlement = normalizeTraeEntitlement(serverData);
16118
+ if (!entitlement) return null;
16119
+ return {
16120
+ ...entitlement,
16121
+ captured_at: stat ? new Date(stat.mtimeMs).toISOString() : null,
16122
+ };
16123
+ }
16124
+
16001
16125
  module.exports = {
16002
16126
  listRolloutFiles,
16003
16127
  listRolloutFilesDeep,
@@ -16164,4 +16288,9 @@ module.exports = {
16164
16288
  parseAntigravityIncremental,
16165
16289
  estimateAntigravityTokens,
16166
16290
  isCjkCodePoint,
16291
+
16292
+ // Trae SOLO (ByteDance AI IDE)
16293
+ resolveTraePath,
16294
+ resolveTraeStoragePath,
16295
+ readTraeEntitlementFromStorage,
16167
16296
  };
@@ -1 +0,0 @@
1
- import{r as n,z as a}from"./__vite-browser-external-DzYphO_x.js";import{u as p}from"./DialogTitle-Djq8dbvr.js";import{u as c}from"./useScrollLock-DfukCBjz.js";const x=n.forwardRef(function(e,r){const{render:l,className:u,style:m,id:s,...t}=e,{store: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-DzYphO_x.js";import{h as r,i as t,p as s}from"./react-fhU3Lic-.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};