tokentracker-cli 0.93.5 → 0.93.6
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/dashboard/dist/assets/{AchievementBadge-td60VwNO.js → AchievementBadge-DsAclDw6.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-C3yKXgId.js → AchievementsPage-D__EwC45.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-XM39rQkD.js → AchievementsSection-BAZNM3Cn.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-2TgBBPmw.js → BadgeDetailModal-Dgeer5oB.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-CG6_x0d2.js → BotAnimated-CwrScgrI.js} +1 -1
- package/dashboard/dist/assets/{Card-BUnCudVB.js → Card-D7GmLoqP.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-CNRu6v7I.js → ClawdAnimated-BEXgb5J_.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-D5vVqYkW.js → CommandPalette-B9Mn3Qt2.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-D0V4iTI6.js → CommunityStatsModal-eJ_a1FMd.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-CzxTtnXo.js → ConfirmModal-CumOr2J1.js} +1 -1
- package/dashboard/dist/assets/{Controls-nR5gzX__.js → Controls-DxnaHBzv.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-CpHXkuZn.js → DashboardPage-BpRRXCRr.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-Emw9iVMd.js → DevicePage-4yTYf29M.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-Bh-pvxsM.js → DialogClose-BbderFCY.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-C5Ujj254.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-BG3ngtew.js → DialogTitle-6epeLIn0.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-DOEfAW5p.js → FadeIn-BFLojPGG.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-DslGxMu4.js → HeaderGithubStar-CPBNn61n.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-O2OKCBc3.js → HoverTooltip-DbxnLj8e.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-Dv6LbNU_.js → IpCheckPage-CfPtXAAF.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-BBfteqDF.js → LandingPage-CocswfFj.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-Ct6QagwN.js → LeaderboardAvatar-iZLxxZX-.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-CSbIdSm7.js → LeaderboardPage-yqauB4Q1.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-BuUWkmBN.js → LeaderboardProfileModal-BWu8jbBW.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-fVnV0Lo-.js → LeaderboardProfilePage-B77gOTzr.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-BHkkA3xN.js → LimitsPage-C9NeIcft.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-BLlrqreb.js → LocalOnlyNotice-HPXWU8TT.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-CKV1uACo.js → LoginCard-D592L-fh.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-RCpQtFuG.js → LoginModal-C7Qm7CVf.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-vMV2kpef.js → LoginPage-DkYw5ZQK.js} +1 -1
- package/dashboard/dist/assets/{PetPage-CTgwpnsA.js → PetPage-BOhvAJp4.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-Bddr9R6x.js → PopoverPopup-BK9aqQn1.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-BeXu2voQ.js → ProviderIcon-d0_vhIkS.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-CilGTQWZ.js → ResetPasswordPage-UDNlpFVu.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-r5MP3Uyx.js → SegmentedControl-DE5m1pTf.js} +1 -1
- package/dashboard/dist/assets/{Select-BBUIbPTj.js → Select-Z2xTQ55f.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-CbuN7Sui.js → SelectItemText-Daq-XRZg.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-WgmQviZa.js → ServiceStatusPage-Cfr-QDZ7.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-BDkdXQhW.js → SessionsPage-nHPj6IAt.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-CsF8cG7I.js → SettingsPage-NvxUG_9m.js} +2 -2
- package/dashboard/dist/assets/{SkillsPage-CVGra4ar.js → SkillsPage-zFbZa42f.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-B0kFIG0N.js → TokenGalaxy-CjAY6rey.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BlWkiH2k.js → ToolbarRootContext-DnC8LT_8.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-C18_ADhU.js → TrendMonitor-DAAlILwJ.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-Ck7L4vBj.js → WidgetsPage-CXsfi-mq.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-Bm5HMj3a.js → WrappedPage-ByYzOeZ-.js} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-HdCplPKs.js +45 -0
- package/dashboard/dist/assets/{agent-logos-PZX7lWJo.js → agent-logos-BW-ajJ7p.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-DPSDEZPh.js → arrow-up-right-CA5IJkqo.js} +1 -1
- package/dashboard/dist/assets/{check-GGrgivnu.js → check-BBjF3bSm.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-CmSOUizu.js → chevron-right-DCvGp9iJ.js} +1 -1
- package/dashboard/dist/assets/{copy-ChMyV-hy.js → copy-ahF8LGeu.js} +1 -1
- package/dashboard/dist/assets/{download-DGUkE9Jc.js → download-DBm8dmvt.js} +1 -1
- package/dashboard/dist/assets/{external-link-B_W-UDpi.js → external-link-C1sJSL7J.js} +1 -1
- package/dashboard/dist/assets/{flame-C9ccP-R8.js → flame-B6xukEYd.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-CkXJmbVP.js → format-tokens-6TqXlT3q.js} +1 -1
- package/dashboard/dist/assets/{icons-D37cRKGk.js → icons-pGe_pInY.js} +1 -1
- package/dashboard/dist/assets/{index-C9OzYqU0.js → index-Chb8mb2X.js} +1 -1
- package/dashboard/dist/assets/{index-C-_fimm3.js → index-I9O8xChC.js} +1 -1
- package/dashboard/dist/assets/{index-Dt6WIU71.js → index-RPV0zdZ9.js} +1 -1
- package/dashboard/dist/assets/{info-C3-0C2W0.js → info-DBfJv0yu.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-DB1Zr3WN.js → limits-providers-DPQsdVq5.js} +1 -1
- package/dashboard/dist/assets/{link-2-DqNEbzji.js → link-2-DNEARrPY.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-BYoKm-f5.js → loader-circle-BCFHUr8X.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-lVQDTDqs.js → maximize-2-1EmlA2R-.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-Bww85WOd.js → modifiers.esm-DGXFSuEq.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone--KubNwvP.js → monitor-smartphone-DsPPhvsT.js} +1 -1
- package/dashboard/dist/assets/{provider-display-COV_Ft4A.js → provider-display-C20LtBC5.js} +1 -1
- package/dashboard/dist/assets/{react-lNnu0y7U.js → react-B4FPJgs_.js} +1 -1
- package/dashboard/dist/assets/{search-CpHNMxpD.js → search-mkIFPKzW.js} +1 -1
- package/dashboard/dist/assets/{skills-api-Cf2qRQ1h.js → skills-api-D24vlu2H.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-DWdlF_7j.js → sortable.esm-BNDcP0sW.js} +1 -1
- package/dashboard/dist/assets/{store-DJQqZJtg.js → store-B2nqaAqP.js} +1 -1
- package/dashboard/dist/assets/{terminal-Cban5byW.js → terminal-BxVMmvEx.js} +1 -1
- package/dashboard/dist/assets/{trash-2-nelaUHSh.js → trash-2-crt9lDvj.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-CBupXLW7.js → use-community-stats-CTB_uHWV.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-B4y_kzcd.js → use-limits-display-prefs-DXXZpjGY.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-DEV58tGc.js → use-ordered-list-BVNb5QWU.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-aSaQtoJu.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-wSk1wV6R.js → use-session-efficiency-pref-Di8nY6Lr.js} +1 -1
- package/dashboard/dist/assets/{use-transform-NKavwYrX.js → use-transform-Dx9C2nBC.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-Blr1HBCj.js → use-usage-limits-D9vQFB1H.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-B2704dMx.js → useCurrency-7dkDciam.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-BuPQ8T9m.js → useScrollLock-BUVUIPTX.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-DPxAFuMj.js → useTokenFormat-DFSIAsAb.js} +1 -1
- package/dashboard/dist/assets/{zap-BgtTdM4q.js → zap-Png-VJSP.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/sync.js +13 -6
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +63 -17
- package/dashboard/dist/assets/DialogDescription-DJ-RHxIt.js +0 -1
- package/dashboard/dist/assets/__vite-browser-external-BCyVFzdP.js +0 -1575
- package/dashboard/dist/assets/use-reduced-motion-CRf4pBTt.js +0 -1
package/src/lib/rollout.js
CHANGED
|
@@ -24,6 +24,26 @@ const CLAUDE_MEM_OBSERVER_PROJECT_REF =
|
|
|
24
24
|
"https://local.tokentracker/claude-mem/observer-sessions";
|
|
25
25
|
const PROJECT_ABSENT_CONTEXT_RESCAN_MS = 24 * 60 * 60 * 1000;
|
|
26
26
|
const DEFAULT_CODEX_COLD_SKIP_RECENT_DAYS = 2;
|
|
27
|
+
const FILE_METADATA_CONCURRENCY = 32;
|
|
28
|
+
|
|
29
|
+
async function mapConcurrent(items, concurrency, mapper) {
|
|
30
|
+
if (!Array.isArray(items) || items.length === 0) return [];
|
|
31
|
+
const results = new Array(items.length);
|
|
32
|
+
let nextIndex = 0;
|
|
33
|
+
const workerCount = Math.min(
|
|
34
|
+
items.length,
|
|
35
|
+
Math.max(1, Math.floor(Number(concurrency) || 1)),
|
|
36
|
+
);
|
|
37
|
+
const workers = Array.from({ length: workerCount }, async () => {
|
|
38
|
+
while (nextIndex < items.length) {
|
|
39
|
+
const index = nextIndex;
|
|
40
|
+
nextIndex += 1;
|
|
41
|
+
results[index] = await mapper(items[index], index);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
await Promise.all(workers);
|
|
45
|
+
return results;
|
|
46
|
+
}
|
|
27
47
|
|
|
28
48
|
async function listRolloutFiles(sessionsDir, options = {}) {
|
|
29
49
|
const out = [];
|
|
@@ -41,23 +61,37 @@ async function listRolloutFiles(sessionsDir, options = {}) {
|
|
|
41
61
|
dayInventoryCache.days = {};
|
|
42
62
|
}
|
|
43
63
|
}
|
|
44
|
-
const years = await safeReadDir(sessionsDir)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
64
|
+
const years = (await safeReadDir(sessionsDir))
|
|
65
|
+
.filter((entry) => /^[0-9]{4}$/.test(entry.name) && entry.isDirectory());
|
|
66
|
+
const monthGroups = await mapConcurrent(
|
|
67
|
+
years,
|
|
68
|
+
FILE_METADATA_CONCURRENCY,
|
|
69
|
+
async (year) => {
|
|
70
|
+
const yearDir = path.join(sessionsDir, year.name);
|
|
71
|
+
const months = await safeReadDir(yearDir);
|
|
72
|
+
return months
|
|
73
|
+
.filter((entry) => /^[0-9]{2}$/.test(entry.name) && entry.isDirectory())
|
|
74
|
+
.map((entry) => path.join(yearDir, entry.name));
|
|
75
|
+
},
|
|
76
|
+
);
|
|
77
|
+
const monthDirs = monthGroups.flat();
|
|
78
|
+
const dayGroups = await mapConcurrent(
|
|
79
|
+
monthDirs,
|
|
80
|
+
FILE_METADATA_CONCURRENCY,
|
|
81
|
+
async (monthDir) => {
|
|
52
82
|
const days = await safeReadDir(monthDir);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
83
|
+
return days
|
|
84
|
+
.filter((entry) => /^[0-9]{2}$/.test(entry.name) && entry.isDirectory())
|
|
85
|
+
.map((entry) => path.join(monthDir, entry.name));
|
|
86
|
+
},
|
|
87
|
+
);
|
|
88
|
+
const dayDirs = dayGroups.flat();
|
|
89
|
+
const fileGroups = await mapConcurrent(
|
|
90
|
+
dayDirs,
|
|
91
|
+
FILE_METADATA_CONCURRENCY,
|
|
92
|
+
(dayDir) => listRolloutDayFiles(dayDir, { dayInventoryCache, stats }),
|
|
93
|
+
);
|
|
94
|
+
for (const files of fileGroups) out.push(...files);
|
|
61
95
|
|
|
62
96
|
out.sort((a, b) => a.localeCompare(b));
|
|
63
97
|
return out;
|
|
@@ -354,6 +388,18 @@ async function parseRolloutIncremental({
|
|
|
354
388
|
return false;
|
|
355
389
|
};
|
|
356
390
|
|
|
391
|
+
// Metadata reads are independent while parsing and bucket mutation are not.
|
|
392
|
+
// Prefetch stats with bounded concurrency, then retain the original stable
|
|
393
|
+
// file order for parsing, deduplication, cursor updates, and queue writes.
|
|
394
|
+
const rolloutStats = await mapConcurrent(
|
|
395
|
+
rolloutFiles,
|
|
396
|
+
FILE_METADATA_CONCURRENCY,
|
|
397
|
+
async (entry) => {
|
|
398
|
+
const filePath = typeof entry === "string" ? entry : entry?.path;
|
|
399
|
+
if (!filePath) return null;
|
|
400
|
+
return fs.stat(filePath).catch(() => null);
|
|
401
|
+
},
|
|
402
|
+
);
|
|
357
403
|
for (let idx = 0; idx < rolloutFiles.length; idx++) {
|
|
358
404
|
const entry = rolloutFiles[idx];
|
|
359
405
|
const filePath = typeof entry === "string" ? entry : entry?.path;
|
|
@@ -363,7 +409,7 @@ async function parseRolloutIncremental({
|
|
|
363
409
|
? defaultSource
|
|
364
410
|
: normalizeSourceInput(entry?.source) || defaultSource;
|
|
365
411
|
if (syncDiagnostics && fileSource === DEFAULT_SOURCE) syncDiagnostics.stat_candidates += 1;
|
|
366
|
-
const st =
|
|
412
|
+
const st = rolloutStats[idx];
|
|
367
413
|
if (!st || !st.isFile()) continue;
|
|
368
414
|
|
|
369
415
|
const key = filePath;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,z as a}from"./__vite-browser-external-BCyVFzdP.js";import{u as p}from"./DialogTitle-BG3ngtew.js";import{u as c}from"./useScrollLock-BuPQ8T9m.js";const x=n.forwardRef(function(e,r){const{render:l,className:u,style:m,id:s,...t}=e,i=p(),o=c(s);return i.useSyncedValueWithCleanup("descriptionElementId",o),a("p",e,{ref:r,props:[{id:o},t]})});export{x as D};
|