@bitkyc08/opencodex 2.75.0 → 2.76.0-preview.20261003
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/README.md +6 -1
- package/bin/ocx.mjs +12 -1
- package/gui/dist/assets/App-DMudtISW.css +1 -0
- package/gui/dist/assets/App-_kC0QNPq.js +51 -0
- package/gui/dist/assets/{Tray-CGAD2AGk.js → Tray-Bd20Bo4i.js} +1 -1
- package/gui/dist/assets/index-Btze1I3T.css +1 -0
- package/gui/dist/assets/index-DJUwv61Z.js +86 -0
- package/gui/dist/assets/quota-summary-DEdllqVy.js +1 -0
- package/gui/dist/index.html +2 -2
- package/gui/dist/provider-icons/opengateway.svg +12 -0
- package/package.json +1 -1
- package/src/adapters/anthropic/account-metadata.ts +17 -0
- package/src/adapters/anthropic/client-identity.ts +69 -0
- package/src/adapters/anthropic/passthrough.ts +23 -4
- package/src/adapters/anthropic.ts +18 -1
- package/src/adapters/command-code-project-context.ts +7 -11
- package/src/adapters/devin/cloud-direct/tool-schema.ts +12 -48
- package/src/adapters/kiro-retry.ts +23 -8
- package/src/adapters/openai-chat/messages.ts +1 -1
- package/src/adapters/registry.ts +8 -1
- package/src/adapters/zed.ts +377 -0
- package/src/bridge/sse.ts +4 -2
- package/src/chatgpt/app-server-shim/app-server-rewrite.ts +45 -0
- package/src/chatgpt/app-server-shim/bundle-trust.ts +77 -0
- package/src/chatgpt/app-server-shim/filter.ts +157 -0
- package/src/chatgpt/app-server-shim/gate-rewrite.ts +99 -0
- package/src/chatgpt/app-server-shim/launcher.ts +91 -0
- package/src/claude/desktop-3p-startup.ts +62 -0
- package/src/claude/desktop-3p.ts +5 -0
- package/src/claude/first-party-settings.ts +14 -0
- package/src/claude/intercept/cli-catalog.ts +150 -0
- package/src/claude/intercept/cli-picker.ts +82 -0
- package/src/claude/intercept/listener.ts +21 -6
- package/src/claude/intercept/picker-bootstrap.ts +23 -5
- package/src/claude/intercept/picker-models.ts +57 -13
- package/src/claude/intercept/runtime.ts +30 -2
- package/src/claude/intercept/settings.ts +3 -0
- package/src/cli/agent.ts +172 -0
- package/src/cli/alias.ts +2 -1
- package/src/cli/capabilities-command.ts +3 -2
- package/src/cli/capabilities.ts +87 -0
- package/src/cli/chatgpt-command.ts +140 -0
- package/src/cli/combo.ts +144 -19
- package/src/cli/config-command.ts +3 -1
- package/src/cli/dispatch.ts +10 -1
- package/src/cli/help.ts +1 -0
- package/src/cli/index.ts +5 -24
- package/src/cli/init.ts +16 -2
- package/src/cli/integrations.ts +13 -0
- package/src/cli/internal-command.ts +12 -5
- package/src/cli/observe.ts +6 -1
- package/src/cli/registry.ts +6 -0
- package/src/cli/route-policy.ts +3 -1
- package/src/cli/runtime-api.ts +5 -2
- package/src/cli/status-oauth.ts +5 -0
- package/src/cli/status.ts +8 -1
- package/src/cli/stop-approval.ts +55 -16
- package/src/cli/stop-report.ts +5 -0
- package/src/clients/lazycodex.ts +48 -0
- package/src/clients/omo-role-models.ts +111 -0
- package/src/codex/account-credit-use.ts +99 -0
- package/src/codex/account-lifecycle.ts +2 -0
- package/src/codex/agent-role-models.ts +171 -0
- package/src/codex/auth-api/account-list.ts +10 -3
- package/src/codex/auth-api/routes.ts +34 -0
- package/src/codex/auth-context.ts +52 -11
- package/src/codex/catalog/discovered-natives.ts +11 -1
- package/src/codex/catalog/gather-capture.ts +6 -1
- package/src/codex/catalog/model-hints.ts +9 -1
- package/src/codex/catalog/provider-models.ts +60 -0
- package/src/codex/catalog/routed-gather.ts +30 -5
- package/src/codex/convergence-types.ts +2 -1
- package/src/codex/main-account-external-usage.ts +62 -0
- package/src/codex/main-account-hard-lock.ts +24 -13
- package/src/codex/native-profile-processes.ts +53 -16
- package/src/codex/prompt-layers/toml-edit.ts +1 -1
- package/src/codex/quota-types.ts +3 -7
- package/src/codex/quota.ts +19 -4
- package/src/codex/role-auto-assign.ts +159 -0
- package/src/codex/role-sizing-limits.ts +2 -0
- package/src/codex/role-sizing.ts +216 -0
- package/src/codex/routing/selection.ts +36 -0
- package/src/codex/routing/thread-affinity.ts +2 -0
- package/src/codex/routing.ts +4 -4
- package/src/codex/subagent-model-fallback.ts +82 -26
- package/src/codex/subagent-selectable-models.ts +32 -0
- package/src/combos/index.ts +18 -0
- package/src/combos/jev-decision-contract.ts +20 -0
- package/src/combos/jev-dispatch.ts +18 -0
- package/src/combos/jev-model-backend.ts +127 -0
- package/src/combos/jev.ts +249 -33
- package/src/combos/types.ts +125 -2
- package/src/config/diagnostics.ts +18 -0
- package/src/config/macos-system-proxy.ts +72 -15
- package/src/config/owner-registry.ts +13 -4
- package/src/config/process-state.ts +17 -8
- package/src/config/proxy-env.ts +35 -5
- package/src/config/schema/config-schema.ts +30 -1
- package/src/config/schema/leaf-validators.ts +4 -0
- package/src/config/serving-runtimes.ts +95 -1
- package/src/generated/compatibility-version.json +336 -156
- package/src/lib/errors.ts +7 -7
- package/src/lib/jsonc.ts +13 -0
- package/src/lib/local-chat-completion.ts +144 -0
- package/src/lib/provider-outbound.ts +87 -1
- package/src/lib/provider-runtime-fetch.ts +23 -0
- package/src/lib/provider-tls-profile.ts +221 -0
- package/src/lib/request-execution-budget.ts +16 -6
- package/src/lib/spend-reservation-ledger.ts +54 -20
- package/src/lib/sse-decoder.ts +20 -17
- package/src/lib/synced-state-location.ts +96 -0
- package/src/lib/winsw.ts +14 -5
- package/src/oauth/anthropic-account-refusal.ts +53 -4
- package/src/oauth/anthropic-model-quota.ts +83 -0
- package/src/oauth/anthropic-rate-limit-policy.ts +37 -0
- package/src/oauth/anthropic-routing.ts +112 -58
- package/src/oauth/health.ts +39 -3
- package/src/oauth/index.ts +14 -0
- package/src/oauth/kiro-account-load.ts +10 -0
- package/src/oauth/zed.ts +134 -0
- package/src/providers/model-discovery.ts +19 -8
- package/src/providers/model-rename-fields.ts +1 -0
- package/src/providers/provider-id-rewrite.ts +9 -2
- package/src/providers/quota/account-cache.ts +29 -7
- package/src/providers/quota/anthropic-cooldown-recovery.ts +18 -0
- package/src/providers/quota/anthropic-family-headers.ts +25 -0
- package/src/providers/quota/vendor-probes-oauth.ts +5 -1
- package/src/providers/quota-types.ts +4 -0
- package/src/providers/registry/entries-core.ts +18 -0
- package/src/providers/registry/entries-extended.ts +55 -0
- package/src/providers/registry/types.ts +3 -0
- package/src/providers/xai-fast-model.ts +12 -4
- package/src/providers/zed.ts +598 -0
- package/src/responses/state/snapshot-select.ts +22 -9
- package/src/responses/state.ts +2 -3
- package/src/router.ts +9 -0
- package/src/server/anthropic-rate-limit-headers.ts +7 -0
- package/src/server/auth-cors.ts +7 -0
- package/src/server/chat-completions.ts +9 -4
- package/src/server/claude-messages.ts +59 -21
- package/src/server/index/claude-intercept-lifecycle.ts +71 -25
- package/src/server/index/optional-listeners.ts +4 -0
- package/src/server/index/spend-ledger-lifecycle.ts +4 -0
- package/src/server/management/agent-settings-routes.ts +74 -37
- package/src/server/management/claude-desktop-picker-routes.ts +7 -0
- package/src/server/management/claude-intercept-routes.ts +35 -0
- package/src/server/management/codex-agent-role-routes.ts +122 -0
- package/src/server/management/codex-role-auto-assign.ts +208 -0
- package/src/server/management/combo-routes.ts +62 -5
- package/src/server/management/config-routes.ts +35 -3
- package/src/server/management/context.ts +4 -1
- package/src/server/management/decision-discovery.ts +74 -0
- package/src/server/management/decision-model-validation.ts +80 -0
- package/src/server/management/decision-routes.ts +160 -0
- package/src/server/management/native-integration-routes.ts +16 -0
- package/src/server/management/provider-routes.ts +30 -34
- package/src/server/management/route-registry.ts +12 -0
- package/src/server/management/sibling-guard.ts +1 -0
- package/src/server/management/zed-provider-probe.ts +38 -0
- package/src/server/management-api.ts +12 -1
- package/src/server/messages-native-oauth.ts +7 -2
- package/src/server/messages-native.ts +7 -3
- package/src/server/relay.ts +3 -1
- package/src/server/request-log.ts +2 -0
- package/src/server/responses/adapter-continuation.ts +3 -3
- package/src/server/responses/adapter-dispatch.ts +18 -3
- package/src/server/responses/compact.ts +14 -1
- package/src/server/responses/core-auth.ts +2 -0
- package/src/server/responses/core-combo.ts +67 -11
- package/src/server/responses/core-normalize.ts +21 -1
- package/src/server/responses/core-options.ts +11 -1
- package/src/server/responses/core.ts +5 -3
- package/src/server/responses/fetch-helpers.ts +6 -3
- package/src/server/responses/jev-model-invoke.ts +190 -0
- package/src/server/responses/passthrough-delivery.ts +16 -0
- package/src/server/responses/policy-fallback.ts +55 -3
- package/src/server/responses/policy-request-scope.ts +80 -0
- package/src/server/responses/request-prepare.ts +70 -18
- package/src/server/responses/request-transport.ts +54 -23
- package/src/server/responses/run-turn-execution.ts +1 -0
- package/src/server/responses/sidecar-execution.ts +9 -3
- package/src/server/responses-hosted-image-display.ts +225 -0
- package/src/service/managing-cli.ts +34 -4
- package/src/service/systemd-env.ts +75 -0
- package/src/service/windows-guarded-manager.ts +60 -19
- package/src/service/windows-scheduler.ts +22 -3
- package/src/service/windows-taskxml.ts +32 -10
- package/src/service-manager-probe.ts +72 -19
- package/src/types/config.ts +31 -1
- package/src/types/provider.ts +2 -0
- package/src/types/request.ts +2 -0
- package/src/update/index.ts +39 -6
- package/src/update/job.ts +63 -63
- package/src/update/npm-cache-preflight.d.mts +33 -1
- package/src/update/npm-cache-preflight.mjs +131 -18
- package/src/update/ownership-transaction.ts +19 -1
- package/src/update/restart-ownership.ts +80 -6
- package/src/update/transactional-install.d.mts +2 -0
- package/src/update/transactional-install.mjs +6 -1
- package/src/usage/jev-stats.ts +28 -1
- package/src/usage/log.ts +1 -1
- package/src/vision/anthropic-describe.ts +5 -3
- package/src/vision/index.ts +1 -0
- package/src/vision/plan.ts +2 -1
- package/src/vision/routed-describe.ts +29 -121
- package/src/web-search/alpha-search.ts +3 -3
- package/src/web-search/anthropic-executor.ts +6 -4
- package/src/web-search/index.ts +1 -1
- package/src/web-search/loop.ts +3 -3
- package/src/web-search/passthrough-bridge.ts +2 -1
- package/src/web-search/run-turn-loop.ts +1 -1
- package/src/web-search/sidecar-providers.ts +2 -1
- package/gui/dist/assets/App-ia4U0ufY.css +0 -1
- package/gui/dist/assets/App-xm0zGNOe.js +0 -51
- package/gui/dist/assets/index-DBT3Q31Y.css +0 -1
- package/gui/dist/assets/index-D_RGAT6Q.js +0 -86
- package/gui/dist/assets/quota-summary-CUFq48t-.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{D as e,O as t,_ as n,b as r,n as i}from"./index-D_RGAT6Q.js";import{J as a,T as o,X as s,_ as c,a as ee,c as l,d as u,f as d,i as f,l as p,m,o as h,p as g,r as te,s as _,u as v,v as y}from"./quota-summary-CUFq48t-.js";var b=t(e(),1),x=i(),S=2e4,C=e=>e?.usageIncomplete||e?.historyTruncated||e?.entriesTruncated;function w(){let{t:e,locale:t}=r(),[i,w]=(0,b.useState)(null),[T,E]=(0,b.useState)(!1),[D,O]=(0,b.useState)([null,null]),[k,A]=(0,b.useState)(!1),[j,M]=(0,b.useState)([]),[N,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(null),[L,R]=(0,b.useState)(!1),[z,B]=(0,b.useState)(null),[V,H]=(0,b.useState)(!1),[U,W]=(0,b.useState)(0),[G,K]=(0,b.useState)(null),[q,J]=(0,b.useState)(null),Y=()=>W(e=>e+1),X=(0,b.useRef)(!1),Z=async(t,r,i)=>{K(`${t}:${i}`),J(null);let a=n(S);try{let e=f(t,r,i),n=await fetch(e.path,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e.body),signal:a.signal});if(!n.ok)throw Error(String(n.status));X.current=!0,Y()}catch{K(null),J(e(r===`codex`?`codexAuth.switchFailed`:`prov.accountSwitchFail`))}finally{a.clear()}};(0,b.useEffect)(()=>{document.documentElement.classList.add(`tray-document`);let e=null,t=!1,n=!0,r=!1,i=()=>!document.hidden&&(window.__OPENCODEX_TRAY_VISIBLE__??n),a=async()=>{if(!i()||t)return;t=!0,H(!0);let n=!1,o=new AbortController;e=o;let s=e=>ee(e,o.signal),l=()=>!r&&!o.signal.aborted;try{let e=(async()=>{try{let e=u(await s(`/api/config`)),t=await Promise.all(e.map(async e=>{if(!e.path)return{name:e.name,switchKind:e.switchKind,accounts:[]};try{let t=await s(e.path);if(e.name===`openai`)try{t.activeCodexAccountId=(await s(`/api/codex-auth/active`)).activeCodexAccountId??`__main__`}catch{}return{name:e.name,switchKind:e.switchKind,accounts:p(t)}}catch{return{name:e.name,switchKind:e.switchKind,accounts:[],unavailable:!0}}}));l()&&(M(t),P(!1),n=!0)}catch{l()&&(M([]),P(!0))}})(),t=(async()=>{let e;try{if(e=(await s(`/api/companion/settings`)).settings,!e||!Array.isArray(e.hiddenProviders)||!(e.models===null||Array.isArray(e.models)))throw Error(`Invalid settings`);l()&&(w(e),E(!1))}catch{l()&&E(!0);return}let t=Promise.allSettled([`/api/usage?range=today`,`/api/usage?range=30d`].map(async t=>{let n=v(await s(t));return h(n,e)})).then(e=>{l()&&(n||=e.some(e=>e.status===`fulfilled`),O(e.map(e=>e.status===`fulfilled`?e.value:null)),A(e.some(e=>e.status===`rejected`)))}),r=(async()=>{if(!e.showChart)return;let t=y(e);try{let n=await s(`/api/usage/timeline?${t}`);l()&&(I(c(n,e)),R(!1))}catch{l()&&(I(null),R(!0))}})();await Promise.allSettled([t,r])})();await Promise.allSettled([e,t])}finally{t=!1,l()&&(H(!1),n&&B(Date.now()),X.current&&(X.current=!1,K(null))),!r&&o.signal.aborted&&i()&&a()}},o=()=>{i()?a():e?.abort()},s=()=>{n=!1,o()},l=()=>{n=!0,o()},d=e=>{let t=e.detail;typeof t==`boolean`&&(window.__OPENCODEX_TRAY_VISIBLE__=t),o()};a();let f=setInterval(()=>void a(),6e4);return document.addEventListener(`visibilitychange`,o),window.addEventListener(`blur`,s),window.addEventListener(`focus`,l),window.addEventListener(`opencodex:tray-visibility`,d),()=>{r=!0,e?.abort(),clearInterval(f),document.documentElement.classList.remove(`tray-document`),document.removeEventListener(`visibilitychange`,o),window.removeEventListener(`blur`,s),window.removeEventListener(`focus`,l),window.removeEventListener(`opencodex:tray-visibility`,d)}},[U]);let Q=e=>_(e)?a(e,t):`—`,$=n=>{let r=n?l(n):void 0,a=r?.cacheReadInputTokens??r?.cachedInputTokens,o=_(a)&&_(r?.inputTokens)&&r.inputTokens>0?`${Math.round(a/r.inputTokens*100)}%`:`—`;return(0,x.jsxs)(`dl`,{children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.totalTokens`)}),(0,x.jsx)(`dd`,{children:Q(r?.totalTokens)})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.input`)}),(0,x.jsxs)(`dd`,{children:[Q(r?.inputTokens),` `,(0,x.jsx)(`small`,{title:e(`usage.card.cachedTokens`),children:e(`tray.cached`,{percent:o})})]})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.output`)}),(0,x.jsx)(`dd`,{children:Q(r?.outputTokens)})]}),i?.showCost&&(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{title:e(`logs.metric.estimatedCostTitle`),children:e(`tray.cost`)}),(0,x.jsx)(`dd`,{title:_(r?.requests)&&_(r?.pricedRequests)&&r.pricedRequests<r.requests?e(`usage.cost.unpricedNote`,{count:r.requests-r.pricedRequests}):e(`logs.metric.estimatedCostTitle`),children:_(r?.estimatedCostUsd)?new Intl.NumberFormat(t,{style:`currency`,currency:`USD`,maximumFractionDigits:2}).format(r.estimatedCostUsd)+(_(r.pricedRequests)&&_(r.requests)&&r.pricedRequests<r.requests?`*`:``):`—`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.requests`)}),(0,x.jsx)(`dd`,{children:Q(r?.requests)})]}),_(r?.requests)&&r.requests>0&&_(r.measuredRequests)&&r.measuredRequests<r.requests&&(0,x.jsxs)(`div`,{className:`tray-coverage`,title:e(`usage.coverage.note`),children:[(0,x.jsx)(`dt`,{children:e(`usage.card.coverage`)}),(0,x.jsxs)(`dd`,{children:[Math.round(r.measuredRequests/r.requests*100),`%`]})]})]})},ne=new Set(i?.hiddenProviders??[]);return(0,x.jsxs)(`main`,{className:`tray-page`,children:[(0,x.jsxs)(`header`,{children:[(0,x.jsx)(`strong`,{children:`OpenCodex`}),(0,x.jsx)(`a`,{href:`/?desktop=open#/usage`,"aria-label":e(`sub.settings`),title:e(`sub.settings`),children:`⚙`})]}),T&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.companion.settingsUnavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),!i&&!T&&(0,x.jsx)(`p`,{role:`status`,children:e(`common.loading`)}),i&&(0,x.jsxs)(`section`,{className:`tray-totals`,children:[i.showToday&&(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`tray.today`),C(D[0])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[0]?.summary)]}),(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`usage.range.30d`),C(D[1])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[1]?.summary)]})]}),k&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.loadError`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),i?.showChart&&(0,x.jsx)(`section`,{className:`tray-chart`,children:(0,x.jsx)(m,{timeline:F,chartStyle:i.chartStyle,hours:i.chartHours,loading:!F&&!L,error:L?e(`usage.companion.timelineUnavailable`):null,onRetry:Y,locale:t,t:e})}),i?.showModels&&!!D[0]?.models.length&&(0,x.jsx)(`section`,{className:`tray-models`,"aria-label":e(`usage.section.models`),children:D[0].models.map(t=>(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`span`,{title:`${t.provider}/${t.model}`,children:t.model}),(0,x.jsxs)(`span`,{className:`tray-model-metrics`,children:[(0,x.jsx)(`span`,{title:e(`usage.card.requests`),children:e(`pws.dashboard.requests`,{count:Q(t.requests)})}),(0,x.jsx)(`span`,{title:e(`usage.card.totalTokens`),children:Q(l(t).totalTokens)})]})]},`${t.provider}/${t.model}`))}),(i?.showAccounts??!0)&&(0,x.jsxs)(`section`,{className:`tray-providers`,"aria-label":e(`usage.section.providers`),children:[N&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`startup.tray.unavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),q&&(0,x.jsx)(`p`,{role:`alert`,className:`tray-error`,children:q}),j.filter(e=>!ne.has(e.name)).map(n=>(0,x.jsxs)(`div`,{className:`tray-provider`,children:[(0,x.jsxs)(`h2`,{children:[(0,x.jsx)(o,{name:n.name,cls:`provider-icon tray-provider-icon`}),s(n.name,e)]}),!n.accounts.length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(n.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),n.accounts.map(r=>{let i=n.switchKind,a=G===`${n.name}:${r.id}`;return(0,x.jsxs)(`div`,{className:`tray-account`,children:[(0,x.jsxs)(`div`,{className:`tray-account-name`,children:[(0,x.jsxs)(`span`,{className:`tray-account-label`,title:r.label,children:[r.label,r.exhausted&&(0,x.jsx)(`span`,{className:`tray-exhausted`,title:e(`quota.limitReached`),"aria-label":e(`quota.limitReached`),children:` ⚠`})]}),(0,x.jsxs)(`span`,{className:`tray-account-meta`,children:[a&&(0,x.jsx)(`span`,{role:`status`,children:e(`pws.accountSwitching`)}),!a&&i&&r.switchState===`available`&&(0,x.jsx)(`button`,{type:`button`,className:`tray-use`,disabled:G!==null,onClick:()=>void Z(n.name,i,r.id),title:e(`prov.accountSwitchTitle`),"aria-label":`${e(`prov.accountSwitchTitle`)}: ${r.label}`,children:e(`prov.accountSwitchTitle`)}),r.plan,r.active&&(0,x.jsx)(`span`,{className:`tray-active`,title:e(`prov.activeBadge`),"aria-label":e(`prov.activeBadge`),children:` ✓`})]})]}),r.email&&r.email!==r.label&&(0,x.jsx)(`div`,{className:`tray-account-email`,children:r.email}),!d(r.quota).length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(r.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),d(r.quota).map(n=>{let r=`key`in n?e(n.key):n.label,i=g(n.reset,t),a=_(n.percent)?Math.min(100,n.percent):null;return(0,x.jsxs)(`div`,{className:`tray-quota`,children:[(0,x.jsx)(`span`,{title:r,children:r}),(0,x.jsx)(`span`,{children:a===null?`—`:`${Math.round(a)}%`}),(0,x.jsx)(`span`,{className:`tray-bar tray-bar--${te(a??void 0)}`,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,x.jsx)(`i`,{style:{width:a===null?`0%`:`${a}%`}})}),(0,x.jsx)(`time`,{title:i.exact,children:i.text})]},n.id)})]},r.id)})]},n.name))]}),(0,x.jsxs)(`div`,{className:`tray-refresh`,children:[(0,x.jsx)(`button`,{type:`button`,onClick:Y,disabled:V,children:e(`startup.refresh`)}),(0,x.jsx)(`span`,{role:`status`,children:e(`tray.updated`,{time:z===null?`—`:new Date(z).toLocaleTimeString(t,{hour:`2-digit`,minute:`2-digit`})})})]}),(0,x.jsx)(`footer`,{children:(0,x.jsxs)(`a`,{href:`/?desktop=open#/usage`,children:[e(`nav.dashboard`),` `,(0,x.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})]})})]})}export{w as default};
|
|
1
|
+
import{D as e,O as t,_ as n,b as r,n as i}from"./index-DJUwv61Z.js";import{J as a,T as o,X as s,_ as c,a as ee,c as l,d as u,f as d,i as f,l as p,m,o as h,p as g,r as te,s as _,u as v,v as y}from"./quota-summary-DEdllqVy.js";var b=t(e(),1),x=i(),S=2e4,C=e=>e?.usageIncomplete||e?.historyTruncated||e?.entriesTruncated;function w(){let{t:e,locale:t}=r(),[i,w]=(0,b.useState)(null),[T,E]=(0,b.useState)(!1),[D,O]=(0,b.useState)([null,null]),[k,A]=(0,b.useState)(!1),[j,M]=(0,b.useState)([]),[N,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(null),[L,R]=(0,b.useState)(!1),[z,B]=(0,b.useState)(null),[V,H]=(0,b.useState)(!1),[U,W]=(0,b.useState)(0),[G,K]=(0,b.useState)(null),[q,J]=(0,b.useState)(null),Y=()=>W(e=>e+1),X=(0,b.useRef)(!1),Z=async(t,r,i)=>{K(`${t}:${i}`),J(null);let a=n(S);try{let e=f(t,r,i),n=await fetch(e.path,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e.body),signal:a.signal});if(!n.ok)throw Error(String(n.status));X.current=!0,Y()}catch{K(null),J(e(r===`codex`?`codexAuth.switchFailed`:`prov.accountSwitchFail`))}finally{a.clear()}};(0,b.useEffect)(()=>{document.documentElement.classList.add(`tray-document`);let e=null,t=!1,n=!0,r=!1,i=()=>!document.hidden&&(window.__OPENCODEX_TRAY_VISIBLE__??n),a=async()=>{if(!i()||t)return;t=!0,H(!0);let n=!1,o=new AbortController;e=o;let s=e=>ee(e,o.signal),l=()=>!r&&!o.signal.aborted;try{let e=(async()=>{try{let e=u(await s(`/api/config`)),t=await Promise.all(e.map(async e=>{if(!e.path)return{name:e.name,switchKind:e.switchKind,accounts:[]};try{let t=await s(e.path);if(e.name===`openai`)try{t.activeCodexAccountId=(await s(`/api/codex-auth/active`)).activeCodexAccountId??`__main__`}catch{}return{name:e.name,switchKind:e.switchKind,accounts:p(t)}}catch{return{name:e.name,switchKind:e.switchKind,accounts:[],unavailable:!0}}}));l()&&(M(t),P(!1),n=!0)}catch{l()&&(M([]),P(!0))}})(),t=(async()=>{let e;try{if(e=(await s(`/api/companion/settings`)).settings,!e||!Array.isArray(e.hiddenProviders)||!(e.models===null||Array.isArray(e.models)))throw Error(`Invalid settings`);l()&&(w(e),E(!1))}catch{l()&&E(!0);return}let t=Promise.allSettled([`/api/usage?range=today`,`/api/usage?range=30d`].map(async t=>{let n=v(await s(t));return h(n,e)})).then(e=>{l()&&(n||=e.some(e=>e.status===`fulfilled`),O(e.map(e=>e.status===`fulfilled`?e.value:null)),A(e.some(e=>e.status===`rejected`)))}),r=(async()=>{if(!e.showChart)return;let t=y(e);try{let n=await s(`/api/usage/timeline?${t}`);l()&&(I(c(n,e)),R(!1))}catch{l()&&(I(null),R(!0))}})();await Promise.allSettled([t,r])})();await Promise.allSettled([e,t])}finally{t=!1,l()&&(H(!1),n&&B(Date.now()),X.current&&(X.current=!1,K(null))),!r&&o.signal.aborted&&i()&&a()}},o=()=>{i()?a():e?.abort()},s=()=>{n=!1,o()},l=()=>{n=!0,o()},d=e=>{let t=e.detail;typeof t==`boolean`&&(window.__OPENCODEX_TRAY_VISIBLE__=t),o()};a();let f=setInterval(()=>void a(),6e4);return document.addEventListener(`visibilitychange`,o),window.addEventListener(`blur`,s),window.addEventListener(`focus`,l),window.addEventListener(`opencodex:tray-visibility`,d),()=>{r=!0,e?.abort(),clearInterval(f),document.documentElement.classList.remove(`tray-document`),document.removeEventListener(`visibilitychange`,o),window.removeEventListener(`blur`,s),window.removeEventListener(`focus`,l),window.removeEventListener(`opencodex:tray-visibility`,d)}},[U]);let Q=e=>_(e)?a(e,t):`—`,$=n=>{let r=n?l(n):void 0,a=r?.cacheReadInputTokens??r?.cachedInputTokens,o=_(a)&&_(r?.inputTokens)&&r.inputTokens>0?`${Math.round(a/r.inputTokens*100)}%`:`—`;return(0,x.jsxs)(`dl`,{children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.totalTokens`)}),(0,x.jsx)(`dd`,{children:Q(r?.totalTokens)})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.input`)}),(0,x.jsxs)(`dd`,{children:[Q(r?.inputTokens),` `,(0,x.jsx)(`small`,{title:e(`usage.card.cachedTokens`),children:e(`tray.cached`,{percent:o})})]})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.output`)}),(0,x.jsx)(`dd`,{children:Q(r?.outputTokens)})]}),i?.showCost&&(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{title:e(`logs.metric.estimatedCostTitle`),children:e(`tray.cost`)}),(0,x.jsx)(`dd`,{title:_(r?.requests)&&_(r?.pricedRequests)&&r.pricedRequests<r.requests?e(`usage.cost.unpricedNote`,{count:r.requests-r.pricedRequests}):e(`logs.metric.estimatedCostTitle`),children:_(r?.estimatedCostUsd)?new Intl.NumberFormat(t,{style:`currency`,currency:`USD`,maximumFractionDigits:2}).format(r.estimatedCostUsd)+(_(r.pricedRequests)&&_(r.requests)&&r.pricedRequests<r.requests?`*`:``):`—`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.requests`)}),(0,x.jsx)(`dd`,{children:Q(r?.requests)})]}),_(r?.requests)&&r.requests>0&&_(r.measuredRequests)&&r.measuredRequests<r.requests&&(0,x.jsxs)(`div`,{className:`tray-coverage`,title:e(`usage.coverage.note`),children:[(0,x.jsx)(`dt`,{children:e(`usage.card.coverage`)}),(0,x.jsxs)(`dd`,{children:[Math.round(r.measuredRequests/r.requests*100),`%`]})]})]})},ne=new Set(i?.hiddenProviders??[]);return(0,x.jsxs)(`main`,{className:`tray-page`,children:[(0,x.jsxs)(`header`,{children:[(0,x.jsx)(`strong`,{children:`OpenCodex`}),(0,x.jsx)(`a`,{href:`/?desktop=open#/usage`,"aria-label":e(`sub.settings`),title:e(`sub.settings`),children:`⚙`})]}),T&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.companion.settingsUnavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),!i&&!T&&(0,x.jsx)(`p`,{role:`status`,children:e(`common.loading`)}),i&&(0,x.jsxs)(`section`,{className:`tray-totals`,children:[i.showToday&&(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`tray.today`),C(D[0])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[0]?.summary)]}),(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`usage.range.30d`),C(D[1])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[1]?.summary)]})]}),k&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.loadError`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),i?.showChart&&(0,x.jsx)(`section`,{className:`tray-chart`,children:(0,x.jsx)(m,{timeline:F,chartStyle:i.chartStyle,hours:i.chartHours,loading:!F&&!L,error:L?e(`usage.companion.timelineUnavailable`):null,onRetry:Y,locale:t,t:e})}),i?.showModels&&!!D[0]?.models.length&&(0,x.jsx)(`section`,{className:`tray-models`,"aria-label":e(`usage.section.models`),children:D[0].models.map(t=>(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`span`,{title:`${t.provider}/${t.model}`,children:t.model}),(0,x.jsxs)(`span`,{className:`tray-model-metrics`,children:[(0,x.jsx)(`span`,{title:e(`usage.card.requests`),children:e(`pws.dashboard.requests`,{count:Q(t.requests)})}),(0,x.jsx)(`span`,{title:e(`usage.card.totalTokens`),children:Q(l(t).totalTokens)})]})]},`${t.provider}/${t.model}`))}),(i?.showAccounts??!0)&&(0,x.jsxs)(`section`,{className:`tray-providers`,"aria-label":e(`usage.section.providers`),children:[N&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`startup.tray.unavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),q&&(0,x.jsx)(`p`,{role:`alert`,className:`tray-error`,children:q}),j.filter(e=>!ne.has(e.name)).map(n=>(0,x.jsxs)(`div`,{className:`tray-provider`,children:[(0,x.jsxs)(`h2`,{children:[(0,x.jsx)(o,{name:n.name,cls:`provider-icon tray-provider-icon`}),s(n.name,e)]}),!n.accounts.length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(n.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),n.accounts.map(r=>{let i=n.switchKind,a=G===`${n.name}:${r.id}`;return(0,x.jsxs)(`div`,{className:`tray-account`,children:[(0,x.jsxs)(`div`,{className:`tray-account-name`,children:[(0,x.jsxs)(`span`,{className:`tray-account-label`,title:r.label,children:[r.label,r.exhausted&&(0,x.jsx)(`span`,{className:`tray-exhausted`,title:e(`quota.limitReached`),"aria-label":e(`quota.limitReached`),children:` ⚠`})]}),(0,x.jsxs)(`span`,{className:`tray-account-meta`,children:[a&&(0,x.jsx)(`span`,{role:`status`,children:e(`pws.accountSwitching`)}),!a&&i&&r.switchState===`available`&&(0,x.jsx)(`button`,{type:`button`,className:`tray-use`,disabled:G!==null,onClick:()=>void Z(n.name,i,r.id),title:e(`prov.accountSwitchTitle`),"aria-label":`${e(`prov.accountSwitchTitle`)}: ${r.label}`,children:e(`prov.accountSwitchTitle`)}),r.plan,r.active&&(0,x.jsx)(`span`,{className:`tray-active`,title:e(`prov.activeBadge`),"aria-label":e(`prov.activeBadge`),children:` ✓`})]})]}),r.email&&r.email!==r.label&&(0,x.jsx)(`div`,{className:`tray-account-email`,children:r.email}),!d(r.quota).length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(r.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),d(r.quota).map(n=>{let r=`key`in n?e(n.key):n.label,i=g(n.reset,t),a=_(n.percent)?Math.min(100,n.percent):null;return(0,x.jsxs)(`div`,{className:`tray-quota`,children:[(0,x.jsx)(`span`,{title:r,children:r}),(0,x.jsx)(`span`,{children:a===null?`—`:`${Math.round(a)}%`}),(0,x.jsx)(`span`,{className:`tray-bar tray-bar--${te(a??void 0)}`,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,x.jsx)(`i`,{style:{width:a===null?`0%`:`${a}%`}})}),(0,x.jsx)(`time`,{title:i.exact,children:i.text})]},n.id)})]},r.id)})]},n.name))]}),(0,x.jsxs)(`div`,{className:`tray-refresh`,children:[(0,x.jsx)(`button`,{type:`button`,onClick:Y,disabled:V,children:e(`startup.refresh`)}),(0,x.jsx)(`span`,{role:`status`,children:e(`tray.updated`,{time:z===null?`—`:new Date(z).toLocaleTimeString(t,{hour:`2-digit`,minute:`2-digit`})})})]}),(0,x.jsx)(`footer`,{children:(0,x.jsxs)(`a`,{href:`/?desktop=open#/usage`,children:[e(`nav.dashboard`),` `,(0,x.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})]})})]})}export{w as default};
|