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.
Files changed (102) hide show
  1. package/README.de.md +2 -0
  2. package/README.ja.md +2 -0
  3. package/README.ko.md +2 -0
  4. package/README.md +2 -0
  5. package/README.zh-CN.md +2 -0
  6. package/dashboard/dist/assets/{AchievementBadge-BgbH_mX4.js → AchievementBadge-CU9m5POo.js} +1 -1
  7. package/dashboard/dist/assets/{AchievementsPage-CQqkh1JS.js → AchievementsPage-ESzayVR5.js} +2 -2
  8. package/dashboard/dist/assets/{AchievementsSection-Dmkxpn0s.js → AchievementsSection-DUVRqw19.js} +1 -1
  9. package/dashboard/dist/assets/{BadgeDetailModal-7OQf37lk.js → BadgeDetailModal-CxNQcN6_.js} +1 -1
  10. package/dashboard/dist/assets/{Card-1PmWZRTK.js → Card-DXIoSOtO.js} +1 -1
  11. package/dashboard/dist/assets/{ClawdAnimated-CMJFagpX.js → ClawdAnimated-BsuxMkNd.js} +1 -1
  12. package/dashboard/dist/assets/{CommandPalette-D4OrwF1w.js → CommandPalette-C-amBp21.js} +1 -1
  13. package/dashboard/dist/assets/{CommunityStatsModal-BDC9EcwZ.js → CommunityStatsModal-ByFOQube.js} +1 -1
  14. package/dashboard/dist/assets/{ConfirmModal-22DL5C_9.js → ConfirmModal-BnUyidbn.js} +1 -1
  15. package/dashboard/dist/assets/{DashboardPage-CEXWzDtt.js → DashboardPage-GyXkKYW0.js} +1 -1
  16. package/dashboard/dist/assets/{DevicePage-8uhHB7kX.js → DevicePage-B_o-jhku.js} +1 -1
  17. package/dashboard/dist/assets/{DialogClose-BcJx6VK-.js → DialogClose-BSd7Jiag.js} +1 -1
  18. package/dashboard/dist/assets/DialogDescription-BFBVGbUT.js +1 -0
  19. package/dashboard/dist/assets/{DialogTitle-gRzunAqv.js → DialogTitle-XBpneDtQ.js} +1 -1
  20. package/dashboard/dist/assets/{FadeIn-4rlPdBVe.js → FadeIn-Dg0v4V9p.js} +1 -1
  21. package/dashboard/dist/assets/{HeaderGithubStar-CR003aO3.js → HeaderGithubStar-BIsQD1OK.js} +1 -1
  22. package/dashboard/dist/assets/{HoverTooltip-Dgz-dM8Q.js → HoverTooltip-CtmRa8ne.js} +1 -1
  23. package/dashboard/dist/assets/{IpCheckPage-B4PJRJP_.js → IpCheckPage-BUoLz5sL.js} +1 -1
  24. package/dashboard/dist/assets/LandingPage-BheA-lw8.js +2 -0
  25. package/dashboard/dist/assets/{LeaderboardAvatar-CL9LxiEf.js → LeaderboardAvatar-DAy9SOdL.js} +1 -1
  26. package/dashboard/dist/assets/{LeaderboardPage-DhIzM2Z2.js → LeaderboardPage-CwLqtEUN.js} +2 -2
  27. package/dashboard/dist/assets/{LeaderboardProfileModal-bbf5uJR5.js → LeaderboardProfileModal-BZ9yGyjB.js} +3 -3
  28. package/dashboard/dist/assets/{LeaderboardProfilePage-CzuPxscw.js → LeaderboardProfilePage-Cs-LTfvS.js} +1 -1
  29. package/dashboard/dist/assets/{LimitsPage-B59rb2gg.js → LimitsPage-BQle8e8N.js} +1 -1
  30. package/dashboard/dist/assets/{LocalOnlyNotice-BkK-6n1R.js → LocalOnlyNotice-Bp4CqObQ.js} +1 -1
  31. package/dashboard/dist/assets/{LoginCard-BFGCzEjE.js → LoginCard-BIXfWkR2.js} +1 -1
  32. package/dashboard/dist/assets/{LoginModal-yhkyscFn.js → LoginModal-B-ubPXdr.js} +1 -1
  33. package/dashboard/dist/assets/{LoginPage-DwU5s0F7.js → LoginPage-9arjWT-s.js} +1 -1
  34. package/dashboard/dist/assets/{PetPage-BPscYR6z.js → PetPage-BzAVsvh6.js} +1 -1
  35. package/dashboard/dist/assets/{PopoverPopup-E7PyGTTB.js → PopoverPopup-DMg7XE1h.js} +1 -1
  36. package/dashboard/dist/assets/{ProviderIcon-CvmnzwKU.js → ProviderIcon-BG3oqeST.js} +1 -1
  37. package/dashboard/dist/assets/{ResetPasswordPage-DD6qX616.js → ResetPasswordPage-LQ9rfcRE.js} +1 -1
  38. package/dashboard/dist/assets/{SegmentedControl-DjGBL_l1.js → SegmentedControl-GY2tRk1u.js} +1 -1
  39. package/dashboard/dist/assets/{Select-B2MGmsi2.js → Select-CCngFwmz.js} +1 -1
  40. package/dashboard/dist/assets/{SelectItemText-BaTwA_ZF.js → SelectItemText-B9Zm8WTR.js} +1 -1
  41. package/dashboard/dist/assets/{ServiceStatusPage-0K0y8A6m.js → ServiceStatusPage-BxPvk1-W.js} +1 -1
  42. package/dashboard/dist/assets/{SessionsPage-CxrtRm3B.js → SessionsPage-DGo6yAwP.js} +1 -1
  43. package/dashboard/dist/assets/SettingsPage-ConPEiwO.js +1 -0
  44. package/dashboard/dist/assets/{SkillsPage-BVOU8t3t.js → SkillsPage-D0PB3WR5.js} +1 -1
  45. package/dashboard/dist/assets/{TokenGalaxy-w7bwGloC.js → TokenGalaxy-Chh_fPIv.js} +1 -1
  46. package/dashboard/dist/assets/{ToolbarRootContext-BAzpDZej.js → ToolbarRootContext-BXacVvrF.js} +1 -1
  47. package/dashboard/dist/assets/{TrendMonitor-DyT7Q4xp.js → TrendMonitor-CjiCwNmO.js} +1 -1
  48. package/dashboard/dist/assets/{WidgetsPage-eDDtopQT.js → WidgetsPage-CBw9uBCO.js} +1 -1
  49. package/dashboard/dist/assets/{WrappedPage-CKkbdWHF.js → WrappedPage-CEpBAMZR.js} +1 -1
  50. package/dashboard/dist/assets/{__vite-browser-external-SU8sCTLB.js → __vite-browser-external-Dyag-P6u.js} +20 -13
  51. package/dashboard/dist/assets/{agent-logos-bkh9XZJd.js → agent-logos-CLQGE0AM.js} +1 -1
  52. package/dashboard/dist/assets/{arrow-up-right-D16zCIw8.js → arrow-up-right-CU2HDjoG.js} +1 -1
  53. package/dashboard/dist/assets/{check-BFL17JWQ.js → check-CucGM5lh.js} +1 -1
  54. package/dashboard/dist/assets/{chevron-right-CUJgrtkp.js → chevron-right-DYzUvcID.js} +1 -1
  55. package/dashboard/dist/assets/{copy-CRQiCjgs.js → copy-BFeQ31Tr.js} +1 -1
  56. package/dashboard/dist/assets/{download-Cd12nDrQ.js → download-Coq_llCX.js} +1 -1
  57. package/dashboard/dist/assets/{external-link-CvAfnsG-.js → external-link-BJiDBW3d.js} +1 -1
  58. package/dashboard/dist/assets/{flame-CCi681Yl.js → flame-5stsnhc0.js} +1 -1
  59. package/dashboard/dist/assets/{format-tokens-BAVt8uTZ.js → format-tokens-CpTJbo-2.js} +1 -1
  60. package/dashboard/dist/assets/{icons-CbKC96gR.js → icons-jsuvmnnO.js} +1 -1
  61. package/dashboard/dist/assets/{index-B9LWn-mo.js → index-BU6GsTbx.js} +1 -1
  62. package/dashboard/dist/assets/{index-B5b6PCh5.js → index-Bs97feNM.js} +1 -1
  63. package/dashboard/dist/assets/{index--TDvaL1y.js → index-DSD3RLQ4.js} +1 -1
  64. package/dashboard/dist/assets/{info-BPFpD--M.js → info-DNNUzeV_.js} +1 -1
  65. package/dashboard/dist/assets/{limits-providers-Cyedt-WJ.js → limits-providers-DKTqNO55.js} +1 -1
  66. package/dashboard/dist/assets/{link-2-BkEPPdfC.js → link-2-DC1hnQcE.js} +1 -1
  67. package/dashboard/dist/assets/{loader-circle-CzASiylJ.js → loader-circle-DtInM4Io.js} +1 -1
  68. package/dashboard/dist/assets/{maximize-2-CkwnHUJn.js → maximize-2-DxpsaYXp.js} +1 -1
  69. package/dashboard/dist/assets/{provider-display-BXBBedC-.js → provider-display-hkyvfEJF.js} +1 -1
  70. package/dashboard/dist/assets/{react-BXSctDQj.js → react-TbJoDSP4.js} +1 -1
  71. package/dashboard/dist/assets/{search-_qGma9tM.js → search-C7bnqB9b.js} +1 -1
  72. package/dashboard/dist/assets/{skills-api-DdmJjnJ9.js → skills-api-D7glOWg7.js} +1 -1
  73. package/dashboard/dist/assets/{store-owYCN530.js → store-CCVlzuqv.js} +1 -1
  74. package/dashboard/dist/assets/{terminal-Clzw-KEF.js → terminal-uQlsmzGi.js} +1 -1
  75. package/dashboard/dist/assets/{trash-2-C5Giwp_E.js → trash-2-B1yuX-oD.js} +1 -1
  76. package/dashboard/dist/assets/{use-community-stats-Dk8UjLEr.js → use-community-stats-0Fs5nY1G.js} +1 -1
  77. package/dashboard/dist/assets/{use-limits-display-prefs-CArM595Q.js → use-limits-display-prefs-CrftAn62.js} +1 -1
  78. package/dashboard/dist/assets/{use-native-settings-Cpd69kiF.js → use-native-settings-CVqB9eoO.js} +1 -1
  79. package/dashboard/dist/assets/{use-ordered-list--CzwhBTx.js → use-ordered-list-DAdPjLb5.js} +1 -1
  80. package/dashboard/dist/assets/use-reduced-motion-DVGYs3-k.js +1 -0
  81. package/dashboard/dist/assets/{use-session-efficiency-pref-DUXO8cCg.js → use-session-efficiency-pref-Cc52HiK0.js} +1 -1
  82. package/dashboard/dist/assets/{use-transform-Cg3kuMj_.js → use-transform-D76wHhX0.js} +1 -1
  83. package/dashboard/dist/assets/{use-usage-limits-DY9_mV28.js → use-usage-limits-B7Prb8rk.js} +1 -1
  84. package/dashboard/dist/assets/{useCurrency-BIe86hMn.js → useCurrency-DWoM_A3s.js} +1 -1
  85. package/dashboard/dist/assets/{useScrollLock-7-hejkNC.js → useScrollLock-Bp6ddiQo.js} +1 -1
  86. package/dashboard/dist/assets/{useTokenFormat-DEtLbRgQ.js → useTokenFormat-DZOYz5HT.js} +1 -1
  87. package/dashboard/dist/assets/{zap-DUxY1d-O.js → zap-DyeAeO8l.js} +1 -1
  88. package/dashboard/dist/index.html +1 -1
  89. package/dashboard/dist/ip-check.html +1 -1
  90. package/dashboard/dist/leaderboard.html +1 -1
  91. package/dashboard/dist/share.html +1 -1
  92. package/package.json +1 -1
  93. package/src/commands/sync.js +11 -11
  94. package/src/lib/codex-rollout-parser.js +8 -52
  95. package/src/lib/jsonl-lines.js +104 -0
  96. package/src/lib/pricing/seed-snapshot.json +1 -1
  97. package/src/lib/rollout.js +89 -18
  98. package/src/lib/wsl-probe.js +36 -0
  99. package/dashboard/dist/assets/DialogDescription-D6zxtOM5.js +0 -1
  100. package/dashboard/dist/assets/LandingPage-3JQe-jOZ.js +0 -2
  101. package/dashboard/dist/assets/SettingsPage-CyvSWvDP.js +0 -1
  102. 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
+ };