tokentracker-cli 1.0.0 → 1.0.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.
- package/dashboard/dist/assets/{AchievementBadge-Dpf3VBcS.js → AchievementBadge-CBGtv8Gf.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-BSGbLI5V.js → AchievementsPage-DBNXAqHB.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-C10HXoq1.js → AchievementsSection-D9ndOgjA.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DajrEc3e.js → BadgeDetailModal-B_xo1k4z.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-BpbTCJML.js → BotAnimated-OaYL-NrW.js} +1 -1
- package/dashboard/dist/assets/{Card-CDCj927L.js → Card-BprDyWQy.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-CiTkm04x.js → ClawdAnimated-DKzj5hnk.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-CYHUUX7M.js → CommandPalette-Y7y8uy9B.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-BHZehk5P.js → CommunityStatsModal-DtJjD6Gk.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-DZlT_xe_.js → ConfirmModal-Dnq9wDSB.js} +1 -1
- package/dashboard/dist/assets/{Controls-Bcijikco.js → Controls-B3LyuY9G.js} +1 -1
- package/dashboard/dist/assets/DashboardPage-uyz3GHPG.js +1 -0
- package/dashboard/dist/assets/{DevicePage-DzisRlts.js → DevicePage-TBvBfX-E.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-CQ9hFUNv.js → DialogClose-C0xfVNxI.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-B1_lWQbi.js +1 -0
- package/dashboard/dist/assets/{DialogTitle--bItxq3K.js → DialogTitle-h96NnlwF.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-v5sAHZBu.js → FadeIn-BlT9LOhg.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-Bg8R51fN.js → HeaderGithubStar-BC8PlJFf.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-DToNFKkJ.js → HoverTooltip-D2H0rvOx.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-BmFXYXZm.js → IpCheckPage-Bf9pTUyL.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-COpRacX0.js → LandingPage-CqFZZcgl.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-D0l8_L_d.js → LeaderboardAvatar-Bglw3mWk.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-BJHS44Fq.js → LeaderboardPage-Ba4rstvv.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-C1K9rSGn.js → LeaderboardProfileModal-DITfDxdj.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-CvR48D_y.js → LeaderboardProfilePage-9DgMqaVi.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-BN79yMkb.js → LimitsPage-Ct5IA5Ny.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-BwTJpkDW.js → LocalOnlyNotice-DCgOvXBZ.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-BMXAg1rZ.js → LoginCard-Bo3St7wp.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-Bf0F_UPK.js → LoginModal-CqN9Lhx0.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-BylH2waa.js → LoginPage-CLvn_ZAo.js} +1 -1
- package/dashboard/dist/assets/{PetPage-X4v_J-Uj.js → PetPage-B-tmGNaA.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-yEQVU5C_.js → PopoverPopup-D0KIhAfw.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-KRXIghW0.js → ProviderIcon-DLytDN3-.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-DQQF2rsl.js → ResetPasswordPage-CGVTHdB9.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-VkVwcoXk.js → SegmentedControl-B7gk-3QK.js} +1 -1
- package/dashboard/dist/assets/{Select-CxW2C8OG.js → Select-qbqB_qtp.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-D6vhaI0Q.js → SelectItemText-Qzhp3UFE.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-CCKqUZhI.js → ServiceStatusPage-DPe_EeVu.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-Huqt77Qt.js → SessionsPage-Dza7qrmT.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-CpX8GYce.js → SettingsPage-C_Am0uFM.js} +2 -2
- package/dashboard/dist/assets/{SkillsPage-S1dtu_Cd.js → SkillsPage-Bsu5m-xp.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-BayM0FOG.js → TokenGalaxy-COH6RLu3.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-B1KG8B5q.js → ToolbarRootContext-B_XUhyzz.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-DYqz9nLw.js → TrendMonitor-DMgbTVNO.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-WuzVeCBG.js → WidgetsPage-gQTmgsN6.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-Bpn9GYHz.js → WrappedPage-B5nLQG1F.js} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-DUAYhIIg.js +45 -0
- package/dashboard/dist/assets/{agent-logos-DVE956SY.js → agent-logos-B92se84f.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-B7aZy0wJ.js → arrow-up-right-THgpMHTL.js} +1 -1
- package/dashboard/dist/assets/{check-55YI8PGo.js → check-CZ5GlBuF.js} +1 -1
- package/dashboard/dist/assets/{composite--O2XKSlW.js → composite-pohmvEEN.js} +1 -1
- package/dashboard/dist/assets/{copy-DDVFmqF5.js → copy-BEu6UqzK.js} +1 -1
- package/dashboard/dist/assets/{download-DmIFrL1S.js → download-580FSMzx.js} +1 -1
- package/dashboard/dist/assets/{external-link-DwG_AAOo.js → external-link-DSl6rKSu.js} +1 -1
- package/dashboard/dist/assets/{flame-ANwvantJ.js → flame-CuoqhgO0.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-BzZ_DfX2.js → format-tokens-yngxPaJs.js} +1 -1
- package/dashboard/dist/assets/{icons-CdyVgzlu.js → icons-C5P7F226.js} +1 -1
- package/dashboard/dist/assets/{index-D8g1p_Ee.js → index-1CFe9s91.js} +1 -1
- package/dashboard/dist/assets/{index-B-1uJU_R.js → index-CVccZBhd.js} +1 -1
- package/dashboard/dist/assets/{index-D0VhCSlC.js → index-DkLVCz9v.js} +1 -1
- package/dashboard/dist/assets/{info-n2XpcOlm.js → info-BtYRYa79.js} +1 -1
- package/dashboard/dist/assets/{link-2-Bq9GUX22.js → link-2-D4bPs6lx.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-fkYFxXuJ.js → loader-circle-CAcXf7Ue.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-C5v08iPD.js → maximize-2-B3xxE3HC.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-AG_bzlWZ.js → modifiers.esm-DvoWZTDt.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-BEjlJhuw.js → monitor-smartphone-CkyNQoTv.js} +1 -1
- package/dashboard/dist/assets/{plus-BfdtMxnD.js → plus-BCXK4rAO.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BvjuoQty.js → provider-display-Y5ggva-H.js} +1 -1
- package/dashboard/dist/assets/{react-f77D-LSn.js → react-CjlEHr8p.js} +1 -1
- package/dashboard/dist/assets/{search-Dmczow8i.js → search-Dh5kBuL2.js} +1 -1
- package/dashboard/dist/assets/{skills-api-BuqPQei_.js → skills-api-XhL8INjh.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-CDAVQaFQ.js → sortable.esm-CFa-CzqV.js} +1 -1
- package/dashboard/dist/assets/{store-C2inKcM-.js → store-Bt47laU0.js} +1 -1
- package/dashboard/dist/assets/{terminal-C1O422UZ.js → terminal-BXW29s08.js} +1 -1
- package/dashboard/dist/assets/{trash-CXOKPZfQ.js → trash-CYw5PqQr.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-CKfyxLvl.js → use-community-stats-C5t_95Jj.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-C3rQR4BN.js → use-latest-request-guard-CcrXitYE.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-Ic4GUPRY.js → use-limits-display-prefs-DktuWI-1.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-Cvbz_wcj.js → use-ordered-list-DUHxxfXc.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-dYTH0OxK.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-u_qW99gD.js → use-session-efficiency-pref-CDSUns2p.js} +1 -1
- package/dashboard/dist/assets/{use-transform-CVGiBxJK.js → use-transform-DkLOu1mx.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-MPu696v0.js → use-usage-limits-BTbbhOUs.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-BOBz18If.js → useCurrency-C7QiSZUH.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-BooCzJJZ.js → useTokenFormat-Kv5h6RPd.js} +1 -1
- package/dashboard/dist/assets/{zap-M_x9dAwo.js → zap-DOdxB6Nn.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 +3 -0
- package/src/commands/sync.js +10 -1
- package/src/lib/codex-rollout-parser.js +86 -8
- package/src/lib/codex-usage-record.js +195 -0
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +154 -1
- package/dashboard/dist/assets/DashboardPage-yREqx-tx.js +0 -1
- package/dashboard/dist/assets/DialogDescription-CLXWH3lG.js +0 -1
- package/dashboard/dist/assets/__vite-browser-external-B1XxVtUQ.js +0 -45
- package/dashboard/dist/assets/use-reduced-motion-DewlF5tk.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as c}from"./__vite-browser-external-
|
|
1
|
+
import{m as c}from"./__vite-browser-external-DUAYhIIg.js";const e={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};e.node;const o=c(e);export{o as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{O as E,P as I,Q as R,S as $}from"./__vite-browser-external-
|
|
1
|
+
import{O as E,P as I,Q as R,S as $}from"./__vite-browser-external-DUAYhIIg.js";function s(e){return typeof e=="string"?e.trim():""}function g(e){return Array.isArray(e)?[...new Set(e.map(s).filter(Boolean))]:[]}function v(e){const t=s(e).replace(/\\/g,"/");if(!t||t.startsWith("/")||/^[A-Za-z]:\//.test(t))return"";const n=t.replace(/\/+$/g,"").split("/").filter(Boolean);return!n.length||n.some(r=>r==="."||r==="..")?"":n.join("/")}function C(e){const t=s(e).replace(/\\/g,"/");return!t||t.startsWith("/")||t.includes(":/")||/[A-Za-z]:\//.test(t)?"":t}function S(e){return s(e?.key)||s(e?.id)||`local:${s(e?.directory)}`}function L(e){return(Array.isArray(e)?e:[]).filter(t=>t?.scope!=="system").map(t=>{const n=v(t?.directory),r=C(S(t));if(!r||!n)return null;const i=t?.scope==="plugin"?"plugin":t?.managed?"managed":"local",o=v(t?.sourceName);return{key:r,name:s(t?.name)||n.split("/").pop()||"Skill",directory:n,targets:g(t?.targets),managed:t?.managed===!0,readOnly:t?.readOnly===!0,scope:i,...o?{sourceName:o}:{}}}).filter(t=>!!t)}function N(e){return{id:s(e?.id),name:s(e?.device_name)||s(e?.id),platform:s(e?.platform)||null,scannedAt:s(e?.scanned_at)||null}}function m(e,t){const n=Array.isArray(e.deviceSources)?e.deviceSources:[];return n.some(r=>r.id===t.id)?e:{...e,deviceSources:[...n,t]}}function q(e,t,n){const r=(Array.isArray(e)?e:[]).filter(o=>o?.scope!=="system").map(o=>({...o})),i=new Map;r.forEach((o,a)=>i.set(S(o).toLowerCase(),a));for(const o of Array.isArray(t?.devices)?t.devices:[]){const a=N(o);if(!(!a.id||a.id===n))for(const c of Array.isArray(o?.skills)?o.skills:[]){if(c?.scope==="system")continue;const u=S(c),p=s(c?.directory);if(!u||!p)continue;const h=u.toLowerCase(),k=g(c.targets),y=i.get(h);if(y!=null){const f=r[y];if(f.remote===!0&&f.inventoryOnly===!0){const A=[...new Set([...g(f.targets),...k])],j=Object.fromEntries(A.map(U=>[U,"synced"]));r[y]=m({...f,targets:A,targetStates:j},a)}else r[y]=m(f,a);continue}const w=k,_=Object.fromEntries(w.map(f=>[f,"synced"])),b=m({id:`remote:${encodeURIComponent(u)}`,key:u,name:s(c.name)||p.split(/[\\/]/).pop()||"Skill",directory:p,description:"",targets:w,targetStates:_,managed:!1,readOnly:!0,inventoryOnly:!0,remote:!0,scope:s(c.scope)||"local",sourceName:s(c.sourceName)||null},a);i.set(h,r.length),r.push(b)}}return r.sort((o,a)=>String(o.name||o.directory).localeCompare(String(a.name||a.directory))||String(o.id||o.key).localeCompare(String(a.id||a.key)))}const T="tokentracker-skills",P="tokentracker-account-skills",J=15e3;async function d(e){const t=new URL(`/functions/${T}`,window.location.origin);if(e)for(const[i,o]of Object.entries(e))o!=null&&o!==""&&t.searchParams.set(i,String(o));const n=await fetch(t.toString(),{headers:{Accept:"application/json"},cache:"no-store"}),r=await n.json().catch(()=>null);if(!n.ok)throw new Error(r?.error||`Request failed with HTTP ${n.status}`);return r}async function l(e){const t=await $(),n=await fetch(`/functions/${T}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",...t},cache:"no-store",body:JSON.stringify(e)}),r=await n.json().catch(()=>null);if(!n.ok||r?.ok===!1)throw new Error(r?.error||`Request failed with HTTP ${n.status}`);return r}function x(){return d({mode:"installed"})}function H(e={}){return d({mode:"discover",...e.force?{force:1}:{}})}function z(e,t=0,n=20){return d({mode:"search",q:e,offset:t,limit:n})}function B(){return d({mode:"repos"})}function M(e,t){return l({action:"install",skill:e,targets:t})}function D(e){return l({action:"update_all",ids:e})}function G(e){return l({action:"uninstall",id:e})}function Q(e){return l({action:"restore",id:e})}function W(e,t){return l({action:"set_targets",id:e,targets:t})}function Z(e,t){return l({action:"import_local",directory:e,targets:t})}function F(e,t){return l({action:"delete_local",directory:e,targets:t||[]})}function V(e){return l({action:"add_repo",repo:e})}function X(e,t){return l({action:"remove_repo",owner:e,name:t})}function Y(e={}){return d({mode:"popular",...e.force?{force:1}:{}})}function ee(e={}){return d({mode:"updates",...e.force?{force:1}:{}})}function te(e={}){return d({mode:"skill_usage",...e.force?{force:1}:{}})}async function O({accessToken:e,method:t="GET",body:n}){if(!e||!E(e))throw new Error("Skills sync requires sign-in");const r=I();if(!r)throw new Error("InsForge base URL not configured");const i={Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${e}`},o=R();o&&(i.apikey=o);const a=new AbortController,c=setTimeout(()=>a.abort(),J);try{const u=await fetch(`${r.replace(/\/$/,"")}/functions/${P}`,{method:t,headers:i,cache:"no-store",signal:a.signal,...n==null?{}:{body:JSON.stringify(n)}}),p=await u.json().catch(()=>null);if(!u.ok)throw new Error(p?.error||`Request failed with HTTP ${u.status}`);return p}finally{clearTimeout(c)}}function ne(e){return O({accessToken:e})}function re({accessToken:e,deviceId:t,skills:n}){return O({accessToken:e,method:"POST",body:{device_id:t,skills:L(n)}})}export{ne as a,B as b,Y as c,H as d,ee as e,te as f,x as g,F as h,M as i,W as j,Z as k,D as l,q as m,X as n,V as o,re as p,Q as r,z as s,G as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as c,d as P,a2 as Oe}from"./__vite-browser-external-
|
|
1
|
+
import{r as c,d as P,a2 as Oe}from"./__vite-browser-external-DUAYhIIg.js";function Sn(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return c.useMemo(()=>r=>{t.forEach(o=>o(r))},t)}const tt=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function me(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function bt(e){return"nodeType"in e}function B(e){var t,n;return e?me(e)?e:bt(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}function wt(e){const{Document:t}=B(e);return e instanceof t}function Be(e){return me(e)?!1:e instanceof B(e).HTMLElement}function Wt(e){return e instanceof B(e).SVGElement}function ye(e){return e?me(e)?e.document:bt(e)?wt(e)?e:Be(e)||Wt(e)?e.ownerDocument:document:document:document}const Q=tt?c.useLayoutEffect:c.useEffect;function mt(e){const t=c.useRef(e);return Q(()=>{t.current=e}),c.useCallback(function(){for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return t.current==null?void 0:t.current(...r)},[])}function En(){const e=c.useRef(null),t=c.useCallback((r,o)=>{e.current=setInterval(r,o)},[]),n=c.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[t,n]}function ke(e,t){t===void 0&&(t=[e]);const n=c.useRef(e);return Q(()=>{n.current!==e&&(n.current=e)},t),n}function Fe(e,t){const n=c.useRef();return c.useMemo(()=>{const r=e(n.current);return n.current=r,r},[...t])}function Je(e){const t=mt(e),n=c.useRef(null),r=c.useCallback(o=>{o!==n.current&&t?.(o,n.current),n.current=o},[]);return[n,r]}function ft(e){const t=c.useRef();return c.useEffect(()=>{t.current=e},[e]),t.current}let ct={};function $e(e,t){return c.useMemo(()=>{if(t)return t;const n=ct[e]==null?0:ct[e]+1;return ct[e]=n,e+"-"+n},[e,t])}function Ht(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.reduce((i,s)=>{const a=Object.entries(s);for(const[l,u]of a){const f=i[l];f!=null&&(i[l]=f+e*u)}return i},{...t})}}const we=Ht(1),ze=Ht(-1);function In(e){return"clientX"in e&&"clientY"in e}function yt(e){if(!e)return!1;const{KeyboardEvent:t}=B(e.target);return t&&e instanceof t}function Mn(e){if(!e)return!1;const{TouchEvent:t}=B(e.target);return t&&e instanceof t}function ht(e){if(Mn(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return In(e)?{x:e.clientX,y:e.clientY}:null}const _e=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[_e.Translate.toString(e),_e.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),Tt="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function An(e){return e.matches(Tt)?e:e.querySelector(Tt)}const On={display:"none"};function Tn(e){let{id:t,value:n}=e;return P.createElement("div",{id:t,style:On},n)}function Nn(e){let{id:t,announcement:n,ariaLiveType:r="assertive"}=e;const o={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return P.createElement("div",{id:t,style:o,role:"status","aria-live":r,"aria-atomic":!0},n)}function Ln(){const[e,t]=c.useState("");return{announce:c.useCallback(r=>{r!=null&&t(r)},[]),announcement:e}}const Kt=c.createContext(null);function kn(e){const t=c.useContext(Kt);c.useEffect(()=>{if(!t)throw new Error("useDndMonitor must be used within a children of <DndContext>");return t(e)},[e,t])}function zn(){const[e]=c.useState(()=>new Set),t=c.useCallback(r=>(e.add(r),()=>e.delete(r)),[e]);return[c.useCallback(r=>{let{type:o,event:i}=r;e.forEach(s=>{var a;return(a=s[o])==null?void 0:a.call(s,i)})},[e]),t]}const Pn={draggable:`
|
|
2
2
|
To pick up a draggable item, press the space bar.
|
|
3
3
|
While dragging, use the arrow keys to move the item.
|
|
4
4
|
Press space again to drop the item in its new position, or press escape to cancel.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as r}from"./__vite-browser-external-
|
|
1
|
+
import{E as r}from"./__vite-browser-external-DUAYhIIg.js";import{F as g}from"./composite-pohmvEEN.js";function a(e,n,u=!1){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:new g({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:e,floatingId:n,syncOnly:!0,nested:u,onOpenChange:void 0}),floatingId:n,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:r,inactiveTriggerProps:r,popupProps:r}}const o=e=>e.triggerIdProp??e.activeTriggerId,t=e=>e.openProp??e.open,i=e=>(e.popupElement?.id??e.floatingId)||void 0;function p(e,n){return n!==void 0&&t(e)&&o(e)===n}function l(e,n){return p(e,n)?!0:n!==void 0&&t(e)&&o(e)==null&&e.triggerCount===1}const c={open:t,mounted:e=>e.mounted,transitionStatus:e=>e.transitionStatus,floatingRootContext:e=>e.floatingRootContext,triggerCount:e=>e.triggerCount,preventUnmountingOnClose:e=>e.preventUnmountingOnClose,payload:e=>e.payload,activeTriggerId:o,activeTriggerElement:e=>e.mounted?e.activeTriggerElement:null,popupId:i,isTriggerActive:(e,n)=>n!==void 0&&o(e)===n,isOpenedByTrigger:(e,n)=>p(e,n),isMountedByTrigger:(e,n)=>n!==void 0&&o(e)===n&&e.mounted,triggerProps:(e,n)=>n?e.activeTriggerProps:e.inactiveTriggerProps,triggerPopupId:(e,n)=>l(e,n)?i(e):void 0,popupProps:e=>e.popupProps,popupElement:e=>e.popupElement,positionerElement:e=>e.positionerElement};export{a as c,c as p};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as a}from"./__vite-browser-external-
|
|
1
|
+
import{m as a}from"./__vite-browser-external-DUAYhIIg.js";const e={name:"terminal",size:24,node:[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]};e.node;const o=a(e);export{o as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e}from"./__vite-browser-external-
|
|
1
|
+
import{m as e}from"./__vite-browser-external-DUAYhIIg.js";const a={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};a.node;const o=e(a);export{o as T};
|
package/dashboard/dist/assets/{use-community-stats-CKfyxLvl.js → use-community-stats-C5t_95Jj.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as p,g as N,b as M}from"./__vite-browser-external-
|
|
1
|
+
import{r as p,g as N,b as M}from"./__vite-browser-external-DUAYhIIg.js";const D=6e3,S=2500,E=100;function h(t,r){let o;const n=new Promise((a,i)=>{o=setTimeout(()=>i(new Error("landing stats timeout")),r)});return Promise.race([t,n]).finally(()=>{o!=null&&clearTimeout(o)})}const A=5*6e4,P=1440*6e4,k="tokentracker:community-stats:v2";let s=null;function C(t){const r=Number(t?.tokenFloor)||0,o=Number(t?.totalEntries)||0;return!(r>0)||!(o>0)?null:{tokenFloor:r,totalEntries:o,top:Array.isArray(t?.top)?t.top:[],topModels:Array.isArray(t?.topModels)?t.topModels:[],providers:Array.isArray(t?.providers)?t.providers:[],dailyGrowth:Array.isArray(t?.dailyGrowth)?t.dailyGrowth:[],tokenMix:Array.isArray(t?.tokenMix)?t.tokenMix:[],userDistribution:Array.isArray(t?.userDistribution)?t.userDistribution:[],platforms:Array.isArray(t?.platforms)?t.platforms:[],activeDevelopersTotal:Number(t?.activeDevelopersTotal)||0,activeDevelopers30d:Number(t?.activeDevelopers30d)||0,tokens30d:Number(t?.tokens30d)||0,tokenGrowthPct:t?.tokenGrowthPct!=null&&Number.isFinite(Number(t.tokenGrowthPct))?Number(t.tokenGrowthPct):null,developerGrowthPct:t?.developerGrowthPct!=null&&Number.isFinite(Number(t.developerGrowthPct))?Number(t.developerGrowthPct):null,generatedAt:typeof t?.generatedAt=="string"?t.generatedAt:null}}function G(){if(typeof window>"u"||!window.localStorage)return null;try{const t=JSON.parse(window.localStorage.getItem(k)||"null"),r=Number(t?.cachedAt)||0,o=C(t?.data),n=Date.now()-r;return!o||n<0||n>P?null:{data:o,isFresh:n<A}}catch{return null}}function I(t){if(!(typeof window>"u"||!window.localStorage))try{window.localStorage.setItem(k,JSON.stringify({cachedAt:Date.now(),data:t}))}catch{}}function F(){if(s&&Date.now()-s.at<A)return s.promise;const t=Promise.all([h(N({period:"total",limit:E,offset:0}),D),h(M(),S).catch(()=>null)]);return s={at:Date.now(),promise:t},t.catch(()=>{s?.promise===t&&(s=null)}),t}function O({enabled:t=!0}={}){const[r]=p.useState(()=>G()),[o,n]=p.useState(()=>r?{status:"ready",...r.data}:{status:"loading",tokenFloor:null,totalEntries:null,top:[]});return p.useEffect(()=>{if(!t||r?.isFresh)return;let a=!1,i=null,u=null;const y=async()=>{try{const[l,e]=await F();if(a)return;const c=Array.isArray(l?.entries)?l.entries:[],b=c.reduce((m,T)=>m+(Number(T?.total_tokens)||0),0),d=Number(e?.total_tokens)||0;d>0||(s=null);const w=Number(r?.data?.tokenFloor)||0,f=d>0?d:w>0?w:b;if(!c.length||!(f>0)){n(m=>({...m,status:"error"}));return}const g=Array.isArray(e?.top_models)?e.top_models:r?.data?.topModels||[],_={tokenFloor:f,totalEntries:Number(l?.total_entries)||c.length,top:c.slice(0,3),topModels:g,providers:Array.isArray(e?.providers)?e.providers:[],dailyGrowth:Array.isArray(e?.daily_growth)?e.daily_growth:[],tokenMix:Array.isArray(e?.token_mix)?e.token_mix:[],userDistribution:Array.isArray(e?.user_distribution)?e.user_distribution:[],platforms:Array.isArray(e?.platforms)?e.platforms:[],activeDevelopersTotal:Number(e?.active_developers_total)||0,activeDevelopers30d:Number(e?.active_developers_30d)||0,tokens30d:Number(e?.tokens_30d)||0,tokenGrowthPct:e?.token_growth_pct==null?null:Number(e.token_growth_pct),developerGrowthPct:e?.developer_growth_pct==null?null:Number(e.developer_growth_pct),generatedAt:typeof e?.generated_at=="string"?e.generated_at:null};n({status:"ready",..._}),d>0&&I(_)}catch{a||n(e=>e.status==="ready"?e:{...e,status:"error"})}};return typeof window<"u"&&"requestIdleCallback"in window?i=window.requestIdleCallback(y,{timeout:1500}):u=setTimeout(y,400),()=>{a=!0,i!=null&&typeof window.cancelIdleCallback=="function"&&window.cancelIdleCallback(i),u!=null&&clearTimeout(u)}},[t,r]),o}export{O as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as u}from"./__vite-browser-external-
|
|
1
|
+
import{r as u}from"./__vite-browser-external-DUAYhIIg.js";function f(r,e){return r.length===e.length&&r.every((t,n)=>Object.is(t,e[n]))}function a(r){const e=u.useRef(r),t=u.useRef(0),n=u.useRef(!0);return u.useLayoutEffect(()=>{f(e.current,r)||(e.current=r,t.current+=1)}),u.useEffect(()=>(n.current=!0,()=>{n.current=!1,t.current+=1}),[]),u.useCallback(()=>{const c=++t.current,s=e.current;return()=>n.current&&t.current===c&&e.current===s},[])}export{a as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as a,r as c,J as N,K as B,M as F,N as H}from"./__vite-browser-external-
|
|
1
|
+
import{c as a,r as c,J as N,K as B,M as F,N as H}from"./__vite-browser-external-DUAYhIIg.js";const Q=["claude","codex","cursor","gemini","kimi","kiro","grok","copilot","antigravity","zcode","opencodeGo","commandCode","qoder","qoderCn","codingPlan","agentPlan","devin"],W={claude:"CLAUDE",codex:"CODEX",cursor:"CURSOR",gemini:"GEMINI",kimi:"KIMI",kiro:"KIRO",grok:"GROK",copilot:"COPILOT",antigravity:"ANTIGRAVITY",zcode:"ZCODE",opencodeGo:"OPENCODE",commandCode:"COMMAND-CODE",qoder:"QODER",qoderCn:"QODER-CN",codingPlan:"VOLCANO-ARK",agentPlan:"VOLCANO-ARK",devin:"DEVIN"};function fe(e){return W[e]||null}function me(e){switch(e){case"claude":return a("limits.provider.claude");case"codex":return a("limits.provider.codex");case"cursor":return a("limits.provider.cursor");case"gemini":return a("limits.provider.gemini");case"kimi":return a("limits.provider.kimi");case"kiro":return a("limits.provider.kiro");case"grok":return a("limits.provider.grok");case"copilot":return a("limits.provider.copilot");case"antigravity":return a("limits.provider.antigravity");case"zcode":return a("limits.provider.zcode");case"opencodeGo":return a("limits.provider.opencode_go");case"commandCode":return a("limits.provider.command_code");case"qoder":return a("limits.provider.qoder");case"qoderCn":return a("limits.provider.qoder_cn");case"codingPlan":return a("limits.provider.ark_coding_plan");case"agentPlan":return a("limits.provider.ark_agent_plan");case"devin":return a("limits.provider.devin");default:return String(e||"")}}const m=Q,E="tt.limits.providerOrder",I="tt.limits.providerVisibility",A="tt.limits.displayMode",D="tt.limits.showSubscriptions",O="tt.limits.updatedAt",C="limitsPreferences",X="limitsDisplayMode",Z="tt:limits-prefs-changed",w=Object.freeze({USED:"used",REMAINING:"remaining"}),g=new Set(Object.values(w)),_=new Set([E,I,A,D,O]);function h(){return[...m]}const $=new Set(["devin"]);function b(){return Object.fromEntries(m.map(e=>[e,!$.has(e)]))}function L(e){const r=[];if(Array.isArray(e))for(const o of e)m.includes(o)&&!r.includes(o)&&r.push(o);for(const o of m)r.includes(o)||r.push(o);return r}function P(e){const r=b();if(!e||typeof e!="object"||Array.isArray(e))return r;for(const o of m)typeof e[o]=="boolean"&&(r[o]=e[o]);return r}function ee(e){return g.has(e)?e:w.USED}function k(e){return typeof e=="boolean"?e:!0}function S(e){if(e!=null){if(typeof e=="number")return Number.isSafeInteger(e)?e:void 0;if(typeof e=="string"){const r=e.trim();if(r==="")return;const o=Number(r);return Number.isSafeInteger(o)?o:void 0}}}function y(e={}){const r=e&&typeof e=="object"?e:{};return{displayMode:ee(r.displayMode),providerOrder:L(r.providerOrder),providerVisibility:P(r.providerVisibility),showSubscriptions:k(r.showSubscriptions),updatedAt:S(r.updatedAt)}}function re(){if(typeof window>"u")return h();try{const e=window.localStorage.getItem(E);return L(e?JSON.parse(e):void 0)}catch{return h()}}function R(){if(typeof window>"u")return b();try{const e=window.localStorage.getItem(I);return P(e?JSON.parse(e):void 0)}catch{return b()}}function Se(e){return e===null||_.has(e)}function we(){return R().devin===!0}function te(){if(typeof window>"u")return w.USED;try{const e=window.localStorage.getItem(A);return g.has(e)?e:w.USED}catch{return w.USED}}function ie(){if(typeof window>"u")return!0;try{const e=window.localStorage.getItem(D);return e===null?!0:k(JSON.parse(e))}catch{return!0}}function ne(){if(!(typeof window>"u"))try{return S(window.localStorage.getItem(O))}catch{return}}function oe(){if(typeof window>"u")return!1;try{for(const e of _)if(window.localStorage.getItem(e)!==null)return!0}catch{return!1}return!1}function v(){return y({displayMode:te(),providerOrder:re(),providerVisibility:R(),showSubscriptions:ie(),updatedAt:ne()})}function se(e){if(typeof window>"u")return;const r=y(e);try{window.localStorage.setItem(E,JSON.stringify(r.providerOrder)),window.localStorage.setItem(I,JSON.stringify(r.providerVisibility)),window.localStorage.setItem(A,r.displayMode),window.localStorage.setItem(D,JSON.stringify(r.showSubscriptions)),r.updatedAt===void 0?window.localStorage.removeItem(O):window.localStorage.setItem(O,String(r.updatedAt))}catch(o){console.warn("[tokentracker] limits preferences localStorage write failed:",o)}}function de(e){const r=y(e);return{displayMode:r.displayMode,providerOrder:[...r.providerOrder],providerVisibility:{...r.providerVisibility},showSubscriptions:r.showSubscriptions,updatedAt:r.updatedAt??null}}function ae(...e){let r;for(const d of e){const l=S(d);l!==void 0&&(r=r===void 0?l:Math.max(r,l))}const o=Date.now();return r!==void 0&&o<=r?r+1:o}function ce(e,r){return e.length===r.length&&e.every((o,d)=>o===r[d])}function ue(e,r){return m.every(o=>e[o]===r[o])}function K(e,r){return e.displayMode===r.displayMode&&ce(e.providerOrder,r.providerOrder)&&ue(e.providerVisibility,r.providerVisibility)&&e.showSubscriptions===r.showSubscriptions}function le(e,r){return K(e,r)&&S(e.updatedAt)===S(r.updatedAt)}function V(e,r){const o=S(e.updatedAt),d=S(r.updatedAt);return o!==void 0&&(d===void 0||o>d)}function ye(){const[e,r]=c.useState(v),o=c.useRef(e),d=c.useCallback((i,t={})=>{const n=y(i);return o.current=n,r(n),t.writeLocal&&se(n),typeof window<"u"&&window.dispatchEvent(new CustomEvent(Z)),n},[]),l=c.useCallback(i=>{N()&&B(C,de(i))},[]),u=c.useCallback(i=>{const t=v(),n=V(t,o.current)?d(t):o.current,s=y(i(n));if(K(n,s))return;const p=ae(t.updatedAt,n.updatedAt),f=d({...s,updatedAt:p},{writeLocal:!0});l(f)},[d,l]),T=c.useCallback(i=>{g.has(i)&&u(t=>({...t,displayMode:i}))},[u]),x=c.useCallback(i=>{u(t=>({...t,showSubscriptions:!!i}))},[u]),M=c.useCallback(i=>{if(!g.has(i))return;const t=v();if(t.updatedAt!==void 0){d(t);return}d({...t,displayMode:i,updatedAt:void 0},{writeLocal:!0})},[d]);c.useEffect(()=>{if(!N())return;const i=F(t=>{const n=t?.[C];if(n&&typeof n=="object"){const s=y(n);if(!oe()){d(s,{writeLocal:!0});return}const p=v();if(V(s,p))d(s,{writeLocal:!0});else{const f=d(p);le(s,p)||l(f)}return}M(t?.[X])});return H(),i},[M,d,l]),c.useEffect(()=>{if(typeof window>"u")return;const i=t=>{(t.key===null||_.has(t.key))&&d(v())};return window.addEventListener("storage",i),()=>window.removeEventListener("storage",i)},[d]);const U=c.useCallback(i=>{m.includes(i)&&u(t=>({...t,providerVisibility:{...t.providerVisibility,[i]:!t.providerVisibility[i]}}))},[u]),Y=c.useCallback(i=>{u(t=>{const n=t.providerOrder.indexOf(i);if(n<=0)return t;const s=[...t.providerOrder];return[s[n-1],s[n]]=[s[n],s[n-1]],{...t,providerOrder:s}})},[u]),z=c.useCallback(i=>{u(t=>{const n=t.providerOrder.indexOf(i);if(n<0||n>=t.providerOrder.length-1)return t;const s=[...t.providerOrder];return[s[n],s[n+1]]=[s[n+1],s[n]],{...t,providerOrder:s}})},[u]),q=c.useCallback((i,t)=>{i!==t&&u(n=>{const s=n.providerOrder.indexOf(i),p=n.providerOrder.indexOf(t);if(s<0||p<0)return n;const f=[...n.providerOrder],[j]=f.splice(s,1);return f.splice(p,0,j),{...n,providerOrder:f}})},[u]),G=c.useCallback(()=>{u(()=>({displayMode:w.USED,providerOrder:h(),providerVisibility:b(),showSubscriptions:!0}))},[u]),J=c.useMemo(()=>e.providerOrder.filter(i=>e.providerVisibility[i]!==!1),[e.providerOrder,e.providerVisibility]);return{order:e.providerOrder,visibility:e.providerVisibility,displayMode:e.displayMode,showSubscriptions:e.showSubscriptions,setDisplayMode:T,setShowSubscriptions:x,visibleOrdered:J,toggle:U,moveUp:Y,moveDown:z,moveToward:q,reset:G}}export{Z as L,Se as a,w as b,Q as c,fe as d,we as i,me as l,ye as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as f}from"./__vite-browser-external-
|
|
1
|
+
import{r as f}from"./__vite-browser-external-DUAYhIIg.js";function O(t){if(typeof window>"u")return null;try{const n=window.localStorage.getItem(t);if(!n)return null;const i=JSON.parse(n);return Array.isArray(i)?i.filter(o=>typeof o=="string"):null}catch{return null}}function m(t,n){if(!(typeof window>"u"))try{window.localStorage.setItem(t,JSON.stringify(n))}catch{}}function S(t,n){if(!t)return n;const i=new Set(n),o=t.filter(u=>i.has(u)),c=n.filter(u=>!o.includes(u));return[...o,...c]}function p(t,n){const i=f.useMemo(()=>n.join("|"),[n]),[o,c]=f.useState(()=>S(O(t),n));f.useEffect(()=>{c(r=>{const e=S(r,n);return e.length===r.length&&e.every((l,d)=>l===r[d])?r:(m(t,e),e)})},[i,n,t]);const u=f.useCallback((r,e)=>{!r||!e||r===e||c(s=>{const l=s.indexOf(r),d=s.indexOf(e);if(l===-1||d===-1)return s;const w=s.slice(),[h]=w.splice(l,1);return w.splice(d,0,h),m(t,w),w})},[t]),a=f.useCallback(()=>{m(t,n),c(n)},[t,n]);return{order:o,reorder:u,reset:a}}export{p as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as o}from"./__vite-browser-external-DUAYhIIg.js";import{h as r,i as t,p as s}from"./react-CjlEHr8p.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as f,r as n}from"./__vite-browser-external-
|
|
1
|
+
import{m as f,r as n}from"./__vite-browser-external-DUAYhIIg.js";const u={name:"pencil",size:24,node:[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]};u.node;const E=f(u),i="tt.qualityPerDollar.enabled";function l(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(i)==="1"}catch{return!1}}function y(){const[r,o]=n.useState(l);n.useEffect(()=>{if(typeof window>"u")return;const t=e=>{(e.key===null||e.key===i)&&o(l())};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[]);const a=n.useCallback(t=>{const e=!!t;o(e);try{window.localStorage.setItem(i,e?"1":"0")}catch{}},[]),s=n.useCallback(()=>a(!l()),[a]);return{enabled:r,setEnabled:a,toggle:s}}const d="tt.sessionEfficiency.enabled";function c(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(d)==="1"}catch{return!1}}function g(){const[r,o]=n.useState(c);n.useEffect(()=>{if(typeof window>"u")return;const t=e=>{(e.key===null||e.key===d)&&o(c())};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[]);const a=n.useCallback(t=>{const e=!!t;o(e);try{window.localStorage.setItem(d,e?"1":"0")}catch{}},[]),s=n.useCallback(()=>a(!c()),[a]);return{enabled:r,setEnabled:a,toggle:s}}export{E as P,g as a,y as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as y,u as l,e as A,M as p,b as h,f as C,g as V,j as u}from"./react-
|
|
1
|
+
import{d as y,u as l,e as A,M as p,b as h,f as C,g as V,j as u}from"./react-CjlEHr8p.js";import{r as f}from"./__vite-browser-external-DUAYhIIg.js";function x(...t){const e=!Array.isArray(t[0]),n=e?0:-1,o=t[0+n],s=t[1+n],c=t[2+n],r=t[3+n],a=y(s,c,r);return e?a(o):a}function E(t){const e=l(()=>A(t)),{isStatic:n}=f.useContext(p);if(n){const[,o]=f.useState(t);f.useEffect(()=>e.on("change",o),[])}return e}function m(t,e){const n=E(e()),o=()=>n.set(e());return o(),h(()=>{const s=()=>V.preRender(o,!1,!0),c=t.map(r=>r.on("change",s));return()=>{c.forEach(r=>r()),C(o)}}),n}function L(t){u.current=[],t();const e=m(u.current,t);return u.current=void 0,e}function g(t,e,n,o){if(typeof t=="function")return L(t);const c=typeof e=="function"?e:x(e,n,o),r=Array.isArray(t)?i(t,c):i([t],([d])=>c(d)),a=Array.isArray(t)?void 0:t.accelerate;return a&&!a.isTransformed&&typeof e!="function"&&Array.isArray(n)&&o?.clamp!==!1&&(r.accelerate={...a,times:e,keyframes:n,isTransformed:!0}),r}function i(t,e){const n=l(()=>[]);return m(t,()=>{n.length=0;const o=t.length;for(let s=0;s<o;s++)n[s]=t[s].get();return e(n)})}export{g as a,E as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{J as S,ab as x,r as d,c as N,ac as O,ad as A,ae as g}from"./__vite-browser-external-B1XxVtUQ.js";import{l as R,i as _,L as P,a as q}from"./use-limits-display-prefs-Ic4GUPRY.js";import{u as z}from"./use-latest-request-guard-C3rQR4BN.js";const F="native:notificationPermission";let M=null;function I(){return typeof window<"u"&&!!window.chrome?.webview}function L(){return S()?M||"unknown":I()?"granted":typeof Notification>"u"?"unsupported":Notification.permission}function j(e){if(typeof window>"u")return()=>{};const i=n=>{const w=n?.detail?.status;typeof w=="string"&&(M=w),e(L())};return window.addEventListener(F,i),e(L()),S()&&x({type:"getNotificationStatus"}),()=>window.removeEventListener(F,i)}async function T(){if(S()){x({type:"requestNotificationPermission"});return}I()||typeof Notification<"u"&&Notification.permission==="default"&&await Notification.requestPermission().catch(()=>"denied")}const v="tt.limitAlerts.enabled";function $(){try{return window.localStorage.getItem(v)==="1"}catch{return!1}}function te(){const[e,i]=d.useState($),[n,w]=d.useState("unknown");d.useEffect(()=>j(w),[]);const u=d.useCallback(async o=>{const r=!!o;r&&await T();try{window.localStorage.setItem(v,r?"1":"0")}catch{}i(r)},[]);return{enabled:e,setEnabled:u,permissionBlocked:n==="denied"}}function B(e,i){if(!(e>0))return null;const n=(e-i)/e;return Number.isFinite(n)?Math.min(Math.max(n,0),1):null}function G(e,i,n=.03){return e>i+n}function V(e){const i=Math.max(0,Math.floor(e)),n=Math.floor(i/3600);return n>24?`${Math.floor(n/24)}d`:n>0?`${n}h`:`${Math.floor(i/60)}m`}function J(e,i){if(typeof e.windowSeconds=="number")return e.windowSeconds;if(e.windowSecondsField&&i){const n=i[e.windowSecondsField];return typeof n=="number"&&n>0?n:null}return null}function U(e){return e==null?NaN:typeof e=="number"?e*1e3:Date.parse(e)}function H({usedPercent:e,windowSeconds:i,resetMs:n,mode:w,now:u=Date.now()}){const o=Math.min(Math.max(Number(e)||0,0),100)/100,r={pacePercent:null,paceOver:!1,expectedPercent:null,runsOutEta:null,projectedEnd:null};if(!(i>0)||!Number.isFinite(n))return r;const l=Math.max(0,(n-u)/1e3),a=B(i,l);if(a==null)return r;if(r.expectedPercent=Math.round(a*100),r.paceOver=G(o,a),o>=.05){const c=w==="remaining"?1-a:a;r.pacePercent=c*100}if(a>.02&&o>0){const c=i*a,m=o/c,f=o/a;f>=1&&m>0?r.runsOutEta=V((1-o)/m):r.projectedEnd=Math.round(Math.min(f,1)*100)}return r}const W={claude:{windows(e){const i=Array.isArray(e.weekly_scoped)?e.weekly_scoped.map(n=>({key:`scoped-${n.label}`,label:n.label,window:n,pctField:"utilization",resetField:"resets_at",windowSeconds:604800})):[];return[{key:"5h",labelKey:"limits.label.claude_5h",window:e.five_hour,pctField:"utilization",resetField:"resets_at",windowSeconds:5*3600},{key:"7d",labelKey:"limits.label.claude_7d",window:e.seven_day,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},{key:"opus",labelKey:"limits.label.claude_opus",window:e.seven_day_opus,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},...i]}},codex:{extra:"codex_meta",windows(e){return[{key:"5h",labelKey:"limits.label.codex_5h",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"7d",labelKey:"limits.label.codex_7d",window:e.secondary_window,windowSecondsField:"limit_window_seconds"},{key:"credits",labelKey:"limits.label.codex_credits",window:e.credit_window},{key:"spark-5h",labelKey:"limits.label.codex_spark_5h",window:e.spark_primary_window,windowSecondsField:"limit_window_seconds"},{key:"spark-7d",labelKey:"limits.label.codex_spark_7d",window:e.spark_secondary_window,windowSecondsField:"limit_window_seconds"}]}},cursor:{windows(e){return[{key:"plan",labelKey:"limits.label.cursor_plan",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"auto",labelKey:"limits.label.cursor_auto",window:e.secondary_window,windowSecondsField:"limit_window_seconds"},{key:"api",labelKey:"limits.label.cursor_api",window:e.tertiary_window,windowSecondsField:"limit_window_seconds"},{key:"grok-bot",labelKey:"limits.label.cursor_grok_bot",window:e.quaternary_window,windowSecondsField:"limit_window_seconds"}]}},gemini:{windows(e){return[{key:"pro",labelKey:"limits.label.gemini_pro",window:e.primary_window},{key:"flash",labelKey:"limits.label.gemini_flash",window:e.secondary_window},{key:"lite",labelKey:"limits.label.gemini_lite",window:e.tertiary_window}]}},kimi:{extra:"kimi_parallel",windows(e){return[{key:"weekly",labelKey:"limits.label.kimi_weekly",window:e.primary_window,windowSeconds:7*86400},{key:"5h",labelKey:"limits.label.kimi_5h",window:e.secondary_window,windowSeconds:5*3600},{key:"total",labelKey:"limits.label.kimi_total",window:e.tertiary_window}]}},kiro:{extra:"kiro_credits",windows(e){return[{key:"month",labelKey:"limits.label.kiro_month",window:e.primary_window},{key:"bonus",labelKey:"limits.label.kiro_bonus",window:e.secondary_window}]}},grok:{windows(e){const i=typeof e.period_type=="string"?e.period_type:null,n=i==="weekly"?"limits.label.grok_week":i==="daily"?"limits.label.grok_day":"limits.label.grok_month",w=i==="weekly"?7*86400:i==="daily"?86400:void 0;return[{key:i==="weekly"?"week":i==="daily"?"day":"month",labelKey:n,window:e.primary_window,windowSeconds:w},{key:"ondemand",labelKey:"limits.label.grok_ondemand",window:e.secondary_window}]}},antigravity:{windows(e){return[{key:"claude-weekly",labelKey:"limits.label.antigravity_claude_weekly",window:e.primary_window},{key:"claude-5h",labelKey:"limits.label.antigravity_claude_5h",window:e.secondary_window},{key:"gemini-weekly",labelKey:"limits.label.antigravity_gemini_weekly",window:e.tertiary_window},{key:"gemini-5h",labelKey:"limits.label.antigravity_gemini_5h",window:e.quaternary_window}]}},copilot:{extra:"copilot_otel",windows(e){return[{key:"premium",labelKey:"limits.label.copilot_premium",window:e.primary_window},{key:"chat",labelKey:"limits.label.copilot_chat",window:e.secondary_window}]}},zcode:{windows(e){return e.plan_kind==="coding-plan"?[{key:"5h",labelKey:"limits.label.zcode_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.zcode_weekly",window:e.secondary_window},{key:"tools",labelKey:"limits.label.zcode_tools",window:e.tertiary_window}]:[{key:"glm52",labelKey:"limits.label.zcode_glm52",window:e.primary_window},{key:"glm5t",labelKey:"limits.label.zcode_glm5t",window:e.secondary_window}]}},opencodeGo:{windows(e){return[{key:"5h",labelKey:"limits.label.opencode_go_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.opencode_go_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.opencode_go_monthly",window:e.tertiary_window}]}},qoder:{windows(e){return[{key:"credits",labelKey:"limits.label.qoder_credits",window:e.primary_window},{key:"ultimate",labelKey:"limits.label.qoder_ultimate",window:e.secondary_window,timeKind:"expiry"}]}},qoderCn:{windows(e){return[{key:"credits",labelKey:"limits.label.qoder_cn_credits",window:e.primary_window},{key:"ultimate",labelKey:"limits.label.qoder_cn_ultimate",window:e.secondary_window,timeKind:"expiry"}]}},codingPlan:{windows(e){return[{key:"5h",labelKey:"limits.label.ark_coding_plan_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.ark_coding_plan_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.ark_coding_plan_monthly",window:e.tertiary_window}]}},commandCode:{windows(e){return[{key:"5h",labelKey:"limits.label.command_code_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.command_code_weekly",window:e.secondary_window}]}},agentPlan:{windows(e){return[{key:"5h",labelKey:"limits.label.ark_agent_plan_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.ark_agent_plan_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.ark_agent_plan_monthly",window:e.tertiary_window}]}},devin:{windows(e){return[{key:"daily",labelKey:"limits.label.devin_daily",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"weekly",labelKey:"limits.label.devin_weekly",window:e.secondary_window,windowSecondsField:"limit_window_seconds"}]}}},D="tt.limitAlerts.cycles.v1";function Y(){try{return JSON.parse(window.localStorage.getItem(D)||"{}")}catch{return{}}}function Q(e){try{window.localStorage.setItem(D,JSON.stringify(e))}catch{}}function X(e,{now:i=Date.now()}={}){const n=[],w=W;for(const[u,o]of Object.entries(e||{})){const r=w[u];if(!(!o?.configured||o.error||!r))for(const l of r.windows(o)){if(!l.window)continue;const a=Number(l.pctField==="utilization"?l.window.utilization:l.window.used_percent),c=l.resetField==="resets_at"?l.window.resets_at:l.window.reset_at,m=U(c),f=H({usedPercent:a,windowSeconds:J(l,l.window),resetMs:m,mode:"used",now:i});!f.runsOutEta||!f.paceOver||a<20||!(m>i)||n.push({id:`${u}:${l.key}:${m}`,providerId:u,windowKey:l.key,resetMs:m,usedPercent:a,runsOutEta:f.runsOutEta})}}return n}function Z(e){const i=Y(),n=X(e);for(const o of n){if(i[o.id])continue;const r=R(o.providerId),l=N("limits.alert.title",{provider:r}),a=N("limits.alert.body",{eta:o.runsOutEta,percent:Math.round(o.usedPercent)});let c=O({title:l,body:a,id:o.id});!c&&typeof Notification<"u"&&Notification.permission==="granted"&&(new Notification(l,{body:a,tag:o.id}),c=!0),c&&(i[o.id]=Date.now())}const w=Date.now()-864e5,u=Object.fromEntries(Object.entries(i).filter(([o,r])=>{const l=Number(o.split(":").at(-1));return Number.isFinite(l)?l>=w:Number(r)>=w}).slice(-100));return Q(u),n.length}function k(e,i){return!e||i||!e.devin||e.devin.configured===!1&&Object.keys(e.devin).length===1?e:{...e,devin:{configured:!1}}}function oe(e){const i=!!e?.initialState,[n,w]=d.useState(_),[u,o]=d.useState(()=>i?k(e?.initialState?.data??null,_()):null),[r,l]=d.useState(()=>i?e?.initialState?.error??null:null),[a,c]=d.useState(!i),m=!!e?.initialRefresh,f=!!e?.publishToPreloadCache,b=z([n]);d.useEffect(()=>{if(typeof window>"u")return;const s=()=>w(_()),t=y=>{q(y.key)&&s()};return window.addEventListener(P,s),window.addEventListener("storage",t),()=>{window.removeEventListener(P,s),window.removeEventListener("storage",t)}},[]),d.useEffect(()=>{if(!(!u||typeof window>"u"))try{window.localStorage.getItem(v)==="1"&&Z(u)}catch{}},[u]);const p=d.useCallback((s,t)=>{!f||!s||typeof s!="object"||A(k(s,_()),{source:t})},[f]),C=d.useCallback(async()=>{const s=b();try{const t=await g({refresh:!0,devinEnabled:_()});if(!s())return;const y=t&&typeof t=="object"?t:null;o(k(y,_())),l(null),c(!1),p(y,"manual-refresh")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]),h=d.useCallback(async()=>{const s=b();try{const t=await g({devinEnabled:_()});if(!s())return;const y=t&&typeof t=="object"?t:null;o(k(y,_())),l(null),c(!1),p(y,"page-load")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]);d.useEffect(()=>{if(typeof window>"u"||typeof document>"u")return;const s=15e3;let t=Date.now();const y=()=>{if(document.visibilityState!=="visible")return;const E=Date.now();E-t<s||(t=E,h())};return window.addEventListener("focus",y),document.addEventListener("visibilitychange",y),()=>{window.removeEventListener("focus",y),document.removeEventListener("visibilitychange",y)}},[h]);const K=d.useRef(n);return d.useEffect(()=>{K.current!==n&&(K.current=n,n||o(s=>k(s,!1)),h())},[n,h]),d.useEffect(()=>{if(i&&!m)return;const s=b();(async()=>{try{const t=await g({devinEnabled:_()});if(!s())return;const y=t&&typeof t=="object"?t:null;o(k(y,_())),l(null),p(y,"page-load")}catch(t){if(!s())return;l(t?.message||String(t))}finally{s()&&c(!1)}})()},[b,i,m,p]),{data:u,error:r,isLoading:a,refresh:C}}export{W as P,J as a,te as b,H as c,U as r,Z as s,oe as u};
|
|
1
|
+
import{J as S,ab as x,r as d,c as N,ac as O,ad as A,ae as g}from"./__vite-browser-external-DUAYhIIg.js";import{l as R,i as _,L as P,a as q}from"./use-limits-display-prefs-DktuWI-1.js";import{u as z}from"./use-latest-request-guard-CcrXitYE.js";const F="native:notificationPermission";let M=null;function I(){return typeof window<"u"&&!!window.chrome?.webview}function L(){return S()?M||"unknown":I()?"granted":typeof Notification>"u"?"unsupported":Notification.permission}function j(e){if(typeof window>"u")return()=>{};const i=n=>{const w=n?.detail?.status;typeof w=="string"&&(M=w),e(L())};return window.addEventListener(F,i),e(L()),S()&&x({type:"getNotificationStatus"}),()=>window.removeEventListener(F,i)}async function T(){if(S()){x({type:"requestNotificationPermission"});return}I()||typeof Notification<"u"&&Notification.permission==="default"&&await Notification.requestPermission().catch(()=>"denied")}const v="tt.limitAlerts.enabled";function $(){try{return window.localStorage.getItem(v)==="1"}catch{return!1}}function te(){const[e,i]=d.useState($),[n,w]=d.useState("unknown");d.useEffect(()=>j(w),[]);const u=d.useCallback(async o=>{const r=!!o;r&&await T();try{window.localStorage.setItem(v,r?"1":"0")}catch{}i(r)},[]);return{enabled:e,setEnabled:u,permissionBlocked:n==="denied"}}function B(e,i){if(!(e>0))return null;const n=(e-i)/e;return Number.isFinite(n)?Math.min(Math.max(n,0),1):null}function G(e,i,n=.03){return e>i+n}function V(e){const i=Math.max(0,Math.floor(e)),n=Math.floor(i/3600);return n>24?`${Math.floor(n/24)}d`:n>0?`${n}h`:`${Math.floor(i/60)}m`}function J(e,i){if(typeof e.windowSeconds=="number")return e.windowSeconds;if(e.windowSecondsField&&i){const n=i[e.windowSecondsField];return typeof n=="number"&&n>0?n:null}return null}function U(e){return e==null?NaN:typeof e=="number"?e*1e3:Date.parse(e)}function H({usedPercent:e,windowSeconds:i,resetMs:n,mode:w,now:u=Date.now()}){const o=Math.min(Math.max(Number(e)||0,0),100)/100,r={pacePercent:null,paceOver:!1,expectedPercent:null,runsOutEta:null,projectedEnd:null};if(!(i>0)||!Number.isFinite(n))return r;const l=Math.max(0,(n-u)/1e3),a=B(i,l);if(a==null)return r;if(r.expectedPercent=Math.round(a*100),r.paceOver=G(o,a),o>=.05){const c=w==="remaining"?1-a:a;r.pacePercent=c*100}if(a>.02&&o>0){const c=i*a,m=o/c,f=o/a;f>=1&&m>0?r.runsOutEta=V((1-o)/m):r.projectedEnd=Math.round(Math.min(f,1)*100)}return r}const W={claude:{windows(e){const i=Array.isArray(e.weekly_scoped)?e.weekly_scoped.map(n=>({key:`scoped-${n.label}`,label:n.label,window:n,pctField:"utilization",resetField:"resets_at",windowSeconds:604800})):[];return[{key:"5h",labelKey:"limits.label.claude_5h",window:e.five_hour,pctField:"utilization",resetField:"resets_at",windowSeconds:5*3600},{key:"7d",labelKey:"limits.label.claude_7d",window:e.seven_day,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},{key:"opus",labelKey:"limits.label.claude_opus",window:e.seven_day_opus,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},...i]}},codex:{extra:"codex_meta",windows(e){return[{key:"5h",labelKey:"limits.label.codex_5h",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"7d",labelKey:"limits.label.codex_7d",window:e.secondary_window,windowSecondsField:"limit_window_seconds"},{key:"credits",labelKey:"limits.label.codex_credits",window:e.credit_window},{key:"spark-5h",labelKey:"limits.label.codex_spark_5h",window:e.spark_primary_window,windowSecondsField:"limit_window_seconds"},{key:"spark-7d",labelKey:"limits.label.codex_spark_7d",window:e.spark_secondary_window,windowSecondsField:"limit_window_seconds"}]}},cursor:{windows(e){return[{key:"plan",labelKey:"limits.label.cursor_plan",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"auto",labelKey:"limits.label.cursor_auto",window:e.secondary_window,windowSecondsField:"limit_window_seconds"},{key:"api",labelKey:"limits.label.cursor_api",window:e.tertiary_window,windowSecondsField:"limit_window_seconds"},{key:"grok-bot",labelKey:"limits.label.cursor_grok_bot",window:e.quaternary_window,windowSecondsField:"limit_window_seconds"}]}},gemini:{windows(e){return[{key:"pro",labelKey:"limits.label.gemini_pro",window:e.primary_window},{key:"flash",labelKey:"limits.label.gemini_flash",window:e.secondary_window},{key:"lite",labelKey:"limits.label.gemini_lite",window:e.tertiary_window}]}},kimi:{extra:"kimi_parallel",windows(e){return[{key:"weekly",labelKey:"limits.label.kimi_weekly",window:e.primary_window,windowSeconds:7*86400},{key:"5h",labelKey:"limits.label.kimi_5h",window:e.secondary_window,windowSeconds:5*3600},{key:"total",labelKey:"limits.label.kimi_total",window:e.tertiary_window}]}},kiro:{extra:"kiro_credits",windows(e){return[{key:"month",labelKey:"limits.label.kiro_month",window:e.primary_window},{key:"bonus",labelKey:"limits.label.kiro_bonus",window:e.secondary_window}]}},grok:{windows(e){const i=typeof e.period_type=="string"?e.period_type:null,n=i==="weekly"?"limits.label.grok_week":i==="daily"?"limits.label.grok_day":"limits.label.grok_month",w=i==="weekly"?7*86400:i==="daily"?86400:void 0;return[{key:i==="weekly"?"week":i==="daily"?"day":"month",labelKey:n,window:e.primary_window,windowSeconds:w},{key:"ondemand",labelKey:"limits.label.grok_ondemand",window:e.secondary_window}]}},antigravity:{windows(e){return[{key:"claude-weekly",labelKey:"limits.label.antigravity_claude_weekly",window:e.primary_window},{key:"claude-5h",labelKey:"limits.label.antigravity_claude_5h",window:e.secondary_window},{key:"gemini-weekly",labelKey:"limits.label.antigravity_gemini_weekly",window:e.tertiary_window},{key:"gemini-5h",labelKey:"limits.label.antigravity_gemini_5h",window:e.quaternary_window}]}},copilot:{extra:"copilot_otel",windows(e){return[{key:"premium",labelKey:"limits.label.copilot_premium",window:e.primary_window},{key:"chat",labelKey:"limits.label.copilot_chat",window:e.secondary_window}]}},zcode:{windows(e){return e.plan_kind==="coding-plan"?[{key:"5h",labelKey:"limits.label.zcode_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.zcode_weekly",window:e.secondary_window},{key:"tools",labelKey:"limits.label.zcode_tools",window:e.tertiary_window}]:[{key:"glm52",labelKey:"limits.label.zcode_glm52",window:e.primary_window},{key:"glm5t",labelKey:"limits.label.zcode_glm5t",window:e.secondary_window}]}},opencodeGo:{windows(e){return[{key:"5h",labelKey:"limits.label.opencode_go_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.opencode_go_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.opencode_go_monthly",window:e.tertiary_window}]}},qoder:{windows(e){return[{key:"credits",labelKey:"limits.label.qoder_credits",window:e.primary_window},{key:"ultimate",labelKey:"limits.label.qoder_ultimate",window:e.secondary_window,timeKind:"expiry"}]}},qoderCn:{windows(e){return[{key:"credits",labelKey:"limits.label.qoder_cn_credits",window:e.primary_window},{key:"ultimate",labelKey:"limits.label.qoder_cn_ultimate",window:e.secondary_window,timeKind:"expiry"}]}},codingPlan:{windows(e){return[{key:"5h",labelKey:"limits.label.ark_coding_plan_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.ark_coding_plan_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.ark_coding_plan_monthly",window:e.tertiary_window}]}},commandCode:{windows(e){return[{key:"5h",labelKey:"limits.label.command_code_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.command_code_weekly",window:e.secondary_window}]}},agentPlan:{windows(e){return[{key:"5h",labelKey:"limits.label.ark_agent_plan_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.ark_agent_plan_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.ark_agent_plan_monthly",window:e.tertiary_window}]}},devin:{windows(e){return[{key:"daily",labelKey:"limits.label.devin_daily",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"weekly",labelKey:"limits.label.devin_weekly",window:e.secondary_window,windowSecondsField:"limit_window_seconds"}]}}},D="tt.limitAlerts.cycles.v1";function Y(){try{return JSON.parse(window.localStorage.getItem(D)||"{}")}catch{return{}}}function Q(e){try{window.localStorage.setItem(D,JSON.stringify(e))}catch{}}function X(e,{now:i=Date.now()}={}){const n=[],w=W;for(const[u,o]of Object.entries(e||{})){const r=w[u];if(!(!o?.configured||o.error||!r))for(const l of r.windows(o)){if(!l.window)continue;const a=Number(l.pctField==="utilization"?l.window.utilization:l.window.used_percent),c=l.resetField==="resets_at"?l.window.resets_at:l.window.reset_at,m=U(c),f=H({usedPercent:a,windowSeconds:J(l,l.window),resetMs:m,mode:"used",now:i});!f.runsOutEta||!f.paceOver||a<20||!(m>i)||n.push({id:`${u}:${l.key}:${m}`,providerId:u,windowKey:l.key,resetMs:m,usedPercent:a,runsOutEta:f.runsOutEta})}}return n}function Z(e){const i=Y(),n=X(e);for(const o of n){if(i[o.id])continue;const r=R(o.providerId),l=N("limits.alert.title",{provider:r}),a=N("limits.alert.body",{eta:o.runsOutEta,percent:Math.round(o.usedPercent)});let c=O({title:l,body:a,id:o.id});!c&&typeof Notification<"u"&&Notification.permission==="granted"&&(new Notification(l,{body:a,tag:o.id}),c=!0),c&&(i[o.id]=Date.now())}const w=Date.now()-864e5,u=Object.fromEntries(Object.entries(i).filter(([o,r])=>{const l=Number(o.split(":").at(-1));return Number.isFinite(l)?l>=w:Number(r)>=w}).slice(-100));return Q(u),n.length}function k(e,i){return!e||i||!e.devin||e.devin.configured===!1&&Object.keys(e.devin).length===1?e:{...e,devin:{configured:!1}}}function oe(e){const i=!!e?.initialState,[n,w]=d.useState(_),[u,o]=d.useState(()=>i?k(e?.initialState?.data??null,_()):null),[r,l]=d.useState(()=>i?e?.initialState?.error??null:null),[a,c]=d.useState(!i),m=!!e?.initialRefresh,f=!!e?.publishToPreloadCache,b=z([n]);d.useEffect(()=>{if(typeof window>"u")return;const s=()=>w(_()),t=y=>{q(y.key)&&s()};return window.addEventListener(P,s),window.addEventListener("storage",t),()=>{window.removeEventListener(P,s),window.removeEventListener("storage",t)}},[]),d.useEffect(()=>{if(!(!u||typeof window>"u"))try{window.localStorage.getItem(v)==="1"&&Z(u)}catch{}},[u]);const p=d.useCallback((s,t)=>{!f||!s||typeof s!="object"||A(k(s,_()),{source:t})},[f]),C=d.useCallback(async()=>{const s=b();try{const t=await g({refresh:!0,devinEnabled:_()});if(!s())return;const y=t&&typeof t=="object"?t:null;o(k(y,_())),l(null),c(!1),p(y,"manual-refresh")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]),h=d.useCallback(async()=>{const s=b();try{const t=await g({devinEnabled:_()});if(!s())return;const y=t&&typeof t=="object"?t:null;o(k(y,_())),l(null),c(!1),p(y,"page-load")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]);d.useEffect(()=>{if(typeof window>"u"||typeof document>"u")return;const s=15e3;let t=Date.now();const y=()=>{if(document.visibilityState!=="visible")return;const E=Date.now();E-t<s||(t=E,h())};return window.addEventListener("focus",y),document.addEventListener("visibilitychange",y),()=>{window.removeEventListener("focus",y),document.removeEventListener("visibilitychange",y)}},[h]);const K=d.useRef(n);return d.useEffect(()=>{K.current!==n&&(K.current=n,n||o(s=>k(s,!1)),h())},[n,h]),d.useEffect(()=>{if(i&&!m)return;const s=b();(async()=>{try{const t=await g({devinEnabled:_()});if(!s())return;const y=t&&typeof t=="object"?t:null;o(k(y,_())),l(null),p(y,"page-load")}catch(t){if(!s())return;l(t?.message||String(t))}finally{s()&&c(!1)}})()},[b,i,m,p]),{data:u,error:r,isLoading:a,refresh:C}}export{W as P,J as a,te as b,H as c,U as r,Z as s,oe as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,C as t,D as r,q as c}from"./__vite-browser-external-
|
|
1
|
+
import{r as e,C as t,D as r,q as c}from"./__vite-browser-external-DUAYhIIg.js";const s=Object.freeze({currency:c,rate:1,symbol:"$",rates:{...r},rateSource:"default",rateFetchedAt:null,setCurrency:()=>{}});function a(){return e.useContext(t)??s}export{a as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,T as r,n,o as a,p as s}from"./__vite-browser-external-
|
|
1
|
+
import{r as e,T as r,n,o as a,p as s}from"./__vite-browser-external-DUAYhIIg.js";const T=Object.freeze({mode:n.COMPACT,setMode:()=>{},formatTokens:(o,t={})=>s(o,t),formatTokensTooltip:(o,t={})=>a(o,t)});function f(){return e.useContext(r)??T}export{f as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e}from"./__vite-browser-external-
|
|
1
|
+
import{m as e}from"./__vite-browser-external-DUAYhIIg.js";const a={name:"zap",size:24,node:[["path",{d:"M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z",key:"1v7up4"}]]};a.node;const n=e(a);export{n as Z};
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
]
|
|
271
271
|
}
|
|
272
272
|
</script>
|
|
273
|
-
<script type="module" crossorigin src="/assets/__vite-browser-external-
|
|
273
|
+
<script type="module" crossorigin src="/assets/__vite-browser-external-DUAYhIIg.js"></script>
|
|
274
274
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-5P7me0Qq.css">
|
|
275
275
|
</head>
|
|
276
276
|
<body>
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
]
|
|
166
166
|
}
|
|
167
167
|
</script>
|
|
168
|
-
<script type="module" crossorigin src="/assets/__vite-browser-external-
|
|
168
|
+
<script type="module" crossorigin src="/assets/__vite-browser-external-DUAYhIIg.js"></script>
|
|
169
169
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-5P7me0Qq.css">
|
|
170
170
|
</head>
|
|
171
171
|
<body>
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
]
|
|
137
137
|
}
|
|
138
138
|
</script>
|
|
139
|
-
<script type="module" crossorigin src="/assets/__vite-browser-external-
|
|
139
|
+
<script type="module" crossorigin src="/assets/__vite-browser-external-DUAYhIIg.js"></script>
|
|
140
140
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-5P7me0Qq.css">
|
|
141
141
|
</head>
|
|
142
142
|
<body>
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"description": "Shareable Token Tracker dashboard snapshot."
|
|
76
76
|
}
|
|
77
77
|
</script>
|
|
78
|
-
<script type="module" crossorigin src="/assets/__vite-browser-external-
|
|
78
|
+
<script type="module" crossorigin src="/assets/__vite-browser-external-DUAYhIIg.js"></script>
|
|
79
79
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-5P7me0Qq.css">
|
|
80
80
|
</head>
|
|
81
81
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tokentracker-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Local-first AI coding token usage and cost tracker for 40 tools, with a dashboard, desktop pet, widgets, achievements, and native macOS/Windows apps.",
|
|
5
5
|
"main": "src/cli.js",
|
|
6
6
|
"bin": {
|
package/src/commands/status.js
CHANGED
|
@@ -14,6 +14,7 @@ const {
|
|
|
14
14
|
buildAcodeNotifyCmd,
|
|
15
15
|
isManagedNotifyCmd,
|
|
16
16
|
} = require("../lib/codex-config");
|
|
17
|
+
const { countRecordOnlyFiles, formatRecordOnlyWarning } = require("../lib/codex-usage-record");
|
|
17
18
|
const {
|
|
18
19
|
isClaudeHookConfigured,
|
|
19
20
|
areClaudeUsageHooksConfigured,
|
|
@@ -226,6 +227,7 @@ async function cmdStatus(argv = []) {
|
|
|
226
227
|
|
|
227
228
|
const config = await readJson(configPath);
|
|
228
229
|
const { cursors } = await readCursorStateSummary({ trackerDir, cursorsPath });
|
|
230
|
+
const codexRecordOnlyWarning = formatRecordOnlyWarning(countRecordOnlyFiles(cursors));
|
|
229
231
|
const queueState = (await readJson(queueStatePath)) || { offset: 0 };
|
|
230
232
|
const uploadThrottle = normalizeUploadState(
|
|
231
233
|
await readJson(uploadThrottlePath),
|
|
@@ -1233,6 +1235,7 @@ async function cmdStatus(argv = []) {
|
|
|
1233
1235
|
codexInstalledStatus
|
|
1234
1236
|
? `- Codex CLI: sessions found (${codexActive.join(" | ")})`
|
|
1235
1237
|
: null,
|
|
1238
|
+
codexRecordOnlyWarning ? `- ⚠ ${codexRecordOnlyWarning}` : null,
|
|
1236
1239
|
acodeInstalled
|
|
1237
1240
|
? `- AStudio: sessions found (${acodeActive.join(" | ")})`
|
|
1238
1241
|
: null,
|
package/src/commands/sync.js
CHANGED
|
@@ -18,6 +18,7 @@ const {
|
|
|
18
18
|
updateJsonLocked,
|
|
19
19
|
} = require("../lib/fs");
|
|
20
20
|
const { physicalJsonlRecords } = require("../lib/jsonl-lines");
|
|
21
|
+
const { countRecordOnlyFiles, formatRecordOnlyWarning } = require("../lib/codex-usage-record");
|
|
21
22
|
const {
|
|
22
23
|
listRolloutFiles,
|
|
23
24
|
listRolloutFilesDeep,
|
|
@@ -3305,6 +3306,7 @@ async function cmdSync(argv, context = {}) {
|
|
|
3305
3306
|
}
|
|
3306
3307
|
|
|
3307
3308
|
if (!opts.auto) {
|
|
3309
|
+
const codexRecordOnlyWarning = formatRecordOnlyWarning(countRecordOnlyFiles(cursors));
|
|
3308
3310
|
process.stdout.write(
|
|
3309
3311
|
[
|
|
3310
3312
|
"Sync finished:",
|
|
@@ -3316,6 +3318,7 @@ async function cmdSync(argv, context = {}) {
|
|
|
3316
3318
|
runtime.deviceToken && pendingBytes > 0 && !opts.drain
|
|
3317
3319
|
? `- Remaining: ${formatBytes(pendingBytes)} pending (run sync again, or use --drain)`
|
|
3318
3320
|
: null,
|
|
3321
|
+
codexRecordOnlyWarning ? `- Warning: ${codexRecordOnlyWarning}` : null,
|
|
3319
3322
|
"",
|
|
3320
3323
|
]
|
|
3321
3324
|
.filter(Boolean)
|
|
@@ -4812,8 +4815,10 @@ async function migrateRolloutCumulativeDeltaBuckets({ cursors, queuePath, rollou
|
|
|
4812
4815
|
// The migration clears Codex buckets and reparses the discovered corpus from
|
|
4813
4816
|
// byte zero. Persisted event keys belong to the cleared buckets, so retaining
|
|
4814
4817
|
// them can suppress the rebuild when a moved session still has an old path
|
|
4815
|
-
// cursor. Rebuild the hash inventory together with the buckets.
|
|
4818
|
+
// cursor. Rebuild the hash inventory together with the buckets. Counted
|
|
4819
|
+
// compaction ids (#652) belong to the cleared buckets the same way.
|
|
4816
4820
|
cursors.codexHashes = [];
|
|
4821
|
+
cursors.codexCompactionResponseIds = [];
|
|
4817
4822
|
|
|
4818
4823
|
const buckets = cursors.hourly?.buckets;
|
|
4819
4824
|
const retractions = [];
|
|
@@ -5365,6 +5370,9 @@ async function repairCodexRescanInflation({
|
|
|
5365
5370
|
buckets: tmpCursors.hourly.buckets || {},
|
|
5366
5371
|
groupQueued: tmpCursors.hourly.groupQueued || {},
|
|
5367
5372
|
codexHashes: Array.isArray(tmpCursors.codexHashes) ? tmpCursors.codexHashes : [],
|
|
5373
|
+
codexCompactionResponseIds: Array.isArray(tmpCursors.codexCompactionResponseIds)
|
|
5374
|
+
? tmpCursors.codexCompactionResponseIds
|
|
5375
|
+
: [],
|
|
5368
5376
|
files: tmpCursors.files || {},
|
|
5369
5377
|
queueRows: tmpRaw.split("\n").filter((l) => l.trim()),
|
|
5370
5378
|
projectHourly: tmpCursors.projectHourly || null,
|
|
@@ -5519,6 +5527,7 @@ async function repairCodexRescanInflation({
|
|
|
5519
5527
|
cursors.files[fp] = v;
|
|
5520
5528
|
}
|
|
5521
5529
|
cursors.codexHashes = rebuilt.codexHashes;
|
|
5530
|
+
cursors.codexCompactionResponseIds = rebuilt.codexCompactionResponseIds;
|
|
5522
5531
|
|
|
5523
5532
|
// 3. Project usage mirrors the main Codex repair: drop inflated Codex project
|
|
5524
5533
|
// rows, append the rebuilt rows, and swap only Codex project buckets. Project
|
|
@@ -31,6 +31,15 @@ const {
|
|
|
31
31
|
snapshotCodexModelAttributionState,
|
|
32
32
|
} = require("./codex-model-attribution");
|
|
33
33
|
const { readCodexServiceTier, isPriorityServiceTier } = require("./codex-service-tier");
|
|
34
|
+
const {
|
|
35
|
+
createUsageRecordState,
|
|
36
|
+
extractTokenUsageRecord,
|
|
37
|
+
noteLineAfterUsageRecord,
|
|
38
|
+
noteTokenCount,
|
|
39
|
+
noteUsageRecord,
|
|
40
|
+
snapshotUsageRecordState,
|
|
41
|
+
takeCompactionOnTokenCount,
|
|
42
|
+
} = require("./codex-usage-record");
|
|
34
43
|
|
|
35
44
|
const DISCOVERY_FULL_AUDIT_INTERVAL_MS = 60 * 1000;
|
|
36
45
|
const MAX_DISCOVERY_INVENTORIES = 32;
|
|
@@ -643,9 +652,37 @@ async function parseCodexRolloutFile(filePath, {
|
|
|
643
652
|
|
|
644
653
|
let turnCount = 0;
|
|
645
654
|
|
|
646
|
-
|
|
655
|
+
// Compaction records (issue #652, rules in codex-usage-record.js). A resume
|
|
656
|
+
// state from before #652 with prevTotals has seen a token_count.
|
|
657
|
+
const usageRecordState = createUsageRecordState(
|
|
658
|
+
isResuming
|
|
659
|
+
? resumeState.usageRecordState || (resumeState.prevTotals ? { sawTokenCount: true } : null)
|
|
660
|
+
: null,
|
|
661
|
+
);
|
|
662
|
+
// Compactions counted in this session, by response_id: the files merged for
|
|
663
|
+
// a session can repeat a record (an archived copy, a split fragment), and a
|
|
664
|
+
// resumed parse must not count one from an earlier chunk again.
|
|
665
|
+
const compactionResponseIds = new Set(
|
|
666
|
+
isResuming && Array.isArray(resumeState.compactionResponseIds)
|
|
667
|
+
? resumeState.compactionResponseIds
|
|
668
|
+
: [],
|
|
669
|
+
);
|
|
670
|
+
|
|
671
|
+
// Attribution as of now. A compaction record is counted later than it is
|
|
672
|
+
// read, so it carries the attribution captured when it was read.
|
|
673
|
+
function currentUsageAttribution() {
|
|
674
|
+
return {
|
|
675
|
+
model: currentCodexModel(modelAttributionState) || "unknown",
|
|
676
|
+
selectedModel: modelAttributionState.selectedModel || null,
|
|
677
|
+
rerouted: Boolean(modelAttributionState.rerouted),
|
|
678
|
+
rerouteReason: modelAttributionState.rerouteReason || null,
|
|
679
|
+
serviceTier,
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
function recordModelUsage(delta, rawRequestUsage, attribution = currentUsageAttribution()) {
|
|
647
684
|
if (!collectModelUsage || !delta || delta.total_tokens <= 0) return;
|
|
648
|
-
const effectiveModel =
|
|
685
|
+
const effectiveModel = attribution.model;
|
|
649
686
|
let row = byModel.get(effectiveModel);
|
|
650
687
|
if (!row) {
|
|
651
688
|
row = {
|
|
@@ -677,13 +714,13 @@ async function parseCodexRolloutFile(filePath, {
|
|
|
677
714
|
}
|
|
678
715
|
addInto(row, delta);
|
|
679
716
|
row.usage_events += 1;
|
|
680
|
-
if (
|
|
681
|
-
row.selected_models.add(
|
|
717
|
+
if (attribution.selectedModel) {
|
|
718
|
+
row.selected_models.add(attribution.selectedModel);
|
|
682
719
|
}
|
|
683
|
-
if (
|
|
720
|
+
if (attribution.rerouted) {
|
|
684
721
|
row.rerouted_usage_events += 1;
|
|
685
|
-
if (
|
|
686
|
-
row.reroute_reasons.add(
|
|
722
|
+
if (attribution.rerouteReason) {
|
|
723
|
+
row.reroute_reasons.add(attribution.rerouteReason);
|
|
687
724
|
}
|
|
688
725
|
}
|
|
689
726
|
// OpenAI applies the long-context tier to the whole request when its raw
|
|
@@ -704,7 +741,7 @@ async function parseCodexRolloutFile(filePath, {
|
|
|
704
741
|
// instead of replacing it. The two subsets alone cannot say how much usage
|
|
705
742
|
// was on BOTH, so record the intersection explicitly — otherwise a long
|
|
706
743
|
// Fast request prices at 3x Standard input where it should be 4x.
|
|
707
|
-
if (isPriorityServiceTier(serviceTier)) {
|
|
744
|
+
if (isPriorityServiceTier(attribution.serviceTier)) {
|
|
708
745
|
row.priority_usage_events += 1;
|
|
709
746
|
row.priority_input_tokens += delta.input_tokens;
|
|
710
747
|
row.priority_cached_input_tokens += delta.cached_input_tokens;
|
|
@@ -885,6 +922,14 @@ async function parseCodexRolloutFile(filePath, {
|
|
|
885
922
|
pendingExecDetails = [];
|
|
886
923
|
}
|
|
887
924
|
|
|
925
|
+
function countCompactionRecord(record) {
|
|
926
|
+
if (compactionResponseIds.has(record.responseId)) return;
|
|
927
|
+
compactionResponseIds.add(record.responseId);
|
|
928
|
+
if (!record.inRequestedRange) return;
|
|
929
|
+
recordModelUsage(record.delta, record.rawUsage, record.attribution);
|
|
930
|
+
attributeTurn(record.delta);
|
|
931
|
+
}
|
|
932
|
+
|
|
888
933
|
function usageEventSignature(lastUsage, totalUsage) {
|
|
889
934
|
return JSON.stringify({ lastUsage, totalUsage });
|
|
890
935
|
}
|
|
@@ -952,6 +997,8 @@ async function parseCodexRolloutFile(filePath, {
|
|
|
952
997
|
// turn_context.payload.model itself would make codex-model-attribution.js
|
|
953
998
|
// one of two authorities on the same question.
|
|
954
999
|
if (typeof onObject === "function") onObject(obj, attributedModel);
|
|
1000
|
+
const usageRecord = extractTokenUsageRecord(obj);
|
|
1001
|
+
if (!usageRecord) noteLineAfterUsageRecord(usageRecordState, obj?.type === "compacted");
|
|
955
1002
|
const ts = typeof obj?.timestamp === "string" ? obj.timestamp : null;
|
|
956
1003
|
if (!ts) continue;
|
|
957
1004
|
const inRequestedRange = isTimestampInRequestedDayRange(ts, { from, to, timeZoneContext });
|
|
@@ -1003,13 +1050,42 @@ async function parseCodexRolloutFile(filePath, {
|
|
|
1003
1050
|
continue;
|
|
1004
1051
|
}
|
|
1005
1052
|
|
|
1053
|
+
if (usageRecord) {
|
|
1054
|
+
const delta = normalizeUsage(usageRecord.usage);
|
|
1055
|
+
noteUsageRecord(
|
|
1056
|
+
usageRecordState,
|
|
1057
|
+
// Without a response_id a compaction cannot be deduplicated.
|
|
1058
|
+
delta.total_tokens > 0 && usageRecord.responseId
|
|
1059
|
+
? {
|
|
1060
|
+
responseId: usageRecord.responseId,
|
|
1061
|
+
timestamp: usageRecord.timestamp,
|
|
1062
|
+
inRequestedRange,
|
|
1063
|
+
rawUsage: usageRecord.usage,
|
|
1064
|
+
delta,
|
|
1065
|
+
attribution: currentUsageAttribution(),
|
|
1066
|
+
}
|
|
1067
|
+
: null,
|
|
1068
|
+
);
|
|
1069
|
+
continue;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1006
1072
|
const tokenCount = extractTokenCount(obj);
|
|
1007
1073
|
if (tokenCount) {
|
|
1008
1074
|
const info = tokenCount.info;
|
|
1009
1075
|
const lastUsage = info?.last_token_usage;
|
|
1010
1076
|
const totalUsage = info?.total_token_usage;
|
|
1077
|
+
let compaction = null;
|
|
1078
|
+
if (info && typeof info === "object") {
|
|
1079
|
+
noteTokenCount(usageRecordState);
|
|
1080
|
+
compaction = takeCompactionOnTokenCount(
|
|
1081
|
+
usageRecordState,
|
|
1082
|
+
usageDeltaState.lastTotal,
|
|
1083
|
+
totalUsage,
|
|
1084
|
+
);
|
|
1085
|
+
}
|
|
1011
1086
|
const rawDelta = consumeUsageDelta(usageDeltaState, lastUsage, totalUsage);
|
|
1012
1087
|
const delta = rawDelta ? normalizeUsage(rawDelta) : null;
|
|
1088
|
+
if (compaction) countCompactionRecord(compaction);
|
|
1013
1089
|
const isNewResumeEvent = noteTokenEvent(ts, lastUsage, totalUsage);
|
|
1014
1090
|
if (inRequestedRange) {
|
|
1015
1091
|
const eventSessionId = sessionId || rolloutSessionIdFromPath(primaryFilePath) || primaryFilePath;
|
|
@@ -1082,6 +1158,8 @@ async function parseCodexRolloutFile(filePath, {
|
|
|
1082
1158
|
pendingExecDetails,
|
|
1083
1159
|
lastTokenTimestamp,
|
|
1084
1160
|
lastTimestampEventSignatures: Array.from(materializeLastTimestampSignatures()),
|
|
1161
|
+
usageRecordState: snapshotUsageRecordState(usageRecordState),
|
|
1162
|
+
compactionResponseIds: Array.from(compactionResponseIds),
|
|
1085
1163
|
};
|
|
1086
1164
|
result.endOffset = readProgress.endOffset;
|
|
1087
1165
|
result.appendable = Boolean(contentHasher) && (
|