tokentracker-cli 1.1.4 → 1.1.5

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 (102) hide show
  1. package/README.md +15 -0
  2. package/dashboard/dist/assets/{AchievementBadge-BGA-HT_B.js → AchievementBadge-ClUmGxBJ.js} +1 -1
  3. package/dashboard/dist/assets/{AchievementsPage-CtRh5AjH.js → AchievementsPage-BB0DFE3m.js} +2 -2
  4. package/dashboard/dist/assets/{AchievementsSection-BarRcKaN.js → AchievementsSection-BMCSk63s.js} +1 -1
  5. package/dashboard/dist/assets/{BadgeDetailModal-Bg0BDAN2.js → BadgeDetailModal-DzJtvuKO.js} +1 -1
  6. package/dashboard/dist/assets/{BotAnimated-By9J3-dn.js → BotAnimated-BviEasW4.js} +1 -1
  7. package/dashboard/dist/assets/{Card-CIoJYi2j.js → Card-BoHr-wLc.js} +1 -1
  8. package/dashboard/dist/assets/{ClawdAnimated-Dkvc2xe8.js → ClawdAnimated-Bwm8BfqY.js} +2 -2
  9. package/dashboard/dist/assets/{CommandPalette-BssDtHRl.js → CommandPalette-Rb0Gfcg9.js} +1 -1
  10. package/dashboard/dist/assets/{CommunityStatsModal-CQrgLlDb.js → CommunityStatsModal-Ck7R7Q-d.js} +1 -1
  11. package/dashboard/dist/assets/{ConfirmModal-C3hBPgYc.js → ConfirmModal-52Fu9wOi.js} +1 -1
  12. package/dashboard/dist/assets/{Controls-BSW6a1HS.js → Controls-YlGr187A.js} +1 -1
  13. package/dashboard/dist/assets/{DashboardPage-Dhv7fejy.js → DashboardPage-BRim2Rt6.js} +1 -1
  14. package/dashboard/dist/assets/{DevicePage-D5eZn0wo.js → DevicePage-3mmhzfgd.js} +1 -1
  15. package/dashboard/dist/assets/{DialogClose-BltQpaJo.js → DialogClose-D1KfBYUS.js} +1 -1
  16. package/dashboard/dist/assets/DialogDescription-BhWwQSSg.js +1 -0
  17. package/dashboard/dist/assets/{DialogTitle-CVddcRPZ.js → DialogTitle-DKye2nJK.js} +1 -1
  18. package/dashboard/dist/assets/{FadeIn-goPv73MT.js → FadeIn-mJp_ZFst.js} +1 -1
  19. package/dashboard/dist/assets/{HeaderGithubStar-BDBrrkzt.js → HeaderGithubStar-B2R_aqp9.js} +1 -1
  20. package/dashboard/dist/assets/{HoverTooltip-qyMezXOs.js → HoverTooltip-ElY02914.js} +1 -1
  21. package/dashboard/dist/assets/{IpCheckPage-Ces8JIPb.js → IpCheckPage-CNzPUe3x.js} +1 -1
  22. package/dashboard/dist/assets/{LandingPage-B2TmLGno.js → LandingPage-L25-CxXg.js} +2 -2
  23. package/dashboard/dist/assets/{LeaderboardAvatar-CVVRoNua.js → LeaderboardAvatar-BT7x5wAP.js} +1 -1
  24. package/dashboard/dist/assets/{LeaderboardPage-xtt-bOY8.js → LeaderboardPage-bPce9gOU.js} +2 -2
  25. package/dashboard/dist/assets/{LeaderboardProfileModal-BM4d_I_r.js → LeaderboardProfileModal-DPrFGAp6.js} +3 -3
  26. package/dashboard/dist/assets/{LeaderboardProfilePage-BWqhFLQX.js → LeaderboardProfilePage-j2D1pwYO.js} +1 -1
  27. package/dashboard/dist/assets/{LimitsPage-BZL4Pcl8.js → LimitsPage-CSED1kBx.js} +1 -1
  28. package/dashboard/dist/assets/{LocalOnlyNotice-D4gnOEJj.js → LocalOnlyNotice-D6OERWez.js} +1 -1
  29. package/dashboard/dist/assets/{LoginCard-CB17FQ5w.js → LoginCard-HgmRdIn8.js} +1 -1
  30. package/dashboard/dist/assets/{LoginModal-BI-O1rH4.js → LoginModal-BSlEmKOV.js} +1 -1
  31. package/dashboard/dist/assets/{LoginPage-DnGzsvJ4.js → LoginPage-HQAhowvh.js} +1 -1
  32. package/dashboard/dist/assets/{PetPage-NRnIKMaJ.js → PetPage-DnbYfu-z.js} +1 -1
  33. package/dashboard/dist/assets/{PopoverPopup-DHoK6UJZ.js → PopoverPopup-DnyVdfB8.js} +1 -1
  34. package/dashboard/dist/assets/{ProviderIcon-BTkdx9o2.js → ProviderIcon-D8kgkZlR.js} +1 -1
  35. package/dashboard/dist/assets/{ResetPasswordPage-C6K0w318.js → ResetPasswordPage-ChtXGykP.js} +1 -1
  36. package/dashboard/dist/assets/{SegmentedControl-gEoWioBE.js → SegmentedControl-dHUpXqFk.js} +1 -1
  37. package/dashboard/dist/assets/{Select-CI-qtEYu.js → Select-C0tpjNiq.js} +1 -1
  38. package/dashboard/dist/assets/{SelectItemText-q-yhzzjw.js → SelectItemText-C3G_w14k.js} +1 -1
  39. package/dashboard/dist/assets/{ServiceStatusPage-C4xD1CEe.js → ServiceStatusPage-D6x4e1r8.js} +1 -1
  40. package/dashboard/dist/assets/{SessionsPage-CS0Yun2z.js → SessionsPage-DZH1QMWd.js} +1 -1
  41. package/dashboard/dist/assets/{SettingsPage-GVY_ktz4.js → SettingsPage-DGmDb2R4.js} +2 -2
  42. package/dashboard/dist/assets/{SkillsPage-COPRL95O.js → SkillsPage-ChloCHPa.js} +1 -1
  43. package/dashboard/dist/assets/{TokenGalaxy-Czi0Ic48.js → TokenGalaxy-DOC9wlkv.js} +1 -1
  44. package/dashboard/dist/assets/{ToolbarRootContext-BZkTiBJB.js → ToolbarRootContext-BB_d-qdY.js} +1 -1
  45. package/dashboard/dist/assets/{TrendMonitor-CnIsuxV-.js → TrendMonitor-DVVzYdc7.js} +1 -1
  46. package/dashboard/dist/assets/{WidgetsPage-OdX_Fsul.js → WidgetsPage-DHVSyU0i.js} +1 -1
  47. package/dashboard/dist/assets/{WrappedPage-h9N63-F8.js → WrappedPage-BDi28nRt.js} +1 -1
  48. package/dashboard/dist/assets/{__vite-browser-external-BFNWaGsk.js → __vite-browser-external-Bnc5aBhq.js} +2 -2
  49. package/dashboard/dist/assets/{agent-logos-BDiPxrST.js → agent-logos-BiGvZiLq.js} +1 -1
  50. package/dashboard/dist/assets/{arrow-up-right-DtFQUeJG.js → arrow-up-right-SvD82rok.js} +1 -1
  51. package/dashboard/dist/assets/{check-C35onaNL.js → check-jL5XErEW.js} +1 -1
  52. package/dashboard/dist/assets/{composite-qxBzts0W.js → composite-DM6geXPA.js} +1 -1
  53. package/dashboard/dist/assets/{copy-D_D71TLc.js → copy-Dy_GIzj2.js} +1 -1
  54. package/dashboard/dist/assets/{download-DMQI2hQe.js → download-BW_FS7nX.js} +1 -1
  55. package/dashboard/dist/assets/{external-link-CemM4dWf.js → external-link-2RIovvCT.js} +1 -1
  56. package/dashboard/dist/assets/{flame-CIvk0SP5.js → flame-CIRJIxxA.js} +1 -1
  57. package/dashboard/dist/assets/{format-tokens-D3JSvcFl.js → format-tokens-CT8ahEK4.js} +1 -1
  58. package/dashboard/dist/assets/{icons-Ccf5W0AL.js → icons-7J1WD0C-.js} +1 -1
  59. package/dashboard/dist/assets/{index-C8Wri_HI.js → index-D3iSSyYr.js} +1 -1
  60. package/dashboard/dist/assets/{index-CFXmD_KX.js → index-Ddb2A6Mx.js} +1 -1
  61. package/dashboard/dist/assets/{index-Brd2evyz.js → index-_vJl6sF7.js} +1 -1
  62. package/dashboard/dist/assets/{info-CafrKEG8.js → info-BjVWcOOC.js} +1 -1
  63. package/dashboard/dist/assets/{link-2-Ds-9Nzlp.js → link-2-CyRWnHWE.js} +1 -1
  64. package/dashboard/dist/assets/{loader-circle-DA4I55-V.js → loader-circle-DUpG5zah.js} +1 -1
  65. package/dashboard/dist/assets/{maximize-2-CjMPt5kU.js → maximize-2-BVGCRkFZ.js} +1 -1
  66. package/dashboard/dist/assets/{modifiers.esm-DIxTS09h.js → modifiers.esm-CZI7rED4.js} +1 -1
  67. package/dashboard/dist/assets/{monitor-smartphone-IZpIOxn3.js → monitor-smartphone-DfBtd01T.js} +1 -1
  68. package/dashboard/dist/assets/{plus-vbLFNs70.js → plus-CvbLCvjV.js} +1 -1
  69. package/dashboard/dist/assets/{provider-display-BAu_UIfV.js → provider-display-DC46GLrv.js} +1 -1
  70. package/dashboard/dist/assets/{react-Djb4VGKb.js → react-mYr3J8Vw.js} +1 -1
  71. package/dashboard/dist/assets/{search-Ct6LY9Ke.js → search-CFaS1rSj.js} +1 -1
  72. package/dashboard/dist/assets/{skills-api-BnGI2gEp.js → skills-api-B1N6seFa.js} +1 -1
  73. package/dashboard/dist/assets/{sortable.esm-CjCGd6g5.js → sortable.esm-BE2GiQaC.js} +1 -1
  74. package/dashboard/dist/assets/{store-CBxkOqRe.js → store-DwBbExah.js} +1 -1
  75. package/dashboard/dist/assets/{terminal-Dlpdp5Az.js → terminal-Bl2BuO9x.js} +1 -1
  76. package/dashboard/dist/assets/{trash-pxUSKv66.js → trash-D8beb27Y.js} +1 -1
  77. package/dashboard/dist/assets/{use-community-stats-tHaixRIw.js → use-community-stats-DJG1DsXR.js} +1 -1
  78. package/dashboard/dist/assets/{use-latest-request-guard-Cs44WPfL.js → use-latest-request-guard-DYK8iyOM.js} +1 -1
  79. package/dashboard/dist/assets/{use-limits-display-prefs-Dw56PXWy.js → use-limits-display-prefs-BGmcFVX3.js} +1 -1
  80. package/dashboard/dist/assets/{use-ordered-list-DpLx8oLV.js → use-ordered-list-Cqia_VIq.js} +1 -1
  81. package/dashboard/dist/assets/use-reduced-motion-CmCk9Sb5.js +1 -0
  82. package/dashboard/dist/assets/{use-session-efficiency-pref-BN3FtBvr.js → use-session-efficiency-pref-Mj3OeVGZ.js} +1 -1
  83. package/dashboard/dist/assets/{use-transform-C4nTGgzb.js → use-transform-D4BQIBHx.js} +1 -1
  84. package/dashboard/dist/assets/{use-usage-limits-Dmwdc1yo.js → use-usage-limits-BFrO7Mtq.js} +1 -1
  85. package/dashboard/dist/assets/{useCurrency-DSc3A_Ih.js → useCurrency-CYJavR2h.js} +1 -1
  86. package/dashboard/dist/assets/{useTokenFormat-BHjcMgm8.js → useTokenFormat-CKruI7SP.js} +1 -1
  87. package/dashboard/dist/assets/{zap-BE8i_wu2.js → zap-a82fG76c.js} +1 -1
  88. package/dashboard/dist/index.html +1 -1
  89. package/dashboard/dist/ip-check.html +1 -1
  90. package/dashboard/dist/leaderboard.html +1 -1
  91. package/dashboard/dist/share.html +1 -1
  92. package/package.json +1 -1
  93. package/src/commands/status.js +57 -2
  94. package/src/commands/sync.js +90 -11
  95. package/src/lib/codex-context-breakdown.js +3 -1
  96. package/src/lib/diagnostics.js +20 -1
  97. package/src/lib/doctor.js +30 -0
  98. package/src/lib/pricing/seed-snapshot.json +1 -1
  99. package/src/lib/scan-roots.js +277 -0
  100. package/src/lib/session-analytics.js +98 -16
  101. package/dashboard/dist/assets/DialogDescription-Cof52Icj.js +0 -1
  102. package/dashboard/dist/assets/use-reduced-motion-DrlJ9X6p.js +0 -1
