tokentracker-cli 0.86.1 → 0.87.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/dashboard/dist/assets/{AchievementBadge-BHWjTRZh.js → AchievementBadge-CU9m5POo.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-X6Z6fiAx.js → AchievementsPage-ESzayVR5.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-DL2CccQ8.js → AchievementsSection-DUVRqw19.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DKn88JDX.js → BadgeDetailModal-CxNQcN6_.js} +1 -1
- package/dashboard/dist/assets/{Card-B_gKsFZR.js → Card-DXIoSOtO.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-vEB5WCNu.js → ClawdAnimated-BsuxMkNd.js} +1 -1
- package/dashboard/dist/assets/{CommandPalette-BoxeCsUF.js → CommandPalette-C-amBp21.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-BwELjQld.js → CommunityStatsModal-ByFOQube.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-j8yHWm2k.js → ConfirmModal-BnUyidbn.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-CkvAOuBF.js → DashboardPage-GyXkKYW0.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-k4Lr11LG.js → DevicePage-B_o-jhku.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-C-ZhX9eY.js → DialogClose-BSd7Jiag.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-BFBVGbUT.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-XCGSHZDz.js → DialogTitle-XBpneDtQ.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-ljP_7vPC.js → FadeIn-Dg0v4V9p.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-D4QupeSb.js → HeaderGithubStar-BIsQD1OK.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-Dkpz8RmH.js → HoverTooltip-CtmRa8ne.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-WkZK9Tr3.js → IpCheckPage-BUoLz5sL.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-Dp3m0uJg.js → LandingPage-BheA-lw8.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-DleP6bK7.js → LeaderboardAvatar-DAy9SOdL.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-DTwMMaF2.js → LeaderboardPage-CwLqtEUN.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-xdDlcRDd.js → LeaderboardProfileModal-BZ9yGyjB.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-Ckytgq9h.js → LeaderboardProfilePage-Cs-LTfvS.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-D_2cV3S4.js → LimitsPage-BQle8e8N.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-DpCb8VIO.js → LocalOnlyNotice-Bp4CqObQ.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-BeAb35_3.js → LoginCard-BIXfWkR2.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-DNdAgKeE.js → LoginModal-B-ubPXdr.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-nuWkBuqy.js → LoginPage-9arjWT-s.js} +1 -1
- package/dashboard/dist/assets/{PetPage-CCLFROsF.js → PetPage-BzAVsvh6.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-BCaeRKf4.js → PopoverPopup-DMg7XE1h.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-C_Fpc2jL.js → ProviderIcon-BG3oqeST.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-lLDxtpC9.js → ResetPasswordPage-LQ9rfcRE.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-Bnfv5lDS.js → SegmentedControl-GY2tRk1u.js} +1 -1
- package/dashboard/dist/assets/{Select-CvY_Y0WS.js → Select-CCngFwmz.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-DX4QYfBW.js → SelectItemText-B9Zm8WTR.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-DcUrtacl.js → ServiceStatusPage-BxPvk1-W.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-CJXyaHQA.js → SessionsPage-DGo6yAwP.js} +1 -1
- package/dashboard/dist/assets/SettingsPage-ConPEiwO.js +1 -0
- package/dashboard/dist/assets/{SkillsPage-BGvK3HZ0.js → SkillsPage-D0PB3WR5.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-D9_H79bK.js → TokenGalaxy-Chh_fPIv.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BsM_3QBs.js → ToolbarRootContext-BXacVvrF.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-D2QSVlSi.js → TrendMonitor-CjiCwNmO.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-BpWOr7-c.js → WidgetsPage-CBw9uBCO.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-DliB3OZk.js → WrappedPage-CEpBAMZR.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-CzDhMv0q.js → __vite-browser-external-Dyag-P6u.js} +19 -13
- package/dashboard/dist/assets/{agent-logos-Q7rTqkGv.js → agent-logos-CLQGE0AM.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-DwqQgMsR.js → arrow-up-right-CU2HDjoG.js} +1 -1
- package/dashboard/dist/assets/{check-Cypjnyke.js → check-CucGM5lh.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-LZRe0crm.js → chevron-right-DYzUvcID.js} +1 -1
- package/dashboard/dist/assets/{copy-BUe15mXV.js → copy-BFeQ31Tr.js} +1 -1
- package/dashboard/dist/assets/{download-BhjaQuUD.js → download-Coq_llCX.js} +1 -1
- package/dashboard/dist/assets/{external-link-BHU7m_Df.js → external-link-BJiDBW3d.js} +1 -1
- package/dashboard/dist/assets/{flame-BPQ7FpRu.js → flame-5stsnhc0.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-C0XEJ96L.js → format-tokens-CpTJbo-2.js} +1 -1
- package/dashboard/dist/assets/{icons-De5Qo1lp.js → icons-jsuvmnnO.js} +1 -1
- package/dashboard/dist/assets/{index-Cl8hqOBU.js → index-BU6GsTbx.js} +1 -1
- package/dashboard/dist/assets/{index-lmWJH5W9.js → index-Bs97feNM.js} +1 -1
- package/dashboard/dist/assets/{index-UfiJKvuV.js → index-DSD3RLQ4.js} +1 -1
- package/dashboard/dist/assets/{info-CCPDu6hQ.js → info-DNNUzeV_.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-B2Qjydn9.js → limits-providers-DKTqNO55.js} +1 -1
- package/dashboard/dist/assets/{link-2-Dl1DAfTL.js → link-2-DC1hnQcE.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-C-mC8s6j.js → loader-circle-DtInM4Io.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-C9YpCcsr.js → maximize-2-DxpsaYXp.js} +1 -1
- package/dashboard/dist/assets/{provider-display-DNXQkneb.js → provider-display-hkyvfEJF.js} +1 -1
- package/dashboard/dist/assets/{react-LsYzFOQW.js → react-TbJoDSP4.js} +1 -1
- package/dashboard/dist/assets/{search-D5SGjOTl.js → search-C7bnqB9b.js} +1 -1
- package/dashboard/dist/assets/{skills-api-CGRg1lZw.js → skills-api-D7glOWg7.js} +1 -1
- package/dashboard/dist/assets/{store-BMdm145i.js → store-CCVlzuqv.js} +1 -1
- package/dashboard/dist/assets/{terminal-HhtP7nqJ.js → terminal-uQlsmzGi.js} +1 -1
- package/dashboard/dist/assets/{trash-2-CeEoITVO.js → trash-2-B1yuX-oD.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-BTZHzzWd.js → use-community-stats-0Fs5nY1G.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-DPNlMKcg.js → use-limits-display-prefs-CrftAn62.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-DFF0ouY5.js → use-native-settings-CVqB9eoO.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-CCLtmxXg.js → use-ordered-list-DAdPjLb5.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-DVGYs3-k.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-CrvLKyhz.js → use-session-efficiency-pref-Cc52HiK0.js} +1 -1
- package/dashboard/dist/assets/{use-transform-BnJ0PftW.js → use-transform-D76wHhX0.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-BY3ZXlDo.js → use-usage-limits-B7Prb8rk.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-BiFDQKMu.js → useCurrency-DWoM_A3s.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-BXUoxe5p.js → useScrollLock-Bp6ddiQo.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-C6DBFS-R.js → useTokenFormat-DZOYz5HT.js} +1 -1
- package/dashboard/dist/assets/{zap-9H5t1Kye.js → zap-DyeAeO8l.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/sync.js +8 -9
- package/src/lib/codex-rollout-parser.js +8 -52
- package/src/lib/jsonl-lines.js +104 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +69 -11
- package/dashboard/dist/assets/DialogDescription-BRiqm-uZ.js +0 -1
- package/dashboard/dist/assets/SettingsPage-BkgPxhGn.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-DUtjZjIj.js +0 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Yield physical JSONL records. Unlike node:readline, this intentionally treats
|
|
5
|
+
* only LF as a record separator so valid U+2028/U+2029 characters inside JSON
|
|
6
|
+
* strings remain part of the record. Reading raw bytes keeps byte budgets exact
|
|
7
|
+
* and lets malformed UTF-8 fail closed.
|
|
8
|
+
*/
|
|
9
|
+
class PhysicalJsonlLimitError extends Error {
|
|
10
|
+
constructor(maxPhysicalBytes) {
|
|
11
|
+
super(`physical JSONL byte limit exceeded: ${maxPhysicalBytes}`);
|
|
12
|
+
this.name = "PhysicalJsonlLimitError";
|
|
13
|
+
this.code = "PHYSICAL_JSONL_LIMIT_EXCEEDED";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const fatalUtf8Decoder = new TextDecoder("utf-8", { fatal: true });
|
|
18
|
+
|
|
19
|
+
function decodePhysicalLine(buffer, { stripCr = false } = {}) {
|
|
20
|
+
const content = stripCr && buffer.length > 0 && buffer[buffer.length - 1] === 0x0d
|
|
21
|
+
? buffer.subarray(0, buffer.length - 1)
|
|
22
|
+
: buffer;
|
|
23
|
+
return fatalUtf8Decoder.decode(content);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async function* physicalJsonlRecords(input, {
|
|
27
|
+
invalidUtf8 = "throw",
|
|
28
|
+
maxPhysicalBytes = Infinity,
|
|
29
|
+
} = {}) {
|
|
30
|
+
if (invalidUtf8 !== "throw" && invalidUtf8 !== "record") {
|
|
31
|
+
throw new TypeError(`unsupported invalidUtf8 policy: ${invalidUtf8}`);
|
|
32
|
+
}
|
|
33
|
+
const byteLimit = Number.isFinite(maxPhysicalBytes)
|
|
34
|
+
? Math.max(0, Number(maxPhysicalBytes))
|
|
35
|
+
: Infinity;
|
|
36
|
+
const fragments = [];
|
|
37
|
+
let fragmentsBytes = 0;
|
|
38
|
+
let physicalBytesRead = 0;
|
|
39
|
+
|
|
40
|
+
for await (const value of input) {
|
|
41
|
+
if (!Buffer.isBuffer(value) && !(value instanceof Uint8Array)) {
|
|
42
|
+
throw new TypeError("physicalJsonlRecords input must emit bytes");
|
|
43
|
+
}
|
|
44
|
+
const chunk = Buffer.isBuffer(value)
|
|
45
|
+
? value
|
|
46
|
+
: Buffer.from(value.buffer, value.byteOffset, value.byteLength);
|
|
47
|
+
|
|
48
|
+
let start = 0;
|
|
49
|
+
let newline = chunk.indexOf(0x0a);
|
|
50
|
+
while (newline !== -1) {
|
|
51
|
+
const fragment = chunk.subarray(start, newline);
|
|
52
|
+
const physicalBytes = fragmentsBytes + fragment.length + 1;
|
|
53
|
+
if (physicalBytesRead + physicalBytes > byteLimit) {
|
|
54
|
+
throw new PhysicalJsonlLimitError(byteLimit);
|
|
55
|
+
}
|
|
56
|
+
const lineBuffer = fragments.length === 0
|
|
57
|
+
? fragment
|
|
58
|
+
: Buffer.concat([...fragments, fragment], fragmentsBytes + fragment.length);
|
|
59
|
+
fragments.length = 0;
|
|
60
|
+
fragmentsBytes = 0;
|
|
61
|
+
physicalBytesRead += physicalBytes;
|
|
62
|
+
start = newline + 1;
|
|
63
|
+
newline = chunk.indexOf(0x0a, start);
|
|
64
|
+
let line;
|
|
65
|
+
try {
|
|
66
|
+
line = decodePhysicalLine(lineBuffer, { stripCr: true });
|
|
67
|
+
} catch (error) {
|
|
68
|
+
if (invalidUtf8 === "throw") throw error;
|
|
69
|
+
yield { line: null, utf8Valid: false, physicalBytes, terminated: true };
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
yield { line, utf8Valid: true, physicalBytes, terminated: true };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (start < chunk.length) {
|
|
76
|
+
const fragment = chunk.subarray(start);
|
|
77
|
+
if (physicalBytesRead + fragmentsBytes + fragment.length > byteLimit) {
|
|
78
|
+
throw new PhysicalJsonlLimitError(byteLimit);
|
|
79
|
+
}
|
|
80
|
+
fragments.push(Buffer.from(fragment));
|
|
81
|
+
fragmentsBytes += fragment.length;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (fragmentsBytes > 0) {
|
|
86
|
+
const lineBuffer = fragments.length === 1
|
|
87
|
+
? fragments[0]
|
|
88
|
+
: Buffer.concat(fragments, fragmentsBytes);
|
|
89
|
+
let line = null;
|
|
90
|
+
let utf8Valid = true;
|
|
91
|
+
try {
|
|
92
|
+
line = decodePhysicalLine(lineBuffer);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
if (invalidUtf8 === "throw") throw error;
|
|
95
|
+
utf8Valid = false;
|
|
96
|
+
}
|
|
97
|
+
yield { line, utf8Valid, physicalBytes: fragmentsBytes, terminated: false };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
module.exports = {
|
|
102
|
+
PhysicalJsonlLimitError,
|
|
103
|
+
physicalJsonlRecords,
|
|
104
|
+
};
|