tokentracker-cli 1.0.5 → 1.0.7

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 (99) hide show
  1. package/dashboard/dist/assets/{AchievementBadge-Cvzhs6pY.js → AchievementBadge-BI_HiL08.js} +1 -1
  2. package/dashboard/dist/assets/{AchievementsPage-C7BPBZV3.js → AchievementsPage-CbK_pV0C.js} +2 -2
  3. package/dashboard/dist/assets/{AchievementsSection-Caq7GXWH.js → AchievementsSection-DEQycrwd.js} +1 -1
  4. package/dashboard/dist/assets/{BadgeDetailModal-CNyhrYnI.js → BadgeDetailModal-BdaHueq5.js} +1 -1
  5. package/dashboard/dist/assets/{BotAnimated-CbdhTKLO.js → BotAnimated-BATn4r97.js} +1 -1
  6. package/dashboard/dist/assets/{Card-63pzm8aU.js → Card-C3_Fzc5V.js} +1 -1
  7. package/dashboard/dist/assets/{ClawdAnimated-D6R7x8lK.js → ClawdAnimated-BidgYaVn.js} +2 -2
  8. package/dashboard/dist/assets/{CommandPalette-CE7p2oa_.js → CommandPalette-D86_iwFa.js} +1 -1
  9. package/dashboard/dist/assets/{CommunityStatsModal-D_bb4w1I.js → CommunityStatsModal-CJuy4O88.js} +1 -1
  10. package/dashboard/dist/assets/{ConfirmModal-DrejafJF.js → ConfirmModal-BaAc5rzt.js} +1 -1
  11. package/dashboard/dist/assets/{Controls-T3TIbrLI.js → Controls-Brnf_QJ_.js} +1 -1
  12. package/dashboard/dist/assets/{DashboardPage-CJD5K2X9.js → DashboardPage-BmW622BX.js} +1 -1
  13. package/dashboard/dist/assets/{DevicePage-CH0Y9OHH.js → DevicePage-DDrrY5AJ.js} +1 -1
  14. package/dashboard/dist/assets/{DialogClose-BcPHsqpR.js → DialogClose-BNcKZCV5.js} +1 -1
  15. package/dashboard/dist/assets/DialogDescription-CSvbgRdI.js +1 -0
  16. package/dashboard/dist/assets/{DialogTitle-Dv2oDI5S.js → DialogTitle-DL9AVJvk.js} +1 -1
  17. package/dashboard/dist/assets/{FadeIn-DIS2Hg_z.js → FadeIn-BYwYqoVv.js} +1 -1
  18. package/dashboard/dist/assets/{HeaderGithubStar-zCGj7NYl.js → HeaderGithubStar-C71yS5fY.js} +1 -1
  19. package/dashboard/dist/assets/{HoverTooltip-xu93BCaJ.js → HoverTooltip-nJQ-bK5U.js} +1 -1
  20. package/dashboard/dist/assets/{IpCheckPage-CpkJr3km.js → IpCheckPage-CTwXZRZk.js} +1 -1
  21. package/dashboard/dist/assets/{LandingPage-Eyn9uYxu.js → LandingPage--GOHgrB4.js} +2 -2
  22. package/dashboard/dist/assets/{LeaderboardAvatar-CkmxdKjb.js → LeaderboardAvatar-B7SjpjnT.js} +1 -1
  23. package/dashboard/dist/assets/{LeaderboardPage-CKIkMDP1.js → LeaderboardPage-BmExdKSM.js} +2 -2
  24. package/dashboard/dist/assets/{LeaderboardProfileModal-X9M1rppQ.js → LeaderboardProfileModal-C5cQqviO.js} +3 -3
  25. package/dashboard/dist/assets/{LeaderboardProfilePage-CIl5kkOV.js → LeaderboardProfilePage-DJ-09rX6.js} +1 -1
  26. package/dashboard/dist/assets/{LimitsPage-B4knUk-Q.js → LimitsPage-CazL_F1h.js} +1 -1
  27. package/dashboard/dist/assets/{LocalOnlyNotice-Dn6VNOeU.js → LocalOnlyNotice-K3aCR52T.js} +1 -1
  28. package/dashboard/dist/assets/{LoginCard-C7PuEJfF.js → LoginCard-_FbeoBO0.js} +1 -1
  29. package/dashboard/dist/assets/{LoginModal-DniAEAmY.js → LoginModal-CYXuWlcp.js} +1 -1
  30. package/dashboard/dist/assets/{LoginPage-CQGtpRcn.js → LoginPage-NgvQXPTx.js} +1 -1
  31. package/dashboard/dist/assets/{PetPage-CuWgQq4k.js → PetPage-CQ1aHdDU.js} +1 -1
  32. package/dashboard/dist/assets/{PopoverPopup-DGzNxyIb.js → PopoverPopup-BH948Enq.js} +1 -1
  33. package/dashboard/dist/assets/{ProviderIcon-DQaFWAeK.js → ProviderIcon-CTBbzd0x.js} +1 -1
  34. package/dashboard/dist/assets/{ResetPasswordPage-DChkikDi.js → ResetPasswordPage-GCsv0PKq.js} +1 -1
  35. package/dashboard/dist/assets/{SegmentedControl-B5dAFpXY.js → SegmentedControl-D-a1T6Ay.js} +1 -1
  36. package/dashboard/dist/assets/{Select-yR95Ye8E.js → Select-BuBpeT1X.js} +1 -1
  37. package/dashboard/dist/assets/{SelectItemText-D0HFmSxi.js → SelectItemText-BJl0lY5n.js} +1 -1
  38. package/dashboard/dist/assets/{ServiceStatusPage-BIOYCpJC.js → ServiceStatusPage-Xz-rDYxA.js} +1 -1
  39. package/dashboard/dist/assets/{SessionsPage-CgMiH2OU.js → SessionsPage-BvJjRxbT.js} +1 -1
  40. package/dashboard/dist/assets/{SettingsPage-C8RyB9Ix.js → SettingsPage-CDrrA4Z_.js} +2 -2
  41. package/dashboard/dist/assets/{SkillsPage-DECls0UK.js → SkillsPage-C3YDKdBr.js} +1 -1
  42. package/dashboard/dist/assets/{TokenGalaxy-Bq7myuhW.js → TokenGalaxy-CwBN1Nw2.js} +1 -1
  43. package/dashboard/dist/assets/{ToolbarRootContext-B6Vylv9F.js → ToolbarRootContext-2RKWzsAn.js} +1 -1
  44. package/dashboard/dist/assets/{TrendMonitor-BKIz_wQr.js → TrendMonitor-CrCYxmL5.js} +1 -1
  45. package/dashboard/dist/assets/{WidgetsPage-nzeiYO4K.js → WidgetsPage-CdJhuvNK.js} +1 -1
  46. package/dashboard/dist/assets/{WrappedPage-BAmyIzRK.js → WrappedPage-xQN9f_Lg.js} +1 -1
  47. package/dashboard/dist/assets/{__vite-browser-external-Bt5e-Los.js → __vite-browser-external-CMMzxCk7.js} +2 -2
  48. package/dashboard/dist/assets/{agent-logos-4obZkQVl.js → agent-logos-fd9xH1K3.js} +1 -1
  49. package/dashboard/dist/assets/{arrow-up-right-CY1_kE5T.js → arrow-up-right-DWTEaioI.js} +1 -1
  50. package/dashboard/dist/assets/{check-BxviipT2.js → check-D7d6q9Tz.js} +1 -1
  51. package/dashboard/dist/assets/{composite-2hzXjsh4.js → composite-xFyWluZ9.js} +1 -1
  52. package/dashboard/dist/assets/{copy-CfMNihj_.js → copy-BlQDmjZB.js} +1 -1
  53. package/dashboard/dist/assets/{download-DZzFxl-w.js → download-CCvNpDTW.js} +1 -1
  54. package/dashboard/dist/assets/{external-link-CQuz6Zgz.js → external-link-D3CFEoOU.js} +1 -1
  55. package/dashboard/dist/assets/{flame-VeZV_lsg.js → flame-BVD3QAGl.js} +1 -1
  56. package/dashboard/dist/assets/{format-tokens-Ja_zmwX2.js → format-tokens-BeU_fDKc.js} +1 -1
  57. package/dashboard/dist/assets/{icons-DkgZ7tvc.js → icons-DT5tCQC8.js} +1 -1
  58. package/dashboard/dist/assets/{index-BvEF22jP.js → index-7Rxzbfye.js} +1 -1
  59. package/dashboard/dist/assets/{index-CrhRL4Df.js → index-CB5EF37x.js} +1 -1
  60. package/dashboard/dist/assets/{index-BN84EpDx.js → index-CuRJmltu.js} +1 -1
  61. package/dashboard/dist/assets/{info-Br_ApCog.js → info-Ct8mnVg8.js} +1 -1
  62. package/dashboard/dist/assets/{link-2-DWCwqx7W.js → link-2-BkEYcjI7.js} +1 -1
  63. package/dashboard/dist/assets/{loader-circle-C90Vw-cp.js → loader-circle-Cwlqvkcz.js} +1 -1
  64. package/dashboard/dist/assets/{maximize-2-CpX7FEW3.js → maximize-2-Bfi31lVA.js} +1 -1
  65. package/dashboard/dist/assets/{modifiers.esm-BawFoZCU.js → modifiers.esm-DC5Ku6C4.js} +1 -1
  66. package/dashboard/dist/assets/{monitor-smartphone-BKl8Af4G.js → monitor-smartphone-CjsPxNBN.js} +1 -1
  67. package/dashboard/dist/assets/{plus-0tGsqhX-.js → plus-CgM_CX0H.js} +1 -1
  68. package/dashboard/dist/assets/{provider-display-BaoN5oxN.js → provider-display-TEnGljXd.js} +1 -1
  69. package/dashboard/dist/assets/{react-hi31R77i.js → react-CwlX45ob.js} +1 -1
  70. package/dashboard/dist/assets/{search-BVlP62JL.js → search-CKtoGzmW.js} +1 -1
  71. package/dashboard/dist/assets/{skills-api-B6OC9Ae6.js → skills-api-DuBly_gc.js} +1 -1
  72. package/dashboard/dist/assets/{sortable.esm-CUEUZVOz.js → sortable.esm-BNsp-WHM.js} +1 -1
  73. package/dashboard/dist/assets/{store-DKMSwePW.js → store-BTs6kZtj.js} +1 -1
  74. package/dashboard/dist/assets/{terminal-nBcu5xGC.js → terminal-DPMN8gR5.js} +1 -1
  75. package/dashboard/dist/assets/{trash-BK5kjpsC.js → trash-BDR38M5I.js} +1 -1
  76. package/dashboard/dist/assets/{use-community-stats-CJxOcXiQ.js → use-community-stats-Deg7skO9.js} +1 -1
  77. package/dashboard/dist/assets/{use-latest-request-guard-DOd1FZ5E.js → use-latest-request-guard-Bs2kD7b1.js} +1 -1
  78. package/dashboard/dist/assets/{use-limits-display-prefs-X1zw8WNj.js → use-limits-display-prefs-BgdguDzu.js} +1 -1
  79. package/dashboard/dist/assets/{use-ordered-list-Bv-QAuvj.js → use-ordered-list-ezT84-W6.js} +1 -1
  80. package/dashboard/dist/assets/use-reduced-motion-TNdjFH8O.js +1 -0
  81. package/dashboard/dist/assets/{use-session-efficiency-pref-Dykjc4jE.js → use-session-efficiency-pref-CTxl79WJ.js} +1 -1
  82. package/dashboard/dist/assets/{use-transform-38jb3h3B.js → use-transform-BpIPybsm.js} +1 -1
  83. package/dashboard/dist/assets/{use-usage-limits-2qMzPRSo.js → use-usage-limits-ts6E8fNZ.js} +1 -1
  84. package/dashboard/dist/assets/{useCurrency-ljHbvu9k.js → useCurrency-e-C23rLv.js} +1 -1
  85. package/dashboard/dist/assets/{useTokenFormat-Dp98mQOv.js → useTokenFormat-D_LHEY77.js} +1 -1
  86. package/dashboard/dist/assets/{zap-BkzmS0sj.js → zap-CjrBTjSn.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/init.js +2 -3
  93. package/src/commands/status.js +2 -5
  94. package/src/commands/sync.js +2 -5
  95. package/src/lib/install-resolver.js +31 -0
  96. package/src/lib/pricing/seed-snapshot.json +1 -1
  97. package/src/lib/rollout.js +43 -0
  98. package/dashboard/dist/assets/DialogDescription-DmyWlOfj.js +0 -1
  99. package/dashboard/dist/assets/use-reduced-motion-CeRLYRBr.js +0 -1
@@ -55,6 +55,13 @@ const CLAUDE_MEM_OBSERVER_PROJECT_REF =
55
55
  "https://local.tokentracker/claude-mem/observer-sessions";
56
56
  const PROJECT_ABSENT_CONTEXT_RESCAN_MS = 24 * 60 * 60 * 1000;
57
57
  const DEFAULT_CODEX_COLD_SKIP_RECENT_DAYS = 2;
58
+ // A rollout keeps its creation date in its name, but Codex appends to a session
59
+ // for as long as it stays open, so a file dated Monday can still be growing on
60
+ // Thursday. Cold files younger than this are stat'ed every sync and re-read when
61
+ // they grew past the cursor (#592); older ones stay stat-free and rely on the
62
+ // daily cold-scan audit, which bounds the per-sync cost on machines with tens of
63
+ // thousands of rollouts.
64
+ const DEFAULT_CODEX_COLD_GROWTH_STAT_DAYS = 30;
58
65
  const FILE_METADATA_CONCURRENCY = 32;
59
66
 
60
67
  async function mapConcurrent(items, concurrency, mapper) {
@@ -701,6 +708,7 @@ async function filterColdCodexRolloutFiles({
701
708
  auditDue = false,
702
709
  nowMs = Date.now(),
703
710
  recentDays = DEFAULT_CODEX_COLD_SKIP_RECENT_DAYS,
711
+ growthStatDays = DEFAULT_CODEX_COLD_GROWTH_STAT_DAYS,
704
712
  diagnostics = null,
705
713
  } = {}) {
706
714
  const files = Array.isArray(rolloutFiles) ? rolloutFiles : [];
@@ -785,6 +793,29 @@ async function filterColdCodexRolloutFiles({
785
793
  continue;
786
794
  }
787
795
 
796
+ // Neither check below notices an append: the day-level skip keys off the
797
+ // directory stat, which only changes when a file is added or removed, and
798
+ // the cursor offset records how far we read, not how big the file is. A
799
+ // still-open session whose name-date fell out of the active window was
800
+ // therefore skipped without ever being looked at, and its later days only
801
+ // surfaced at the daily audit (#592). Stat recent cold files and keep any
802
+ // that grew past the cursor; the parse resumes from the offset.
803
+ if (isRecentColdRollout(rolloutDate, { nowMs, growthStatDays })) {
804
+ await loadCodexCursorDirectory(filePath);
805
+ if (cursorStoreRestarted) break;
806
+ const readOffset = Number(cursors.files[filePath]?.offset);
807
+ if (Number.isFinite(readOffset) && readOffset > 0) {
808
+ const stat = await fs.stat(filePath).catch(() => null);
809
+ if (syncDiagnostics) {
810
+ syncDiagnostics.cold_growth_stats = Number(syncDiagnostics.cold_growth_stats || 0) + 1;
811
+ }
812
+ if (stat && stat.size > readOffset) {
813
+ out.push(entry);
814
+ continue;
815
+ }
816
+ }
817
+ }
818
+
788
819
  if (await canSkipCodexDirectory(filePath)) {
789
820
  skipped += 1;
790
821
  continue;
@@ -842,6 +873,18 @@ async function filterColdCodexRolloutFiles({
842
873
  return { rolloutFiles: out, skipped, restarted: false };
843
874
  }
844
875
 
876
+ // True when the rollout's name-date (local calendar day) is within
877
+ // `growthStatDays` of now. The date in the name is the session's creation day.
878
+ function isRecentColdRollout(rolloutDate, { nowMs = Date.now(), growthStatDays } = {}) {
879
+ const days = Number(growthStatDays);
880
+ if (!Number.isFinite(days) || days <= 0) return false;
881
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(String(rolloutDate || ""));
882
+ if (!match) return false;
883
+ const created = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3])).getTime();
884
+ if (!Number.isFinite(created)) return false;
885
+ return nowMs - created <= days * 24 * 60 * 60 * 1000;
886
+ }
887
+
845
888
  function activeCodexRolloutDates(
846
889
  rolloutFiles,
847
890
  { nowMs = Date.now(), recentDays = DEFAULT_CODEX_COLD_SKIP_RECENT_DAYS } = {},
@@ -1 +0,0 @@
1
- import{r as n,v as a}from"./__vite-browser-external-Bt5e-Los.js";import{u as p}from"./DialogTitle-Dv2oDI5S.js";import{u as c}from"./composite-2hzXjsh4.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};
@@ -1 +0,0 @@
1
- import{r as o}from"./__vite-browser-external-Bt5e-Los.js";import{h as r,i as t,p as s}from"./react-hi31R77i.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};