@@ -3,6 +3,7 @@ const path = require("node:path");
3
3
  const fs = require("node:fs/promises");
4
4
 
5
5
  const { readJson } = require("./fs");
6
+ const { resolveEnvRoot, resolveScanRoots } = require("./scan-roots");
6
7
  const { readCursorStateSummary } = require("./cursor-store");
7
8
  const { readCodexNotify, readEveryCodeNotify } = require("./codex-config");
8
9
  const { areClaudeUsageHooksConfigured, buildClaudeHookCommand } = require("./claude-config");
@@ -66,7 +67,7 @@ function resolveKiroCliDbPathInline(env, home) {
66
67
 
67
68
  async function collectTrackerDiagnostics({
68
69
  home = os.homedir(),
69
- codexHome = process.env.CODEX_HOME || path.join(home, ".codex"),
70
+ codexHome = resolveEnvRoot("codex", { env: process.env, home }) || path.join(home, ".codex"),
70
71
  codeHome = process.env.CODE_HOME || path.join(home, ".code"),
71
72
  } = {}) {
72
73
  const { trackerDir, binDir } = await resolveTrackerPaths({ home });
@@ -92,6 +93,20 @@ async function collectTrackerDiagnostics({
92
93
  path.join(home, ".grok");
93
94
 
94
95
  const config = await readJson(configPath);
96
+ // Extra scan roots (#657), resolved as sync does. Paths are home-redacted
97
+ // like every other entry in `paths`.
98
+ const scanRoots = resolveScanRoots({
99
+ home,
100
+ env: process.env,
101
+ config,
102
+ base: { codex: [codexHome], claude: [path.join(home, ".claude")] },
103
+ });
104
+ const describeScanRoots = (entries) => entries.map((entry) => ({
105
+ path: redactValue(entry.path, home),
106
+ origin: entry.origin,
107
+ exists: entry.exists,
108
+ error: entry.error || null,
109
+ }));
95
110
  const cursorSummary = await readCursorStateSummary({ trackerDir, cursorsPath });
96
111
  const cursors = cursorSummary.cursors;
97
112
  const queueState = (await readJson(queueStatePath)) || { offset: 0 };
@@ -217,6 +232,10 @@ async function collectTrackerDiagnostics({
217
232
  merge_policy:
218
233
  "Kiro IDE and Kiro CLI both emit source='kiro' in queue.jsonl so token, cost, heatmap, and leaderboard aggregations merge transparently. Use this block to distinguish sub-path contributions.",
219
234
  },
235
+ scan_roots: {
236
+ codex: describeScanRoots(scanRoots.codex),
237
+ claude: describeScanRoots(scanRoots.claude),
238
+ },
220
239
  config: {
221
240
  base_url: typeof config?.baseUrl === "string" ? config.baseUrl : null,
222
241
  device_token: config?.deviceToken ? "set" : "unset",
package/src/lib/doctor.js CHANGED
@@ -337,6 +337,36 @@ function buildDiagnosticsChecks(diagnostics) {
337
337
  });
338
338
  }
339
339
 
340
+ // Extra scan roots (#657): surface CODEX_HOME / CLAUDE_CONFIG_DIR / config
341
+ // roots in the human-readable report and warn when a configured root is not
342
+ // on disk — a silently missing root is the difference between "no usage"
343
+ // and "not scanned". Installs without extras get no additional line.
344
+ const scanRoots = diagnostics?.scan_roots;
345
+ if (scanRoots && typeof scanRoots === "object") {
346
+ const extras = [];
347
+ for (const provider of ["codex", "claude"]) {
348
+ for (const entry of Array.isArray(scanRoots[provider]) ? scanRoots[provider] : []) {
349
+ if (!entry || entry.origin === "native") continue;
350
+ extras.push({ provider, ...entry });
351
+ }
352
+ }
353
+ if (extras.length > 0) {
354
+ const missing = extras.filter((entry) => !entry.exists);
355
+ const describe = (list) => list
356
+ .map((entry) => `${entry.provider} ${entry.path}${entry.error ? ` (unreadable: ${entry.error})` : ""}`)
357
+ .join(", ");
358
+ checks.push({
359
+ id: "scan_roots.extra",
360
+ status: missing.length > 0 ? "warn" : "ok",
361
+ detail: missing.length > 0
362
+ ? `${missing.length} of ${extras.length} extra scan root(s) unavailable: ${describe(missing)}`
363
+ : `${extras.length} extra scan root(s) present: ${describe(extras)}`,
364
+ critical: false,
365
+ meta: { roots: extras },
366
+ });
367
+ }
368
+ }
369
+
340
370
  return checks;
341
371
  }
342
372