tokentracker-cli 0.87.17 → 0.87.19
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-BsEQ2tmj.js → AchievementBadge-DjdOWtHt.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-DaIE18Oj.js → AchievementsPage-BoD9j-tR.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-D5Chjra6.js → AchievementsSection-gg8qQgiE.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DiF5CC4Q.js → BadgeDetailModal-IAbpXovp.js} +1 -1
- package/dashboard/dist/assets/{Card-Bh1l9XVa.js → Card-Ca38XfWL.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-B2tb_uy9.js → ClawdAnimated-myJ8ptXF.js} +1 -1
- package/dashboard/dist/assets/{CommandPalette-BDYmI6KM.js → CommandPalette-mHl3UW9c.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-DZDixdxG.js → CommunityStatsModal-C8Rbi0qI.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-B3HhWPG1.js → ConfirmModal-CAUPZ56o.js} +1 -1
- package/dashboard/dist/assets/{Controls-eSVS0G3S.js → Controls-DafPuhCC.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-DMyBPJ9W.js → DashboardPage-WQRKij-4.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-BhpTKx-c.js → DevicePage-C8Lp9jx2.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-Dt2M164c.js → DialogClose-BwMssKVe.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-XcceJvrW.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-CBQEeY1z.js → DialogTitle-g-Owir_j.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-9wsSzh_a.js → FadeIn-DA7dvpnn.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-BOg2yeJ0.js → HeaderGithubStar-DTjXWyYb.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-OaMkhUbs.js → HoverTooltip-ClDB5rTj.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-BFaVui2O.js → IpCheckPage-B0Z1SYQ0.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-CGybB6xR.js → LandingPage-DR_q_2Y1.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-DFR_SDle.js → LeaderboardAvatar-cWNsMziS.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-Dx3nyCZc.js → LeaderboardPage-CM13m8Gt.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-B9nLJTGv.js → LeaderboardProfileModal-D3f2Et31.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-B4vNvdiq.js → LeaderboardProfilePage-sG_OaOUv.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-D-J5R4qu.js → LimitsPage-TYSRaK5V.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-CeJ1Dv_8.js → LocalOnlyNotice-7_9elz8V.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-CHQRkWQs.js → LoginCard-nZIVgUHt.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-B5559j1K.js → LoginModal-B2M3qN6J.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-C1P2Quq6.js → LoginPage-CzTnTLSB.js} +1 -1
- package/dashboard/dist/assets/{PetPage-Wt-HcAHU.js → PetPage-qcgjFiWl.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-CVI4w0E6.js → PopoverPopup-D8PNL9So.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-BswKVGR0.js → ProviderIcon-BpY0pOfI.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-sRWSceeH.js → ResetPasswordPage-kNfcfjIN.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-bXs9Ly1S.js → SegmentedControl-C-Mak_jy.js} +1 -1
- package/dashboard/dist/assets/{Select-BxZQJSA8.js → Select-DTmDAOQL.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-BhC7_m4l.js → SelectItemText-YJrHBON2.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-DnoQGIzM.js → ServiceStatusPage--87xzQwN.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-D_rk7urK.js → SessionsPage-D2s93km5.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-d1uhJJUI.js → SettingsPage-DTpkdG1F.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-Dmv3vfV2.js → SkillsPage-CF-W0Bdn.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-BRozBDv9.js → TokenGalaxy-Ddd30kK4.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BxAIwde2.js → ToolbarRootContext-BtATj8Kg.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-bTygbWe4.js → TrendMonitor-CefjyUEM.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-Bdgv5NIE.js → WidgetsPage-C0jApuSm.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-tLVxl_4c.js → WrappedPage-C3rAnnnz.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-DFfWg5Zv.js → __vite-browser-external-BnkHs6gg.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-DVtP3hhF.js → agent-logos-C-TeVx-Q.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-a--zz4P2.js → arrow-up-right-CBLf9cEj.js} +1 -1
- package/dashboard/dist/assets/{check-Cb87RDI8.js → check-BCeBC6q5.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-BaXnYJmR.js → chevron-right-CfexlS0D.js} +1 -1
- package/dashboard/dist/assets/{copy-BP5bVEyA.js → copy-BCajOHXr.js} +1 -1
- package/dashboard/dist/assets/{download-DqquZt0D.js → download-LK6wlUkh.js} +1 -1
- package/dashboard/dist/assets/{external-link-iXDmG0bb.js → external-link-DtI-rPEW.js} +1 -1
- package/dashboard/dist/assets/{flame-DHqiSC5J.js → flame-DNKgVNfD.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-DsygRhxH.js → format-tokens-eJo8lpNP.js} +1 -1
- package/dashboard/dist/assets/{icons-D6xBLJA4.js → icons-GMVziREt.js} +1 -1
- package/dashboard/dist/assets/{index-HfUVkowX.js → index-Bs-yqjys.js} +1 -1
- package/dashboard/dist/assets/{index-cM3RnbJG.js → index-C-ZYvbxQ.js} +1 -1
- package/dashboard/dist/assets/{index-DSrgwJkM.js → index-ChIn4Kpc.js} +1 -1
- package/dashboard/dist/assets/{info-Cui6vFPM.js → info-LjaJs2Xo.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-CdzvnLpk.js → limits-providers-BVpDixxM.js} +1 -1
- package/dashboard/dist/assets/{link-2-DX3nm7aU.js → link-2-BEdehwcL.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-C8Sw1OT7.js → loader-circle-UzlbEwD-.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-Czi9wWkF.js → maximize-2-DlxceNm2.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-BmnoKiX1.js → modifiers.esm-vknNttgo.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-B0J0HWPL.js → monitor-smartphone-DoK-YZlF.js} +1 -1
- package/dashboard/dist/assets/{provider-display-C6qI5Ghp.js → provider-display-BTUlO1Ed.js} +1 -1
- package/dashboard/dist/assets/{react-BVu5drox.js → react-Dh2WJ1de.js} +1 -1
- package/dashboard/dist/assets/{search-C1-spbaq.js → search-B294I1Eq.js} +1 -1
- package/dashboard/dist/assets/{skills-api-C3VUeo0l.js → skills-api-BNSma3cf.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-vred0beO.js → sortable.esm-DpmS_541.js} +1 -1
- package/dashboard/dist/assets/{store-B4CtFHMN.js → store-DDcrG9Du.js} +1 -1
- package/dashboard/dist/assets/{terminal-CCly6A7O.js → terminal-DDFEmVIY.js} +1 -1
- package/dashboard/dist/assets/{trash-2-Doikp-3o.js → trash-2-BVcLx2v9.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-4JEUXgQD.js → use-community-stats-4GDlBd2t.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-CvmEm5O5.js → use-limits-display-prefs-DbTWVAXb.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-Cwd6mjTH.js → use-ordered-list-B3C1RunE.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-C_Fipb-j.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-DSE0hMDn.js → use-session-efficiency-pref-wPytkrbU.js} +1 -1
- package/dashboard/dist/assets/{use-transform-CHAOJvjo.js → use-transform-DB210eQI.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-DqjvXdmC.js → use-usage-limits-BK9XdPuA.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-C6VcRFbY.js → useCurrency-CRiwthki.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-BtQ9MIFV.js → useScrollLock-B0v4OVXm.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-DVtSl1vw.js → useTokenFormat-Kd88NVmv.js} +1 -1
- package/dashboard/dist/assets/{zap-Bqvqpei6.js → zap-D3QQucVp.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 +28 -9
- package/src/commands/sync.js +18 -4
- package/src/lib/install-resolver.js +18 -1
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +18 -5
- package/src/lib/session-analytics.js +22 -7
- package/dashboard/dist/assets/DialogDescription-D0EQV4SO.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-DqkEunos.js +0 -1
package/src/lib/rollout.js
CHANGED
|
@@ -329,15 +329,28 @@ async function parseRolloutIncremental({
|
|
|
329
329
|
}) => {
|
|
330
330
|
if (rebuildingBaseline) return true;
|
|
331
331
|
if (prev && (!sameInode || truncated)) return true;
|
|
332
|
-
|
|
333
|
-
|
|
332
|
+
|
|
333
|
+
// Same session under another cursor path — the two roots of a `union`
|
|
334
|
+
// install (src/lib/install-resolver.js) reaching one file, or a
|
|
335
|
+
// sessions/ -> archived_sessions/ move. This MUST be decided before the
|
|
336
|
+
// steady-state short-circuit below: the append-only tracker only knows keys
|
|
337
|
+
// written during the current run, so when the other path has nothing new to
|
|
338
|
+
// read it contributes none, and a path whose cursor fell behind (a distro
|
|
339
|
+
// that was briefly unreachable, a TOKENTRACKER_WSL_MODE round-trip) replays
|
|
340
|
+
// its gap into the persisted buckets. Only the persisted set can catch that.
|
|
334
341
|
const sessionId = codexSessionIdFromPath(filePath);
|
|
335
342
|
if (!sessionId) return true;
|
|
336
343
|
const knownPaths = getCursorSessionPaths().get(sessionId);
|
|
337
|
-
if (
|
|
338
|
-
|
|
339
|
-
|
|
344
|
+
if (knownPaths) {
|
|
345
|
+
for (const knownPath of knownPaths) {
|
|
346
|
+
if (knownPath !== filePath) return true;
|
|
347
|
+
}
|
|
340
348
|
}
|
|
349
|
+
|
|
350
|
+
// Steady state: one path, already read past, not rotated. Everything after
|
|
351
|
+
// our own offset is genuinely new, so skip the persisted-set construction.
|
|
352
|
+
if (sameInode && !truncated && startOffset > 0) return false;
|
|
353
|
+
if (prev?.lastTotal) return true;
|
|
341
354
|
return false;
|
|
342
355
|
};
|
|
343
356
|
|
|
@@ -816,21 +816,36 @@ function dedupeClaudeFilesAcrossRoots(groups) {
|
|
|
816
816
|
const mtimeOf = (filePath) => {
|
|
817
817
|
try { return fs.statSync(filePath).mtimeMs; } catch { return -Infinity; }
|
|
818
818
|
};
|
|
819
|
+
const sessionIdOf = (filePath) =>
|
|
820
|
+
path.basename(filePath).match(/^([0-9a-f-]{36})\.jsonl$/i)?.[1] || null;
|
|
821
|
+
|
|
822
|
+
// A UUID appearing twice inside ONE root has no resolvable identity: nothing
|
|
823
|
+
// in the paths says which sibling a copy in another root mirrors. Collapsing
|
|
824
|
+
// by mtime there would evict a genuinely distinct transcript — and, when the
|
|
825
|
+
// other root mirrors the sibling rather than the first file, keep that content
|
|
826
|
+
// twice. Such UUIDs opt out of dedup entirely; an ambiguous duplicate is
|
|
827
|
+
// cheap, a deleted session is not.
|
|
828
|
+
const ambiguous = new Set();
|
|
829
|
+
for (const group of rootGroups) {
|
|
830
|
+
const seenHere = new Set();
|
|
831
|
+
for (const filePath of group) {
|
|
832
|
+
const id = sessionIdOf(filePath);
|
|
833
|
+
if (!id) continue;
|
|
834
|
+
if (seenHere.has(id)) ambiguous.add(id);
|
|
835
|
+
seenHere.add(id);
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
|
|
819
839
|
// Preserve root order for everything kept, so native precedence is stable.
|
|
820
|
-
// Claims are compared only against EARLIER roots: two same-UUID files inside
|
|
821
|
-
// one tree are siblings, not copies, and must both survive.
|
|
822
840
|
const ordered = [];
|
|
823
841
|
const winnerBySession = new Map();
|
|
824
842
|
for (const group of rootGroups) {
|
|
825
|
-
const claimedHere = new Map();
|
|
826
843
|
for (const filePath of group) {
|
|
827
|
-
const id =
|
|
828
|
-
if (!id ||
|
|
829
|
-
// No session identity, or a sibling within this same root.
|
|
844
|
+
const id = sessionIdOf(filePath);
|
|
845
|
+
if (!id || ambiguous.has(id)) {
|
|
830
846
|
if (!ordered.includes(filePath)) ordered.push(filePath);
|
|
831
847
|
continue;
|
|
832
848
|
}
|
|
833
|
-
claimedHere.set(id, filePath);
|
|
834
849
|
const previous = winnerBySession.get(id);
|
|
835
850
|
if (previous === undefined) {
|
|
836
851
|
winnerBySession.set(id, filePath);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,z as a}from"./__vite-browser-external-DFfWg5Zv.js";import{u as p}from"./DialogTitle-CBQEeY1z.js";import{u as c}from"./useScrollLock-BtQ9MIFV.js";const x=n.forwardRef(function(e,r){const{render:l,className:u,style:m,id:s,...t}=e,{store:i}=p(),o=c(s);return i.useSyncedValueWithCleanup("descriptionElementId",o),a("p",e,{ref:r,props:[{id:o},t]})});export{x as D};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o}from"./__vite-browser-external-DFfWg5Zv.js";import{h as r,i as t,p as s}from"./react-BVu5drox.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};
|