tokentracker-cli 0.29.0 → 0.29.2

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 (40) hide show
  1. package/dashboard/dist/assets/ActivityHeatmap-C7-tnMYf.js +42 -0
  2. package/dashboard/dist/assets/{Card-DQ4KSzOX.js → Card-DSgpCS30.js} +1 -1
  3. package/dashboard/dist/assets/{DashboardPage-mXGQVJX7.js → DashboardPage-CB6VzM2W.js} +1 -1
  4. package/dashboard/dist/assets/{DevicePage-DXZ8_moI.js → DevicePage-CvrCNfjD.js} +1 -1
  5. package/dashboard/dist/assets/{DialogTitle-CTBUN69H.js → DialogTitle-B-afswln.js} +1 -1
  6. package/dashboard/dist/assets/{FadeIn-tXZ_F06C.js → FadeIn-D1-QPLIW.js} +1 -1
  7. package/dashboard/dist/assets/{HeaderGithubStar-Cx90zSdj.js → HeaderGithubStar-B98VaHbR.js} +1 -1
  8. package/dashboard/dist/assets/{IpCheckPage-CALEO2vH.js → IpCheckPage-CJxv_Sd8.js} +1 -1
  9. package/dashboard/dist/assets/{LandingPage-Dj1I4sGB.js → LandingPage-CIOqWNDm.js} +1 -1
  10. package/dashboard/dist/assets/{LeaderboardAvatar-BMyPO6e0.js → LeaderboardAvatar-D6qRteef.js} +1 -1
  11. package/dashboard/dist/assets/{LeaderboardPage-CsXiMWQt.js → LeaderboardPage-CgtoFmMi.js} +3 -3
  12. package/dashboard/dist/assets/{LeaderboardProfileModal-CGLKlwLV.js → LeaderboardProfileModal-OTLhvzV6.js} +1 -1
  13. package/dashboard/dist/assets/{LeaderboardProfilePage-BQKgb92h.js → LeaderboardProfilePage-C7OaZcf2.js} +1 -1
  14. package/dashboard/dist/assets/{LimitsPage-BbP-OgyM.js → LimitsPage-pyyJbh3F.js} +1 -1
  15. package/dashboard/dist/assets/{LocalOnlyNotice-CiR5RLtx.js → LocalOnlyNotice-3LPVUJ2h.js} +1 -1
  16. package/dashboard/dist/assets/{LoginPage-DrHY8Nz8.js → LoginPage-CDLz8PnP.js} +1 -1
  17. package/dashboard/dist/assets/{PopoverPopup-B-pG30bS.js → PopoverPopup-97Rik7mb.js} +1 -1
  18. package/dashboard/dist/assets/{ProviderIcon-BX8tNkV1.js → ProviderIcon-XOgnf2pw.js} +1 -1
  19. package/dashboard/dist/assets/{SettingsPage-jMeX-2mJ.js → SettingsPage-KVjKUepK.js} +1 -1
  20. package/dashboard/dist/assets/{SkillsPage-CuIVvKSg.js → SkillsPage-DyIY1U9O.js} +1 -1
  21. package/dashboard/dist/assets/{WidgetsPage-B4qxj2fO.js → WidgetsPage-BU7ejAYd.js} +1 -1
  22. package/dashboard/dist/assets/{WrappedPage-BSt0DgNG.js → WrappedPage-Cp8uyLbu.js} +1 -1
  23. package/dashboard/dist/assets/{arrow-up-right-DZbOFuAl.js → arrow-up-right-CBzDSqD7.js} +1 -1
  24. package/dashboard/dist/assets/check-Bsgzg2T8.js +1 -0
  25. package/dashboard/dist/assets/{chevron-down-XmOalYxj.js → chevron-down--Hb5e71i.js} +1 -1
  26. package/dashboard/dist/assets/{download-DnBTdIEl.js → download-BaVXaxbw.js} +1 -1
  27. package/dashboard/dist/assets/{info-86V2x0oj.js → info-WGRGGnfx.js} +1 -1
  28. package/dashboard/dist/assets/{main-B4LHBtUR.js → main-DDTfmaoo.js} +2 -2
  29. package/dashboard/dist/assets/{use-limits-display-prefs-CKZVfJaX.js → use-limits-display-prefs-C1AkRZcO.js} +1 -1
  30. package/dashboard/dist/assets/{use-native-settings-D6FpZmw6.js → use-native-settings-DdooJHwm.js} +1 -1
  31. package/dashboard/dist/assets/{use-reduced-motion-Cg57a_M3.js → use-reduced-motion-wvh7iFTi.js} +1 -1
  32. package/dashboard/dist/assets/{use-usage-limits-CqQQaZ8g.js → use-usage-limits-D1mepldk.js} +1 -1
  33. package/dashboard/dist/assets/{useCurrency-D4WRq_Qm.js → useCurrency-C3szwbkj.js} +1 -1
  34. package/dashboard/dist/index.html +26 -1
  35. package/dashboard/dist/share.html +25 -1
  36. package/package.json +1 -1
  37. package/src/lib/pricing/curated-overrides.json +1 -0
  38. package/src/lib/pricing/seed-snapshot.json +1 -1
  39. package/dashboard/dist/assets/ActivityHeatmap-DUgsI1KA.js +0 -42
  40. package/dashboard/dist/assets/check-Ce_bYWhj.js +0 -1
