tokentracker-cli 0.90.2 → 0.91.0

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 (105) hide show
  1. package/README.de.md +5 -4
  2. package/README.ja.md +4 -3
  3. package/README.ko.md +4 -3
  4. package/README.md +5 -4
  5. package/README.zh-CN.md +4 -3
  6. package/dashboard/dist/assets/{AchievementBadge-BJl0ibLg.js → AchievementBadge-iyRg0rYF.js} +1 -1
  7. package/dashboard/dist/assets/{AchievementsPage-CV6aNe3g.js → AchievementsPage-CkBm3bN3.js} +2 -2
  8. package/dashboard/dist/assets/{AchievementsSection-DxLHu9EV.js → AchievementsSection-a4Z7VtlP.js} +1 -1
  9. package/dashboard/dist/assets/{BadgeDetailModal-ConoHhIL.js → BadgeDetailModal-DHTN0Ky6.js} +1 -1
  10. package/dashboard/dist/assets/{Card-C_VQxG6G.js → Card-CdygGEqz.js} +1 -1
  11. package/dashboard/dist/assets/{ClawdAnimated-_Mfn4MnU.js → ClawdAnimated-D-Z823Nc.js} +1 -1
  12. package/dashboard/dist/assets/{CommandPalette-CCRCnYY9.js → CommandPalette-VGkj8w2X.js} +1 -1
  13. package/dashboard/dist/assets/{CommunityStatsModal-DuICwpdM.js → CommunityStatsModal-BDT4xqfF.js} +1 -1
  14. package/dashboard/dist/assets/{ConfirmModal-CI27robt.js → ConfirmModal-BIKv4AlL.js} +1 -1
  15. package/dashboard/dist/assets/{Controls-Cwu0gtgj.js → Controls-BkZVm9t1.js} +1 -1
  16. package/dashboard/dist/assets/{DashboardPage-GsFvPie1.js → DashboardPage-BFkdjUdd.js} +1 -1
  17. package/dashboard/dist/assets/{DevicePage-BSK76UQE.js → DevicePage-BGw861bu.js} +1 -1
  18. package/dashboard/dist/assets/{DialogClose-BXQlPs02.js → DialogClose-CSEl6ru8.js} +1 -1
  19. package/dashboard/dist/assets/DialogDescription-DfNXnqay.js +1 -0
  20. package/dashboard/dist/assets/{DialogTitle-DyvhHV1-.js → DialogTitle-CWPdu5V-.js} +1 -1
  21. package/dashboard/dist/assets/{FadeIn-DaP6F4f8.js → FadeIn-CdCANtvs.js} +1 -1
  22. package/dashboard/dist/assets/{HeaderGithubStar-CKB5puCd.js → HeaderGithubStar-dQQnH85f.js} +1 -1
  23. package/dashboard/dist/assets/{HoverTooltip-BG6k61dF.js → HoverTooltip-CqJUI-WG.js} +1 -1
  24. package/dashboard/dist/assets/{IpCheckPage-Oqt1J9S2.js → IpCheckPage-BRqTXlSu.js} +1 -1
  25. package/dashboard/dist/assets/{LandingPage-45qoUn79.js → LandingPage-DhMTgDng.js} +2 -2
  26. package/dashboard/dist/assets/{LeaderboardAvatar-ZgXnaI_N.js → LeaderboardAvatar-BrGcByG1.js} +1 -1
  27. package/dashboard/dist/assets/{LeaderboardPage-C7E_LrFk.js → LeaderboardPage-BmdopPjo.js} +2 -2
  28. package/dashboard/dist/assets/{LeaderboardProfileModal-D6PUcj3b.js → LeaderboardProfileModal-DRZqPo-A.js} +3 -3
  29. package/dashboard/dist/assets/{LeaderboardProfilePage-VcC9DK_B.js → LeaderboardProfilePage-CTbC39KX.js} +1 -1
  30. package/dashboard/dist/assets/{LimitsPage-B9K0RFQD.js → LimitsPage-B7AuLq1S.js} +1 -1
  31. package/dashboard/dist/assets/{LocalOnlyNotice-BGsfKEM9.js → LocalOnlyNotice-DyIAspoq.js} +1 -1
  32. package/dashboard/dist/assets/{LoginCard-j5HVFRdP.js → LoginCard-LcOaKaCK.js} +1 -1
  33. package/dashboard/dist/assets/{LoginModal-N3pWGciC.js → LoginModal-D3bmr_jI.js} +1 -1
  34. package/dashboard/dist/assets/{LoginPage-TGgL0aXF.js → LoginPage-D7SgmEhZ.js} +1 -1
  35. package/dashboard/dist/assets/{PetPage-DPi7OT_4.js → PetPage-5A3Q0zlw.js} +1 -1
  36. package/dashboard/dist/assets/{PopoverPopup-BkptZaPd.js → PopoverPopup-ajEhdI8m.js} +1 -1
  37. package/dashboard/dist/assets/{ProviderIcon-zaz4nwxI.js → ProviderIcon-C4yuu9FG.js} +1 -1
  38. package/dashboard/dist/assets/{ResetPasswordPage-DQ4qdjBD.js → ResetPasswordPage-Bwbt8tH2.js} +1 -1
  39. package/dashboard/dist/assets/{SegmentedControl-CuTrxHXS.js → SegmentedControl-BSa5hMnN.js} +1 -1
  40. package/dashboard/dist/assets/{Select-_Txi2j1D.js → Select-kPKDGb7M.js} +1 -1
  41. package/dashboard/dist/assets/{SelectItemText-DVKhj-YN.js → SelectItemText-DNgLclTV.js} +1 -1
  42. package/dashboard/dist/assets/{ServiceStatusPage-ChflNSK0.js → ServiceStatusPage-C1j7rPDp.js} +1 -1
  43. package/dashboard/dist/assets/{SessionsPage-CHv6xK2J.js → SessionsPage-BgoKs_Yq.js} +1 -1
  44. package/dashboard/dist/assets/{SettingsPage-DkWAYALG.js → SettingsPage-BUaPftV0.js} +2 -2
  45. package/dashboard/dist/assets/{SkillsPage-DnTSlBl-.js → SkillsPage-C5GkzfWW.js} +1 -1
  46. package/dashboard/dist/assets/{TokenGalaxy-yAMCaU-k.js → TokenGalaxy-DZffAa_0.js} +1 -1
  47. package/dashboard/dist/assets/{ToolbarRootContext-BeDIqB0k.js → ToolbarRootContext-CuLP92P_.js} +1 -1
  48. package/dashboard/dist/assets/{TrendMonitor-BthLuYwy.js → TrendMonitor-BKLAKJmT.js} +1 -1
  49. package/dashboard/dist/assets/{WidgetsPage-y_qKZ9Gv.js → WidgetsPage-BUhiCpcq.js} +1 -1
  50. package/dashboard/dist/assets/{WrappedPage-BGUGI6vk.js → WrappedPage-sNFISXVG.js} +1 -1
  51. package/dashboard/dist/assets/{__vite-browser-external-CRvi_9hb.js → __vite-browser-external-Cyw7ZNtj.js} +2 -2
  52. package/dashboard/dist/assets/{agent-logos-DwHwn_cb.js → agent-logos-Bwf2YFHS.js} +1 -1
  53. package/dashboard/dist/assets/{arrow-up-right-CjEesyJI.js → arrow-up-right-BcRkt7hr.js} +1 -1
  54. package/dashboard/dist/assets/{check-KDrH1gwE.js → check-qhr4U2S5.js} +1 -1
  55. package/dashboard/dist/assets/{chevron-right-DseqFm-D.js → chevron-right-iLGEAP7_.js} +1 -1
  56. package/dashboard/dist/assets/{copy-CFJ1QKAQ.js → copy-BhEPCq-q.js} +1 -1
  57. package/dashboard/dist/assets/{download-BQUNGUdh.js → download-D7O1ZzsX.js} +1 -1
  58. package/dashboard/dist/assets/{external-link-BCEOLLH2.js → external-link-CY2kK2hC.js} +1 -1
  59. package/dashboard/dist/assets/{flame-BigtoGg2.js → flame-D4FPuBNn.js} +1 -1
  60. package/dashboard/dist/assets/{format-tokens-CS1GUpAV.js → format-tokens-CVHJ7Hdh.js} +1 -1
  61. package/dashboard/dist/assets/{icons-DpZ1a8Ct.js → icons-B_-51UXa.js} +1 -1
  62. package/dashboard/dist/assets/{index-DFU_yVc5.js → index-ClVWat-1.js} +1 -1
  63. package/dashboard/dist/assets/{index-lGAAw1Rv.js → index-Djv-aJy0.js} +1 -1
  64. package/dashboard/dist/assets/{index-DqkwD6eO.js → index-cwdr25Zm.js} +1 -1
  65. package/dashboard/dist/assets/{info-Br_jtGtO.js → info-DOab0eZz.js} +1 -1
  66. package/dashboard/dist/assets/{limits-providers-CkqO1LMQ.js → limits-providers-CESm2d6B.js} +1 -1
  67. package/dashboard/dist/assets/{link-2-D-nAhkk-.js → link-2-B4LMsC4m.js} +1 -1
  68. package/dashboard/dist/assets/{loader-circle-CuNPuDRR.js → loader-circle-CPx6wpSn.js} +1 -1
  69. package/dashboard/dist/assets/{maximize-2-dlvwitfg.js → maximize-2-C9z8mbdn.js} +1 -1
  70. package/dashboard/dist/assets/{modifiers.esm-ORha_lPI.js → modifiers.esm-5xRgAl_R.js} +1 -1
  71. package/dashboard/dist/assets/{monitor-smartphone-CI2qvlMB.js → monitor-smartphone-B9HAspdR.js} +1 -1
  72. package/dashboard/dist/assets/{provider-display-BNCdZ83n.js → provider-display-C0NS0EvN.js} +2 -2
  73. package/dashboard/dist/assets/{react-Dy9iWvqT.js → react-C45OGvDd.js} +1 -1
  74. package/dashboard/dist/assets/{search-Do7tzc3k.js → search-Bg1qyEdz.js} +1 -1
  75. package/dashboard/dist/assets/{skills-api-CJ-8EFac.js → skills-api-a8pi7UTd.js} +1 -1
  76. package/dashboard/dist/assets/{sortable.esm-BKQg8NHC.js → sortable.esm-CtPp8cFA.js} +1 -1
  77. package/dashboard/dist/assets/{store-SUT-n3k3.js → store-b8zXM1yr.js} +1 -1
  78. package/dashboard/dist/assets/{terminal-BX4DOxd6.js → terminal-CPf0K0Fn.js} +1 -1
  79. package/dashboard/dist/assets/{trash-2-VERlG247.js → trash-2-uorzBdA0.js} +1 -1
  80. package/dashboard/dist/assets/{use-community-stats-BX6_XUdu.js → use-community-stats-DaVwywsM.js} +1 -1
  81. package/dashboard/dist/assets/{use-limits-display-prefs-BpC3tYRw.js → use-limits-display-prefs-UIzz7PJ3.js} +1 -1
  82. package/dashboard/dist/assets/{use-ordered-list-CX-LREPo.js → use-ordered-list-C2XOfMH3.js} +1 -1
  83. package/dashboard/dist/assets/use-reduced-motion-CNyMWBog.js +1 -0
  84. package/dashboard/dist/assets/{use-session-efficiency-pref-B1G8hzVM.js → use-session-efficiency-pref-D5KHakYg.js} +1 -1
  85. package/dashboard/dist/assets/{use-transform-DNCqLbUD.js → use-transform-Cfo_2_id.js} +1 -1
  86. package/dashboard/dist/assets/{use-usage-limits-Cvbvf30m.js → use-usage-limits-CANTpxrA.js} +1 -1
  87. package/dashboard/dist/assets/{useCurrency-EciQmJkm.js → useCurrency-CjvWekKH.js} +1 -1
  88. package/dashboard/dist/assets/{useScrollLock-sLkmam8C.js → useScrollLock-ChQdbuJg.js} +1 -1
  89. package/dashboard/dist/assets/{useTokenFormat-nb9na-2-.js → useTokenFormat-4MY04JPl.js} +1 -1
  90. package/dashboard/dist/assets/{zap-BQOWCMov.js → zap-BSXHFUBb.js} +1 -1
  91. package/dashboard/dist/index.html +26 -24
  92. package/dashboard/dist/ip-check.html +1 -1
  93. package/dashboard/dist/leaderboard.html +1 -1
  94. package/dashboard/dist/llms.txt +3 -2
  95. package/dashboard/dist/share.html +1 -1
  96. package/package.json +2 -2
  97. package/src/commands/init.js +10 -0
  98. package/src/commands/status.js +13 -0
  99. package/src/commands/sync.js +32 -0
  100. package/src/lib/pricing/index.js +6 -1
  101. package/src/lib/pricing/matcher.js +1 -0
  102. package/src/lib/pricing/seed-snapshot.json +1 -1
  103. package/src/lib/rollout.js +123 -13
  104. package/dashboard/dist/assets/DialogDescription-M_lg2jhD.js +0 -1
  105. package/dashboard/dist/assets/use-reduced-motion-DbebVWBw.js +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tokentracker-cli",
