@yansigit/opencodex 2.36.1 → 2.36.2-dev.20260829.53
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 +9 -4
- package/gui/dist/assets/{ApiKeys-CsmNyf4I.js → ApiKeys-BhwqQvO8.js} +1 -1
- package/gui/dist/assets/{Claude-B4sHsGTD.js → Claude-DYNY8SHC.js} +1 -1
- package/gui/dist/assets/{CodexSet-BuAQ4YQn.js → CodexSet-tSN1aWmM.js} +1 -1
- package/gui/dist/assets/{FileIntegrationPage-BC65sEaS.js → FileIntegrationPage-B68tn2JT.js} +1 -1
- package/gui/dist/assets/{Grok-DNJWlISf.js → Grok-Dr6FN8SD.js} +1 -1
- package/gui/dist/assets/{Integrations-vGJshFZK.js → Integrations-jvqYofMm.js} +2 -2
- package/gui/dist/assets/{IntegrationsOverview-DYMkDFHE.js → IntegrationsOverview-Bjc7JSgw.js} +1 -1
- package/gui/dist/assets/{Logs-Coc7_RPP.js → Logs-C23CdgmP.js} +1 -1
- package/gui/dist/assets/{Models-CKVT8Meb.js → Models-Ci4wK3HO.js} +1 -1
- package/gui/dist/assets/{NumberStepper-Dug4wR8n.js → NumberStepper-nggECFok.js} +1 -1
- package/gui/dist/assets/Providers-DasIL4ng.js +1 -0
- package/gui/dist/assets/{RestoreDialog-BpuvVU2w.js → RestoreDialog-CW7LbS-w.js} +1 -1
- package/gui/dist/assets/{Startup-DAUQqNEN.js → Startup-Cx3dZre0.js} +1 -1
- package/gui/dist/assets/{Storage-DfP95SlJ.js → Storage-D0iUYQED.js} +1 -1
- package/gui/dist/assets/{Subagents-CMNsZLfk.js → Subagents-phLFffyl.js} +1 -1
- package/gui/dist/assets/{Usage-ESFRfBMO.js → Usage-NvYxG04o.js} +1 -1
- package/gui/dist/assets/{codex-stale-banner-W4FhikN7.js → codex-stale-banner-B5VQPO3t.js} +1 -1
- package/gui/dist/assets/{data-surface-B8PX8rjm.js → data-surface-B0APtUxm.js} +1 -1
- package/gui/dist/assets/{data-surface-CETFXqiA.js → data-surface-OiQUZok8.js} +1 -1
- package/gui/dist/assets/index-C8flH881.css +1 -0
- package/gui/dist/assets/{index-DHQHBRhb.js → index-CZ1jyQCF.js} +3 -3
- package/gui/dist/assets/{model-display-OBTJhQwT.js → model-display-Dlrzica2.js} +1 -1
- package/gui/dist/assets/{provider-payload-CJRJUn7w.js → provider-payload-Ca3Ff8oP.js} +1 -1
- package/gui/dist/assets/{section-tabs-B8sLMiz6.js → section-tabs-Bpm5lFcZ.js} +1 -1
- package/gui/dist/assets/shared-BHpPx-nZ.js +69 -0
- package/gui/dist/index.html +3 -3
- package/package.json +2 -1
- package/src/adapters/base.ts +2 -0
- package/src/adapters/command-code.ts +2 -1
- package/src/adapters/google-http.ts +34 -14
- package/src/adapters/google.ts +4 -1
- package/src/cli/dispatch.ts +2 -2
- package/src/cli/help.ts +2 -2
- package/src/cli/index.ts +9 -1
- package/src/cli/init.ts +52 -3
- package/src/cli/registry.ts +2 -2
- package/src/codex/account-lifecycle.ts +4 -8
- package/src/codex/inject.ts +14 -9
- package/src/config/process-state.ts +15 -0
- package/src/config.ts +17 -0
- package/src/generated/compatibility-version.json +67 -47
- package/src/lib/bun-stream-caps.ts +2 -1
- package/src/lib/pinned-http.ts +7 -1
- package/src/lib/process-control.ts +3 -2
- package/src/lib/provider-outbound.ts +77 -27
- package/src/lib/provider-runtime-fetch.ts +23 -0
- package/src/lib/provider-tls-profile.ts +97 -11
- package/src/lib/server-tls.ts +47 -0
- package/src/lib/test-provider-fetch.ts +6 -0
- package/src/lib/test-server-start.ts +5 -0
- package/src/lib/upstream-retry.ts +39 -25
- package/src/oauth/anthropic.ts +4 -3
- package/src/oauth/chatgpt.ts +7 -3
- package/src/oauth/command-code.ts +3 -2
- package/src/oauth/cursor.ts +3 -2
- package/src/oauth/github-copilot.ts +7 -5
- package/src/oauth/google-antigravity.ts +5 -4
- package/src/oauth/key-providers.ts +11 -13
- package/src/oauth/kimi.ts +7 -6
- package/src/oauth/kiro.ts +3 -2
- package/src/oauth/nous.ts +5 -5
- package/src/oauth/transport.ts +77 -0
- package/src/oauth/xai.ts +5 -4
- package/src/providers/replit/probe.ts +8 -3
- package/src/providers/xai-transport.ts +16 -2
- package/src/server/auth-cors.ts +15 -1
- package/src/server/chat-native.ts +9 -3
- package/src/server/index.ts +63 -23
- package/src/server/management/config-routes.ts +117 -15
- package/src/server/management/context.ts +4 -0
- package/src/server/management/provider-routes.ts +1 -0
- package/src/server/responses/compact.ts +5 -2
- package/src/server/responses/core.ts +16 -19
- package/src/server/responses/fetch-helpers.ts +15 -7
- package/src/server/ws-bridge.ts +33 -4
- package/src/service.ts +10 -1
- package/src/types/config.ts +9 -0
- package/src/types/provider.ts +2 -0
- package/src/types.ts +1 -0
- package/gui/dist/assets/Providers-DyaCHRWL.js +0 -1
- package/gui/dist/assets/index-pLho_LBF.css +0 -1
- package/gui/dist/assets/shared-DI18-uF7.js +0 -69
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e}from"./shared-
|
|
1
|
+
import{m as e}from"./shared-BHpPx-nZ.js";import{G as t,W as n}from"./index-CZ1jyQCF.js";function r(e,t,n,r,i=1){let a=e.trim(),o=a===``?NaN:Number(a),s=Math.min(r,Math.max(n,(Number.isFinite(o)?o:n)+t));return String(i<1?Math.round(s*10)/10:Math.round(s))}var i=e();function a({disabled:e=!1,onIncrement:r,onDecrement:a,incrementLabel:o,decrementLabel:s}){return(0,i.jsxs)(`div`,{className:`ocx-stepper`,role:`group`,children:[(0,i.jsx)(`button`,{type:`button`,className:`ocx-stepper__btn`,disabled:e,"aria-label":o,onMouseDown:e=>e.preventDefault(),onClick:r,children:(0,i.jsx)(t,{width:10,height:10,"aria-hidden":`true`})}),(0,i.jsx)(`button`,{type:`button`,className:`ocx-stepper__btn`,disabled:e,"aria-label":s,onMouseDown:e=>e.preventDefault(),onClick:a,children:(0,i.jsx)(n,{width:10,height:10,"aria-hidden":`true`})})]})}export{r as n,a as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as e,c as t,h as n,m as r,s as i}from"./shared-BHpPx-nZ.js";import{C as a,E as o,F as s,J as c,L as l,M as u,N as d,Q as f,R as p,U as m,X as h,Y as g,Z as _,_ as v,ft as y,h as b,it as x,lt as S,mt as C,nt as w,p as T,q as E,u as D,v as O,vt as k,w as A,xt as j,yt as M}from"./index-CZ1jyQCF.js";import{C as N,D as P,E as F,O as I,S as L,T as R,_ as z,a as B,b as V,c as H,d as U,g as ee,h as W,i as G,l as K,m as te,n as ne,o as re,p as ie,r as q,s as J,t as ae,u as Y,v as X,w as oe,x as se,y as ce}from"./provider-payload-Ca3Ff8oP.js";import{a as le,c as ue,i as de,l as fe,n as pe,o as me,r as he,s as ge,t as _e,u as ve}from"./catalog-CerhMn14.js";var Z=e(n(),1);function ye(e){return e.googleMode===`ai-studio-web`?!1:e.authMode===`local`||de(e.baseUrl)}var be=[`ollama`,`vllm`,`lm-studio`,`lmstudio`,`litellm`,`localai`];function xe(e){let t=(e.authMode??``).toLowerCase();if(t===`oauth`||t===`forward`)return`login`;if(ye(e))return`local`;let n=`${e.name??``} ${e.adapter} ${e.baseUrl}`.toLowerCase();return be.some(e=>n.includes(e))?`selfHosted`:`cloud`}function Se(e){if(!e||typeof e!=`object`)return{};let t=e.available;if(!t||typeof t!=`object`||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t))Array.isArray(r)&&(n[e]=r.filter(e=>typeof e==`string`));return n}function Ce(e){if(!e||typeof e!=`object`)return{};let t=e.liveModelCounts;if(!t||typeof t!=`object`||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t))typeof r!=`number`||!Number.isFinite(r)||r<0||(n[e]=Math.floor(r));return n}function we(e){if(!e||typeof e!=`object`)return{};let t=e.selected;if(!t||typeof t!=`object`||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t))Array.isArray(r)&&(n[e]=r.filter(e=>typeof e==`string`));return n}function Te(e){let t={};for(let[n,r]of Object.entries(Se(e)))t[n]=r.length;return t}function Ee(e){return Object.entries(e).filter(e=>typeof e[1].requests==`number`&&e[1].requests>0).map(([e,t])=>({name:e,...t,requests:t.requests})).sort((e,t)=>t.requests-e.requests||e.name.localeCompare(t.name))}var De={justNow:`Just now`,notChecked:`Not checked`,minutesAgo:e=>`${e}m ago`,hoursAgo:e=>`${e}h ago`,daysAgo:e=>`${e}d ago`};function Oe(e,t,n){let r=typeof t==`object`&&t?t:De,i=typeof t==`number`?t:n??Date.now();if(e===void 0||!Number.isFinite(e))return r.notChecked;let a=Math.max(0,i-e),o=Math.floor(a/6e4);if(o<1)return r.justNow;if(o<60)return r.minutesAgo(o);let s=Math.floor(o/60);return s<24?r.hoursAgo(s):r.daysAgo(Math.floor(s/24))}function ke(e){return{justNow:e(`time.justNow`),notChecked:e(`time.notChecked`),minutesAgo:t=>e(`time.minutesAgo`,{n:t}),hoursAgo:t=>e(`time.hoursAgo`,{n:t}),daysAgo:t=>e(`time.daysAgo`,{n:t})}}function Ae(e,t){let n=[];for(let r of e.ready)r.activeNeedsReauth&&n.push({name:r.name,reason:t[r.name]??`Active account needs re-authentication`});for(let r of e.needsSetup){let e=r.activeNeedsReauth?t[r.name]??`Active account needs re-authentication`:t[r.name]??`Missing credentials`;n.push({name:r.name,reason:e})}for(let r of e.disabled){let e=t[r.name];e&&n.push({name:r.name,reason:e})}return n}function je(e){return e===`Active account needs re-authentication`?`reauth`:e===`Missing credentials`?`missing`:`custom`}function Me(e,t=`en`){if(e===void 0)return`—`;if(t.toLowerCase().slice(0,2)===`de`){let t=e=>e.replace(/\.0+$/,``).replace(`.`,`,`);return e>=1e9?`${t((e/1e9).toFixed(2))} Mrd.`:e>=1e6?`${t((e/1e6).toFixed(1))} Mio.`:e>=1e3?`${t((e/1e3).toFixed(1))} Tsd.`:String(e)}return e>=1e9?`${(e/1e9).toFixed(2).replace(/\.?0+$/,``)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function Ne(e,t=`en`){return Me(e,t)}function Pe(e,t=`en`){return e==null||!Number.isFinite(e)||e<0?`—`:`~$${new Intl.NumberFormat(t,{minimumFractionDigits:4,maximumFractionDigits:4}).format(e)}`}var Q=r();function Fe(e,t){let n=pe(e);return n===`disabled`?t(`prov.disabledBadge`):n===`ready`?t(`pws.status.ready`):`activeNeedsReauth`in e&&e.activeNeedsReauth?t(`pws.status.needsAttention`):t(`pws.status.needsSetup`)}function Ie(e,t){if(e.googleMode===`ai-studio-web`||e.name===`google-aistudio`)return t(`modal.badge.local`);switch(e.authMode){case`oauth`:return t(`modal.badge.oauth`);case`forward`:return t(`pws.auth.chatgptPassthrough`);case`local`:return t(`modal.badge.local`);case`key`:return t(`modal.badge.apiKey`);default:return e.authMode??(e.keyOptional?t(`pws.auth.noKey`):t(`modal.badge.apiKey`))}}function Le(e){let t=pe(e);return t===`disabled`?`providers-workspace-rail-status providers-workspace-rail-status--inactive`:t===`ready`?`providers-workspace-rail-status providers-workspace-rail-status--active`:`providers-workspace-rail-status providers-workspace-rail-status--warning`}function Re({name:e,adapter:n,baseUrl:r,cls:i}){let s=t(),c=o(e,{adapter:n,baseUrl:r});return(0,Q.jsx)(`span`,{className:i,children:c?(0,Q.jsx)(`img`,{src:c,alt:``,"aria-hidden":`true`}):(0,Q.jsx)(ze,{name:e,label:a(e,s)})})}function ze({name:e,label:t}){let n=[...e].reduce((e,t)=>e+t.charCodeAt(0),0)%360,r=(t.trim()[0]??e[0]??`?`).toUpperCase();return(0,Q.jsx)(`span`,{className:`provider-icon-fallback`,style:{background:`hsl(${n} 55% 90%)`,color:`hsl(${n} 65% 32%)`},"aria-hidden":`true`,children:r})}function Be({item:e,selected:n,tabbable:r,modelCount:i,isDefault:o,showConfigId:s,onClick:c,onFocus:l}){let u=t(),d=ge(e),f=ye(e),p=Fe(e,u),m=a(e.name,u),h=s?`${m} (${e.name})`:m,g=`${o?u(`pws.rail.suffixDefault`):``}${f?u(`pws.rail.suffixLocal`):d?u(`pws.rail.suffixFree`):``}`,_=i!==void 0&&i>0?i===1?u(`pws.modelCountOne`):u(`pws.modelCount`,{count:i}):``,v=[s?e.name:``,_].filter(Boolean).join(` · `);return(0,Q.jsxs)(`button`,{type:`button`,className:`providers-workspace-rail-row${n?` providers-workspace-rail-row--selected`:``}`,onClick:c,role:`option`,"aria-selected":n,tabIndex:r?0:-1,"aria-label":u(`pws.rail.selectAria`,{name:h,status:p,suffix:g}),title:h,onFocus:l,children:[(0,Q.jsx)(Re,{name:e.name,adapter:e.adapter,baseUrl:e.baseUrl,cls:`providers-workspace-rail-icon`}),(0,Q.jsxs)(`span`,{className:`providers-workspace-rail-copy`,children:[(0,Q.jsxs)(`span`,{className:`providers-workspace-rail-primary`,children:[(0,Q.jsx)(`span`,{className:`providers-workspace-rail-name-label`,title:m,children:m}),f?(0,Q.jsx)(`span`,{className:`pwi-rail-badge pwi-rail-badge--local`,title:u(`pws.localTitle`),children:u(`modal.badge.local`)}):d?(0,Q.jsx)(`span`,{className:`pwi-rail-badge pwi-rail-badge--free`,title:u(`pws.freeTitle`),children:u(`modal.badge.free`)}):null]}),(0,Q.jsx)(`span`,{className:`providers-workspace-rail-secondary`,title:v||void 0,children:v||`\xA0`})]}),(0,Q.jsxs)(`span`,{className:`providers-workspace-rail-trail`,children:[o&&(0,Q.jsx)(`span`,{className:`pwi-default-star`,title:u(`prov.defaultBadge`),"aria-label":u(`prov.defaultBadge`),children:(0,Q.jsx)(C,{width:17,height:17,"aria-hidden":`true`})}),(0,Q.jsx)(`span`,{className:Le(e),title:p,"aria-hidden":`true`})]})]})}var $=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0;function Ve(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e,r=Array.isArray(n.customWindows)?n.customWindows.flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;return typeof t.label!=`string`||$(t.percent)===void 0?[]:[{label:t.label,percent:t.percent,...$(t.resetAt)===void 0?{}:{resetAt:t.resetAt}}]}):[],i=n.creditsUsd&&typeof n.creditsUsd==`object`&&!Array.isArray(n.creditsUsd)?n.creditsUsd:null,a=$(i?.used),o=$(i?.limit),s=$(i?.remaining),c=$(i?.percent),l=$(i?.expiresAt),u=a!==void 0&&o!==void 0&&s!==void 0&&c!==void 0?{used:a,limit:o,remaining:s,percent:c,...l===void 0?{}:{expiresAt:l},...typeof i?.unlimited==`boolean`?{unlimited:i.unlimited}:{}}:void 0,d=$(n.fiveHourPercent)??$(n.shortPercent),f=$(n.fiveHourResetAt)??$(n.shortResetAt),p={...d===void 0?{}:{fiveHourPercent:d},...f===void 0?{}:{fiveHourResetAt:f},...$(n.shortPercent)===void 0?{}:{shortPercent:n.shortPercent},...$(n.shortResetAt)===void 0?{}:{shortResetAt:n.shortResetAt},...$(n.shortWindowSeconds)===void 0?{}:{shortWindowSeconds:n.shortWindowSeconds},...$(n.weeklyPercent)===void 0?{}:{weeklyPercent:n.weeklyPercent},...$(n.weeklyResetAt)===void 0?{}:{weeklyResetAt:n.weeklyResetAt},...$(n.monthlyPercent)===void 0?{}:{monthlyPercent:n.monthlyPercent},...$(n.monthlyResetAt)===void 0?{}:{monthlyResetAt:n.monthlyResetAt},...r.length>0?{customWindows:r}:{},...u?{creditsUsd:u}:{},updatedAt:$(n.updatedAt)??t??Date.now()};return p.fiveHourPercent!==void 0||p.weeklyPercent!==void 0||p.monthlyPercent!==void 0||(p.customWindows?.length??0)>0||p.creditsUsd!==void 0?p:null}function He(e){return Ve(e?.quota,e?.updatedAt)}function Ue(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=$(t.usedPercent);if(n!==void 0)return{usedPercent:n,...typeof t.incomplete==`boolean`?{incomplete:t.incomplete}:{},...$(t.includedAccounts)===void 0?{}:{includedAccounts:t.includedAccounts},...$(t.excludedAccounts)===void 0?{}:{excludedAccounts:t.excludedAccounts},...$(t.nextRecoveryAt)===void 0?{}:{nextRecoveryAt:t.nextRecoveryAt},...$(t.nextRecoveryPercent)===void 0?{}:{nextRecoveryPercent:t.nextRecoveryPercent}}}function We(e){let t=e?.aggregation;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;if(n.kind!==`capacity-weighted-v1`||n.scope!==`routable-known`)return null;let r=$(n.excludedAccounts),i=$(n.unknownPlanAccounts),a=$(n.includedAccounts)??0;if(r===void 0||i===void 0||typeof n.incomplete!=`boolean`)return null;let o=n.currentAccount&&typeof n.currentAccount==`object`&&!Array.isArray(n.currentAccount)?n.currentAccount:null,s=Array.isArray(n.customWindows)?n.customWindows.flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e,n=Ue(t);return typeof t.label==`string`&&n?[{label:t.label,...n}]:[]}):[],c=Ue(n.fiveHour),l=Ue(n.weekly),u=Ue(n.monthly),d=!!c||!!l||!!u||s.length>0;return{presentation:n.presentation===`aggregate`||n.presentation===`effective-account-fallback`||n.presentation===`coverage-only`?n.presentation:d?`aggregate`:`coverage-only`,incomplete:n.incomplete,includedAccounts:a,excludedAccounts:r,unknownPlanAccounts:i,partialWindowAccounts:$(n.partialWindowAccounts)??0,...c?{fiveHour:c}:{},...l?{weekly:l}:{},...u?{monthly:u}:{},...s.length>0?{customWindows:s}:{},...o?{currentAccount:{...typeof o.plan==`string`||o.plan===null?{plan:o.plan}:{},quota:Ve(o.quota)}}:{}}}function Ge(e){if(!e?.trim())return``;let[t,n]=e.split(`:`,2);return n?`${t} · ${n.replace(/-/g,` `)}`:e}function Ke(e,t,n,r,i,a){let o=r&&r.length>0?r:t?[t]:[],s=[...new Set([...a?e:o,...i])],c=n.trim().toLowerCase();return c?s.filter(e=>e.toLowerCase().includes(c)):s}function qe(e){switch(e){case`en`:return`en-GB`;case`de`:return`de-DE`;case`fr`:return`fr-FR`;case`ko`:return`ko-KR`;case`zh`:return`zh-CN`;case`zh-TW`:return`zh-TW`;case`ru`:return`ru-RU`;case`ja`:return`ja-JP`;case`tr`:return`tr-TR`;default:return e}}function Je({report:e,pending:n}){let r=t(),{locale:a}=i(),o=We(e),s=He(e),c=s?.creditsUsd,l=o?.presentation===`aggregate`,u=(o?.includedAccounts??0)+(o?.excludedAccounts??0),d=!!(l&&u>1),f=!d&&o?.currentAccount?.quota?o.currentAccount.quota:s,p=d?void 0:o?.currentAccount?.plan,m=!!(l&&d&&o?.currentAccount?.quota),h=new Set,g=new Set;if(l&&d&&o){o.fiveHour?.incomplete&&h.add(`fiveHour`),o.weekly?.incomplete&&h.add(`weekly`),o.monthly?.incomplete&&h.add(`monthly`);for(let e of o.customWindows??[])e.incomplete&&g.add(e.label)}let _=l&&d&&o?[...o.fiveHour?[{key:0,label:r(`codexAuth.fiveHour`),window:o.fiveHour}]:[],...o.weekly?[{key:1,label:r(`codexAuth.weekly`),window:o.weekly}]:[],...o.monthly?[{key:2,label:r(`codexAuth.monthly`),window:o.monthly}]:[],...(o.customWindows??[]).map((e,t)=>({key:t+3,label:e.label,window:e}))]:[],v=e=>new Intl.NumberFormat(a,{maximumFractionDigits:1}).format(e),y=e=>new Intl.DateTimeFormat(a,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e>1e10?e:e*1e3)),b=qe(a);return(0,Q.jsxs)(Q.Fragment,{children:[l&&d&&(0,Q.jsx)(`div`,{className:`pws-capacity-label`,children:r(`pws.capacity.estimate`)}),(f||n)&&(0,Q.jsx)(K,{quota:f,plan:p,threshold:80,t:r,layout:`stacked`,pending:n,incompleteWindowKeys:l&&d?h:void 0,incompleteCustomWindowLabels:l&&d?g:void 0}),(c||o)&&(0,Q.jsxs)(`div`,{className:`pws-capacity-details`,children:[c&&(0,Q.jsxs)(`div`,{className:`pws-capacity-recovery`,children:[(0,Q.jsx)(`span`,{children:r(`quota.creditsBalance`)}),(0,Q.jsx)(`strong`,{children:(e=>new Intl.NumberFormat(b,{style:`currency`,currency:`USD`}).format(e))(c.remaining)})]}),c?.expiresAt!==void 0&&(0,Q.jsx)(`div`,{className:`pws-capacity-recovery`,children:(0,Q.jsx)(`span`,{children:r(`quota.creditsPeriodEnds`,{date:(e=>new Intl.DateTimeFormat(b,{dateStyle:`medium`}).format(new Date(e>1e10?e:e*1e3)))(c.expiresAt)})})}),_.flatMap(({key:e,label:t,window:n})=>n.nextRecoveryAt!==void 0&&n.nextRecoveryPercent!==void 0?[(0,Q.jsxs)(`div`,{className:`pws-capacity-recovery`,children:[(0,Q.jsxs)(`span`,{children:[r(`pws.capacity.nextRecovery`),` · `,t,` · `,y(n.nextRecoveryAt)]}),(0,Q.jsx)(`strong`,{children:r(`pws.capacity.recoveryShare`,{percent:v(n.nextRecoveryPercent)})})]},e)]:[]),m&&o?.currentAccount?.quota&&(0,Q.jsxs)(`div`,{className:`pws-capacity-current`,children:[(0,Q.jsxs)(`span`,{className:`pws-capacity-label`,children:[r(`pws.capacity.currentAccount`),o.currentAccount.plan?` · ${o.currentAccount.plan}`:``]}),(0,Q.jsx)(K,{quota:o.currentAccount.quota,threshold:80,t:r,layout:`stacked`})]}),o&&o.incomplete&&o.excludedAccounts>0&&(0,Q.jsx)(`div`,{className:`pws-capacity-incomplete`,children:r(`pws.capacity.incomplete`,{excluded:o.excludedAccounts,unknown:o.unknownPlanAccounts})}),o&&o.partialWindowAccounts>0&&(0,Q.jsx)(`div`,{className:`pws-capacity-incomplete`,children:r(`pws.capacity.partial`,{count:o.partialWindowAccounts})})]})]})}function Ye({sections:e,quotaReports:n,usageTotals:r,usageLoading:o=!1,quotasLoading:s=!1,onSelectProvider:c,onEditConfig:l}){let u=t(),{locale:d}=i(),f=ke(u),p=(0,Z.useMemo)(()=>[...e.ready,...e.needsSetup,...e.disabled],[e]),h=(0,Z.useMemo)(()=>new Set(p.map(e=>e.name)),[p]),_=(0,Z.useMemo)(()=>Ae(e,{}),[e]),v=_.length,y=(0,Z.useMemo)(()=>e.ready.filter(e=>e.activeNeedsReauth).length,[e]),b=e.ready.length-y,x=e.needsSetup.length+y,S=(0,Z.useMemo)(()=>{let e=[];for(let t of p){let r=n[t.name],i=r?He(r):null,a=r?We(r):null;r&&(i||a?.presentation===`coverage-only`)&&e.push({item:t,report:r,urgency:i?Y(i):-1})}return e.sort((e,t)=>t.urgency-e.urgency||e.item.name.localeCompare(t.item.name))},[p,n]),C=(0,Z.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(r))h.has(t)&&(e[t]=n);return Ee(e).slice(0,4)},[r,h]),w=e=>{let t=je(e);return t===`reauth`?u(`pws.attention.reauth`):t===`missing`?u(`pws.attention.missingCredentials`):e};return(0,Q.jsxs)(`div`,{className:`pws-dashboard`,children:[(0,Q.jsxs)(`div`,{className:`pws-dashboard-header`,children:[(0,Q.jsxs)(`div`,{className:`pws-dashboard-header-text`,children:[(0,Q.jsx)(`h2`,{className:`pws-dashboard-title`,children:u(`pws.dashboard.title`)}),(0,Q.jsx)(`p`,{className:`muted pws-dashboard-subtitle`,children:u(`pws.dashboard.subtitle`)})]}),l&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:l,children:u(`prov.editJson`)})]}),(0,Q.jsxs)(`div`,{className:`pws-dashboard-summary`,children:[(0,Q.jsx)(Xe,{count:b,label:u(`pws.status.ready`),tone:`ok`}),(0,Q.jsx)(Xe,{count:x,label:u(y>0?`pws.status.needsAttention`:`pws.status.needsSetup`),tone:`warn`}),(0,Q.jsx)(Xe,{count:e.disabled.length,label:u(`prov.disabledBadge`),tone:`muted`})]}),v>0&&(0,Q.jsxs)(`section`,{className:`pws-dashboard-section pws-dashboard-attention`,"aria-label":u(`pws.attentionTitle`),children:[(0,Q.jsxs)(`h3`,{className:`pws-dashboard-section-title`,children:[(0,Q.jsx)(m,{style:{width:14,height:14},"aria-hidden":`true`}),u(`pws.attentionTitle`)]}),(0,Q.jsx)(`div`,{className:`pws-dashboard-rows`,children:_.map(e=>(0,Q.jsxs)(`button`,{type:`button`,className:`pws-dashboard-row pws-dashboard-row--attention`,onClick:()=>c(e.name),children:[(0,Q.jsx)(Re,{name:e.name,adapter:``,baseUrl:``,cls:`pws-dashboard-row-icon`}),(0,Q.jsxs)(`div`,{className:`pws-dashboard-row-info`,children:[(0,Q.jsx)(`span`,{className:`pws-dashboard-row-name`,children:a(e.name,u)}),(0,Q.jsx)(`span`,{className:`pws-dashboard-row-meta muted`,children:w(e.reason)})]}),(0,Q.jsx)(g,{className:`pws-dashboard-row-chevron`,"aria-hidden":`true`})]},`${e.name}:${e.reason}`))})]}),(0,Q.jsxs)(`div`,{className:`pws-dashboard-columns`,children:[(0,Q.jsxs)(`section`,{className:`pws-dashboard-section pws-dashboard-section--rate-limits`,"aria-label":u(`pws.dashboard.rateLimits`),"aria-busy":s||void 0,children:[(0,Q.jsx)(`h3`,{className:`pws-dashboard-section-title`,children:u(`pws.dashboard.rateLimits`)}),S.length>0?(0,Q.jsx)(`div`,{className:`pws-dashboard-rows`,children:S.map(({item:e,report:t})=>(0,Q.jsxs)(`button`,{type:`button`,className:`pws-dashboard-row`,onClick:()=>c(e.name),children:[(0,Q.jsx)(Re,{name:e.name,adapter:e.adapter,baseUrl:e.baseUrl,cls:`pws-dashboard-row-icon`}),(0,Q.jsxs)(`div`,{className:`pws-dashboard-row-info`,children:[(0,Q.jsx)(`span`,{className:`pws-dashboard-row-name`,children:a(e.name,u)}),(0,Q.jsx)(`span`,{className:`pws-dashboard-row-meta muted`,children:u(`pws.dashboard.checkedAgo`,{time:Oe(t.updatedAt,f)})})]}),(0,Q.jsx)(g,{className:`pws-dashboard-row-chevron`,"aria-hidden":`true`}),(0,Q.jsx)(`div`,{className:`pws-dashboard-row-bars`,children:(0,Q.jsx)(Je,{report:t,pending:s&&!t.quota})})]},e.name))}):s?(0,Q.jsx)(`div`,{className:`pws-dashboard-rows pws-dashboard-rows--pending`,"aria-hidden":`true`,children:Array.from({length:3},(e,t)=>(0,Q.jsxs)(`div`,{className:`pws-dashboard-row pws-dashboard-row--skeleton`,children:[(0,Q.jsx)(`span`,{className:`pws-dashboard-row-icon pws-skel`}),(0,Q.jsxs)(`div`,{className:`pws-dashboard-row-info`,children:[(0,Q.jsx)(`span`,{className:`pws-skel pws-skel--name`}),(0,Q.jsx)(`span`,{className:`pws-skel pws-skel--meta`})]}),(0,Q.jsx)(`div`,{className:`pws-dashboard-row-bars`,children:(0,Q.jsx)(K,{quota:null,threshold:80,t:u,layout:`stacked`,pending:!0})})]},t))}):(0,Q.jsx)(`p`,{className:`muted pws-dashboard-empty`,children:u(`pws.dashboard.noRateLimits`)})]}),(0,Q.jsxs)(`section`,{className:`pws-dashboard-section pws-dashboard-section--recent`,"aria-label":u(`pws.dashboard.recentlyUsed`),"aria-busy":o||void 0,children:[(0,Q.jsx)(`h3`,{className:`pws-dashboard-section-title`,children:u(`pws.dashboard.recentlyUsed`)}),C.length>0?(0,Q.jsx)(`div`,{className:`pws-dashboard-rows`,children:C.map(e=>(0,Q.jsxs)(`button`,{type:`button`,className:`pws-dashboard-row`,onClick:()=>c(e.name),children:[(0,Q.jsx)(Re,{name:e.name,adapter:``,baseUrl:``,cls:`pws-dashboard-row-icon`}),(0,Q.jsx)(`span`,{className:`pws-dashboard-row-name`,children:a(e.name,u)}),(0,Q.jsx)(`span`,{className:`pws-dashboard-row-count muted`,children:u(`pws.dashboard.requests`,{count:Me(e.requests,d)})}),(0,Q.jsx)(g,{className:`pws-dashboard-row-chevron`,"aria-hidden":`true`})]},e.name))}):o?(0,Q.jsx)(`div`,{className:`pws-dashboard-rows pws-dashboard-rows--pending`,"aria-hidden":`true`,children:Array.from({length:3},(e,t)=>(0,Q.jsxs)(`div`,{className:`pws-dashboard-row pws-dashboard-row--skeleton`,children:[(0,Q.jsx)(`span`,{className:`pws-dashboard-row-icon pws-skel`}),(0,Q.jsx)(`span`,{className:`pws-skel pws-skel--name`}),(0,Q.jsx)(`span`,{className:`pws-skel pws-skel--count`})]},t))}):(0,Q.jsx)(`p`,{className:`muted pws-dashboard-empty`,children:u(`pws.dashboard.noUsage`)})]})]})]})}function Xe({count:e,label:t,tone:n}){return(0,Q.jsxs)(`div`,{className:`pws-dashboard-card pws-dashboard-card--${n}`,children:[(0,Q.jsx)(`span`,{className:`pws-dashboard-card-count`,children:e}),(0,Q.jsx)(`span`,{className:`pws-dashboard-card-label`,children:t})]})}function Ze({editor:e,providerName:n,saving:r,onSave:i,message:a}){let o=t(),s=(0,Z.useRef)(null);return(0,Z.useEffect)(()=>{e.open&&s.current?.focus()},[e.open]),e.open?(0,Q.jsxs)(`div`,{className:`pwi-json-panel`,children:[(0,Q.jsxs)(`div`,{className:`pwi-json-panel-header`,children:[(0,Q.jsx)(`span`,{className:`pwi-json-panel-title`,children:o(`pws.jsonEditorTitle`,{name:n})}),(0,Q.jsxs)(`div`,{className:`pwi-json-panel-actions`,children:[e.onRestore&&e.isDirty&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:e.onRestore,children:o(`pws.jsonRestore`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:e.onClose,children:o(`common.cancel`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:i,disabled:r||!e.isDirty,children:o(r?`pws.saving`:`pws.jsonSave`)})]})]}),(0,Q.jsx)(`p`,{className:`pwi-json-panel-desc muted`,children:o(`pws.jsonEditorDesc`)}),(0,Q.jsx)(`textarea`,{ref:s,className:`input pwi-json-textarea`,value:e.draft,onChange:t=>e.onDraftChange(t.target.value),spellCheck:!1,rows:20,"aria-label":o(`pws.jsonEditorDesc`)}),a&&(0,Q.jsx)(`div`,{className:a.ok?`pwi-settings-msg pwi-settings-msg--ok`:`pwi-settings-msg pwi-settings-msg--err`,children:a.text})]}):null}var Qe=[{id:`az`,labelKey:`pws.sort.az`},{id:`za`,labelKey:`pws.sort.za`},{id:`free-paid`,labelKey:`pws.sort.freePaid`},{id:`paid-free`,labelKey:`pws.sort.paidFree`},{id:`accounts-first`,labelKey:`pws.sort.accountsFirst`}],$e=18e5;function et(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;return typeof n.updatedAt!=`number`||!Number.isFinite(n.updatedAt)||t-n.updatedAt>=$e||!(`quota`in n)||n.label!==void 0&&typeof n.label!=`string`||n.source!==void 0&&typeof n.source!=`string`?null:{...typeof n.label==`string`?{label:n.label}:{},...typeof n.source==`string`?{source:n.source}:{},updatedAt:n.updatedAt,quota:n.quota,...n.aggregation===void 0?{}:{aggregation:n.aggregation}}}function tt(e,t=Date.now()){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n={};for(let[r,i]of Object.entries(e)){let e=et(i,t);r.trim()&&e&&(n[r]=e)}return n}function nt(e){return tt(T(e))}function rt(e,t=Date.now()){if(!Array.isArray(e))return{};let n={};for(let r of e){if(!r||typeof r!=`object`||Array.isArray(r))continue;let e=r.provider,i=et(r,t);typeof e==`string`&&e.trim()&&i&&(n[e]=i)}return n}function it({providers:e,apiBase:n,defaultProvider:r,selectedName:i,onSelect:o,onRemoveProvider:s,onAddProvider:c,onEditConfig:l,jsonEditor:f,jsonSaving:p=!1,modelsRefreshToken:m=0,activeAccountNeedsReauth:h,quotaRefreshEpoch:g=0,quotaForceRefresh:v=!1,detail:x}){let S=t(),[C,w]=(0,Z.useState)(``),[E,O]=(0,Z.useState)({ready:!0,needsSetup:!0,disabled:!0}),[A,M]=(0,Z.useState)({free:!0,paid:!0}),[N,P]=(0,Z.useState)({cloud:!0,local:!0,selfHosted:!0,login:!0}),[F,I]=(0,Z.useState)(`az`),[L,R]=(0,Z.useState)(!1),[z,B]=(0,Z.useState)(null),[V,H]=(0,Z.useState)({}),[U,ee]=(0,Z.useState)({}),[W,G]=(0,Z.useState)({}),[K,te]=(0,Z.useState)({}),[ne,re]=(0,Z.useState)(!1),[ie,q]=(0,Z.useState)(!1),J=`ocx.providers.quotas.v1:${n}`,ae=`ocx.providers.usage.v1:${n}`,[Y,X]=(0,Z.useState)(()=>T(ae)?.totals??{}),[oe,se]=(0,Z.useState)(()=>T(ae)?.models??{}),[ce,ue]=(0,Z.useState)(()=>T(ae)?.accounts??{}),[de,fe]=(0,Z.useState)(()=>nt(J)??{}),[pe,me]=(0,Z.useState)(()=>!T(ae)),[ye,be]=(0,Z.useState)(()=>{let e=nt(J);return!e||Object.keys(e).length===0}),[Ee,De]=(0,Z.useState)(0),Oe=(0,Z.useRef)(null),ke=j(D(n),[n],async e=>{let t=await fetch(n+`/api/usage?range=30d`,{signal:e});if(!t.ok)throw Error(String(t.status));return await t.json()},{deadlineMs:6e4}),Ae=(0,Z.useMemo)(()=>{let t=he(le(e));return _e(t,h??{})},[e,h]),je=(0,Z.useCallback)(()=>{De(e=>e+1)},[]);(0,Z.useEffect)(()=>{let e=!1,t=window.setTimeout(()=>{re(!0),(async()=>{try{let t=await fetch(`${n}/api/selected-models`),r=await d(t);if(e)return;H(Te(r)),ee(Se(r)),G(Ce(r)),te(we(r)),q(!1)}catch{if(e)return;q(!0)}finally{e||re(!1)}})()},0);return()=>{e=!0,window.clearTimeout(t)}},[n,m,Ee]),(0,Z.useEffect)(()=>{let e=!1,t=window.setTimeout(()=>{let t=ke.data;if(e)return;if(!t){ke.loading&&me(!T(ae));return}let n={};for(let e of t.providers??[])n[e.provider]={requests:e.requests,totalTokens:e.totalTokens};X(n);let r={};for(let e of t.models??[]){let t=e.provider;r[t]||(r[t]=[]),r[t].push({model:e.model,...e.resolvedModel?{resolvedModel:e.resolvedModel}:{},requests:e.requests,totalTokens:e.totalTokens,inputTokens:e.inputTokens,outputTokens:e.outputTokens,shareRatio:e.shareRatio,...e.estimatedCostUsd===void 0?{}:{estimatedCostUsd:e.estimatedCostUsd}})}se(r);let i={};for(let e of t.accounts??[]){let t=e.provider??`openai`;i[t]||(i[t]=[]),i[t].push({accountLogLabel:e.accountLogLabel,provider:e.provider,requests:e.requests,totalTokens:e.totalTokens,...e.estimatedCostUsd===void 0?{}:{estimatedCostUsd:e.estimatedCostUsd}})}ue(i),b(ae,{totals:n,models:r,accounts:i}),me(!1)},0);return()=>{e=!0,window.clearTimeout(t)}},[n,ae,ke.data,ke.loading]),(0,Z.useEffect)(()=>{let e=!1,t=window.setTimeout(()=>{let t=nt(J);(!t||Object.keys(t).length===0)&&be(!0),fetch(`${n}/api/provider-quotas${v?`?refresh=1`:``}`).then(e=>u(e)).then(t=>{if(e||!t)return;let n=rt(t.reports);fe(n),b(J,n)}).catch(()=>{e||fe(e=>{let t=tt(e)??{};return b(J,t),t})}).finally(()=>{e||be(!1)})},0);return()=>{e=!0,window.clearTimeout(t)}},[n,g,v,J]),(0,Z.useEffect)(()=>{if(!L)return;let e=e=>{Oe.current&&!Oe.current.contains(e.target)&&R(!1)},t=e=>{e.key===`Escape`&&R(!1)};return document.addEventListener(`mousedown`,e),window.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),window.removeEventListener(`keydown`,t)}},[L]);let Me=(0,Z.useMemo)(()=>[...Ae.ready,...Ae.needsSetup,...Ae.disabled],[Ae]),Ne=(0,Z.useMemo)(()=>Me.filter(ge).length,[Me]),Pe=Me.length-Ne,Fe=(0,Z.useMemo)(()=>{let e={cloud:0,local:0,selfHosted:0,login:0};for(let t of Me)e[xe(t)]+=1;return e},[Me]),Ie=(0,Z.useMemo)(()=>{let e=C.trim().toLowerCase(),t=t=>{let n=t.filter(t=>{if(e&&!t.name.toLowerCase().includes(e)&&!t.adapter.toLowerCase().includes(e))return!1;let n=ge(t);return!(n&&!A.free||!n&&!A.paid||!N[xe(t)])});return ve(n,F)};return{ready:E.ready?t(Ae.ready):[],needsSetup:E.needsSetup?t(Ae.needsSetup):[],disabled:E.disabled?t(Ae.disabled):[]}},[Ae,C,E,A,N,F]),Le=!E.ready||!E.needsSetup||!E.disabled||!A.free||!A.paid||!N.cloud||!N.local||!N.selfHosted||!N.login||F!==`az`,Re=()=>{O({ready:!0,needsSetup:!0,disabled:!0}),M({free:!0,paid:!0}),P({cloud:!0,local:!0,selfHosted:!0,login:!0}),I(`az`)},ze=(0,Z.useMemo)(()=>i?Me.find(e=>e.name===i)??null:null,[i,Me]),$=(0,Z.useMemo)(()=>{let e=new Map;for(let t of Me){let n=a(t.name,S);e.set(n,(e.get(n)??0)+1)}let t=new Set;for(let[n,r]of e.entries())r>1&&t.add(n);return t},[Me,S]);if(Me.length===0)return(0,Q.jsx)(at,{onAddProvider:c});let Ve=[{key:`ready`,label:S(`pws.status.ready`),count:Ae.ready.length},{key:`needsSetup`,label:S(`pws.status.needsSetup`),count:Ae.needsSetup.length},{key:`disabled`,label:S(`prov.disabledBadge`),count:Ae.disabled.length}],He=[{id:`ready`,label:S(`pws.status.ready`),count:Ie.ready.length,ariaLabel:S(`pws.groupReady`,{count:Ie.ready.length}),items:Ie.ready},{id:`needs-setup`,label:S(`pws.status.needsSetup`),count:Ie.needsSetup.length,ariaLabel:S(`pws.groupNeedsSetup`,{count:Ie.needsSetup.length}),items:Ie.needsSetup},{id:`disabled`,label:S(`prov.disabledBadge`),count:Ie.disabled.length,ariaLabel:S(`pws.groupDisabled`,{count:Ie.disabled.length}),items:Ie.disabled}],Ue=He.flatMap(e=>e.items.map(e=>e.name)),We=z&&Ue.includes(z)?z:i&&Ue.includes(i)?i:Ue[0]??null;return(0,Q.jsx)(`div`,{className:`pws-shell-container`,children:(0,Q.jsxs)(`div`,{className:`pws-root`,children:[(0,Q.jsxs)(`aside`,{className:`pws-rail`,"aria-label":S(`pws.providerList`),children:[(0,Q.jsxs)(`div`,{className:`pws-search-row`,children:[(0,Q.jsxs)(`div`,{className:`pws-search-wrap`,children:[(0,Q.jsx)(y,{className:`pws-search-icon`,width:14,height:14,"aria-hidden":`true`}),(0,Q.jsx)(`input`,{type:`search`,className:`input pws-search-input`,placeholder:S(`pws.searchPlaceholder`),value:C,onChange:e=>w(e.target.value),"aria-label":S(`pws.searchPlaceholder`)})]}),(0,Q.jsxs)(`div`,{className:`pws-filter-wrap`,ref:Oe,children:[(0,Q.jsxs)(`button`,{type:`button`,className:`pws-filter-btn${Le||L?` pws-filter-btn--active`:``}`,onClick:()=>R(e=>!e),"aria-label":S(`pws.filterAria`),"aria-expanded":L,"aria-controls":`pws-provider-filters`,children:[(0,Q.jsx)(_,{width:18,height:18,"aria-hidden":`true`}),Le&&(0,Q.jsx)(`span`,{className:`pws-filter-dot`,"aria-hidden":`true`})]}),L&&(0,Q.jsxs)(`div`,{id:`pws-provider-filters`,className:`pws-filter-menu`,role:`group`,"aria-label":S(`pws.providerFiltersAria`),children:[(0,Q.jsx)(`div`,{className:`pws-filter-title`,children:S(`pws.filters`)}),(0,Q.jsx)(`div`,{className:`pws-filter-head`,children:S(`pws.filterStatus`)}),Ve.map(({key:e,label:t,count:n})=>(0,Q.jsxs)(`label`,{className:`pws-filter-option`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:E[e],onChange:()=>O(t=>({...t,[e]:!t[e]}))}),(0,Q.jsx)(`span`,{className:`pws-filter-label`,children:t}),(0,Q.jsx)(`span`,{className:`pws-filter-count`,children:n})]},e)),(0,Q.jsx)(`div`,{className:`pws-filter-head`,children:S(`pws.pricing`)}),(0,Q.jsxs)(`label`,{className:`pws-filter-option`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:A.free,onChange:()=>M(e=>({...e,free:!e.free}))}),(0,Q.jsx)(`span`,{className:`pws-filter-label`,children:S(`modal.badge.free`)}),(0,Q.jsx)(`span`,{className:`pws-filter-count`,children:Ne})]}),(0,Q.jsxs)(`label`,{className:`pws-filter-option`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:A.paid,onChange:()=>M(e=>({...e,paid:!e.paid}))}),(0,Q.jsx)(`span`,{className:`pws-filter-label`,children:S(`pws.paid`)}),(0,Q.jsx)(`span`,{className:`pws-filter-count`,children:Pe})]}),(0,Q.jsx)(`div`,{className:`pws-filter-head`,children:S(`pws.filterType`)}),[{key:`cloud`,label:S(`pws.type.cloud`),count:Fe.cloud},{key:`local`,label:S(`pws.type.local`),count:Fe.local},{key:`selfHosted`,label:S(`pws.type.selfHosted`),count:Fe.selfHosted},{key:`login`,label:S(`pws.type.login`),count:Fe.login}].map(({key:e,label:t,count:n})=>(0,Q.jsxs)(`label`,{className:`pws-filter-option`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:N[e],onChange:()=>P(t=>({...t,[e]:!t[e]}))}),(0,Q.jsx)(`span`,{className:`pws-filter-label`,children:t}),(0,Q.jsx)(`span`,{className:`pws-filter-count`,children:n})]},e)),(0,Q.jsx)(`div`,{className:`pws-filter-head`,children:S(`pws.sort`)}),(0,Q.jsx)(`div`,{className:`pws-sort-grid`,role:`group`,"aria-label":S(`pws.sortProvidersAria`),children:Qe.map(e=>(0,Q.jsx)(`button`,{type:`button`,className:`pws-sort-btn${F===e.id?` pws-sort-btn--active`:``}`,onClick:()=>I(e.id),"aria-pressed":F===e.id,children:S(e.labelKey)},e.id))}),(0,Q.jsx)(`div`,{className:`pws-filter-footer`,children:(0,Q.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:Re,disabled:!Le,children:S(`pws.resetAll`)})})]})]})]}),(0,Q.jsxs)(`div`,{className:`pws-rail-list`,role:`listbox`,"aria-label":S(`pws.providersAria`),onKeyDown:e=>{let t=Array.from(e.currentTarget.querySelectorAll(`[role="option"]`));if(t.length===0)return;let n=document.activeElement,r=t.findIndex(e=>e===n||e.contains(n));if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let n=e.key===`ArrowDown`?1:-1;t[r<0?n>0?0:t.length-1:(r+n+t.length)%t.length]?.focus();return}if(e.key===`Home`){e.preventDefault(),t[0]?.focus();return}e.key===`End`&&(e.preventDefault(),t[t.length-1]?.focus())},children:[Object.values(Ie).every(e=>e.length===0)&&(0,Q.jsx)(`span`,{className:`muted pws-rail-empty`,role:`status`,children:S(C?`pws.noSearchResults`:Le?`pws.noMatchFilters`:`pws.noProvidersConfigured`)}),He.map(({id:e,label:t,count:n,ariaLabel:c,items:l})=>l.length===0?null:(0,Q.jsxs)(`div`,{className:`pws-rail-group`,role:`group`,"aria-label":c,children:[(0,Q.jsxs)(`div`,{className:`pws-rail-group-head`,"aria-hidden":`true`,children:[(0,Q.jsx)(`span`,{className:`pws-rail-group-label`,children:t}),(0,Q.jsx)(`span`,{className:`pws-rail-group-count`,children:n})]}),l.map(e=>(0,Q.jsxs)(`div`,{className:`pws-rail-row-wrap`,children:[(0,Q.jsx)(Be,{item:e,selected:i===e.name,tabbable:We===e.name,modelCount:V[e.name],isDefault:r===e.name,showConfigId:$.has(a(e.name,S)),onClick:()=>o(e.name),onFocus:()=>B(e.name)}),s&&(0,Q.jsx)(`button`,{type:`button`,className:`pws-rail-row-remove`,tabIndex:-1,"aria-hidden":`true`,onClick:t=>{t.stopPropagation(),s(e.name)},title:S(`pws.removeConfirmTitle`),children:(0,Q.jsx)(k,{width:14,height:14})})]},e.name))]},e))]})]}),(0,Q.jsx)(`section`,{className:`pws-main`,"aria-label":S(`pws.workspaceMainAria`),children:f?.open?(0,Q.jsx)(Ze,{editor:f,providerName:S(`nav.providers`),saving:p,onSave:()=>{f.onSave()}}):ze?x?.(ze,{usageTotals:Y[ze.name],modelUsage:oe[ze.name],accountUsage:ce[ze.name],quotaReport:de[ze.name],availableModels:U[ze.name]??[],hasLiveModels:(W[ze.name]??0)>0,selectedModels:K[ze.name]??[],modelsLoading:ne,modelsLoadFailed:ie,onRetryModels:je})??(0,Q.jsxs)(`div`,{className:`pws-detail-placeholder`,children:[(0,Q.jsx)(`h3`,{children:a(ze.name,S)}),(0,Q.jsx)(`p`,{className:`muted`,children:S(`pws.detailComingSoon`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>o(null),children:S(`modal.back`)})]}):(0,Q.jsx)(Ye,{sections:Ae,quotaReports:de,usageTotals:Y,usageLoading:pe,quotasLoading:ye,onSelectProvider:e=>o(e),onEditConfig:l})})]})})}function at({onAddProvider:e}){let n=t();return(0,Q.jsx)(`div`,{className:`pws-empty-root`,children:(0,Q.jsxs)(`div`,{className:`pws-empty-hero`,children:[(0,Q.jsx)(`div`,{"aria-hidden":`true`,children:(0,Q.jsx)(E,{style:{width:64,height:64}})}),(0,Q.jsx)(`h2`,{children:n(`pws.connectFirst`)}),(0,Q.jsxs)(`div`,{className:`pws-empty-tiles`,children:[(0,Q.jsxs)(`button`,{type:`button`,className:`pws-empty-tile`,onClick:()=>e({tier:`free`}),children:[(0,Q.jsx)(`span`,{"aria-hidden":`true`,children:(0,Q.jsx)(f,{width:18,height:18})}),(0,Q.jsx)(`span`,{className:`pws-empty-tile-label`,children:n(`pws.empty.browseFree`)}),(0,Q.jsx)(`span`,{className:`pws-empty-tile-desc muted`,children:n(`pws.empty.browseFreeDesc`)})]}),(0,Q.jsxs)(`button`,{type:`button`,className:`pws-empty-tile`,onClick:()=>e({tier:`accounts`}),children:[(0,Q.jsx)(`span`,{"aria-hidden":`true`,children:(0,Q.jsx)(x,{width:18,height:18})}),(0,Q.jsx)(`span`,{className:`pws-empty-tile-label`,children:n(`pws.empty.connectAccount`)}),(0,Q.jsx)(`span`,{className:`pws-empty-tile-desc muted`,children:n(`pws.empty.connectAccountDesc`)})]}),(0,Q.jsxs)(`button`,{type:`button`,className:`pws-empty-tile`,onClick:()=>e({custom:!0}),children:[(0,Q.jsx)(`span`,{"aria-hidden":`true`,children:(0,Q.jsx)(w,{width:18,height:18})}),(0,Q.jsx)(`span`,{className:`pws-empty-tile-label`,children:n(`pws.empty.addEndpoint`)}),(0,Q.jsx)(`span`,{className:`pws-empty-tile-desc muted`,children:n(`pws.empty.addEndpointDesc`)})]})]})]})})}function ot(e){if(me(e.name,e))return`codex-accounts`;let t=(e.authMode??``).toLowerCase();if(t===`forward`||t===`local`||ye(e))return null;if(t===`oauth`)return`oauth-accounts`;let n=e.hasApiKey===!0;return!(t===`key`||n||t===``)||e.keyOptional===!0&&!n?null:`api-keys`}function st(e,t,n){let r=t.alias?.trim();if(r)return r;let i=t.email?.trim();if(i)return i;let a=e.findIndex(e=>e.id===t.id);return n(`pws.accountOrdinal`,{count:String(a>=0?a+1:1)})}function ct({item:e,usageTotals:n,quotaReport:r,oauthEmail:a,oauth:o,apiBase:s,connectionIdentity:l,onEditSettings:u,onViewUsage:f,onUpdateProvider:p,onReauthenticate:h,onCancelLogin:g,reauthBusy:_=!1,onRefreshConfig:v}){let y=t(),{locale:b}=i(),x=ke(y),S=pe(e),C=!!e.activeNeedsReauth,w=e.googleMode===`ai-studio-web`||e.name===`google-aistudio`,[T,E]=(0,Z.useState)(null),D=T??e.aiStudioAuthState??(e.hasAiStudioSession?`checking`:`needs_reauth`),O=y(D===`connected`?`pws.aiStudio.connected`:D===`checking`?`pws.aiStudio.checking`:D===`unsupported`?`pws.aiStudio.unsupported`:`pws.aiStudio.needsReauth`),k=w&&D===`needs_reauth`,[A,j]=(0,Z.useState)(!1),[M,N]=(0,Z.useState)(null),P=(0,Z.useRef)(null),F=(0,Z.useRef)(null),I=w?O:y(S===`ready`?`pws.status.connected`:S===`needs-setup`?C?`pws.status.needsAttention`:`pws.status.needsSetup`:`prov.disabledBadge`),L=n?.requests,R=n?.totalTokens,z=He(r),B=JSON.stringify([s??null,e.name,e.adapter,e.baseUrl,e.authMode??null,e.apiKeyTransport??null,e.liveModels??null,e.disabled===!0,e.hasApiKey===!0,e.hasHeaders===!0,e.allowPrivateNetwork===!0,e.keyOptional===!0,e.activeNeedsReauth===!0,D,l??null]),[V,H]=(0,Z.useState)(null),U=(0,Z.useRef)(null),ee=V?.key===B&&V.testing,W=V?.key===B?V.result:null;(0,Z.useEffect)(()=>()=>{U.current?.key===B&&(U.current.controller.abort(),U.current=null),P.current?.abort(),P.current=null},[B]);let G=(0,Z.useCallback)(async()=>{if(!s)return;U.current?.controller.abort();let t=new AbortController;U.current={key:B,controller:t},H({key:B,testing:!0,result:null});try{let n=await fetch(`${s}/api/providers/test?name=${encodeURIComponent(e.name)}`,{method:`POST`,signal:t.signal}),r=await d(n,y(`pws.connectionFailed`));if(!r)throw Error(y(`pws.connectionFailed`));t.signal.aborted||(H({key:B,testing:!1,result:r}),w&&(r.authState?E(r.authState):r.ok===!0?E(`connected`):r.error&&/re-?authentication/i.test(r.error)&&E(`needs_reauth`)))}catch(e){t.signal.aborted||H({key:B,testing:!1,result:{applicable:!0,ok:!1,error:e instanceof Error?e.message:y(`pws.connectionFailed`)}})}finally{U.current?.controller===t&&(U.current=null)}},[s,B,w,e.name,y]),K=(0,Z.useCallback)(async()=>{if(!s)return;P.current?.abort();let e=new AbortController;P.current=e,j(!0),N(null);try{let t=await fetch(`${s}/api/aistudio/login/native`,{method:`POST`,signal:e.signal});if(e.signal.aborted)return;if(!t.ok){let e=await t.json().catch(()=>null),n=typeof e?.error==`string`?e.error:e?.error?.message;N(n||y(`pws.aiStudio.loginFailed`));return}let n=await t.json().catch(()=>null),r=typeof n?.error==`string`?n.error:n?.error?.message;if(n?.ok){E(`connected`),N(y(`pws.aiStudio.reauthenticated`)),await v?.();return}if(r){N(r);return}N(y(`pws.aiStudio.loginFailed`))}catch(t){if(e.signal.aborted||t instanceof DOMException&&t.name===`AbortError`)return;N(t instanceof Error?t.message:y(`pws.aiStudio.loginFailed`))}finally{P.current===e&&(P.current=null),e.signal.aborted||j(!1)}},[s,v,y]);(0,Z.useEffect)(()=>{if(!w||D!==`checking`||!s)return;let t=`${e.name}:${B}`;if(F.current===t)return;F.current=t;let n=window.setTimeout(()=>{G()},0);return()=>window.clearTimeout(n)},[D,s,B,w,e.name,G]);let te=W?.applicable===!1?`not-applicable`:W?.ok===!0?`ok`:`failed`,ne=W?.applicable===!1?y(`pws.connectionNotApplicable`):W?.ok===!0?W.message||y(`pws.connectionOk`):W?.error||y(`pws.connectionFailed`);return(0,Q.jsxs)(`div`,{className:`pws-overview-layout`,children:[(0,Q.jsxs)(`div`,{className:`pws-overview-main`,children:[(0,Q.jsxs)(`section`,{className:`pws-section`,"aria-label":y(`pws.connection`),children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:y(`pws.connection`)}),(0,Q.jsxs)(`dl`,{className:`pws-kv`,children:[(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`dash.status`)}),(0,Q.jsxs)(`dd`,{className:S===`ready`?`pws-status-ok`:`pws-status-warn`,children:[S===`ready`?(0,Q.jsx)(c,{style:{width:13,height:13},"aria-hidden":`true`}):(0,Q.jsx)(m,{style:{width:13,height:13},"aria-hidden":`true`}),I]})]}),(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`modal.baseUrl`)}),(0,Q.jsx)(`dd`,{children:(0,Q.jsx)(`code`,{children:e.baseUrl?.trim()?e.baseUrl:`—`})})]}),(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`pws.cell.auth`)}),(0,Q.jsx)(`dd`,{children:a?`${Ie(e,y)} · ${a}`:Ie(e,y)})]}),(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`modal.defaultModel`)}),(0,Q.jsx)(`dd`,{children:e.defaultModel??(0,Q.jsx)(`span`,{className:`muted`,children:`—`})})]}),w&&(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`pws.aiStudio`)}),(0,Q.jsx)(`dd`,{children:O})]}),e.note&&(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`pws.cell.note`)}),(0,Q.jsx)(`dd`,{className:`muted`,children:e.note})]})]}),w&&(k||M)&&(0,Q.jsxs)(`div`,{className:`row`,style:{marginTop:12,alignItems:`center`},children:[k&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,disabled:A,onClick:()=>void K(),children:y(A?`common.loading`:S===`ready`?`pws.reauthenticate`:`pws.aiStudio.connect`)}),M&&(0,Q.jsx)(`span`,{role:`status`,className:`muted`,children:M})]}),s&&(0,Q.jsxs)(`div`,{className:`row`,style:{marginTop:12,alignItems:`center`},children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:ee,onClick:()=>void G(),children:y(ee?`pws.testing`:`pws.testConnection`)}),W&&(0,Q.jsx)(`span`,{role:`status`,className:te===`ok`?`pws-status-ok`:te===`failed`?`pws-status-warn`:`muted`,"data-connection-test-state":te,children:ne})]}),u&&(0,Q.jsx)(`button`,{type:`button`,className:`link-btn pws-edit-settings-link`,onClick:u,children:y(`pws.editSettings`)})]}),r&&(0,Q.jsxs)(`section`,{className:`pws-section`,"aria-label":y(`pws.rateLimits`),children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:y(`pws.rateLimits`)}),(0,Q.jsx)(Je,{report:r,pending:!1})]}),(0,Q.jsxs)(`section`,{className:`pws-section`,"aria-label":y(`pws.authSummary`),children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:y(`pws.authSummary`)}),C?(0,Q.jsxs)(`div`,{className:`pws-auth-summary pws-auth-summary--warn`,role:`status`,children:[(0,Q.jsx)(m,{style:{width:14,height:14},"aria-hidden":`true`}),(0,Q.jsxs)(`div`,{className:`pws-auth-summary-body`,children:[(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`strong`,{children:y(`pws.status.needsAttention`)}),` — `,e.authMode===`forward`?y(`pws.attention.reauthForward`):y(`pws.attention.reauth`)]}),h&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,disabled:_,onClick:()=>h(),children:y(_?`prov.waitingBrowser`:`pws.reauthenticate`)}),_&&g&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>g(),children:y(`common.cancel`)})]})]}):(0,Q.jsxs)(`div`,{className:`pws-auth-summary`,children:[(0,Q.jsx)(`span`,{className:`pws-auth-dot`}),(0,Q.jsx)(`span`,{children:e.authMode===`forward`?y(`pws.passthrough`):e.authMode===`oauth`?a?y(`pws.loggedInAs`,{email:a}):o?.loggedIn?y(`pws.loggedInTitle`):y(`pws.notLoggedIn`):e.hasApiKey?y(`pws.apiKeyConfigured`):Ie(e,y)})]})]})]}),(0,Q.jsxs)(`aside`,{className:`pws-overview-sidebar`,children:[(0,Q.jsxs)(`section`,{className:`pws-section`,"aria-label":y(`pws.statsAria`),children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:y(`pws.statsTitle`)}),(0,Q.jsxs)(`dl`,{className:`pws-kv`,children:[typeof L==`number`&&(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`pws.stats.totalRequests`)}),(0,Q.jsx)(`dd`,{className:`pws-kv-mono`,children:Me(L,b)})]}),typeof R==`number`&&(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`pws.stats.totalTokens`)}),(0,Q.jsx)(`dd`,{className:`pws-kv-mono`,children:Ne(R,b)})]}),r&&(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:y(`pws.stats.quotaUpdated`)}),(0,Q.jsx)(`dd`,{className:`pws-kv-mono`,title:r.source?Ge(r.source):void 0,children:Oe(r.updatedAt,x)})]}),typeof L!=`number`&&typeof R!=`number`&&!r&&(0,Q.jsx)(`div`,{className:`muted`,children:y(`pws.usageUnavailable`)})]}),f&&(0,Q.jsxs)(`button`,{type:`button`,className:`link-btn pws-view-usage-link`,onClick:f,children:[y(`pws.viewUsage`),` →`]}),z&&(0,Q.jsx)(`div`,{className:`muted pws-stats-note`,children:y(`pws.stats.quotaTracked`)})]}),(0,Q.jsx)(lt,{item:e,onUpdateProvider:p})]})]})}function lt({item:e,onUpdateProvider:n}){let r=t(),[i,a]=(0,Z.useState)(!1),[o,s]=(0,Z.useState)(``),[c,l]=(0,Z.useState)(!1),[u,d]=(0,Z.useState)(``),f=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{i&&f.current?.focus()},[i]);let p=(0,Z.useCallback)(async()=>{if(c||!n)return;let t=o.trim();if(t===(e.note??``)){a(!1),d(``);return}l(!0);try{let i=await n(e.name,{note:t||void 0});if(!i.ok){d(i.error||r(`prov.saveFailed`));return}d(``),a(!1)}finally{l(!1)}},[o,e.name,e.note,n,c,r]);return i?(0,Q.jsxs)(`section`,{className:`pws-section pws-notes-section`,"aria-label":r(`pws.notes`),children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:r(`pws.notes`)}),(0,Q.jsx)(`textarea`,{ref:f,className:`pws-notes-textarea`,value:o,onChange:e=>s(e.target.value),onBlur:()=>void p(),onKeyDown:t=>{t.key===`Escape`&&(s(e.note??``),d(``),a(!1))},placeholder:r(`pws.notePlaceholder`),rows:3,disabled:c}),u?(0,Q.jsx)(`p`,{className:`pws-inline-error`,role:`alert`,children:u}):null]}):(0,Q.jsxs)(`section`,{className:`pws-section pws-notes-section`,"aria-label":r(`pws.notes`),children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:r(`pws.notes`)}),(0,Q.jsx)(`button`,{type:`button`,className:`pws-notes-display`,onClick:()=>{n&&(s(e.note??``),d(``),a(!0))},disabled:!n,children:e.note||(0,Q.jsx)(`span`,{className:`muted`,children:r(`pws.notePlaceholder`)})})]})}function ut(e){return e.includes(`/`)?e.replaceAll(`/`,`-`):e}function dt(e,t){let n=ut(e);for(let r of t)if(r!==e&&ut(r)===n)return!0;return!1}function ft({item:e,apiBase:n,availableModels:r,hasLiveModels:i,selectedModels:a,modelsLoading:o=!1,modelsLoadFailed:s=!1,needsReauth:c=!1,onRetryModels:l,onOpenAccounts:u}){let d=t(),[f,p]=(0,Z.useState)(``),[m,h]=(0,Z.useState)(``),[g,_]=(0,Z.useState)(!1),[v,y]=(0,Z.useState)(``),[b,x]=(0,Z.useState)(``),[S,C]=(0,Z.useState)([]),[w,T]=(0,Z.useState)(!1),[E,D]=(0,Z.useState)(!1),[O,k]=(0,Z.useState)(0),[A,j]=(0,Z.useState)(null),M=(0,Z.useRef)(null),N=(0,Z.useMemo)(()=>new Set(a),[a]),P=(0,Z.useMemo)(()=>e.models??[],[e.models]),F=m.trim(),I=[...r,...S,...P,...e.defaultModel?[e.defaultModel]:[]],L=!w||!F||r.includes(F)||S.includes(F)||P.includes(F)||e.defaultModel===F||dt(F,I),R=(0,Z.useMemo)(()=>Ke(r,e.defaultModel,f,P,S,i),[r,e.defaultModel,f,P,S,i]);(0,Z.useEffect)(()=>{let t=!0;return(async()=>{try{let r=await fetch(`${n}/api/custom-models`);if(!r.ok)throw Error();let i=await r.json();if(!Array.isArray(i))throw Error(`Invalid custom model list`);if(!t)return;C(i.flatMap(t=>{if(!t||typeof t!=`object`)return[];let n=t;return n.provider===e.name&&typeof n.modelId==`string`?[n.modelId]:[]})),D(!1),y(``),T(!0)}catch{if(!t)return;C([]),T(!1),D(!0),y(d(`models.networkError`))}})(),()=>{t=!1}},[n,e.name,d,O]);let z=()=>{T(!1),D(!1),y(``),k(e=>e+1)};(0,Z.useEffect)(()=>()=>{M.current!=null&&window.clearTimeout(M.current)},[]);let B=async e=>{try{await navigator.clipboard.writeText(e),j(e),M.current!=null&&window.clearTimeout(M.current),M.current=window.setTimeout(()=>{j(t=>t===e?null:t),M.current=null},1200)}catch{}},V=async()=>{if(!(L||g)){_(!0),y(``),x(``);try{(await fetch(`${n}/api/custom-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.name,modelId:F})})).ok?(C(e=>e.includes(F)?e:[...e,F]),h(``),x(d(`models.customAdded`)),l?.()):y(d(`models.customSaveFailed`))}catch{y(d(`models.networkError`))}finally{_(!1)}}},H=r.length===0&&P.length===0&&S.length===0&&!e.defaultModel,U=e.liveModels!==!1&&r.length===0&&P.length>0,ee=R.length>300,W=ee?R.slice(0,300):R;return(0,Q.jsxs)(`div`,{className:`pws-section`,children:[(0,Q.jsxs)(`div`,{className:`pws-section-head`,children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:d(`pws.tab.models`)}),R.length>0&&(0,Q.jsx)(`span`,{className:`muted`,children:d(`pws.modelsAvailable`,{count:R.length})})]}),c&&(0,Q.jsxs)(`div`,{className:`pws-inline-error`,role:`status`,children:[(0,Q.jsx)(`span`,{children:d(`pws.modelsNeedsReauth`)}),u&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:u,children:d(`pws.tab.accounts`)})]}),U&&!c&&(0,Q.jsx)(`p`,{className:`muted text-label`,style:{marginBottom:10},children:d(`pws.modelsConfiguredFallback`)}),(0,Q.jsx)(`label`,{className:`text-label pws-custom-model-label`,htmlFor:`pws-custom-model-${e.name}`,children:d(`models.customAdd`)}),(0,Q.jsxs)(`div`,{className:`row pws-custom-model-row`,children:[(0,Q.jsx)(`input`,{id:`pws-custom-model-${e.name}`,className:`input`,value:m,onChange:e=>h(e.target.value),onKeyDown:e=>{e.key===`Enter`&&V()},placeholder:d(`models.customFieldModelIdPlaceholder`),"aria-label":d(`models.customAdd`),disabled:g}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:()=>{V()},disabled:g||L,children:d(g?`models.customSaving`:`models.customAddBtn`)})]}),b&&(0,Q.jsx)(`p`,{className:`muted text-label`,role:`status`,children:b}),v&&(0,Q.jsxs)(`p`,{className:`pws-inline-error`,role:`alert`,children:[v,E&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:z,style:{marginLeft:8},children:d(`common.retry`)})]}),!H&&(0,Q.jsx)(`input`,{type:`search`,className:`input pws-model-search`,placeholder:d(`pws.modelSearchPlaceholder`),value:f,onChange:e=>p(e.target.value),"aria-label":d(`pws.modelSearchPlaceholder`)}),o&&H?(0,Q.jsx)(`p`,{className:`muted`,role:`status`,children:d(`pws.modelsLoading`)}):s&&H?(0,Q.jsxs)(`div`,{role:`alert`,className:`pws-inline-error`,children:[(0,Q.jsx)(`span`,{children:d(`pws.modelsLoadFailed`)}),l&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:l,children:d(`pws.retry`)})]}):H?(0,Q.jsx)(`p`,{className:`muted`,children:d(`pws.noModels`)}):R.length===0?(0,Q.jsx)(`p`,{className:`muted`,role:`status`,children:d(`pws.noModelMatch`)}):(0,Q.jsx)(`ul`,{className:`pws-model-list`,children:W.map(t=>{let n=t===e.defaultModel,r=N.has(t);return(0,Q.jsxs)(`li`,{className:`pws-model-chip`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`pws-model-chip-main`,onClick:()=>{B(t)},title:t,"aria-label":d(A===t?`pws.modelCopied`:`pws.copyModelId`),children:(0,Q.jsx)(`span`,{className:`pws-model-id`,children:t})}),n?(0,Q.jsx)(`span`,{className:`badge badge-muted pws-model-flag`,children:d(`prov.defaultBadge`)}):null,r?(0,Q.jsx)(`span`,{className:`badge badge-accent pws-model-flag`,children:d(`pws.selected`)}):null]},t)})}),ee&&(0,Q.jsx)(`p`,{className:`muted text-label`,style:{marginTop:10},children:d(`pws.modelsTruncated`,{shown:`300`,total:String(R.length)})})]})}function pt({item:e,usageTotals:n,quotaReport:r,modelUsage:a,accounts:o,accountUsage:s}){let c=t(),{locale:l}=i(),u=ke(c),d=n?.requests!==void 0,f=He(r),[p,m]=(0,Z.useState)(null),[h,g]=(0,Z.useState)(`all`),_=(0,Z.useMemo)(()=>a?.length?a.toSorted((e,t)=>t.totalTokens-e.totalTokens):[],[a]),v=(0,Z.useMemo)(()=>{if(!_.length)return;let e=0,t=!1;for(let n of _)n.estimatedCostUsd!==void 0&&(e+=n.estimatedCostUsd,t=!0);return t?e:void 0},[_]),y=(0,Z.useMemo)(()=>h===`all`||!s?null:s.find(e=>e.accountLogLabel===h),[h,s]),b=(0,Z.useMemo)(()=>h===`all`?v:y?.estimatedCostUsd,[h,y,v]),x=(0,Z.useMemo)(()=>h===`all`?n?.requests:y?.requests,[h,y,n]),S=(0,Z.useMemo)(()=>h===`all`?n?.totalTokens:y?.totalTokens,[h,y,n]);return(0,Q.jsxs)(`div`,{className:`pws-section`,children:[(0,Q.jsxs)(`div`,{className:`pws-usage-block`,children:[(0,Q.jsxs)(`div`,{className:`pws-section-head`,children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:c(`pws.usageLast30d`)}),o&&o.length>1&&(0,Q.jsxs)(`div`,{className:`usage-segmented`,role:`tablist`,"aria-label":c(`pws.tab.accounts`),children:[(0,Q.jsx)(`button`,{type:`button`,className:`usage-segmented-btn ${h===`all`?`active`:``}`,onClick:()=>g(`all`),children:c(`pws.allAccounts`)||`All accounts`}),o.map(e=>{let t=e.alias||e.email||e.id.slice(0,8),n=h===e.id;return(0,Q.jsx)(`button`,{type:`button`,className:`usage-segmented-btn ${n?`active`:``}`,onClick:()=>g(e.id),children:t},e.id)})]})]}),d?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`pws-usage-metrics pws-usage-metrics-3`,role:`group`,"aria-label":c(`pws.usageLast30d`),children:[(0,Q.jsxs)(`div`,{className:`pws-usage-metric`,children:[(0,Q.jsx)(`span`,{className:`pws-usage-metric-value mono`,children:Pe(b,l)}),(0,Q.jsx)(`span`,{className:`muted pws-usage-metric-label`,children:c(`pws.estimatedCost`)})]}),(0,Q.jsxs)(`div`,{className:`pws-usage-metric`,children:[(0,Q.jsx)(`span`,{className:`pws-usage-metric-value`,children:Me(x,l)}),(0,Q.jsx)(`span`,{className:`muted pws-usage-metric-label`,children:c(`pws.metricRequests`)})]}),(0,Q.jsxs)(`div`,{className:`pws-usage-metric`,children:[(0,Q.jsx)(`span`,{className:`pws-usage-metric-value`,children:Ne(S,l)}),(0,Q.jsx)(`span`,{className:`muted pws-usage-metric-label`,children:c(`pws.metricTokens`)})]})]}),(0,Q.jsx)(`p`,{className:`muted pws-cost-disclaimer`,children:c(`pws.costDisclaimer`)})]}):(0,Q.jsx)(`p`,{className:`muted`,children:c(`pws.usageUnavailable`)})]}),_.length>0&&(0,Q.jsxs)(`div`,{className:`pws-usage-block`,children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:c(`pws.modelBreakdown`)}),(0,Q.jsx)(`div`,{className:`tbl-wrap`,children:(0,Q.jsxs)(`table`,{className:`pws-model-table`,children:[(0,Q.jsx)(`thead`,{children:(0,Q.jsxs)(`tr`,{children:[(0,Q.jsx)(`th`,{children:c(`pws.col.model`)}),(0,Q.jsx)(`th`,{className:`num`,children:c(`pws.col.cost`)}),(0,Q.jsx)(`th`,{className:`num`,children:c(`pws.col.tokens`)}),(0,Q.jsx)(`th`,{className:`num`,children:c(`pws.col.requests`)}),(0,Q.jsx)(`th`,{children:c(`pws.col.share`)})]})}),(0,Q.jsx)(`tbody`,{children:_.map(e=>{let t=e.model,n=p===t;return(0,Q.jsxs)(Z.Fragment,{children:[(0,Q.jsxs)(`tr`,{className:`pws-model-row`,children:[(0,Q.jsx)(`td`,{className:`mono`,children:(0,Q.jsx)(`button`,{type:`button`,className:`pws-model-expand`,"aria-expanded":n,onClick:()=>m(n?null:t),children:e.model})}),(0,Q.jsx)(`td`,{className:`num mono`,children:Pe(e.estimatedCostUsd,l)}),(0,Q.jsx)(`td`,{className:`num mono`,children:Ne(e.totalTokens,l)}),(0,Q.jsx)(`td`,{className:`num`,children:e.requests}),(0,Q.jsx)(`td`,{children:(0,Q.jsx)(`div`,{className:`pws-share-bar`,children:(0,Q.jsx)(`div`,{className:`pws-share-bar-fill`,style:{width:`${Math.round(e.shareRatio*100)}%`}})})})]}),n&&(0,Q.jsx)(`tr`,{className:`pws-model-detail`,children:(0,Q.jsx)(`td`,{colSpan:5,children:(0,Q.jsxs)(`div`,{className:`pws-model-detail-grid`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`muted`,children:c(`pws.tokenInput`)}),(0,Q.jsxs)(`span`,{className:`mono`,children:[` `,Ne(e.inputTokens,l)]})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`muted`,children:c(`pws.tokenOutput`)}),(0,Q.jsxs)(`span`,{className:`mono`,children:[` `,Ne(e.outputTokens,l)]})]})]})})})]},t)})})]})})]}),(0,Q.jsxs)(`div`,{className:`pws-usage-block`,children:[(0,Q.jsx)(`h3`,{className:`pws-section-title`,children:c(`pws.rateLimits`)}),f?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(K,{quota:f,plan:null,threshold:80,t:c,layout:`stacked`}),(0,Q.jsxs)(`dl`,{className:`pws-kv pws-usage-meta`,children:[r?.source?.trim()&&(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:c(`pws.stats.source`)}),(0,Q.jsx)(`dd`,{children:Ge(r.source)})]}),(0,Q.jsxs)(`div`,{className:`pws-kv-row`,children:[(0,Q.jsx)(`dt`,{children:c(`pws.stats.quotaUpdated`)}),(0,Q.jsx)(`dd`,{children:Oe(r?.updatedAt,u)})]})]})]}):(0,Q.jsx)(`p`,{className:`muted`,children:c(`pws.quotaUnavailable`)})]})]})}function mt({apiBase:e,accountCount:n}){let r=t(),[i,a]=(0,Z.useState)(null),[o,s]=(0,Z.useState)(`80`),[c,l]=(0,Z.useState)(`1`),[u,d]=(0,Z.useState)(!1),[f,p]=(0,Z.useState)(null),[m,h]=(0,Z.useState)(!1);(0,Z.useEffect)(()=>{let t=!1,n=new AbortController;return Promise.resolve().then(()=>fetch(`${e}/api/oauth/accounts/pool?provider=anthropic`,{signal:n.signal})).then(e=>{if(!e.ok)throw Error(`load`);return e.json()}).then(e=>{if(t)return;let n=typeof e.autoSwitchThreshold==`number`?e.autoSwitchThreshold:80,r=ie(e.stickyLimit);a({enabled:e.enabled===!0,threshold:n,strategy:te(e.strategy),stickyLimit:r}),s(String(n)),l(String(r)),h(!1)}).catch(()=>{t||n.signal.aborted||h(!0)}),()=>{t=!0,n.abort()}},[e]);let g=(0,Z.useCallback)(async t=>{let n=i;a({enabled:t.enabled,threshold:t.threshold,strategy:t.strategy,stickyLimit:t.stickyLimit}),d(!0),p(null);try{let n=await fetch(`${e}/api/oauth/accounts/pool`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({provider:`anthropic`,enabled:t.enabled,autoSwitchThreshold:t.threshold,strategy:t.strategy,stickyLimit:t.stickyLimit})});if(!n.ok)throw Error(`save`);let r=await n.json().catch(()=>null),i=te(r?.strategy??t.strategy),o=ie(r?.stickyLimit??t.stickyLimit);a({enabled:t.enabled,threshold:t.threshold,strategy:i,stickyLimit:o}),s(String(t.threshold)),l(String(o))}catch{p(r(`anthropicPool.saveFailed`)),n&&(a(n),s(String(n.threshold)),l(String(n.stickyLimit)))}finally{d(!1)}},[e,i,r]),_=i?.enabled===!0,v=i?.threshold??80,y=i?.strategy??`quota`,b=i?.stickyLimit??1,x=i===null&&!m,S=x||u||m||!_&&n<2;return(0,Q.jsxs)(`div`,{className:`card anthropic-pool-card`,"aria-busy":x||u,children:[(0,Q.jsxs)(`div`,{className:`card-row`,style:{alignItems:`flex-start`,gap:12},children:[(0,Q.jsxs)(`div`,{style:{flex:1},children:[(0,Q.jsx)(`strong`,{children:r(`anthropicPool.title`)}),(0,Q.jsx)(`div`,{className:`card-sub`,style:{marginTop:4},children:m?r(`anthropicPool.loadFailed`):x?r(`common.loading`):_?r(`anthropicPool.enabledDesc`,{threshold:v}):r(`anthropicPool.disabledDesc`)})]}),(0,Q.jsx)(`button`,{type:`button`,className:`toggle ${_?`on`:``}`,disabled:S,"aria-pressed":_,"aria-label":r(`anthropicPool.title`),title:r(_?`anthropicPool.on`:`anthropicPool.off`),onClick:()=>{g({enabled:!_,threshold:v,strategy:y,stickyLimit:b})},children:(0,Q.jsx)(`span`,{className:`toggle-knob`})})]}),(0,Q.jsx)(`div`,{role:`alert`,className:`card-sub anthropic-pool-card__notice`,children:r(`anthropicPool.experimentalWarning`)}),n<2&&(0,Q.jsx)(`div`,{className:`card-sub`,style:{marginTop:8},children:r(`anthropicPool.needTwoAccounts`)}),_&&i&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`label`,{className:`field anthropic-pool-card__field`,children:[(0,Q.jsx)(`span`,{className:`field-label`,children:r(`anthropicPool.threshold`)}),(0,Q.jsx)(`input`,{className:`input mono`,type:`number`,min:0,max:100,step:1,value:o,disabled:u,"aria-label":r(`anthropicPool.thresholdAria`),onChange:e=>s(e.target.value),onBlur:()=>{let e=Number(o);if(!Number.isInteger(e)||e<0||e>100){s(String(v)),p(r(`anthropicPool.thresholdInvalid`));return}e!==v&&g({enabled:!0,threshold:e,strategy:y,stickyLimit:b})}}),(0,Q.jsx)(`div`,{className:`card-sub`,style:{marginTop:4},children:r(`anthropicPool.thresholdHelp`)})]}),(0,Q.jsx)(U,{strategy:y,stickyDraft:c,disabled:u,strategySelectId:`anthropic-pool-strategy`,stickyInputId:`anthropic-pool-sticky-limit`,onStrategyChange:e=>{e!==y&&g({enabled:!0,threshold:v,strategy:e,stickyLimit:b})},onStickyDraftChange:l,onStickyCommit:e=>{let t=W(e??c);if(t===null){l(String(b)),p(r(`accountPool.stickyLimitInvalid`));return}if(t===b){l(String(t));return}g({enabled:!0,threshold:v,strategy:y,stickyLimit:t})}})]}),f&&(0,Q.jsx)(`div`,{role:`alert`,className:`card-sub`,style:{marginTop:8,color:`var(--danger, #c44)`},children:f})]})}function ht({serverDefault:e=!0}){let n=t(),[r,i]=(0,Z.useState)(ce);return(0,Q.jsxs)(`label`,{className:`open-browser-pref`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:!(r??e),onChange:e=>{let t=!e.target.checked;i(t),V(t)}}),(0,Q.jsxs)(`span`,{className:`open-browser-pref-copy`,children:[(0,Q.jsx)(`span`,{className:`text-label`,children:n(`prov.dontOpenBrowser`)}),(0,Q.jsx)(`span`,{className:`muted text-label`,children:n(`prov.dontOpenBrowserHint`)})]})]})}var gt=4e3,_t=262144,vt=[],yt=[];function bt({initialState:e,onUpdateProvider:n}){let r=t(),[i,a]=(0,Z.useState)(e),[o,s]=(0,Z.useState)(e),[c,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(``);e!==o&&(s(e),a(e));let p=i===`mixed`,m=async()=>{if(!n||c)return;let e=i!==!0;u(!0),f(``);try{let t=await n(`xai`,{xaiResponsesOptIn:e});if(!t.ok){f(t.error??r(`prov.updateFail`));return}a(t.xaiResponsesOptInState??e)}catch{f(r(`prov.networkError`))}finally{u(!1)}};return(0,Q.jsxs)(`div`,{className:`pwi-auth-optin-row`,children:[(0,Q.jsxs)(`div`,{className:`pwi-auth-optin-copy`,children:[(0,Q.jsx)(`span`,{className:`pwi-auth-optin-label`,children:r(`pws.xaiResponsesOptIn`)}),(0,Q.jsxs)(`span`,{className:`pwi-auth-row-secondary`,children:[r(`pws.xaiResponsesOptInDesc`),p&&(0,Q.jsxs)(`span`,{className:`pwi-auth-optin-mixed`,children:[` `,r(`pws.xaiResponsesOptInMixed`)]})]}),d&&(0,Q.jsx)(`span`,{className:`pwi-auth-optin-error`,role:`alert`,children:d})]}),(0,Q.jsx)(l,{on:i===!0,mixed:p,onClick:()=>{m()},disabled:!n||c,label:r(`pws.xaiResponsesOptIn`)})]})}var xt=new Set([`totalCount`,`importedCount`,`updatedCount`,`failedCount`,`unsupportedCount`,`results`]),St=new Set([`imported`,`updated`,`failed`,`unsupported`]),Ct={imported:new Set([`imported`]),updated:new Set([`updated`]),failed:new Set([`invalid_record`,`credential_rejected`,`identity_mismatch`,`missing_project`,`persist_failed`]),unsupported:new Set([`unsupported_provider`,`unsupported_format`])};function wt(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Tt(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}function Et(e){if(!wt(e)||Object.keys(e).some(e=>!xt.has(e)))return null;let{totalCount:t,importedCount:n,updatedCount:r,failedCount:i,unsupportedCount:a,results:o}=e;if(!Tt(t)||!Tt(n)||!Tt(r)||!Tt(i)||!Tt(a)||!Array.isArray(o)||o.length!==t||n+r+i+a!==t)return null;let s={imported:0,updated:0,failed:0,unsupported:0};for(let[e,t]of o.entries()){if(!wt(t)||Object.keys(t).some(e=>![`index`,`status`,`code`].includes(e)))return null;let n=String(t.status),r=String(t.code);if(t.index!==e||!St.has(n)||!Ct[n]?.has(r))return null;s[n]+=1}return s.imported!==n||s.updated!==r||s.failed!==i||s.unsupported!==a?null:{importedCount:n,updatedCount:r,failedCount:i,unsupportedCount:a}}function Dt({item:e,apiBase:n,oauth:r,accounts:a=vt,accountUsage:o,keys:s=yt,accountLoadState:c=`ready`,switchingAccountId:l=null,busy:u=!1,loginHint:d,authHandlers:f,onCodexActiveNeedsReauthChange:p,codexController:m,onUpdateProvider:h}){let g=t(),{locale:_}=i(),[v,y]=(0,Z.useState)(!1),[b,S]=(0,Z.useState)(``),[C,w]=(0,Z.useState)(!1),[T,E]=(0,Z.useState)(!1),[D,O]=(0,Z.useState)(`idle`),[A,j]=(0,Z.useState)(null),[M,L]=(0,Z.useState)(!1),z=(0,Z.useRef)(null),[B,V]=(0,Z.useState)(``),[U,ee]=(0,Z.useState)(!1),[W,G]=(0,Z.useState)(``),[te,ne]=(0,Z.useState)(!0);(0,Z.useEffect)(()=>{if(a.length===0){L(!1);return}if(!a.some(e=>e.quota==null&&!e.quotaUnavailable)){L(!1);return}L(!0);let e=window.setTimeout(()=>L(!1),gt);return()=>window.clearTimeout(e)},[a]);let re=ot({...e,hasApiKey:e.hasApiKey||s.length>0}),ie=re===`oauth-accounts`,q=re===`api-keys`;if(re===`codex-accounts`)return(0,Q.jsxs)(`section`,{className:`pwi-section pwi-auth-section`,"aria-label":g(`pws.availableAccounts`),children:[(0,Q.jsx)(`h3`,{className:`pwi-section-title`,children:g(`pws.availableAccounts`)}),(0,Q.jsx)(`div`,{className:`pwi-auth-body`,children:(0,Q.jsx)(H,{apiBase:n,embedded:!0,controller:m,onActiveNeedsReauthChange:p})})]});if(!re||!f)return null;let J=d?.provider===e.name?d:null,ae=async()=>{let t=B.trim();if(!(!t||U)){ee(!0),G(``);try{let r=await fetch(`${n}/api/oauth/login/code`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e.name,input:t})});if(!r.ok){let e=await r.json().catch(()=>({}));ne(!1),G(g(`prov.pasteFail`,{error:e.error||r.statusText}));return}V(``),ne(!0),G(g(`prov.pasteOk`))}catch{ne(!1),G(g(`modal.networkError`))}finally{ee(!1)}}},Y=a.length>0||r?.loggedIn===!0,X=a.find(e=>e.active&&e.needsReauth),ce=!!X,le=async()=>{let t=b.trim();if(t){w(!0);try{await f.onAddApiKey(e.name,t)&&(S(``),y(!1))}finally{w(!1)}}},ue=async t=>{if(!(!t||T)){E(!0),O(`idle`),j(null);try{if(!t.name.toLowerCase().endsWith(`.json`)||t.size>_t){O(`invalid`);return}let r;try{r=JSON.parse(await t.text())}catch{O(`invalid`);return}let i=await fetch(`${n}/api/oauth/accounts/import`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:`google-antigravity`,format:`cockpit-tools`,document:r})});if(!i.ok){O(`failed`);return}let a=Et(await i.json().catch(()=>null));if(!a){O(`failed`);return}j(a),O(`complete`);try{await f.onRetryAccounts?.(e.name)}catch{}}catch{O(`failed`)}finally{z.current&&(z.current.value=``),E(!1)}}};return(0,Q.jsxs)(`section`,{className:`pwi-section pwi-auth-section`,"aria-label":g(ie?`pws.availableAccounts`:`pws.apiKeys`),children:[(0,Q.jsx)(`h3`,{className:`pwi-section-title`,children:g(ie?`pws.availableAccounts`:`pws.apiKeys`)}),(0,Q.jsxs)(`div`,{className:`pwi-auth-body`,children:[e.name===`xai`&&(0,Q.jsx)(bt,{initialState:e.xaiResponsesOptInState??!1,onUpdateProvider:h}),ie&&(0,Q.jsxs)(Q.Fragment,{children:[e.name===`anthropic`&&(0,Q.jsx)(mt,{apiBase:n,accountCount:a.length}),e.name===`google-antigravity`&&(0,Q.jsxs)(`div`,{className:`pwi-auth-add-key`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{id:`cockpit-import-description`,className:`pwi-auth-row-secondary`,children:g(`pws.cockpitImportDescription`)}),(0,Q.jsx)(`label`,{className:`sr-only`,htmlFor:`cockpit-import-file`,children:g(`pws.cockpitImportFileLabel`)}),(0,Q.jsx)(`input`,{ref:z,id:`cockpit-import-file`,type:`file`,accept:`application/json,.json`,className:`sr-only`,"aria-describedby":`cockpit-import-description cockpit-import-status`,disabled:T,onChange:e=>{ue(e.currentTarget.files?.[0])}})]}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:T,onClick:()=>z.current?.click(),children:g(T?`pws.cockpitImporting`:`pws.cockpitImportChooseFile`)}),(0,Q.jsxs)(`div`,{id:`cockpit-import-status`,role:`status`,"aria-live":`polite`,children:[D===`invalid`&&g(`pws.cockpitImportInvalid`),D===`failed`&&g(`pws.cockpitImportFailed`),D===`complete`&&A&&g(`pws.cockpitImportComplete`,{imported:A.importedCount,updated:A.updatedCount,failed:A.failedCount,unsupported:A.unsupportedCount})]})]}),(0,Q.jsxs)(`div`,{className:`pwi-auth-status-row`,children:[(0,Q.jsx)(`span`,{className:`pwi-auth-dot ${ce?`pwi-auth-dot--warn`:Y?`pwi-auth-dot--ok`:`pwi-auth-dot--off`}`,"aria-hidden":`true`}),(0,Q.jsx)(`span`,{className:`pwi-auth-status-text`,children:Y?a.length>0?g(`pws.loggedInTitle`):r?.email??g(`pws.loggedInTitle`):r?.error||g(`pws.notLoggedInTitle`)}),(0,Q.jsxs)(`span`,{className:`pwi-auth-actions`,children:[X&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,disabled:u,onClick:()=>void f.onReauth(e.name,X.id),children:g(`pws.reauthenticate`)}),Y?(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void f.onLogout(e.name),children:g(`prov.logout`)}):(0,Q.jsxs)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,disabled:u,onClick:()=>void f.onLogin(e.name,!1),children:[u?(0,Q.jsx)(`span`,{className:`pwi-spin-inline`,"aria-hidden":`true`}):(0,Q.jsx)(x,{style:{width:13,height:13},"aria-hidden":`true`}),g(u?`prov.waitingBrowser`:`prov.login`)]})]})]}),!u&&(0,Q.jsx)(ht,{}),u&&J&&(0,Q.jsxs)(`div`,{className:`pwi-auth-wait`,children:[(0,Q.jsx)(`span`,{className:`pwi-spin-inline`,"aria-hidden":`true`}),(0,Q.jsxs)(`div`,{className:`pwi-auth-wait-copy`,children:[(0,Q.jsx)(`div`,{className:`pwi-auth-wait-title`,children:g(`prov.waitingBrowser`)}),(0,Q.jsx)(se,{hint:{url:J.url,deviceCode:J.deviceCode,instructions:J.instructions},paste:{value:B,busy:U,message:W,ok:te,onChange:V,onSubmit:()=>{ae()}}}),f.onCancelLogin&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void f.onCancelLogin?.(e.name),children:g(`common.cancel`)})]})]}),c===`loading`&&a.length===0&&(0,Q.jsxs)(`div`,{className:`pwi-auth-state`,role:`status`,children:[(0,Q.jsx)(`span`,{className:`pwi-spin-inline`,"aria-hidden":`true`}),g(`pws.accountsLoading`)]}),c===`error`&&(0,Q.jsxs)(`div`,{className:`pwi-auth-state pwi-auth-state--error`,role:`alert`,children:[(0,Q.jsx)(`span`,{children:g(`pws.accountsLoadFailed`)}),f.onRetryAccounts&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void f.onRetryAccounts?.(e.name),children:g(`pws.retryAccounts`)})]}),a.length>0&&(0,Q.jsx)(`ul`,{className:`pwi-auth-list`,children:a.map(t=>{let n=st(a,t,g),r=l===t.id,i=t.health?.status,s=!!t.needsReauth||P(i),c=F(i),d=I(t.id),p=N(g,t.health),m=oe(g,e.name,t.id,t.health),h=o?.find(e=>e.accountLogLabel===t.id);return(0,Q.jsxs)(`li`,{className:`pwi-auth-acct${t.active?` pwi-auth-acct--active`:``}`,children:[(0,Q.jsxs)(`div`,{className:`pwi-auth-row${t.active?` pwi-auth-row--active`:``}`,children:[(0,Q.jsxs)(`button`,{type:`button`,className:`pwi-auth-row-main`,onClick:()=>{!t.active&&!s&&!c&&!l&&f.onSwitchAccount(e.name,t)},"aria-current":t.active?`true`:void 0,"aria-label":`${n}${t.active?` — ${g(`pws.accountCurrent`)}`:``}`,disabled:!!(s||c||l&&!r),children:[(0,Q.jsx)(`span`,{className:`pwi-auth-dot ${s?`pwi-auth-dot--warn`:t.active?`pwi-auth-dot--ok`:`pwi-auth-dot--off`}`,"aria-hidden":`true`}),(0,Q.jsxs)(`span`,{className:`pwi-auth-row-copy`,children:[(0,Q.jsx)(`span`,{className:`pwi-auth-row-label`,children:n}),(0,Q.jsx)(`span`,{className:`pwi-auth-row-secondary`,children:[t.email,`${g(`prov.accountId`)}: ${d}`].filter(Boolean).join(` · `)}),m&&(0,Q.jsx)(`span`,{className:`pwi-auth-row-secondary faint`,children:m}),c&&(0,Q.jsx)(`span`,{className:`pwi-auth-row-secondary faint`,children:g(`pws.healthCooldownHint`)})]}),p&&(0,Q.jsx)(`span`,{className:R(i),children:p}),s&&!p&&(0,Q.jsx)(`span`,{className:`badge badge-amber`,children:g(`pws.reauth`)}),t.active&&(0,Q.jsx)(`span`,{className:`badge badge-primary`,children:g(`prov.accountActive`)}),h?.estimatedCostUsd!==void 0&&(0,Q.jsx)(`span`,{className:`badge badge-subtle mono`,title:g(`pws.estimatedCost`),children:Pe(h.estimatedCostUsd,_)}),r&&(0,Q.jsx)(`span`,{className:`badge badge-muted`,children:g(`pws.accountSwitching`)})]}),s&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:u||!!l,onClick:()=>void f.onReauth(e.name,t.id),children:g(`pws.reauthenticate`)}),c&&f.onClearCooldown&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:u||!!l,onClick:()=>void f.onClearCooldown?.(e.name,t.id),children:g(`pws.clearCooldown`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void f.onEditAlias(e.name,`oauth`,t.id,t.alias),children:g(`prov.editAlias`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm pwi-auth-row-remove`,"aria-label":`${g(`common.remove`)} — ${n}`,title:`${g(`common.remove`)} — ${n}`,disabled:!!l,onClick:()=>void f.onRemoveAccount(e.name,t),children:(0,Q.jsx)(k,{style:{width:13,height:13},"aria-hidden":`true`})})]}),(t.quota!=null||t.quotaUnavailable||M&&t.quota==null)&&(0,Q.jsx)(`div`,{className:`pwi-auth-acct-quota`,children:t.quotaUnavailable?(0,Q.jsx)(`p`,{className:`muted pwi-auth-acct-quota-stale`,children:g(`pws.accountQuotaUnavailable`)}):(0,Q.jsx)(K,{quota:t.quota??null,plan:null,threshold:80,t:g,layout:`stacked`,pending:t.quota==null})})]},t.id)})}),c===`ready`&&Y&&a.length===0&&(0,Q.jsx)(`div`,{className:`pwi-auth-state pwi-auth-state--empty`,children:g(`pws.noAccounts`)}),Y&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,style:{marginTop:8},onClick:()=>void f.onLogin(e.name,!0),disabled:u||!!l,children:g(`pws.addAccount`)})]}),q&&(0,Q.jsxs)(Q.Fragment,{children:[s.length>0&&(0,Q.jsx)(`ul`,{className:`pwi-auth-list`,children:s.map(t=>(0,Q.jsxs)(`li`,{className:`pwi-auth-row${t.active?` pwi-auth-row--active`:``}`,children:[(0,Q.jsxs)(`button`,{type:`button`,className:`pwi-auth-row-main`,onClick:()=>void f.onSwitchApiKey(e.name,t),disabled:t.active,children:[(0,Q.jsx)(`span`,{className:`pwi-auth-dot ${t.active?`pwi-auth-dot--ok`:`pwi-auth-dot--off`}`,"aria-hidden":`true`}),(0,Q.jsxs)(`span`,{className:`pwi-auth-row-copy`,children:[(0,Q.jsx)(`span`,{className:`pwi-auth-row-label`,children:t.label??t.masked}),t.label&&(0,Q.jsxs)(`code`,{className:`pwi-auth-row-secondary`,children:[t.masked,` · `,g(`prov.accountId`),`: `,t.id]})]}),t.active&&(0,Q.jsx)(`span`,{className:`badge badge-primary`,children:g(`prov.accountActive`)})]}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void f.onEditAlias(e.name,`api-key`,t.id,t.label),children:g(`prov.editAlias`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm pwi-auth-row-remove`,"aria-label":`${g(`common.remove`)} — ${t.label??t.masked}`,title:`${g(`common.remove`)} — ${t.label??t.masked}`,onClick:()=>void f.onRemoveApiKey(e.name,t),children:(0,Q.jsx)(k,{style:{width:13,height:13},"aria-hidden":`true`})})]},t.id))}),v?(0,Q.jsxs)(`div`,{className:`pwi-auth-add-key`,children:[(0,Q.jsx)(`input`,{className:`input`,type:`password`,value:b,onChange:e=>S(e.target.value),placeholder:g(`modal.apiKeyPlaceholder`),autoComplete:`off`,disabled:C}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:()=>void le(),disabled:C||!b.trim(),children:g(C?`pws.saving`:`pws.addKey`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>{y(!1),S(``)},children:g(`common.cancel`)})]}):(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,style:{marginTop:8},onClick:()=>y(!0),children:g(`pws.addKey`)})]})]})]})}function Ot(e,t,n){let r=e?.find(e=>e.id===t);if(!r)return n;if(r.baseUrl)return r.baseUrl;let i=new Set((e??[]).map(e=>e.baseUrl?.trim().replace(/\/+$/,``)).filter(e=>!!e)),a=n.trim().replace(/\/+$/,``);return i.has(a)?``:n}function kt(e,t){if(!e?.length)return`custom`;let n=t.trim().replace(/\/+$/,``);for(let t of e)if(t.baseUrl&&t.baseUrl.trim().replace(/\/+$/,``)===n)return t.id;return e.some(e=>e.id===`custom`)?`custom`:e[0].id}function At(e,t,n){let r=e?.find(e=>e.id===t);return r?.baseUrl?r.baseUrl.trim():n.trim()}var jt=[`openai-responses`,`openai-chat`,`anthropic`,`google`,`azure-openai`,`cursor`],Mt=[];function Nt(e){return e===`http1.1`||e===`h1`?`http1.1`:`http2`}function Pt(e){return e===void 0?``:String(e)}function Ft(e){if(!e.trim())return;let t=Number(e);return Number.isFinite(t)&&t>=1/60?t:void 0}function It(e){if(!e.trim())return;let t=Number(e);return Number.isSafeInteger(t)&&t>0?t:void 0}function Lt(e){if(!e.trim())return;let t=Number(e);return Number.isSafeInteger(t)&&t>=0&&t<=6e4?t:void 0}function Rt(e){let t=Object.entries(e?.models??{}).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,t.requestsPerMinute??null,t.minIntervalMs??null,t.jitterMs??null]);return JSON.stringify([e?.enabled===!0,e?.requestsPerMinute??null,e?.minIntervalMs??null,e?.jitterMs??null,t])}function zt({item:e,availableModels:n=Mt,apiBase:r,onUpdateProvider:i,onDirtyChange:a,onRegisterSave:o}){let s=t(),c=String(e.authMode??(e.keyOptional?`local`:`key`)),l=ue(e.name,e),d=l?e.liveModels!==!1:!1,f=Nt(e.upstreamHttpVersion),[p,m]=(0,Z.useState)(e.adapter),[h,g]=(0,Z.useState)(e.baseUrl),[_,y]=(0,Z.useState)(e.defaultModel??``),[b,S]=(0,Z.useState)(c),[C,w]=(0,Z.useState)(e.apiKeyTransport??`x-api-key`),[T,E]=(0,Z.useState)(e.note??``),[D,k]=(0,Z.useState)(e.allowPrivateNetwork??!1),[j,M]=(0,Z.useState)(e.replayTransientFailures??!1),[N,P]=(0,Z.useState)(d),[F,I]=(0,Z.useState)(f),[L,R]=(0,Z.useState)(!1),[z,B]=(0,Z.useState)(null),[V,H]=(0,Z.useState)(e.codexAccountMode??`pool`),[U,ee]=(0,Z.useState)(!1),[W,G]=(0,Z.useState)(null),[K,te]=(0,Z.useState)(),[ne,re]=(0,Z.useState)(r?`loading`:`idle`),[ie,q]=(0,Z.useState)(()=>`custom`),[ae,Y]=(0,Z.useState)(e.requestPacing?.enabled===!0),[X,oe]=(0,Z.useState)(()=>Pt(e.requestPacing?.requestsPerMinute)),[se,ce]=(0,Z.useState)(()=>Pt(e.requestPacing?.minIntervalMs)),[le,de]=(0,Z.useState)(()=>Pt(e.requestPacing?.jitterMs)),[fe,pe]=(0,Z.useState)(()=>({...e.requestPacing?.models??{}})),[me,he]=(0,Z.useState)(``),[ge,_e]=(0,Z.useState)(``),[ve,ye]=(0,Z.useState)(``),[be,xe]=(0,Z.useState)(``),[Se,Ce]=(0,Z.useState)(null),[we,Te]=(0,Z.useState)(e.tlsProfile);(0,Z.useEffect)(()=>{m(e.adapter),g(e.baseUrl),y(e.defaultModel??``),S(String(e.authMode??(e.keyOptional?`local`:`key`))),w(e.apiKeyTransport??`x-api-key`),E(e.note??``),k(e.allowPrivateNetwork??!1),M(e.replayTransientFailures??!1),P(d),I(f),Y(e.requestPacing?.enabled===!0),oe(Pt(e.requestPacing?.requestsPerMinute)),ce(Pt(e.requestPacing?.minIntervalMs)),de(Pt(e.requestPacing?.jitterMs)),pe({...e.requestPacing?.models??{}}),Te(e.tlsProfile),B(null),G(null),queueMicrotask(()=>q(kt(K,e.baseUrl)))},[e.adapter,e.baseUrl,e.defaultModel,e.authMode,e.apiKeyTransport,e.keyOptional,e.note,e.allowPrivateNetwork,e.replayTransientFailures,d,f,e.requestPacing,e.tlsProfile,K]),(0,Z.useEffect)(()=>{H(e.codexAccountMode??`pool`)},[e.codexAccountMode]),(0,Z.useEffect)(()=>{if(!r)return;let t=!1,n=e.name,i=e.baseUrl;return fetch(`${r}/api/provider-presets`).then(e=>u(e)).then(e=>{if(t)return;if(!e){te(void 0),re(`error`);return}let r=(e.providers??[]).find(e=>e.id===n)?.baseUrlChoices;te(r),re(`ready`),q(kt(r,i))}).catch(()=>{t||(te(void 0),re(`error`))}),()=>{t=!0}},[r,e.name]),(0,Z.useEffect)(()=>{if(!r)return;let t=!0,n=!1,i=()=>{if(n)return;n=!0;let i=O(1e4);fetch(`${r}/api/provider-request-pacing?name=${encodeURIComponent(e.name)}`,{signal:i.signal}).then(e=>u(e)).then(e=>{t&&e&&Ce(e)}).catch(()=>void 0).finally(()=>{i.clear(),n=!1})};i();let a=v(i,2e3);return()=>{t=!1,a()}},[r,e.name]);let Ee=(0,Z.useMemo)(()=>({enabled:ae,...Ft(X)===void 0?{}:{requestsPerMinute:Ft(X)},...It(se)===void 0?{}:{minIntervalMs:It(se)},...Lt(le)===void 0?{}:{jitterMs:Lt(le)},...Object.keys(fe).length>0?{models:fe}:{}}),[se,ae,le,fe,X]),De=p.trim()!==e.adapter||h.trim()!==e.baseUrl||_.trim()!==(e.defaultModel??``)||b!==String(e.authMode??(e.keyOptional?`local`:`key`))||p.trim()===`anthropic`&&b===`key`&&C!==(e.apiKeyTransport??`x-api-key`)||T.trim()!==(e.note??``)||D!==(e.allowPrivateNetwork??!1)||j!==(e.replayTransientFailures??!1)||N!==d||p.trim()===`cursor`&&F!==f,Oe=Rt(Ee)!==Rt(e.requestPacing),ke=we!==e.tlsProfile,Ae=De||Oe||ke;(0,Z.useEffect)(()=>(a?.(Ae),()=>a?.(!1)),[Ae,a]);let je=(0,Z.useMemo)(()=>{let t=new Set(n);return _.trim()&&t.add(_.trim()),e.defaultModel&&t.add(e.defaultModel),[...t].sort((e,t)=>e.localeCompare(t))},[n,_,e.defaultModel]),Me=(0,Z.useMemo)(()=>{let e=[...jt];return p&&!e.includes(p)&&e.unshift(p),e},[p]),Ne=A(e.name),Pe=ne===`ready`&&!!(K&&K.length>0),Fe=p.trim()===`anthropic`&&b===`key`,Le=e.name===`openai`?J(e):`invalid`,Re=Le===`ready`||Le===`disabled`,ze=Ne&&ne!==`error`,Be=async()=>{if(!i)return B({ok:!1,text:s(`pws.updatesUnavailable`)}),!1;if(U)return!1;let t=Pe?At(K,ie,h):h.trim();if(!p.trim()||!t)return B({ok:!1,text:s(`pws.adapterBaseRequired`)}),!1;if(ke&&we===`antigravity-browser`&&!window.confirm(s(`pws.antigravityTlsConfirm`)))return Te(e.tlsProfile),!1;R(!0),B(null);try{if(ae&&Ee.requestsPerMinute===void 0&&Ee.minIntervalMs===void 0&&Ee.jitterMs===void 0&&Ee.models===void 0)return B({ok:!1,text:s(`pws.pacingRuleRequired`)}),!1;let n=Oe&&!De&&!ke,r=n?{requestPacing:Ee}:{adapter:p.trim(),baseUrl:t,defaultModel:_.trim(),authMode:b,note:T.trim(),allowPrivateNetwork:D,replayTransientFailures:j,...Oe?{requestPacing:Ee}:{},...ke?{tlsProfile:we??null}:{}};n||(l&&N!==(e.liveModels!==!1)&&(r.liveModels=N),p.trim()===`cursor`&&F!==f&&(r.upstreamHttpVersion=F===`http1.1`?`http1.1`:null),Fe?r.apiKeyTransport=C:e.apiKeyTransport!==void 0&&(r.apiKeyTransport=``));let a=await i(e.name,r);return B(a.ok?{ok:!0,text:s(`pws.settingsSaved`)}:{ok:!1,text:a.error||s(`prov.saveFailed`)}),a.ok}finally{R(!1)}},$=(0,Z.useRef)(Be);(0,Z.useEffect)(()=>{$.current=Be}),(0,Z.useEffect)(()=>{if(o)return o(()=>$.current()),()=>o(null)},[o]);let Ve=async e=>{if(!(U||L||e===V)){if(!i){G({ok:!1,text:s(`pws.updatesUnavailable`)});return}ee(!0),G(null);try{let t=await i(`openai`,{codexAccountMode:e});t.ok?(H(e),G({ok:!0,text:s(`pws.accountModeSaved`)})):G({ok:!1,text:t.error||s(`pws.accountModeFailed`)})}catch{G({ok:!1,text:s(`pws.accountModeFailed`)})}finally{ee(!1)}}},He=()=>{m(e.adapter),g(e.baseUrl),y(e.defaultModel??``),S(c),w(e.apiKeyTransport??`x-api-key`),E(e.note??``),k(e.allowPrivateNetwork??!1),M(e.replayTransientFailures??!1),P(d),I(f),B(null),Y(e.requestPacing?.enabled===!0),oe(Pt(e.requestPacing?.requestsPerMinute)),ce(Pt(e.requestPacing?.minIntervalMs)),pe({...e.requestPacing?.models??{}}),de(Pt(e.requestPacing?.jitterMs)),xe(``),Te(e.tlsProfile),q(kt(K,e.baseUrl))},Ue=(e,t)=>{switch(e){case`token-plan`:return s(`modal.endpoint.tokenPlan`);case`payg`:return s(`modal.endpoint.payAsYouGo`);case`custom`:return s(`modal.endpoint.custom`);default:return t}};return(0,Q.jsxs)(`div`,{className:`pwi-settings-form`,children:[(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsxs)(`span`,{className:`pwi-settings-label`,children:[(0,Q.jsx)(x,{style:{width:12,height:12}}),` `,s(`pws.providerId`)]}),(0,Q.jsx)(`input`,{className:`input`,value:e.name,readOnly:!0,disabled:!0})]}),e.name===`google-antigravity`&&(0,Q.jsxs)(`section`,{className:`pwi-settings-field`,"aria-labelledby":`pwi-antigravity-tls-title`,children:[(0,Q.jsx)(`span`,{id:`pwi-antigravity-tls-title`,className:`pwi-settings-label`,children:s(`pws.antigravityTlsTitle`)}),(0,Q.jsxs)(`label`,{style:{display:`flex`,alignItems:`flex-start`,gap:8},children:[(0,Q.jsx)(`input`,{"data-testid":`antigravity-tls-profile`,type:`checkbox`,checked:we===`antigravity-browser`,onChange:e=>Te(e.target.checked?`antigravity-browser`:void 0),"aria-describedby":`pwi-antigravity-tls-help`}),(0,Q.jsx)(`span`,{children:s(`pws.antigravityTlsEnable`)})]}),(0,Q.jsx)(`div`,{id:`pwi-antigravity-tls-help`,role:`alert`,className:`card-sub`,style:{marginTop:10,padding:`10px 16px`,border:`1px solid var(--border, #c9a227)`,borderRadius:6,background:`color-mix(in srgb, var(--warn, #c9a227) 12%, transparent)`},children:s(`pws.antigravityTlsWarning`)}),(0,Q.jsx)(`span`,{"data-testid":`antigravity-tls-status`,role:`status`,className:`pwi-settings-hint`,children:s(`pws.antigravityTlsStatus`,{status:e.tlsProfileStatus===`active`?s(`pws.antigravityTlsActive`):e.tlsProfileStatus===`fallback`?s(`pws.antigravityTlsFallback`):s(`pws.antigravityTlsDisabled`)})})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`modal.adapter`)}),Ne?(0,Q.jsx)(`input`,{className:`input`,value:p,readOnly:!0,disabled:!0}):(0,Q.jsx)(`select`,{className:`input`,value:p,onChange:e=>m(e.target.value),children:Me.map(e=>(0,Q.jsx)(`option`,{value:e,children:e},e))})]}),Pe?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`modal.endpoint`)}),(0,Q.jsx)(`select`,{className:`input`,value:ie,onChange:e=>{let t=e.target.value;q(t),g(Ot(K,t,h))},children:K.map(e=>(0,Q.jsx)(`option`,{value:e.id,children:Ue(e.id,e.label)},e.id))})]}),ie===`custom`&&(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`modal.baseUrl`)}),(0,Q.jsx)(`input`,{className:`input`,value:h,onChange:e=>g(e.target.value),placeholder:s(`modal.baseUrlPlaceholder`)})]})]}):(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`modal.baseUrl`)}),(0,Q.jsx)(`input`,{className:`input`,value:h,onChange:e=>g(e.target.value),readOnly:ze,disabled:ze})]}),p.trim()===`cursor`&&(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.cursorTransport`)}),(0,Q.jsxs)(`select`,{className:`input`,value:F,onChange:e=>I(e.target.value),children:[(0,Q.jsx)(`option`,{value:`http2`,children:s(`pws.cursorTransportHttp2`)}),(0,Q.jsx)(`option`,{value:`http1.1`,children:s(`pws.cursorTransportHttp1`)})]}),(0,Q.jsx)(`span`,{className:`pwi-settings-hint`,children:s(`pws.cursorTransportDesc`)})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.cell.defaultModel`)}),je.length>0?(0,Q.jsxs)(`select`,{className:`input`,value:_,onChange:e=>y(e.target.value),children:[(0,Q.jsx)(`option`,{value:``,children:s(`pws.defaultModelNone`)}),je.map(e=>(0,Q.jsx)(`option`,{value:e,children:e},e))]}):(0,Q.jsx)(`input`,{className:`input`,value:_,onChange:e=>y(e.target.value),placeholder:s(`pws.optionalPlaceholder`)})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.authMode`)}),Ne?(0,Q.jsx)(`input`,{className:`input`,value:Ie(e,s),readOnly:!0,disabled:!0}):(0,Q.jsxs)(`select`,{className:`input`,value:b,onChange:e=>S(e.target.value),children:[(0,Q.jsx)(`option`,{value:`key`,children:s(`modal.badge.apiKey`)}),(0,Q.jsx)(`option`,{value:`forward`,children:s(`pws.auth.chatgptPassthrough`)}),(0,Q.jsx)(`option`,{value:`oauth`,children:s(`modal.badge.oauth`)}),(0,Q.jsx)(`option`,{value:`local`,children:s(`modal.badge.local`)})]})]}),Re&&(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`codexAuth.accountModeTitle`)}),(0,Q.jsxs)(`select`,{className:`input`,value:V,disabled:U||L,onChange:e=>{let t=e.target.value;if(t!==V){if(!window.confirm(s(`pws.accountModeConfirm`))){e.target.value=V;return}Ve(t)}},children:[(0,Q.jsx)(`option`,{value:`pool`,children:s(`codexAuth.accountModePool`)}),(0,Q.jsx)(`option`,{value:`direct`,children:s(`codexAuth.accountModeDirect`)})]}),(0,Q.jsx)(`span`,{className:`pwi-settings-hint`,children:s(V===`direct`?`codexAuth.accountModeDirectDesc`:`codexAuth.accountModePoolDesc`)}),U&&(0,Q.jsx)(`span`,{className:`muted text-label`,children:s(`pws.accountSwitching`)}),W&&(0,Q.jsx)(`span`,{role:W.ok?`status`:`alert`,className:W.ok?`pwi-settings-mode-msg pwi-settings-mode-msg--ok`:`pwi-settings-mode-msg pwi-settings-mode-msg--err`,children:W.text})]}),Fe&&(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`modal.apiKeyTransport`)}),(0,Q.jsxs)(`select`,{className:`input`,value:C,onChange:e=>w(e.target.value),children:[(0,Q.jsx)(`option`,{value:`x-api-key`,children:s(`modal.apiKeyTransportNative`)}),(0,Q.jsx)(`option`,{value:`bearer`,children:s(`modal.apiKeyTransportBearer`)})]})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.note`)}),(0,Q.jsx)(`textarea`,{className:`input pwi-settings-textarea`,value:T,onChange:e=>E(e.target.value),rows:2})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,style:{flexDirection:`row`,alignItems:`center`,gap:8},children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:D,onChange:e=>k(e.target.checked)}),(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.allowPrivateNetwork`)})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,style:{flexDirection:`row`,alignItems:`flex-start`,gap:8},children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:j,onChange:e=>M(e.target.checked)}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.replayTransientFailures`)}),(0,Q.jsx)(`span`,{className:`muted text-label`,style:{display:`block`},children:s(`pws.replayTransientFailuresDesc`)})]})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,style:{flexDirection:`row`,alignItems:`flex-start`,gap:8},children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:N,disabled:!l,onChange:e=>P(e.target.checked)}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.liveModels`)}),(0,Q.jsx)(`span`,{className:`muted text-label`,style:{display:`block`,marginTop:2},children:s(`pws.liveModelsDesc`)})]})]}),(0,Q.jsxs)(`section`,{className:`pwi-pacing-card`,"aria-labelledby":`pwi-pacing-title`,children:[(0,Q.jsxs)(`div`,{className:`pwi-pacing-head`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`h3`,{id:`pwi-pacing-title`,children:s(`pws.pacingTitle`)}),(0,Q.jsx)(`p`,{children:s(`pws.pacingDesc`)})]}),(0,Q.jsxs)(`label`,{className:`pwi-pacing-toggle`,children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:ae,onChange:e=>Y(e.target.checked)}),` `,s(`pws.pacingEnabled`)]})]}),(0,Q.jsxs)(`div`,{className:`pwi-pacing-grid`,children:[(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.pacingRpm`)}),(0,Q.jsx)(`input`,{className:`input`,type:`number`,min:`0.016667`,step:`any`,value:X,onChange:e=>oe(e.target.value),placeholder:`38`})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.pacingDelay`)}),(0,Q.jsx)(`input`,{className:`input`,type:`number`,min:`1`,step:`1`,value:se,onChange:e=>ce(e.target.value),placeholder:`1600`})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.pacingJitter`)}),(0,Q.jsx)(`input`,{className:`input`,type:`number`,min:`0`,max:`60000`,step:`1`,value:le,onChange:e=>de(e.target.value),placeholder:`500`})]})]}),(0,Q.jsx)(`p`,{className:`pwi-settings-hint`,children:s(`pws.pacingSlowerWins`)}),(0,Q.jsxs)(`div`,{className:`pwi-pacing-status`,"aria-live":`polite`,children:[(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`strong`,{children:Se?.queued??0}),` `,s(`pws.pacingQueued`)]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsxs)(`strong`,{children:[Se?.nextSlotInMs??0,` ms`]}),` `,s(`pws.pacingNextSlot`)]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(`strong`,{children:Se?.lastModelId??s(`pws.pacingNone`)}),` `,s(`pws.pacingLastModel`)]})]}),(0,Q.jsx)(`h4`,{children:s(`pws.pacingModelOverrides`)}),(0,Q.jsxs)(`div`,{className:`pwi-pacing-grid pwi-pacing-grid--model`,children:[(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.pacingModel`)}),(0,Q.jsx)(`input`,{className:`input`,list:`pacing-models-${e.name}`,value:me,onChange:e=>he(e.target.value)}),(0,Q.jsx)(`datalist`,{id:`pacing-models-${e.name}`,children:n.map(e=>(0,Q.jsx)(`option`,{value:e},e))})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.pacingRpm`)}),(0,Q.jsx)(`input`,{className:`input`,type:`number`,min:`0.016667`,step:`any`,value:ge,onChange:e=>_e(e.target.value)})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.pacingDelay`)}),(0,Q.jsx)(`input`,{className:`input`,type:`number`,min:`1`,step:`1`,value:ve,onChange:e=>ye(e.target.value)})]}),(0,Q.jsxs)(`label`,{className:`pwi-settings-field`,children:[(0,Q.jsx)(`span`,{className:`pwi-settings-label`,children:s(`pws.pacingJitter`)}),(0,Q.jsx)(`input`,{className:`input`,type:`number`,min:`0`,max:`60000`,step:`1`,value:be,onChange:e=>xe(e.target.value)})]}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>{let e=me.trim(),t=Ft(ge),n=It(ve),r=Lt(be);!e||t===void 0&&n===void 0&&r===void 0||(pe(i=>({...i,[e]:{...t===void 0?{}:{requestsPerMinute:t},...n===void 0?{}:{minIntervalMs:n},...r===void 0?{}:{jitterMs:r}}})),he(``),_e(``),ye(``),xe(``))},children:s(`pws.pacingAdd`)})]}),Object.entries(fe).length>0&&(0,Q.jsx)(`div`,{className:`pwi-pacing-overrides`,children:Object.entries(fe).map(([e,t])=>(0,Q.jsxs)(`div`,{className:`pwi-pacing-row`,children:[(0,Q.jsx)(`code`,{children:e}),(0,Q.jsxs)(`span`,{children:[t.requestsPerMinute===void 0?``:`${t.requestsPerMinute} ${s(`pws.pacingRpmUnit`)}`,t.requestsPerMinute!==void 0&&t.minIntervalMs!==void 0?` · `:``,t.minIntervalMs===void 0?``:`${t.minIntervalMs} ms`,t.jitterMs===void 0?``:` · ${t.jitterMs} ms`]}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>pe(t=>Object.fromEntries(Object.entries(t).filter(([t])=>t!==e))),"aria-label":s(`pws.pacingRemoveModel`,{model:e}),children:s(`pws.pacingRemove`)})]},e))})]}),Ae&&(0,Q.jsxs)(`div`,{className:`pwi-settings-sticky-bar`,children:[(0,Q.jsx)(`span`,{className:`muted`,children:s(`pws.settingsUnsavedBar`)}),(0,Q.jsxs)(`div`,{className:`pwi-settings-sticky-bar-actions`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:He,disabled:L,children:s(`pws.discardSettings`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,onClick:()=>void Be(),disabled:L||U,children:s(L?`pws.saving`:`pws.saveSettings`)})]})]}),z&&(0,Q.jsx)(`div`,{role:z.ok?`status`:`alert`,className:z.ok?`pwi-settings-msg pwi-settings-msg--ok`:`pwi-settings-msg pwi-settings-msg--err`,children:z.text})]})}function Bt({providerName:e,defaultProviderName:n,onConfirm:r,onCancel:i}){let a=t();return(0,Q.jsx)(`div`,{className:`dialog-backdrop`,onClick:i,children:(0,Q.jsxs)(`div`,{className:`dialog`,role:`alertdialog`,"aria-label":a(`pws.removeConfirmTitle`),onClick:e=>e.stopPropagation(),children:[(0,Q.jsx)(`h3`,{children:a(`pws.removeConfirmTitle`)}),(0,Q.jsx)(`p`,{children:n?a(`pws.removeDefaultConfirmBody`,{name:e,defaultProvider:n}):a(`pws.removeConfirmBody`,{name:e})}),(0,Q.jsxs)(`div`,{className:`dialog-actions`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:i,children:a(`common.cancel`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:r,children:a(`pws.removeConfirm`)})]})]})})}function Vt({onSave:e,onDiscard:n,onCancel:r,saving:i=!1}){let a=t();return(0,Q.jsx)(`div`,{className:`dialog-backdrop`,onClick:r,children:(0,Q.jsxs)(`div`,{className:`dialog`,role:`alertdialog`,"aria-label":a(`pws.unsavedLeaveTitle`),onClick:e=>e.stopPropagation(),children:[(0,Q.jsx)(`h3`,{children:a(`pws.unsavedLeaveTitle`)}),(0,Q.jsx)(`p`,{children:a(`pws.unsavedLeaveBody`)}),(0,Q.jsxs)(`div`,{className:`dialog-actions`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:r,children:a(`common.cancel`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:n,children:a(`pws.discardSettings`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:e,disabled:i,children:a(i?`pws.saving`:`pws.saveSettings`)})]})]})})}function Ht({item:e,usageTotals:n,modelUsage:r,accountUsage:i,quotaReport:o,availableModels:s,hasLiveModels:c,selectedModels:u,modelsLoading:d,modelsLoadFailed:f,onRetryModels:p,oauthEmail:m,onDeselect:h,apiBase:_,oauth:v,accounts:y,accountLoadState:b,accountsFocusToken:x=0,accountsFocusProvider:S=null,switchingAccountId:C,keys:w,busyProvider:T,loginHint:E,authHandlers:D,onCodexActiveNeedsReauthChange:O,codexController:A,onUpdateProvider:j,isDefault:M,onRemoveProvider:N,onSetDisabled:P,onSetDefault:F}){let I=t(),[L,R]=(0,Z.useState)(`overview`),[z,B]=(0,Z.useState)(!1),[V,H]=(0,Z.useState)(null),[U,ee]=(0,Z.useState)(!1),W=(0,Z.useRef)(null),[G,K]=(0,Z.useState)(0),te=(0,Z.useCallback)(e=>{W.current=e},[]),ne=e.disabled===!0,re=(0,Z.useMemo)(()=>ge(e),[e]),ie=(0,Z.useMemo)(()=>ye(e),[e]),q=(0,Z.useMemo)(()=>ot(e),[e]),J=S===e.name?x:0,ae=JSON.stringify([A?.activeId??``,y?.find(e=>e.active)?.id??``,w?.find(e=>e.active)?.id??``,v?.loggedIn===void 0?``:String(v.loggedIn),v?.needsReauth===void 0?``:String(v.needsReauth),m??``]),Y=(0,Z.useMemo)(()=>[{id:`overview`,label:I(`pws.tab.overview`)},{id:`models`,label:I(`pws.tab.models`)},{id:`usage`,label:I(`pws.tab.usage`)},...q?[{id:`accounts`,label:I(q===`api-keys`?`pws.apiKeys`:`pws.tab.accounts`)}]:[],{id:`settings`,label:I(`pws.tab.settings`)}],[q,I]),X=(0,Z.useCallback)(e=>{if(z&&L===`settings`&&e!==`settings`){H(e);return}R(e)},[L,z]);J!==G&&!(J&&!q)&&(K(J),J&&q&&(z&&L===`settings`?H(`accounts`):R(`accounts`)));let oe=(0,Z.useCallback)(()=>{if(z&&L===`settings`){H(`deselect`);return}h()},[z,L,h]),se=(0,Z.useCallback)((e,t)=>{let n;if(e.key===`ArrowRight`)n=(t+1)%Y.length;else if(e.key===`ArrowLeft`)n=(t-1+Y.length)%Y.length;else if(e.key===`Home`)n=0;else if(e.key===`End`)n=Y.length-1;else return;e.preventDefault(),X(Y[n].id),e.currentTarget.parentElement?.querySelectorAll(`[role="tab"]`)[n]?.focus()},[X,Y]),ce=`pws-tab-${L}`,le=`pws-panel-${L}`;return(0,Q.jsxs)(`div`,{className:`pws-detail`,children:[(0,Q.jsx)(`div`,{className:`pws-detail-head`,children:(0,Q.jsxs)(`button`,{type:`button`,className:`pws-detail-back-link`,onClick:oe,children:[(0,Q.jsx)(g,{className:`pws-detail-back-chevron`,"aria-hidden":`true`}),I(`pws.allProviders`)]})}),(0,Q.jsxs)(`div`,{className:`pws-detail-head-main`,children:[(0,Q.jsx)(Re,{name:e.name,adapter:e.adapter,baseUrl:e.baseUrl,cls:`pws-detail-icon`}),(0,Q.jsx)(`div`,{className:`pws-detail-title-wrap`,children:(0,Q.jsxs)(`h2`,{className:`pws-detail-title`,children:[a(e.name,I),ie&&(0,Q.jsx)(`span`,{className:`pwi-rail-badge pwi-rail-badge--local`,children:I(`modal.badge.local`)}),!ie&&re&&(0,Q.jsx)(`span`,{className:`pwi-rail-badge pwi-rail-badge--free`,children:I(`modal.badge.free`)})]})}),(0,Q.jsxs)(`div`,{className:`pws-detail-actions`,children:[!M&&!ne&&F&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>F(e.name),children:I(`prov.setDefault`)}),N&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm btn-icon-only`,onClick:()=>N(e.name),"aria-label":I(`pws.removeConfirmTitle`),title:I(`pws.removeConfirmTitle`),children:(0,Q.jsx)(k,{style:{width:15,height:15},"aria-hidden":`true`})}),P&&(0,Q.jsxs)(`div`,{className:`pws-detail-toggle`,children:[(0,Q.jsx)(`span`,{className:`pws-detail-toggle-label`,children:I(`pws.enabledLabel`)}),(0,Q.jsx)(l,{on:!ne,onClick:()=>P(e.name,!ne),disabled:M,label:I(`pws.enabledLabel`)})]})]})]}),(0,Q.jsx)(`div`,{className:`pws-detail-tabs`,role:`tablist`,children:Y.map((e,t)=>(0,Q.jsx)(`button`,{type:`button`,role:`tab`,id:`pws-tab-${e.id}`,"aria-controls":`pws-panel-${e.id}`,"aria-selected":L===e.id,tabIndex:L===e.id?0:-1,className:`pws-detail-tab${L===e.id?` pws-detail-tab--active`:``}`,onClick:()=>X(e.id),onKeyDown:e=>se(e,t),children:e.label},e.id))}),(0,Q.jsxs)(`div`,{className:`pws-detail-panel`,role:`tabpanel`,id:le,"aria-labelledby":ce,tabIndex:0,children:[L===`overview`&&(0,Q.jsx)(ct,{item:e,apiBase:_,connectionIdentity:ae,usageTotals:n,quotaReport:o,oauthEmail:m,oauth:v,onEditSettings:()=>X(`settings`),onViewUsage:()=>X(`usage`),onUpdateProvider:j,reauthBusy:T===e.name,onCancelLogin:D?.onCancelLogin?()=>void D.onCancelLogin?.(e.name):void 0,onReauthenticate:e.activeNeedsReauth?()=>{if(e.authMode===`oauth`){let t=y??[],n=t.find(e=>e.active&&e.needsReauth)??t.find(e=>e.needsReauth);D?.onReauth(e.name,n?.id);return}X(`accounts`)}:void 0}),L===`models`&&(0,Q.jsx)(ft,{item:e,apiBase:_,availableModels:s,hasLiveModels:c,selectedModels:u,modelsLoading:d,modelsLoadFailed:f,needsReauth:(y??[]).some(e=>e.active&&e.needsReauth)||v?.needsReauth===!0,onRetryModels:p,onOpenAccounts:q?()=>X(`accounts`):void 0},e.name),L===`usage`&&(0,Q.jsx)(pt,{item:e,usageTotals:n,quotaReport:o,modelUsage:r,accounts:y,accountUsage:i}),L===`accounts`&&(0,Q.jsx)(Dt,{item:e,apiBase:_,oauth:v,accounts:y,accountUsage:i,keys:w,accountLoadState:b,switchingAccountId:C,busy:T===e.name,loginHint:E,authHandlers:D,onUpdateProvider:j,onCodexActiveNeedsReauthChange:O,codexController:A}),L===`settings`&&(0,Q.jsx)(zt,{item:e,apiBase:_,availableModels:s,onUpdateProvider:j,onDirtyChange:B,onRegisterSave:te},e.name)]}),V&&(0,Q.jsx)(Vt,{saving:U,onCancel:()=>{U||H(null)},onDiscard:()=>{if(U)return;let e=V;H(null),B(!1),e===`deselect`?h():R(e)},onSave:()=>{(async()=>{if(!U){ee(!0);try{if(!(await W.current?.()??!1))return;let e=V;H(null),B(!1),e===`deselect`?h():e&&R(e)}finally{ee(!1)}}})()}})]})}var Ut=new Set([`anthropic`,`google-antigravity`]),Wt=new Set([`github-copilot`,`cursor`]);function Gt(e){let t=e.trim().toLowerCase();return Ut.has(t)?`high`:Wt.has(t)?`elevated`:null}function Kt(e){switch(e){case`high`:return`oauthTos.highTitle`;case`elevated`:return`oauthTos.elevatedTitle`;default:return e}}function qt(e){switch(e){case`high`:return`oauthTos.highBody`;case`elevated`:return`oauthTos.elevatedBody`;default:return e}}function Jt(e,t=!1){let n={};for(let[t,r]of Object.entries(e)){let e=r.accounts.find(e=>e.active)??r.accounts.find(e=>e.id===r.activeAccountId);L(e)&&(n[t]=!0)}return t&&(n.openai=!0),n}function Yt(e){let{apiBase:t,t:n,config:r,aliveRef:i,notify:a,fetchConfig:o,fetchOauth:s,fetchProviderQuotas:c,codexActiveNeedsReauth:l}=e,[u,d]=(0,Z.useState)({}),[f,p]=(0,Z.useState)({}),[m,h]=(0,Z.useState)(null),[g,_]=(0,Z.useState)({}),[v,y]=(0,Z.useState)({}),[b,x]=(0,Z.useState)(null),[S,C]=(0,Z.useState)(``),w=(0,Z.useRef)({}),T=(0,Z.useRef)(null),E=(0,Z.useRef)(null),D=(0,Z.useRef)(null),O=(0,Z.useCallback)(async e=>{let n=[...new Set(e)];return p(e=>{let t={...e};for(let e of n)t[e]=`loading`;return t}),(await Promise.all(n.map(async e=>{let n=(w.current[e]??0)+1;w.current[e]=n;try{let r=await fetch(`${t}/api/oauth/accounts?provider=${encodeURIComponent(e)}`);if(!r.ok)throw Error(String(r.status));let a=await r.json();return!i.current||w.current[e]!==n||(d(t=>({...t,[e]:{activeAccountId:a.activeAccountId??null,accounts:a.accounts??[]}})),p(t=>({...t,[e]:`ready`})),(async()=>{try{let r=await fetch(`${t}/api/oauth/accounts?provider=${encodeURIComponent(e)}"a=1`);if(!r.ok)return;let o=await r.json();if(!i.current||w.current[e]!==n)return;d(t=>({...t,[e]:{activeAccountId:o.activeAccountId??a.activeAccountId??null,accounts:o.accounts??a.accounts??[]}}))}catch{}})(),!0)}catch{return!i.current||w.current[e]!==n||(p(t=>({...t,[e]:`error`})),!1)}}))).every(Boolean)},[i,t]),k=(0,Z.useCallback)(async e=>{let n=await Promise.all(e.map(async e=>[e,(await fetch(`${t}/api/providers/keys?name=${encodeURIComponent(e)}`).then(async e=>{if(!e.ok)throw Error(String(e.status));return e.json()}).catch(()=>null))?.keys??[]]));y(Object.fromEntries(n))},[t]),A=async(e,r)=>{if(r.active||r.needsReauth||D.current)return;let o={provider:e,accountId:r.id};D.current=o,h(o);let l=st(u[e]?.accounts??[r],r,n);try{if(!(await fetch(`${t}/api/oauth/accounts/active`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e,accountId:r.id})})).ok){a(n(`prov.accountSwitchFail`),!1);return}let i=await O([e]);if(await Promise.all([s(),c(!0)]),!i){a(n(`pws.accountsLoadFailed`),!1);return}a(n(`prov.accountSwitched`,{email:l}),!0)}catch{a(n(`prov.accountSwitchFail`),!1)}finally{D.current?.provider===o.provider&&D.current.accountId===o.accountId&&(D.current=null,i.current&&h(null))}},j=async(e,r)=>{if(r.active)return;let i=await fetch(`${t}/api/providers/keys/active`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e,id:r.id})});if(i.ok)a(n(`prov.keySwitched`,{key:r.label??r.masked}),!0),k(Object.keys(v)),c(!0);else{let e=await i.json().catch(()=>({}));a(e.error||n(`prov.keySwitchFail`),!1)}},M=async(e,r)=>{window.confirm(n(`prov.keyRemoveConfirm`,{key:r.label??r.masked}))&&(await fetch(`${t}/api/providers/keys?name=${encodeURIComponent(e)}&id=${encodeURIComponent(r.id)}`,{method:`DELETE`})).ok&&(a(n(`prov.keyRemoved`,{key:r.label??r.masked}),!0),k(Object.keys(v)),o(),c(!0))},N=async(e,r)=>{let i=r.trim();if(!i)return!1;try{let r=await fetch(`${t}/api/providers/keys`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e,key:i})});if(!r.ok){let e=await r.json().catch(()=>({}));return a(e.error||n(`prov.keyAddFail`),!1),!1}return a(n(`prov.keyAdded`,{name:e}),!0),x(null),await Promise.all([k(Object.keys(v).includes(e)?Object.keys(v):[...Object.keys(v),e]),o(),c(!0)]),!0}catch{return a(n(`prov.keyAddFail`),!1),!1}},P=async e=>{await N(e,S)&&C(``)},F=async(e,r,i,o)=>{let s=window.prompt(n(`prov.aliasPrompt`),o??``);if(s===null)return;let c=s.trim(),l=await fetch(r===`oauth`?`${t}/api/oauth/accounts/alias`:`${t}/api/providers/keys/alias`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r===`oauth`?{provider:e,accountId:i,alias:c}:{name:e,id:i,alias:c})});if(!l.ok){let e=await l.json().catch(()=>({}));a(e.error||n(`prov.aliasSaveFailed`),!1);return}r===`oauth`?await O([e]):await k(Object.keys(v).includes(e)?Object.keys(v):[...Object.keys(v),e]),a(n(`prov.aliasSaved`),!0)},I=async(e,r)=>{try{(await fetch(`${t}/api/oauth/accounts/clear-cooldown`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e,accountId:r})})).ok?(a(n(`prov.cooldownCleared`),!0),await O([e])):a(n(`prov.cooldownClearFailed`),!1)}catch{a(n(`prov.cooldownClearFailed`),!1)}},L=async(e,r)=>{let i=st(u[e]?.accounts??[r],r,n);if(window.confirm(n(`prov.accountRemoveConfirm`,{email:i})))try{if(!(await fetch(`${t}/api/oauth/accounts?provider=${encodeURIComponent(e)}&id=${encodeURIComponent(r.id)}`,{method:`DELETE`})).ok){a(n(`prov.accountRemoveFail`,{email:i}),!1);return}a(n(`prov.accountRemoved`,{email:i}),!0),await O([e]),await Promise.all([s(),c(!0)])}catch{a(n(`prov.accountRemoveFail`,{email:i}),!1)}},R=(0,Z.useMemo)(()=>r?Object.entries(r.providers).filter(([,e])=>e.authMode===`oauth`).map(([e])=>e):[],[r]);(0,Z.useEffect)(()=>{if(R.length===0)return;let e=R.join(`,`);T.current!==e&&(T.current=e,Promise.resolve().then(()=>{O(R)}))},[O,R]);let z=(0,Z.useMemo)(()=>r?Object.entries(r.providers).filter(([,e])=>e.hasApiKey&&e.authMode!==`oauth`&&e.authMode!==`forward`).map(([e])=>e):[],[r]);return(0,Z.useEffect)(()=>{if(z.length===0)return;let e=z.join(`,`);E.current!==e&&(E.current=e,Promise.resolve().then(()=>{k(z)}))},[k,z]),{accountSets:u,accountLoadStates:f,switchingAccount:m,openAccounts:g,keyPools:v,addingKeyFor:b,newKeyValue:S,setAccountSets:d,setAccountLoadStates:p,setSwitchingAccount:h,setOpenAccounts:_,setKeyPools:y,setAddingKeyFor:x,setNewKeyValue:C,fetchAccountSets:O,fetchKeyPools:k,switchAccount:A,switchApiKey:j,removeApiKey:M,addApiKeyValue:N,addApiKey:P,editCredentialAlias:F,removeAccount:L,clearCooldown:I,oauthCardProviders:R,keyCardProviders:z,activeAccountNeedsReauth:(0,Z.useMemo)(()=>Jt(u,l),[u,l])}}function Xt(e){let{apiBase:t,config:n,notify:r,fetchConfig:i,fetchProviderQuotas:a,onSaved:o,t:s}=e,[c,l]=(0,Z.useState)(!1),[u,d]=(0,Z.useState)(``),[f,p]=(0,Z.useState)(!1),[m,h]=(0,Z.useState)(``),[g,_]=(0,Z.useState)(!1),[v,y]=(0,Z.useState)(!1),b=(0,Z.useRef)(!1);(0,Z.useEffect)(()=>{n&&!b.current&&d(JSON.stringify(n,null,2))},[n]);let x=(0,Z.useCallback)(async()=>{_(!0);try{let e=JSON.parse(u),n=await fetch(`${t}/api/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!n.ok){let e=await n.json().catch(()=>({}));return r(e.error||s(`prov.saveFailed`),!1),!1}return r(s(`prov.saved`),!0),l(!1),p(!1),b.current=!1,y(!1),h(JSON.stringify(e,null,2)),i(),a(!0),o(),!0}catch{return r(s(`prov.invalidJson`),!1),!1}finally{_(!1)}},[t,u,i,a,r,o,s]),S=(0,Z.useCallback)(()=>{let e=n?JSON.stringify(n,null,2):u;h(e),d(e),y(!1),p(!0),b.current=!0},[n,u]),C=(0,Z.useCallback)(()=>{y(!1),p(!1),b.current=!1;let e=n?JSON.stringify(n,null,2):m;h(e),d(e)},[n,m]);return{editing:c,setEditing:l,draft:u,setDraft:d,jsonEditorOpen:f,jsonBaseline:m,jsonSaving:g,jsonLeaveOpen:v,jsonEditorOpenRef:b,saveConfig:x,openJsonEditor:S,discardJsonEditor:C,requestCloseJsonEditor:(0,Z.useCallback)(()=>{if(f&&u!==m){y(!0);return}C()},[C,u,m,f]),restoreJsonEditor:(0,Z.useCallback)(()=>{d(m)},[m]),jsonIsDirty:f&&u!==m,setJsonLeaveOpen:y}}var Zt={xai:`xAI (Grok)`,anthropic:`Anthropic (Claude)`,kimi:`Kimi (Moonshot)`,"google-antigravity":`Google Antigravity`,"github-copilot":`GitHub Copilot`,cursor:`Cursor`},Qt=e=>Zt[e]??e;function $t({apiBase:e,t,aliveRef:n,accountSets:r,setAccountSets:i,setBusy:a,setStatus:o,setLoginInfo:s,setOauthStatus:c,notify:l,fetchConfig:d,fetchOauth:f,fetchAccountSets:p,fetchProviderQuotas:m,bumpModelsRefresh:h,onLoginSettled:g}){let _=(0,Z.useRef)(null);_.current===null&&(_.current=new Map);let v=(0,Z.useCallback)(e=>{let t=(_.current.get(e)??0)+1;return _.current.set(e,t),t},[]);return{cancelLoginOAuth:(0,Z.useCallback)(async r=>{let i=v(r);try{await fetch(`${e}/api/oauth/login/cancel`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:r})})}catch{}n.current&&(_.current.get(r)===i&&(a(e=>e===r?null:e),s(e=>e?.provider===r?null:e)),l(t(`prov.loginCancelled`,{provider:Qt(r)}),!1))},[n,e,v,l,a,s,t]),loginOAuth:async(f,y=!1,b)=>{let x=v(f),S=b?.trim()||void 0;a(f),o(``),s(null);try{let a=await fetch(`${e}/api/oauth/login`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:f,...X(),...y||S?{addAccount:!0}:{},...S?{accountId:S,reauth:!0}:{}})});if(_.current.get(f)!==x||!n.current)return;if(!a.ok){l((await a.json().catch(()=>({}))).error||t(`prov.loginFailStart`,{provider:Qt(f)}),!1);return}let o=await a.json();(o.url||o.instructions||o.deviceCode)&&s({provider:f,url:o.url,instructions:o.instructions,deviceCode:o.deviceCode});let v=r[f]?.accounts.length??0,b=!1;for(let a=0;a<150&&n.current&&_.current.get(f)===x;a++){if(await new Promise(e=>setTimeout(e,2e3)),_.current.get(f)!==x||!n.current)return;let a=await fetch(`${e}/api/oauth/status?provider=${f}`).catch(()=>null),o=a?await u(a)??null:null;if(!o)continue;if(o.error){c(e=>({...e,[f]:o})),l(/cancel/i.test(o.error)?t(`prov.loginCancelled`,{provider:Qt(f)}):t(`prov.loginError`,{provider:Qt(f),error:o.error}),!1),s(null),b=!0;break}let C=o.accounts?.length??0;if(y||S?C>v||o.done===!0:o.loggedIn||o.done===!0){c(e=>({...e,[f]:o}));let e=S?o.accounts?.find(e=>e.id===S):o.accounts?.find(e=>e.active)??o.accounts?.find(e=>e.id===o.activeAccountId);if(S&&!e){l(t(`prov.loginError`,{provider:Qt(f),error:t(`prov.reauthAccountMissing`)}),!1),s(null),b=!0;break}if(e?.needsReauth){l(t(`prov.loginError`,{provider:Qt(f),error:t(`prov.reauthIdentityMismatch`)}),!1),s(null),b=!0;break}if(o.accounts){let e=o.accounts.find(e=>e.active)?.id??null;i(t=>({...t,[f]:{activeAccountId:o.activeAccountId??e,accounts:o.accounts}}))}s(null),g?.(f);let a=Object.keys(r);if(await p(new Set(a).has(f)?a:[...a,f]),!n.current||_.current.get(f)!==x)return;y&&!S&&C<=v?l(t(`prov.loginSameAccount`,{provider:Qt(f)}),!1):l(t(`prov.loginOk`,{provider:Qt(f),cmd:`ocx sync`}),!0),d(),m(!0),h(),b=!0;break}}!b&&_.current.get(f)===x&&n.current&&(await fetch(`${e}/api/oauth/login/cancel`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:f})}).catch(()=>{}),l(t(`prov.loginTimeout`,{provider:Qt(f)}),!1),s(null))}catch{_.current.get(f)===x&&l(t(`prov.loginRequestFail`,{provider:Qt(f)}),!1)}finally{n.current&&_.current.get(f)===x&&a(null)}},logoutOAuth:async n=>{v(n),a(e=>e===n?null:e),s(e=>e?.provider===n?null:e);try{if(!(await fetch(`${e}/api/oauth/logout?provider=${encodeURIComponent(n)}`,{method:`POST`})).ok){l(t(`prov.logoutFail`,{provider:Qt(n)}),!1);return}await Promise.all([p([n]),f(),d(),m(!0)]),h(),l(t(`prov.logoutOk`,{provider:Qt(n)}),!0)}catch{l(t(`prov.logoutFail`,{provider:Qt(n)}),!1)}}}}async function en(e,t){try{let t=await e.json();if(typeof t.error==`string`&&t.error.trim())return t.error.trim()}catch{}return t}function tn(e,t,n){switch(e.code){case`last_provider`:return t(`prov.removeLastProvider`);case`provider_has_dependent_combos`:return t(`prov.removeHasDependentCombos`,{combos:(Array.isArray(e.combos)?e.combos.filter(e=>typeof e==`string`).join(`, `):``)||`—`});case`default_provider_disabled`:return t(`prov.defaultDisabled`);default:return typeof e.error==`string`&&e.error.trim()?e.error.trim():n}}function nn({apiBase:e,t,removeBusyRef:n,workspaceSelected:r,setWorkspaceSelected:i,setRemoveConfirmName:a,notify:o,fetchConfig:s,fetchOauth:c,fetchProviderQuotas:l,refreshCodexAccount:u}){let d=(0,Z.useCallback)(async e=>{a(e)},[a]),f=(0,Z.useCallback)(async u=>{let d=u;if(!d||n.current)return;n.current=!0,a(null);let f=t(`prov.removeFail`,{name:d});try{let n=await fetch(`${e}/api/providers?name=${encodeURIComponent(d)}`,{method:`DELETE`});if(n.ok){let e=await n.json().catch(()=>({})),a=typeof e.defaultProvider==`string`?e.defaultProvider:null;o(a?t(`prov.removedDefault`,{name:d,defaultProvider:a}):t(`prov.removed`,{name:d}),!0),r===d&&i(null),s(),c(),l(!0)}else o(tn(await n.json().catch(()=>({})),t,f),!1)}catch{o(f,!1)}finally{n.current=!1}},[e,s,c,l,o,n,a,i,t,r]),p=(0,Z.useCallback)(async(n,r)=>{let i=await fetch(`${e}/api/providers?name=${encodeURIComponent(n)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({disabled:r})});if(!i.ok){o(await en(i,t(r?`prov.disableFail`:`prov.enableFail`,{name:n})),!1);return}o(t(r?`prov.disabled`:`prov.enabled`,{name:n}),!0),s(),c(),l(!0)},[e,s,c,l,o,t]),m=(0,Z.useCallback)(async(n,r)=>{try{let i=await fetch(`${e}/api/providers?name=${encodeURIComponent(n)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)});if(!i.ok)return{ok:!1,error:await en(i,t(`prov.updateFail`))};let a=await i.json().catch(()=>({}));if(await s(),Object.hasOwn(r,`codexAccountMode`)){let e=[l(!0)];u&&e.push(Promise.resolve(u())),await Promise.all(e)}let o=a.xaiResponsesOptInState;return{ok:!0,...o===!0||o===!1||o===`mixed`?{xaiResponsesOptInState:o}:{}}}catch{return{ok:!1,error:t(`prov.networkError`)}}},[e,s,l,u,t]);return{removeProvider:d,confirmRemoveProvider:f,setProviderDisabled:p,setDefaultProvider:(0,Z.useCallback)(async n=>{try{let r=await fetch(`${e}/api/providers?name=${encodeURIComponent(n)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({setDefault:!0})});return r.ok?(o(t(`prov.setDefaultSuccess`,{name:n}),!0),await s(),!0):(o(tn(await r.json().catch(()=>({})),t,t(`prov.setDefaultFail`,{name:n})),!1),!1)}catch{return o(t(`prov.setDefaultFail`,{name:n}),!1),!1}},[e,s,o,t]),updateProvider:m}}function rn({apiBase:e,setConfig:t,setOauthProviders:n,setOauthStatus:r,invalidateProviderQuotas:i,setConfigLoadFailed:a,configCacheKey:o}){let s=(0,Z.useRef)(0);return{fetchConfig:(0,Z.useCallback)(async()=>{let n=++s.current;try{let r=await fetch(`${e}/api/config`),i=await d(r);if(!i||typeof i!=`object`||!i.providers||typeof i.providers!=`object`)throw Error(`empty config response`);if(n!==s.current)return;t(i??null),o&&i&&b(o,i),a?.(!1)}catch{if(n!==s.current)return;a?.(!0)}},[e,o,t,a]),fetchOauth:(0,Z.useCallback)(async()=>{try{let t=await fetch(`${e}/api/oauth/providers`),i=(await d(t))?.providers??[];n(i);let a=await Promise.all(i.map(async t=>{let n=await fetch(`${e}/api/oauth/status?provider=${encodeURIComponent(t)}`).catch(()=>null);return[t,n?await u(n)??{loggedIn:!1}:{loggedIn:!1}]}));r(Object.fromEntries(a))}catch{}},[e,n,r]),fetchProviderQuotas:(0,Z.useCallback)(async(e=!1)=>{i(e)},[i])}}function an({providerId:e,providerLabel:n,onCancel:r,onContinue:i}){let a=t(),o=(0,Z.useId)(),s=(0,Z.useId)(),c=(0,Z.useRef)(null),l=(0,Z.useRef)(!1),[u,d]=(0,Z.useState)(!1),[f,p]=(0,Z.useState)(!1),h=Gt(e);(0,Z.useEffect)(()=>{let e=c.current;e&&!e.open&&e.showModal()},[]);let g=(0,Z.useCallback)(e=>{e.preventDefault(),r()},[r]);if(!h)return null;let _=e.trim().toLowerCase(),v=_===`anthropic`?`oauthTos.anthropicBody`:qt(h),y=_===`anthropic`||_===`google-antigravity`;return(0,Q.jsxs)(`dialog`,{ref:c,"aria-labelledby":o,"aria-describedby":s,className:`modal-overlay`,onCancel:g,children:[(0,Q.jsx)(`button`,{type:`button`,className:`modal-backdrop-dismiss`,"aria-label":a(`common.close`),tabIndex:-1,onClick:r}),(0,Q.jsxs)(`div`,{className:`modal-card`,onClick:e=>e.stopPropagation(),style:{maxWidth:460},children:[(0,Q.jsx)(`h3`,{id:o,children:a(Kt(h),{provider:n})}),(0,Q.jsxs)(`div`,{id:s,className:`notice-warn`,style:{marginTop:12,display:`flex`,gap:8,alignItems:`flex-start`},children:[(0,Q.jsx)(m,{width:16,height:16,style:{flexShrink:0,marginTop:2},"aria-hidden":`true`}),(0,Q.jsx)(`p`,{className:`modal-desc`,style:{margin:0},children:a(v,{provider:n})})]}),y&&(0,Q.jsx)(`p`,{className:`muted text-label`,style:{marginTop:12},children:a(`oauthTos.saferPath`)}),(0,Q.jsxs)(`label`,{className:`oauth-tos-ack`,style:{display:`flex`,gap:8,alignItems:`flex-start`,marginTop:14},children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:u,onChange:e=>d(e.target.checked),style:{marginTop:3},"aria-required":`true`}),(0,Q.jsx)(`span`,{className:`text-label`,children:a(`oauthTos.acknowledge`)})]}),(0,Q.jsxs)(`div`,{className:`modal-actions`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:r,children:a(`common.cancel`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:!u||f,onClick:()=>{!u||l.current||(l.current=!0,p(!0),i())},children:a(`oauthTos.continue`)})]})]})]})}function on(e){return{adapter:e.adapter,baseUrl:e.baseUrl,authMode:e.auth,freeTier:!!e.freeTier,keyOptional:!!e.keyOptional}}function sn(e){return fe(e.id,on(e))}function cn(e){let t={accounts:[],free:[],paid:[]};for(let n of e)t[sn(n)].push(n);return t}function ln(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)||e.id.toLowerCase().includes(n)):e}function un(e,t,n){return!n||e.kind!==`oauth`||t!==e.id?!1:n.provider===e.id}var dn={},fn=[],pn={},mn=[`accounts`,`free`,`paid`];function hn({presets:e,usageRank:n=dn,presetsLoading:r=!1,presetsError:i=!1,initialTier:a=`free`,onSelectPreset:o,onSelectCustom:s,accountRows:c=fn,accountStatus:l=pn,busyProvider:u=null,loginHint:d=null,paste:f,onLogin:p,onCancelLogin:m,onLogout:h,onManage:g}){let _=t(),v=(0,Z.useId)(),[y,b]=(0,Z.useState)(a),[x,S]=(0,Z.useState)(``),C=(0,Z.useMemo)(()=>e.filter(e=>e.id!==`custom`),[e]),w=(0,Z.useMemo)(()=>{let e=Object.keys(n).length>0;return C.toSorted((t,r)=>{if(e){let e=n[t.id]??0,i=n[r.id]??0;if(i!==e)return i-e}return t.label.localeCompare(r.label,void 0,{sensitivity:`base`})||t.id.localeCompare(r.id)})},[C,n]),T=(0,Z.useMemo)(()=>cn(w),[w])[y],E=(0,Z.useMemo)(()=>ln(T,x),[T,x]),D=e=>`${v}-tab-${e}`,O=e=>`${v}-panel-${e}`,k=e=>{b(e),S(``)},A=(e,t)=>{let n=mn.indexOf(t),r=e.key===`ArrowRight`?(n+1)%mn.length:e.key===`ArrowLeft`?(n-1+mn.length)%mn.length:e.key===`Home`?0:e.key===`End`?mn.length-1:-1;if(r<0)return;e.preventDefault();let i=mn[r];k(i),document.getElementById(D(i))?.focus()},j=e=>{let t=e.codexAccountMode===`direct`?(0,Q.jsx)(`span`,{className:`badge badge-green`,children:_(`modal.badge.direct`)}):e.codexAccountMode===`pool`?(0,Q.jsx)(`span`,{className:`badge badge-accent`,children:_(`modal.badge.pool`)}):e.auth===`oauth`?(0,Q.jsx)(`span`,{className:`badge badge-accent`,children:_(`modal.badge.oauth`)}):e.auth===`forward`?(0,Q.jsx)(`span`,{className:`badge badge-green`,children:_(`modal.badge.codexLogin`)}):e.auth===`local`?(0,Q.jsx)(`span`,{className:`badge badge-amber`,children:_(`modal.badge.local`)}):e.keyOptional?null:(0,Q.jsx)(`span`,{className:`badge badge-muted`,children:_(`modal.badge.apiKey`)}),n=(e.freeTier||e.keyOptional)&&e.auth===`key`?(0,Q.jsx)(`span`,{className:`badge badge-green`,children:_(`modal.badge.free`)}):null;return(0,Q.jsxs)(Q.Fragment,{children:[n,t]})};return(0,Q.jsxs)(`div`,{className:`provider-catalog`,children:[(0,Q.jsx)(`div`,{className:`provider-catalog-tabs`,role:`tablist`,"aria-label":_(`modal.catalogTabs`),children:mn.map(e=>(0,Q.jsx)(`button`,{type:`button`,id:D(e),role:`tab`,"aria-selected":y===e,"aria-controls":O(e),tabIndex:y===e?0:-1,className:`provider-catalog-tab${y===e?` active`:``}`,onClick:()=>k(e),onKeyDown:t=>A(t,e),children:_(e===`accounts`?`modal.tab.accounts`:e===`free`?`modal.tab.free`:`modal.tab.paid`)},e))}),mn.map(e=>(0,Q.jsx)(`div`,{id:O(e),role:`tabpanel`,"aria-labelledby":D(e),hidden:y!==e,className:`provider-catalog-panel`,children:y===e&&(0,Q.jsxs)(Q.Fragment,{children:[y===`accounts`&&(0,Q.jsx)(`div`,{className:`provider-catalog-accounts-hint muted text-label`,children:_(`modal.accountsHint`)}),(0,Q.jsx)(`label`,{className:`text-label`,htmlFor:`${v}-search`,children:_(`modal.searchLabel`)}),(0,Q.jsx)(`input`,{id:`${v}-search`,type:`search`,className:`input provider-catalog-search`,value:x,onChange:e=>S(e.target.value),placeholder:_(`modal.search`)}),(0,Q.jsxs)(`div`,{className:`provider-catalog-rows`,children:[r&&E.length===0&&(0,Q.jsx)(`div`,{className:`muted text-control provider-catalog-empty`,children:_(`modal.catalogLoading`)}),y!==`accounts`&&E.map(e=>(0,Q.jsxs)(`button`,{type:`button`,className:`list-row`,onClick:()=>o(e),children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`title`,children:e.label}),(0,Q.jsxs)(`div`,{className:`sub`,children:[(0,Q.jsx)(`code`,{className:`chip`,children:e.adapter}),e.note?` · ${e.note}`:``]})]}),(0,Q.jsx)(`div`,{className:`provider-catalog-badges`,children:j(e)})]},e.id)),y!==`accounts`&&!r&&!i&&E.length===0&&(0,Q.jsx)(`div`,{className:`muted text-control provider-catalog-empty`,children:_(`modal.noMatch`)}),y===`accounts`&&c.map(e=>{let t=l[e.id],n=u===e.id,r=!!t?.loggedIn,i=r?t?.email??e.statusLabel??_(`modal.accountLoggedIn`):t?.error??e.statusLabel??_(`modal.accountLoggedOut`),a=un(e,u,d);return(0,Q.jsxs)(`div`,{className:`list-row provider-catalog-account-row${a?` provider-catalog-account-row--waiting`:``}`,children:[(0,Q.jsxs)(`div`,{className:`provider-catalog-account-row-head`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`title`,children:e.label}),(0,Q.jsx)(`div`,{className:`sub`,children:i})]}),(0,Q.jsx)(`div`,{className:`provider-catalog-badges`,children:e.kind===`key`?null:e.kind===`codex`?(0,Q.jsxs)(Q.Fragment,{children:[r&&(0,Q.jsx)(`a`,{className:`btn btn-ghost`,href:e.href??`#codex-set`,children:_(`modal.accountManage`)}),p&&(0,Q.jsx)(`button`,{type:`button`,className:r?`btn btn-ghost`:`btn btn-primary`,disabled:n,onClick:()=>{n||p(e.id)},children:_(n?`codexAuth.enablingOpenai`:r?`modal.accountAdd`:`modal.accountLogin`)})]}):r?(0,Q.jsxs)(Q.Fragment,{children:[g&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>g(e.id),children:_(`modal.accountManage`)}),p&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,disabled:n,onClick:()=>{n||p(e.id,!0)},children:_(n?`prov.waitingBrowser`:`modal.accountAdd`)}),n&&m&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>m(e.id),children:_(`common.cancel`)}),h&&!n&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>h(e.id),children:_(`modal.accountLogout`)})]}):n?m&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>m(e.id),children:_(`common.cancel`)}):p&&(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>p(e.id),children:_(`modal.accountLogin`)})})]}),a&&d&&(0,Q.jsx)(se,{hint:{url:d.url,deviceCode:d.deviceCode,instructions:d.instructions},...f?{paste:{value:f.value,busy:f.busy,message:f.message,ok:f.ok,onChange:f.onChange,onSubmit:()=>f.onSubmit(e.id)}}:{}})]},e.id)}),y===`accounts`&&c.length===0&&!r&&!i&&(0,Q.jsx)(`div`,{className:`muted text-control provider-catalog-empty`,children:_(`modal.noMatch`)})]}),(0,Q.jsxs)(`div`,{className:`provider-catalog-footer`,children:[(0,Q.jsx)(`div`,{style:{flex:1}}),y!==`accounts`&&(0,Q.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:s,children:_(`modal.notListed`)})]})]})},e))]})}function gn({preset:e,oauthSupported:n,oauthBusy:r,oauthMsg:i,oauthMsgTone:a,oauthUrl:o,oauthDeviceCode:s,oauthInstructions:c,manualCode:l,manualCodeBusy:u,manualCodeMsg:d,manualCodeOk:f,onRequestLogin:p,onUseApiKeyInstead:m,onManualCodeChange:h,onSubmitManualCode:g,onBack:_}){let v=t();return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:14},children:[(0,Q.jsx)(`div`,{className:`muted text-control`,children:e.note??v(`modal.oauthDefaultNote`)}),n.includes(e.oauthProvider??``)?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>p(e.oauthProvider),disabled:r,style:{width:`100%`,padding:`12px 16px`},children:[(0,Q.jsx)(x,{}),r?v(`modal.waitingBrowser`):v(`modal.logInWith`,{label:e.label})]}),!r&&(0,Q.jsx)(ht,{})]}):(0,Q.jsx)(`div`,{className:`text-control`,style:{color:`var(--amber)`,background:`var(--amber-soft)`,border:`1px solid var(--amber)`,borderRadius:`var(--radius-sm)`,padding:`10px 12px`},children:v(`modal.oauthComingSoon`,{label:e.label})}),i&&(0,Q.jsx)(`div`,{className:`text-label`,style:{color:a===`warn`?`var(--amber)`:`var(--accent-hover)`},children:i}),r&&(0,Q.jsx)(se,{hint:{url:o,deviceCode:s,instructions:c},paste:{value:l,busy:u,disabled:!e.oauthProvider,message:d,ok:f,onChange:h,onSubmit:()=>{e.oauthProvider&&g(e.oauthProvider)}}}),(0,Q.jsxs)(`div`,{style:{display:`flex`,gap:8,alignItems:`center`,marginTop:2},children:[(0,Q.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:m,children:v(`modal.useApiKeyInstead`)}),(0,Q.jsx)(`div`,{style:{flex:1}}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:_,children:v(`modal.back`)})]})]})}function _n({label:e,children:t}){return(0,Q.jsxs)(`label`,{style:{display:`block`},children:[(0,Q.jsx)(`span`,{className:`field-label`,children:e}),t]})}function vn({preset:e,form:n,endpointChoice:r,error:i,saving:a,dup:o,isCustom:s,isLocal:c,isReservedForward:l,presetDescription:u,onFormChange:d,onEndpointChoiceChange:f,onSubmit:p,onUseOauthLogin:m,onBack:g}){let _=t();return(0,Q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:10},children:[!l&&!s&&!c&&!e.keyOptional&&e.note&&(0,Q.jsxs)(`details`,{className:`setup-guide`,children:[(0,Q.jsx)(`summary`,{children:_(`modal.setupGuide`)}),(0,Q.jsxs)(`ol`,{className:`text-label leading-relaxed`,style:{margin:`8px 0 0`,paddingLeft:18,color:`var(--muted)`},children:[(0,Q.jsxs)(`li`,{children:[_(`modal.setupStep1Prefix`),` `,(0,Q.jsx)(`a`,{href:e.dashboardUrl,target:`_blank`,rel:`noreferrer`,children:_(`modal.setupDashboardLink`,{label:e.label})}),` `,_(`modal.setupStep1Suffix`)]}),(0,Q.jsx)(`li`,{children:_(`modal.setupStep2`)}),(0,Q.jsx)(`li`,{children:_(`modal.setupStep3`)})]}),e.note&&(0,Q.jsx)(`div`,{className:`text-label`,style:{color:`var(--muted)`,marginTop:6,fontStyle:`italic`},children:e.note}),/\{[^}]*\}/.test(n.baseUrl)&&(0,Q.jsx)(`div`,{className:`text-label`,style:{color:`var(--amber)`,marginTop:6},children:_(`modal.baseUrlPlaceholderHint`)})]}),(0,Q.jsx)(_n,{label:_(`modal.providerName`),children:(0,Q.jsx)(`input`,{className:`input`,value:n.name,readOnly:l,onChange:e=>d({...n,name:e.target.value}),placeholder:_(`modal.namePlaceholder`)})}),o&&(0,Q.jsx)(`div`,{className:`text-label`,style:{color:`var(--amber)`},children:_(`modal.duplicateWarn`,{name:n.name.trim()})}),!l&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(_n,{label:_(`modal.adapter`),children:(0,Q.jsx)(`select`,{className:`input`,value:n.adapter,onChange:e=>d({...n,adapter:e.target.value}),children:[`openai-responses`,`openai-chat`,`anthropic`,`google`,`azure-openai`,`cursor`].map(e=>(0,Q.jsx)(`option`,{value:e,children:e},e))})}),e.baseUrlChoices&&e.baseUrlChoices.length>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(_n,{label:_(`modal.endpoint`),children:(0,Q.jsx)(`select`,{className:`input`,value:r,onChange:t=>{let r=t.target.value;f(r),d({...n,baseUrl:Ot(e.baseUrlChoices,r,n.baseUrl)})},children:e.baseUrlChoices.map(e=>(0,Q.jsx)(`option`,{value:e.id,children:e.id===`token-plan`?_(`modal.endpoint.tokenPlan`):e.id===`payg`?_(`modal.endpoint.payAsYouGo`):e.id===`custom`?_(`modal.endpoint.custom`):e.label},e.id))})}),r===`custom`&&(0,Q.jsx)(_n,{label:_(`modal.baseUrl`),children:(0,Q.jsx)(`input`,{className:`input`,value:n.baseUrl,onChange:e=>d({...n,baseUrl:e.target.value}),placeholder:_(`modal.baseUrlPlaceholder`)})})]}):(0,Q.jsx)(_n,{label:_(`modal.baseUrl`),children:(0,Q.jsx)(`input`,{className:`input`,value:n.baseUrl,onChange:e=>d({...n,baseUrl:e.target.value}),placeholder:_(`modal.baseUrlPlaceholder`)})}),!l&&(0,Q.jsxs)(`label`,{className:`modal-field`,style:{flexDirection:`row`,alignItems:`center`,gap:8},children:[(0,Q.jsx)(`input`,{type:`checkbox`,checked:n?.allowPrivateNetwork??!1,onChange:e=>d({...n,allowPrivateNetwork:e.target.checked})}),(0,Q.jsx)(`span`,{className:`muted text-control`,children:_(`modal.allowPrivateNetwork`)})]}),!l&&(n?.allowPrivateNetwork??!1)&&(0,Q.jsx)(`p`,{className:`muted text-hint`,children:_(`modal.allowPrivateNetworkHint`)})]}),n.authMode===`forward`?(0,Q.jsx)(`div`,{className:`text-label`,style:{color:`var(--green)`,background:`var(--green-soft)`,border:`1px solid var(--green)`,borderRadius:`var(--radius-sm)`,padding:`8px 10px`},children:u(e)}):n.authMode===`local`?(0,Q.jsx)(`div`,{className:`text-label leading-relaxed`,style:{color:`var(--amber)`,background:`var(--amber-soft)`,border:`1px solid var(--amber)`,borderRadius:`var(--radius-sm)`,padding:`8px 10px`},children:_(`modal.localHint`)}):e.keyOptional?(0,Q.jsxs)(`div`,{className:`text-label leading-relaxed`,style:{color:`var(--green)`,background:`var(--green-soft)`,border:`1px solid var(--green)`,borderRadius:`var(--radius-sm)`,padding:`10px 12px`},children:[(0,Q.jsx)(`strong`,{children:_(`modal.freeTierTitle`)}),` — `,e.note??_(`modal.freeTierDefault`)]}):(0,Q.jsxs)(Q.Fragment,{children:[e.dashboardUrl&&(0,Q.jsxs)(`a`,{className:`text-label`,href:e.dashboardUrl,target:`_blank`,rel:`noreferrer`,style:{display:`inline-flex`,alignItems:`center`,gap:5},children:[(0,Q.jsx)(w,{style:{width:14,height:14}}),_(`modal.getApiKey`,{label:e.label}),(0,Q.jsx)(h,{style:{width:13,height:13}})]}),(0,Q.jsx)(_n,{label:_(`modal.apiKey`),children:(0,Q.jsx)(`input`,{className:`input`,type:`password`,value:n.apiKey,onChange:e=>d({...n,apiKey:e.target.value}),placeholder:_(`modal.apiKeyPlaceholder`)})}),n.adapter===`anthropic`&&n.authMode===`key`&&(0,Q.jsx)(_n,{label:_(`modal.apiKeyTransport`),children:(0,Q.jsxs)(`select`,{className:`input`,value:n.apiKeyTransport??`x-api-key`,onChange:e=>d({...n,apiKeyTransport:e.target.value===`bearer`?`bearer`:void 0}),children:[(0,Q.jsx)(`option`,{value:`x-api-key`,children:_(`modal.apiKeyTransportNative`)}),(0,Q.jsx)(`option`,{value:`bearer`,children:_(`modal.apiKeyTransportBearer`)})]})})]}),!l&&(0,Q.jsx)(_n,{label:_(`modal.defaultModel`),children:(0,Q.jsx)(`input`,{className:`input`,value:n.defaultModel,onChange:e=>d({...n,defaultModel:e.target.value}),placeholder:_(`modal.defaultModelPlaceholder`)})}),i&&(0,Q.jsx)(`div`,{className:`text-control`,role:`alert`,style:{color:`var(--red)`},children:i}),(0,Q.jsxs)(`div`,{style:{display:`flex`,gap:8,marginTop:4,alignItems:`center`},children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:p,disabled:a,children:_(a?`modal.adding`:`modal.add`)}),e.auth===`oauth`&&(0,Q.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:m,children:_(`modal.useOauthLogin`)}),(0,Q.jsx)(`div`,{style:{flex:1}}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:g,children:_(`modal.back`)})]})]})}var yn=2e3;function bn({apiBase:e,t,aliveRef:n,onAdded:r}){return{loginOAuth:(0,Z.useCallback)(async(i,a)=>{let{setOauthBusy:o,setOauthMsg:s,setOauthMsgTone:c,setOauthUrl:l,setManualCode:d,setManualCodeMsg:f,setManualCodeOk:p}=a;o(!0),s(``),c(`ok`),l(``,i),d(``),f(``),p(!0);try{let a=await fetch(`${e}/api/oauth/login`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:i,...X()})});if(!n.current)return;if(!a.ok){let e=await a.json().catch(()=>({}));c(`warn`),s(e.error===`unknown oauth provider`?t(`modal.oauthComingSoonShort`):e.error||t(`modal.loginFailStart`));return}let o=await a.json();l(o.url??``,i,o.deviceCode,o.instructions),o.url||o.deviceCode?s(t(`modal.waitingLogin`)):s(o.instructions||t(`modal.loggingIn`));for(let a=0;a<100;a++){if(await new Promise(e=>setTimeout(e,yn)),!n.current)return;let a=await fetch(`${e}/api/oauth/status?provider=${i}`).catch(()=>null),o=a?await u(a):null;if(!n.current)return;if(o?.error){c(`warn`),s(t(`modal.loginError`,{error:o.error}));return}if(o?.loggedIn){r(i);return}}c(`warn`),s(t(`modal.loginTimeout`))}catch{n.current&&(c(`warn`),s(t(`modal.networkError`)))}finally{n.current&&o(!1)}},[n,e,r,t]),submitManualCode:(0,Z.useCallback)(async(r,i,a,o)=>{let s=i.trim();if(!s||a)return;let{setManualCodeBusy:c,setManualCode:l,setManualCodeOk:u,setManualCodeMsg:d}=o;c(!0),d(``);try{let i=await fetch(`${e}/api/oauth/login/code`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:r,input:s})});if(!n.current)return;if(!i.ok){let e=await i.json().catch(()=>({}));u(!1),d(t(`prov.pasteFail`,{error:e.error||i.statusText}));return}l(``),u(!0),d(t(`prov.pasteOk`))}catch{n.current&&(u(!1),d(t(`modal.networkError`)))}finally{n.current&&c(!1)}},[n,e,t])}}function xn(e,t){return{preset:e?{id:`custom`,label:t,adapter:`openai-chat`,baseUrl:``,auth:`key`}:null,form:e?{name:``,adapter:`openai-chat`,baseUrl:``,authMode:`key`,apiKey:``,apiKeyTransport:void 0,defaultModel:``,allowPrivateNetwork:!1}:null,saving:!1,error:``,oauthBusy:!1,oauthMsg:``,oauthMsgTone:`ok`,oauthUrl:``,oauthDeviceCode:``,oauthInstructions:``,oauthUrlProvider:null,manualCode:``,manualCodeBusy:!1,manualCodeMsg:``,manualCodeOk:!0,endpointChoice:`custom`,oauthTosPending:null}}function Sn(e,t){switch(t.type){case`choose-preset`:return{...e,preset:t.preset,form:t.form,endpointChoice:t.endpointChoice,error:``,oauthMsg:``,oauthMsgTone:`ok`,oauthUrl:``,oauthDeviceCode:``,oauthInstructions:``,oauthUrlProvider:null,oauthBusy:!1,manualCode:``,manualCodeMsg:``,manualCodeOk:!0};case`back`:return{...e,preset:null,form:null,endpointChoice:`custom`,error:``,oauthMsg:``,oauthMsgTone:`ok`,oauthUrl:``,oauthDeviceCode:``,oauthInstructions:``,oauthUrlProvider:null,oauthBusy:!1,manualCode:``,manualCodeMsg:``,manualCodeOk:!0};case`set-form`:return{...e,form:t.form};case`set-endpoint-choice`:return{...e,endpointChoice:t.choice};case`set-saving`:return{...e,saving:t.saving};case`set-error`:return{...e,error:t.error};case`set-oauth-busy`:return{...e,oauthBusy:t.busy};case`set-oauth-msg`:return{...e,oauthMsg:t.msg,oauthMsgTone:t.tone??e.oauthMsgTone};case`set-oauth-tone`:return{...e,oauthMsgTone:t.tone};case`set-oauth-url`:return e.preset?.oauthProvider===t.providerId?{...e,oauthUrl:t.url,oauthDeviceCode:t.deviceCode??``,oauthInstructions:t.instructions??``,oauthUrlProvider:t.providerId}:e;case`set-manual-code`:return{...e,manualCode:t.code};case`set-manual-code-busy`:return{...e,manualCodeBusy:t.busy};case`set-manual-code-msg`:return{...e,manualCodeMsg:t.msg,manualCodeOk:t.ok??e.manualCodeOk};case`set-oauth-tos-pending`:return{...e,oauthTosPending:t.providerId};case`use-oauth-login`:return{...e,form:t.form,error:``,oauthUrl:``,oauthDeviceCode:``,oauthInstructions:``,oauthUrlProvider:null};case`use-api-key-instead`:return{...e,form:t.form,oauthMsg:``,oauthMsgTone:`ok`,oauthUrl:``,oauthDeviceCode:``,oauthInstructions:``,oauthUrlProvider:null,oauthBusy:!1,manualCode:``,manualCodeMsg:``};default:return e}}function Cn({apiBase:e,existingNames:n,onClose:r,onAdded:i,initialTier:a,initialCustom:o=!1,accountRows:c,accountStatus:l,accountBusy:u,accountLoginHint:d=null,onAccountLogin:f,onAccountCancelLogin:p,onAccountLogout:m,onAccountManage:h,onOpen:g}){let _=t(),v=(0,Z.useMemo)(()=>[{id:`custom`,label:_(`modal.customProvider`),adapter:`openai-chat`,baseUrl:``,auth:`key`}],[_]),[y,b]=(0,Z.useReducer)(Sn,o,e=>xn(e,_(`modal.customProvider`))),x=(0,Z.useRef)(!0),S=(0,Z.useRef)(null),C=(0,Z.useRef)(null),w=(0,Z.useId)(),T=j(`add-provider-oauth:${e}`,[e],async t=>{let n=await fetch(`${e}/api/oauth/providers`,{signal:t});return n.ok?(await n.json()).providers??[]:[]}),E=j(`add-provider-presets:${e}`,[e],async t=>{let n=await fetch(`${e}/api/provider-presets`,{signal:t});if(!n.ok)throw Error(String(n.status));let r=await n.json();return Array.isArray(r.providers)&&r.providers.length>0?r.providers:null}),O=j(D(e),[e],async t=>{let n=await fetch(`${e}/api/usage?range=30d`,{signal:t});if(!n.ok)throw Error(String(n.status));return await n.json()},{deadlineMs:6e4}),k=T.data??[],A=E.data??v,N=E.loading,P=E.error!==void 0,F=Object.fromEntries((O.data?.providers??[]).map(e=>[e.provider,e.requests])),{preset:I,form:L,saving:R,error:z,oauthBusy:B,oauthMsg:V,oauthMsgTone:H,oauthUrl:U,oauthUrlProvider:ee,oauthDeviceCode:W,oauthInstructions:K,manualCode:te,manualCodeBusy:ie,manualCodeMsg:q,manualCodeOk:J,endpointChoice:ae,oauthTosPending:Y}=y;(0,Z.useEffect)(()=>{x.current=!0,S.current=document.activeElement,g?.();let e=C.current;if(e&&!e.open){e.showModal();let t=e.querySelector(`input:not([disabled]), button:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])`);t&&t.focus()}return()=>{x.current=!1,e?.open&&e.close(),S.current?.focus()}},[]);let X=e=>{let t=G(e);return t?_(t):e.note},oe=e=>{let t=kt(e.baseUrlChoices,e.baseUrl);b({type:`choose-preset`,preset:e,endpointChoice:t,form:{name:e.id===`custom`?``:e.id,adapter:e.adapter,baseUrl:e.baseUrlChoices?.length?Ot(e.baseUrlChoices,t,e.baseUrl):e.baseUrl,responsesPath:e.responsesPath,authMode:e.auth,apiKey:``,apiKeyTransport:void 0,defaultModel:e.defaultModel??``,allowPrivateNetwork:!1}})},se=async()=>{if(!L)return;let t=I?re(I):!1,n=I?.baseUrlChoices?.length?At(I.baseUrlChoices,ae,L.baseUrl):L.baseUrl.trim();if(!t&&!L.name.trim()){b({type:`set-error`,error:_(`modal.nameRequired`)});return}if(!t&&!n){b({type:`set-error`,error:_(`modal.baseUrlRequired`)});return}if(!t&&/\{[^}]*\}/.test(n)){b({type:`set-error`,error:_(`modal.baseUrlPlaceholderError`)});return}let r={...L,baseUrl:n},a;try{a=ne(I??{id:`custom`},r)}catch{b({type:`set-error`,error:_(`modal.invalidPreset`)});return}b({type:`set-saving`,saving:!0}),b({type:`set-error`,error:``});try{let t=await fetch(`${e}/api/providers`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(a)});if(!t.ok){let e=await t.json().catch(()=>({}));b({type:`set-error`,error:e.error||_(`modal.failedStatus`,{status:t.status})});return}i(a.name)}catch{b({type:`set-error`,error:_(`modal.networkError`)})}finally{b({type:`set-saving`,saving:!1})}},{loginOAuth:ce,submitManualCode:le}=bn({apiBase:e,t:_,aliveRef:x,onAdded:i}),ue={setOauthBusy:e=>b({type:`set-oauth-busy`,busy:e}),setOauthMsg:e=>b({type:`set-oauth-msg`,msg:e}),setOauthMsgTone:e=>b({type:`set-oauth-tone`,tone:e}),setOauthUrl:(e,t,n,r)=>b({type:`set-oauth-url`,url:e,providerId:t,deviceCode:n,instructions:r}),setManualCode:e=>b({type:`set-manual-code`,code:e}),setManualCodeMsg:e=>b({type:`set-manual-code-msg`,msg:e}),setManualCodeOk:e=>b({type:`set-manual-code-msg`,msg:q,ok:e})},de=L?n.includes(L.name.trim())&&L.name.trim()!==``:!1,fe=e=>{if(!B){if(Gt(e)){b({type:`set-oauth-tos-pending`,providerId:e});return}ce(e,ue)}},pe=e=>{le(e,te,ie,{setManualCodeBusy:e=>b({type:`set-manual-code-busy`,busy:e}),setManualCode:e=>b({type:`set-manual-code`,code:e}),setManualCodeOk:e=>b({type:`set-manual-code-msg`,msg:q,ok:e}),setManualCodeMsg:e=>b({type:`set-manual-code-msg`,msg:e})})},me=I?.id===`custom`,he=L?.authMode===`local`,ge=I?re(I):!1;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`dialog`,{ref:C,"aria-labelledby":w,className:`modal-overlay`,onCancel:e=>{e.preventDefault(),Y||r()},children:(0,Q.jsxs)(`div`,{className:`modal-card`,children:[(0,Q.jsxs)(`div`,{className:`modal-head`,children:[(0,Q.jsx)(`h3`,{id:w,children:I?_(`modal.addNamed`,{label:I.label}):_(`modal.add`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon`,"aria-label":_(`common.close`),onClick:r,children:(0,Q.jsx)(M,{})})]}),I?L&&(I.auth===`oauth`&&L.authMode===`oauth`?(0,Q.jsx)(gn,{preset:I,oauthSupported:k,oauthBusy:B,oauthMsg:V,oauthMsgTone:H,oauthUrl:ee===I.oauthProvider?U:``,oauthDeviceCode:ee===I.oauthProvider?W:``,oauthInstructions:ee===I.oauthProvider?K:``,manualCode:te,manualCodeBusy:ie,manualCodeMsg:q,manualCodeOk:J,onRequestLogin:fe,onUseApiKeyInstead:()=>{b({type:`use-api-key-instead`,form:{...L,authMode:`key`}})},onManualCodeChange:e=>b({type:`set-manual-code`,code:e}),onSubmitManualCode:e=>{pe(e)},onBack:()=>b({type:`back`})}):(0,Q.jsx)(vn,{preset:I,form:L,endpointChoice:ae,error:z,saving:R,dup:de,isCustom:me,isLocal:he,isReservedForward:ge,presetDescription:X,onFormChange:e=>b({type:`set-form`,form:e}),onEndpointChoiceChange:e=>b({type:`set-endpoint-choice`,choice:e}),onSubmit:()=>{se()},onUseOauthLogin:()=>b({type:`use-oauth-login`,form:{...L,authMode:`oauth`}}),onBack:()=>b({type:`back`})})):(0,Q.jsxs)(Q.Fragment,{children:[P&&(0,Q.jsxs)(s,{tone:`err`,children:[_(`modal.catalogLoadFailed`),` `,(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>E.refresh(),children:_(`common.retry`)})]}),(0,Q.jsx)(hn,{presets:A,usageRank:F,presetsLoading:N,presetsError:P,initialTier:a,onSelectPreset:e=>oe(e),onSelectCustom:()=>oe(v[0]),accountRows:c,accountStatus:l,busyProvider:u,onLogin:f,onCancelLogin:p,onLogout:m,onManage:h,loginHint:d,paste:{value:te,busy:ie,message:q,ok:J,onChange:e=>b({type:`set-manual-code`,code:e}),onSubmit:e=>{pe(e)}}})]})]})}),Y&&(0,Q.jsx)(an,{providerId:Y,providerLabel:I?.label??Y,onCancel:()=>b({type:`set-oauth-tos-pending`,providerId:null}),onContinue:()=>{let e=Y;e&&(b({type:`set-oauth-tos-pending`,providerId:null}),ce(e,ue))}},Y)]})}var wn=`replit`,Tn=`replit-anthropic`,En=[wn,Tn],Dn=/^[\x21-\x7E]+$/;function On(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0}function kn(e){return typeof e==`number`&&Number.isInteger(e)&&e>=100&&e<=599}function An(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;if(t.ok!==!0||!t.healthz||typeof t.healthz!=`object`||Array.isArray(t.healthz)||!t.models||typeof t.models!=`object`||Array.isArray(t.models))return null;let n=t.healthz,r=t.models;return!kn(n.status)||!On(n.latencyMs)||!kn(r.status)||!On(r.latencyMs)||typeof r.modelCount!=`number`||!Number.isInteger(r.modelCount)||r.modelCount<0?null:{ok:!0,healthz:{status:n.status,latencyMs:n.latencyMs},models:{status:r.status,modelCount:r.modelCount,latencyMs:r.latencyMs}}}function jn(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;if(t.success!==!0||!Array.isArray(t.providers)||t.providers.length!==En.length)return null;for(let e=0;e<En.length;e++)if(t.providers[e]!==En[e])return null;let n=An(t.probe);return!n||t.defaultProvider!==void 0&&t.defaultProvider!==`replit`?null:{success:!0,providers:[wn,Tn],probe:n,...t.defaultProvider===`replit`?{defaultProvider:wn}:{}}}function Mn(e){if(e.length===0)return new AbortController().signal;if(e.length===1)return e[0];let t=new AbortController,n=()=>t.abort();for(let t of e){if(t.aborted){n();break}t.addEventListener(`abort`,n,{once:!0})}return t.signal}async function Nn(e,t,n={}){let r=n.fetchImpl??fetch,i=n.timeoutMs??3e4,a=AbortSignal.timeout(i),o=n.signal?Mn([n.signal,a]):a,s;try{s=await r(`${e}/api/providers/replit-pair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t),signal:o})}catch{return o.aborted&&n.signal?.aborted?{ok:!1,status:0,kind:`aborted`,data:{error:`request aborted`}}:{ok:!1,status:0,kind:`network`,data:{error:`network request failed`}}}let c=await s.text(),l;try{l=c?JSON.parse(c):{error:`empty response`}}catch{return{ok:!1,status:s.status,kind:`malformed`,data:{error:`invalid response`}}}if(!s.ok||!(`success`in l)||l.success!==!0)return{ok:!1,status:s.status,kind:`http`,data:l};let u=jn(l);return u?{ok:!0,data:u}:{ok:!1,status:s.status,kind:`malformed`,data:{error:`invalid response`}}}function Pn(e){let t=e.trim();return t?t.length<32?`too_short`:t.length>512?`too_long`:Dn.test(t)?null:`invalid_chars`:`empty`}function Fn({busy:e,onCancel:n,onConfirm:r}){let i=t(),a=(0,Z.useId)(),o=(0,Z.useId)(),s=(0,Z.useRef)(null),c=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{let e=s.current;return e&&!e.open&&e.showModal(),c.current?.focus(),()=>{e?.open&&e.close()}},[]);let l=(0,Z.useCallback)(e=>{e.preventDefault(),n()},[n]);return(0,Q.jsxs)(`dialog`,{ref:s,className:`modal-overlay replit-gateway-replace-dialog`,"aria-labelledby":a,"aria-describedby":o,onCancel:l,children:[(0,Q.jsx)(`button`,{type:`button`,className:`modal-backdrop-dismiss`,"aria-label":i(`replitGateway.replaceCancel`),tabIndex:-1,onClick:n}),(0,Q.jsxs)(`div`,{className:`modal-card`,onClick:e=>e.stopPropagation(),role:`document`,children:[(0,Q.jsx)(`h3`,{id:a,children:i(`replitGateway.replaceTitle`)}),(0,Q.jsx)(`p`,{id:o,children:i(`replitGateway.replaceBody`)}),(0,Q.jsxs)(`div`,{className:`modal-actions`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn replit-gateway-replace-cancel`,disabled:e,onClick:n,children:i(`replitGateway.replaceCancel`)}),(0,Q.jsx)(`button`,{ref:c,type:`button`,className:`btn btn-primary replit-gateway-replace-confirm`,disabled:e,onClick:r,children:i(`replitGateway.replaceConfirm`)})]})]})]})}function In({apiBase:e,onClose:n,onInstalled:r}){let i=t(),a=(0,Z.useId)(),o=(0,Z.useId)(),c=(0,Z.useId)(),l=(0,Z.useId)(),u=(0,Z.useId)(),d=(0,Z.useId)(),f=(0,Z.useRef)(null),p=(0,Z.useRef)(null),m=(0,Z.useRef)(null),h=(0,Z.useRef)(null),g=(0,Z.useRef)(0),_=(0,Z.useRef)(!0),[v,y]=(0,Z.useState)(``),[b,x]=(0,Z.useState)(``),[S,C]=(0,Z.useState)(!1),[w,T]=(0,Z.useState)(!1),[E,D]=(0,Z.useState)(`form`),[O,k]=(0,Z.useState)(null),[A,j]=(0,Z.useState)(null),[N,P]=(0,Z.useState)(null),[F,I]=(0,Z.useState)(null),[L,R]=(0,Z.useState)(!1),[z,B]=(0,Z.useState)(!1);(0,Z.useEffect)(()=>{_.current=!0;let e=f.current;return e&&!e.open&&e.showModal(),p.current?.focus(),()=>{_.current=!1,h.current?.abort(),e?.open&&e.close()}},[]);let V=(0,Z.useCallback)(e=>{if(E===`installing`||z){e.preventDefault();return}e.preventDefault(),n()},[n,z,E]),H=(0,Z.useCallback)((e,t,n)=>t===`network`?i(`replitGateway.errorNetwork`):t===`malformed`?i(`replitGateway.errorMalformed`):e===`config_busy`?i(`replitGateway.errorBusy`):e===`provider_collision`?i(`replitGateway.errorCollision`):n||i(`replitGateway.errorGeneric`),[i]),U=(0,Z.useCallback)(async t=>{let n=v.trim(),a=null,o=null;n||(a=i(`replitGateway.originRequired`));let s=Pn(b);if(s===`empty`?o=i(`replitGateway.keyRequired`):s===`too_short`?o=i(`replitGateway.keyTooShort`):s===`too_long`?o=i(`replitGateway.keyTooLong`):s===`invalid_chars`&&(o=i(`replitGateway.keyInvalidChars`)),a||o){k(a),j(o),P(null),D(`form`);return}h.current?.abort();let c=new AbortController;h.current=c;let l=++g.current;k(null),j(null),P(null),D(`installing`);try{let i=await Nn(e,{origin:n,gatewayKey:b.trim(),allowCustomDomain:S,replace:t,setDefault:w},{signal:c.signal});if(!_.current||l!==g.current)return;if(!i.ok){if(i.kind===`aborted`){D(`form`);return}let e=i.data;if(i.status===409&&e.code===`provider_collision`&&!t){D(`form`),R(!0);return}P(H(e.code,i.kind,e.error)),D(`error`);return}I(i.data.probe),D(`success`),r(wn)}catch{if(!_.current||l!==g.current)return;P(i(`replitGateway.errorGeneric`)),D(`error`)}finally{_.current&&l===g.current&&B(!1)}},[S,e,b,H,r,v,w,i]),ee=()=>{U(!1)},W=E===`installing`||z,G=E===`form`||E===`error`;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`dialog`,{ref:f,className:`modal-overlay replit-gateway-wizard`,"aria-labelledby":a,"aria-describedby":o,onCancel:V,children:[(0,Q.jsx)(`button`,{type:`button`,className:`modal-backdrop-dismiss`,"aria-label":i(`replitGateway.close`),tabIndex:-1,disabled:W,onClick:()=>{W||n()}}),(0,Q.jsxs)(`div`,{className:`modal-card`,onClick:e=>e.stopPropagation(),role:`document`,children:[(0,Q.jsxs)(`div`,{className:`modal-head`,children:[(0,Q.jsx)(`h3`,{id:a,children:i(`replitGateway.title`)}),(0,Q.jsx)(`button`,{type:`button`,className:`btn-icon`,onClick:n,disabled:W,"aria-label":i(`replitGateway.close`),children:(0,Q.jsx)(M,{})})]}),(0,Q.jsx)(`p`,{id:o,className:`page-sub`,children:i(`replitGateway.subtitle`)}),(0,Q.jsx)(`p`,{className:`muted replit-gateway-companion-note`,children:i(`replitGateway.companionNote`)}),E===`success`&&F&&(0,Q.jsxs)(`div`,{className:`replit-gateway-results`,"aria-live":`polite`,children:[(0,Q.jsx)(`p`,{children:i(`replitGateway.successTitle`)}),(0,Q.jsxs)(`ul`,{children:[(0,Q.jsx)(`li`,{children:i(`replitGateway.probeHealth`,{status:String(F.healthz.status),ms:String(F.healthz.latencyMs)})}),(0,Q.jsx)(`li`,{children:i(`replitGateway.probeModels`,{count:String(F.models.modelCount),ms:String(F.models.latencyMs)})})]})]}),G&&(0,Q.jsxs)(`form`,{className:`replit-gateway-form`,onSubmit:e=>{e.preventDefault(),ee()},children:[(0,Q.jsx)(`label`,{htmlFor:`replit-gateway-origin`,children:i(`replitGateway.originLabel`)}),(0,Q.jsx)(`input`,{ref:p,id:`replit-gateway-origin`,type:`url`,autoComplete:`off`,spellCheck:!1,value:v,disabled:W,placeholder:`https://my-app.replit.app`,"aria-invalid":O?!0:void 0,"aria-describedby":[c,O?u:null].filter(Boolean).join(` `)||void 0,onChange:e=>{y(e.target.value),O&&k(null)}}),(0,Q.jsx)(`p`,{id:c,className:`muted`,children:i(`replitGateway.originHint`)}),O&&(0,Q.jsx)(`p`,{id:u,className:`field-error`,role:`alert`,children:O}),(0,Q.jsx)(`label`,{htmlFor:`replit-gateway-key`,children:i(`replitGateway.keyLabel`)}),(0,Q.jsx)(`input`,{id:`replit-gateway-key`,type:`password`,autoComplete:`off`,spellCheck:!1,maxLength:512,value:b,disabled:W,"aria-invalid":A?!0:void 0,"aria-describedby":[l,A?d:null].filter(Boolean).join(` `)||void 0,onChange:e=>{x(e.target.value),A&&j(null)}}),(0,Q.jsx)(`p`,{id:l,className:`muted`,children:i(`replitGateway.keyHint`)}),A&&(0,Q.jsx)(`p`,{id:d,className:`field-error`,role:`alert`,children:A}),(0,Q.jsxs)(`label`,{className:`row replit-gateway-checkbox`,htmlFor:`replit-gateway-custom-domain`,children:[(0,Q.jsx)(`input`,{id:`replit-gateway-custom-domain`,type:`checkbox`,checked:S,disabled:W,onChange:e=>C(e.target.checked)}),(0,Q.jsx)(`span`,{children:i(`replitGateway.customDomainLabel`)})]}),(0,Q.jsx)(`p`,{className:`muted`,children:i(`replitGateway.customDomainHint`)}),(0,Q.jsxs)(`label`,{className:`row replit-gateway-checkbox`,htmlFor:`replit-gateway-set-default`,children:[(0,Q.jsx)(`input`,{id:`replit-gateway-set-default`,type:`checkbox`,checked:w,disabled:W,onChange:e=>T(e.target.checked)}),(0,Q.jsx)(`span`,{children:i(`replitGateway.setDefaultLabel`)})]}),N&&(0,Q.jsx)(s,{tone:`err`,children:N}),(0,Q.jsxs)(`div`,{className:`modal-actions`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn`,onClick:n,disabled:W,children:i(`replitGateway.close`)}),(0,Q.jsx)(`button`,{ref:m,type:`submit`,className:`btn btn-primary replit-gateway-install`,disabled:W,children:i(W?`replitGateway.installing`:`replitGateway.install`)})]})]}),E===`installing`&&(0,Q.jsx)(`p`,{"aria-live":`polite`,children:i(`replitGateway.installing`)}),E===`success`&&(0,Q.jsx)(`div`,{className:`modal-actions`,children:(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:n,children:i(`replitGateway.close`)})})]})]}),L&&(0,Q.jsx)(Fn,{busy:z,onCancel:()=>{R(!1),m.current?.focus()},onConfirm:()=>{B(!0),U(!0).finally(()=>{R(!1)})}})]})}function Ln({apiBase:e,config:t,adding:n,replitWizardOpen:r,addIntent:i,busy:a,addModalAccountRows:o,accountLoginStatus:s,accountLoginHint:c,removeConfirmName:l,removeDefaultProvider:u,codexLoginOpen:d,jsonLeaveOpen:f,jsonSaving:p,oauthTosPending:m,onCloseAdd:h,onCloseReplitWizard:g,onReplitInstalled:_,onAdded:v,onAccountLogin:y,onAccountCancelLogin:b,onAccountLogout:x,onAccountManage:S,onOpenAdd:C,onCloseCodexLogin:w,onCodexAdded:T,onCancelRemove:E,onConfirmRemove:D,onCancelJsonLeave:O,onDiscardJson:k,onSaveJson:A,onCancelOauthTos:j,onContinueOauthTos:M}){return(0,Q.jsxs)(Q.Fragment,{children:[n&&(0,Q.jsx)(Cn,{apiBase:e,existingNames:Object.keys(t.providers),initialTier:i?.tier,initialCustom:i?.custom,onClose:h,onAdded:v,accountRows:o,accountStatus:s,accountBusy:a,accountLoginHint:c??null,onAccountLogin:y,onAccountCancelLogin:b,onAccountLogout:x,onAccountManage:S,onOpen:C}),r&&(0,Q.jsx)(In,{apiBase:e,onClose:g,onInstalled:_}),d&&(0,Q.jsx)(z,{apiBase:e,onClose:w,onAdded:T}),l&&(0,Q.jsx)(Bt,{providerName:l,defaultProviderName:u,onCancel:E,onConfirm:D}),f&&O&&k&&A&&(0,Q.jsx)(Vt,{saving:p??!1,onCancel:O,onDiscard:k,onSave:A}),m&&(0,Q.jsx)(an,{providerId:m.provider,providerLabel:Qt(m.provider),onCancel:j,onContinue:M},`${m.provider}:${m.addAccount?`add`:`login`}`)]})}function Rn(e,t,n){return[...q(e.providers).map(e=>({id:e,label:a(e,n),kind:`codex`,href:`#codex-set`})),...t.toSorted((e,t)=>e.localeCompare(t)).map(e=>({id:e,label:Qt(e),kind:`oauth`}))]}function zn(e,t){let n={...t},r=t.openai;if(r)for(let[t,i]of Object.entries(e.providers))i.authMode===`forward`&&(n[t]=r);return n}function Bn({apiBase:e}){let n=t(),r=`ocx.providers.config.v1:${e}`,[i,a]=(0,Z.useState)(()=>T(r)),[o,c]=(0,Z.useState)(!1),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(``),[m,h]=(0,Z.useState)(!1),[g,_]=(0,Z.useState)(`err`),[v,y]=(0,Z.useState)(!1),[b,x]=(0,Z.useState)(0),[C,w]=(0,Z.useState)([]),[E,O]=(0,Z.useState)({}),[k,A]=(0,Z.useState)(null),[M,N]=(0,Z.useState)(null),[P,F]=(0,Z.useState)(null),[I,L]=(0,Z.useState)(null),[R,z]=(0,Z.useState)(null),[V,H]=(0,Z.useState)(!1),[U,W]=(0,Z.useState)(0),[G,K]=(0,Z.useState)(null),[te,ne]=(0,Z.useState)({token:0,provider:null}),re=(0,Z.useRef)(!0),ie=(0,Z.useRef)(null),q=(0,Z.useRef)(!1),Y=(0,Z.useCallback)((e,t=!0)=>{f(e),h(t),_(t?`ok`:`err`),x(e=>e+1)},[]),X=(0,Z.useCallback)(()=>{f(``),h(!1),_(`err`)},[]),oe=(0,Z.useCallback)(e=>{if(e.catalogRefreshPending){f(n(`codexAuth.catalogRefreshPending`)),h(!1),_(`warn`),x(e=>e+1);return}Y(n(`codexAuth.accountAdded`),!0)},[Y,n]);(0,Z.useEffect)(()=>(re.current=!0,()=>{re.current=!1}),[]),(0,Z.useEffect)(()=>{if(!d||!m)return;let e=window.setTimeout(X,4500);return()=>window.clearTimeout(e)},[d,m,b,X]);let se=(0,Z.useCallback)(e=>{c(!1),L(null),F(e),ne(t=>({token:t.token+1,provider:e}))},[]);j(`add-provider-presets:${e}`,[e],async t=>{let n=await fetch(`${e}/api/provider-presets`,{signal:t});if(!n.ok)throw Error(String(n.status));let r=await n.json();return Array.isArray(r.providers)&&r.providers.length>0?r.providers:null}),j(D(e),[e],async t=>{let n=await fetch(`${e}/api/usage?range=30d`,{signal:t});if(!n.ok)throw Error(String(n.status));return await n.json()},{deadlineMs:6e4});let[ce,le]=(0,Z.useState)({epoch:0,force:!1}),{fetchConfig:ue,fetchOauth:de,fetchProviderQuotas:fe}=rn({apiBase:e,setConfig:a,setOauthProviders:w,setOauthStatus:O,setConfigLoadFailed:y,invalidateProviderQuotas:(0,Z.useCallback)((e=!1)=>{le(t=>({epoch:t.epoch+1,force:e}))},[]),configCacheKey:r}),pe=ee(e),me=pe.activeNeedsReauth,he=(0,Z.useMemo)(()=>{let e=pe.accounts;if(e.length===0&&pe.loadState===`loading`)return E;let t=e.find(e=>e.isMain)??e[0],n=!!t&&!!t.email&&t.email!==`Codex App login`,r=e.some(e=>!e.isMain&&(e.hasCredential||e.email)),i=n||r,a=n?t?.email:e.find(e=>!e.isMain&&e.email)?.email??void 0;return{...E,openai:{loggedIn:i,...a?{email:a}:{},...me?{needsReauth:!0}:{}}}},[E,pe.accounts,pe.loadState,me]),{accountSets:ge,setAccountSets:_e,accountLoadStates:ve,switchingAccount:ye,keyPools:be,fetchAccountSets:xe,switchAccount:Se,switchApiKey:Ce,removeApiKey:we,addApiKeyValue:Te,editCredentialAlias:Ee,removeAccount:De,clearCooldown:Oe,activeAccountNeedsReauth:ke}=Yt({apiBase:e,t:n,config:i,oauthStatus:he,aliveRef:re,notify:Y,fetchConfig:ue,fetchOauth:de,fetchProviderQuotas:fe,codexActiveNeedsReauth:me}),{draft:Ae,setDraft:je,jsonEditorOpen:Me,jsonSaving:Ne,jsonLeaveOpen:Pe,saveConfig:Fe,openJsonEditor:Ie,discardJsonEditor:Le,requestCloseJsonEditor:Re,restoreJsonEditor:ze,jsonIsDirty:Be,setJsonLeaveOpen:$}=Xt({apiBase:e,config:i,notify:Y,fetchConfig:ue,fetchProviderQuotas:fe,onSaved:()=>W(e=>e+1),t:n});(0,Z.useEffect)(()=>{ie.current!==e&&(ie.current=e,Promise.resolve().then(()=>{ue(),de()}))},[e,ue,de]);let Ve=()=>W(e=>e+1),{cancelLoginOAuth:He,loginOAuth:Ue,logoutOAuth:We}=$t({apiBase:e,t:n,aliveRef:re,accountSets:ge,setAccountSets:_e,setBusy:A,setStatus:f,setLoginInfo:N,setOauthStatus:O,notify:Y,fetchConfig:ue,fetchOauth:de,fetchAccountSets:xe,fetchProviderQuotas:fe,bumpModelsRefresh:Ve,onLoginSettled:se}),{removeProvider:Ge,confirmRemoveProvider:Ke,setProviderDisabled:qe,setDefaultProvider:Je,updateProvider:Ye}=nn({apiBase:e,t:n,removeBusyRef:q,workspaceSelected:P,setWorkspaceSelected:F,setRemoveConfirmName:z,notify:Y,fetchConfig:ue,fetchOauth:de,fetchProviderQuotas:fe,refreshCodexAccount:()=>pe.load(!0)}),Xe=(e,t=!1)=>{if(k!==e){if(Gt(e)){K({provider:e,addAccount:t});return}Ue(e,t)}};if(!i)return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`page-head`,children:(0,Q.jsx)(`h2`,{children:n(`nav.providers`)})}),d&&(0,Q.jsx)(p,{tone:g,onDismiss:X,dismissLabel:n(`common.close`),children:d}),v?(0,Q.jsxs)(s,{tone:`err`,children:[n(`prov.loadConfigFail`),` `,(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void ue(),children:n(`common.retry`)})]}):d?null:(0,Q.jsxs)(`div`,{className:`providers-workspace providers-workspace--boot`,"aria-busy":`true`,children:[(0,Q.jsx)(`div`,{className:`providers-workspace-rail providers-workspace-rail--boot`,"aria-hidden":`true`}),(0,Q.jsx)(`div`,{className:`providers-workspace-main`,children:(0,Q.jsxs)(`p`,{className:`muted`,children:[(0,Q.jsx)(`span`,{className:`spin`,"aria-hidden":`true`}),` `,n(`prov.loadingConfig`)]})})]})]});let Ze=Rn(i,C,n),Qe=zn(i,he),$e=e=>i.providers[e]?.authMode===`forward`;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`page-head`,children:[(0,Q.jsx)(`h2`,{children:n(`nav.providers`)}),(0,Q.jsxs)(`div`,{className:`row`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`btn`,onClick:()=>u(!0),children:n(`replitGateway.openButton`)}),(0,Q.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>c(!0),children:[(0,Q.jsx)(S,{}),n(`prov.add`)]})]})]}),d&&(0,Q.jsx)(p,{tone:g,onDismiss:X,dismissLabel:n(`common.close`),children:d}),v&&(0,Q.jsxs)(s,{tone:`err`,children:[n(`prov.loadConfigFail`),` `,(0,Q.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void ue(),children:n(`common.retry`)})]}),(0,Q.jsx)(it,{onRemoveProvider:Ge,providers:i.providers,apiBase:e,defaultProvider:i.defaultProvider,selectedName:P,onSelect:F,onAddProvider:e=>{L(e??null),c(!0)},onEditConfig:Ie,jsonEditor:{open:Me,draft:Ae,isDirty:Be,onDraftChange:je,onSave:()=>Fe(),onClose:Re,onRestore:ze},jsonSaving:Ne,modelsRefreshToken:U,activeAccountNeedsReauth:ke,quotaRefreshEpoch:ce.epoch,quotaForceRefresh:ce.force,detail:(t,n)=>{let r=Qe[t.name]??E[t.name];return(0,Q.jsx)(Ht,{item:t,usageTotals:n.usageTotals,modelUsage:n.modelUsage,accountUsage:n.accountUsage,quotaReport:n.quotaReport,availableModels:n.availableModels,hasLiveModels:n.hasLiveModels,selectedModels:n.selectedModels,modelsLoading:n.modelsLoading,modelsLoadFailed:n.modelsLoadFailed,onRetryModels:n.onRetryModels,oauthEmail:r?.email,onDeselect:()=>F(null),apiBase:e,oauth:r,accounts:ge[t.name]?.accounts??[],keys:be[t.name]??[],accountLoadState:ve[t.name]??(t.authMode===`oauth`?`idle`:`ready`),accountsFocusToken:te.token,accountsFocusProvider:te.provider,switchingAccountId:ye?.provider===t.name?ye.accountId:null,busyProvider:k,loginHint:M,authHandlers:{onLogin:Xe,onCancelLogin:He,onLogout:We,onReauth:(e,t)=>Ue(e,!0,t),onSwitchAccount:Se,onRemoveAccount:De,onRetryAccounts:async e=>{await xe([e])},onAddApiKey:Te,onSwitchApiKey:Ce,onRemoveApiKey:we,onEditAlias:Ee,onClearCooldown:Oe},isDefault:t.name===i.defaultProvider,onRemoveProvider:Ge,onSetDisabled:qe,onSetDefault:e=>{Je(e)},onUpdateProvider:Ye,codexController:pe},t.name)}}),(0,Q.jsx)(Ln,{apiBase:e,config:i,adding:o,replitWizardOpen:l,addIntent:I,busy:k,addModalAccountRows:Ze,accountLoginStatus:Qe,accountLoginHint:M,removeConfirmName:R,removeDefaultProvider:R===i.defaultProvider?Object.entries(i.providers).find(([e,t])=>e!==R&&t.disabled!==!0)?.[0]??null:null,codexLoginOpen:V,jsonLeaveOpen:Pe,jsonSaving:Ne,oauthTosPending:G,onCloseAdd:()=>{k&&He(k),c(!1),L(null)},onCloseReplitWizard:()=>u(!1),onReplitInstalled:e=>{u(!1),Y(n(`prov.added`,{name:e,cmd:`ocx sync`}),!0),ue(),fe(!0),Ve(),F(e)},onAdded:e=>{c(!1),L(null),Y(n(`prov.added`,{name:e,cmd:`ocx sync`}),!0),ue(),de(),fe(!0),Ve()},onAccountLogin:async(t,r=!1)=>{if(t===`openai`){if(k===`openai`)return;let t=i.providers.openai,r=J(t);if(r===`invalid`){Y(n(`codexAuth.openaiMissing`),!1);return}if(r===`absent`||r===`disabled`){A(`openai`);try{await B(e,r),await ue()}catch(e){e instanceof ae?Y(n(e.i18nKey),!1):Y(e instanceof Error?e.message:n(`prov.saveFailed`),!1);return}finally{re.current&&A(e=>e===`openai`?null:e)}}H(!0);return}if($e(t)){H(!0);return}(i.providers[t]?.authMode===`oauth`||C.includes(t))&&Xe(t,r)},onAccountCancelLogin:e=>{He(e)},onAccountLogout:e=>{We(e)},onAccountManage:e=>{se(e)},onOpenAdd:de,onCloseCodexLogin:()=>H(!1),onCodexAdded:e=>{H(!1),oe(e),ue(),de(),fe(!0),Ve()},onCancelRemove:()=>z(null),onConfirmRemove:()=>{Ke(R)},onCancelJsonLeave:()=>{Ne||$(!1)},onDiscardJson:Le,onSaveJson:()=>{Fe()},onCancelOauthTos:()=>K(null),onContinueOauthTos:()=>{let e=G;e&&(K(null),Ue(e.provider,e.addAccount))}})]})}export{Bn as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t,h as n,m as r}from"./shared-
|
|
1
|
+
import{_ as e,c as t,h as n,m as r}from"./shared-BHpPx-nZ.js";import{F as i,M as a}from"./index-CZ1jyQCF.js";var o=r(),s={"not-installed":`integrations.state.notInstalled`,unknown:`integrations.state.unknown`,absent:`integrations.state.absent`,current:`integrations.state.current`,stale:`integrations.state.stale`,conflict:`integrations.state.conflict`,unsafe:`integrations.state.unsafe`},c={"not-installed":`badge badge-muted`,unknown:`badge badge-muted`,absent:`badge badge-muted`,current:`badge badge-green`,stale:`badge badge-amber`,conflict:`badge integration-badge--danger`,unsafe:`badge integration-badge--danger-outline`};function l({state:e,installed:n,id:r}){let i=t(),a=e===`unknown`||e===`not-installed`||n?e:`not-installed`;return(0,o.jsx)(`span`,{id:r,className:c[a],"data-integration-state":a,children:i(s[a])})}var u=e(n(),1),d=[`opencode`,`pi`,`omp`,`hermes`,`openclaw`,`kimi`,`gajae`,`dsh`,`mcode`,`zcode`,`prime`],f=new Set([`not_installed`,`conflict`,`unsafe`,`non_loopback`,`drift_requires_confirm`,`snapshot_expired`,`write_failed`]),p=new Set([`integration_unsafe`,`integration_conflict`,`integration_drift_confirmation_required`,`integration_snapshot_expired`,`integration_mutation_failed`]),m=new Set([`absent`,`current`,`stale`,`conflict`,`unsafe`]);function h(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function g(e){return!h(e)||!f.has(String(e.reason))?!1:typeof e.error==`string`&&p.has(String(e.code))&&d.includes(e.clientId)&&m.has(String(e.state))&&typeof e.message==`string`}var _=class extends Error{refusal;status;body;constructor(e,t){let n=g(t)?t:null;super(n?.message??t.error??t.message??String(e)),this.name=`IntegrationApiError`,this.status=e,this.body=t,this.refusal=n}};async function v(e){try{let t=await e.json();return h(t)?t:{}}catch{return{}}}async function y(e){if(!e.ok)throw new _(e.status,await v(e));let t=await a(e);if(t==null)throw new _(e.status,{});return t}async function b(e,t){return y(await fetch(`${e}/api/client-integrations`,{signal:t}))}async function x(e,t,n){return y(await fetch(`${e}/api/client-integrations/${encodeURIComponent(t)}`,{signal:n}))}async function S(e,t,n){let r=t?`?client=${encodeURIComponent(t)}`:``;return y(await fetch(`${e}/api/client-integrations/journal${r}`,{signal:n}))}async function C(e,t,n,r){return y(await fetch(`${e}/api/client-integrations/${encodeURIComponent(t)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:n}),signal:r}))}async function w(e,t,n=!1,r){return y(await fetch(`${e}/api/client-integrations/restore`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({opId:t,confirmDrift:n}),signal:r}))}async function T(e){try{let t=await e;return t.ok?await a(t)??null:null}catch{return null}}async function E(e,t){let n=await T(fetch(`${e}/api/startup-health`,{signal:t}));return n?{routingInjected:n.routingInjected===!0,status:typeof n.status==`string`?n.status:void 0,recommendedCommand:typeof n.recommendedCommand==`string`?n.recommendedCommand:null}:null}async function D(e,t){let n=await fetch(`${e}/api/keys`,{signal:t});if(!n.ok)throw Error(`/api/keys responded ${n.status}`);let r=await a(n);if(!r||!Array.isArray(r.keys))throw Error(`/api/keys returned an unexpected body`);return r.keys.length}async function O(e,t){let n=await T(fetch(`${e}/api/claude-code`,{signal:t}));return n?{enabled:n.enabled===!0,authMode:typeof n.authMode==`string`?n.authMode:void 0}:null}async function k(e,t){let n=await T(fetch(`${e}/api/claude-desktop/status`,{signal:t}));return!n||typeof n.desiredEnabled!=`boolean`||typeof n.installed!=`boolean`||typeof n.observedKind!=`string`?null:{desiredEnabled:n.desiredEnabled,installed:n.installed,observedKind:n.observedKind,applied:n.applied===!0,stale:n.stale===!0,drift:n.drift===!0,driftReason:typeof n.driftReason==`string`?n.driftReason:null,activeProfile:typeof n.activeProfile==`boolean`?n.activeProfile:null,appliedAt:typeof n.appliedAt==`string`?n.appliedAt:null}}async function A(e,t){let n=await T(fetch(`${e}/api/grok`,{signal:t}));return n?{present:n.present===!0,models:Array.isArray(n.models)?n.models:[]}:null}var j=new Set([`claude`,`grok`,`codex`,`claude-desktop`]),M=new Set([`native_integration_refused`,`native_integration_failed`]),N=new Set([`not_installed`,`orphaned_marker`,`home_mismatch`,`config_busy`,`write_failed`,`metadata_unreadable`,`cleanup_incomplete`,`desired_state_changed`]);function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function F(e){return P(e)?typeof e.error==`string`&&M.has(String(e.code))&&j.has(String(e.clientId))&&N.has(String(e.reason))&&typeof e.message==`string`:!1}var I=class extends Error{refusal;status;body;constructor(e,t){let n=F(t)?t:null;super(n?.message??t.error??t.message??String(e)),this.name=`NativeApiError`,this.status=e,this.body=t,this.refusal=n}};async function L(e){try{let t=await e;return t.ok?await a(t)??null:null}catch{return null}}async function R(e){try{let t=await e.json();return P(t)?t:{}}catch{return{}}}async function z(e){if(!e.ok)throw new I(e.status,await R(e));let t=await a(e);if(t==null)throw new I(e.status,{});return t}function B(e,t){return L(fetch(`${e}/api/native-integrations`,{signal:t}))}async function V(e,t,n,r){return z(await fetch(`${e}/api/native-integrations/${encodeURIComponent(t)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:n}),signal:r}))}var H={integration_mutation_busy:`integrations.error.busy`};function U(e){return e instanceof _?e.refusal:null}function W(e){return e instanceof I?e.refusal:null}function G(e){return e===`conflict`?`integrations.error.conflict`:e===`unsafe`?`integrations.error.unsafe`:e===`non_loopback`?`integrations.error.nonLoopback`:`integrations.error.generic`}var K=new Set([`non_loopback`]);function q(e,t,n){return t.reason===`orphaned_marker`?e(`integrations.native.error.orphanedMarker`,{path:n??``}):t.reason===`home_mismatch`?`${e(`integrations.native.error.homeMismatch`)} ${t.message}`:t.reason===`not_installed`?e(`integrations.native.error.notInstalled`):t.reason===`config_busy`?e(`integrations.native.error.configBusy`):t.reason===`metadata_unreadable`?e(`integrations.native.error.desktopUnsafeMetadata`,{path:n??``}):t.reason===`cleanup_incomplete`?e(`integrations.native.error.desktopCleanupIncomplete`,{paths:(t.residualPaths??[]).join(`, `)}):t.message||e(`integrations.error.generic`)}function J(e,t,n,r){let i=W(t);if(i)return q(e,i,r);let a=U(t);if(!a){let r=H[t instanceof _?String(t.body.code??``):``];return r?e(r):t instanceof Error&&t.message?t.message:n??e(`integrations.error.generic`)}let o=K.has(a.reason)?e(G(a.reason),{client:a.clientId}):a.message||e(G(a.reason));return a.snapshotPath?e(a.residual?`integrations.error.residual`:`integrations.error.recover`,{message:o,path:a.snapshotPath}):a.reason===`conflict`||a.reason===`unsafe`?`${e(G(a.reason))} ${o}`:o}function Y({apiBase:e,row:n,onClose:r,onRestored:a}){let s=t(),[c,l]=(0,u.useState)(!1),[d,f]=(0,u.useState)(!1),[p,m]=(0,u.useState)(null),h=async()=>{if(!d){f(!0),m(null);try{await w(e,n.opId,c),a(),r()}catch(e){if(U(e)?.reason===`drift_requires_confirm`){l(!0),f(!1);return}m(J(s,e)),f(!1)}}};return(0,o.jsx)(`dialog`,{className:`modal-overlay`,open:!0,style:{display:`flex`,border:`none`,margin:0,maxWidth:`none`,maxHeight:`none`,width:`100%`,height:`100%`},"aria-labelledby":`integration-restore-title`,onCancel:e=>{e.preventDefault(),r()},children:(0,o.jsxs)(`div`,{className:`modal-card integration-restore-dialog`,children:[(0,o.jsx)(`div`,{className:`modal-head`,children:(0,o.jsx)(`h3`,{id:`integration-restore-title`,children:s(c?`integrations.restore.driftTitle`:`integrations.restore.title`)})}),(0,o.jsx)(`div`,{className:`modal-desc`,children:s(c?`integrations.restore.driftBody`:`integrations.restore.body`)}),(0,o.jsx)(`p`,{className:`integration-path`,children:n.configPath}),p&&(0,o.jsx)(i,{tone:`err`,children:p}),(0,o.jsxs)(`div`,{className:`modal-actions`,children:[(0,o.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:r,disabled:d,children:s(`common.cancel`)}),(0,o.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>void h(),disabled:d,children:s(d?`integrations.restore.pending`:c?`integrations.restore.confirmDrift`:`integrations.restore.confirm`)})]})]})})}export{V as a,O as c,A as d,S as f,l as g,C as h,B as i,k as l,b as m,J as n,d as o,x as p,I as r,D as s,Y as t,E as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,h as t,m as n,s as r}from"./shared-DI18-uF7.js";import{B as i,F as a,J as o,U as s,dt as c,f as l,gt as u,h as d,p as f,ut as p}from"./index-DHQHBRhb.js";import{t as m}from"./data-surface-CETFXqiA.js";import{t as h}from"./data-surface-B8PX8rjm.js";var g=e(t(),1);function _(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.supported==`boolean`&&typeof t.installed==`boolean`&&typeof t.running==`boolean`&&typeof t.stale==`boolean`&&typeof t.summary==`string`}var v={native:`startup.status.native`,protected:`startup.status.protected`,"at-risk":`startup.status.atRisk`},y={native:`startup.summary.native`,protected:`startup.summary.protected`,"at-risk":`startup.summary.atRisk`},b={service:`startup.protection.service`,shim:`startup.protection.shim`,none:`startup.protection.none`},x=n();function S({ok:e,yes:t,no:n}){return(0,x.jsx)(`span`,{className:`badge ${e?`badge-green`:`badge-amber`}`,children:e?t:n})}function C({failed:e,data:t}){let{t:n}=r(),i=e?`startup-hero--risk`:t.status===`protected`?`startup-hero--safe`:t.status===`at-risk`?`startup-hero--risk`:`startup-hero--native`,a=e||t.status===`at-risk`?s:o,c=t.routingKind===`opencodex-local`?`startup.routing.proxy`:t.routingKind===`custom-local`?`startup.routing.customLocal`:t.routingKind===`custom-remote`?`startup.routing.customRemote`:t.routingKind===`unknown`?`startup.routing.unknown`:`startup.routing.native`;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`section`,{className:`panel startup-hero ${i}`,"aria-live":`polite`,children:[(0,x.jsx)(`div`,{className:`startup-hero-icon`,children:(0,x.jsx)(a,{})}),(0,x.jsxs)(`div`,{className:`startup-hero-copy`,children:[(0,x.jsx)(`span`,{className:`badge ${e||t.status===`at-risk`?`badge-amber`:`badge-green`}`,children:n(e?`startup.status.atRisk`:v[t.status])}),(0,x.jsx)(`h3`,{children:n(e?`startup.error`:y[t.status])}),(0,x.jsx)(`p`,{children:e?n(`startup.staleData`):t.status===`at-risk`?n(l(t)):n(`startup.safeDetail`)})]})]}),(0,x.jsxs)(`div`,{className:`startup-state-grid`,children:[(0,x.jsxs)(`section`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`label`,children:n(`startup.routing`)}),(0,x.jsx)(`div`,{className:`value`,children:n(c)})]}),(0,x.jsxs)(`section`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`label`,children:n(`startup.restartProtection`)}),(0,x.jsx)(`div`,{className:`value`,children:n(b[t.protection])})]}),(0,x.jsxs)(`section`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`label`,children:n(`startup.preference`)}),(0,x.jsx)(`div`,{className:`value`,children:n(t.autostartEnabled?`startup.enabled`:`startup.disabled`)})]})]})]})}function w({data:e,failed:t,loading:n=!1,installBusy:i,installResult:a,onInstall:o}){let{t:s}=r(),c=e.serviceSupported&&e.serviceInstalled&&e.serviceStale&&!e.serviceConflict,l=e.shimInstalled&&!e.shimHealthy,u=i!==null||t||n;return(0,x.jsxs)(`section`,{className:`panel startup-details`,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{className:`panel-title`,children:s(`startup.details`)}),(0,x.jsx)(`span`,{className:`muted mono`,children:e.platform})]}),(0,x.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:s(`startup.service`)}),(0,x.jsx)(`span`,{children:s(`startup.serviceHint`)})]}),(0,x.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,x.jsx)(S,{ok:e.serviceViable,yes:s(`startup.viable`),no:s(e.serviceConflict?`startup.conflict`:e.serviceStale?`startup.stale`:e.serviceInstalled?`startup.unhealthy`:e.serviceSupported?`startup.notInstalled`:`startup.unsupported`)}),e.serviceSupported&&!e.serviceInstalled&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.service`)} - ${s(`startup.install`)}`,disabled:u,onClick:()=>o(`install-service`),children:s(i===`install-service`?`startup.installing`:`startup.install`)}),c&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.service`)} - ${s(`startup.repair`)}`,disabled:u,onClick:()=>o(`install-service`,{repair:!0}),children:s(i===`install-service`?`startup.repairing`:`startup.repair`)})]})]}),(0,x.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:s(`startup.shim`)}),(0,x.jsx)(`span`,{children:s(`startup.shimHint`)})]}),(0,x.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,x.jsx)(S,{ok:e.shimHealthy&&e.autostartEnabled,yes:s(e.shimCoverage===`cli-only`?`startup.cliOnly`:`startup.healthy`),no:s(e.shimInstalled?e.shimHealthy&&!e.autostartEnabled?`startup.installedDisabled`:`startup.stale`:`startup.notInstalled`)}),!e.shimInstalled&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.shim`)} - ${s(`startup.install`)}`,disabled:u,onClick:()=>o(`install-shim`),children:s(i===`install-shim`?`startup.installing`:`startup.install`)}),l&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.shim`)} - ${s(`startup.repair`)}`,disabled:u,onClick:()=>o(`install-shim`,{repair:!0}),children:s(i===`install-shim`?`startup.repairing`:`startup.repair`)})]})]}),a&&(0,x.jsx)(`div`,{className:`notice ${a.kind===`success`?`notice-ok`:`notice-warn`} startup-action-notice`,role:`status`,"aria-live":`polite`,children:a.kind===`success`?a.action===`install-service`?s(a.repair?`startup.serviceRepaired`:`startup.serviceInstalled`):s(a.repair?`startup.shimRepaired`:`startup.shimInstalled`):`${s(`startup.installFailed`)} ${a.detail??``}`})]})}function T({tray:e,trayLoading:t,trayError:n,trayBusy:i,onTrayAction:a}){let{t:o}=r();return(0,x.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{className:`panel-title`,children:o(`startup.tray.title`)}),(0,x.jsx)(p,{})]}),(0,x.jsx)(`p`,{className:`muted`,children:o(`startup.tray.hint`)}),(0,x.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:o(`startup.tray.login`)}),(0,x.jsx)(`span`,{children:o(`startup.tray.notProtection`)})]}),t||n||!e?(0,x.jsx)(`span`,{className:`badge badge-amber`,children:o(t?`startup.tray.loading`:`startup.tray.unavailable`)}):(0,x.jsx)(S,{ok:e.running&&!e.stale,yes:o(`startup.tray.running`),no:o(e.stale?`startup.tray.stale`:e.installed?`startup.tray.stopped`:`startup.tray.notInstalled`)})]}),(0,x.jsxs)(`div`,{className:`startup-tray-buttons`,children:[!t&&!n&&e&&!e.installed&&!e.stale&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:i,onClick:()=>a(`install`),children:o(`startup.tray.install`)}),!t&&!n&&e?.installed&&!e.stale&&!e.running&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:i,onClick:()=>a(`start`),children:o(`startup.tray.start`)}),!t&&!n&&e?.running&&!e.stale&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,disabled:i,onClick:()=>a(`stop`),children:o(`startup.tray.stop`)}),!t&&!n&&e&&(e.installed||e.stale)&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-danger`,disabled:i,onClick:()=>{window.confirm(o(`startup.tray.uninstall`))&&a(`uninstall`)},children:o(`startup.tray.uninstall`)})]}),(n||e?.stale)&&(0,x.jsx)(`div`,{className:`notice notice-warn startup-tray-error`,role:`alert`,children:o(`startup.tray.error`)})]})}function E({data:e,copied:t,onCopy:n}){let{t:i}=r(),a=e.serviceInstalled&&!e.serviceConflict?e.commands.repairService:e.commands.installService;return(0,x.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{className:`panel-title`,children:i(`startup.recovery`)}),(0,x.jsx)(u,{})]}),(0,x.jsx)(`p`,{className:`muted`,children:i(`startup.recoveryHint`)}),(0,x.jsxs)(`div`,{className:`startup-command-list`,children:[e.serviceSupported&&(0,x.jsxs)(`div`,{className:`startup-command-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:i(`startup.command.service`)}),(0,x.jsx)(`code`,{children:a})]}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(a),children:i(t===a?`startup.copied`:`startup.copy`)})]}),(0,x.jsxs)(`div`,{className:`startup-command-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:i(`startup.command.shim`)}),(0,x.jsx)(`code`,{children:e.commands.installShim})]}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.installShim),children:t===e.commands.installShim?i(`startup.copied`):i(`startup.copy`)})]}),(0,x.jsxs)(`div`,{className:`startup-command-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:i(`startup.command.native`)}),(0,x.jsx)(`code`,{children:e.commands.restoreNative})]}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.restoreNative),children:t===e.commands.restoreNative?i(`startup.copied`):i(`startup.copy`)})]})]}),e.status===`at-risk`&&(0,x.jsxs)(`div`,{className:`notice notice-warn startup-action-notice`,role:`alert`,children:[(0,x.jsx)(p,{}),` `,i(`startup.recommended`,{cmd:e.recommendedCommand??e.commands.installService})]})]})}var D=`ocx.startup.page.v1:`;function O(e,t){let n=t===`win32`?`; `:` && `;return e.join(n)}function k(e,t,n){if(!e)return{warning:null,fix:null};let r=!!e.catalogClamp?.active,i=!!e.newerAvailable,a=(r?e.catalogClamp?.runtimeVersion:e.version)??e.version??`unknown`,o=(e.catalogClamp?.removedEfforts??[]).join(`, `),s=O([`ocx doctor --fix-codex-runtime`,`ocx sync`],n);return r?{warning:o?t(`startup.codexRuntime.clampHiddenWithEfforts`,{version:a,efforts:o}):t(`startup.codexRuntime.clampHidden`,{version:a}),fix:i?s:`ocx sync`}:i?{warning:t(`startup.codexRuntime.olderBinary`,{version:a}),fix:s}:{warning:null,fix:null}}function A({apiBase:e}){let{t}=r(),n=`${D}${e}`,o=(0,g.useMemo)(()=>f(n),[n]),s=`startup-page:${e}`,[l,u]=(0,g.useState)(null),[p,v]=(0,g.useState)(()=>o?.tray??null),[y,b]=(0,g.useState)(()=>!o?.data),[S,O]=(0,g.useState)(!1),[A,j]=(0,g.useState)(!1),[M,N]=(0,g.useState)(null),[P,F]=(0,g.useState)(null),[I,L]=(0,g.useState)(()=>o?.warning??null),[R,z]=(0,g.useState)(()=>o?.fix??null),[B,V]=(0,g.useState)(()=>!o?.data),H=(0,g.useRef)(!!o?.data),U=(0,g.useRef)(0);(0,g.useEffect)(()=>()=>{U.current+=1},[e]);let W=(0,g.useCallback)(async r=>{let i=++U.current,a=H.current;a||(b(!0),V(!0));try{let a=fetch(`${e}/api/settings`,{signal:r}).then(async e=>e.ok?await e.json():null).catch(()=>null),o=await fetch(`${e}/api/startup-health`,{signal:r});if(!o.ok)throw Error(`fetch failed`);let s=await o.json();F(e=>e?.kind===`error`&&(s.status===`native`&&e.forLocalRouting===!0||(e.action===`install-service`?s.serviceViable:s.shimInstalled&&s.shimHealthy))?null:e),H.current=!0;let c=f(n);d(n,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:c?.tray??null});let l=s.platform===`win32`?fetch(`${e}/api/windows-tray`,{signal:r}).then(async e=>{if(!e.ok)throw Error(`tray status failed`);let t=await e.json();if(!_(t))throw Error(`invalid tray status`);return{tray:t,error:!1}}).catch(()=>({tray:null,error:!0})):Promise.resolve({tray:null,error:!1});return Promise.all([a,l]).then(([e,a])=>{if(r.aborted||i!==U.current)return;let o=s.platform===`win32`?a.tray:null;if(s.platform===`win32`?(v(o),j(a.error)):(v(null),j(!1)),b(!1),V(!1),e){let r=k(e.codexRuntime,t,s.platform);L(r.warning),z(r.fix),d(n,{data:s,warning:r.warning,fix:r.fix,tray:o});return}let c=f(n);d(n,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:o})}),s}catch(e){throw r.aborted?e:(a||(v(null),j(!0),L(null),z(null)),V(!1),b(!1),e)}},[e,n,t]),G=m(s,[e],W,{isEmpty:()=>!1,initialData:o?.data??void 0}),K=G.state,q=G.refresh,J=K.data??o?.data??null,Y=K.refreshing,X=!!J?.diagnosticStale||K.showError;(0,g.useEffect)(()=>{if(!J?.diagnosticStale)return;let e=window.setTimeout(q,2e3);return()=>window.clearTimeout(e)},[J,q]);let Z=async e=>{try{await navigator.clipboard.writeText(e),u(e),window.setTimeout(()=>u(t=>t===e?null:t),1600)}catch{u(null)}},Q=async t=>{O(!0),j(!1);try{let n=await fetch(`${e}/api/windows-tray`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t})});if(!n.ok)throw Error(`tray action failed`);let r=await n.json();if(!_(r.status))throw Error(`invalid tray action status`);v(r.status),j(!1)}catch{v(null),j(!0)}finally{O(!1)}},$=async(t,n)=>{N(t),F(null);try{let r=await fetch(`${e}/api/startup-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t,repair:n?.repair===!0})});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(typeof e?.error==`string`?e.error:`installation failed`)}F({kind:`success`,action:t,repair:n?.repair===!0}),q()}catch(e){F({kind:`error`,action:t,repair:n?.repair===!0,detail:e instanceof Error?e.message:String(e),forLocalRouting:J?.localRoutingDependency===!0})}finally{N(null)}};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`page-head`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`h2`,{children:t(`startup.title`)}),(0,x.jsx)(`p`,{className:`page-sub startup-page-sub`,children:t(`startup.subtitle`)})]}),(0,x.jsxs)(`div`,{className:`startup-page-head-actions`,children:[(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>i(`dashboard`),children:t(`startup.backToDashboard`)}),(0,x.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>q(),disabled:Y,children:[(0,x.jsx)(c,{}),` `,t(`startup.refresh`)]})]})]}),K.showSkeleton&&!J?(0,x.jsx)(h,{label:t(`startup.loading`),rows:5}):K.kind===`failed-cold`?(0,x.jsxs)(`div`,{className:`startup-page-notice`,children:[(0,x.jsx)(a,{tone:`err`,children:K.error instanceof Error?K.error.message:t(`startup.error`)}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>q(),children:t(`common.retry`)})]}):J?(0,x.jsxs)(x.Fragment,{children:[K.showError&&(0,x.jsx)(a,{tone:`err`,children:t(`startup.error`)}),X&&(0,x.jsx)(`div`,{className:`notice notice-warn startup-page-notice`,role:`alert`,children:t(`startup.staleData`)}),(B||I)&&(0,x.jsx)(`div`,{className:`startup-runtime-notice-slot${B&&!I?` startup-runtime-notice-slot--pending`:``}`,"aria-hidden":B&&!I?!0:void 0,children:I&&(0,x.jsxs)(`div`,{className:`notice notice-warn startup-page-notice startup-runtime-notice`,role:`status`,children:[(0,x.jsx)(`p`,{className:`startup-runtime-notice__text`,children:I}),R&&(0,x.jsxs)(`div`,{className:`startup-runtime-notice__fix`,children:[(0,x.jsx)(`code`,{children:R}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void Z(R),children:t(l===R?`startup.copied`:`startup.copy`)})]})]})}),(0,x.jsx)(C,{failed:X,data:J}),(0,x.jsx)(w,{data:J,failed:X,loading:Y,installBusy:M,installResult:P,onInstall:(e,t)=>{$(e,t)}}),J.platform===`win32`&&(0,x.jsx)(T,{tray:p,trayLoading:y,trayError:A,trayBusy:S,onTrayAction:e=>{Q(e)}}),(0,x.jsx)(E,{data:J,copied:l,onCopy:e=>{Z(e)}})]}):null]})}export{A as default};
|
|
1
|
+
import{_ as e,h as t,m as n,s as r}from"./shared-BHpPx-nZ.js";import{B as i,F as a,J as o,U as s,dt as c,f as l,gt as u,h as d,p as f,ut as p}from"./index-CZ1jyQCF.js";import{t as m}from"./data-surface-OiQUZok8.js";import{t as h}from"./data-surface-B0APtUxm.js";var g=e(t(),1);function _(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.supported==`boolean`&&typeof t.installed==`boolean`&&typeof t.running==`boolean`&&typeof t.stale==`boolean`&&typeof t.summary==`string`}var v={native:`startup.status.native`,protected:`startup.status.protected`,"at-risk":`startup.status.atRisk`},y={native:`startup.summary.native`,protected:`startup.summary.protected`,"at-risk":`startup.summary.atRisk`},b={service:`startup.protection.service`,shim:`startup.protection.shim`,none:`startup.protection.none`},x=n();function S({ok:e,yes:t,no:n}){return(0,x.jsx)(`span`,{className:`badge ${e?`badge-green`:`badge-amber`}`,children:e?t:n})}function C({failed:e,data:t}){let{t:n}=r(),i=e?`startup-hero--risk`:t.status===`protected`?`startup-hero--safe`:t.status===`at-risk`?`startup-hero--risk`:`startup-hero--native`,a=e||t.status===`at-risk`?s:o,c=t.routingKind===`opencodex-local`?`startup.routing.proxy`:t.routingKind===`custom-local`?`startup.routing.customLocal`:t.routingKind===`custom-remote`?`startup.routing.customRemote`:t.routingKind===`unknown`?`startup.routing.unknown`:`startup.routing.native`;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`section`,{className:`panel startup-hero ${i}`,"aria-live":`polite`,children:[(0,x.jsx)(`div`,{className:`startup-hero-icon`,children:(0,x.jsx)(a,{})}),(0,x.jsxs)(`div`,{className:`startup-hero-copy`,children:[(0,x.jsx)(`span`,{className:`badge ${e||t.status===`at-risk`?`badge-amber`:`badge-green`}`,children:n(e?`startup.status.atRisk`:v[t.status])}),(0,x.jsx)(`h3`,{children:n(e?`startup.error`:y[t.status])}),(0,x.jsx)(`p`,{children:e?n(`startup.staleData`):t.status===`at-risk`?n(l(t)):n(`startup.safeDetail`)})]})]}),(0,x.jsxs)(`div`,{className:`startup-state-grid`,children:[(0,x.jsxs)(`section`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`label`,children:n(`startup.routing`)}),(0,x.jsx)(`div`,{className:`value`,children:n(c)})]}),(0,x.jsxs)(`section`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`label`,children:n(`startup.restartProtection`)}),(0,x.jsx)(`div`,{className:`value`,children:n(b[t.protection])})]}),(0,x.jsxs)(`section`,{className:`stat`,children:[(0,x.jsx)(`div`,{className:`label`,children:n(`startup.preference`)}),(0,x.jsx)(`div`,{className:`value`,children:n(t.autostartEnabled?`startup.enabled`:`startup.disabled`)})]})]})]})}function w({data:e,failed:t,loading:n=!1,installBusy:i,installResult:a,onInstall:o}){let{t:s}=r(),c=e.serviceSupported&&e.serviceInstalled&&e.serviceStale&&!e.serviceConflict,l=e.shimInstalled&&!e.shimHealthy,u=i!==null||t||n;return(0,x.jsxs)(`section`,{className:`panel startup-details`,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{className:`panel-title`,children:s(`startup.details`)}),(0,x.jsx)(`span`,{className:`muted mono`,children:e.platform})]}),(0,x.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:s(`startup.service`)}),(0,x.jsx)(`span`,{children:s(`startup.serviceHint`)})]}),(0,x.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,x.jsx)(S,{ok:e.serviceViable,yes:s(`startup.viable`),no:s(e.serviceConflict?`startup.conflict`:e.serviceStale?`startup.stale`:e.serviceInstalled?`startup.unhealthy`:e.serviceSupported?`startup.notInstalled`:`startup.unsupported`)}),e.serviceSupported&&!e.serviceInstalled&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.service`)} - ${s(`startup.install`)}`,disabled:u,onClick:()=>o(`install-service`),children:s(i===`install-service`?`startup.installing`:`startup.install`)}),c&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.service`)} - ${s(`startup.repair`)}`,disabled:u,onClick:()=>o(`install-service`,{repair:!0}),children:s(i===`install-service`?`startup.repairing`:`startup.repair`)})]})]}),(0,x.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:s(`startup.shim`)}),(0,x.jsx)(`span`,{children:s(`startup.shimHint`)})]}),(0,x.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,x.jsx)(S,{ok:e.shimHealthy&&e.autostartEnabled,yes:s(e.shimCoverage===`cli-only`?`startup.cliOnly`:`startup.healthy`),no:s(e.shimInstalled?e.shimHealthy&&!e.autostartEnabled?`startup.installedDisabled`:`startup.stale`:`startup.notInstalled`)}),!e.shimInstalled&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.shim`)} - ${s(`startup.install`)}`,disabled:u,onClick:()=>o(`install-shim`),children:s(i===`install-shim`?`startup.installing`:`startup.install`)}),l&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${s(`startup.shim`)} - ${s(`startup.repair`)}`,disabled:u,onClick:()=>o(`install-shim`,{repair:!0}),children:s(i===`install-shim`?`startup.repairing`:`startup.repair`)})]})]}),a&&(0,x.jsx)(`div`,{className:`notice ${a.kind===`success`?`notice-ok`:`notice-warn`} startup-action-notice`,role:`status`,"aria-live":`polite`,children:a.kind===`success`?a.action===`install-service`?s(a.repair?`startup.serviceRepaired`:`startup.serviceInstalled`):s(a.repair?`startup.shimRepaired`:`startup.shimInstalled`):`${s(`startup.installFailed`)} ${a.detail??``}`})]})}function T({tray:e,trayLoading:t,trayError:n,trayBusy:i,onTrayAction:a}){let{t:o}=r();return(0,x.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{className:`panel-title`,children:o(`startup.tray.title`)}),(0,x.jsx)(p,{})]}),(0,x.jsx)(`p`,{className:`muted`,children:o(`startup.tray.hint`)}),(0,x.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:o(`startup.tray.login`)}),(0,x.jsx)(`span`,{children:o(`startup.tray.notProtection`)})]}),t||n||!e?(0,x.jsx)(`span`,{className:`badge badge-amber`,children:o(t?`startup.tray.loading`:`startup.tray.unavailable`)}):(0,x.jsx)(S,{ok:e.running&&!e.stale,yes:o(`startup.tray.running`),no:o(e.stale?`startup.tray.stale`:e.installed?`startup.tray.stopped`:`startup.tray.notInstalled`)})]}),(0,x.jsxs)(`div`,{className:`startup-tray-buttons`,children:[!t&&!n&&e&&!e.installed&&!e.stale&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:i,onClick:()=>a(`install`),children:o(`startup.tray.install`)}),!t&&!n&&e?.installed&&!e.stale&&!e.running&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:i,onClick:()=>a(`start`),children:o(`startup.tray.start`)}),!t&&!n&&e?.running&&!e.stale&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,disabled:i,onClick:()=>a(`stop`),children:o(`startup.tray.stop`)}),!t&&!n&&e&&(e.installed||e.stale)&&(0,x.jsx)(`button`,{type:`button`,className:`btn btn-danger`,disabled:i,onClick:()=>{window.confirm(o(`startup.tray.uninstall`))&&a(`uninstall`)},children:o(`startup.tray.uninstall`)})]}),(n||e?.stale)&&(0,x.jsx)(`div`,{className:`notice notice-warn startup-tray-error`,role:`alert`,children:o(`startup.tray.error`)})]})}function E({data:e,copied:t,onCopy:n}){let{t:i}=r(),a=e.serviceInstalled&&!e.serviceConflict?e.commands.repairService:e.commands.installService;return(0,x.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,x.jsxs)(`div`,{className:`panel-head`,children:[(0,x.jsx)(`h3`,{className:`panel-title`,children:i(`startup.recovery`)}),(0,x.jsx)(u,{})]}),(0,x.jsx)(`p`,{className:`muted`,children:i(`startup.recoveryHint`)}),(0,x.jsxs)(`div`,{className:`startup-command-list`,children:[e.serviceSupported&&(0,x.jsxs)(`div`,{className:`startup-command-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:i(`startup.command.service`)}),(0,x.jsx)(`code`,{children:a})]}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(a),children:i(t===a?`startup.copied`:`startup.copy`)})]}),(0,x.jsxs)(`div`,{className:`startup-command-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:i(`startup.command.shim`)}),(0,x.jsx)(`code`,{children:e.commands.installShim})]}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.installShim),children:t===e.commands.installShim?i(`startup.copied`):i(`startup.copy`)})]}),(0,x.jsxs)(`div`,{className:`startup-command-row`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:i(`startup.command.native`)}),(0,x.jsx)(`code`,{children:e.commands.restoreNative})]}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.restoreNative),children:t===e.commands.restoreNative?i(`startup.copied`):i(`startup.copy`)})]})]}),e.status===`at-risk`&&(0,x.jsxs)(`div`,{className:`notice notice-warn startup-action-notice`,role:`alert`,children:[(0,x.jsx)(p,{}),` `,i(`startup.recommended`,{cmd:e.recommendedCommand??e.commands.installService})]})]})}var D=`ocx.startup.page.v1:`;function O(e,t){let n=t===`win32`?`; `:` && `;return e.join(n)}function k(e,t,n){if(!e)return{warning:null,fix:null};let r=!!e.catalogClamp?.active,i=!!e.newerAvailable,a=(r?e.catalogClamp?.runtimeVersion:e.version)??e.version??`unknown`,o=(e.catalogClamp?.removedEfforts??[]).join(`, `),s=O([`ocx doctor --fix-codex-runtime`,`ocx sync`],n);return r?{warning:o?t(`startup.codexRuntime.clampHiddenWithEfforts`,{version:a,efforts:o}):t(`startup.codexRuntime.clampHidden`,{version:a}),fix:i?s:`ocx sync`}:i?{warning:t(`startup.codexRuntime.olderBinary`,{version:a}),fix:s}:{warning:null,fix:null}}function A({apiBase:e}){let{t}=r(),n=`${D}${e}`,o=(0,g.useMemo)(()=>f(n),[n]),s=`startup-page:${e}`,[l,u]=(0,g.useState)(null),[p,v]=(0,g.useState)(()=>o?.tray??null),[y,b]=(0,g.useState)(()=>!o?.data),[S,O]=(0,g.useState)(!1),[A,j]=(0,g.useState)(!1),[M,N]=(0,g.useState)(null),[P,F]=(0,g.useState)(null),[I,L]=(0,g.useState)(()=>o?.warning??null),[R,z]=(0,g.useState)(()=>o?.fix??null),[B,V]=(0,g.useState)(()=>!o?.data),H=(0,g.useRef)(!!o?.data),U=(0,g.useRef)(0);(0,g.useEffect)(()=>()=>{U.current+=1},[e]);let W=(0,g.useCallback)(async r=>{let i=++U.current,a=H.current;a||(b(!0),V(!0));try{let a=fetch(`${e}/api/settings`,{signal:r}).then(async e=>e.ok?await e.json():null).catch(()=>null),o=await fetch(`${e}/api/startup-health`,{signal:r});if(!o.ok)throw Error(`fetch failed`);let s=await o.json();F(e=>e?.kind===`error`&&(s.status===`native`&&e.forLocalRouting===!0||(e.action===`install-service`?s.serviceViable:s.shimInstalled&&s.shimHealthy))?null:e),H.current=!0;let c=f(n);d(n,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:c?.tray??null});let l=s.platform===`win32`?fetch(`${e}/api/windows-tray`,{signal:r}).then(async e=>{if(!e.ok)throw Error(`tray status failed`);let t=await e.json();if(!_(t))throw Error(`invalid tray status`);return{tray:t,error:!1}}).catch(()=>({tray:null,error:!0})):Promise.resolve({tray:null,error:!1});return Promise.all([a,l]).then(([e,a])=>{if(r.aborted||i!==U.current)return;let o=s.platform===`win32`?a.tray:null;if(s.platform===`win32`?(v(o),j(a.error)):(v(null),j(!1)),b(!1),V(!1),e){let r=k(e.codexRuntime,t,s.platform);L(r.warning),z(r.fix),d(n,{data:s,warning:r.warning,fix:r.fix,tray:o});return}let c=f(n);d(n,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:o})}),s}catch(e){throw r.aborted?e:(a||(v(null),j(!0),L(null),z(null)),V(!1),b(!1),e)}},[e,n,t]),G=m(s,[e],W,{isEmpty:()=>!1,initialData:o?.data??void 0}),K=G.state,q=G.refresh,J=K.data??o?.data??null,Y=K.refreshing,X=!!J?.diagnosticStale||K.showError;(0,g.useEffect)(()=>{if(!J?.diagnosticStale)return;let e=window.setTimeout(q,2e3);return()=>window.clearTimeout(e)},[J,q]);let Z=async e=>{try{await navigator.clipboard.writeText(e),u(e),window.setTimeout(()=>u(t=>t===e?null:t),1600)}catch{u(null)}},Q=async t=>{O(!0),j(!1);try{let n=await fetch(`${e}/api/windows-tray`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t})});if(!n.ok)throw Error(`tray action failed`);let r=await n.json();if(!_(r.status))throw Error(`invalid tray action status`);v(r.status),j(!1)}catch{v(null),j(!0)}finally{O(!1)}},$=async(t,n)=>{N(t),F(null);try{let r=await fetch(`${e}/api/startup-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t,repair:n?.repair===!0})});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(typeof e?.error==`string`?e.error:`installation failed`)}F({kind:`success`,action:t,repair:n?.repair===!0}),q()}catch(e){F({kind:`error`,action:t,repair:n?.repair===!0,detail:e instanceof Error?e.message:String(e),forLocalRouting:J?.localRoutingDependency===!0})}finally{N(null)}};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`page-head`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`h2`,{children:t(`startup.title`)}),(0,x.jsx)(`p`,{className:`page-sub startup-page-sub`,children:t(`startup.subtitle`)})]}),(0,x.jsxs)(`div`,{className:`startup-page-head-actions`,children:[(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>i(`dashboard`),children:t(`startup.backToDashboard`)}),(0,x.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>q(),disabled:Y,children:[(0,x.jsx)(c,{}),` `,t(`startup.refresh`)]})]})]}),K.showSkeleton&&!J?(0,x.jsx)(h,{label:t(`startup.loading`),rows:5}):K.kind===`failed-cold`?(0,x.jsxs)(`div`,{className:`startup-page-notice`,children:[(0,x.jsx)(a,{tone:`err`,children:K.error instanceof Error?K.error.message:t(`startup.error`)}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>q(),children:t(`common.retry`)})]}):J?(0,x.jsxs)(x.Fragment,{children:[K.showError&&(0,x.jsx)(a,{tone:`err`,children:t(`startup.error`)}),X&&(0,x.jsx)(`div`,{className:`notice notice-warn startup-page-notice`,role:`alert`,children:t(`startup.staleData`)}),(B||I)&&(0,x.jsx)(`div`,{className:`startup-runtime-notice-slot${B&&!I?` startup-runtime-notice-slot--pending`:``}`,"aria-hidden":B&&!I?!0:void 0,children:I&&(0,x.jsxs)(`div`,{className:`notice notice-warn startup-page-notice startup-runtime-notice`,role:`status`,children:[(0,x.jsx)(`p`,{className:`startup-runtime-notice__text`,children:I}),R&&(0,x.jsxs)(`div`,{className:`startup-runtime-notice__fix`,children:[(0,x.jsx)(`code`,{children:R}),(0,x.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void Z(R),children:t(l===R?`startup.copied`:`startup.copy`)})]})]})}),(0,x.jsx)(C,{failed:X,data:J}),(0,x.jsx)(w,{data:J,failed:X,loading:Y,installBusy:M,installResult:P,onInstall:(e,t)=>{$(e,t)}}),J.platform===`win32`&&(0,x.jsx)(T,{tray:p,trayLoading:y,trayError:A,trayBusy:S,onTrayAction:e=>{Q(e)}}),(0,x.jsx)(E,{data:J,copied:l,onCopy:e=>{Z(e)}})]}):null]})}export{A as default};
|