@@ -1 +1 @@
1
- import{r as a}from"./main-B4LHBtUR.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};
1
+ import{r as a}from"./main-DDTfmaoo.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};
@@ -1 +1 @@
1
- import{C as a,S as x,r as n,aJ as g,aK as m,aL as b,aM as u,aN as f,aH as h}from"./main-B4LHBtUR.js";import{C as y}from"./Card-DQ4KSzOX.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 N({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 j({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{j as S,p as T,N as a,w as b,S as u};
1
+ import{C as a,S as x,r as n,aJ as g,aK as m,aL as b,aM as u,aN as f,aH as h}from"./main-DDTfmaoo.js";import{C as y}from"./Card-DSgpCS30.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 N({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 j({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{j as S,p as T,N as a,w as b,S as u};
@@ -1 +1 @@
1
- import{aO as t,aP as o,r,aQ as s}from"./main-B4LHBtUR.js";function u(){!t.current&&o();const[e]=r.useState(s.current);return e}export{u};
1
+ import{aO as t,aP as o,r,aQ as s}from"./main-DDTfmaoo.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-B4LHBtUR.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
+ import{r,am as l}from"./main-DDTfmaoo.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,aE as t,aF as r,H as c}from"./main-B4LHBtUR.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};
1
+ import{r as e,aE as t,aF as r,H as c}from"./main-DDTfmaoo.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};
@@ -24,6 +24,31 @@
24
24
  <meta name="theme-color" content="#fafafa" media="(prefers-color-scheme: light)" />
25
25
  <meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)" />
26
26
  <script>
27
+ // ES2022 built-in polyfills for WebKit < 15.4 (macOS 12.0 Monterey ships Safari 15.0).
28
+ // Base UI uses Object.hasOwn and TrendMonitor uses Array.prototype.at — both land in
29
+ // Safari 15.4; esbuild down-levels syntax but never polyfills built-ins, so without this
30
+ // the dashboard crashes with "Object.hasOwn is not a function". Run before the bundle.
31
+ (function () {
32
+ try {
33
+ if (typeof Object.hasOwn !== "function") {
34
+ Object.defineProperty(Object, "hasOwn", {
35
+ value: function (o, k) { return Object.prototype.hasOwnProperty.call(o, k); },
36
+ configurable: true, writable: true,
37
+ });
38
+ }
39
+ function at(n) {
40
+ n = Math.trunc(n) || 0;
41
+ if (n < 0) n += this.length;
42
+ return n < 0 || n >= this.length ? undefined : this[n];
43
+ }
44
+ if (typeof Array.prototype.at !== "function") {
45
+ Object.defineProperty(Array.prototype, "at", { value: at, configurable: true, writable: true });
46
+ }
47
+ if (typeof String.prototype.at !== "function") {
48
+ Object.defineProperty(String.prototype, "at", { value: at, configurable: true, writable: true });
49
+ }
50
+ } catch (e) {}
51
+ })();
27
52
  document.documentElement.classList.add("js");
