tokentracker-cli 0.86.1 → 0.87.1
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-HMyiDgSW.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-X6Z6fiAx.js → AchievementsPage-CvSRglOk.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-DL2CccQ8.js → AchievementsSection-C5EttnRJ.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DKn88JDX.js → BadgeDetailModal-CMrIWtRh.js} +1 -1
- package/dashboard/dist/assets/{Card-B_gKsFZR.js → Card-j0PoKNVi.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-vEB5WCNu.js → ClawdAnimated-CpMXIDm6.js} +1 -1
- package/dashboard/dist/assets/{CommandPalette-BoxeCsUF.js → CommandPalette-BQVCHqxf.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-BwELjQld.js → CommunityStatsModal-K8Jfw2Sp.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-j8yHWm2k.js → ConfirmModal-Ci8UM9GC.js} +1 -1
- package/dashboard/dist/assets/Controls-CzqxI8mV.js +1 -0
- package/dashboard/dist/assets/DashboardPage-CYT2z3MQ.js +1 -0
- package/dashboard/dist/assets/{DevicePage-k4Lr11LG.js → DevicePage-iLtjOHbK.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-C-ZhX9eY.js → DialogClose-DpqbOjK1.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-Cjk1aws-.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-XCGSHZDz.js → DialogTitle-CHvX9I6f.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-ljP_7vPC.js → FadeIn-PYu_vYZJ.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-D4QupeSb.js → HeaderGithubStar-BgaN38HY.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-Dkpz8RmH.js → HoverTooltip-DIGWJnwA.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-WkZK9Tr3.js → IpCheckPage-CAgOfnQK.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-Dp3m0uJg.js → LandingPage-DBAozV9A.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-DleP6bK7.js → LeaderboardAvatar-Bcz1JUbC.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-DTwMMaF2.js → LeaderboardPage-BnzlsgL5.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-xdDlcRDd.js → LeaderboardProfileModal-D9Ohzup_.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-Ckytgq9h.js → LeaderboardProfilePage-Dly5CxZA.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-D_2cV3S4.js → LimitsPage-r3SxrYQZ.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-DpCb8VIO.js → LocalOnlyNotice-BO4X70A3.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-BeAb35_3.js → LoginCard-Clafry4p.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-DNdAgKeE.js → LoginModal-C5rEYAEU.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-nuWkBuqy.js → LoginPage-CT27nQAo.js} +1 -1
- package/dashboard/dist/assets/PetPage-CX7uXP3E.js +1 -0
- package/dashboard/dist/assets/{PopoverPopup-BCaeRKf4.js → PopoverPopup-C9z-Tti_.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-C_Fpc2jL.js → ProviderIcon-C7KoQJF1.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-lLDxtpC9.js → ResetPasswordPage-CxpERa5n.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-Bnfv5lDS.js → SegmentedControl-CxNTG8xY.js} +1 -1
- package/dashboard/dist/assets/{Select-CvY_Y0WS.js → Select-CeqMgH_w.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-DX4QYfBW.js → SelectItemText-C0xexMQo.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-DcUrtacl.js → ServiceStatusPage-Du-c3oKi.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-CJXyaHQA.js → SessionsPage-BoxarCQo.js} +1 -1
- package/dashboard/dist/assets/SettingsPage-C21iHQrS.js +1 -0
- package/dashboard/dist/assets/{SkillsPage-BGvK3HZ0.js → SkillsPage-CNFg35-t.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-D9_H79bK.js → TokenGalaxy-C66WkuEi.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BsM_3QBs.js → ToolbarRootContext-DEJ2rZnD.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-D2QSVlSi.js → TrendMonitor-CRo_dn81.js} +1 -1
- package/dashboard/dist/assets/WidgetsPage-CUWKRjBX.js +1 -0
- package/dashboard/dist/assets/{WrappedPage-DliB3OZk.js → WrappedPage-BbcgPrhv.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-CzDhMv0q.js → __vite-browser-external-Bnwhf2Ay.js} +26 -13
- package/dashboard/dist/assets/__vite-browser-external-CzQk3FUc.css +1 -0
- package/dashboard/dist/assets/{agent-logos-Q7rTqkGv.js → agent-logos-CdqF_ZVu.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-DwqQgMsR.js → arrow-up-right-Bo-mycRz.js} +1 -1
- package/dashboard/dist/assets/{check-Cypjnyke.js → check-D1cxLlaS.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-LZRe0crm.js → chevron-right-Cqu6YRtu.js} +1 -1
- package/dashboard/dist/assets/{copy-BUe15mXV.js → copy-DdFT4OsA.js} +1 -1
- package/dashboard/dist/assets/{download-BhjaQuUD.js → download-BaGijNSk.js} +1 -1
- package/dashboard/dist/assets/{external-link-BHU7m_Df.js → external-link-BDXdiGgV.js} +1 -1
- package/dashboard/dist/assets/{flame-BPQ7FpRu.js → flame-nWYIAJO7.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-C0XEJ96L.js → format-tokens-DKoNQugI.js} +1 -1
- package/dashboard/dist/assets/{icons-De5Qo1lp.js → icons-DUVL4ucb.js} +1 -1
- package/dashboard/dist/assets/{index-lmWJH5W9.js → index-B8orqoRS.js} +1 -1
- package/dashboard/dist/assets/{index-UfiJKvuV.js → index-BfR-FhBV.js} +1 -1
- package/dashboard/dist/assets/{index-Cl8hqOBU.js → index-hwecSjsn.js} +1 -1
- package/dashboard/dist/assets/{info-CCPDu6hQ.js → info-D8dPbHW_.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-B2Qjydn9.js → limits-providers-aVihEk9O.js} +1 -1
- package/dashboard/dist/assets/{link-2-Dl1DAfTL.js → link-2-BPrWtheW.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-C-mC8s6j.js → loader-circle-R8Mc26Py.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-C9YpCcsr.js → maximize-2-CDdVCGkE.js} +1 -1
- package/dashboard/dist/assets/{provider-display-DNXQkneb.js → provider-display-DjIxT1Tj.js} +1 -1
- package/dashboard/dist/assets/{react-LsYzFOQW.js → react-CPpseYXr.js} +1 -1
- package/dashboard/dist/assets/{search-D5SGjOTl.js → search-CwXFsVWP.js} +1 -1
- package/dashboard/dist/assets/{skills-api-CGRg1lZw.js → skills-api-BaWEPqAA.js} +1 -1
- package/dashboard/dist/assets/{store-BMdm145i.js → store-Dvj7C_TU.js} +1 -1
- package/dashboard/dist/assets/{terminal-HhtP7nqJ.js → terminal-HFPAmRVo.js} +1 -1
- package/dashboard/dist/assets/{trash-2-CeEoITVO.js → trash-2-BlMMnsHP.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-BTZHzzWd.js → use-community-stats-BnQkgDNp.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-DPNlMKcg.js → use-limits-display-prefs-CyRX2tSS.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-CCLtmxXg.js → use-ordered-list-D5J9JQc3.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-Bb_7eQY5.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-CrvLKyhz.js → use-session-efficiency-pref-CfCTFOw1.js} +1 -1
- package/dashboard/dist/assets/{use-transform-BnJ0PftW.js → use-transform-Cb0xIsIA.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-BY3ZXlDo.js → use-usage-limits-Bcr5Rvg1.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-BiFDQKMu.js → useCurrency-DePNHGhs.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-BXUoxe5p.js → useScrollLock-hvMIIQdN.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-C6DBFS-R.js → useTokenFormat-D0HGlu5w.js} +1 -1
- package/dashboard/dist/assets/{zap-9H5t1Kye.js → zap-BYcuWUXQ.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist/ip-check.html +2 -2
- package/dashboard/dist/leaderboard.html +2 -2
- package/dashboard/dist/share.html +2 -2
- 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/DashboardPage-CkvAOuBF.js +0 -1
- package/dashboard/dist/assets/DialogDescription-BRiqm-uZ.js +0 -1
- package/dashboard/dist/assets/PetPage-CCLFROsF.js +0 -1
- package/dashboard/dist/assets/SettingsPage-BkgPxhGn.js +0 -1
- package/dashboard/dist/assets/WidgetsPage-BpWOr7-c.js +0 -1
- package/dashboard/dist/assets/__vite-browser-external-hXV_ZYTG.css +0 -1
- package/dashboard/dist/assets/use-native-settings-DFF0ouY5.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-DUtjZjIj.js +0 -1
package/src/lib/rollout.js
CHANGED
|
@@ -6,6 +6,7 @@ const readline = require("node:readline");
|
|
|
6
6
|
|
|
7
7
|
const crypto = require("node:crypto");
|
|
8
8
|
const { ensureDir, writeJson, chmod600IfPossible } = require("./fs");
|
|
9
|
+
const { physicalJsonlRecords } = require("./jsonl-lines");
|
|
9
10
|
const { readSqliteJsonRows, readSqliteJsonRowsAsync } = require("./sqlite-reader");
|
|
10
11
|
const wsl = require("./wsl-probe");
|
|
11
12
|
const { resolveInstallPaths } = require("./install-resolver");
|
|
@@ -180,7 +181,11 @@ async function parseRolloutIncremental({
|
|
|
180
181
|
source,
|
|
181
182
|
publicRepoResolver,
|
|
182
183
|
diagnostics,
|
|
184
|
+
invalidRecordPolicy = "skip",
|
|
183
185
|
}) {
|
|
186
|
+
if (invalidRecordPolicy !== "skip" && invalidRecordPolicy !== "throw") {
|
|
187
|
+
throw new TypeError(`unsupported invalidRecordPolicy: ${invalidRecordPolicy}`);
|
|
188
|
+
}
|
|
184
189
|
await ensureDir(path.dirname(queuePath));
|
|
185
190
|
let filesProcessed = 0;
|
|
186
191
|
let eventsAggregated = 0;
|
|
@@ -446,6 +451,7 @@ async function parseRolloutIncremental({
|
|
|
446
451
|
publicRepoCache,
|
|
447
452
|
publicRepoResolver,
|
|
448
453
|
projectContext,
|
|
454
|
+
invalidRecordPolicy,
|
|
449
455
|
})
|
|
450
456
|
: await parseRolloutFile({
|
|
451
457
|
filePath,
|
|
@@ -467,6 +473,7 @@ async function parseRolloutIncremental({
|
|
|
467
473
|
projectContext,
|
|
468
474
|
seenCodexEvents: codexEventTracker,
|
|
469
475
|
sessionId: codexSessionIdFromPath(filePath),
|
|
476
|
+
invalidRecordPolicy,
|
|
470
477
|
});
|
|
471
478
|
|
|
472
479
|
const nextCursor = {
|
|
@@ -1952,6 +1959,7 @@ async function parseRolloutFile({
|
|
|
1952
1959
|
projectContext,
|
|
1953
1960
|
seenCodexEvents,
|
|
1954
1961
|
sessionId,
|
|
1962
|
+
invalidRecordPolicy,
|
|
1955
1963
|
}) {
|
|
1956
1964
|
const st = fileStat || (await fs.stat(filePath));
|
|
1957
1965
|
const endOffset = st.size;
|
|
@@ -1968,8 +1976,10 @@ async function parseRolloutFile({
|
|
|
1968
1976
|
};
|
|
1969
1977
|
}
|
|
1970
1978
|
|
|
1971
|
-
const stream = fssync.createReadStream(filePath, {
|
|
1972
|
-
|
|
1979
|
+
const stream = fssync.createReadStream(filePath, {
|
|
1980
|
+
start: startOffset,
|
|
1981
|
+
end: endOffset - 1,
|
|
1982
|
+
});
|
|
1973
1983
|
|
|
1974
1984
|
let model = typeof lastModel === "string" ? lastModel : null;
|
|
1975
1985
|
const usageDeltaState = createUsageDeltaState({
|
|
@@ -1994,8 +2004,19 @@ async function parseRolloutFile({
|
|
|
1994
2004
|
let currentProjectRef = projectRef || null;
|
|
1995
2005
|
let currentProjectKey = projectKey || null;
|
|
1996
2006
|
let eventsAggregated = 0;
|
|
2007
|
+
let scannedEndOffset = startOffset;
|
|
2008
|
+
let committedEndOffset = startOffset;
|
|
2009
|
+
|
|
2010
|
+
const invalidUtf8 = invalidRecordPolicy === "throw" ? "throw" : "record";
|
|
2011
|
+
for await (const record of physicalJsonlRecords(stream, { invalidUtf8 })) {
|
|
2012
|
+
scannedEndOffset += record.physicalBytes;
|
|
2013
|
+
if (record.terminated) committedEndOffset = scannedEndOffset;
|
|
2014
|
+
if (!record.utf8Valid) {
|
|
2015
|
+
if (!record.terminated) break;
|
|
2016
|
+
continue;
|
|
2017
|
+
}
|
|
1997
2018
|
|
|
1998
|
-
|
|
2019
|
+
const { line } = record;
|
|
1999
2020
|
if (!line) continue;
|
|
2000
2021
|
const maybeTokenCount = line.includes('"token_count"');
|
|
2001
2022
|
const maybeTurnContext =
|
|
@@ -2005,14 +2026,28 @@ async function parseRolloutFile({
|
|
|
2005
2026
|
line.includes('"cwd"') ||
|
|
2006
2027
|
line.includes('"current_date"') ||
|
|
2007
2028
|
line.includes('"forked_from_id"'));
|
|
2008
|
-
if (!maybeTokenCount && !maybeTurnContext)
|
|
2029
|
+
if (!maybeTokenCount && !maybeTurnContext) {
|
|
2030
|
+
if (invalidRecordPolicy === "throw" || !record.terminated) {
|
|
2031
|
+
try {
|
|
2032
|
+
JSON.parse(line);
|
|
2033
|
+
committedEndOffset = scannedEndOffset;
|
|
2034
|
+
} catch (error) {
|
|
2035
|
+
if (invalidRecordPolicy === "throw") throw error;
|
|
2036
|
+
break;
|
|
2037
|
+
}
|
|
2038
|
+
}
|
|
2039
|
+
continue;
|
|
2040
|
+
}
|
|
2009
2041
|
|
|
2010
2042
|
let obj;
|
|
2011
2043
|
try {
|
|
2012
2044
|
obj = JSON.parse(line);
|
|
2013
|
-
} catch (
|
|
2045
|
+
} catch (error) {
|
|
2046
|
+
if (invalidRecordPolicy === "throw") throw error;
|
|
2047
|
+
if (!record.terminated) break;
|
|
2014
2048
|
continue;
|
|
2015
2049
|
}
|
|
2050
|
+
if (!record.terminated) committedEndOffset = scannedEndOffset;
|
|
2016
2051
|
|
|
2017
2052
|
if (
|
|
2018
2053
|
(obj?.type === "turn_context" || obj?.type === "session_meta") &&
|
|
@@ -2156,7 +2191,7 @@ async function parseRolloutFile({
|
|
|
2156
2191
|
}
|
|
2157
2192
|
|
|
2158
2193
|
return {
|
|
2159
|
-
endOffset,
|
|
2194
|
+
endOffset: committedEndOffset,
|
|
2160
2195
|
lastTotal: latestTotal,
|
|
2161
2196
|
tokenUsageBaselines: snapshotUsageBaselines(usageDeltaState),
|
|
2162
2197
|
lastModel: model,
|
|
@@ -2176,6 +2211,7 @@ async function scanRolloutProjectFileContexts({
|
|
|
2176
2211
|
publicRepoCache,
|
|
2177
2212
|
publicRepoResolver,
|
|
2178
2213
|
projectContext,
|
|
2214
|
+
invalidRecordPolicy,
|
|
2179
2215
|
}) {
|
|
2180
2216
|
const st = fileStat || (await fs.stat(filePath));
|
|
2181
2217
|
const endOffset = st.size;
|
|
@@ -2192,11 +2228,21 @@ async function scanRolloutProjectFileContexts({
|
|
|
2192
2228
|
};
|
|
2193
2229
|
}
|
|
2194
2230
|
|
|
2195
|
-
const stream = fssync.createReadStream(filePath, {
|
|
2196
|
-
const rl = readline.createInterface({ input: stream, crlfDelay: Infinity });
|
|
2231
|
+
const stream = fssync.createReadStream(filePath, { start: 0, end: endOffset - 1 });
|
|
2197
2232
|
let currentCwd = null;
|
|
2233
|
+
let scannedEndOffset = 0;
|
|
2234
|
+
let committedEndOffset = 0;
|
|
2235
|
+
|
|
2236
|
+
const invalidUtf8 = invalidRecordPolicy === "throw" ? "throw" : "record";
|
|
2237
|
+
for await (const record of physicalJsonlRecords(stream, { invalidUtf8 })) {
|
|
2238
|
+
scannedEndOffset += record.physicalBytes;
|
|
2239
|
+
if (record.terminated) committedEndOffset = scannedEndOffset;
|
|
2240
|
+
if (!record.utf8Valid) {
|
|
2241
|
+
if (!record.terminated) break;
|
|
2242
|
+
continue;
|
|
2243
|
+
}
|
|
2198
2244
|
|
|
2199
|
-
|
|
2245
|
+
const { line } = record;
|
|
2200
2246
|
if (
|
|
2201
2247
|
!line ||
|
|
2202
2248
|
!(
|
|
@@ -2205,15 +2251,27 @@ async function scanRolloutProjectFileContexts({
|
|
|
2205
2251
|
) ||
|
|
2206
2252
|
!line.includes('"cwd"')
|
|
2207
2253
|
) {
|
|
2254
|
+
if (line && (invalidRecordPolicy === "throw" || !record.terminated)) {
|
|
2255
|
+
try {
|
|
2256
|
+
JSON.parse(line);
|
|
2257
|
+
committedEndOffset = scannedEndOffset;
|
|
2258
|
+
} catch (error) {
|
|
2259
|
+
if (invalidRecordPolicy === "throw") throw error;
|
|
2260
|
+
break;
|
|
2261
|
+
}
|
|
2262
|
+
}
|
|
2208
2263
|
continue;
|
|
2209
2264
|
}
|
|
2210
2265
|
|
|
2211
2266
|
let obj;
|
|
2212
2267
|
try {
|
|
2213
2268
|
obj = JSON.parse(line);
|
|
2214
|
-
} catch (
|
|
2269
|
+
} catch (error) {
|
|
2270
|
+
if (invalidRecordPolicy === "throw") throw error;
|
|
2271
|
+
if (!record.terminated) break;
|
|
2215
2272
|
continue;
|
|
2216
2273
|
}
|
|
2274
|
+
if (!record.terminated) committedEndOffset = scannedEndOffset;
|
|
2217
2275
|
if (
|
|
2218
2276
|
(obj?.type !== "turn_context" && obj?.type !== "session_meta") ||
|
|
2219
2277
|
!obj?.payload ||
|
|
@@ -2237,7 +2295,7 @@ async function scanRolloutProjectFileContexts({
|
|
|
2237
2295
|
}
|
|
2238
2296
|
|
|
2239
2297
|
return {
|
|
2240
|
-
endOffset,
|
|
2298
|
+
endOffset: committedEndOffset,
|
|
2241
2299
|
lastTotal,
|
|
2242
2300
|
tokenUsageBaselines,
|
|
2243
2301
|
lastModel,
|