@bitkyc08/opencodex 2.61.0 → 2.62.0-preview.20260923
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/gui/dist/assets/{App-CH6C5H7x.js → App-CANWata-.js} +3 -3
- package/gui/dist/assets/{Tray-CLZh48fM.js → Tray-DdvPBVLi.js} +1 -1
- package/gui/dist/assets/{index-wpTOyepx.js → index-BIS5HXEP.js} +2 -2
- package/gui/dist/assets/{usage-companion-chart-a0N58rRI.js → usage-companion-chart-BIhvlbQW.js} +1 -1
- package/gui/dist/index.html +1 -1
- package/package.json +1 -1
- package/src/generated/compatibility-version.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{T as e,_ as t,m as n,n as r,w as i}from"./index-wpTOyepx.js";import{a,f as o,i as s,m as c,t as l,u}from"./usage-companion-chart-a0N58rRI.js";var d=e(i(),1),f=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0,p=e=>typeof e==`object`&&e&&!Array.isArray(e)?e:{};function m(e){return Object.entries(p(p(e).providers)).flatMap(([e,t])=>{let n=p(t);return n.disabled===!0?[]:[{name:e,path:e===`openai`?`/api/codex-auth/accounts`:n.authMode===`oauth`?`/api/oauth/accounts?${new URLSearchParams({provider:e,quota:`1`})}`:n.hasApiKey===!0&&n.authMode!==`forward`?`/api/providers/keys?${new URLSearchParams({name:e,quota:`1`})}`:null}]})}function h(e){let t=p(e),n=t.accounts??t.keys;if(!Array.isArray(n))throw Error(`Invalid account roster`);return n.map(e=>{let n=p(e);if(typeof n.id!=`string`)throw Error(`Invalid account identifier`);let r=typeof n.email==`string`?_(n.email):void 0,i=[n.alias,n.label,r,n.logLabel,n.id].find(e=>typeof e==`string`&&e.length),a=n.quotaUnavailable===!0||n.quotaMode===`unsupported`||!n.quota?null:p(n.quota),o=typeof n.plan==`string`?n.plan:void 0,s=t.activeAccountId??t.activeId??t.activeCodexAccountId;return{id:n.id,label:i,email:r,plan:o,unavailable:n.quotaUnavailable===!0,active:typeof s==`string`?s===n.id:n.active===!0,status:typeof p(n.health).status==`string`?p(n.health).status:void 0,quotaFailure:typeof n.quotaFailure==`string`?n.quotaFailure:void 0,quota:u(a,o)}})}function g(e){if(!f(e)||e===0)return null;let t=e<0xe8d4a51000?e*1e3:e;return Number.isFinite(new Date(t).getTime())?t:null}function _(e){let[t,n]=e.split(`@`);if(!n)return`•••`;let r=n.includes(`.`)?n.slice(n.lastIndexOf(`.`)):``;return`${t?.slice(0,1)||`•`}•••@${n.slice(0,1)}•••${r}`}function v(e,t,n=Date.now()){let r=g(e);if(r===null||r<=n)return{text:`—`};let i=Math.ceil((r-n)/6e4),a=(e,n)=>new Intl.NumberFormat(t,{style:`unit`,unit:n,unitDisplay:`narrow`}).format(e);return{text:i<60?a(i,`minute`):i<1440?`${a(Math.floor(i/60),`hour`)} ${a(i%60,`minute`)}`:i<10080?`${a(Math.floor(i/1440),`day`)} ${a(Math.floor(i%1440/60),`hour`)}`:new Intl.DateTimeFormat(t,{month:`short`,day:`numeric`}).format(r),exact:new Date(r).toLocaleString(t)}}function y(e){if(!e)return[];let t=[{id:`quota.fiveHourLimit`,key:`quota.fiveHourLimit`,percent:e.fiveHourPercent??e.shortPercent,reset:e.fiveHourResetAt??e.shortResetAt},{id:`quota.weeklyLimit`,key:`quota.weeklyLimit`,percent:e.weeklyPercent,reset:e.weeklyResetAt},{id:`quota.monthlyLimit`,key:`quota.monthlyLimit`,percent:e.monthlyPercent,reset:e.monthlyResetAt},...Array.isArray(e.customWindows)?e.customWindows.filter(e=>e&&typeof e.label==`string`).map(e=>({id:e.label,label:e.label,percent:e.percent,reset:e.resetAt})):[]].filter((t,n)=>n===0&&e.monthlyPercent===void 0||f(t.percent)||g(t.reset)!==null),n=new Map;return t.map(e=>{let t=n.get(e.id)??0;return n.set(e.id,t+1),t===0?e:{...e,id:`${e.id}#${t}`}})}function b(e,t){let n=new Set(t.hiddenProviders),r=t.models===null?null:new Set(t.models),i=e.models.filter(e=>!n.has(e.provider)&&(r===null||r.has(`${e.provider}/${e.model}`)||r.has(e.model)));if(t.models===null&&t.hiddenProviders.length===0)return{...e,models:i};if(t.models?.length!==0&&e.models.some(e=>!e.provider||!e.model||e.provider===`other`&&e.model===`other`))return{...e,models:i.filter(e=>e.provider!==`other`||e.model!==`other`),summary:{},usageIncomplete:!0};let a={};for(let e of[`requests`,`totalTokens`,`inputTokens`,`outputTokens`,`cachedInputTokens`,`cacheReadInputTokens`,`estimatedCostUsd`,`measuredRequests`,`pricedRequests`])i.length&&i.every(t=>f(t[e]))&&(a[e]=i.reduce((t,n)=>t+n[e],0));return{...e,models:i,summary:a}}function x(e){let t={...e};if((e.requests??0)>0&&(e.measuredRequests===0||e.coverageRatio===0))for(let e of[`totalTokens`,`inputTokens`,`outputTokens`,`cachedInputTokens`,`cacheReadInputTokens`])delete t[e];return(e.requests??0)>0&&e.pricedRequests===0&&delete t.estimatedCostUsd,t}async function S(e,t){let r=n(2e4),i=()=>r.controller.abort();t.aborted&&i(),t.addEventListener(`abort`,i,{once:!0});try{let t=await fetch(e,{signal:r.signal,cache:`no-store`});if(!t.ok)throw Error(String(t.status));let n=await t.json();if(r.signal.aborted)throw Error(`Tray request cancelled`);return n}finally{r.clear(),t.removeEventListener(`abort`,i)}}function C(e){let t=p(e);if(t.error||!t.summary||typeof t.summary!=`object`||Array.isArray(t.summary)||!Array.isArray(t.models))throw Error(`Invalid usage`);return t}var w=r(),T=e=>e?.usageIncomplete||e?.historyTruncated||e?.entriesTruncated;function E(){let{t:e,locale:n}=t(),[r,i]=(0,d.useState)(null),[u,p]=(0,d.useState)(!1),[g,_]=(0,d.useState)([null,null]),[E,D]=(0,d.useState)(!1),[O,k]=(0,d.useState)([]),[A,j]=(0,d.useState)(!1),[M,N]=(0,d.useState)(null),[P,F]=(0,d.useState)(!1),[I,L]=(0,d.useState)(null),[R,z]=(0,d.useState)(!1),[B,V]=(0,d.useState)(0),H=()=>V(e=>e+1);(0,d.useEffect)(()=>{document.documentElement.classList.add(`tray-document`);let e=null,t=!1,n=!0,r=!1,o=()=>!document.hidden&&(window.__OPENCODEX_TRAY_VISIBLE__??n),c=async()=>{if(!o()||t)return;t=!0,z(!0);let n=!1,l=new AbortController;e=l;let u=e=>S(e,l.signal),d=()=>!r&&!l.signal.aborted;try{let e=(async()=>{try{let e=m(await u(`/api/config`)),t=await Promise.all(e.map(async e=>{if(!e.path)return{name:e.name,accounts:[]};try{let t=await u(e.path);if(e.name===`openai`)try{t.activeCodexAccountId=(await u(`/api/codex-auth/active`)).activeCodexAccountId??`__main__`}catch{}return{name:e.name,accounts:h(t)}}catch{return{name:e.name,accounts:[],unavailable:!0}}}));d()&&(k(t),j(!1),n=!0)}catch{d()&&(k([]),j(!0))}})(),t=(async()=>{let e;try{if(e=(await u(`/api/companion/settings`)).settings,!e||!Array.isArray(e.hiddenProviders)||!(e.models===null||Array.isArray(e.models)))throw Error(`Invalid settings`);d()&&(i(e),p(!1))}catch{d()&&p(!0);return}let t=Promise.allSettled([`/api/usage?range=today`,`/api/usage?range=30d`].map(async t=>b(C(await u(t)),e))).then(e=>{d()&&(n||=e.some(e=>e.status===`fulfilled`),_(e.map(e=>e.status===`fulfilled`?e.value:null)),D(e.some(e=>e.status===`rejected`)))}),r=(async()=>{if(!e.showChart)return;let t=a(e);try{let n=await u(`/api/usage/timeline?${t}`);d()&&(N(s(n,e)),F(!1))}catch{d()&&(N(null),F(!0))}})();await Promise.allSettled([t,r])})();await Promise.allSettled([e,t])}finally{t=!1,d()&&(z(!1),n&&L(Date.now())),!r&&l.signal.aborted&&o()&&c()}},l=()=>{o()?c():e?.abort()},u=()=>{n=!1,l()},d=()=>{n=!0,l()},f=e=>{let t=e.detail;typeof t==`boolean`&&(window.__OPENCODEX_TRAY_VISIBLE__=t),l()};c();let g=setInterval(()=>void c(),6e4);return document.addEventListener(`visibilitychange`,l),window.addEventListener(`blur`,u),window.addEventListener(`focus`,d),window.addEventListener(`opencodex:tray-visibility`,f),()=>{r=!0,e?.abort(),clearInterval(g),document.documentElement.classList.remove(`tray-document`),document.removeEventListener(`visibilitychange`,l),window.removeEventListener(`blur`,u),window.removeEventListener(`focus`,d),window.removeEventListener(`opencodex:tray-visibility`,f)}},[B]);let U=e=>f(e)?o(e,n):`—`,W=t=>{let i=t?x(t):void 0,a=i?.cacheReadInputTokens??i?.cachedInputTokens,o=f(a)&&f(i?.inputTokens)&&i.inputTokens>0?`${Math.round(a/i.inputTokens*100)}%`:`—`;return(0,w.jsxs)(`dl`,{children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`usage.card.totalTokens`)}),(0,w.jsx)(`dd`,{children:U(i?.totalTokens)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`tray.input`)}),(0,w.jsxs)(`dd`,{children:[U(i?.inputTokens),` `,(0,w.jsx)(`small`,{title:e(`usage.card.cachedTokens`),children:e(`tray.cached`,{percent:o})})]})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`tray.output`)}),(0,w.jsx)(`dd`,{children:U(i?.outputTokens)})]}),r?.showCost&&(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{title:e(`logs.metric.estimatedCostTitle`),children:e(`tray.cost`)}),(0,w.jsx)(`dd`,{title:f(i?.requests)&&f(i?.pricedRequests)&&i.pricedRequests<i.requests?e(`usage.cost.unpricedNote`,{count:i.requests-i.pricedRequests}):e(`logs.metric.estimatedCostTitle`),children:f(i?.estimatedCostUsd)?new Intl.NumberFormat(n,{style:`currency`,currency:`USD`,maximumFractionDigits:2}).format(i.estimatedCostUsd)+(f(i.pricedRequests)&&f(i.requests)&&i.pricedRequests<i.requests?`*`:``):`—`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`usage.card.requests`)}),(0,w.jsx)(`dd`,{children:U(i?.requests)})]}),f(i?.requests)&&i.requests>0&&f(i.measuredRequests)&&i.measuredRequests<i.requests&&(0,w.jsxs)(`div`,{className:`tray-coverage`,title:e(`usage.coverage.note`),children:[(0,w.jsx)(`dt`,{children:e(`usage.card.coverage`)}),(0,w.jsxs)(`dd`,{children:[Math.round(i.measuredRequests/i.requests*100),`%`]})]})]})},G=new Set(r?.hiddenProviders??[]);return(0,w.jsxs)(`main`,{className:`tray-page`,children:[(0,w.jsxs)(`header`,{children:[(0,w.jsx)(`strong`,{children:`OpenCodex`}),(0,w.jsx)(`a`,{href:`/?desktop=open#/usage`,"aria-label":e(`sub.settings`),title:e(`sub.settings`),children:`⚙`})]}),u&&(0,w.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.companion.settingsUnavailable`),` `,(0,w.jsx)(`button`,{onClick:H,children:e(`common.retry`)})]}),!r&&!u&&(0,w.jsx)(`p`,{role:`status`,children:e(`common.loading`)}),r&&(0,w.jsxs)(`section`,{className:`tray-totals`,children:[r.showToday&&(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`h2`,{children:[e(`tray.today`),T(g[0])&&(0,w.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),W(g[0]?.summary)]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`h2`,{children:[e(`usage.range.30d`),T(g[1])&&(0,w.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),W(g[1]?.summary)]})]}),E&&(0,w.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.loadError`),` `,(0,w.jsx)(`button`,{onClick:H,children:e(`common.retry`)})]}),r?.showChart&&(0,w.jsx)(`section`,{className:`tray-chart`,children:(0,w.jsx)(l,{timeline:M,chartStyle:r.chartStyle,hours:r.chartHours,loading:!M&&!P,error:P?e(`usage.companion.timelineUnavailable`):null,onRetry:H,locale:n,t:e})}),r?.showModels&&!!g[0]?.models.length&&(0,w.jsx)(`section`,{className:`tray-models`,"aria-label":e(`usage.section.models`),children:g[0].models.map(t=>(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{title:`${t.provider}/${t.model}`,children:t.model}),(0,w.jsxs)(`span`,{className:`tray-model-metrics`,children:[(0,w.jsx)(`span`,{title:e(`usage.card.requests`),children:e(`pws.dashboard.requests`,{count:U(t.requests)})}),(0,w.jsx)(`span`,{title:e(`usage.card.totalTokens`),children:U(x(t).totalTokens)})]})]},`${t.provider}/${t.model}`))}),(r?.showAccounts??!0)&&(0,w.jsxs)(`section`,{className:`tray-providers`,"aria-label":e(`usage.section.providers`),children:[A&&(0,w.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`startup.tray.unavailable`),` `,(0,w.jsx)(`button`,{onClick:H,children:e(`common.retry`)})]}),O.filter(e=>!G.has(e.name)).map(t=>(0,w.jsxs)(`div`,{className:`tray-provider`,children:[(0,w.jsx)(`h2`,{children:c(t.name,e)}),!t.accounts.length&&(0,w.jsx)(`div`,{className:`tray-missing`,children:e(t.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),t.accounts.map(t=>(0,w.jsxs)(`div`,{className:`tray-account`,children:[(0,w.jsxs)(`div`,{className:`tray-account-name`,title:t.label,children:[t.label,(0,w.jsxs)(`span`,{className:`tray-account-meta`,children:[t.plan,t.active&&(0,w.jsx)(`span`,{title:e(`prov.activeBadge`),"aria-label":e(`prov.activeBadge`),children:` ●`})]})]}),t.email&&t.email!==t.label&&(0,w.jsx)(`div`,{className:`tray-account-email`,children:t.email}),!y(t.quota).length&&(0,w.jsx)(`div`,{className:`tray-missing`,children:e(t.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),y(t.quota).map(t=>{let r=`key`in t?e(t.key):t.label,i=v(t.reset,n),a=f(t.percent)?Math.min(100,t.percent):null;return(0,w.jsxs)(`div`,{className:`tray-quota`,children:[(0,w.jsx)(`span`,{title:r,children:r}),(0,w.jsx)(`span`,{children:a===null?`—`:`${Math.round(a)}%`}),(0,w.jsx)(`span`,{className:`tray-bar`,role:a===null?`img`:`meter`,"aria-label":a===null?`${r}: ${e(`pws.dashboard.noQuota`)}`:r,"aria-valuemin":a===null?void 0:0,"aria-valuemax":a===null?void 0:100,"aria-valuenow":a??void 0,"aria-valuetext":a===null?void 0:`${Math.round(a)}%`,children:(0,w.jsx)(`i`,{style:{width:a===null?`0%`:`${a}%`}})}),(0,w.jsx)(`time`,{title:i.exact,children:i.text})]},t.id)})]},t.id))]},t.name))]}),(0,w.jsxs)(`div`,{className:`tray-refresh`,children:[(0,w.jsx)(`button`,{type:`button`,onClick:H,disabled:R,children:e(`startup.refresh`)}),(0,w.jsx)(`span`,{role:`status`,children:e(`tray.updated`,{time:I===null?`—`:new Date(I).toLocaleTimeString(n,{hour:`2-digit`,minute:`2-digit`})})})]}),(0,w.jsx)(`footer`,{children:(0,w.jsxs)(`a`,{href:`/?desktop=open#/usage`,children:[e(`nav.dashboard`),` `,(0,w.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})]})})]})}export{E as default};
|
|
1
|
+
import{T as e,_ as t,m as n,n as r,w as i}from"./index-BIS5HXEP.js";import{a,f as o,i as s,m as c,t as l,u}from"./usage-companion-chart-BIhvlbQW.js";var d=e(i(),1),f=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0,p=e=>typeof e==`object`&&e&&!Array.isArray(e)?e:{};function m(e){return Object.entries(p(p(e).providers)).flatMap(([e,t])=>{let n=p(t);return n.disabled===!0?[]:[{name:e,path:e===`openai`?`/api/codex-auth/accounts`:n.authMode===`oauth`?`/api/oauth/accounts?${new URLSearchParams({provider:e,quota:`1`})}`:n.hasApiKey===!0&&n.authMode!==`forward`?`/api/providers/keys?${new URLSearchParams({name:e,quota:`1`})}`:null}]})}function h(e){let t=p(e),n=t.accounts??t.keys;if(!Array.isArray(n))throw Error(`Invalid account roster`);return n.map(e=>{let n=p(e);if(typeof n.id!=`string`)throw Error(`Invalid account identifier`);let r=typeof n.email==`string`?_(n.email):void 0,i=[n.alias,n.label,r,n.logLabel,n.id].find(e=>typeof e==`string`&&e.length),a=n.quotaUnavailable===!0||n.quotaMode===`unsupported`||!n.quota?null:p(n.quota),o=typeof n.plan==`string`?n.plan:void 0,s=t.activeAccountId??t.activeId??t.activeCodexAccountId;return{id:n.id,label:i,email:r,plan:o,unavailable:n.quotaUnavailable===!0,active:typeof s==`string`?s===n.id:n.active===!0,status:typeof p(n.health).status==`string`?p(n.health).status:void 0,quotaFailure:typeof n.quotaFailure==`string`?n.quotaFailure:void 0,quota:u(a,o)}})}function g(e){if(!f(e)||e===0)return null;let t=e<0xe8d4a51000?e*1e3:e;return Number.isFinite(new Date(t).getTime())?t:null}function _(e){let[t,n]=e.split(`@`);if(!n)return`•••`;let r=n.includes(`.`)?n.slice(n.lastIndexOf(`.`)):``;return`${t?.slice(0,1)||`•`}•••@${n.slice(0,1)}•••${r}`}function v(e,t,n=Date.now()){let r=g(e);if(r===null||r<=n)return{text:`—`};let i=Math.ceil((r-n)/6e4),a=(e,n)=>new Intl.NumberFormat(t,{style:`unit`,unit:n,unitDisplay:`narrow`}).format(e);return{text:i<60?a(i,`minute`):i<1440?`${a(Math.floor(i/60),`hour`)} ${a(i%60,`minute`)}`:i<10080?`${a(Math.floor(i/1440),`day`)} ${a(Math.floor(i%1440/60),`hour`)}`:new Intl.DateTimeFormat(t,{month:`short`,day:`numeric`}).format(r),exact:new Date(r).toLocaleString(t)}}function y(e){if(!e)return[];let t=[{id:`quota.fiveHourLimit`,key:`quota.fiveHourLimit`,percent:e.fiveHourPercent??e.shortPercent,reset:e.fiveHourResetAt??e.shortResetAt},{id:`quota.weeklyLimit`,key:`quota.weeklyLimit`,percent:e.weeklyPercent,reset:e.weeklyResetAt},{id:`quota.monthlyLimit`,key:`quota.monthlyLimit`,percent:e.monthlyPercent,reset:e.monthlyResetAt},...Array.isArray(e.customWindows)?e.customWindows.filter(e=>e&&typeof e.label==`string`).map(e=>({id:e.label,label:e.label,percent:e.percent,reset:e.resetAt})):[]].filter((t,n)=>n===0&&e.monthlyPercent===void 0||f(t.percent)||g(t.reset)!==null),n=new Map;return t.map(e=>{let t=n.get(e.id)??0;return n.set(e.id,t+1),t===0?e:{...e,id:`${e.id}#${t}`}})}function b(e,t){let n=new Set(t.hiddenProviders),r=t.models===null?null:new Set(t.models),i=e.models.filter(e=>!n.has(e.provider)&&(r===null||r.has(`${e.provider}/${e.model}`)||r.has(e.model)));if(t.models===null&&t.hiddenProviders.length===0)return{...e,models:i};if(t.models?.length!==0&&e.models.some(e=>!e.provider||!e.model||e.provider===`other`&&e.model===`other`))return{...e,models:i.filter(e=>e.provider!==`other`||e.model!==`other`),summary:{},usageIncomplete:!0};let a={};for(let e of[`requests`,`totalTokens`,`inputTokens`,`outputTokens`,`cachedInputTokens`,`cacheReadInputTokens`,`estimatedCostUsd`,`measuredRequests`,`pricedRequests`])i.length&&i.every(t=>f(t[e]))&&(a[e]=i.reduce((t,n)=>t+n[e],0));return{...e,models:i,summary:a}}function x(e){let t={...e};if((e.requests??0)>0&&(e.measuredRequests===0||e.coverageRatio===0))for(let e of[`totalTokens`,`inputTokens`,`outputTokens`,`cachedInputTokens`,`cacheReadInputTokens`])delete t[e];return(e.requests??0)>0&&e.pricedRequests===0&&delete t.estimatedCostUsd,t}async function S(e,t){let r=n(2e4),i=()=>r.controller.abort();t.aborted&&i(),t.addEventListener(`abort`,i,{once:!0});try{let t=await fetch(e,{signal:r.signal,cache:`no-store`});if(!t.ok)throw Error(String(t.status));let n=await t.json();if(r.signal.aborted)throw Error(`Tray request cancelled`);return n}finally{r.clear(),t.removeEventListener(`abort`,i)}}function C(e){let t=p(e);if(t.error||!t.summary||typeof t.summary!=`object`||Array.isArray(t.summary)||!Array.isArray(t.models))throw Error(`Invalid usage`);return t}var w=r(),T=e=>e?.usageIncomplete||e?.historyTruncated||e?.entriesTruncated;function E(){let{t:e,locale:n}=t(),[r,i]=(0,d.useState)(null),[u,p]=(0,d.useState)(!1),[g,_]=(0,d.useState)([null,null]),[E,D]=(0,d.useState)(!1),[O,k]=(0,d.useState)([]),[A,j]=(0,d.useState)(!1),[M,N]=(0,d.useState)(null),[P,F]=(0,d.useState)(!1),[I,L]=(0,d.useState)(null),[R,z]=(0,d.useState)(!1),[B,V]=(0,d.useState)(0),H=()=>V(e=>e+1);(0,d.useEffect)(()=>{document.documentElement.classList.add(`tray-document`);let e=null,t=!1,n=!0,r=!1,o=()=>!document.hidden&&(window.__OPENCODEX_TRAY_VISIBLE__??n),c=async()=>{if(!o()||t)return;t=!0,z(!0);let n=!1,l=new AbortController;e=l;let u=e=>S(e,l.signal),d=()=>!r&&!l.signal.aborted;try{let e=(async()=>{try{let e=m(await u(`/api/config`)),t=await Promise.all(e.map(async e=>{if(!e.path)return{name:e.name,accounts:[]};try{let t=await u(e.path);if(e.name===`openai`)try{t.activeCodexAccountId=(await u(`/api/codex-auth/active`)).activeCodexAccountId??`__main__`}catch{}return{name:e.name,accounts:h(t)}}catch{return{name:e.name,accounts:[],unavailable:!0}}}));d()&&(k(t),j(!1),n=!0)}catch{d()&&(k([]),j(!0))}})(),t=(async()=>{let e;try{if(e=(await u(`/api/companion/settings`)).settings,!e||!Array.isArray(e.hiddenProviders)||!(e.models===null||Array.isArray(e.models)))throw Error(`Invalid settings`);d()&&(i(e),p(!1))}catch{d()&&p(!0);return}let t=Promise.allSettled([`/api/usage?range=today`,`/api/usage?range=30d`].map(async t=>b(C(await u(t)),e))).then(e=>{d()&&(n||=e.some(e=>e.status===`fulfilled`),_(e.map(e=>e.status===`fulfilled`?e.value:null)),D(e.some(e=>e.status===`rejected`)))}),r=(async()=>{if(!e.showChart)return;let t=a(e);try{let n=await u(`/api/usage/timeline?${t}`);d()&&(N(s(n,e)),F(!1))}catch{d()&&(N(null),F(!0))}})();await Promise.allSettled([t,r])})();await Promise.allSettled([e,t])}finally{t=!1,d()&&(z(!1),n&&L(Date.now())),!r&&l.signal.aborted&&o()&&c()}},l=()=>{o()?c():e?.abort()},u=()=>{n=!1,l()},d=()=>{n=!0,l()},f=e=>{let t=e.detail;typeof t==`boolean`&&(window.__OPENCODEX_TRAY_VISIBLE__=t),l()};c();let g=setInterval(()=>void c(),6e4);return document.addEventListener(`visibilitychange`,l),window.addEventListener(`blur`,u),window.addEventListener(`focus`,d),window.addEventListener(`opencodex:tray-visibility`,f),()=>{r=!0,e?.abort(),clearInterval(g),document.documentElement.classList.remove(`tray-document`),document.removeEventListener(`visibilitychange`,l),window.removeEventListener(`blur`,u),window.removeEventListener(`focus`,d),window.removeEventListener(`opencodex:tray-visibility`,f)}},[B]);let U=e=>f(e)?o(e,n):`—`,W=t=>{let i=t?x(t):void 0,a=i?.cacheReadInputTokens??i?.cachedInputTokens,o=f(a)&&f(i?.inputTokens)&&i.inputTokens>0?`${Math.round(a/i.inputTokens*100)}%`:`—`;return(0,w.jsxs)(`dl`,{children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`usage.card.totalTokens`)}),(0,w.jsx)(`dd`,{children:U(i?.totalTokens)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`tray.input`)}),(0,w.jsxs)(`dd`,{children:[U(i?.inputTokens),` `,(0,w.jsx)(`small`,{title:e(`usage.card.cachedTokens`),children:e(`tray.cached`,{percent:o})})]})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`tray.output`)}),(0,w.jsx)(`dd`,{children:U(i?.outputTokens)})]}),r?.showCost&&(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{title:e(`logs.metric.estimatedCostTitle`),children:e(`tray.cost`)}),(0,w.jsx)(`dd`,{title:f(i?.requests)&&f(i?.pricedRequests)&&i.pricedRequests<i.requests?e(`usage.cost.unpricedNote`,{count:i.requests-i.pricedRequests}):e(`logs.metric.estimatedCostTitle`),children:f(i?.estimatedCostUsd)?new Intl.NumberFormat(n,{style:`currency`,currency:`USD`,maximumFractionDigits:2}).format(i.estimatedCostUsd)+(f(i.pricedRequests)&&f(i.requests)&&i.pricedRequests<i.requests?`*`:``):`—`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`dt`,{children:e(`usage.card.requests`)}),(0,w.jsx)(`dd`,{children:U(i?.requests)})]}),f(i?.requests)&&i.requests>0&&f(i.measuredRequests)&&i.measuredRequests<i.requests&&(0,w.jsxs)(`div`,{className:`tray-coverage`,title:e(`usage.coverage.note`),children:[(0,w.jsx)(`dt`,{children:e(`usage.card.coverage`)}),(0,w.jsxs)(`dd`,{children:[Math.round(i.measuredRequests/i.requests*100),`%`]})]})]})},G=new Set(r?.hiddenProviders??[]);return(0,w.jsxs)(`main`,{className:`tray-page`,children:[(0,w.jsxs)(`header`,{children:[(0,w.jsx)(`strong`,{children:`OpenCodex`}),(0,w.jsx)(`a`,{href:`/?desktop=open#/usage`,"aria-label":e(`sub.settings`),title:e(`sub.settings`),children:`⚙`})]}),u&&(0,w.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.companion.settingsUnavailable`),` `,(0,w.jsx)(`button`,{onClick:H,children:e(`common.retry`)})]}),!r&&!u&&(0,w.jsx)(`p`,{role:`status`,children:e(`common.loading`)}),r&&(0,w.jsxs)(`section`,{className:`tray-totals`,children:[r.showToday&&(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`h2`,{children:[e(`tray.today`),T(g[0])&&(0,w.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),W(g[0]?.summary)]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`h2`,{children:[e(`usage.range.30d`),T(g[1])&&(0,w.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),W(g[1]?.summary)]})]}),E&&(0,w.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.loadError`),` `,(0,w.jsx)(`button`,{onClick:H,children:e(`common.retry`)})]}),r?.showChart&&(0,w.jsx)(`section`,{className:`tray-chart`,children:(0,w.jsx)(l,{timeline:M,chartStyle:r.chartStyle,hours:r.chartHours,loading:!M&&!P,error:P?e(`usage.companion.timelineUnavailable`):null,onRetry:H,locale:n,t:e})}),r?.showModels&&!!g[0]?.models.length&&(0,w.jsx)(`section`,{className:`tray-models`,"aria-label":e(`usage.section.models`),children:g[0].models.map(t=>(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{title:`${t.provider}/${t.model}`,children:t.model}),(0,w.jsxs)(`span`,{className:`tray-model-metrics`,children:[(0,w.jsx)(`span`,{title:e(`usage.card.requests`),children:e(`pws.dashboard.requests`,{count:U(t.requests)})}),(0,w.jsx)(`span`,{title:e(`usage.card.totalTokens`),children:U(x(t).totalTokens)})]})]},`${t.provider}/${t.model}`))}),(r?.showAccounts??!0)&&(0,w.jsxs)(`section`,{className:`tray-providers`,"aria-label":e(`usage.section.providers`),children:[A&&(0,w.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`startup.tray.unavailable`),` `,(0,w.jsx)(`button`,{onClick:H,children:e(`common.retry`)})]}),O.filter(e=>!G.has(e.name)).map(t=>(0,w.jsxs)(`div`,{className:`tray-provider`,children:[(0,w.jsx)(`h2`,{children:c(t.name,e)}),!t.accounts.length&&(0,w.jsx)(`div`,{className:`tray-missing`,children:e(t.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),t.accounts.map(t=>(0,w.jsxs)(`div`,{className:`tray-account`,children:[(0,w.jsxs)(`div`,{className:`tray-account-name`,title:t.label,children:[t.label,(0,w.jsxs)(`span`,{className:`tray-account-meta`,children:[t.plan,t.active&&(0,w.jsx)(`span`,{title:e(`prov.activeBadge`),"aria-label":e(`prov.activeBadge`),children:` ●`})]})]}),t.email&&t.email!==t.label&&(0,w.jsx)(`div`,{className:`tray-account-email`,children:t.email}),!y(t.quota).length&&(0,w.jsx)(`div`,{className:`tray-missing`,children:e(t.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),y(t.quota).map(t=>{let r=`key`in t?e(t.key):t.label,i=v(t.reset,n),a=f(t.percent)?Math.min(100,t.percent):null;return(0,w.jsxs)(`div`,{className:`tray-quota`,children:[(0,w.jsx)(`span`,{title:r,children:r}),(0,w.jsx)(`span`,{children:a===null?`—`:`${Math.round(a)}%`}),(0,w.jsx)(`span`,{className:`tray-bar`,role:a===null?`img`:`meter`,"aria-label":a===null?`${r}: ${e(`pws.dashboard.noQuota`)}`:r,"aria-valuemin":a===null?void 0:0,"aria-valuemax":a===null?void 0:100,"aria-valuenow":a??void 0,"aria-valuetext":a===null?void 0:`${Math.round(a)}%`,children:(0,w.jsx)(`i`,{style:{width:a===null?`0%`:`${a}%`}})}),(0,w.jsx)(`time`,{title:i.exact,children:i.text})]},t.id)})]},t.id))]},t.name))]}),(0,w.jsxs)(`div`,{className:`tray-refresh`,children:[(0,w.jsx)(`button`,{type:`button`,onClick:H,disabled:R,children:e(`startup.refresh`)}),(0,w.jsx)(`span`,{role:`status`,children:e(`tray.updated`,{time:I===null?`—`:new Date(I).toLocaleTimeString(n,{hour:`2-digit`,minute:`2-digit`})})})]}),(0,w.jsx)(`footer`,{children:(0,w.jsxs)(`a`,{href:`/?desktop=open#/usage`,children:[e(`nav.dashboard`),` `,(0,w.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})]})})]})}export{E as default};
|