@bitkyc08/opencodex 2.82.0 → 2.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/gui/dist/assets/App-CZtqiGcw.js +56 -0
  2. package/gui/dist/assets/Tray-C9TGtwad.js +1 -0
  3. package/gui/dist/assets/{index-BAbcj51J.css → index-BB6uK6tU.css} +1 -1
  4. package/gui/dist/assets/index-CTm4l-HQ.js +94 -0
  5. package/gui/dist/assets/{quota-summary-DTBC8n7-.js → quota-summary-BbEeRfPY.js} +1 -1
  6. package/gui/dist/index.html +2 -2
  7. package/package.json +2 -2
  8. package/src/adapters/coding-agent/protocol.ts +15 -8
  9. package/src/adapters/cursor/catalog.ts +2 -2
  10. package/src/adapters/cursor/effort-map.ts +1 -1
  11. package/src/adapters/devin/live-models.ts +2 -2
  12. package/src/adapters/google-truncation.ts +22 -0
  13. package/src/adapters/google.ts +7 -3
  14. package/src/adapters/ollama-native.ts +47 -15
  15. package/src/adapters/openai-chat/messages.ts +8 -4
  16. package/src/adapters/openai-responses/empty-assistant.ts +32 -0
  17. package/src/adapters/openai-responses/passthrough.ts +5 -0
  18. package/src/adapters/openai-responses/plaintext-reasoning-notice.ts +85 -0
  19. package/src/adapters/openai-responses/reasoning.ts +11 -1
  20. package/src/adapters/openai-responses/request-strips.ts +10 -2
  21. package/src/adapters/qoder/adapter.ts +16 -14
  22. package/src/bridge/errors.ts +26 -1
  23. package/src/bridge.ts +1 -1
  24. package/src/claude/context-windows.ts +57 -4
  25. package/src/claude/desktop-picker.ts +1 -1
  26. package/src/claude/intercept/connect-proxy.ts +10 -3
  27. package/src/claude/intercept/picker-ca-persistence.ts +3 -1
  28. package/src/claude/intercept/picker-listener.ts +49 -1
  29. package/src/claude/intercept/settings-no-proxy.ts +146 -0
  30. package/src/claude/intercept/settings.ts +101 -9
  31. package/src/cli/account-api.ts +65 -0
  32. package/src/cli/account-auth.ts +44 -12
  33. package/src/cli/account.ts +41 -5
  34. package/src/cli/capabilities-access-remote.ts +8 -0
  35. package/src/cli/capabilities-base.ts +13 -1
  36. package/src/cli/catalog-command-result.ts +2 -1
  37. package/src/cli/claude.ts +15 -6
  38. package/src/cli/config-command.ts +8 -2
  39. package/src/cli/debug.ts +8 -0
  40. package/src/cli/dispatch.ts +16 -3
  41. package/src/cli/export-command.ts +14 -1
  42. package/src/cli/hub-disable.ts +99 -0
  43. package/src/cli/hub.ts +4 -2
  44. package/src/cli/index.ts +13 -4
  45. package/src/cli/link-child.ts +104 -0
  46. package/src/cli/link-enrollment.ts +96 -0
  47. package/src/cli/link.ts +39 -24
  48. package/src/cli/observe-stream.ts +6 -1
  49. package/src/cli/observe.ts +10 -2
  50. package/src/cli/provider.ts +12 -0
  51. package/src/cli/registry.ts +5 -4
  52. package/src/cli/resolve.ts +1 -1
  53. package/src/cli/runtime-api.ts +27 -2
  54. package/src/cli/status.ts +104 -20
  55. package/src/client/connect.ts +39 -4
  56. package/src/client/hub-client.ts +14 -7
  57. package/src/client/hub-state.ts +25 -14
  58. package/src/client/link-home.ts +248 -0
  59. package/src/client/link-management-relay.ts +61 -0
  60. package/src/client/link-relay.ts +6 -1
  61. package/src/client/link-status.ts +14 -0
  62. package/src/client/machine-api.ts +14 -7
  63. package/src/client/machine-listener.ts +29 -4
  64. package/src/clients/config-export/model-metadata.ts +16 -0
  65. package/src/clients/config-export/zcode-store.ts +46 -11
  66. package/src/clients/config-export/zcode.ts +3 -5
  67. package/src/clients/config-export.ts +47 -17
  68. package/src/clients/omo-role-models.ts +6 -3
  69. package/src/codex/agent-role-models.ts +26 -8
  70. package/src/codex/auth-api/account-list.ts +17 -2
  71. package/src/codex/auth-api/account-selection.ts +17 -7
  72. package/src/codex/auth-api/pool-mode-gate.ts +4 -5
  73. package/src/codex/auth-api/routes.ts +5 -1
  74. package/src/codex/auth-context.ts +8 -3
  75. package/src/codex/autostart-health.ts +3 -1
  76. package/src/codex/catalog/bundled.ts +5 -1
  77. package/src/codex/catalog/effort.ts +2 -2
  78. package/src/codex/catalog/metadata.ts +4 -2
  79. package/src/codex/catalog/native-models.ts +17 -3
  80. package/src/codex/catalog/provider-models.ts +25 -0
  81. package/src/codex/desktop-app/darwin.ts +1 -1
  82. package/src/codex/desktop-app/handoff.ts +1 -1
  83. package/src/codex/desktop-app/linux.ts +1 -1
  84. package/src/codex/desktop-app/lock.ts +1 -1
  85. package/src/codex/desktop-app/types.ts +1 -1
  86. package/src/codex/desktop-app/windows.ts +1 -1
  87. package/src/codex/desktop-app-restart.ts +1 -1
  88. package/src/codex/main-account.ts +6 -7
  89. package/src/codex/native-profile-startup.ts +4 -1
  90. package/src/codex/prompt-journal.ts +20 -2
  91. package/src/codex/prompt-layers/encoding.ts +49 -0
  92. package/src/codex/prompt-layers/import-source.ts +30 -0
  93. package/src/codex/prompt-layers/toml-edit.ts +269 -37
  94. package/src/codex/prompt-layers/toml-read.ts +52 -4
  95. package/src/codex/prompt-layers.ts +383 -20
  96. package/src/codex/prompt-lock-claim.ts +13 -3
  97. package/src/codex/prompt-lock-evidence.ts +3 -3
  98. package/src/codex/prompt-lock-owner.ts +14 -6
  99. package/src/codex/prompt-text-probe.ts +34 -5
  100. package/src/codex/quota.ts +13 -6
  101. package/src/codex/role-auto-assign.ts +2 -5
  102. package/src/codex/routing/active-account.ts +21 -0
  103. package/src/codex/routing.ts +1 -1
  104. package/src/codex/runtime.ts +196 -8
  105. package/src/codex/shim-overlay.ts +8 -4
  106. package/src/codex/shim.ts +1 -1
  107. package/src/combos/failover.ts +3 -0
  108. package/src/config/api-key-reconcile.ts +34 -0
  109. package/src/config/diagnostics.ts +16 -0
  110. package/src/config/feature-flags.ts +5 -0
  111. package/src/config/live-reconcile.ts +43 -29
  112. package/src/config/live-topology.ts +29 -0
  113. package/src/config/load-degrade.ts +2 -1
  114. package/src/config/paths.ts +3 -0
  115. package/src/config/salvage.ts +3 -1
  116. package/src/config/schema/config-schema.ts +2 -0
  117. package/src/generated/compatibility-version.json +373 -217
  118. package/src/grok/grpc-web.ts +23 -1
  119. package/src/grok/inject.ts +245 -221
  120. package/src/grok/reset-coupon-ledger.ts +293 -57
  121. package/src/grok/reset-coupons.ts +15 -6
  122. package/src/integrations/cursor-detect.ts +1 -1
  123. package/src/integrations/mutation-plan.ts +13 -7
  124. package/src/integrations/registry.ts +45 -11
  125. package/src/integrations/state.ts +19 -7
  126. package/src/integrations/target.ts +42 -5
  127. package/src/integrations/writer.ts +14 -6
  128. package/src/lib/app-owned-memory-stores.ts +4 -0
  129. package/src/lib/app-owned-memory.ts +11 -0
  130. package/src/lib/errors.ts +25 -0
  131. package/src/lib/json-byte-size.ts +31 -0
  132. package/src/lib/optional-shutdown-hooks.ts +35 -0
  133. package/src/lib/outbound-credential-registry.ts +210 -0
  134. package/src/lib/passive-read.ts +35 -0
  135. package/src/lib/redact.ts +2 -2
  136. package/src/lib/shadow-call.ts +44 -5
  137. package/src/link/codex-settings.ts +155 -0
  138. package/src/link/management-routes.ts +89 -0
  139. package/src/link/remote-probe.ts +38 -0
  140. package/src/link/ssh-argv.ts +26 -5
  141. package/src/link/ssh-runner.ts +58 -27
  142. package/src/link/status-projection.ts +22 -4
  143. package/src/link/supervisor.ts +144 -49
  144. package/src/link/tunnel-state.ts +11 -4
  145. package/src/oauth/anthropic-continuity.ts +4 -3
  146. package/src/oauth/anthropic-identity.ts +13 -2
  147. package/src/oauth/anthropic-model-quota.ts +13 -1
  148. package/src/oauth/anthropic-routing.ts +230 -23
  149. package/src/oauth/anthropic.ts +18 -4
  150. package/src/oauth/google-antigravity.ts +24 -7
  151. package/src/oauth/index.ts +25 -16
  152. package/src/oauth/kiro-account-identity.ts +106 -0
  153. package/src/oauth/kiro.ts +48 -5
  154. package/src/oauth/meta-muse-device.ts +1 -1
  155. package/src/oauth/plan.ts +29 -0
  156. package/src/oauth/store.ts +40 -3
  157. package/src/oauth/types.ts +3 -1
  158. package/src/plugins/loader.ts +11 -0
  159. package/src/providers/anthropic-billing-ownership.ts +74 -0
  160. package/src/providers/anthropic-billing-recovery.ts +31 -0
  161. package/src/providers/anthropic-billing-refusal.ts +55 -0
  162. package/src/providers/anthropic-fast.ts +1 -1
  163. package/src/providers/anthropic-reset-admission.ts +62 -0
  164. package/src/providers/anthropic-reset-grant-ledger.ts +29 -7
  165. package/src/providers/api-key-resolve.ts +17 -2
  166. package/src/providers/devin-cli-authmode-migration.ts +1 -1
  167. package/src/providers/devin-provider-merge-migration.ts +1 -1
  168. package/src/providers/github-copilot-auto.ts +169 -0
  169. package/src/providers/key-failover.ts +52 -5
  170. package/src/providers/model-presets.ts +1 -1
  171. package/src/providers/model-rename-startup.ts +5 -3
  172. package/src/providers/muse-subscription-usage.ts +1 -1
  173. package/src/providers/quota/account-cache.ts +11 -0
  174. package/src/providers/quota/anthropic-account-quota.ts +4 -2
  175. package/src/providers/quota/report-cache.ts +14 -0
  176. package/src/providers/quota/vendor-probes-oauth.ts +3 -3
  177. package/src/providers/quota.ts +4 -1
  178. package/src/providers/registry/entries-core.ts +20 -20
  179. package/src/providers/registry/entries-extended.ts +4 -1
  180. package/src/providers/registry/model-seeds.ts +20 -3
  181. package/src/providers/request-pacing.ts +9 -0
  182. package/src/providers/stale-no-vision-seed-migration.ts +72 -0
  183. package/src/providers/xai-fast-model.ts +1 -1
  184. package/src/responses/compaction.ts +14 -0
  185. package/src/responses/parser.ts +7 -1
  186. package/src/server/auth-cors.ts +42 -0
  187. package/src/server/configured-credentials.ts +194 -0
  188. package/src/server/inbound-body-admission.ts +24 -7
  189. package/src/server/index/link-listener.ts +30 -17
  190. package/src/server/index/link-management.ts +58 -0
  191. package/src/server/index/optional-listeners.ts +5 -1
  192. package/src/server/index/serve-options.ts +21 -2
  193. package/src/server/index.ts +1 -1
  194. package/src/server/lifecycle.ts +33 -5
  195. package/src/server/management/agent-settings-routes.ts +28 -10
  196. package/src/server/management/anthropic-reset-grant-routes.ts +17 -1
  197. package/src/server/management/codex-agent-role-routes.ts +19 -6
  198. package/src/server/management/codex-prompt-routes.ts +136 -5
  199. package/src/server/management/codex-role-auto-assign.ts +1 -1
  200. package/src/server/management/grok-coupon-routes.ts +333 -57
  201. package/src/server/management/link-enrollment.ts +192 -0
  202. package/src/server/management/link-route-state.ts +185 -0
  203. package/src/server/management/link-routes.ts +92 -390
  204. package/src/server/management/model-rows.ts +3 -1
  205. package/src/server/management/provider-overwrite-carry.ts +10 -0
  206. package/src/server/management/provider-routes.ts +1 -0
  207. package/src/server/management/route-registry.ts +7 -5
  208. package/src/server/management/shared.ts +3 -0
  209. package/src/server/management-api.ts +3 -1
  210. package/src/server/messages-native.ts +68 -42
  211. package/src/server/relay-eager.ts +4 -0
  212. package/src/server/relay.ts +18 -7
  213. package/src/server/request-log-failure-attribution.ts +3 -0
  214. package/src/server/request-log-filter.ts +6 -1
  215. package/src/server/request-log-terminal-status.ts +243 -0
  216. package/src/server/request-log.ts +15 -118
  217. package/src/server/responses/adapter-continuation.ts +9 -1
  218. package/src/server/responses/adapter-dispatch.ts +293 -81
  219. package/src/server/responses/code-mode-collab-surface.ts +205 -0
  220. package/src/server/responses/codex-ws-exchange.ts +147 -6
  221. package/src/server/responses/codex-ws-wire.ts +203 -0
  222. package/src/server/responses/collaboration.ts +36 -7
  223. package/src/server/responses/compact.ts +129 -50
  224. package/src/server/responses/context-overflow.ts +13 -1
  225. package/src/server/responses/core-codex-account.ts +105 -1
  226. package/src/server/responses/core-combo-failure.ts +14 -0
  227. package/src/server/responses/core-combo.ts +7 -2
  228. package/src/server/responses/core-errors.ts +29 -1
  229. package/src/server/responses/core-opaque-recovery.ts +5 -5
  230. package/src/server/responses/core-options.ts +2 -0
  231. package/src/server/responses/core.ts +6 -6
  232. package/src/server/responses/deferred-collab-surface.ts +158 -0
  233. package/src/server/responses/deferred-send-reporter.ts +25 -0
  234. package/src/server/responses/empty-completion-guard.ts +18 -2
  235. package/src/server/responses/fetch-helpers.ts +12 -1
  236. package/src/server/responses/jev-model-invoke.ts +1 -1
  237. package/src/server/responses/passthrough-delivery.ts +4 -1
  238. package/src/server/responses/passthrough-dispatch.ts +130 -64
  239. package/src/server/responses/passthrough-execution.ts +3 -3
  240. package/src/server/responses/request-prepare.ts +6 -4
  241. package/src/server/responses/request-transport.ts +131 -13
  242. package/src/server/responses/run-turn-execution.ts +13 -5
  243. package/src/server/responses/sidecar-execution.ts +16 -2
  244. package/src/server/responses/spend-storage-error.ts +33 -0
  245. package/src/server/responses/ws-upstream.ts +9 -1
  246. package/src/server/startup-action-control.ts +22 -2
  247. package/src/server/startup-health-cache.ts +4 -0
  248. package/src/server/system-env-shell.ts +7 -2
  249. package/src/server/system-env.ts +11 -1
  250. package/src/service/cli.ts +5 -1
  251. package/src/service/desktop-startup.ts +147 -34
  252. package/src/service/desktop-supervision.d.mts +27 -1
  253. package/src/service/desktop-supervision.mjs +111 -5
  254. package/src/service/health-sentinel-launch.ts +176 -0
  255. package/src/service/health-sentinel-main.ts +447 -0
  256. package/src/service/health-sentinel-policy.ts +241 -0
  257. package/src/service/health-sentinel-probe.ts +54 -0
  258. package/src/service/health-sentinel-windows.ts +87 -0
  259. package/src/service/linux-linger.ts +20 -0
  260. package/src/types/config.ts +5 -0
  261. package/src/types/request.ts +5 -0
  262. package/src/usage/expected-prices.ts +5 -1
  263. package/src/usage/log.ts +19 -1
  264. package/gui/dist/assets/App-Ds_qL7o8.js +0 -54
  265. package/gui/dist/assets/Tray-BqHF5Trd.js +0 -1
  266. package/gui/dist/assets/index-D3FBCNiP.js +0 -94
