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.
- package/README.de.md +5 -4
- package/README.ja.md +4 -3
- package/README.ko.md +4 -3
- package/README.md +5 -4
- package/README.zh-CN.md +4 -3
- package/dashboard/dist/assets/{AchievementBadge-BJl0ibLg.js → AchievementBadge-iyRg0rYF.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-CV6aNe3g.js → AchievementsPage-CkBm3bN3.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-DxLHu9EV.js → AchievementsSection-a4Z7VtlP.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-ConoHhIL.js → BadgeDetailModal-DHTN0Ky6.js} +1 -1
- package/dashboard/dist/assets/{Card-C_VQxG6G.js → Card-CdygGEqz.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-_Mfn4MnU.js → ClawdAnimated-D-Z823Nc.js} +1 -1
- package/dashboard/dist/assets/{CommandPalette-CCRCnYY9.js → CommandPalette-VGkj8w2X.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-DuICwpdM.js → CommunityStatsModal-BDT4xqfF.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-CI27robt.js → ConfirmModal-BIKv4AlL.js} +1 -1
- package/dashboard/dist/assets/{Controls-Cwu0gtgj.js → Controls-BkZVm9t1.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-GsFvPie1.js → DashboardPage-BFkdjUdd.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-BSK76UQE.js → DevicePage-BGw861bu.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-BXQlPs02.js → DialogClose-CSEl6ru8.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-DfNXnqay.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-DyvhHV1-.js → DialogTitle-CWPdu5V-.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-DaP6F4f8.js → FadeIn-CdCANtvs.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-CKB5puCd.js → HeaderGithubStar-dQQnH85f.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-BG6k61dF.js → HoverTooltip-CqJUI-WG.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-Oqt1J9S2.js → IpCheckPage-BRqTXlSu.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-45qoUn79.js → LandingPage-DhMTgDng.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-ZgXnaI_N.js → LeaderboardAvatar-BrGcByG1.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-C7E_LrFk.js → LeaderboardPage-BmdopPjo.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-D6PUcj3b.js → LeaderboardProfileModal-DRZqPo-A.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-VcC9DK_B.js → LeaderboardProfilePage-CTbC39KX.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-B9K0RFQD.js → LimitsPage-B7AuLq1S.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-BGsfKEM9.js → LocalOnlyNotice-DyIAspoq.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-j5HVFRdP.js → LoginCard-LcOaKaCK.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-N3pWGciC.js → LoginModal-D3bmr_jI.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-TGgL0aXF.js → LoginPage-D7SgmEhZ.js} +1 -1
- package/dashboard/dist/assets/{PetPage-DPi7OT_4.js → PetPage-5A3Q0zlw.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-BkptZaPd.js → PopoverPopup-ajEhdI8m.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-zaz4nwxI.js → ProviderIcon-C4yuu9FG.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-DQ4qdjBD.js → ResetPasswordPage-Bwbt8tH2.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-CuTrxHXS.js → SegmentedControl-BSa5hMnN.js} +1 -1
- package/dashboard/dist/assets/{Select-_Txi2j1D.js → Select-kPKDGb7M.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-DVKhj-YN.js → SelectItemText-DNgLclTV.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-ChflNSK0.js → ServiceStatusPage-C1j7rPDp.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-CHv6xK2J.js → SessionsPage-BgoKs_Yq.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-DkWAYALG.js → SettingsPage-BUaPftV0.js} +2 -2
- package/dashboard/dist/assets/{SkillsPage-DnTSlBl-.js → SkillsPage-C5GkzfWW.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-yAMCaU-k.js → TokenGalaxy-DZffAa_0.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BeDIqB0k.js → ToolbarRootContext-CuLP92P_.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-BthLuYwy.js → TrendMonitor-BKLAKJmT.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-y_qKZ9Gv.js → WidgetsPage-BUhiCpcq.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-BGUGI6vk.js → WrappedPage-sNFISXVG.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-CRvi_9hb.js → __vite-browser-external-Cyw7ZNtj.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-DwHwn_cb.js → agent-logos-Bwf2YFHS.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-CjEesyJI.js → arrow-up-right-BcRkt7hr.js} +1 -1
- package/dashboard/dist/assets/{check-KDrH1gwE.js → check-qhr4U2S5.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-DseqFm-D.js → chevron-right-iLGEAP7_.js} +1 -1
- package/dashboard/dist/assets/{copy-CFJ1QKAQ.js → copy-BhEPCq-q.js} +1 -1
- package/dashboard/dist/assets/{download-BQUNGUdh.js → download-D7O1ZzsX.js} +1 -1
- package/dashboard/dist/assets/{external-link-BCEOLLH2.js → external-link-CY2kK2hC.js} +1 -1
- package/dashboard/dist/assets/{flame-BigtoGg2.js → flame-D4FPuBNn.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-CS1GUpAV.js → format-tokens-CVHJ7Hdh.js} +1 -1
- package/dashboard/dist/assets/{icons-DpZ1a8Ct.js → icons-B_-51UXa.js} +1 -1
- package/dashboard/dist/assets/{index-DFU_yVc5.js → index-ClVWat-1.js} +1 -1
- package/dashboard/dist/assets/{index-lGAAw1Rv.js → index-Djv-aJy0.js} +1 -1
- package/dashboard/dist/assets/{index-DqkwD6eO.js → index-cwdr25Zm.js} +1 -1
- package/dashboard/dist/assets/{info-Br_jtGtO.js → info-DOab0eZz.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-CkqO1LMQ.js → limits-providers-CESm2d6B.js} +1 -1
- package/dashboard/dist/assets/{link-2-D-nAhkk-.js → link-2-B4LMsC4m.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-CuNPuDRR.js → loader-circle-CPx6wpSn.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-dlvwitfg.js → maximize-2-C9z8mbdn.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-ORha_lPI.js → modifiers.esm-5xRgAl_R.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-CI2qvlMB.js → monitor-smartphone-B9HAspdR.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BNCdZ83n.js → provider-display-C0NS0EvN.js} +2 -2
- package/dashboard/dist/assets/{react-Dy9iWvqT.js → react-C45OGvDd.js} +1 -1
- package/dashboard/dist/assets/{search-Do7tzc3k.js → search-Bg1qyEdz.js} +1 -1
- package/dashboard/dist/assets/{skills-api-CJ-8EFac.js → skills-api-a8pi7UTd.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-BKQg8NHC.js → sortable.esm-CtPp8cFA.js} +1 -1
- package/dashboard/dist/assets/{store-SUT-n3k3.js → store-b8zXM1yr.js} +1 -1
- package/dashboard/dist/assets/{terminal-BX4DOxd6.js → terminal-CPf0K0Fn.js} +1 -1
- package/dashboard/dist/assets/{trash-2-VERlG247.js → trash-2-uorzBdA0.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-BX6_XUdu.js → use-community-stats-DaVwywsM.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-BpC3tYRw.js → use-limits-display-prefs-UIzz7PJ3.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-CX-LREPo.js → use-ordered-list-C2XOfMH3.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-CNyMWBog.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-B1G8hzVM.js → use-session-efficiency-pref-D5KHakYg.js} +1 -1
- package/dashboard/dist/assets/{use-transform-DNCqLbUD.js → use-transform-Cfo_2_id.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-Cvbvf30m.js → use-usage-limits-CANTpxrA.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-EciQmJkm.js → useCurrency-CjvWekKH.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-sLkmam8C.js → useScrollLock-ChQdbuJg.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-nb9na-2-.js → useTokenFormat-4MY04JPl.js} +1 -1
- package/dashboard/dist/assets/{zap-BQOWCMov.js → zap-BSXHFUBb.js} +1 -1
- package/dashboard/dist/index.html +26 -24
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/llms.txt +3 -2
- package/dashboard/dist/share.html +1 -1
- package/package.json +2 -2
- package/src/commands/init.js +10 -0
- package/src/commands/status.js +13 -0
- package/src/commands/sync.js +32 -0
- package/src/lib/pricing/index.js +6 -1
- package/src/lib/pricing/matcher.js +1 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +123 -13
- package/dashboard/dist/assets/DialogDescription-M_lg2jhD.js +0 -1
- 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.
|
|
4
|
-
"description": "Local-first AI coding token usage and cost tracker for
|
|
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",
|
package/src/commands/init.js
CHANGED
|
@@ -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).
|
package/src/commands/status.js
CHANGED
|
@@ -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,
|
package/src/commands/sync.js
CHANGED
|
@@ -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 +
|
package/src/lib/pricing/index.js
CHANGED
|
@@ -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([
|
|
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
|
};
|