tokentracker-cli 0.26.3 → 0.26.4
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/{ActivityHeatmap-BQmAWAi7.js → ActivityHeatmap-D3cm-gHm.js} +1 -1
- package/dashboard/dist/assets/{Card-Cq6JCZM2.js → Card-B6axUG8L.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-CUt6YnjQ.js → DashboardPage-DoJoQwbf.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-BwZwER8Q.js → DevicePage-eqp2bFdZ.js} +1 -1
- package/dashboard/dist/assets/{DialogTitle-wuIq7mbf.js → DialogTitle-hAOVtFkS.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-CEOcEh_z.js → FadeIn-3jTuP_xI.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-BRQgDG4V.js → HeaderGithubStar-CvXZrAGP.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-BrOzm4SC.js → IpCheckPage-Cxd-BFTg.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-vqu0eDLZ.js → LandingPage-D0tsm4l3.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardAvatar-Am5bi8es.js → LeaderboardAvatar-n6_qkxp9.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-Bi-245fM.js → LeaderboardPage-CGtx6u3n.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfileModal-C8LQXrnF.js → LeaderboardProfileModal-BWqzy6Yq.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfilePage-31yIarGc.js → LeaderboardProfilePage-eH9bX1wQ.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-h3rjkQlR.js → LimitsPage-2IvCDnuQ.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-CebJL6tE.js → LocalOnlyNotice-uJRb4VZ7.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-sRWAttYf.js → LoginPage-Cicac58j.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-D5KBjI3r.js → PopoverPopup-C5N80T5y.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-CSMEjb0n.js → ProviderIcon-_T6uI96n.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-B9x5wKaH.js → SettingsPage-BwvB1IJ9.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-Cl76d9F3.js → SkillsPage-D4sEV5zV.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-CfgHQjCv.js → WidgetsPage-DvtstAPv.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage--2jUGICx.js → WrappedPage-BNQp7iJr.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-ru062Kz1.js → arrow-up-right-C1ViLV3k.js} +1 -1
- package/dashboard/dist/assets/check-DNb6JJp_.js +1 -0
- package/dashboard/dist/assets/{chevron-down-Czb08wHc.js → chevron-down-D6ghZItu.js} +1 -1
- package/dashboard/dist/assets/{download-_X5qj-Bp.js → download-DPh7dfoc.js} +1 -1
- package/dashboard/dist/assets/{info-DBw8ck72.js → info-BkhlnyVt.js} +1 -1
- package/dashboard/dist/assets/{main-CYNmFfGa.js → main-iTwSqSnl.js} +2 -2
- package/dashboard/dist/assets/{use-limits-display-prefs-DDOdet4v.js → use-limits-display-prefs-DvqHsZKU.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-Bz5dJHlV.js → use-native-settings-Dl2CIdof.js} +1 -1
- package/dashboard/dist/assets/{use-reduced-motion-7VZbLGR1.js → use-reduced-motion-D9_5HfpE.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-CW7MLh5g.js → use-usage-limits-DJCSTSn7.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-BF2b0rl-.js → useCurrency-DGZ0g8J1.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +1 -1
- package/src/commands/sync.js +16 -6
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/dashboard/dist/assets/check-CG2_3azC.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as a}from"./main-
|
|
1
|
+
import{r as a}from"./main-iTwSqSnl.js";const d=["claude","codex","cursor","gemini","kimi","kiro","copilot","antigravity"],S={claude:"Claude",codex:"Codex",cursor:"Cursor",gemini:"Gemini",kimi:"Kimi",kiro:"Kiro",copilot:"GitHub Copilot",antigravity:"Antigravity"},v={claude:"/brand-logos/claude-code.svg",codex:"/brand-logos/codex.svg",cursor:"/brand-logos/cursor.svg",gemini:"/brand-logos/gemini.svg",kimi:"/brand-logos/kimi.svg",kiro:"/brand-logos/kiro.svg",copilot:"/brand-logos/copilot.svg",antigravity:"/brand-logos/antigravity.svg"},l="tt.limits.providerOrder",g="tt.limits.providerVisibility";function w(){if(typeof window>"u")return[...d];try{const i=window.localStorage.getItem(l);if(!i)return[...d];const s=JSON.parse(i);if(!Array.isArray(s))return[...d];const r=s.filter(c=>d.includes(c));for(const c of d)r.includes(c)||r.push(c);return r}catch{return[...d]}}function y(){const i=Object.fromEntries(d.map(s=>[s,!0]));if(typeof window>"u")return i;try{const s=window.localStorage.getItem(g);if(!s)return i;const r=JSON.parse(s);if(!r||typeof r!="object")return i;const c={...i};for(const u of d)typeof r[u]=="boolean"&&(c[u]=r[u]);return c}catch{return i}}function C(){const[i,s]=a.useState(w),[r,c]=a.useState(y);a.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(l,JSON.stringify(i))}catch{}},[i]),a.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(g,JSON.stringify(r))}catch{}},[r]),a.useEffect(()=>{if(typeof window>"u")return;const o=t=>{t.key===l&&s(w()),t.key===g&&c(y())};return window.addEventListener("storage",o),()=>window.removeEventListener("storage",o)},[]);const u=a.useCallback(o=>{c(t=>({...t,[o]:!t[o]}))},[]),b=a.useCallback(o=>{s(t=>{const e=t.indexOf(o);if(e<=0)return t;const n=[...t];return[n[e-1],n[e]]=[n[e],n[e-1]],n})},[]),p=a.useCallback(o=>{s(t=>{const e=t.indexOf(o);if(e<0||e>=t.length-1)return t;const n=[...t];return[n[e],n[e+1]]=[n[e+1],n[e]],n})},[]),O=a.useCallback((o,t)=>{o!==t&&s(e=>{const n=e.indexOf(o),m=e.indexOf(t);if(n<0||m<0)return e;const f=[...e],[I]=f.splice(n,1);return f.splice(m,0,I),f})},[]),k=a.useCallback(()=>{s([...d]),c(Object.fromEntries(d.map(o=>[o,!0])))},[]),x=a.useMemo(()=>i.filter(o=>r[o]!==!1),[i,r]);return{order:i,visibility:r,visibleOrdered:x,toggle:u,moveUp:b,moveDown:p,moveToward:O,reset:k}}export{v as L,S as a,C as u};
|
package/dashboard/dist/assets/{use-native-settings-Bz5dJHlV.js → use-native-settings-Dl2CIdof.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as a,S as x,r as n,aG as g,aH as m,aI as b,aJ as u,aK as f,aE as h}from"./main-
|
|
1
|
+
import{C as a,S as x,r as n,aG as g,aH as m,aI as b,aJ as u,aK as f,aE as h}from"./main-iTwSqSnl.js";import{C as y}from"./Card-B6axUG8L.js";function p({checked:s,onChange:t,disabled:e,ariaLabel:i}){return a.jsx("button",{type:"button",role:"switch","aria-checked":s,"aria-label":i,onClick:t,disabled:e,className:x("relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-oai-brand-500 disabled:opacity-50 disabled:cursor-not-allowed",s?"bg-oai-brand-500":"bg-oai-gray-300 dark:bg-oai-gray-700"),children:a.jsx("span",{className:x("inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",s?"translate-x-[18px]":"translate-x-[3px]")})})}function j({label:s,hint:t,control:e}){return a.jsxs("div",{className:"flex items-center justify-between gap-4 py-3",children:[a.jsxs("div",{className:"min-w-0 flex-1",children:[a.jsx("div",{className:"text-sm text-oai-gray-900 dark:text-oai-gray-200",children:s}),t?a.jsx("div",{className:"mt-0.5 text-xs text-oai-gray-500 dark:text-oai-gray-400",children:t}):null]}),a.jsx("div",{className:"shrink-0",children:e})]})}function N({title:s,subtitle:t,action:e,children:i}){return a.jsxs(y,{children:[a.jsxs("div",{className:"mb-3 flex items-start justify-between gap-4",children:[a.jsxs("div",{className:"min-w-0 flex-1",children:[a.jsx("h2",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide",children:s}),t?a.jsx("p",{className:"mt-1 truncate text-xs text-oai-gray-500 dark:text-oai-gray-400",children:t}):null]}),e?a.jsx("div",{className:"shrink-0",children:e}):null]}),a.jsx("div",{className:"-mb-3 divide-y divide-oai-gray-200/60 dark:divide-oai-gray-800/60",children:i})]})}function w({options:s,value:t,onChange:e}){return a.jsx("div",{className:"inline-flex items-center rounded-lg border border-oai-gray-200 bg-oai-gray-50 p-0.5 dark:border-oai-gray-800 dark:bg-oai-gray-900",children:s.map(({value:i,label:d,Icon:l})=>{const r=t===i;return a.jsxs("button",{type:"button",onClick:()=>e(i),"aria-pressed":r,className:x("inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",r?"bg-white text-oai-black shadow-sm dark:bg-oai-gray-800 dark:text-white":"text-oai-gray-500 hover:text-oai-black dark:text-oai-gray-400 dark:hover:text-white"),children:[l?a.jsx(l,{className:"h-3.5 w-3.5","aria-hidden":!0}):null,a.jsx("span",{children:d})]},i)})})}function S(){const[s,t]=n.useState(null),e=g()&&m();n.useEffect(()=>{if(!e)return;const r=b(o=>t(o));return u(),r},[e]);const i=n.useCallback((r,o)=>{e&&(t(c=>c&&{...c,[r]:o}),f(r,o))},[e]),d=n.useCallback(r=>{e&&h(r)},[e]),l=n.useCallback(()=>{e&&u()},[e]);return{available:e,settings:s,setSetting:i,runAction:d,refresh:l}}export{N as S,p as T,j as a,w as b,S as u};
|
package/dashboard/dist/assets/{use-reduced-motion-7VZbLGR1.js → use-reduced-motion-D9_5HfpE.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{aL as t,aM as o,r,aN as s}from"./main-
|
|
1
|
+
import{aL as t,aM as o,r,aN as s}from"./main-iTwSqSnl.js";function u(){!t.current&&o();const[e]=r.useState(s.current);return e}export{u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r,am as l}from"./main-
|
|
1
|
+
import{r,am as l}from"./main-iTwSqSnl.js";function m(i){const[o,a]=r.useState(null),[u,s]=r.useState(null),[c,f]=r.useState(!0),n=!!i?.initialRefresh,g=r.useCallback(async()=>{try{const e=await l({refresh:!0});a(e&&typeof e=="object"?e:null),s(null)}catch(e){s(e?.message||String(e))}},[]);return r.useEffect(()=>{let e=!1;return(async()=>{try{const t=await l(n?{refresh:!0}:{});if(e)return;a(t&&typeof t=="object"?t:null),s(null)}catch(t){if(e)return;s(t?.message||String(t))}finally{e||f(!1)}})(),()=>{e=!0}},[n]),{data:o,error:u,isLoading:c,refresh:g}}export{m as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,aB as t,aC as r,H as c}from"./main-
|
|
1
|
+
import{r as e,aB as t,aC as r,H as c}from"./main-iTwSqSnl.js";const a=Object.freeze({currency:c,rate:1,symbol:"$",rates:{...r},rateSource:"default",rateFetchedAt:null,setCurrency:()=>{}});function u(){return e.useContext(t)??a}export{u};
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
]
|
|
211
211
|
}
|
|
212
212
|
</script>
|
|
213
|
-
<script type="module" crossorigin src="/assets/main-
|
|
213
|
+
<script type="module" crossorigin src="/assets/main-iTwSqSnl.js"></script>
|
|
214
214
|
<link rel="stylesheet" crossorigin href="/assets/main-smnMFIqE.css">
|
|
215
215
|
</head>
|
|
216
216
|
<body>
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"description": "Shareable Token Tracker dashboard snapshot."
|
|
52
52
|
}
|
|
53
53
|
</script>
|
|
54
|
-
<script type="module" crossorigin src="/assets/main-
|
|
54
|
+
<script type="module" crossorigin src="/assets/main-iTwSqSnl.js"></script>
|
|
55
55
|
<link rel="stylesheet" crossorigin href="/assets/main-smnMFIqE.css">
|
|
56
56
|
</head>
|
|
57
57
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tokentracker-cli",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.4",
|
|
4
4
|
"description": "Token usage tracker for AI agent CLIs (Claude Code, Codex, Cursor, Gemini, Kiro, OpenCode, OpenClaw, Every Code, Hermes, GitHub Copilot, Kimi Code, CodeBuddy, Grok Build, oh-my-pi, pi, Craft Agents, Kilo CLI, Kilo Code, Roo Code, Zed Agent, Goose)",
|
|
5
5
|
"main": "src/cli.js",
|
|
6
6
|
"bin": {
|
package/src/commands/sync.js
CHANGED
|
@@ -105,11 +105,21 @@ const CLAUDE_MEM_OBSERVER_PATH_SEGMENT = "--claude-mem-observer-sessions";
|
|
|
105
105
|
// Code's sub-agent / thinking transport paths). The repaired ground truth
|
|
106
106
|
// was therefore inflated by 1.6–3.7x on those providers — v3 left it that
|
|
107
107
|
// way.
|
|
108
|
-
// v6 re-
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
|
|
108
|
+
// v6 was bumped in 0.26.3 to re-run the repair with the zero-usage dedup fix
|
|
109
|
+
// applied. SHIPPING 0.26.3 caused catastrophic data loss on every upgrader
|
|
110
|
+
// whose ~/.claude session jsonls had been pruned by Claude Code's own
|
|
111
|
+
// cleanup: the repair does atomic-drop + rescan, so any hour_start no longer
|
|
112
|
+
// represented in the on-disk logs is silently removed from queue.jsonl. On
|
|
113
|
+
// the reporter's machine this wiped 2.17B claude tokens (-1.27B opus-4-7,
|
|
114
|
+
// -474M opus-4-6, -376M sonnet-4-5, -48M haiku, -6M sonnet-4-6). The
|
|
115
|
+
// upload-offset reset also propagated the damage to the cloud.
|
|
116
|
+
// 0.26.4 HALTS back at v4 so the buggy atomic-rewrite path stops auto-firing
|
|
117
|
+
// on existing installs. The dedup fixes in parseClaudeFile /
|
|
118
|
+
// categorizeSessionFile / computeClaudeGroundTruthBuckets are KEPT — they are
|
|
119
|
+
// correct in isolation, and any future repair will produce the right answer
|
|
120
|
+
// for whatever data is actually on disk. A targeted, log-gap-safe mimo
|
|
121
|
+
// migration will ship later under its own key.
|
|
122
|
+
const CLAUDE_GROUND_TRUTH_REPAIR_KEY = "claudeGroundTruthRepair_2026_05_v4";
|
|
113
123
|
|
|
114
124
|
async function cmdSync(argv) {
|
|
115
125
|
const opts = parseArgs(argv);
|
|
@@ -2047,7 +2057,7 @@ async function repairClaudeQueueFromGroundTruth({
|
|
|
2047
2057
|
}
|
|
2048
2058
|
uploadState.offset = 0;
|
|
2049
2059
|
uploadState.updatedAt = new Date().toISOString();
|
|
2050
|
-
uploadState.note = "
|
|
2060
|
+
uploadState.note = "reset_after_claude_repair_2026_05_v4";
|
|
2051
2061
|
await fs.writeFile(queueStatePath, JSON.stringify(uploadState));
|
|
2052
2062
|
}
|
|
2053
2063
|
|