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.
Files changed (97) hide show
  1. package/dashboard/dist/assets/{AchievementBadge-td60VwNO.js → AchievementBadge-DsAclDw6.js} +1 -1
  2. package/dashboard/dist/assets/{AchievementsPage-C3yKXgId.js → AchievementsPage-D__EwC45.js} +2 -2
  3. package/dashboard/dist/assets/{AchievementsSection-XM39rQkD.js → AchievementsSection-BAZNM3Cn.js} +1 -1
  4. package/dashboard/dist/assets/{BadgeDetailModal-2TgBBPmw.js → BadgeDetailModal-Dgeer5oB.js} +1 -1
  5. package/dashboard/dist/assets/{BotAnimated-CG6_x0d2.js → BotAnimated-CwrScgrI.js} +1 -1
  6. package/dashboard/dist/assets/{Card-BUnCudVB.js → Card-D7GmLoqP.js} +1 -1
  7. package/dashboard/dist/assets/{ClawdAnimated-CNRu6v7I.js → ClawdAnimated-BEXgb5J_.js} +2 -2
  8. package/dashboard/dist/assets/{CommandPalette-D5vVqYkW.js → CommandPalette-B9Mn3Qt2.js} +1 -1
  9. package/dashboard/dist/assets/{CommunityStatsModal-D0V4iTI6.js → CommunityStatsModal-eJ_a1FMd.js} +1 -1
  10. package/dashboard/dist/assets/{ConfirmModal-CzxTtnXo.js → ConfirmModal-CumOr2J1.js} +1 -1
  11. package/dashboard/dist/assets/{Controls-nR5gzX__.js → Controls-DxnaHBzv.js} +1 -1
  12. package/dashboard/dist/assets/{DashboardPage-CpHXkuZn.js → DashboardPage-BpRRXCRr.js} +1 -1
  13. package/dashboard/dist/assets/{DevicePage-Emw9iVMd.js → DevicePage-4yTYf29M.js} +1 -1
  14. package/dashboard/dist/assets/{DialogClose-Bh-pvxsM.js → DialogClose-BbderFCY.js} +1 -1
  15. package/dashboard/dist/assets/DialogDescription-C5Ujj254.js +1 -0
  16. package/dashboard/dist/assets/{DialogTitle-BG3ngtew.js → DialogTitle-6epeLIn0.js} +1 -1
  17. package/dashboard/dist/assets/{FadeIn-DOEfAW5p.js → FadeIn-BFLojPGG.js} +1 -1
  18. package/dashboard/dist/assets/{HeaderGithubStar-DslGxMu4.js → HeaderGithubStar-CPBNn61n.js} +1 -1
  19. package/dashboard/dist/assets/{HoverTooltip-O2OKCBc3.js → HoverTooltip-DbxnLj8e.js} +1 -1
  20. package/dashboard/dist/assets/{IpCheckPage-Dv6LbNU_.js → IpCheckPage-CfPtXAAF.js} +1 -1
  21. package/dashboard/dist/assets/{LandingPage-BBfteqDF.js → LandingPage-CocswfFj.js} +2 -2
  22. package/dashboard/dist/assets/{LeaderboardAvatar-Ct6QagwN.js → LeaderboardAvatar-iZLxxZX-.js} +1 -1
  23. package/dashboard/dist/assets/{LeaderboardPage-CSbIdSm7.js → LeaderboardPage-yqauB4Q1.js} +2 -2
  24. package/dashboard/dist/assets/{LeaderboardProfileModal-BuUWkmBN.js → LeaderboardProfileModal-BWu8jbBW.js} +3 -3
  25. package/dashboard/dist/assets/{LeaderboardProfilePage-fVnV0Lo-.js → LeaderboardProfilePage-B77gOTzr.js} +1 -1
  26. package/dashboard/dist/assets/{LimitsPage-BHkkA3xN.js → LimitsPage-C9NeIcft.js} +1 -1
  27. package/dashboard/dist/assets/{LocalOnlyNotice-BLlrqreb.js → LocalOnlyNotice-HPXWU8TT.js} +1 -1
  28. package/dashboard/dist/assets/{LoginCard-CKV1uACo.js → LoginCard-D592L-fh.js} +1 -1
  29. package/dashboard/dist/assets/{LoginModal-RCpQtFuG.js → LoginModal-C7Qm7CVf.js} +1 -1
  30. package/dashboard/dist/assets/{LoginPage-vMV2kpef.js → LoginPage-DkYw5ZQK.js} +1 -1
  31. package/dashboard/dist/assets/{PetPage-CTgwpnsA.js → PetPage-BOhvAJp4.js} +1 -1
  32. package/dashboard/dist/assets/{PopoverPopup-Bddr9R6x.js → PopoverPopup-BK9aqQn1.js} +1 -1
  33. package/dashboard/dist/assets/{ProviderIcon-BeXu2voQ.js → ProviderIcon-d0_vhIkS.js} +1 -1
  34. package/dashboard/dist/assets/{ResetPasswordPage-CilGTQWZ.js → ResetPasswordPage-UDNlpFVu.js} +1 -1
  35. package/dashboard/dist/assets/{SegmentedControl-r5MP3Uyx.js → SegmentedControl-DE5m1pTf.js} +1 -1
  36. package/dashboard/dist/assets/{Select-BBUIbPTj.js → Select-Z2xTQ55f.js} +1 -1
  37. package/dashboard/dist/assets/{SelectItemText-CbuN7Sui.js → SelectItemText-Daq-XRZg.js} +1 -1
  38. package/dashboard/dist/assets/{ServiceStatusPage-WgmQviZa.js → ServiceStatusPage-Cfr-QDZ7.js} +1 -1
  39. package/dashboard/dist/assets/{SessionsPage-BDkdXQhW.js → SessionsPage-nHPj6IAt.js} +1 -1
  40. package/dashboard/dist/assets/{SettingsPage-CsF8cG7I.js → SettingsPage-NvxUG_9m.js} +2 -2
  41. package/dashboard/dist/assets/{SkillsPage-CVGra4ar.js → SkillsPage-zFbZa42f.js} +1 -1
  42. package/dashboard/dist/assets/{TokenGalaxy-B0kFIG0N.js → TokenGalaxy-CjAY6rey.js} +1 -1
  43. package/dashboard/dist/assets/{ToolbarRootContext-BlWkiH2k.js → ToolbarRootContext-DnC8LT_8.js} +1 -1
  44. package/dashboard/dist/assets/{TrendMonitor-C18_ADhU.js → TrendMonitor-DAAlILwJ.js} +1 -1
  45. package/dashboard/dist/assets/{WidgetsPage-Ck7L4vBj.js → WidgetsPage-CXsfi-mq.js} +1 -1
  46. package/dashboard/dist/assets/{WrappedPage-Bm5HMj3a.js → WrappedPage-ByYzOeZ-.js} +1 -1
  47. package/dashboard/dist/assets/__vite-browser-external-HdCplPKs.js +45 -0
  48. package/dashboard/dist/assets/{agent-logos-PZX7lWJo.js → agent-logos-BW-ajJ7p.js} +1 -1
  49. package/dashboard/dist/assets/{arrow-up-right-DPSDEZPh.js → arrow-up-right-CA5IJkqo.js} +1 -1
  50. package/dashboard/dist/assets/{check-GGrgivnu.js → check-BBjF3bSm.js} +1 -1
  51. package/dashboard/dist/assets/{chevron-right-CmSOUizu.js → chevron-right-DCvGp9iJ.js} +1 -1
  52. package/dashboard/dist/assets/{copy-ChMyV-hy.js → copy-ahF8LGeu.js} +1 -1
  53. package/dashboard/dist/assets/{download-DGUkE9Jc.js → download-DBm8dmvt.js} +1 -1
  54. package/dashboard/dist/assets/{external-link-B_W-UDpi.js → external-link-C1sJSL7J.js} +1 -1
  55. package/dashboard/dist/assets/{flame-C9ccP-R8.js → flame-B6xukEYd.js} +1 -1
  56. package/dashboard/dist/assets/{format-tokens-CkXJmbVP.js → format-tokens-6TqXlT3q.js} +1 -1
  57. package/dashboard/dist/assets/{icons-D37cRKGk.js → icons-pGe_pInY.js} +1 -1
  58. package/dashboard/dist/assets/{index-C9OzYqU0.js → index-Chb8mb2X.js} +1 -1
  59. package/dashboard/dist/assets/{index-C-_fimm3.js → index-I9O8xChC.js} +1 -1
  60. package/dashboard/dist/assets/{index-Dt6WIU71.js → index-RPV0zdZ9.js} +1 -1
  61. package/dashboard/dist/assets/{info-C3-0C2W0.js → info-DBfJv0yu.js} +1 -1
  62. package/dashboard/dist/assets/{limits-providers-DB1Zr3WN.js → limits-providers-DPQsdVq5.js} +1 -1
  63. package/dashboard/dist/assets/{link-2-DqNEbzji.js → link-2-DNEARrPY.js} +1 -1
  64. package/dashboard/dist/assets/{loader-circle-BYoKm-f5.js → loader-circle-BCFHUr8X.js} +1 -1
  65. package/dashboard/dist/assets/{maximize-2-lVQDTDqs.js → maximize-2-1EmlA2R-.js} +1 -1
  66. package/dashboard/dist/assets/{modifiers.esm-Bww85WOd.js → modifiers.esm-DGXFSuEq.js} +1 -1
  67. package/dashboard/dist/assets/{monitor-smartphone--KubNwvP.js → monitor-smartphone-DsPPhvsT.js} +1 -1
  68. package/dashboard/dist/assets/{provider-display-COV_Ft4A.js → provider-display-C20LtBC5.js} +1 -1
  69. package/dashboard/dist/assets/{react-lNnu0y7U.js → react-B4FPJgs_.js} +1 -1
  70. package/dashboard/dist/assets/{search-CpHNMxpD.js → search-mkIFPKzW.js} +1 -1
  71. package/dashboard/dist/assets/{skills-api-Cf2qRQ1h.js → skills-api-D24vlu2H.js} +1 -1
  72. package/dashboard/dist/assets/{sortable.esm-DWdlF_7j.js → sortable.esm-BNDcP0sW.js} +1 -1
  73. package/dashboard/dist/assets/{store-DJQqZJtg.js → store-B2nqaAqP.js} +1 -1
  74. package/dashboard/dist/assets/{terminal-Cban5byW.js → terminal-BxVMmvEx.js} +1 -1
  75. package/dashboard/dist/assets/{trash-2-nelaUHSh.js → trash-2-crt9lDvj.js} +1 -1
  76. package/dashboard/dist/assets/{use-community-stats-CBupXLW7.js → use-community-stats-CTB_uHWV.js} +1 -1
  77. package/dashboard/dist/assets/{use-limits-display-prefs-B4y_kzcd.js → use-limits-display-prefs-DXXZpjGY.js} +1 -1
  78. package/dashboard/dist/assets/{use-ordered-list-DEV58tGc.js → use-ordered-list-BVNb5QWU.js} +1 -1
  79. package/dashboard/dist/assets/use-reduced-motion-aSaQtoJu.js +1 -0
  80. package/dashboard/dist/assets/{use-session-efficiency-pref-wSk1wV6R.js → use-session-efficiency-pref-Di8nY6Lr.js} +1 -1
  81. package/dashboard/dist/assets/{use-transform-NKavwYrX.js → use-transform-Dx9C2nBC.js} +1 -1
  82. package/dashboard/dist/assets/{use-usage-limits-Blr1HBCj.js → use-usage-limits-D9vQFB1H.js} +1 -1
  83. package/dashboard/dist/assets/{useCurrency-B2704dMx.js → useCurrency-7dkDciam.js} +1 -1
  84. package/dashboard/dist/assets/{useScrollLock-BuPQ8T9m.js → useScrollLock-BUVUIPTX.js} +1 -1
  85. package/dashboard/dist/assets/{useTokenFormat-DPxAFuMj.js → useTokenFormat-DFSIAsAb.js} +1 -1
  86. package/dashboard/dist/assets/{zap-BgtTdM4q.js → zap-Png-VJSP.js} +1 -1
  87. package/dashboard/dist/index.html +1 -1
  88. package/dashboard/dist/ip-check.html +1 -1
  89. package/dashboard/dist/leaderboard.html +1 -1
  90. package/dashboard/dist/share.html +1 -1
  91. package/package.json +1 -1
  92. package/src/commands/sync.js +13 -6
  93. package/src/lib/pricing/seed-snapshot.json +1 -1
  94. package/src/lib/rollout.js +63 -17
  95. package/dashboard/dist/assets/DialogDescription-DJ-RHxIt.js +0 -1
  96. package/dashboard/dist/assets/__vite-browser-external-BCyVFzdP.js +0 -1575
  97. package/dashboard/dist/assets/use-reduced-motion-CRf4pBTt.js +0 -1
@@ -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
- for (const y of years) {
46
- if (!/^[0-9]{4}$/.test(y.name) || !y.isDirectory()) continue;
47
- const yearDir = path.join(sessionsDir, y.name);
48
- const months = await safeReadDir(yearDir);
49
- for (const m of months) {
50
- if (!/^[0-9]{2}$/.test(m.name) || !m.isDirectory()) continue;
51
- const monthDir = path.join(yearDir, m.name);
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
- for (const d of days) {
54
- if (!/^[0-9]{2}$/.test(d.name) || !d.isDirectory()) continue;
55
- const dayDir = path.join(monthDir, d.name);
56
- const files = await listRolloutDayFiles(dayDir, { dayInventoryCache, stats });
57
- out.push(...files);
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 = await fs.stat(filePath).catch(() => null);
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};