tokentracker-cli 1.3.13 → 1.3.14
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/dashboard/dist/assets/{AchievementBadge-DkNsd5tj.js → AchievementBadge-DJK8AWBF.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-Dr72Hcog.js → AchievementsPage-Cle78oKH.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-CkOdGlnD.js → AchievementsSection-BPqXDoPP.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DADLfBsK.js → BadgeDetailModal-HsH_Pwsu.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-k6u1GRzw.js → BotAnimated-BWy2-z4Q.js} +1 -1
- package/dashboard/dist/assets/{Card-Dk6s3h-P.js → Card-DPGBuBDb.js} +1 -1
- package/dashboard/dist/assets/{CloudCheckoutPage-DL0pvok0.js → CloudCheckoutPage-ohIQnIhe.js} +1 -1
- package/dashboard/dist/assets/{CloudPage-BizN1MZL.js → CloudPage-OYiiZ4c4.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-B2crDNlV.js → CommandPalette-BmDZmpMi.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-C6Rc5NME.js → CommunityStatsModal-L86uJgyp.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-BrxBQn4n.js → ConfirmModal-COQfPXos.js} +1 -1
- package/dashboard/dist/assets/{Controls-C2mEPI72.js → Controls-BkKlT6Dz.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-BomPd7nt.js → DashboardPage-3dlQBOjz.js} +1 -1
- package/dashboard/dist/assets/{DateRangePopover-Gz-N_D7O.js → DateRangePopover-D0UeP8ig.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-wmnNx9bd.js → DevicePage-K3CdWKaf.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-D1dzj_on.js → DialogClose-DKQ2ZVA0.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-MbuaPFlj.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-BBxNf3O8.js → DialogTitle-ufFnN-8D.js} +1 -1
- package/dashboard/dist/assets/{ElectricLogo-DCopeDc8.js → ElectricLogo-Bb79UnTo.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-DSndojVd.js → FadeIn-DlAKIU4I.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-BBAGbevf.js → HeaderGithubStar-CzwSyhEY.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-COD3xE9E.js → HoverTooltip-BEpwekkd.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-BtMWefop.js → IpCheckPage-C7kpZ9JX.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-DN2IVBw7.js → LandingPage-CfYk0Jzy.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardPage-DkJowsRI.js → LeaderboardPage-XgjAHwpy.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProBadge-CRRphJNs.js → LeaderboardProBadge-wSlqVjBb.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfileModal-WmZAsZx5.js → LeaderboardProfileModal-DaQrNYnu.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-DWHu-eOp.js → LeaderboardProfilePage-3SWjG8FQ.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-BRFAWm-1.js → LimitsPage-DvM57ri3.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-BjJ8N4Zc.js → LocalOnlyNotice-CY6eDJEk.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-CYmjHoYK.js → LoginCard-4bdpPQeD.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-DX1D9F8b.js → LoginModal-Bmw7-b3f.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-D7Ok7HiZ.js → LoginPage-CEI4nnlT.js} +1 -1
- package/dashboard/dist/assets/{PetPage-BYISPev2.js → PetPage-7Udtc9GY.js} +2 -2
- package/dashboard/dist/assets/{PopoverPopup-BlzqlKqF.js → PopoverPopup-r2BvRKLO.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-BuLwtYjj.js → ProviderIcon-Cy_pKLdw.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-BJRKclq9.js → ResetPasswordPage-QKUaLtO3.js} +1 -1
- package/dashboard/dist/assets/{Select-0YyBw95W.js → Select-BsUrn8Ui.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-CZKyxUjE.js → SelectItemText-Nis0uGZT.js} +1 -1
- package/dashboard/dist/assets/{SelfHostPage-C_Afofs-.js → SelfHostPage-DF8EzBEV.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-0KpLdpon.js → ServiceStatusPage-BYmKzI_v.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-YtSyWMd0.js → SessionsPage-BsCVe75l.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-Bm641_AH.js → SettingsPage-CIZ6WmNR.js} +3 -3
- package/dashboard/dist/assets/{SkillsPage-DNg-I2g_.js → SkillsPage-cwHyK0Hp.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-BMN7WiRH.js → TokenGalaxy-2S-ud67v.js} +1 -1
- package/dashboard/dist/assets/{TooltipPopup-BF56BHfc.js → TooltipPopup-GG7xjDOP.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-D0ea5xMA.js → TrendMonitor-CrbXrVMe.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-CIAoHmJG.js → WidgetsPage-HrhnI3C-.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-CC_57Zr2.js → WrappedPage-sm7UVFon.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-CPskAZuH.js → __vite-browser-external-C7JgMYNl.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-CcJUaB75.js → agent-logos-DGrrmPth.js} +1 -1
- package/dashboard/dist/assets/{arrow-left-CUiT31ZF.js → arrow-left-DOzsdmqR.js} +1 -1
- package/dashboard/dist/assets/{arrow-right-Tds6Mert.js → arrow-right-CHb0kJou.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-CGSxdyzM.js → arrow-up-right-CH8vEEN1.js} +1 -1
- package/dashboard/dist/assets/{calendar-days-Cc8AtMa3.js → calendar-days-_D5qnyH_.js} +1 -1
- package/dashboard/dist/assets/{check-CzJylQ9j.js → check-DZLesnNy.js} +1 -1
- package/dashboard/dist/assets/{chevron-down-DyG9JVDO.js → chevron-down-QL4xkUtL.js} +1 -1
- package/dashboard/dist/assets/{cloud-checkout-DP5zddOq.js → cloud-checkout-DiCcWJVl.js} +1 -1
- package/dashboard/dist/assets/{composite-I_1t6PMI.js → composite-DObGcQmb.js} +1 -1
- package/dashboard/dist/assets/{download-B_LvkErh.js → download-BKp8pusR.js} +1 -1
- package/dashboard/dist/assets/{external-link-DDA3ObBn.js → external-link-B3p_TVGc.js} +1 -1
- package/dashboard/dist/assets/{flame-BqpVWH_1.js → flame-Df9OTUym.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-D6QEOnGq.js → format-tokens-DXrEDEYs.js} +1 -1
- package/dashboard/dist/assets/{gift-BxbKo3W6.js → gift-DtWubiuR.js} +1 -1
- package/dashboard/dist/assets/{host-mode-o3qQY7tz.js → host-mode-C069A_hB.js} +1 -1
- package/dashboard/dist/assets/{icons-oGPZPj2n.js → icons-lB1kfROy.js} +1 -1
- package/dashboard/dist/assets/{index-BxtvQ1J7.js → index-D356L-jw.js} +1 -1
- package/dashboard/dist/assets/{index-DX--5z1g.js → index-DsXIWrJx.js} +1 -1
- package/dashboard/dist/assets/{index-Byukv2Nu.js → index-M5BiC0jx.js} +1 -1
- package/dashboard/dist/assets/{info-BoTz1AGZ.js → info-CSG8OkG4.js} +1 -1
- package/dashboard/dist/assets/{link-2-C09a122s.js → link-2-BkBGu7FX.js} +1 -1
- package/dashboard/dist/assets/{loader-circle--9U0axVe.js → loader-circle-BERDkbsP.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-Cra0I6RP.js → modifiers.esm-Ce5IvVw2.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-C1ENjmOu.js → monitor-smartphone-zKuoJldz.js} +1 -1
- package/dashboard/dist/assets/{play-NqPqbW59.js → play-C0x-pxft.js} +1 -1
- package/dashboard/dist/assets/{plus-DZP82JeP.js → plus-DJvks-CX.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BLo4k0bi.js → provider-display-C0e4tAFu.js} +1 -1
- package/dashboard/dist/assets/{react-CTLavVze.js → react-Bg0_YfGs.js} +1 -1
- package/dashboard/dist/assets/{safePolygon-Yw5w5Nw8.js → safePolygon-CptquMWZ.js} +1 -1
- package/dashboard/dist/assets/{search-DgV6mpMO.js → search-CLESf2Tg.js} +1 -1
- package/dashboard/dist/assets/{server-BybwAQjW.js → server-Cdwhp-2m.js} +1 -1
- package/dashboard/dist/assets/{shield-check-BiTYwWdT.js → shield-check-8U4XqmW3.js} +1 -1
- package/dashboard/dist/assets/{skills-api-Dx_Z8_SO.js → skills-api-ioDaxLLo.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-CmJnBLcr.js → sortable.esm-CEohF5EK.js} +1 -1
- package/dashboard/dist/assets/{store-DzNIKGzf.js → store-CyOeiGFE.js} +1 -1
- package/dashboard/dist/assets/{terminal-DPly-UPW.js → terminal-BjgwEAH-.js} +1 -1
- package/dashboard/dist/assets/{trash-DsL2ZAN5.js → trash-Skj6z7D1.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-CSTkXFed.js → use-community-stats-Cworqjzy.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-CbAXXNlU.js → use-latest-request-guard-DMVWXXHE.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-mDl6Yv_-.js → use-limits-display-prefs-DKJZcYfE.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-Bu2C3b20.js → use-native-settings-CQF4BLQl.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-DkGSfMTv.js → use-ordered-list-B9yoUGUU.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-DPUViCfp.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-B2GDf83h.js → use-session-efficiency-pref-K00bK2sQ.js} +1 -1
- package/dashboard/dist/assets/{use-transform-BVVduBPJ.js → use-transform-Cfw11yOU.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-fuzpbbVh.js → use-usage-limits-BE2dJXFd.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-CdDQzroJ.js → useCurrency-BW7y9Tdv.js} +1 -1
- package/dashboard/dist/assets/{usePositioner-b6XXJtxE.js → usePositioner-DhtQcPOC.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-90RoMQgI.js → useTokenFormat-BnvzUc-t.js} +1 -1
- package/dashboard/dist/assets/{zap-xEHzTW-T.js → zap-BQ3BR9On.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 +5 -1
- package/src/commands/sync.js +28 -1
- package/src/lib/jsonl-lines.js +34 -4
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +148 -52
- package/src/lib/session-analytics.js +11 -10
- package/src/lib/upload-queue.js +1 -1
- package/dashboard/dist/assets/DialogDescription-ChbOGLc_.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-6nBw3cR5.js +0 -1
package/src/commands/sync.js
CHANGED
|
@@ -145,6 +145,8 @@ const {
|
|
|
145
145
|
toUtcHalfHourStart,
|
|
146
146
|
totalsKey,
|
|
147
147
|
claudeMessageDedupKey,
|
|
148
|
+
hasZcodeCursorState,
|
|
149
|
+
resolveZcodeInstallPaths,
|
|
148
150
|
} = require("../lib/rollout");
|
|
149
151
|
const { computeClaudeGroundTruthBuckets } = require("../lib/claude-categorizer");
|
|
150
152
|
const { createProgress, renderBar, formatNumber, formatBytes } = require("../lib/progress");
|
|
@@ -1733,8 +1735,23 @@ async function cmdSync(argv, context = {}) {
|
|
|
1733
1735
|
const wslZcodeDir = process.platform === "win32" && wsl.shouldProbeWsl(process.env)
|
|
1734
1736
|
? wsl.discoverWslHome(".zcode")
|
|
1735
1737
|
: null;
|
|
1736
|
-
const
|
|
1738
|
+
const zcodeWslValue = wslZcodeDir ? path.join(wslZcodeDir, "cli", "db", "db.sqlite") : null;
|
|
1739
|
+
const zcodePaths = resolveZcodeInstallPaths(
|
|
1740
|
+
{ nativeValue: zcodeNativeValue, wslValue: zcodeWslValue }, process.env,
|
|
1741
|
+
{ cursors },
|
|
1742
|
+
);
|
|
1737
1743
|
if (zcodePaths.native || zcodePaths.wsl) {
|
|
1744
|
+
const mode = wsl.getWslMode(process.env);
|
|
1745
|
+
if (process.platform === "win32" && ["native-first", "wsl-first"].includes(mode) &&
|
|
1746
|
+
!cursors.zcodeInstallSelection && hasZcodeCursorState(cursors)) {
|
|
1747
|
+
// Preserve legacy ownership before a repair can clear old buckets,
|
|
1748
|
+
// even when the selected database currently has no rows to parse.
|
|
1749
|
+
cursors.zcodeInstallSelection = {
|
|
1750
|
+
mode, zcodeHome: process.env.ZCODE_HOME?.trim() || null,
|
|
1751
|
+
dbPath: zcodePaths.native || zcodePaths.wsl,
|
|
1752
|
+
};
|
|
1753
|
+
cursorStore.requiresCommit = true;
|
|
1754
|
+
}
|
|
1738
1755
|
if (progress?.enabled) progress.start(`Parsing ZCode ${renderBar(0)} | buckets 0`);
|
|
1739
1756
|
try {
|
|
1740
1757
|
const nativeUsageAvailable = [zcodePaths.native, zcodePaths.wsl]
|
|
@@ -1761,6 +1778,16 @@ async function cmdSync(argv, context = {}) {
|
|
|
1761
1778
|
cursors, getParams: (p) => ({ dbPath: p, readFn: readZcodeDbMessages, source: "zcode", cursorKey: "zcode" }),
|
|
1762
1779
|
queuePath, projectQueuePath, onProgress: makeProviderProgress("ZCode"),
|
|
1763
1780
|
});
|
|
1781
|
+
if (zcodeResult.recordsProcessed > 0) {
|
|
1782
|
+
if (process.platform === "win32" && ["native-first", "wsl-first"].includes(mode)) {
|
|
1783
|
+
cursors.zcodeInstallSelection = {
|
|
1784
|
+
mode, zcodeHome: process.env.ZCODE_HOME?.trim() || null,
|
|
1785
|
+
dbPath: zcodePaths.native || zcodePaths.wsl,
|
|
1786
|
+
};
|
|
1787
|
+
} else {
|
|
1788
|
+
delete cursors.zcodeInstallSelection;
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1764
1791
|
} catch (err) { warnProviderParseFailure("ZCode", err, opts); }
|
|
1765
1792
|
}
|
|
1766
1793
|
}
|
package/src/lib/jsonl-lines.js
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* only LF as a record separator so valid U+2028/U+2029 characters inside JSON
|
|
6
6
|
* strings remain part of the record. Reading raw bytes keeps byte budgets exact
|
|
7
7
|
* and lets malformed UTF-8 fail closed.
|
|
8
|
+
* Records longer than maxRecordBytes content bytes (excluding LF) are reported
|
|
9
|
+
* as { line: null, utf8Valid: null, oversized: true } without being buffered
|
|
10
|
+
* beyond the limit or decoded.
|
|
8
11
|
*/
|
|
9
12
|
class PhysicalJsonlLimitError extends Error {
|
|
10
13
|
constructor(maxPhysicalBytes) {
|
|
@@ -26,6 +29,7 @@ function decodePhysicalLine(buffer, { stripCr = false } = {}) {
|
|
|
26
29
|
async function* physicalJsonlRecords(input, {
|
|
27
30
|
invalidUtf8 = "throw",
|
|
28
31
|
maxPhysicalBytes = Infinity,
|
|
32
|
+
maxRecordBytes = Infinity,
|
|
29
33
|
} = {}) {
|
|
30
34
|
if (invalidUtf8 !== "throw" && invalidUtf8 !== "record") {
|
|
31
35
|
throw new TypeError(`unsupported invalidUtf8 policy: ${invalidUtf8}`);
|
|
@@ -33,8 +37,12 @@ async function* physicalJsonlRecords(input, {
|
|
|
33
37
|
const byteLimit = Number.isFinite(maxPhysicalBytes)
|
|
34
38
|
? Math.max(0, Number(maxPhysicalBytes))
|
|
35
39
|
: Infinity;
|
|
40
|
+
const recordLimit = Number.isFinite(maxRecordBytes)
|
|
41
|
+
? Math.max(0, Number(maxRecordBytes))
|
|
42
|
+
: Infinity;
|
|
36
43
|
const fragments = [];
|
|
37
44
|
let fragmentsBytes = 0;
|
|
45
|
+
let oversized = false;
|
|
38
46
|
let physicalBytesRead = 0;
|
|
39
47
|
|
|
40
48
|
for await (const value of input) {
|
|
@@ -53,6 +61,17 @@ async function* physicalJsonlRecords(input, {
|
|
|
53
61
|
if (physicalBytesRead + physicalBytes > byteLimit) {
|
|
54
62
|
throw new PhysicalJsonlLimitError(byteLimit);
|
|
55
63
|
}
|
|
64
|
+
const contentBytes = fragmentsBytes + fragment.length;
|
|
65
|
+
if (oversized || contentBytes > recordLimit) {
|
|
66
|
+
fragments.length = 0;
|
|
67
|
+
fragmentsBytes = 0;
|
|
68
|
+
oversized = false;
|
|
69
|
+
physicalBytesRead += physicalBytes;
|
|
70
|
+
start = newline + 1;
|
|
71
|
+
newline = chunk.indexOf(0x0a, start);
|
|
72
|
+
yield { line: null, utf8Valid: null, oversized: true, physicalBytes, terminated: true };
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
56
75
|
const lineBuffer = fragments.length === 0
|
|
57
76
|
? fragment
|
|
58
77
|
: Buffer.concat([...fragments, fragment], fragmentsBytes + fragment.length);
|
|
@@ -66,10 +85,10 @@ async function* physicalJsonlRecords(input, {
|
|
|
66
85
|
line = decodePhysicalLine(lineBuffer, { stripCr: true });
|
|
67
86
|
} catch (error) {
|
|
68
87
|
if (invalidUtf8 === "throw") throw error;
|
|
69
|
-
yield { line: null, utf8Valid: false, physicalBytes, terminated: true };
|
|
88
|
+
yield { line: null, utf8Valid: false, oversized: false, physicalBytes, terminated: true };
|
|
70
89
|
continue;
|
|
71
90
|
}
|
|
72
|
-
yield { line, utf8Valid: true, physicalBytes, terminated: true };
|
|
91
|
+
yield { line, utf8Valid: true, oversized: false, physicalBytes, terminated: true };
|
|
73
92
|
}
|
|
74
93
|
|
|
75
94
|
if (start < chunk.length) {
|
|
@@ -77,12 +96,23 @@ async function* physicalJsonlRecords(input, {
|
|
|
77
96
|
if (physicalBytesRead + fragmentsBytes + fragment.length > byteLimit) {
|
|
78
97
|
throw new PhysicalJsonlLimitError(byteLimit);
|
|
79
98
|
}
|
|
80
|
-
|
|
99
|
+
if (!oversized) {
|
|
100
|
+
if (fragmentsBytes + fragment.length > recordLimit) {
|
|
101
|
+
fragments.length = 0;
|
|
102
|
+
oversized = true;
|
|
103
|
+
} else {
|
|
104
|
+
fragments.push(Buffer.from(fragment));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
81
107
|
fragmentsBytes += fragment.length;
|
|
82
108
|
}
|
|
83
109
|
}
|
|
84
110
|
|
|
85
111
|
if (fragmentsBytes > 0) {
|
|
112
|
+
if (oversized) {
|
|
113
|
+
yield { line: null, utf8Valid: null, oversized: true, physicalBytes: fragmentsBytes, terminated: false };
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
86
116
|
const lineBuffer = fragments.length === 1
|
|
87
117
|
? fragments[0]
|
|
88
118
|
: Buffer.concat(fragments, fragmentsBytes);
|
|
@@ -94,7 +124,7 @@ async function* physicalJsonlRecords(input, {
|
|
|
94
124
|
if (invalidUtf8 === "throw") throw error;
|
|
95
125
|
utf8Valid = false;
|
|
96
126
|
}
|
|
97
|
-
yield { line, utf8Valid, physicalBytes: fragmentsBytes, terminated: false };
|
|
127
|
+
yield { line, utf8Valid, oversized: false, physicalBytes: fragmentsBytes, terminated: false };
|
|
98
128
|
}
|
|
99
129
|
}
|
|
100
130
|
|