tokentracker-cli 0.86.0 → 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/README.de.md +2 -0
- package/README.ja.md +2 -0
- package/README.ko.md +2 -0
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- package/dashboard/dist/assets/{AchievementBadge-BgbH_mX4.js → AchievementBadge-CU9m5POo.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-CQqkh1JS.js → AchievementsPage-ESzayVR5.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-Dmkxpn0s.js → AchievementsSection-DUVRqw19.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-7OQf37lk.js → BadgeDetailModal-CxNQcN6_.js} +1 -1
- package/dashboard/dist/assets/{Card-1PmWZRTK.js → Card-DXIoSOtO.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-CMJFagpX.js → ClawdAnimated-BsuxMkNd.js} +1 -1
- package/dashboard/dist/assets/{CommandPalette-D4OrwF1w.js → CommandPalette-C-amBp21.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-BDC9EcwZ.js → CommunityStatsModal-ByFOQube.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-22DL5C_9.js → ConfirmModal-BnUyidbn.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-CEXWzDtt.js → DashboardPage-GyXkKYW0.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-8uhHB7kX.js → DevicePage-B_o-jhku.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-BcJx6VK-.js → DialogClose-BSd7Jiag.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-BFBVGbUT.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-gRzunAqv.js → DialogTitle-XBpneDtQ.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-4rlPdBVe.js → FadeIn-Dg0v4V9p.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-CR003aO3.js → HeaderGithubStar-BIsQD1OK.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-Dgz-dM8Q.js → HoverTooltip-CtmRa8ne.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-B4PJRJP_.js → IpCheckPage-BUoLz5sL.js} +1 -1
- package/dashboard/dist/assets/LandingPage-BheA-lw8.js +2 -0
- package/dashboard/dist/assets/{LeaderboardAvatar-CL9LxiEf.js → LeaderboardAvatar-DAy9SOdL.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-DhIzM2Z2.js → LeaderboardPage-CwLqtEUN.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-bbf5uJR5.js → LeaderboardProfileModal-BZ9yGyjB.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-CzuPxscw.js → LeaderboardProfilePage-Cs-LTfvS.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-B59rb2gg.js → LimitsPage-BQle8e8N.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-BkK-6n1R.js → LocalOnlyNotice-Bp4CqObQ.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-BFGCzEjE.js → LoginCard-BIXfWkR2.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-yhkyscFn.js → LoginModal-B-ubPXdr.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-DwU5s0F7.js → LoginPage-9arjWT-s.js} +1 -1
- package/dashboard/dist/assets/{PetPage-BPscYR6z.js → PetPage-BzAVsvh6.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-E7PyGTTB.js → PopoverPopup-DMg7XE1h.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-CvmnzwKU.js → ProviderIcon-BG3oqeST.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-DD6qX616.js → ResetPasswordPage-LQ9rfcRE.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-DjGBL_l1.js → SegmentedControl-GY2tRk1u.js} +1 -1
- package/dashboard/dist/assets/{Select-B2MGmsi2.js → Select-CCngFwmz.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-BaTwA_ZF.js → SelectItemText-B9Zm8WTR.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-0K0y8A6m.js → ServiceStatusPage-BxPvk1-W.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-CxrtRm3B.js → SessionsPage-DGo6yAwP.js} +1 -1
- package/dashboard/dist/assets/SettingsPage-ConPEiwO.js +1 -0
- package/dashboard/dist/assets/{SkillsPage-BVOU8t3t.js → SkillsPage-D0PB3WR5.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-w7bwGloC.js → TokenGalaxy-Chh_fPIv.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BAzpDZej.js → ToolbarRootContext-BXacVvrF.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-DyT7Q4xp.js → TrendMonitor-CjiCwNmO.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-eDDtopQT.js → WidgetsPage-CBw9uBCO.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-CKkbdWHF.js → WrappedPage-CEpBAMZR.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-SU8sCTLB.js → __vite-browser-external-Dyag-P6u.js} +20 -13
- package/dashboard/dist/assets/{agent-logos-bkh9XZJd.js → agent-logos-CLQGE0AM.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-D16zCIw8.js → arrow-up-right-CU2HDjoG.js} +1 -1
- package/dashboard/dist/assets/{check-BFL17JWQ.js → check-CucGM5lh.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-CUJgrtkp.js → chevron-right-DYzUvcID.js} +1 -1
- package/dashboard/dist/assets/{copy-CRQiCjgs.js → copy-BFeQ31Tr.js} +1 -1
- package/dashboard/dist/assets/{download-Cd12nDrQ.js → download-Coq_llCX.js} +1 -1
- package/dashboard/dist/assets/{external-link-CvAfnsG-.js → external-link-BJiDBW3d.js} +1 -1
- package/dashboard/dist/assets/{flame-CCi681Yl.js → flame-5stsnhc0.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-BAVt8uTZ.js → format-tokens-CpTJbo-2.js} +1 -1
- package/dashboard/dist/assets/{icons-CbKC96gR.js → icons-jsuvmnnO.js} +1 -1
- package/dashboard/dist/assets/{index-B9LWn-mo.js → index-BU6GsTbx.js} +1 -1
- package/dashboard/dist/assets/{index-B5b6PCh5.js → index-Bs97feNM.js} +1 -1
- package/dashboard/dist/assets/{index--TDvaL1y.js → index-DSD3RLQ4.js} +1 -1
- package/dashboard/dist/assets/{info-BPFpD--M.js → info-DNNUzeV_.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-Cyedt-WJ.js → limits-providers-DKTqNO55.js} +1 -1
- package/dashboard/dist/assets/{link-2-BkEPPdfC.js → link-2-DC1hnQcE.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-CzASiylJ.js → loader-circle-DtInM4Io.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-CkwnHUJn.js → maximize-2-DxpsaYXp.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BXBBedC-.js → provider-display-hkyvfEJF.js} +1 -1
- package/dashboard/dist/assets/{react-BXSctDQj.js → react-TbJoDSP4.js} +1 -1
- package/dashboard/dist/assets/{search-_qGma9tM.js → search-C7bnqB9b.js} +1 -1
- package/dashboard/dist/assets/{skills-api-DdmJjnJ9.js → skills-api-D7glOWg7.js} +1 -1
- package/dashboard/dist/assets/{store-owYCN530.js → store-CCVlzuqv.js} +1 -1
- package/dashboard/dist/assets/{terminal-Clzw-KEF.js → terminal-uQlsmzGi.js} +1 -1
- package/dashboard/dist/assets/{trash-2-C5Giwp_E.js → trash-2-B1yuX-oD.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-Dk8UjLEr.js → use-community-stats-0Fs5nY1G.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-CArM595Q.js → use-limits-display-prefs-CrftAn62.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-Cpd69kiF.js → use-native-settings-CVqB9eoO.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list--CzwhBTx.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-DUXO8cCg.js → use-session-efficiency-pref-Cc52HiK0.js} +1 -1
- package/dashboard/dist/assets/{use-transform-Cg3kuMj_.js → use-transform-D76wHhX0.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-DY9_mV28.js → use-usage-limits-B7Prb8rk.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-BIe86hMn.js → useCurrency-DWoM_A3s.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-7-hejkNC.js → useScrollLock-Bp6ddiQo.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-DEtLbRgQ.js → useTokenFormat-DZOYz5HT.js} +1 -1
- package/dashboard/dist/assets/{zap-DUxY1d-O.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 +11 -11
- 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 +89 -18
- package/src/lib/wsl-probe.js +36 -0
- package/dashboard/dist/assets/DialogDescription-D6zxtOM5.js +0 -1
- package/dashboard/dist/assets/LandingPage-3JQe-jOZ.js +0 -2
- package/dashboard/dist/assets/SettingsPage-CyvSWvDP.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-CcILnpU1.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
|
+
};
|