@@ -1 +0,0 @@
1
- import{O as e,k as t,n,v as r,x as i}from"./index-D3FBCNiP.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-DTBC8n7-.js";var b=t(e(),1),x=n(),S=2e4,C=e=>e?.usageIncomplete||e?.historyTruncated||e?.entriesTruncated;function w(){let{t:e,locale:t}=i(),[n,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,n,i)=>{K(`${t}:${i}`),J(null);let a=r(S);try{let e=f(t,n,i),r=await fetch(e.path,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e.body),signal:a.signal});if(!r.ok)throw Error(String(r.status));X.current=!0,Y()}catch{K(null),J(e(n===`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):`—`,$=r=>{let i=r?l(r):void 0,a=i?.cacheReadInputTokens??i?.cachedInputTokens,o=_(a)&&_(i?.inputTokens)&&i.inputTokens>0?`${Math.round(a/i.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(i?.totalTokens)})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.input`)}),(0,x.jsxs)(`dd`,{children:[Q(i?.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(i?.outputTokens)})]}),n?.showCost&&(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{title:e(`logs.metric.estimatedCostTitle`),children:e(`tray.cost`)}),(0,x.jsx)(`dd`,{title:_(i?.requests)&&_(i?.pricedRequests)&&i.pricedRequests<i.requests?e(`usage.cost.unpricedNote`,{count:i.requests-i.pricedRequests}):e(`logs.metric.estimatedCostTitle`),children:_(i?.estimatedCostUsd)?new Intl.NumberFormat(t,{style:`currency`,currency:`USD`,maximumFractionDigits:2}).format(i.estimatedCostUsd)+(_(i.pricedRequests)&&_(i.requests)&&i.pricedRequests<i.requests?`*`:``):`—`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.requests`)}),(0,x.jsx)(`dd`,{children:Q(i?.requests)})]}),_(i?.requests)&&i.requests>0&&_(i.measuredRequests)&&i.measuredRequests<i.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(i.measuredRequests/i.requests*100),`%`]})]})]})},ne=new Set(n?.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`)})]}),!n&&!T&&(0,x.jsx)(`p`,{role:`status`,children:e(`common.loading`)}),n&&(0,x.jsxs)(`section`,{className:`tray-totals`,children:[n.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`)})]}),n?.showChart&&(0,x.jsx)(`section`,{className:`tray-chart`,children:(0,x.jsx)(m,{timeline:F,chartStyle:n.chartStyle,hours:n.chartHours,loading:!F&&!L,error:L?e(`usage.companion.timelineUnavailable`):null,onRetry:Y,locale:t,t:e})}),n?.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}`))}),(n?.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};