tokentracker-cli 0.63.0 → 0.63.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.
Files changed (41) hide show
  1. package/dashboard/dist/assets/{ActivityHeatmap-CkJIcWzw.js → ActivityHeatmap-3rWViAnK.js} +1 -1
  2. package/dashboard/dist/assets/{Card-yLBo3TPK.js → Card-CjtoUN-V.js} +1 -1
  3. package/dashboard/dist/assets/{DashboardPage-kR7KrvS7.js → DashboardPage-C8Zm5caR.js} +1 -1
  4. package/dashboard/dist/assets/{DevicePage-jh6HO_Sr.js → DevicePage-DWgc0ITo.js} +1 -1
  5. package/dashboard/dist/assets/{DialogTitle-D9Ik_gvc.js → DialogTitle-BOWoDnVq.js} +1 -1
  6. package/dashboard/dist/assets/{FadeIn-C4EDHmX4.js → FadeIn-CK1EopuS.js} +1 -1
  7. package/dashboard/dist/assets/{HeaderGithubStar-CJ1KBbIb.js → HeaderGithubStar-C1CldHWg.js} +1 -1
  8. package/dashboard/dist/assets/{IpCheckPage-vMPzCKhT.js → IpCheckPage-DKiEo4LO.js} +1 -1
  9. package/dashboard/dist/assets/{LandingPage-CPXGM_d3.js → LandingPage-BCzXJP9I.js} +1 -1
  10. package/dashboard/dist/assets/{LeaderboardAvatar-DF8a3ppM.js → LeaderboardAvatar-Dw-KfosP.js} +1 -1
  11. package/dashboard/dist/assets/{LeaderboardPage-D4SbAwT8.js → LeaderboardPage-XQBrmlgA.js} +3 -3
  12. package/dashboard/dist/assets/{LeaderboardProfileModal-BG9JVFBq.js → LeaderboardProfileModal-8xPG0MRj.js} +1 -1
  13. package/dashboard/dist/assets/{LeaderboardProfilePage-BMd6sNT9.js → LeaderboardProfilePage-DHa73U-g.js} +1 -1
  14. package/dashboard/dist/assets/{LimitsPage-DukMAnn1.js → LimitsPage-BTF8cZ-P.js} +1 -1
  15. package/dashboard/dist/assets/{LocalOnlyNotice-DrmW8xfr.js → LocalOnlyNotice-BqLH4XMA.js} +1 -1
  16. package/dashboard/dist/assets/{LoginPage-3i9PG3UX.js → LoginPage-OZf1-OnV.js} +1 -1
  17. package/dashboard/dist/assets/{PopoverPopup-BhGTdXgG.js → PopoverPopup-BQ03eBHT.js} +1 -1
  18. package/dashboard/dist/assets/{ResetPasswordPage-ClHd4Qcj.js → ResetPasswordPage-CqSU4VnK.js} +1 -1
  19. package/dashboard/dist/assets/{Select-DFu3_H6P.js → Select-C2miulxl.js} +1 -1
  20. package/dashboard/dist/assets/{SelectItemText-fc4n0xEf.js → SelectItemText-CvU6qFNt.js} +1 -1
  21. package/dashboard/dist/assets/{SettingsPage-DYuS-mL2.js → SettingsPage-DYiO30s5.js} +1 -1
  22. package/dashboard/dist/assets/{SkillsPage-Bq4GiK2C.js → SkillsPage-DKHdur0w.js} +1 -1
  23. package/dashboard/dist/assets/{WidgetsPage-DtVlysKw.js → WidgetsPage-Dh_FKo1H.js} +1 -1
  24. package/dashboard/dist/assets/{WrappedPage-BoTb94i8.js → WrappedPage-BIdXJTOA.js} +1 -1
  25. package/dashboard/dist/assets/{agent-logos-CWH1ZjEy.js → agent-logos-CWBw3t4a.js} +1 -1
  26. package/dashboard/dist/assets/{arrow-up-right-Dz-ejaM3.js → arrow-up-right-D1Qv9-hJ.js} +1 -1
  27. package/dashboard/dist/assets/{download-BwyTu0h1.js → download-9hc1LZwP.js} +1 -1
  28. package/dashboard/dist/assets/{info-r1_Ohszh.js → info-Bw9sw3vW.js} +1 -1
  29. package/dashboard/dist/assets/{main-B8THj1x9.js → main-BN1NzjX3.js} +2 -2
  30. package/dashboard/dist/assets/{pencil-DWftrgh9.js → pencil-C8mN_ljR.js} +1 -1
  31. package/dashboard/dist/assets/{use-limits-display-prefs-DhH4ucKB.js → use-limits-display-prefs-CpHg_a82.js} +1 -1
  32. package/dashboard/dist/assets/{use-native-settings-CE-ExJHY.js → use-native-settings-BCMRmnLD.js} +1 -1
  33. package/dashboard/dist/assets/{use-usage-limits-BWqgtMqj.js → use-usage-limits-CVu3Jff0.js} +1 -1
  34. package/dashboard/dist/assets/{useCurrency-Cg2lR7Uw.js → useCurrency-3hjYtt-n.js} +1 -1
  35. package/dashboard/dist/assets/{useScrollLock-DVYU0_fs.js → useScrollLock-BNfQujzc.js} +1 -1
  36. package/dashboard/dist/index.html +1 -1
  37. package/dashboard/dist/share.html +1 -1
  38. package/package.json +1 -1
  39. package/src/lib/pricing/seed-snapshot.json +1 -1
  40. package/src/lib/rollout.js +44 -6
  41. package/src/lib/skills-manager.js +2 -2
