tokentracker-cli 1.1.5 → 1.1.6
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-ClUmGxBJ.js → AchievementBadge-CpK5rOMf.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-BB0DFE3m.js → AchievementsPage-BtcQkHZR.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-BMCSk63s.js → AchievementsSection-BT50hdFh.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-DzJtvuKO.js → BadgeDetailModal-DFtz7FxR.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-BviEasW4.js → BotAnimated-DuZSWD8p.js} +1 -1
- package/dashboard/dist/assets/{Card-BoHr-wLc.js → Card-BzGCR7t6.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-Bwm8BfqY.js → ClawdAnimated-tpie3z4W.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-Rb0Gfcg9.js → CommandPalette-DxL_wTUY.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-Ck7R7Q-d.js → CommunityStatsModal-5FYbcq_Q.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-52Fu9wOi.js → ConfirmModal-Dd1z1ofU.js} +1 -1
- package/dashboard/dist/assets/{Controls-YlGr187A.js → Controls-DlImhUxL.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-BRim2Rt6.js → DashboardPage-DIPzwCc4.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-3mmhzfgd.js → DevicePage-CtdxXb6m.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-D1KfBYUS.js → DialogClose-FTnu24dV.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-CqQpH51z.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-DKye2nJK.js → DialogTitle-C8_lCmoh.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-mJp_ZFst.js → FadeIn-Cw9s9Vyn.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-B2R_aqp9.js → HeaderGithubStar-C8GHdUnS.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-ElY02914.js → HoverTooltip-BFgXXFLw.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-CNzPUe3x.js → IpCheckPage-C62rs4Sf.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-L25-CxXg.js → LandingPage-qa3wKk7Y.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-BT7x5wAP.js → LeaderboardAvatar-BkznbeVC.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-bPce9gOU.js → LeaderboardPage-DTNaWWUP.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-DPrFGAp6.js → LeaderboardProfileModal-DkP4Wttv.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-j2D1pwYO.js → LeaderboardProfilePage-C7K3PNq3.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-CSED1kBx.js → LimitsPage-CdQfWCxG.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-D6OERWez.js → LocalOnlyNotice-ClvY1_wG.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-HgmRdIn8.js → LoginCard-B1kZLJZd.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-BSlEmKOV.js → LoginModal-GiYCVrbT.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-HQAhowvh.js → LoginPage-INlKWFTQ.js} +1 -1
- package/dashboard/dist/assets/{PetPage-DnbYfu-z.js → PetPage-uq1reCKp.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-DnyVdfB8.js → PopoverPopup-Dc5Z66VI.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-D8kgkZlR.js → ProviderIcon-Qh2N0LTI.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-ChtXGykP.js → ResetPasswordPage-BdlpShC8.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-dHUpXqFk.js → SegmentedControl-DCmwiJYf.js} +1 -1
- package/dashboard/dist/assets/{Select-C0tpjNiq.js → Select-BIMHJc2D.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-C3G_w14k.js → SelectItemText-CMkxqxvY.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-D6x4e1r8.js → ServiceStatusPage-C1ll8UfE.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-DZH1QMWd.js → SessionsPage-DVnwnAWa.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-DGmDb2R4.js → SettingsPage-CGs5NN_Z.js} +2 -2
- package/dashboard/dist/assets/{SkillsPage-ChloCHPa.js → SkillsPage-5hrIvbe1.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-DOC9wlkv.js → TokenGalaxy-BfD0rv-M.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-BB_d-qdY.js → ToolbarRootContext-BlMLA5Ez.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-DVVzYdc7.js → TrendMonitor-DnJCeEQS.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-DHVSyU0i.js → WidgetsPage-DsKnuAcr.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-BDi28nRt.js → WrappedPage-CXwtk-hY.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-Bnc5aBhq.js → __vite-browser-external-cuNuS_b-.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-BiGvZiLq.js → agent-logos-DxLnGJgJ.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-SvD82rok.js → arrow-up-right-Cj7u2wr7.js} +1 -1
- package/dashboard/dist/assets/{check-jL5XErEW.js → check-DNFOvbbk.js} +1 -1
- package/dashboard/dist/assets/{composite-DM6geXPA.js → composite-DQR0hWa5.js} +1 -1
- package/dashboard/dist/assets/{copy-Dy_GIzj2.js → copy-D0SHZEpt.js} +1 -1
- package/dashboard/dist/assets/{download-BW_FS7nX.js → download-UlivGLVm.js} +1 -1
- package/dashboard/dist/assets/{external-link-2RIovvCT.js → external-link-rdZCNL_v.js} +1 -1
- package/dashboard/dist/assets/{flame-CIRJIxxA.js → flame-qfy_Ty_R.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-CT8ahEK4.js → format-tokens-DU-AJn2b.js} +1 -1
- package/dashboard/dist/assets/{icons-7J1WD0C-.js → icons-CZ7P_cMG.js} +1 -1
- package/dashboard/dist/assets/{index-_vJl6sF7.js → index-CXnOAYdM.js} +1 -1
- package/dashboard/dist/assets/{index-D3iSSyYr.js → index-DDfiGiEo.js} +1 -1
- package/dashboard/dist/assets/{index-Ddb2A6Mx.js → index-DKnHC0bC.js} +1 -1
- package/dashboard/dist/assets/{info-BjVWcOOC.js → info-BY3dZuIN.js} +1 -1
- package/dashboard/dist/assets/{link-2-CyRWnHWE.js → link-2-CSTcMOFn.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-DUpG5zah.js → loader-circle-yIM6ih7L.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-BVGCRkFZ.js → maximize-2-C1P3TlYj.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-CZI7rED4.js → modifiers.esm-BoQpSulH.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-DfBtd01T.js → monitor-smartphone-DafIVSH1.js} +1 -1
- package/dashboard/dist/assets/{plus-CvbLCvjV.js → plus-B4l58vrs.js} +1 -1
- package/dashboard/dist/assets/{provider-display-DC46GLrv.js → provider-display-CN_xz_OA.js} +1 -1
- package/dashboard/dist/assets/{react-mYr3J8Vw.js → react-B9dzohvC.js} +1 -1
- package/dashboard/dist/assets/{search-CFaS1rSj.js → search-B8ejosPU.js} +1 -1
- package/dashboard/dist/assets/{skills-api-B1N6seFa.js → skills-api-BLC6ZUle.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-BE2GiQaC.js → sortable.esm-BLUZnPyk.js} +1 -1
- package/dashboard/dist/assets/{store-DwBbExah.js → store-3B91_nUE.js} +1 -1
- package/dashboard/dist/assets/{terminal-Bl2BuO9x.js → terminal-DccsqdRD.js} +1 -1
- package/dashboard/dist/assets/{trash-D8beb27Y.js → trash-DfkcSCtq.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-DJG1DsXR.js → use-community-stats-CuIZHVoQ.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-DYK8iyOM.js → use-latest-request-guard-B_oV9ZfF.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-BGmcFVX3.js → use-limits-display-prefs-CXj8GHMY.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-Cqia_VIq.js → use-ordered-list-dAFHiuLi.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-UMqqLkcq.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-Mj3OeVGZ.js → use-session-efficiency-pref-B9Q45jnR.js} +1 -1
- package/dashboard/dist/assets/{use-transform-D4BQIBHx.js → use-transform-CWR6dZvr.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-BFrO7Mtq.js → use-usage-limits-BmwSEzJh.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-CYJavR2h.js → useCurrency-BjHTP-xy.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-CKruI7SP.js → useTokenFormat-DMOiOFlN.js} +1 -1
- package/dashboard/dist/assets/{zap-a82fG76c.js → zap-v0h1PWbB.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/serve.js +147 -17
- package/src/lib/local-api.js +6 -2
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/usage-limits.js +27 -1
- package/dashboard/dist/assets/DialogDescription-BhWwQSSg.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-CmCk9Sb5.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as c}from"./__vite-browser-external-
|
|
1
|
+
import{m as c}from"./__vite-browser-external-cuNuS_b-.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-cuNuS_b-.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,a3 as Oe}from"./__vite-browser-external-
|
|
1
|
+
import{r as c,d as P,a3 as Oe}from"./__vite-browser-external-cuNuS_b-.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-cuNuS_b-.js";import{F as g}from"./composite-DQR0hWa5.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-cuNuS_b-.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-cuNuS_b-.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-DJG1DsXR.js → use-community-stats-CuIZHVoQ.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-cuNuS_b-.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-cuNuS_b-.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-cuNuS_b-.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-cuNuS_b-.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-cuNuS_b-.js";import{h as r,i as t,p as s}from"./react-B9dzohvC.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-cuNuS_b-.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-B9dzohvC.js";import{r as f}from"./__vite-browser-external-cuNuS_b-.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,ac as x,r as w,c as N,ad as C,ae as O,af as g}from"./__vite-browser-external-Bnc5aBhq.js";import{l as R,i as _,L as P,a as q}from"./use-limits-display-prefs-BGmcFVX3.js";import{u as z}from"./use-latest-request-guard-DYK8iyOM.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 n=i=>{const a=i?.detail?.status;typeof a=="string"&&(M=a),e(L())};return window.addEventListener(F,n),e(L()),S()&&x({type:"getNotificationStatus"}),()=>window.removeEventListener(F,n)}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,n]=w.useState($),[i,a]=w.useState("unknown");w.useEffect(()=>j(a),[]);const y=w.useCallback(async o=>{const r=!!o;r&&await T();try{window.localStorage.setItem(v,r?"1":"0")}catch{}n(r)},[]);return{enabled:e,setEnabled:y,permissionBlocked:i==="denied"}}function B(e,n){if(!(e>0))return null;const i=(e-n)/e;return Number.isFinite(i)?Math.min(Math.max(i,0),1):null}function G(e,n,i=.03){return e>n+i}function V(e){const n=Math.max(0,Math.floor(e)),i=Math.floor(n/3600);return i>24?`${Math.floor(i/24)}d`:i>0?`${i}h`:`${Math.floor(n/60)}m`}function J(e,n){if(typeof e.windowSeconds=="number")return e.windowSeconds;if(e.windowSecondsField&&n){const i=n[e.windowSecondsField];return typeof i=="number"&&i>0?i:null}return null}function U(e){return e==null?NaN:typeof e=="number"?e*1e3:Date.parse(e)}function H({usedPercent:e,windowSeconds:n,resetMs:i,mode:a,now:y=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(!(n>0)||!Number.isFinite(i))return r;const l=Math.max(0,(i-y)/1e3),d=B(n,l);if(d==null)return r;if(r.expectedPercent=Math.round(d*100),r.paceOver=G(o,d),o>0){const c=a==="remaining"?1-d:d;r.pacePercent=c*100}if(d>.02&&o>0){const c=n*d,m=o/c,f=o/d;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 n=Array.isArray(e.weekly_scoped)?e.weekly_scoped.map(i=>({key:`scoped-${i.label}`,label:i.label,window:i,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},...n]}},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 n=typeof e.period_type=="string"?e.period_type:null,i=n==="weekly"?"limits.label.grok_week":n==="daily"?"limits.label.grok_day":"limits.label.grok_month",a=n==="weekly"?7*86400:n==="daily"?86400:void 0;return[{key:n==="weekly"?"week":n==="daily"?"day":"month",labelKey:i,window:e.primary_window,windowSeconds:a},{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){if(e.plan_kind==="coding-plan")return[{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}];const n=Array.isArray(e.buckets)?e.buckets.filter(i=>i?.label&&i.window):[];return n.length?n.map((i,a)=>({key:`bucket-${i.entitlement_id||a}`,label:i.label,window:i.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:n=Date.now()}={}){const i=[],a=W;for(const[y,o]of Object.entries(e||{})){const r=a[y];if(!(!o?.configured||o.error||!r))for(const l of r.windows(o)){if(!l.window)continue;const d=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:d,windowSeconds:J(l,l.window),resetMs:m,mode:"used",now:n});!f.runsOutEta||!f.paceOver||d<20||!(m>n)||i.push({id:`${y}:${l.key}:${m}`,providerId:y,windowKey:l.key,resetMs:m,usedPercent:d,runsOutEta:f.runsOutEta})}}return i}function Z(e){const n=Y(),i=X(e);for(const o of i){if(n[o.id])continue;const r=R(o.providerId),l=N("limits.alert.title",{provider:r}),d=N("limits.alert.body",{eta:o.runsOutEta,percent:Math.round(o.usedPercent)});let c=C({title:l,body:d,id:o.id});!c&&typeof Notification<"u"&&Notification.permission==="granted"&&(new Notification(l,{body:d,tag:o.id}),c=!0),c&&(n[o.id]=Date.now())}const a=Date.now()-864e5,y=Object.fromEntries(Object.entries(n).filter(([o,r])=>{const l=Number(o.split(":").at(-1));return Number.isFinite(l)?l>=a:Number(r)>=a}).slice(-100));return Q(y),i.length}function k(e,n){return!e||n||!e.devin||e.devin.configured===!1&&Object.keys(e.devin).length===1?e:{...e,devin:{configured:!1}}}function oe(e){const n=!!e?.initialState,[i,a]=w.useState(_),[y,o]=w.useState(()=>n?k(e?.initialState?.data??null,_()):null),[r,l]=w.useState(()=>n?e?.initialState?.error??null:null),[d,c]=w.useState(!n),m=!!e?.initialRefresh,f=!!e?.publishToPreloadCache,b=z([i]);w.useEffect(()=>{if(typeof window>"u")return;const s=()=>a(_()),t=u=>{q(u.key)&&s()};return window.addEventListener(P,s),window.addEventListener("storage",t),()=>{window.removeEventListener(P,s),window.removeEventListener("storage",t)}},[]),w.useEffect(()=>{if(!(!y||typeof window>"u"))try{window.localStorage.getItem(v)==="1"&&Z(y)}catch{}},[y]);const p=w.useCallback((s,t)=>{!f||!s||typeof s!="object"||O(k(s,_()),{source:t})},[f]),A=w.useCallback(async()=>{const s=b();try{const t=await g({refresh:!0,devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),c(!1),p(u,"manual-refresh")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]),h=w.useCallback(async()=>{const s=b();try{const t=await g({devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),c(!1),p(u,"page-load")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]);w.useEffect(()=>{if(typeof window>"u"||typeof document>"u")return;const s=15e3;let t=Date.now();const u=()=>{if(document.visibilityState!=="visible")return;const E=Date.now();E-t<s||(t=E,h())};return window.addEventListener("focus",u),document.addEventListener("visibilitychange",u),()=>{window.removeEventListener("focus",u),document.removeEventListener("visibilitychange",u)}},[h]);const K=w.useRef(i);return w.useEffect(()=>{K.current!==i&&(K.current=i,i||o(s=>k(s,!1)),h())},[i,h]),w.useEffect(()=>{if(n&&!m)return;const s=b();(async()=>{try{const t=await g({devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),p(u,"page-load")}catch(t){if(!s())return;l(t?.message||String(t))}finally{s()&&c(!1)}})()},[b,n,m,p]),{data:y,error:r,isLoading:d,refresh:A}}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,ac as x,r as w,c as N,ad as C,ae as O,af as g}from"./__vite-browser-external-cuNuS_b-.js";import{l as R,i as _,L as P,a as q}from"./use-limits-display-prefs-CXj8GHMY.js";import{u as z}from"./use-latest-request-guard-B_oV9ZfF.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 n=i=>{const a=i?.detail?.status;typeof a=="string"&&(M=a),e(L())};return window.addEventListener(F,n),e(L()),S()&&x({type:"getNotificationStatus"}),()=>window.removeEventListener(F,n)}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,n]=w.useState($),[i,a]=w.useState("unknown");w.useEffect(()=>j(a),[]);const y=w.useCallback(async o=>{const r=!!o;r&&await T();try{window.localStorage.setItem(v,r?"1":"0")}catch{}n(r)},[]);return{enabled:e,setEnabled:y,permissionBlocked:i==="denied"}}function B(e,n){if(!(e>0))return null;const i=(e-n)/e;return Number.isFinite(i)?Math.min(Math.max(i,0),1):null}function G(e,n,i=.03){return e>n+i}function V(e){const n=Math.max(0,Math.floor(e)),i=Math.floor(n/3600);return i>24?`${Math.floor(i/24)}d`:i>0?`${i}h`:`${Math.floor(n/60)}m`}function J(e,n){if(typeof e.windowSeconds=="number")return e.windowSeconds;if(e.windowSecondsField&&n){const i=n[e.windowSecondsField];return typeof i=="number"&&i>0?i:null}return null}function U(e){return e==null?NaN:typeof e=="number"?e*1e3:Date.parse(e)}function H({usedPercent:e,windowSeconds:n,resetMs:i,mode:a,now:y=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(!(n>0)||!Number.isFinite(i))return r;const l=Math.max(0,(i-y)/1e3),d=B(n,l);if(d==null)return r;if(r.expectedPercent=Math.round(d*100),r.paceOver=G(o,d),o>0){const c=a==="remaining"?1-d:d;r.pacePercent=c*100}if(d>.02&&o>0){const c=n*d,m=o/c,f=o/d;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 n=Array.isArray(e.weekly_scoped)?e.weekly_scoped.map(i=>({key:`scoped-${i.label}`,label:i.label,window:i,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},...n]}},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 n=typeof e.period_type=="string"?e.period_type:null,i=n==="weekly"?"limits.label.grok_week":n==="daily"?"limits.label.grok_day":"limits.label.grok_month",a=n==="weekly"?7*86400:n==="daily"?86400:void 0;return[{key:n==="weekly"?"week":n==="daily"?"day":"month",labelKey:i,window:e.primary_window,windowSeconds:a},{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){if(e.plan_kind==="coding-plan")return[{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}];const n=Array.isArray(e.buckets)?e.buckets.filter(i=>i?.label&&i.window):[];return n.length?n.map((i,a)=>({key:`bucket-${i.entitlement_id||a}`,label:i.label,window:i.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:n=Date.now()}={}){const i=[],a=W;for(const[y,o]of Object.entries(e||{})){const r=a[y];if(!(!o?.configured||o.error||!r))for(const l of r.windows(o)){if(!l.window)continue;const d=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:d,windowSeconds:J(l,l.window),resetMs:m,mode:"used",now:n});!f.runsOutEta||!f.paceOver||d<20||!(m>n)||i.push({id:`${y}:${l.key}:${m}`,providerId:y,windowKey:l.key,resetMs:m,usedPercent:d,runsOutEta:f.runsOutEta})}}return i}function Z(e){const n=Y(),i=X(e);for(const o of i){if(n[o.id])continue;const r=R(o.providerId),l=N("limits.alert.title",{provider:r}),d=N("limits.alert.body",{eta:o.runsOutEta,percent:Math.round(o.usedPercent)});let c=C({title:l,body:d,id:o.id});!c&&typeof Notification<"u"&&Notification.permission==="granted"&&(new Notification(l,{body:d,tag:o.id}),c=!0),c&&(n[o.id]=Date.now())}const a=Date.now()-864e5,y=Object.fromEntries(Object.entries(n).filter(([o,r])=>{const l=Number(o.split(":").at(-1));return Number.isFinite(l)?l>=a:Number(r)>=a}).slice(-100));return Q(y),i.length}function k(e,n){return!e||n||!e.devin||e.devin.configured===!1&&Object.keys(e.devin).length===1?e:{...e,devin:{configured:!1}}}function oe(e){const n=!!e?.initialState,[i,a]=w.useState(_),[y,o]=w.useState(()=>n?k(e?.initialState?.data??null,_()):null),[r,l]=w.useState(()=>n?e?.initialState?.error??null:null),[d,c]=w.useState(!n),m=!!e?.initialRefresh,f=!!e?.publishToPreloadCache,b=z([i]);w.useEffect(()=>{if(typeof window>"u")return;const s=()=>a(_()),t=u=>{q(u.key)&&s()};return window.addEventListener(P,s),window.addEventListener("storage",t),()=>{window.removeEventListener(P,s),window.removeEventListener("storage",t)}},[]),w.useEffect(()=>{if(!(!y||typeof window>"u"))try{window.localStorage.getItem(v)==="1"&&Z(y)}catch{}},[y]);const p=w.useCallback((s,t)=>{!f||!s||typeof s!="object"||O(k(s,_()),{source:t})},[f]),A=w.useCallback(async()=>{const s=b();try{const t=await g({refresh:!0,devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),c(!1),p(u,"manual-refresh")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]),h=w.useCallback(async()=>{const s=b();try{const t=await g({devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),c(!1),p(u,"page-load")}catch(t){if(!s())return;l(t?.message||String(t)),c(!1)}},[b,p]);w.useEffect(()=>{if(typeof window>"u"||typeof document>"u")return;const s=15e3;let t=Date.now();const u=()=>{if(document.visibilityState!=="visible")return;const E=Date.now();E-t<s||(t=E,h())};return window.addEventListener("focus",u),document.addEventListener("visibilitychange",u),()=>{window.removeEventListener("focus",u),document.removeEventListener("visibilitychange",u)}},[h]);const K=w.useRef(i);return w.useEffect(()=>{K.current!==i&&(K.current=i,i||o(s=>k(s,!1)),h())},[i,h]),w.useEffect(()=>{if(n&&!m)return;const s=b();(async()=>{try{const t=await g({devinEnabled:_()});if(!s())return;const u=t&&typeof t=="object"?t:null;o(k(u,_())),l(null),p(u,"page-load")}catch(t){if(!s())return;l(t?.message||String(t))}finally{s()&&c(!1)}})()},[b,n,m,p]),{data:y,error:r,isLoading:d,refresh:A}}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-cuNuS_b-.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-cuNuS_b-.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-cuNuS_b-.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};
|
|
@@ -273,7 +273,7 @@
|
|
|
273
273
|
]
|
|
274
274
|
}
|
|
275
275
|
</script>
|
|
276
|
-
<script type="module" crossorigin src="/assets/__vite-browser-external-
|
|
276
|
+
<script type="module" crossorigin src="/assets/__vite-browser-external-cuNuS_b-.js"></script>
|
|
277
277
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-Bg0J-a5P.css">
|
|
278
278
|
</head>
|
|
279
279
|
<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-cuNuS_b-.js"></script>
|
|
169
169
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-Bg0J-a5P.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-cuNuS_b-.js"></script>
|
|
140
140
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-Bg0J-a5P.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-cuNuS_b-.js"></script>
|
|
79
79
|
<link rel="stylesheet" crossorigin href="/assets/__vite-browser-external-Bg0J-a5P.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.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "Local-first AI coding token usage and cost tracker for 43 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/serve.js
CHANGED
|
@@ -21,6 +21,16 @@ const DEFAULT_PORT = 7680;
|
|
|
21
21
|
const WSL_DEFAULT_PORT = 7681;
|
|
22
22
|
const DEFAULT_MAX_PORT_ATTEMPTS = 20;
|
|
23
23
|
const NPM_PACKAGE_NAME = "tokentracker-cli";
|
|
24
|
+
const CURRENT_PACKAGE_VERSION = (() => {
|
|
25
|
+
try {
|
|
26
|
+
const manifest = JSON.parse(
|
|
27
|
+
fssync.readFileSync(path.resolve(__dirname, "..", "..", "package.json"), "utf8"),
|
|
28
|
+
);
|
|
29
|
+
return typeof manifest?.version === "string" ? manifest.version.trim() : "";
|
|
30
|
+
} catch (_e) {
|
|
31
|
+
return "";
|
|
32
|
+
}
|
|
33
|
+
})();
|
|
24
34
|
const LOCAL_BIND_HOST = "127.0.0.1";
|
|
25
35
|
const NATIVE_BACKGROUND_SYNC_INTERVAL_MS = 60_000;
|
|
26
36
|
const STATIC_ASSET_EXTENSIONS = new Set([
|
|
@@ -59,6 +69,14 @@ function getLocalServerUrl(port) {
|
|
|
59
69
|
async function cmdServe(argv) {
|
|
60
70
|
const opts = parseArgs(argv);
|
|
61
71
|
|
|
72
|
+
// An explicit port may already belong to this exact installation (for
|
|
73
|
+
// example a duplicate CLI launch or a native wake/retry). Detect that before
|
|
74
|
+
// init/sync/runtime repair so the duplicate is a true no-op.
|
|
75
|
+
if (opts.portExplicit && await isHealthySameInstallation(opts.port)) {
|
|
76
|
+
writeHealthyDuplicateNotice(opts.port);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
62
80
|
// 0. First-time setup: if tracker dir doesn't exist, run init first
|
|
63
81
|
const { trackerDir, binDir } = await resolveTrackerPaths();
|
|
64
82
|
if (!fssync.existsSync(path.join(trackerDir, "cursors.json"))) {
|
|
@@ -127,7 +145,14 @@ async function cmdServe(argv) {
|
|
|
127
145
|
}
|
|
128
146
|
|
|
129
147
|
// 3. Create handler
|
|
130
|
-
const handleApi = createLocalApiHandler({
|
|
148
|
+
const handleApi = createLocalApiHandler({
|
|
149
|
+
queuePath,
|
|
150
|
+
// Snapshot the package version at process start. If this installation is
|
|
151
|
+
// upgraded in place while an old server is still alive, that old process
|
|
152
|
+
// keeps reporting its old runtime version instead of reading the new
|
|
153
|
+
// package.json from disk.
|
|
154
|
+
serverVersion: CURRENT_PACKAGE_VERSION,
|
|
155
|
+
});
|
|
131
156
|
|
|
132
157
|
const server = http.createServer(async (req, res) => {
|
|
133
158
|
try {
|
|
@@ -424,49 +449,152 @@ function isTrackerPackageRoot(dir) {
|
|
|
424
449
|
}
|
|
425
450
|
}
|
|
426
451
|
|
|
452
|
+
function normalizePackageRoot(dir) {
|
|
453
|
+
try {
|
|
454
|
+
return fssync.realpathSync(dir);
|
|
455
|
+
} catch (_e) {
|
|
456
|
+
return path.resolve(dir);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
const CURRENT_PACKAGE_ROOT = normalizePackageRoot(path.resolve(__dirname, "..", ".."));
|
|
461
|
+
|
|
427
462
|
// The path shape alone is not identifying: plenty of unrelated projects ship a
|
|
428
463
|
// `bin/tracker.js`, and matching on that would signal one of them. Resolve the
|
|
429
464
|
// script and require a real `${NPM_PACKAGE_NAME}` package around it.
|
|
430
465
|
//
|
|
466
|
+
// Return the resolved package root as well as proving identity. A healthy
|
|
467
|
+
// TokenTracker from another installation is still stale from the perspective
|
|
468
|
+
// of a newly launched bundled/native copy and must be replaceable.
|
|
469
|
+
//
|
|
431
470
|
// Fails closed. A server whose script cannot be resolved -- deleted, or in a
|
|
432
471
|
// mount namespace this process cannot read -- is left alone, so the worst case
|
|
433
472
|
// is a failed bind rather than a killed stranger.
|
|
434
|
-
function
|
|
473
|
+
function resolveTokenTrackerPackageRoot(command) {
|
|
435
474
|
const script = parseServeScriptPath(command);
|
|
436
|
-
if (!script) return
|
|
475
|
+
if (!script) return null;
|
|
437
476
|
|
|
438
477
|
let resolved;
|
|
439
478
|
try {
|
|
440
479
|
resolved = fssync.realpathSync(script);
|
|
441
480
|
} catch (_e) {
|
|
442
|
-
return
|
|
481
|
+
return null;
|
|
443
482
|
}
|
|
444
483
|
|
|
445
484
|
let dir = path.dirname(path.dirname(resolved));
|
|
446
485
|
for (let depth = 0; depth < TRACKER_PACKAGE_SEARCH_DEPTH; depth++) {
|
|
447
|
-
if (isTrackerPackageRoot(dir)) return
|
|
486
|
+
if (isTrackerPackageRoot(dir)) return normalizePackageRoot(dir);
|
|
448
487
|
const parent = path.dirname(dir);
|
|
449
488
|
if (parent === dir) break;
|
|
450
489
|
dir = parent;
|
|
451
490
|
}
|
|
452
|
-
return
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
function isTokenTrackerServeCommand(command) {
|
|
495
|
+
return Boolean(resolveTokenTrackerPackageRoot(command));
|
|
453
496
|
}
|
|
454
497
|
|
|
455
|
-
async function
|
|
456
|
-
|
|
457
|
-
|
|
498
|
+
async function isHealthyTokenTrackerServer(port, expectedVersion = CURRENT_PACKAGE_VERSION) {
|
|
499
|
+
if (!expectedVersion) return false;
|
|
500
|
+
try {
|
|
501
|
+
return await new Promise((resolve) => {
|
|
502
|
+
let settled = false;
|
|
503
|
+
const finish = (value) => {
|
|
504
|
+
if (settled) return;
|
|
505
|
+
settled = true;
|
|
506
|
+
resolve(value);
|
|
507
|
+
};
|
|
508
|
+
const req = http.get(
|
|
509
|
+
"http://127.0.0.1:" + port + "/api/local-auth",
|
|
510
|
+
{ timeout: 1500 },
|
|
511
|
+
(res) => {
|
|
512
|
+
if (res.statusCode !== 200) {
|
|
513
|
+
res.resume();
|
|
514
|
+
finish(false);
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
let body = "";
|
|
519
|
+
res.setEncoding("utf8");
|
|
520
|
+
res.on("data", (chunk) => {
|
|
521
|
+
body += chunk;
|
|
522
|
+
if (body.length > 4096) {
|
|
523
|
+
req.destroy();
|
|
524
|
+
finish(false);
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
res.on("end", () => {
|
|
528
|
+
try {
|
|
529
|
+
const payload = JSON.parse(body);
|
|
530
|
+
finish(payload?.serverVersion === expectedVersion);
|
|
531
|
+
} catch (_e) {
|
|
532
|
+
finish(false);
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
res.on("error", () => finish(false));
|
|
536
|
+
},
|
|
537
|
+
);
|
|
538
|
+
req.on("error", () => finish(false));
|
|
539
|
+
req.on("timeout", () => {
|
|
540
|
+
req.destroy();
|
|
541
|
+
finish(false);
|
|
542
|
+
});
|
|
543
|
+
});
|
|
544
|
+
} catch (_e) {
|
|
545
|
+
return false;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
458
548
|
|
|
459
|
-
|
|
460
|
-
// an unrelated application, and failing to bind is far safer than terminating
|
|
461
|
-
// a process merely because it happens to hold that port.
|
|
549
|
+
function tokenTrackerTargetsOnPort(port) {
|
|
462
550
|
const self = process.pid;
|
|
463
|
-
|
|
464
|
-
(pid) => pid !== self
|
|
551
|
+
return findPidOnPort(port)
|
|
552
|
+
.filter((pid) => pid !== self)
|
|
553
|
+
.map((pid) => ({
|
|
554
|
+
pid,
|
|
555
|
+
packageRoot: resolveTokenTrackerPackageRoot(readProcessCommand(pid)),
|
|
556
|
+
}))
|
|
557
|
+
.filter((target) => target.packageRoot);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
async function isHealthySameInstallation(port, currentPackageRoot = CURRENT_PACKAGE_ROOT) {
|
|
561
|
+
const expectedRoot = normalizePackageRoot(currentPackageRoot);
|
|
562
|
+
const hasSameInstallation = tokenTrackerTargetsOnPort(port)
|
|
563
|
+
.some((target) => target.packageRoot === expectedRoot);
|
|
564
|
+
return hasSameInstallation && await isHealthyTokenTrackerServer(port);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
function writeHealthyDuplicateNotice(port) {
|
|
568
|
+
process.stdout.write(
|
|
569
|
+
`TokenTracker is already active and healthy on port ${port}. Exiting duplicate server smoothly.\n`,
|
|
465
570
|
);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
async function ensurePortFree(
|
|
574
|
+
port,
|
|
575
|
+
{
|
|
576
|
+
currentPackageRoot = CURRENT_PACKAGE_ROOT,
|
|
577
|
+
exitFn = (code) => process.exit(code),
|
|
578
|
+
} = {},
|
|
579
|
+
) {
|
|
580
|
+
const targets = tokenTrackerTargetsOnPort(port);
|
|
466
581
|
if (targets.length === 0) return;
|
|
467
582
|
|
|
468
|
-
|
|
469
|
-
|
|
583
|
+
// Reuse only a healthy server from this exact installation. Another
|
|
584
|
+
// TokenTracker package may be an older global/native bundle; the desktop apps
|
|
585
|
+
// intentionally replace those so an update cannot keep serving stale code.
|
|
586
|
+
const expectedRoot = normalizePackageRoot(currentPackageRoot);
|
|
587
|
+
if (
|
|
588
|
+
targets.some((target) => target.packageRoot === expectedRoot)
|
|
589
|
+
&& await isHealthyTokenTrackerServer(port)
|
|
590
|
+
) {
|
|
591
|
+
writeHealthyDuplicateNotice(port);
|
|
592
|
+
exitFn(0);
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
process.stdout.write(`Stopping previous server on port ${port} (pid ${targets.map((target) => target.pid).join(", ")})...\n`);
|
|
597
|
+
for (const { pid } of targets) {
|
|
470
598
|
try {
|
|
471
599
|
process.kill(pid, "SIGTERM");
|
|
472
600
|
} catch (_e) {}
|
|
@@ -480,7 +608,7 @@ async function ensurePortFree(port) {
|
|
|
480
608
|
|
|
481
609
|
// Re-check identity before escalating: the pid may have exited during the
|
|
482
610
|
// wait above and been recycled by an unrelated process.
|
|
483
|
-
for (const pid of targets) {
|
|
611
|
+
for (const { pid } of targets) {
|
|
484
612
|
if (!isTokenTrackerServeCommand(readProcessCommand(pid))) continue;
|
|
485
613
|
try {
|
|
486
614
|
process.kill(pid, "SIGKILL");
|
|
@@ -653,9 +781,11 @@ module.exports = {
|
|
|
653
781
|
getLocalServerUrl,
|
|
654
782
|
parseArgs,
|
|
655
783
|
ensurePortFree,
|
|
784
|
+
isHealthySameInstallation,
|
|
656
785
|
isRunningUnderWsl,
|
|
657
786
|
isTokenTrackerServeCommand,
|
|
658
787
|
parseServeScriptPath,
|
|
788
|
+
resolveTokenTrackerPackageRoot,
|
|
659
789
|
resolveDefaultPort,
|
|
660
790
|
shouldServeSpaFallback,
|
|
661
791
|
startNativeBackgroundSync,
|
package/src/lib/local-api.js
CHANGED
|
@@ -1131,8 +1131,9 @@ function buildProxyHeaders(headers) {
|
|
|
1131
1131
|
// Main handler factory
|
|
1132
1132
|
// ---------------------------------------------------------------------------
|
|
1133
1133
|
|
|
1134
|
-
function createLocalApiHandler({ queuePath }) {
|
|
1134
|
+
function createLocalApiHandler({ queuePath, serverVersion = null }) {
|
|
1135
1135
|
const qp = queuePath || resolveQueuePath();
|
|
1136
|
+
const normalizedServerVersion = typeof serverVersion === "string" ? serverVersion.trim() : "";
|
|
1136
1137
|
|
|
1137
1138
|
// Server-side cookie relay: captures auth cookies from InsForge cloud responses
|
|
1138
1139
|
// so that both browser and WKWebView share the same login session via the proxy.
|
|
@@ -1581,7 +1582,10 @@ function createLocalApiHandler({ queuePath }) {
|
|
|
1581
1582
|
"Content-Type": "application/json",
|
|
1582
1583
|
"Cache-Control": "no-store",
|
|
1583
1584
|
});
|
|
1584
|
-
res.end(JSON.stringify({
|
|
1585
|
+
res.end(JSON.stringify({
|
|
1586
|
+
token: localAuthToken,
|
|
1587
|
+
...(normalizedServerVersion ? { serverVersion: normalizedServerVersion } : {}),
|
|
1588
|
+
}));
|
|
1585
1589
|
return true;
|
|
1586
1590
|
}
|
|
1587
1591
|
|