tokentracker-cli 1.1.2 → 1.1.4
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 +6 -4
- package/README.ja.md +6 -4
- package/README.ko.md +6 -4
- package/README.md +7 -4
- package/README.zh-CN.md +6 -4
- package/dashboard/dist/assets/{AchievementBadge-CX7g238N.js → AchievementBadge-BGA-HT_B.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-BbkEymra.js → AchievementsPage-CtRh5AjH.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-CmhoerE7.js → AchievementsSection-BarRcKaN.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-996i13Vf.js → BadgeDetailModal-Bg0BDAN2.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-B22CfAlF.js → BotAnimated-By9J3-dn.js} +1 -1
- package/dashboard/dist/assets/{Card-DFd9hCFB.js → Card-CIoJYi2j.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-DXKN28M2.js → ClawdAnimated-Dkvc2xe8.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-DVRs34TV.js → CommandPalette-BssDtHRl.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-BExjH9E8.js → CommunityStatsModal-CQrgLlDb.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-KJhOrJ98.js → ConfirmModal-C3hBPgYc.js} +1 -1
- package/dashboard/dist/assets/{Controls-xnIEnOqd.js → Controls-BSW6a1HS.js} +1 -1
- package/dashboard/dist/assets/DashboardPage-Dhv7fejy.js +1 -0
- package/dashboard/dist/assets/{DevicePage-Bo8e-KVq.js → DevicePage-D5eZn0wo.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-gBd-BmR7.js → DialogClose-BltQpaJo.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-Cof52Icj.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-B0UbsqD7.js → DialogTitle-CVddcRPZ.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-Dv2DtOPn.js → FadeIn-goPv73MT.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-1kEsgGdK.js → HeaderGithubStar-BDBrrkzt.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-DQlpkw2L.js → HoverTooltip-qyMezXOs.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-CFlkmSlA.js → IpCheckPage-Ces8JIPb.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-DNs6mSij.js → LandingPage-B2TmLGno.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-DSltCiRr.js → LeaderboardAvatar-CVVRoNua.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-CkjUMA-k.js → LeaderboardPage-xtt-bOY8.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-DJjaD7Kz.js → LeaderboardProfileModal-BM4d_I_r.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-Bue7tJoi.js → LeaderboardProfilePage-BWqhFLQX.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-Ctbvl8Q8.js → LimitsPage-BZL4Pcl8.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-LjNI8j4I.js → LocalOnlyNotice-D4gnOEJj.js} +1 -1
- package/dashboard/dist/assets/LoginCard-CB17FQ5w.js +1 -0
- package/dashboard/dist/assets/{LoginModal-CUmfCsHY.js → LoginModal-BI-O1rH4.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-CjJb9qFM.js → LoginPage-DnGzsvJ4.js} +1 -1
- package/dashboard/dist/assets/{PetPage-BWKEnBEW.js → PetPage-NRnIKMaJ.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-DeXj3kM3.js → PopoverPopup-DHoK6UJZ.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-DL-oa-UM.js → ProviderIcon-BTkdx9o2.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-CeeKMN8H.js → ResetPasswordPage-C6K0w318.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-Bx5Z9tYf.js → SegmentedControl-gEoWioBE.js} +1 -1
- package/dashboard/dist/assets/{Select-DRbgbSPd.js → Select-CI-qtEYu.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-D792o2Et.js → SelectItemText-q-yhzzjw.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-NjQ1oGqx.js → ServiceStatusPage-C4xD1CEe.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-Cr2uHP91.js → SessionsPage-CS0Yun2z.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-Av8pVbqT.js → SettingsPage-GVY_ktz4.js} +2 -2
- package/dashboard/dist/assets/{SkillsPage-feW4j329.js → SkillsPage-COPRL95O.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-DX36F36Q.js → TokenGalaxy-Czi0Ic48.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-CzMlVMfI.js → ToolbarRootContext-BZkTiBJB.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-BosWE34g.js → TrendMonitor-CnIsuxV-.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-DhoypTuq.js → WidgetsPage-OdX_Fsul.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-DR6BoipR.js → WrappedPage-h9N63-F8.js} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-BFNWaGsk.js +45 -0
- package/dashboard/dist/assets/{agent-logos-QSScjsfz.js → agent-logos-BDiPxrST.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-BJQYadF-.js → arrow-up-right-DtFQUeJG.js} +1 -1
- package/dashboard/dist/assets/{check-CINIOTsF.js → check-C35onaNL.js} +1 -1
- package/dashboard/dist/assets/{composite-YV7-iFo_.js → composite-qxBzts0W.js} +1 -1
- package/dashboard/dist/assets/{copy-Bp_U7bAZ.js → copy-D_D71TLc.js} +1 -1
- package/dashboard/dist/assets/{download-CVOIkdjl.js → download-DMQI2hQe.js} +1 -1
- package/dashboard/dist/assets/{external-link-P6LDhEET.js → external-link-CemM4dWf.js} +1 -1
- package/dashboard/dist/assets/{flame-AbZCJ878.js → flame-CIvk0SP5.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-M5bvANSq.js → format-tokens-D3JSvcFl.js} +1 -1
- package/dashboard/dist/assets/{icons-DpRn5Rxt.js → icons-Ccf5W0AL.js} +1 -1
- package/dashboard/dist/assets/{index-KQ5H65Ds.js → index-Brd2evyz.js} +1 -1
- package/dashboard/dist/assets/{index-CW2bybhs.js → index-C8Wri_HI.js} +1 -1
- package/dashboard/dist/assets/{index-L3O7cNuj.js → index-CFXmD_KX.js} +1 -1
- package/dashboard/dist/assets/{info-GEiJwgYk.js → info-CafrKEG8.js} +1 -1
- package/dashboard/dist/assets/{link-2-D8KpexwS.js → link-2-Ds-9Nzlp.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-r0nEab80.js → loader-circle-DA4I55-V.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-azGbxGbz.js → maximize-2-CjMPt5kU.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-Cke4_92g.js → modifiers.esm-DIxTS09h.js} +1 -1
- package/dashboard/dist/assets/module-WSx8viXK.js +3 -0
- package/dashboard/dist/assets/{monitor-smartphone-BnHiLGNs.js → monitor-smartphone-IZpIOxn3.js} +1 -1
- package/dashboard/dist/assets/{plus-CJbY6Uuk.js → plus-vbLFNs70.js} +1 -1
- package/dashboard/dist/assets/{provider-display-B05KW8SE.js → provider-display-BAu_UIfV.js} +2 -2
- package/dashboard/dist/assets/{react-CingcaIm.js → react-Djb4VGKb.js} +1 -1
- package/dashboard/dist/assets/{search-CyffdJFU.js → search-Ct6LY9Ke.js} +1 -1
- package/dashboard/dist/assets/{skills-api-CdDPrjMM.js → skills-api-BnGI2gEp.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-B48YEoXA.js → sortable.esm-CjCGd6g5.js} +1 -1
- package/dashboard/dist/assets/{store-B0W0vLvA.js → store-CBxkOqRe.js} +1 -1
- package/dashboard/dist/assets/{terminal-CJ0D4hSx.js → terminal-Dlpdp5Az.js} +1 -1
- package/dashboard/dist/assets/{trash-DH-_Q3A5.js → trash-pxUSKv66.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-y6OaeOVs.js → use-community-stats-tHaixRIw.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-DP7kE0Xa.js → use-latest-request-guard-Cs44WPfL.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-Bgcto2k1.js → use-limits-display-prefs-Dw56PXWy.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-1L7o2taR.js → use-ordered-list-DpLx8oLV.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-DrlJ9X6p.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-36sqzSZl.js → use-session-efficiency-pref-BN3FtBvr.js} +1 -1
- package/dashboard/dist/assets/{use-transform-DZgeA77H.js → use-transform-C4nTGgzb.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-C5P1O9oT.js → use-usage-limits-Dmwdc1yo.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-Dwv89bBn.js → useCurrency-DSc3A_Ih.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-BGeVB81B.js → useTokenFormat-BHjcMgm8.js} +1 -1
- package/dashboard/dist/assets/{zap-D18Nt3M5.js → zap-BE8i_wu2.js} +1 -1
- package/dashboard/dist/brand-logos/trae.svg +1 -0
- package/dashboard/dist/index.html +15 -11
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/llms.txt +4 -2
- package/dashboard/dist/share.html +1 -1
- package/package.json +6 -4
- package/src/commands/init.js +20 -7
- package/src/commands/status.js +39 -9
- package/src/commands/sync.js +62 -1
- package/src/lib/pricing/curated-overrides.json +7 -0
- package/src/lib/pricing/matcher.js +5 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +845 -20
- package/src/lib/trae-db.js +127 -0
- package/src/lib/trae-snapshot.js +230 -0
- package/src/lib/trae-sqlite.js +143 -0
- package/src/lib/trae-usage.js +121 -0
- package/src/lib/wsl-probe.js +55 -12
- package/dashboard/dist/assets/DashboardPage-BzsiCwjX.js +0 -1
- package/dashboard/dist/assets/DialogDescription-CTEI9PvU.js +0 -1
- package/dashboard/dist/assets/LoginCard-U_3SnvtN.js +0 -1
- package/dashboard/dist/assets/__vite-browser-external-DYTQCEz4.js +0 -45
- package/dashboard/dist/assets/module-DtWfRKM4.js +0 -3
- package/dashboard/dist/assets/use-reduced-motion-BQxHT0gI.js +0 -1
package/src/commands/status.js
CHANGED
|
@@ -93,6 +93,8 @@ const {
|
|
|
93
93
|
resolveDroidSessionsDir,
|
|
94
94
|
resolveDshHomes,
|
|
95
95
|
resolveDshSessionFiles,
|
|
96
|
+
resolveCommandCodeHomes,
|
|
97
|
+
resolveCommandCodeSessionFiles,
|
|
96
98
|
resolveTraeStoragePath,
|
|
97
99
|
readTraeEntitlementFromStorage,
|
|
98
100
|
resolveGrokBuildSessions,
|
|
@@ -729,6 +731,20 @@ async function cmdStatus(argv = []) {
|
|
|
729
731
|
const dshSessionsDir = dshHomes.map((homeDir) => path.join(homeDir, "sessions")).join(", ");
|
|
730
732
|
const dshSessionFiles = await resolveDshSessionFiles(process.env);
|
|
731
733
|
const dshInstalled = dshSessionFiles.length > 0;
|
|
734
|
+
let commandCodeProjectsDir = "";
|
|
735
|
+
let commandCodeSessionFiles = [];
|
|
736
|
+
let commandCodeDiscoveryError = null;
|
|
737
|
+
try {
|
|
738
|
+
commandCodeProjectsDir = resolveCommandCodeHomes(process.env)
|
|
739
|
+
.map((homeDir) => path.join(homeDir, "projects"))
|
|
740
|
+
.join(", ");
|
|
741
|
+
commandCodeSessionFiles = await resolveCommandCodeSessionFiles(process.env);
|
|
742
|
+
} catch (error) {
|
|
743
|
+
// Discovery stays strict for sync, but a provider read error must not
|
|
744
|
+
// suppress the rest of the status diagnostics.
|
|
745
|
+
commandCodeDiscoveryError = `${error?.code ? `${error.code}: ` : ""}${error?.message || String(error)}`;
|
|
746
|
+
}
|
|
747
|
+
const commandCodeInstalled = commandCodeSessionFiles.length > 0;
|
|
732
748
|
const lmstudioHome = resolveLmstudioHome(process.env);
|
|
733
749
|
const lmstudioLogFiles = await resolveLmstudioLogFiles(process.env);
|
|
734
750
|
const lmstudioInstalled = lmstudioLogFiles.length > 0;
|
|
@@ -739,9 +755,10 @@ async function cmdStatus(argv = []) {
|
|
|
739
755
|
const devinDbPath = resolveDevinDbPath(process.env);
|
|
740
756
|
const devinInstalled = Boolean(devinDbPath && fssync.existsSync(devinDbPath));
|
|
741
757
|
|
|
742
|
-
|
|
758
|
+
const { resolveTraeDbPaths } = require("../lib/trae-db");
|
|
759
|
+
const traeDbPaths = resolveTraeDbPaths(process.env);
|
|
743
760
|
const traeStoragePath = resolveTraeStoragePath(process.env);
|
|
744
|
-
const traeInstalled = Boolean(traeStoragePath);
|
|
761
|
+
const traeInstalled = Boolean(traeStoragePath || traeDbPaths.length);
|
|
745
762
|
// Render path for the entitlement snapshot: read it straight from the
|
|
746
763
|
// Trae Local State storage.json via the shared parser. The queue stays
|
|
747
764
|
// token-count-only, so the status read path never depends on queue rows
|
|
@@ -1083,6 +1100,15 @@ async function cmdStatus(argv = []) {
|
|
|
1083
1100
|
dsh: dshInstalled
|
|
1084
1101
|
? { installed: true, files: dshSessionFiles.length, detail: dshSessionsDir }
|
|
1085
1102
|
: { installed: false },
|
|
1103
|
+
"command-code": commandCodeInstalled
|
|
1104
|
+
? {
|
|
1105
|
+
installed: true,
|
|
1106
|
+
files: commandCodeSessionFiles.length,
|
|
1107
|
+
detail: commandCodeProjectsDir,
|
|
1108
|
+
}
|
|
1109
|
+
: commandCodeDiscoveryError
|
|
1110
|
+
? { installed: false, error: commandCodeDiscoveryError }
|
|
1111
|
+
: { installed: false },
|
|
1086
1112
|
lmstudio: lmstudioInstalled
|
|
1087
1113
|
? {
|
|
1088
1114
|
installed: true,
|
|
@@ -1099,7 +1125,9 @@ async function cmdStatus(argv = []) {
|
|
|
1099
1125
|
trae: traeInstalled
|
|
1100
1126
|
? {
|
|
1101
1127
|
installed: true,
|
|
1102
|
-
detail: traeStoragePath,
|
|
1128
|
+
detail: traeDbPaths[0] || traeStoragePath,
|
|
1129
|
+
usage_databases: traeDbPaths.length,
|
|
1130
|
+
usage_key_source: process.env.TOKENTRACKER_TRAE_SQLCIPHER_KEY?.trim() ? "environment" : "application",
|
|
1103
1131
|
...(traeEntitlement ? { entitlement: traeEntitlement } : {}),
|
|
1104
1132
|
}
|
|
1105
1133
|
: { installed: false },
|
|
@@ -1288,6 +1316,11 @@ async function cmdStatus(argv = []) {
|
|
|
1288
1316
|
dshInstalled
|
|
1289
1317
|
? `- DeepSeek Harness: passive reader (${dshSessionFiles.length} session${dshSessionFiles.length !== 1 ? "s" : ""} in ${dshSessionsDir})`
|
|
1290
1318
|
: null,
|
|
1319
|
+
commandCodeInstalled
|
|
1320
|
+
? `- Command Code: passive reader (${commandCodeSessionFiles.length} session${commandCodeSessionFiles.length !== 1 ? "s" : ""} in ${commandCodeProjectsDir})`
|
|
1321
|
+
: commandCodeDiscoveryError
|
|
1322
|
+
? `- Command Code: discovery failed (${commandCodeDiscoveryError})`
|
|
1323
|
+
: null,
|
|
1291
1324
|
lmstudioInstalled
|
|
1292
1325
|
? `- LM Studio: passive reader (${lmstudioLogFiles.length} log${lmstudioLogFiles.length !== 1 ? "s" : ""} in ${path.join(lmstudioHome, "server-logs")})`
|
|
1293
1326
|
: null,
|
|
@@ -1298,12 +1331,9 @@ async function cmdStatus(argv = []) {
|
|
|
1298
1331
|
? `- Devin CLI: passive reader (${devinDbPath})`
|
|
1299
1332
|
: null,
|
|
1300
1333
|
traeInstalled
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
// provider contributes plan info and nothing else — say so, or users go
|
|
1305
|
-
// looking for Trae usage in the dashboard that will never appear.
|
|
1306
|
-
? `- Trae SOLO: plan info only, no token usage (${traeStoragePath})`
|
|
1334
|
+
? traeDbPaths.length
|
|
1335
|
+
? `- TRAE: local usage reader, ${traeDbPaths.length} database(s) (shared application key; optional key override)`
|
|
1336
|
+
: `- TRAE: plan info only, no local usage database found (${traeStoragePath})`
|
|
1307
1337
|
: null,
|
|
1308
1338
|
traeEntitlement
|
|
1309
1339
|
? `- Trae SOLO plan: ${formatTraeEntitlementLine(traeEntitlement)}`
|
package/src/commands/sync.js
CHANGED
|
@@ -135,7 +135,10 @@ const {
|
|
|
135
135
|
resolveDroidModel,
|
|
136
136
|
resolveDshSessionFiles,
|
|
137
137
|
parseDshIncremental,
|
|
138
|
+
resolveCommandCodeSessionFiles,
|
|
139
|
+
parseCommandCodeIncremental,
|
|
138
140
|
parseTraeCnApiIncremental,
|
|
141
|
+
parseTraeIncremental,
|
|
139
142
|
bucketKey,
|
|
140
143
|
toUtcHalfHourStart,
|
|
141
144
|
totalsKey,
|
|
@@ -284,6 +287,7 @@ const ZCODE_NATIVE_USAGE_REPAIR_KEY = "zcodeNativeUsageRepair_2026_08";
|
|
|
284
287
|
const ZCODE_INCLUSIVE_TOKEN_REPAIR_KEY = "zcodeInclusiveTokenRepair_2026_09";
|
|
285
288
|
const AUTO_SYNC_SOURCE_ALIASES = new Map([
|
|
286
289
|
["code", "every-code"],
|
|
290
|
+
["commandcode", "command-code"],
|
|
287
291
|
["deepseek", "dsh"],
|
|
288
292
|
["everycode", "every-code"],
|
|
289
293
|
["kilo", "kilo-cli"],
|
|
@@ -300,6 +304,7 @@ const AUTO_SYNC_SOURCES = new Set([
|
|
|
300
304
|
"cline",
|
|
301
305
|
"codebuddy",
|
|
302
306
|
"codex",
|
|
307
|
+
"command-code",
|
|
303
308
|
"copilot",
|
|
304
309
|
"craft",
|
|
305
310
|
"cursor",
|
|
@@ -329,6 +334,7 @@ const AUTO_SYNC_SOURCES = new Set([
|
|
|
329
334
|
"reasonix",
|
|
330
335
|
"roocode",
|
|
331
336
|
"trae-cn",
|
|
337
|
+
"trae",
|
|
332
338
|
"unsloth",
|
|
333
339
|
"workbuddy",
|
|
334
340
|
"zcode",
|
|
@@ -1650,6 +1656,34 @@ async function cmdSync(argv, context = {}) {
|
|
|
1650
1656
|
}
|
|
1651
1657
|
}
|
|
1652
1658
|
|
|
1659
|
+
// ── Command Code (`cmd`) — passive read of ~/.commandcode session logs ──
|
|
1660
|
+
let commandCodeResult = { recordsProcessed: 0, eventsAggregated: 0, bucketsQueued: 0 };
|
|
1661
|
+
if (sourceAllowed("command-code")) {
|
|
1662
|
+
try {
|
|
1663
|
+
const commandCodeSessionFiles = await resolveCommandCodeSessionFiles(process.env);
|
|
1664
|
+
// Empty discovery preserves durable usage history. Native I/O failures
|
|
1665
|
+
// remain visible; optional WSL failures do not suppress native usage.
|
|
1666
|
+
if (commandCodeSessionFiles.length > 0 || cursors.commandCode) {
|
|
1667
|
+
if (progress?.enabled) {
|
|
1668
|
+
progress.start(
|
|
1669
|
+
`Parsing Command Code ${renderBar(0)} 0/${formatNumber(
|
|
1670
|
+
commandCodeSessionFiles.length,
|
|
1671
|
+
)} sessions | buckets 0`,
|
|
1672
|
+
);
|
|
1673
|
+
}
|
|
1674
|
+
commandCodeResult = await parseCommandCodeIncremental({
|
|
1675
|
+
sessionFiles: commandCodeSessionFiles,
|
|
1676
|
+
cursors,
|
|
1677
|
+
queuePath,
|
|
1678
|
+
projectQueuePath,
|
|
1679
|
+
onProgress: makeProviderProgress("Command Code"),
|
|
1680
|
+
});
|
|
1681
|
+
}
|
|
1682
|
+
} catch (err) {
|
|
1683
|
+
warnProviderParseFailure("Command Code", err, opts);
|
|
1684
|
+
}
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1653
1687
|
// ── LM Studio and Unsloth Studio — passive inference usage ──
|
|
1654
1688
|
let lmstudioResult = { recordsProcessed: 0, eventsAggregated: 0, bucketsQueued: 0 };
|
|
1655
1689
|
if (sourceAllowed("lmstudio")) {
|
|
@@ -1979,6 +2013,27 @@ async function cmdSync(argv, context = {}) {
|
|
|
1979
2013
|
}
|
|
1980
2014
|
}
|
|
1981
2015
|
|
|
2016
|
+
let traeResult = { recordsProcessed: 0, eventsAggregated: 0, bucketsQueued: 0 };
|
|
2017
|
+
if (sourceAllowed("trae")) {
|
|
2018
|
+
try {
|
|
2019
|
+
traeResult = await parseTraeIncremental({
|
|
2020
|
+
cursors, queuePath, onProgress: makeProviderProgress("TRAE"),
|
|
2021
|
+
});
|
|
2022
|
+
for (const { database, message } of traeResult.errors) {
|
|
2023
|
+
process.stderr.write(`TRAE sync: could not read ${database}: ${message}. Will retry on the next sync.\n`);
|
|
2024
|
+
}
|
|
2025
|
+
if (traeResult.recordsSkipped > 0 && !opts.auto) {
|
|
2026
|
+
process.stderr.write(`TRAE sync: skipped ${traeResult.recordsSkipped} records with unsupported usage metadata.\n`);
|
|
2027
|
+
}
|
|
2028
|
+
if (traeResult.estimatedRecords > 0 && !opts.auto) {
|
|
2029
|
+
process.stderr.write(`TRAE sync: ${traeResult.estimatedRecords} Gemini records have repaired thought or cache counters, marked as estimated.\n`);
|
|
2030
|
+
}
|
|
2031
|
+
if (traeResult.unpricedRecords > 0 && !opts.auto) {
|
|
2032
|
+
process.stderr.write(`TRAE sync: ${traeResult.unpricedRecords} multi-request turns include earlier input without a cache split; it is counted in token totals but left out of cost.\n`);
|
|
2033
|
+
}
|
|
2034
|
+
} catch (err) { warnProviderParseFailure("TRAE", err); }
|
|
2035
|
+
}
|
|
2036
|
+
|
|
1982
2037
|
// ── Trae Work CN (国内版) — account-level usage API ──
|
|
1983
2038
|
// A simple explicit rolling 30-day window captured once per sync (no
|
|
1984
2039
|
// cursor checkpoints / full-history import / page retries / background
|
|
@@ -3069,6 +3124,7 @@ async function cmdSync(argv, context = {}) {
|
|
|
3069
3124
|
claudeScienceResult.recordsProcessed +
|
|
3070
3125
|
cursorResult.recordsProcessed +
|
|
3071
3126
|
traeCnResult.recordsProcessed +
|
|
3127
|
+
traeResult.recordsProcessed +
|
|
3072
3128
|
kiroResult.recordsProcessed +
|
|
3073
3129
|
kiroCliResult.recordsProcessed +
|
|
3074
3130
|
hermesResult.recordsProcessed +
|
|
@@ -3098,6 +3154,7 @@ async function cmdSync(argv, context = {}) {
|
|
|
3098
3154
|
zedResult.recordsProcessed +
|
|
3099
3155
|
gooseResult.recordsProcessed +
|
|
3100
3156
|
dshResult.recordsProcessed +
|
|
3157
|
+
commandCodeResult.recordsProcessed +
|
|
3101
3158
|
droidResult.recordsProcessed;
|
|
3102
3159
|
const totalBuckets =
|
|
3103
3160
|
parseResult.bucketsQueued +
|
|
@@ -3111,6 +3168,7 @@ async function cmdSync(argv, context = {}) {
|
|
|
3111
3168
|
claudeScienceResult.bucketsQueued +
|
|
3112
3169
|
cursorResult.bucketsQueued +
|
|
3113
3170
|
traeCnResult.bucketsQueued +
|
|
3171
|
+
traeResult.bucketsQueued +
|
|
3114
3172
|
kiroResult.bucketsQueued +
|
|
3115
3173
|
kiroCliResult.bucketsQueued +
|
|
3116
3174
|
hermesResult.bucketsQueued +
|
|
@@ -3140,15 +3198,18 @@ async function cmdSync(argv, context = {}) {
|
|
|
3140
3198
|
zedResult.bucketsQueued +
|
|
3141
3199
|
gooseResult.bucketsQueued +
|
|
3142
3200
|
dshResult.bucketsQueued +
|
|
3201
|
+
commandCodeResult.bucketsQueued +
|
|
3143
3202
|
droidResult.bucketsQueued;
|
|
3144
3203
|
const skipNoOpCursorCommit =
|
|
3145
3204
|
opts.auto &&
|
|
3146
3205
|
!isFullSourceScan &&
|
|
3147
3206
|
cursorStore.mode === "v2" &&
|
|
3148
3207
|
cursorStore.requiresCommit !== true &&
|
|
3149
|
-
totalParsed === 0 &&
|
|
3208
|
+
totalParsed === (commandCodeResult.cursorUnchanged ? commandCodeResult.recordsProcessed : 0) &&
|
|
3150
3209
|
totalBuckets === 0 &&
|
|
3151
3210
|
!(grokResult.projectBucketsQueued > 0) &&
|
|
3211
|
+
!(commandCodeResult.projectBucketsQueued > 0) &&
|
|
3212
|
+
!commandCodeResult.schemaMigrated &&
|
|
3152
3213
|
!codexColdAuditDue &&
|
|
3153
3214
|
!codexFallbackRetryRan &&
|
|
3154
3215
|
!grokHookSignalConsumed &&
|
|
@@ -118,6 +118,13 @@
|
|
|
118
118
|
"cache_write": 0.167,
|
|
119
119
|
"note": "See hy3-preview-agent."
|
|
120
120
|
},
|
|
121
|
+
"qwen3.8-flash": {
|
|
122
|
+
"input": 0.15,
|
|
123
|
+
"output": 0.47,
|
|
124
|
+
"cache_read": 0.016,
|
|
125
|
+
"cache_write": 0.2,
|
|
126
|
+
"note": "Alibaba Model Studio Singapore (International), USD per MTok, verified 2026-09-29: https://www.alibabacloud.com/help/en/model-studio/qwen3-8-flash . Reference API estimate; other regions/providers can have different rates. Issue #715."
|
|
127
|
+
},
|
|
121
128
|
"hy4-preview": {
|
|
122
129
|
"input": 0.833,
|
|
123
130
|
"output": 2.5,
|
|
@@ -277,6 +277,11 @@ function lookupPricing(model, { curated, litellm, source } = {}) {
|
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
// 1. CURATED exact
|
|
280
|
+
// Qwen Flash's provider-qualified and dated IDs share the reference SKU.
|
|
281
|
+
// Keep the boundary strict: Flash-Next and Max have independent prices.
|
|
282
|
+
if (/(?:^|\/)qwen3[.-]8-flash(?:-\d{4}-\d{2}-\d{2})?$/.test(lower.trim()) && curated.exact?.["qwen3.8-flash"]) {
|
|
283
|
+
return { hit: true, source: "curated:exact", value: curated.exact["qwen3.8-flash"] };
|
|
284
|
+
}
|
|
280
285
|
if (curated.exact && curated.exact[lookupModel]) {
|
|
281
286
|
return { hit: true, source: "curated:exact", value: curated.exact[lookupModel] };
|
|
282
287
|
}
|