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.
- package/README.de.md +2 -1
- package/README.ja.md +2 -1
- package/README.ko.md +2 -1
- package/README.md +9 -6
- package/README.zh-CN.md +2 -1
- package/dashboard/dist/assets/{AchievementBadge-C6LBwlRW.js → AchievementBadge-Crrws1U1.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-bIFOA_jG.js → AchievementsPage-C65tiTnu.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-54qFstYv.js → AchievementsSection-Gc28pe4U.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DuQD9WfI.js → BadgeDetailModal-D_jEjBVd.js} +1 -1
- package/dashboard/dist/assets/{Card-BSSB4fdU.js → Card-DlZueiVg.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-D3CW-PaV.js → ClawdAnimated-DrwVfg1s.js} +1 -1
- package/dashboard/dist/assets/{CommandPalette-BDNpgOLw.js → CommandPalette-Dj753h1Y.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-DOh00zEU.js → CommunityStatsModal-PiK4kOib.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-BZnKmQvp.js → ConfirmModal-CJz-TMiD.js} +1 -1
- package/dashboard/dist/assets/{Controls-CB1IsIKx.js → Controls-DZ0W7HPO.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-dGdEyi6L.js → DashboardPage-DEDZy960.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-Pa-RjGEW.js → DevicePage-BR60A3uN.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-BFix8fA1.js → DialogClose-qcbYLZ_r.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-DMUlPgjH.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-Djq8dbvr.js → DialogTitle-KMA1u6gh.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-BbDnYSlD.js → FadeIn-BtTL9V_I.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-VK0p8KvI.js → HeaderGithubStar-Ckp60oxi.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-CxE_Tdkx.js → HoverTooltip-DaCmGdvh.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-Ce5PrAlg.js → IpCheckPage-Bs2xgpWT.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-CLcEW-uO.js → LandingPage-Dj6382lF.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-CeEVv5Lf.js → LeaderboardAvatar-4LQRczW4.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-BRtYEATU.js → LeaderboardPage-BKTbW7CC.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-BnUJjdzX.js → LeaderboardProfileModal-BP-I9FrE.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-Cp_U5Cu-.js → LeaderboardProfilePage-CWzqXfsO.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-Dk83mCC3.js → LimitsPage-DJL3rkrZ.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-B0IFxbO0.js → LocalOnlyNotice-CJ8aY8Yg.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-BNiVZu18.js → LoginCard-RfbqlInv.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-DsMQpIhI.js → LoginModal-DEgSV0ho.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-CRrHrKIB.js → LoginPage-biogQhPJ.js} +1 -1
- package/dashboard/dist/assets/{PetPage-DkBEl1o-.js → PetPage-bbmFMllf.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-D1Vj1Efz.js → PopoverPopup-Bx_a2ATx.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-7UhSc2T5.js → ProviderIcon-ClMKnRNE.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-BHNRVdD_.js → ResetPasswordPage-B0aAisWC.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-BV-qV5Kt.js → SegmentedControl-85G6K4nz.js} +1 -1
- package/dashboard/dist/assets/{Select-BuECb0BN.js → Select-D-PLRmNY.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-BGD0xkvB.js → SelectItemText-DOQMVovf.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-DYlfwLvY.js → ServiceStatusPage-C2fq26Du.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-BJsG4Y6A.js → SessionsPage-B-Gzrsxr.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-BWoQPbMV.js → SettingsPage-DzjURmD5.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-DrnjNKaO.js → SkillsPage-Bmu5fgPF.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-Bw1qTfSn.js → TokenGalaxy-DFVGDrXI.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BL8XQ3_A.js → ToolbarRootContext-CgWa03di.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-CiaCIHjy.js → TrendMonitor-CbLhCRaf.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-CpbdEZpd.js → WidgetsPage-CClBDKNb.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-BgXFgYTU.js → WrappedPage-B1QPw5JI.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-DzYphO_x.js → __vite-browser-external-CV_fKq4F.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-DmIjuARU.js → agent-logos-D-hDhb_B.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-BO9KkOdd.js → arrow-up-right-DAr-mJ3B.js} +1 -1
- package/dashboard/dist/assets/{check-pWcM1WkS.js → check-DPefl5-t.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-9BfpWAq6.js → chevron-right-MlzWycxC.js} +1 -1
- package/dashboard/dist/assets/{copy-CEJGOfxH.js → copy-B_53rp1c.js} +1 -1
- package/dashboard/dist/assets/{download-DGn3ZMbn.js → download-DnlmdACw.js} +1 -1
- package/dashboard/dist/assets/{external-link-Cr0IWKOC.js → external-link-DytBHNpR.js} +1 -1
- package/dashboard/dist/assets/{flame-Desm841m.js → flame-CO4NpDfZ.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-nrsS_nVp.js → format-tokens-CwDQe65M.js} +1 -1
- package/dashboard/dist/assets/{icons-Dz6888iB.js → icons-DvviMgxO.js} +1 -1
- package/dashboard/dist/assets/{index-A1XQdrLM.js → index-B0Lzl2gQ.js} +1 -1
- package/dashboard/dist/assets/{index-Ck7-nAuV.js → index-Dz9TFADl.js} +1 -1
- package/dashboard/dist/assets/{index-D-wYrxD4.js → index-hGGiJmvs.js} +1 -1
- package/dashboard/dist/assets/{info-DYk5fAf_.js → info-BY_SOAny.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-Bnp3QYj9.js → limits-providers-Cpis_64d.js} +1 -1
- package/dashboard/dist/assets/{link-2-CXFEilGt.js → link-2-DaIthsuC.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-D9TcNFLI.js → loader-circle-DXLU_CS0.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-Bqi02woy.js → maximize-2-CnLZ2V-D.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-DBig_B4D.js → modifiers.esm-CtoD-5nh.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-B6Xb6Q2B.js → monitor-smartphone-CwfUXtG9.js} +1 -1
- package/dashboard/dist/assets/{provider-display-D9VqWtF5.js → provider-display-C0gDapSI.js} +1 -1
- package/dashboard/dist/assets/{react-fhU3Lic-.js → react-BNEThWJE.js} +1 -1
- package/dashboard/dist/assets/{search-Dxo_rl9c.js → search-GYLDIV-1.js} +1 -1
- package/dashboard/dist/assets/{skills-api-BycDG-Gj.js → skills-api-noC3sCP_.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-BgR0p3Td.js → sortable.esm-Bm4LZh1T.js} +1 -1
- package/dashboard/dist/assets/{store-XGqQuDi9.js → store-DWhiUbOS.js} +1 -1
- package/dashboard/dist/assets/{terminal-Btw95Xe9.js → terminal-BEQDw7-4.js} +1 -1
- package/dashboard/dist/assets/{trash-2-MzI5KdIA.js → trash-2-Cm7eF7SC.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-DqXdGI7Z.js → use-community-stats-9a-td9J_.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-DCC_HO5d.js → use-limits-display-prefs-XY6qQJai.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-BrWqGdXP.js → use-ordered-list-BEaiYX4S.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-C9_Q8rAl.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-fF02PDXr.js → use-session-efficiency-pref-oDZEyqyO.js} +1 -1
- package/dashboard/dist/assets/{use-transform-BU3YFLLq.js → use-transform-LKaVzl1V.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-Z_aa7E3w.js → use-usage-limits-DY3e5o6f.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-BSydrVhG.js → useCurrency-CSRY4U-t.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-DfukCBjz.js → useScrollLock-CSZXl0Pl.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-Dh2VNPFE.js → useTokenFormat-f1kcdHaP.js} +1 -1
- package/dashboard/dist/assets/{zap-T24MagjI.js → zap-BMZr9Qc1.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +1 -1
- package/src/commands/init.js +16 -0
- package/src/commands/status.js +57 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +129 -0
- package/dashboard/dist/assets/DialogDescription-BBVopkKB.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-BbtvaYmJ.js +0 -1
package/src/lib/rollout.js
CHANGED
|
@@ -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};
|