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.
- package/README.md +15 -0
- package/dashboard/dist/assets/{AchievementBadge-BGA-HT_B.js → AchievementBadge-ClUmGxBJ.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-CtRh5AjH.js → AchievementsPage-BB0DFE3m.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-BarRcKaN.js → AchievementsSection-BMCSk63s.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-Bg0BDAN2.js → BadgeDetailModal-DzJtvuKO.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-By9J3-dn.js → BotAnimated-BviEasW4.js} +1 -1
- package/dashboard/dist/assets/{Card-CIoJYi2j.js → Card-BoHr-wLc.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-Dkvc2xe8.js → ClawdAnimated-Bwm8BfqY.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-BssDtHRl.js → CommandPalette-Rb0Gfcg9.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-CQrgLlDb.js → CommunityStatsModal-Ck7R7Q-d.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-C3hBPgYc.js → ConfirmModal-52Fu9wOi.js} +1 -1
- package/dashboard/dist/assets/{Controls-BSW6a1HS.js → Controls-YlGr187A.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-Dhv7fejy.js → DashboardPage-BRim2Rt6.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-D5eZn0wo.js → DevicePage-3mmhzfgd.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-BltQpaJo.js → DialogClose-D1KfBYUS.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-BhWwQSSg.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-CVddcRPZ.js → DialogTitle-DKye2nJK.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-goPv73MT.js → FadeIn-mJp_ZFst.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-BDBrrkzt.js → HeaderGithubStar-B2R_aqp9.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-qyMezXOs.js → HoverTooltip-ElY02914.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-Ces8JIPb.js → IpCheckPage-CNzPUe3x.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-B2TmLGno.js → LandingPage-L25-CxXg.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-CVVRoNua.js → LeaderboardAvatar-BT7x5wAP.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-xtt-bOY8.js → LeaderboardPage-bPce9gOU.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-BM4d_I_r.js → LeaderboardProfileModal-DPrFGAp6.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-BWqhFLQX.js → LeaderboardProfilePage-j2D1pwYO.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-BZL4Pcl8.js → LimitsPage-CSED1kBx.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-D4gnOEJj.js → LocalOnlyNotice-D6OERWez.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-CB17FQ5w.js → LoginCard-HgmRdIn8.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-BI-O1rH4.js → LoginModal-BSlEmKOV.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-DnGzsvJ4.js → LoginPage-HQAhowvh.js} +1 -1
- package/dashboard/dist/assets/{PetPage-NRnIKMaJ.js → PetPage-DnbYfu-z.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-DHoK6UJZ.js → PopoverPopup-DnyVdfB8.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-BTkdx9o2.js → ProviderIcon-D8kgkZlR.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-C6K0w318.js → ResetPasswordPage-ChtXGykP.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-gEoWioBE.js → SegmentedControl-dHUpXqFk.js} +1 -1
- package/dashboard/dist/assets/{Select-CI-qtEYu.js → Select-C0tpjNiq.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-q-yhzzjw.js → SelectItemText-C3G_w14k.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-C4xD1CEe.js → ServiceStatusPage-D6x4e1r8.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-CS0Yun2z.js → SessionsPage-DZH1QMWd.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-GVY_ktz4.js → SettingsPage-DGmDb2R4.js} +2 -2
- package/dashboard/dist/assets/{SkillsPage-COPRL95O.js → SkillsPage-ChloCHPa.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-Czi0Ic48.js → TokenGalaxy-DOC9wlkv.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BZkTiBJB.js → ToolbarRootContext-BB_d-qdY.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-CnIsuxV-.js → TrendMonitor-DVVzYdc7.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-OdX_Fsul.js → WidgetsPage-DHVSyU0i.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-h9N63-F8.js → WrappedPage-BDi28nRt.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-BFNWaGsk.js → __vite-browser-external-Bnc5aBhq.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-BDiPxrST.js → agent-logos-BiGvZiLq.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-DtFQUeJG.js → arrow-up-right-SvD82rok.js} +1 -1
- package/dashboard/dist/assets/{check-C35onaNL.js → check-jL5XErEW.js} +1 -1
- package/dashboard/dist/assets/{composite-qxBzts0W.js → composite-DM6geXPA.js} +1 -1
- package/dashboard/dist/assets/{copy-D_D71TLc.js → copy-Dy_GIzj2.js} +1 -1
- package/dashboard/dist/assets/{download-DMQI2hQe.js → download-BW_FS7nX.js} +1 -1
- package/dashboard/dist/assets/{external-link-CemM4dWf.js → external-link-2RIovvCT.js} +1 -1
- package/dashboard/dist/assets/{flame-CIvk0SP5.js → flame-CIRJIxxA.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-D3JSvcFl.js → format-tokens-CT8ahEK4.js} +1 -1
- package/dashboard/dist/assets/{icons-Ccf5W0AL.js → icons-7J1WD0C-.js} +1 -1
- package/dashboard/dist/assets/{index-C8Wri_HI.js → index-D3iSSyYr.js} +1 -1
- package/dashboard/dist/assets/{index-CFXmD_KX.js → index-Ddb2A6Mx.js} +1 -1
- package/dashboard/dist/assets/{index-Brd2evyz.js → index-_vJl6sF7.js} +1 -1
- package/dashboard/dist/assets/{info-CafrKEG8.js → info-BjVWcOOC.js} +1 -1
- package/dashboard/dist/assets/{link-2-Ds-9Nzlp.js → link-2-CyRWnHWE.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-DA4I55-V.js → loader-circle-DUpG5zah.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-CjMPt5kU.js → maximize-2-BVGCRkFZ.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-DIxTS09h.js → modifiers.esm-CZI7rED4.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-IZpIOxn3.js → monitor-smartphone-DfBtd01T.js} +1 -1
- package/dashboard/dist/assets/{plus-vbLFNs70.js → plus-CvbLCvjV.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BAu_UIfV.js → provider-display-DC46GLrv.js} +1 -1
- package/dashboard/dist/assets/{react-Djb4VGKb.js → react-mYr3J8Vw.js} +1 -1
- package/dashboard/dist/assets/{search-Ct6LY9Ke.js → search-CFaS1rSj.js} +1 -1
- package/dashboard/dist/assets/{skills-api-BnGI2gEp.js → skills-api-B1N6seFa.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-CjCGd6g5.js → sortable.esm-BE2GiQaC.js} +1 -1
- package/dashboard/dist/assets/{store-CBxkOqRe.js → store-DwBbExah.js} +1 -1
- package/dashboard/dist/assets/{terminal-Dlpdp5Az.js → terminal-Bl2BuO9x.js} +1 -1
- package/dashboard/dist/assets/{trash-pxUSKv66.js → trash-D8beb27Y.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-tHaixRIw.js → use-community-stats-DJG1DsXR.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-Cs44WPfL.js → use-latest-request-guard-DYK8iyOM.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-Dw56PXWy.js → use-limits-display-prefs-BGmcFVX3.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-DpLx8oLV.js → use-ordered-list-Cqia_VIq.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-CmCk9Sb5.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-BN3FtBvr.js → use-session-efficiency-pref-Mj3OeVGZ.js} +1 -1
- package/dashboard/dist/assets/{use-transform-C4nTGgzb.js → use-transform-D4BQIBHx.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-Dmwdc1yo.js → use-usage-limits-BFrO7Mtq.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-DSc3A_Ih.js → useCurrency-CYJavR2h.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-BHjcMgm8.js → useTokenFormat-CKruI7SP.js} +1 -1
- package/dashboard/dist/assets/{zap-BE8i_wu2.js → zap-a82fG76c.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/status.js +57 -2
- package/src/commands/sync.js +90 -11
- package/src/lib/codex-context-breakdown.js +3 -1
- package/src/lib/diagnostics.js +20 -1
- package/src/lib/doctor.js +30 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/scan-roots.js +277 -0
- package/src/lib/session-analytics.js +98 -16
- package/dashboard/dist/assets/DialogDescription-Cof52Icj.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-DrlJ9X6p.js +0 -1
package/src/lib/diagnostics.js
CHANGED
|
@@ -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
|
|
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
|
|