28
53
  // TokenTrackerBar WKWebView: mark before first paint so inline CSS below can clear html/body (NSVisualEffectView shows through).
29
54
  (function () {
@@ -210,7 +235,7 @@
210
235
  ]
211
236
  }
212
237
  </script>
213
- <script type="module" crossorigin src="/assets/main-B4LHBtUR.js"></script>
238
+ <script type="module" crossorigin src="/assets/main-DDTfmaoo.js"></script>
214
239
  <link rel="stylesheet" crossorigin href="/assets/main-ClqhPPd3.css">
215
240
  </head>
216
241
  <body>
@@ -23,6 +23,30 @@
23
23
  <link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180" />
24
24
  <meta name="theme-color" content="#000000" />
25
25
  <script>
26
+ // ES2022 built-in polyfills for WebKit < 15.4 (macOS 12.0 Monterey ships Safari 15.0).
27
+ // Base UI uses Object.hasOwn and Array.prototype.at lands in Safari 15.4; esbuild
28
+ // down-levels syntax but never polyfills built-ins. Run before the bundle.
29
+ (function () {
30
+ try {
31
+ if (typeof Object.hasOwn !== "function") {
32
+ Object.defineProperty(Object, "hasOwn", {
33
+ value: function (o, k) { return Object.prototype.hasOwnProperty.call(o, k); },
34
+ configurable: true, writable: true,
35
+ });
36
+ }
37
+ function at(n) {
38
+ n = Math.trunc(n) || 0;
39
+ if (n < 0) n += this.length;
40
+ return n < 0 || n >= this.length ? undefined : this[n];
41
+ }
42
+ if (typeof Array.prototype.at !== "function") {
43
+ Object.defineProperty(Array.prototype, "at", { value: at, configurable: true, writable: true });
44
+ }
45
+ if (typeof String.prototype.at !== "function") {
46
+ Object.defineProperty(String.prototype, "at", { value: at, configurable: true, writable: true });
47
+ }
48
+ } catch (e) {}
49
+ })();
26
50
  document.documentElement.classList.add("js");
27
51
  </script>
28
52
  <style>
@@ -51,7 +75,7 @@
51
75
  "description": "Shareable Token Tracker dashboard snapshot."
52
76
  }
53
77
  </script>
54
- <script type="module" crossorigin src="/assets/main-B4LHBtUR.js"></script>
78
+ <script type="module" crossorigin src="/assets/main-DDTfmaoo.js"></script>
55
79
  <link rel="stylesheet" crossorigin href="/assets/main-ClqhPPd3.css">
56
80
  </head>
57
81
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tokentracker-cli",
3
- "version": "0.29.0",
3
+ "version": "0.29.2",
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": {
@@ -5,6 +5,7 @@
5
5
  "deepseek_v4_pro_discount_expiry": "2026-05-31T15:59:00Z — DeepSeek v4-pro is currently at a 75% promotional discount. After expiry the prices revert to 4x: input $1.74/M, output $3.48/M, cache_read $0.0145/M, cache_write $1.74/M. Update this file before the cutover."
6
6
  },
7
7
  "exact": {
8
+ "claude-opus-4-8": { "input": 5, "output": 25, "cache_read": 0.5, "cache_write": 6.25, "note": "Opus 4.8 not yet in LiteLLM. Pin to the standard Opus tier (same as 4.6/4.7); remove once LiteLLM carries it." },
8
9
  "kiro-agent": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 },
9
10
  "kiro-cli-agent": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75 },
10
11
  "hy3-preview-agent":{ "input": 0, "output": 0, "cache_read": 0 },