3
- "version": "0.90.2",
4
- "description": "Local-first AI coding token usage and cost tracker for 31 tools, with a dashboard, desktop pet, widgets, achievements, and native macOS/Windows apps.",
3
+ "version": "0.91.0",
4
+ "description": "Local-first AI coding token usage and cost tracker for 32 tools, with a dashboard, desktop pet, widgets, achievements, and native macOS/Windows apps.",
5
5
  "main": "src/cli.js",
6
6
  "bin": {
7
7
  "tokentracker-cli": "bin/tracker.js",
@@ -65,6 +65,7 @@ const {
65
65
  resolveOmpAgentDir,
66
66
  resolvePiAgentDir,
67
67
  piAgentDirCollidesWithOmp,
68
+ resolvePrimeAgentDir,
68
69
  resolveAnythingllmDbPath,
69
70
  resolveReasonixHome,
70
71
  resolveTraeStoragePath,
@@ -121,6 +122,7 @@ const SUPPORTED_PROVIDERS = [
121
122
  "Grok Build",
122
123
  "oh-my-pi",
123
124
  "pi",
125
+ "Prime Agent",
124
126
  "Craft Agents",
125
127
  "Reasonix",
126
128
  "Kilo CLI",
@@ -710,6 +712,14 @@ async function applyIntegrationSetup({
710
712
  }
711
713
  }
712
714
 
715
+ // Prime Agent: metadata-only passive reader — no hook installation needed.
716
+ {
717
+ const primeAgentDir = resolvePrimeAgentDir(process.env);
718
+ if (primeAgentDir && fssync.existsSync(path.join(primeAgentDir, "sessions"))) {
719
+ summary.push({ label: "Prime Agent", status: "detected", detail: "Passive usage reader (no hook needed)" });
720
+ }
721
+ }
722
+
713
723
  // Craft Agents: passive reader — no hook installation needed.
714
724
  // TokenTracker reads ~/.craft-agent/workspaces/<id>/sessions/**/session.jsonl
715
725
  // (and any user-relocated workspace listed in ~/.craft-agent/config.json).
@@ -60,6 +60,8 @@ const {
60
60
  resolvePiSessionFiles,
61
61
  resolvePiAgentDir,
62
62
  piAgentDirCollidesWithOmp,
63
+ resolvePrimeAgentSessionFiles,
64
+ resolvePrimeAgentDir,
63
65
  resolveCraftSessionFiles,
64
66
  resolveCraftConfigDir,
65
67
  resolveReasonixHome,
@@ -427,6 +429,11 @@ async function cmdStatus(argv = []) {
427
429
  const piInstalled = !piCollides && Boolean(piAgentDir) && fssync.existsSync(path.join(piAgentDir, "sessions"));
428
430
  const piFiles = piInstalled ? resolvePiSessionFiles(process.env) : [];
429
431
 
432
+ // Prime Agent — passive scan only (no hooks).
433
+ const primeAgentDir = resolvePrimeAgentDir(process.env);
434
+ const primeAgentInstalled = Boolean(primeAgentDir) && fssync.existsSync(path.join(primeAgentDir, "sessions"));
435
+ const primeAgentFiles = primeAgentInstalled ? resolvePrimeAgentSessionFiles(process.env) : [];
436
+
430
437
  // Craft Agents — passive scan only (no hooks).
431
438
  const craftConfigDir = resolveCraftConfigDir(process.env);
432
439
  const craftInstalled = Boolean(craftConfigDir && fssync.existsSync(craftConfigDir));
@@ -873,6 +880,9 @@ async function cmdStatus(argv = []) {
873
880
  pi: piInstalled
874
881
  ? { installed: true, files: piFiles.length }
875
882
  : { installed: false },
883
+ prime_agent: primeAgentInstalled
884
+ ? { installed: true, files: primeAgentFiles.length }
885
+ : { installed: false },
876
886
  craft: craftInstalled
877
887
  ? { installed: true, files: craftFiles.length }
878
888
  : { installed: false },
@@ -1014,6 +1024,9 @@ async function cmdStatus(argv = []) {
1014
1024
  piInstalled
1015
1025
  ? `- pi: passive reader (${piFiles.length} session jsonl file${piFiles.length !== 1 ? "s" : ""} found)`
1016
1026
  : null,
1027
+ primeAgentInstalled
1028
+ ? `- Prime Agent: passive reader (${primeAgentFiles.length} session jsonl file${primeAgentFiles.length !== 1 ? "s" : ""} found)`
1029
+ : null,
1017
1030
  craftInstalled
1018
1031
  ? `- Craft Agents: passive reader (${craftFiles.length} session jsonl file${craftFiles.length !== 1 ? "s" : ""} found)`
1019
1032
  : null,
@@ -78,6 +78,8 @@ const {
78
78
  resolvePiSessionFiles,
79
79
  parsePiIncremental,
80
80
  piAgentDirCollidesWithOmp,
81
+ resolvePrimeAgentSessionFiles,
82
+ parsePrimeAgentIncremental,
81
83
  resolveCraftSessionFiles,
82
84
  parseCraftIncremental,
83
85
  resolveReasonixTelemetryFiles,
@@ -2079,6 +2081,34 @@ async function cmdSync(argv, context = {}) {
2079
2081
  }
2080
2082
  }
2081
2083
 
2084
+ // ── Prime Agent — passive ~/.prime/agent/sessions/*.jsonl usage reader ──
2085
+ let primeAgentResult = { recordsProcessed: 0, eventsAggregated: 0, bucketsQueued: 0 };
2086
+ const primeAgentFiles = sourceAllowed("prime-agent")
2087
+ ? mergeBothFileSources({ resolveFiles: resolvePrimeAgentSessionFiles, env: process.env })
2088
+ : [];
2089
+ if (primeAgentFiles.length > 0) {
2090
+ if (progress?.enabled) {
2091
+ progress.start(`Parsing Prime Agent ${renderBar(0)} | buckets 0`);
2092
+ }
2093
+ try {
2094
+ primeAgentResult = await parsePrimeAgentIncremental({
2095
+ sessionFiles: primeAgentFiles,
2096
+ cursors,
2097
+ queuePath,
2098
+ env: process.env,
2099
+ onProgress: (p) => {
2100
+ if (!progress?.enabled) return;
2101
+ const pct = p.total > 0 ? p.index / p.total : 1;
2102
+ progress.update(
2103
+ `Parsing Prime Agent ${renderBar(pct)} ${formatNumber(p.index)}/${formatNumber(p.total)} files | buckets ${formatNumber(p.bucketsQueued)}`,
2104
+ );
2105
+ },
2106
+ });
2107
+ } catch (err) {
2108
+ warnProviderParseFailure("Prime Agent", err, opts);
2109
+ }
2110
+ }
2111
+
2082
2112
  // ── Craft Agents (passive ~/.craft-agent + workspaces session.jsonl reader) ──
2083
2113
  let craftResult = { recordsProcessed: 0, eventsAggregated: 0, bucketsQueued: 0 };
2084
2114
  const craftFiles = sourceAllowed("craft")
@@ -2563,6 +2593,7 @@ async function cmdSync(argv, context = {}) {
2563
2593
  workbuddyResult.recordsProcessed +
2564
2594
  ompResult.recordsProcessed +
2565
2595
  piResult.recordsProcessed +
2596
+ primeAgentResult.recordsProcessed +
2566
2597
  craftResult.recordsProcessed +
2567
2598
  reasonixResult.recordsProcessed +
2568
2599
  grokResult.recordsProcessed +
@@ -2597,6 +2628,7 @@ async function cmdSync(argv, context = {}) {
2597
2628
  workbuddyResult.bucketsQueued +
2598
2629
  ompResult.bucketsQueued +
2599
2630
  piResult.bucketsQueued +
2631
+ primeAgentResult.bucketsQueued +
2600
2632
  craftResult.bucketsQueued +
2601
2633
  reasonixResult.bucketsQueued +
2602
2634
  grokResult.bucketsQueued +
@@ -15,7 +15,12 @@ const {
15
15
  const { loadLitellmData } = require("./litellm-fetcher");
16
16
 
17
17
  const ZERO_PRICING = { input: 0, output: 0, cache_read: 0, cache_write: 0 };
18
- const PI_SUBSCRIPTION_SOURCES = new Set(["pi-github-copilot", "pi-copilot"]);
18
+ const PI_SUBSCRIPTION_SOURCES = new Set([
19
+ "pi-github-copilot",
20
+ "pi-copilot",
21
+ "prime-agent-github-copilot",
22
+ "prime-agent-copilot",
23
+ ]);
19
24
  const SEED_SNAPSHOT_PATH = path.resolve(__dirname, "seed-snapshot.json");
20
25
 
21
26
  // Sync seed load. Done at require-time so callers that haven't awaited
@@ -172,6 +172,7 @@ const SOURCE_MODEL_NORMALIZERS = {
172
172
  claude: normalizeClaudeModel,
173
173
  cursor: normalizeCursorModel,
174
174
  "pi-anthropic": normalizeClaudeModel,
175
+ "prime-agent-anthropic": normalizeClaudeModel,
175
176
  zed: normalizeZedModel,
176
177
  workbuddy: normalizeWorkbuddyModel,
177
178
  };