@@ -147,9 +147,26 @@ async function parseRolloutIncremental({
147
147
  const key = filePath;
148
148
  const prev = cursors.files[key] || null;
149
149
  const inode = st.ino || 0;
150
- const startOffset = prev && prev.inode === inode ? prev.offset || 0 : 0;
151
- const lastTotal = prev && prev.inode === inode ? prev.lastTotal || null : null;
152
- const lastModel = prev && prev.inode === inode ? prev.lastModel || null : null;
150
+ const sameInode = prev && prev.inode === inode;
151
+ const prevOffset = sameInode ? prev.offset || 0 : 0;
152
+ const truncated = sameInode && prevOffset > st.size;
153
+ const startOffset = sameInode && !truncated ? prevOffset : 0;
154
+ const lastTotal = sameInode && !truncated ? prev.lastTotal || null : null;
155
+ const lastModel = sameInode && !truncated ? prev.lastModel || null : null;
156
+
157
+ if (!projectEnabled && sameInode && !truncated && startOffset >= st.size) {
158
+ if (cb) {
159
+ cb({
160
+ index: idx + 1,
161
+ total: totalFiles,
162
+ filePath,
163
+ filesProcessed,
164
+ eventsAggregated,
165
+ bucketsQueued: touchedBuckets.size,
166
+ });
167
+ }
168
+ continue;
169
+ }
153
170
 
154
171
  const projectContext = projectEnabled
155
172
  ? await resolveProjectContextForFile({
@@ -165,6 +182,7 @@ async function parseRolloutIncremental({
165
182
 
166
183
  const result = await parseRolloutFile({
167
184
  filePath,
185
+ fileStat: st,
168
186
  startOffset,
169
187
  lastTotal,
170
188
  lastModel,
@@ -267,7 +285,24 @@ async function parseClaudeIncremental({
267
285
  const key = filePath;
268
286
  const prev = cursors.files[key] || null;
269
287
  const inode = st.ino || 0;
270
- const startOffset = prev && prev.inode === inode ? prev.offset || 0 : 0;
288
+ const sameInode = prev && prev.inode === inode;
289
+ const prevOffset = sameInode ? prev.offset || 0 : 0;
290
+ const truncated = sameInode && prevOffset > st.size;
291
+ const startOffset = sameInode && !truncated ? prevOffset : 0;
292
+
293
+ if (!projectEnabled && sameInode && !truncated && startOffset >= st.size) {
294
+ if (cb) {
295
+ cb({
296
+ index: idx + 1,
297
+ total: totalFiles,
298
+ filePath,
299
+ filesProcessed,
300
+ eventsAggregated,
301
+ bucketsQueued: touchedBuckets.size,
302
+ });
303
+ }
304
+ continue;
305
+ }
271
306
 
272
307
  const projectContext = projectEnabled
273
308
  ? await resolveProjectContextForFile({
@@ -283,6 +318,7 @@ async function parseClaudeIncremental({
283
318
 
284
319
  const result = await parseClaudeFile({
285
320
  filePath,
321
+ fileStat: st,
286
322
  startOffset,
287
323
  hourlyState,
288
324
  touchedBuckets,
@@ -770,6 +806,7 @@ function codexSessionIdFromPath(filePath) {
770
806
 
771
807
  async function parseRolloutFile({
772
808
  filePath,
809
+ fileStat,
773
810
  startOffset,
774
811
  lastTotal,
775
812
  lastModel,
@@ -786,7 +823,7 @@ async function parseRolloutFile({
786
823
  seenCodexEvents,
787
824
  sessionId,
788
825
  }) {
789
- const st = await fs.stat(filePath);
826
+ const st = fileStat || (await fs.stat(filePath));
790
827
  const endOffset = st.size;
791
828
  if (startOffset >= endOffset) {
792
829
  return { endOffset, lastTotal, lastModel, eventsAggregated: 0 };
@@ -926,6 +963,7 @@ async function parseRolloutFile({
926
963
 
927
964
  async function parseClaudeFile({
928
965
  filePath,
966
+ fileStat,
929
967
  startOffset,
930
968
  hourlyState,
931
969
  touchedBuckets,
@@ -936,7 +974,7 @@ async function parseClaudeFile({
936
974
  projectKey,
937
975
  seenMessageHashes,
938
976
  }) {
939
- const st = await fs.stat(filePath).catch(() => null);
977
+ const st = fileStat || (await fs.stat(filePath).catch(() => null));
940
978
  if (!st || !st.isFile()) return { endOffset: startOffset, eventsAggregated: 0 };
941
979
 
942
980
  const endOffset = st.size;
@@ -577,8 +577,8 @@ function targetSkillPath(baseDir, directory) {
577
577
  const targetPath = path.resolve(root, safe);
578
578
  if (!pathStrictlyWithin(root, targetPath)) return null;
579
579
  try {
580
- const rootStat = fs.lstatSync(root);
581
- if (rootStat.isSymbolicLink() || !rootStat.isDirectory()) return null;
580
+ const rootStat = fs.statSync(root);
581
+ if (!rootStat.isDirectory()) return null;
582
582
  } catch (e) {
583
583
  if (e?.code !== "ENOENT") return null;
584
584
  }