@kaitranntt/ccs 7.74.0-dev.14 → 7.74.0-dev.16
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/dist/cliproxy/config/generator.d.ts +2 -1
- package/dist/cliproxy/config/generator.d.ts.map +1 -1
- package/dist/cliproxy/config/generator.js +25 -1
- package/dist/cliproxy/config/generator.js.map +1 -1
- package/dist/cliproxy/quota-fetcher-codex.d.ts +18 -3
- package/dist/cliproxy/quota-fetcher-codex.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher-codex.js +74 -24
- package/dist/cliproxy/quota-fetcher-codex.js.map +1 -1
- package/dist/cliproxy/quota-types.d.ts +14 -2
- package/dist/cliproxy/quota-types.d.ts.map +1 -1
- package/dist/cliproxy/routing-strategy.d.ts +23 -0
- package/dist/cliproxy/routing-strategy.d.ts.map +1 -1
- package/dist/cliproxy/routing-strategy.js +148 -2
- package/dist/cliproxy/routing-strategy.js.map +1 -1
- package/dist/cliproxy/types.d.ts +3 -0
- package/dist/cliproxy/types.d.ts.map +1 -1
- package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/help-subcommand.js +3 -1
- package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
- package/dist/commands/cliproxy/index.d.ts.map +1 -1
- package/dist/commands/cliproxy/index.js +12 -0
- package/dist/commands/cliproxy/index.js.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.js +69 -15
- package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
- package/dist/commands/cliproxy/routing-subcommand.d.ts +3 -0
- package/dist/commands/cliproxy/routing-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/routing-subcommand.js +127 -2
- package/dist/commands/cliproxy/routing-subcommand.js.map +1 -1
- package/dist/commands/completion-backend.d.ts.map +1 -1
- package/dist/commands/completion-backend.js +16 -1
- package/dist/commands/completion-backend.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +26 -0
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +4 -0
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js +2 -0
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/ui/assets/{accounts-oSQYCZNY.js → accounts-Bx-CZY4E.js} +1 -1
- package/dist/ui/assets/{alert-dialog-RxXcYLJ-.js → alert-dialog-B6d2tUae.js} +1 -1
- package/dist/ui/assets/{api-PDxwDKK6.js → api-BaddjuZW.js} +1 -1
- package/dist/ui/assets/{auth-section-DGvyapUL.js → auth-section-BsSmjxR1.js} +1 -1
- package/dist/ui/assets/{backups-section-C_DMj0hU.js → backups-section-C23WJ9z8.js} +1 -1
- package/dist/ui/assets/{channels-Bhrnp-Eo.js → channels-7VkiYcZR.js} +1 -1
- package/dist/ui/assets/{checkbox-wRKw3eVf.js → checkbox-CmTW6ad4.js} +1 -1
- package/dist/ui/assets/{claude-extension-BRPDX6oS.js → claude-extension-nIuKlB7H.js} +1 -1
- package/dist/ui/assets/{cliproxy-ai-providers-CNZ8X477.js → cliproxy-ai-providers-DDW9fBmP.js} +1 -1
- package/dist/ui/assets/{cliproxy-control-panel-BtjDR1Vg.js → cliproxy-control-panel-CWK0XON3.js} +1 -1
- package/dist/ui/assets/{cliproxy-BsJfKNlA.js → cliproxy-malf7UoE.js} +1 -1
- package/dist/ui/assets/{codex-BIPn4i-A.js → codex-CJBCeZaD.js} +1 -1
- package/dist/ui/assets/{confirm-dialog-B8tZHrIu.js → confirm-dialog-CWgkIxnU.js} +1 -1
- package/dist/ui/assets/{copilot-6YzLT_A3.js → copilot-BzuOqR9L.js} +1 -1
- package/dist/ui/assets/{cursor-CrQ7YslH.js → cursor-BLoykaMA.js} +1 -1
- package/dist/ui/assets/{droid-Cpt_b7co.js → droid-CAER8Jkx.js} +1 -1
- package/dist/ui/assets/{globalenv-section-DwhnjKxb.js → globalenv-section-CKFMR-OV.js} +1 -1
- package/dist/ui/assets/{health-MX_poTtR.js → health-PZnxlo14.js} +1 -1
- package/dist/ui/assets/{index-DFCrszOj.js → index-C4sCH4-q.js} +1 -1
- package/dist/ui/assets/index-D8R5z5Ze.js +72 -0
- package/dist/ui/assets/{index-Dz2HaMuj.js → index-DLCRjxxP.js} +1 -1
- package/dist/ui/assets/{index-yeM6bOxL.css → index-DM5Khyln.css} +1 -1
- package/dist/ui/assets/{index-DD888_1t.js → index-DOGlX4i2.js} +1 -1
- package/dist/ui/assets/{index-EEfi3_jA.js → index-Dy4k_44a.js} +1 -1
- package/dist/ui/assets/{index-BNt4L6D7.js → index-Hm8U-YfS.js} +1 -1
- package/dist/ui/assets/{index-DfDJ6OTa.js → index-hwi-SBqf.js} +1 -1
- package/dist/ui/assets/{logs-D5iryHgo.js → logs-8c1aVckE.js} +1 -1
- package/dist/ui/assets/{masked-input-Bs2HnuUO.js → masked-input-CsB-ahhj.js} +1 -1
- package/dist/ui/assets/proxy-status-widget-BaDXzxae.js +1 -0
- package/dist/ui/assets/{raw-json-settings-editor-panel-wRXnigfA.js → raw-json-settings-editor-panel-BCveUwj2.js} +1 -1
- package/dist/ui/assets/{searchable-select-B4APb47u.js → searchable-select-BmDHgike.js} +1 -1
- package/dist/ui/assets/{separator-ny9jcCJ0.js → separator-xWPsiAJD.js} +1 -1
- package/dist/ui/assets/{shared-BHFt3N-w.js → shared-DUbTDOEM.js} +1 -1
- package/dist/ui/assets/{table-BRAlw_wh.js → table-CfxRDcnj.js} +1 -1
- package/dist/ui/assets/{updates-wB9lmrfM.js → updates-B2cZA4HL.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/web-server/routes/cliproxy-routing-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-routing-routes.js +35 -0
- package/dist/web-server/routes/cliproxy-routing-routes.js.map +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/index-CQlxBYgL.js +0 -72
- package/dist/ui/assets/proxy-status-widget-Bs4OIbHk.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./radix-ui-Zb8sVEtn.js";import{g as Ve,r as w}from"./react-vendor-CNOkPC89.js";import{bB as be,bC as je,bD as ve,bE as $e,bF as M,bG as te,bH as L,bI as Oe,bJ as We,a as ce,c as O,B as H,d as K,bx as _e,aZ as De,bK as Ie,bL as Re,bM as Fe,bN as Le,bO as Ue,bP as Me,bQ as qe,aM as ze,M as Be,O as He,r as Ge,s as Ke,t as Ze,v as Qe,w as Ye,T as Je,p as Xe,q as et,Y as tt}from"./index-CQlxBYgL.js";import{A as st,a as nt,b as rt,c as at,d as it,e as ot,f as lt,g as ct}from"./alert-dialog-RxXcYLJ-.js";import{u as Ne,a as ut,b as dt,h as mt}from"./tanstack-CrmUhA7Z.js";import{t as se}from"./notifications-B2HqRBj7.js";import{be as xe,R as G,t as xt,s as pt,u as gt,A as ft,bf as ht,bg as yt,bh as bt,X as jt,e as vt,bi as Nt,bj as St,U as wt,v as Ct,m as kt,w as At,aF as Et,T as ne,aP as Pt}from"./icons-DyorC3Xk.js";var re,pe;function Tt(){return pe||(pe=1,re={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),re}var Vt=Tt();const $t=Ve(Vt);var Ot=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function ge(e){var s={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(s.name=n[1],($t[n[1]]||e.charAt(e.length-2)==="/")&&(s.voidElement=!0),s.name.startsWith("!--"))){var r=e.indexOf("-->");return{type:"comment",comment:r!==-1?e.slice(4,r):""}}for(var a=new RegExp(Ot),i=null;(i=a.exec(e))!==null;)if(i[0].trim())if(i[1]){var o=i[1].trim(),c=[o,""];o.indexOf("=")>-1&&(c=o.split("=")),s.attrs[c[0]]=c[1],a.lastIndex--}else i[2]&&(s.attrs[i[2]]=i[3].trim().substring(1,i[3].length-1));return s}var Wt=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,_t=/^\s*$/,Dt=Object.create(null);function Se(e,s){switch(s.type){case"text":return e+s.content;case"tag":return e+="<"+s.name+(s.attrs?(function(n){var r=[];for(var a in n)r.push(a+'="'+n[a]+'"');return r.length?" "+r.join(" "):""})(s.attrs):"")+(s.voidElement?"/>":">"),s.voidElement?e:e+s.children.reduce(Se,"")+"</"+s.name+">";case"comment":return e+"<!--"+s.comment+"-->"}}var It={parse:function(e,s){s||(s={}),s.components||(s.components=Dt);var n,r=[],a=[],i=-1,o=!1;if(e.indexOf("<")!==0){var c=e.indexOf("<");r.push({type:"text",content:c===-1?e:e.substring(0,c)})}return e.replace(Wt,function(u,d){if(o){if(u!=="</"+n.name+">")return;o=!1}var p,v=u.charAt(1)!=="/",k=u.startsWith("<!--"),h=d+u.length,f=e.charAt(h);if(k){var V=ge(u);return i<0?(r.push(V),r):((p=a[i]).children.push(V),r)}if(v&&(i++,(n=ge(u)).type==="tag"&&s.components[n.name]&&(n.type="component",o=!0),n.voidElement||o||!f||f==="<"||n.children.push({type:"text",content:e.slice(h,e.indexOf("<",h))}),i===0&&r.push(n),(p=a[i-1])&&p.children.push(n),a[i]=n),(!v||n.voidElement)&&(i>-1&&(n.voidElement||n.name===u.slice(2,-1))&&(i--,n=i===-1?r:a[i]),!o&&f!=="<"&&f)){p=i===-1?r:a[i].children;var m=e.indexOf("<",h),x=e.slice(h,m===-1?void 0:m);_t.test(x)&&(x=" "),(m>-1&&i+p.length>=0||x!==" ")&&p.push({type:"text",content:x})}}),r},stringify:function(e){return e.reduce(function(s,n){return s+Se("",n)},"")}};const Q=(e,s)=>{if(!e)return!1;const n=e.props?.children??e.children;return s?n.length>0:!!n},Y=e=>{if(!e)return[];const s=e.props?.children??e.children;return e.props?.i18nIsDynamicList?U(s):s},Rt=e=>Array.isArray(e)&&e.every(w.isValidElement),U=e=>Array.isArray(e)?e:[e],Ft=(e,s)=>{const n={...s};return n.props={...s.props,...e.props},n},Lt=e=>{const s={};if(!e)return s;const n=r=>{U(r).forEach(i=>{M(i)||(Q(i)?n(Y(i)):L(i)&&!w.isValidElement(i)&&Object.assign(s,i))})};return n(e),s},we=(e,s,n,r)=>{if(!e)return"";let a="";const i=U(e),o=s?.transSupportBasicHtmlNodes?s.transKeepBasicHtmlNodesFor??[]:[];return i.forEach((c,u)=>{if(M(c)){a+=`${c}`;return}if(w.isValidElement(c)){const{props:d,type:p}=c,v=Object.keys(d).length,k=o.indexOf(p)>-1,h=d.children;if(!h&&k&&!v){a+=`<${p}/>`;return}if(!h&&(!k||v)||d.i18nIsDynamicList){a+=`<${u}></${u}>`;return}if(k&&v===1&&M(h)){a+=`<${p}>${h}</${p}>`;return}const f=we(h,s,n,r);a+=`<${u}>${f}</${u}>`;return}if(c===null){te(n,"TRANS_NULL_VALUE","Passed in a null value as child",{i18nKey:r});return}if(L(c)){const{format:d,...p}=c,v=Object.keys(p);if(v.length===1){const k=d?`${v[0]}, ${d}`:v[0];a+=`{{${k}}}`;return}te(n,"TRANS_INVALID_OBJ","Invalid child - Object should only have keys {{ value, format }} (format is optional).",{i18nKey:r,child:c});return}te(n,"TRANS_INVALID_VAR","Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.",{i18nKey:r,child:c})}),a},Ut=(e,s=[],n={})=>{if(!e)return e;const r=Object.keys(n),a=[...s,...r];let i="",o=0;for(;o<e.length;)if(e[o]==="<"){let c=!1;const u=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(u){const d=u[1];(/^\d+$/.test(d)||a.includes(d))&&(c=!0,i+=u[0],o+=u[0].length)}if(!c){const d=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(d){const p=d[1];(/^\d+$/.test(p)||a.includes(p))&&(c=!0,i+=d[0],o+=d[0].length)}}c||(i+="<",o+=1)}else i+=e[o],o+=1;return i},Mt=(e,s,n,r,a,i,o)=>{if(n==="")return[];const c=a.transKeepBasicHtmlNodesFor||[],u=n&&new RegExp(c.map(g=>`<${g}`).join("|")).test(n);if(!e&&!s&&!u&&!o)return[n];const d=s??{},p=g=>{U(g).forEach(C=>{M(C)||(Q(C)?p(Y(C)):L(C)&&!w.isValidElement(C)&&Object.assign(d,C))})};p(e);const v=Ut(n,c,d),k=It.parse(`<0>${v}</0>`),h={...d,...i},f=(g,N,C)=>{const A=Y(g),$=m(A,N.children,C);return Rt(A)&&$.length===0||g.props?.i18nIsDynamicList?A:$},V=(g,N,C,A,$)=>{g.dummy?(g.children=N,C.push(w.cloneElement(g,{key:A},$?void 0:N))):C.push(...w.Children.map([g],y=>{const l="data-i18n-is-dynamic-list",P={key:A,[l]:void 0};return y&&y.props&&Object.keys(y.props).forEach(E=>{E==="ref"||E==="children"||E==="i18nIsDynamicList"||E===l||(P[E]=y.props[E])}),w.cloneElement(y,P,$?null:N)}))},m=(g,N,C)=>{const A=U(g);return U(N).reduce((y,l,P)=>{const E=l.children?.[0]?.content&&r.services.interpolator.interpolate(l.children[0].content,h,r.language);if(l.type==="tag"){let T=A[parseInt(l.name,10)];!T&&s&&(T=s[l.name]),C.length===1&&!T&&(T=C[0][l.name]),T||(T={});const W={...l.attrs};o&&Object.keys(W).forEach(b=>{const F=W[b];M(F)&&(W[b]=Oe(F))});const j=Object.keys(W).length!==0?Ft({props:W},T):T,_=w.isValidElement(j),D=_&&Q(l,!0)&&!l.voidElement,R=u&&L(j)&&j.dummy&&!_,q=L(s)&&Object.hasOwnProperty.call(s,l.name);if(M(j)){const b=r.services.interpolator.interpolate(j,h,r.language);y.push(b)}else if(Q(j)||D){const b=f(j,l,C);V(j,b,y,P)}else if(R){const b=m(A,l.children,C);V(j,b,y,P)}else if(Number.isNaN(parseFloat(l.name)))if(q){const b=f(j,l,C);V(j,b,y,P,l.voidElement)}else if(a.transSupportBasicHtmlNodes&&c.indexOf(l.name)>-1)if(l.voidElement)y.push(w.createElement(l.name,{key:`${l.name}-${P}`}));else{const b=m(A,l.children,C);y.push(w.createElement(l.name,{key:`${l.name}-${P}`},b))}else if(l.voidElement)y.push(`<${l.name} />`);else{const b=m(A,l.children,C);y.push(`<${l.name}>${b}</${l.name}>`)}else if(L(j)&&!_){const b=l.children[0]?E:null;b&&y.push(b)}else V(j,E,y,P,l.children.length!==1||!E)}else if(l.type==="text"){const T=a.transWrapTextNodes,W=typeof a.unescape=="function"?a.unescape:ve().unescape,j=o?W(r.services.interpolator.interpolate(l.content,h,r.language)):r.services.interpolator.interpolate(l.content,h,r.language);T?y.push(w.createElement(T,{key:`${l.name}-${P}`},j)):y.push(j)}return y},[])},x=m([{dummy:!0,children:e||[]}],k,U(e||[]));return Y(x[0])},Ce=(e,s,n)=>{const r=e.key||s,a=w.cloneElement(e,{key:r});if(!a.props||!a.props.children||n.indexOf(`${s}/>`)<0&&n.indexOf(`${s} />`)<0)return a;function i(){return w.createElement(w.Fragment,null,a)}return w.createElement(i,{key:r})},qt=(e,s)=>e.map((n,r)=>Ce(n,r,s)),zt=(e,s)=>{const n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:Ce(e[r],r,s)})}),n},Bt=(e,s,n,r)=>e?Array.isArray(e)?qt(e,s):L(e)?zt(e,s):(be(n,"TRANS_INVALID_COMPONENTS",'<Trans /> "components" prop expects an object or array',{i18nKey:r}),null):null,Ht=e=>!L(e)||Array.isArray(e)?!1:Object.keys(e).reduce((s,n)=>s&&Number.isNaN(Number.parseFloat(n)),!0);function Gt({children:e,count:s,parent:n,i18nKey:r,context:a,tOptions:i={},values:o,defaults:c,components:u,ns:d,i18n:p,t:v,shouldUnescape:k,...h}){const f=p||je();if(!f)return be(f,"NO_I18NEXT_INSTANCE","Trans: You need to pass in an i18next instance using i18nextReactModule",{i18nKey:r}),e;const V=v||f.t.bind(f)||(z=>z),m={...ve(),...f.options?.react};let x=d||V.ns||f.options?.defaultNS;x=M(x)?[x]:x||["translation"];const{transDefaultProps:g}=m,N=g?.tOptions?{...g.tOptions,...i}:i,C=k??g?.shouldUnescape,A=g?.values?{...g.values,...o}:o,$=g?.components?{...g.components,...u}:u,y=we(e,m,f,r),l=c||N?.defaultValue||y||m.transEmptyNodeValue||(typeof r=="function"?$e(r):r),{hashTransKey:P}=m,E=r||(P?P(y||l):y||l);f.options?.interpolation?.defaultVariables?o=A&&Object.keys(A).length>0?{...A,...f.options.interpolation.defaultVariables}:{...f.options.interpolation.defaultVariables}:o=A;const T=Lt(e);T&&typeof T.count=="number"&&s===void 0&&(s=T.count);const W=o||s!==void 0&&!f.options?.interpolation?.alwaysFormat||!e?N.interpolation:{interpolation:{...N.interpolation,prefix:"#$?",suffix:"?$#"}},j={...N,context:a||N.context,count:s,...o,...W,defaultValue:l,ns:x};let _=E?V(E,j):l;_===E&&l&&(_=l);const D=Bt($,_,f,r);let R=D||e,q=null;Ht(D)&&(q=D,R=e);const b=Mt(R,q,_,f,m,j,C),F=n??m.defaultTransParent;return F?w.createElement(F,h,b):b}function fe({children:e,count:s,parent:n,i18nKey:r,context:a,tOptions:i={},values:o,defaults:c,components:u,ns:d,i18n:p,t:v,shouldUnescape:k,...h}){const{i18n:f,defaultNS:V}=w.useContext(We)||{},m=p||f||je(),x=v||m?.t.bind(m);return Gt({children:e,count:s,parent:n,i18nKey:r,context:a,tOptions:i,values:o,defaults:c,components:u,ns:d||x?.ns||V||m?.options?.defaultNS,i18n:m,t:v,shouldUnescape:k,...h})}async function Kt(){const e=await fetch("/api/cliproxy/sync/status");if(!e.ok){let s="Failed to fetch sync status";try{const n=await e.json();s=n.error||n.message||s}catch{}throw new Error(s)}return e.json()}async function Zt(){const e=new AbortController,s=setTimeout(()=>e.abort(),3e4);try{const n=await fetch("/api/cliproxy/sync",{method:"POST",headers:{"Content-Type":"application/json"},signal:e.signal});if(!n.ok){let r="Sync failed";try{const a=await n.json();r=a.error||a.message||r}catch{}throw new Error(r)}return n.json()}catch(n){throw n instanceof Error&&n.name==="AbortError"?new Error("Sync request timed out after 30 seconds"):n}finally{clearTimeout(s)}}function Qt(){return Ne({queryKey:["cliproxy-sync-status"],queryFn:Kt,refetchInterval:3e4,retry:1,staleTime:1e4})}function Yt(){const e=ut(),{t:s}=ce();return dt({mutationFn:Zt,onSuccess:n=>{e.invalidateQueries({queryKey:["cliproxy-sync-status"]}),e.invalidateQueries({queryKey:["cliproxy-sync-preview"]}),n.syncedCount===0?se.info(s("toasts.noProfilesToSync")):se.success(`Synced ${n.syncedCount} profile${n.syncedCount===1?"":"s"} to CLIProxy`)},onError:n=>{se.error(s("toasts.syncFailed",{error:n.message}))}})}function he(e){return e.replace(/-\d+$/,"").split(".").map(Number)}function le(e,s){const n=he(e),r=he(s);for(let a=0;a<3;a+=1){const i=n[a]||0,o=r[a]||0;if(i>o)return 1;if(i<o)return-1}return 0}function ae(e,s){return le(e,s)>0}function ie(e,s,n){return le(e,s)>=0&&le(e,n)<=0}const oe={"round-robin":{title:"Round Robin",description:"Spread requests across matching accounts for even usage."},"fill-first":{title:"Fill First",description:"Drain one healthy account first and keep backups untouched until needed."}};function ye({className:e,compact:s=!1,state:n,isLoading:r,isSaving:a,error:i,onApply:o}){const{t:c}=ce(),u=n?.strategy??"round-robin",[d,p]=w.useState(u),[v,k]=w.useState(!1),h=n?.source==="live"?"Live CLIProxy":"Saved startup default",f=r||a||!n||d===u,V=v?"Hide details":"Show details";if(s){const m=x=>{p(x),x!==u&&o(x)};return t.jsxs("div",{className:O("group/routing flex items-center justify-between mt-1 p-1 -mx-1 rounded-lg transition-colors hover:bg-primary/5",e),children:[t.jsxs("div",{className:"flex items-center gap-2 text-xs font-medium text-foreground",children:[t.jsxs("div",{className:"relative flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-background border border-border/60 text-muted-foreground shadow-sm overflow-hidden transition-all duration-300 group-hover/routing:border-primary/40 group-hover/routing:text-primary group-hover/routing:shadow-[0_0_12px_rgba(59,130,246,0.15)] dark:group-hover/routing:shadow-[0_0_12px_rgba(59,130,246,0.1)]",children:[t.jsx("div",{className:"absolute inset-0 bg-primary/10 translate-y-full group-hover/routing:translate-y-0 transition-transform duration-300 ease-out"}),t.jsx(xe,{className:"relative z-10 h-3.5 w-3.5 transition-transform duration-300 group-hover/routing:scale-110"})]}),t.jsx("span",{className:"tracking-tight transition-colors duration-300 group-hover/routing:text-primary group-hover/routing:font-semibold",children:"Routing"}),a&&t.jsx(G,{className:"ml-1 h-3 w-3 shrink-0 animate-spin text-primary"})]}),t.jsxs("div",{className:"relative grid grid-cols-2 p-0.5 gap-0.5 rounded-lg border border-border/60 bg-muted/30 shadow-[inset_0_1px_2px_rgba(0,0,0,0.05)] dark:shadow-[inset_0_1px_3px_rgba(0,0,0,0.2)] transition-colors duration-300 group-hover/routing:border-primary/20 group-hover/routing:bg-primary/5",children:[t.jsx("div",{className:O("absolute inset-y-0.5 left-0.5 w-[calc(50%-0.1875rem)] rounded bg-background shadow-[0_1px_3px_rgba(0,0,0,0.1),0_1px_2px_rgba(0,0,0,0.06)] ring-1 ring-black/5 dark:ring-white/10 transition-all duration-300",d==="fill-first"?"translate-x-[calc(100%+0.125rem)]":"translate-x-0","group-hover/routing:shadow-[0_0_8px_rgba(59,130,246,0.15)] dark:group-hover/routing:shadow-[0_0_8px_rgba(59,130,246,0.1)] group-hover/routing:ring-primary/30"),style:{transitionTimingFunction:"cubic-bezier(0.175, 0.885, 0.32, 1.275)"}}),Object.entries(oe).map(([x,g])=>{const N=d===x;return t.jsx("button",{type:"button",className:O("relative z-10 flex items-center justify-center rounded px-2.5 py-0.5 text-[10px] font-medium whitespace-nowrap transition-colors duration-200",N?"text-foreground group-hover/routing:text-primary":"text-muted-foreground/70 hover:text-foreground/90 group-hover/routing:text-muted-foreground/90"),onClick:()=>m(x),disabled:r||a||!!i,title:g.description,children:g.title},x)})]})]})}return t.jsx("section",{className:O("rounded-xl border border-border/70 bg-background",e),children:t.jsxs("div",{className:"grid gap-3 px-4 py-3 xl:grid-cols-[minmax(0,1fr)_auto] xl:items-start",children:[t.jsxs("div",{className:"min-w-0 space-y-2",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsx("div",{className:"inline-flex h-7 w-7 items-center justify-center rounded-lg bg-muted text-primary",children:t.jsx(xe,{className:"h-4 w-4"})}),t.jsx("div",{className:"text-sm font-medium",children:c("routingGuidance.routingStrategy")}),t.jsx(H,{variant:"secondary",children:u}),n?t.jsx(H,{variant:"outline",children:h}):null,n?t.jsx(H,{variant:"outline",children:n.target}):null]}),t.jsx("p",{className:"max-w-3xl text-xs leading-5 text-muted-foreground",children:"Proxy-wide account rotation. CCS keeps round-robin as the default until you explicitly change it."})]}),t.jsxs("div",{className:"flex flex-col gap-2 xl:items-end",children:[t.jsx("div",{className:"inline-flex flex-wrap rounded-lg border border-border/70 bg-muted/35 p-1",children:Object.entries(oe).map(([m,x])=>{const g=d===m;return t.jsx("button",{type:"button",className:O("rounded-md px-3 py-1.5 text-sm font-medium transition-colors",g?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),onClick:()=>p(m),disabled:r||a||!!i,children:x.title},m)})}),t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsxs(K,{type:"button",variant:"ghost",size:"sm",className:"h-8 px-2 text-xs text-muted-foreground",onClick:()=>k(m=>!m),children:[v?t.jsx(xt,{className:"mr-1 h-3.5 w-3.5"}):t.jsx(pt,{className:"mr-1 h-3.5 w-3.5"}),V]}),t.jsx(K,{size:"sm",onClick:()=>o(d),disabled:f||!!i,children:a?"Saving...":`Use ${d}`})]})]}),t.jsxs("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-muted-foreground xl:col-span-2",children:[t.jsx("span",{children:c("routingGuidance.roundRobin")}),t.jsx("span",{className:"hidden text-border sm:inline",children:"•"}),t.jsx("span",{children:c("routingGuidance.fillFirst")})]}),i?t.jsx("div",{className:"rounded-lg border border-destructive/25 bg-destructive/5 px-3 py-2 text-sm xl:col-span-2",children:i.message}):null,!i&&n?.message?t.jsx("div",{className:"rounded-lg border border-border/70 bg-muted/35 px-3 py-2 text-xs text-muted-foreground xl:col-span-2",children:n.message}):null,v?t.jsx("div",{className:"grid gap-4 border-t border-border/60 pt-3 md:grid-cols-2 xl:col-span-2",children:Object.entries(oe).map(([m,x])=>{const g=u===m;return t.jsxs("div",{className:"space-y-1",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsx("div",{className:"text-sm font-medium",children:x.title}),g?t.jsx(H,{variant:"secondary",children:"Current"}):null]}),t.jsx("p",{className:"text-xs leading-5 text-muted-foreground",children:x.description})]},m)})}):null]})})}function Jt(e){if(!e)return"";const s=new Date(e).getTime(),r=Date.now()-s,a=Math.floor(r/(1e3*60*60)),i=Math.floor(r%(1e3*60*60)/(1e3*60));return a>0?`${a}h ${i}m`:`${i}m`}function Xt(e,s){if(!e)return"";const n=Date.now()-e,r=Math.floor(n/(1e3*60)),a=Math.floor(n/(1e3*60*60));return r<1?s("proxyStatusWidget.justNow"):r<60?s("proxyStatusWidget.minutesAgo",{count:r}):s("proxyStatusWidget.hoursAgo",{count:a})}function Z({icon:e,tooltip:s,onClick:n,disabled:r,isPending:a,className:i,variant:o="ghost"}){return t.jsxs(Je,{children:[t.jsx(Xe,{asChild:!0,children:t.jsx(K,{variant:o==="destructive-ghost"?"ghost":o,size:"sm",className:O("h-7 w-7 p-0",o==="destructive-ghost"&&"hover:bg-destructive/10 hover:text-destructive hover:border-destructive/30",i),onClick:n,disabled:r,children:a?t.jsx(G,{className:"w-3.5 h-3.5 animate-spin"}):t.jsx(e,{className:"w-3.5 h-3.5"})})}),t.jsx(et,{side:"bottom",className:"text-xs",children:s})]})}function os(){const{t:e}=ce(),{data:s,isLoading:n}=_e(),{data:r}=De(),{data:a,isLoading:i}=Ie(),{data:o,isLoading:c,error:u}=Re(),d=Fe(),p=Le(),v=Ue(),k=Me(),h=qe(),{data:f}=Qt(),{mutate:V,isPending:m}=Yt(),[x,g]=w.useState(!1),[N,C]=w.useState(""),[A,$]=w.useState(!1),[y,l]=w.useState(null),[P,E]=w.useState(null),{data:T}=Ne({queryKey:["cliproxy-server-config"],queryFn:()=>tt.cliproxyServer.get(),staleTime:3e4}),W=mt({mutationKey:["update-backend"]})>0,j=T?.remote,_=j?.enabled&&j?.host,D=s?.running??!1,R=p.isPending||v.isPending||k.isPending||h.isPending||W||m,q=r?.hasUpdate??!1,b=r?.isStable===!1,F=r?.currentVersion,z=f?.configured??!1,ke=e(z?"proxyStatusWidget.syncReady":"proxyStatusWidget.noConfig"),J=b?r?.maxStableVersion||a?.latestStable:r?.latestVersion,ue=a?.maxStableVersion||r?.maxStableVersion||"6.6.80",B=a?.faultyRange,Ae=B&&`${B.min.replace(/-\d+$/,"")}-${B.max.replace(/-\d+$/,"")}`,X=(S,I)=>{l(S),E(I),$(!0)},de=async S=>{if(!S)return;const I=ae(S,ue);if(B!==void 0&&ie(S,B.min,B.max)){X(S,"faulty");return}if(I){X(S,"experimental");return}try{const me=await h.mutateAsync({version:S});me.requiresConfirmation&&X(S,me.isFaulty?"faulty":"experimental")}catch{}},Ee=()=>{y&&h.mutate({version:y,force:!0}),$(!1),l(null),E(null)},Pe=()=>{$(!1),l(null),E(null)},Te=_?(()=>{const S=j.protocol||"http",I=j.port||(S==="https"?443:80);return S==="https"&&I===443||S==="http"&&I===80?j.host:`${j.host}:${I}`})():null;return _?t.jsxs("div",{className:O("rounded-lg border p-3 transition-colors","border-blue-500/30 bg-blue-500/5"),children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(gt,{className:"w-4 h-4 text-blue-500"}),t.jsx("span",{className:"text-sm font-medium",children:e("proxyStatusWidget.remoteProxy")}),t.jsx(H,{variant:"secondary",className:"text-[10px] h-4 px-1.5 bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400",children:e("proxyStatusWidget.active")})]}),t.jsx(ft,{className:"w-3 h-3 text-blue-600"})]}),t.jsxs("div",{className:"mt-2 text-xs text-muted-foreground",children:[t.jsx("div",{className:"flex items-center gap-1 mb-1",children:t.jsx("span",{className:"font-mono",children:Te})}),t.jsx("p",{className:"text-[10px] text-muted-foreground/70 leading-tight",children:e("proxyStatusWidget.trafficAutoRouted")})]}),t.jsx(ye,{compact:!0,className:"mt-3",state:o,isLoading:c,isSaving:d.isPending,error:u instanceof Error?u:null,onApply:S=>d.mutate(S)},`remote:${o?.strategy??"round-robin"}`)]}):t.jsx(ze,{delayDuration:300,children:t.jsxs("div",{className:O("rounded-lg border p-3 transition-colors",D?"border-green-500/30 bg-green-500/5":"border-muted bg-muted/30"),children:[t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("div",{className:O("w-2 h-2 rounded-full",D?"bg-green-500 animate-pulse":"bg-muted-foreground/30")}),t.jsx("span",{className:"text-sm font-medium",children:r?.backendLabel??"CLIProxy"})]}),t.jsxs("div",{className:"flex items-center gap-1",children:[n?t.jsx(G,{className:"w-3 h-3 animate-spin text-muted-foreground"}):D?t.jsxs(t.Fragment,{children:[t.jsx(Z,{icon:m?G:ht,tooltip:e("proxyStatusWidget.tooltipSync"),onClick:()=>V(),disabled:!z||R,isPending:m}),t.jsx(Z,{icon:yt,tooltip:e("proxyStatusWidget.tooltipRestart"),onClick:()=>k.mutate(),disabled:R,isPending:k.isPending}),t.jsx(Z,{icon:bt,tooltip:e("proxyStatusWidget.tooltipStop"),onClick:()=>v.mutate(),disabled:R,isPending:v.isPending,variant:"destructive-ghost"})]}):null,t.jsx(Z,{icon:x?jt:vt,tooltip:e(x?"proxyStatusWidget.tooltipClose":"proxyStatusWidget.tooltipVersionSettings"),onClick:()=>g(!x),className:x?"bg-muted":void 0})]})]}),F&&t.jsxs("div",{className:"mt-1.5 flex items-center gap-2",children:[t.jsxs("span",{className:O("text-xs font-mono text-muted-foreground",b&&"text-amber-600 dark:text-amber-400"),children:["v",F]}),(q||b)&&J&&t.jsxs(H,{variant:"secondary",className:O("text-[10px] h-4 px-1.5 gap-0.5 cursor-pointer transition-colors",b?"bg-amber-100 text-amber-700 hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50":"bg-green-100 text-green-700 hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50"),onClick:()=>void de(J),title:e(b?"proxyStatusWidget.clickToDowngrade":"proxyStatusWidget.clickToUpdate"),children:[b?t.jsx(Nt,{className:"w-2.5 h-2.5"}):t.jsx(St,{className:"w-2.5 h-2.5"}),J]})]}),D&&s&&t.jsxs("div",{className:"mt-2 flex items-center gap-4 text-xs text-muted-foreground",children:[t.jsx("span",{className:"flex items-center gap-1",children:e("proxyStatusWidget.port",{port:s.port})}),s.sessionCount!==void 0&&s.sessionCount>0&&t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(wt,{className:"w-3 h-3"}),e("proxyStatusWidget.sessionCount",{count:s.sessionCount})]}),s.startedAt&&t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Ct,{className:"w-3 h-3"}),Jt(s.startedAt)]})]}),t.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-xs",children:[z?t.jsx(kt,{className:"w-3 h-3 text-green-600 dark:text-green-400"}):t.jsx(At,{className:"w-3 h-3 text-muted-foreground"}),t.jsx("span",{className:O("text-xs",z?"text-green-600 dark:text-green-400":"text-muted-foreground"),children:ke})]}),t.jsx(ye,{compact:!0,className:"mt-3",state:o,isLoading:c,isSaving:d.isPending,error:u instanceof Error?u:null,onApply:S=>d.mutate(S)},`local:${o?.strategy??"round-robin"}`),t.jsx(Be,{open:x,onOpenChange:g,children:t.jsxs(He,{className:"mt-3 pt-3 border-t border-muted",children:[t.jsx("h4",{className:"text-xs font-medium text-muted-foreground mb-3",children:e("proxyStatusWidget.versionManagement")}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsxs(Ge,{value:N,onValueChange:C,disabled:i,children:[t.jsx(Ke,{className:"h-8 text-xs flex-1",children:t.jsx(Ze,{placeholder:e("proxyStatusWidget.selectVersionPlaceholder")})}),t.jsx(Qe,{children:a?.versions.slice(0,20).map(S=>{const I=a?.maxStableVersion&&ae(S,a.maxStableVersion),ee=a?.faultyRange&&ie(S,a.faultyRange.min,a.faultyRange.max);return t.jsx(Ye,{value:S,className:"text-xs",children:t.jsxs("span",{className:"flex items-center gap-2",children:["v",S,S===a.latestStable&&t.jsx("span",{className:"text-green-600 dark:text-green-400",children:e("proxyStatusWidget.stable")}),(ee||I)&&t.jsx("span",{className:"text-amber-600 dark:text-amber-400",children:"⚠"})]})},S)})})]}),t.jsxs(K,{variant:"outline",size:"sm",className:"h-8 text-xs gap-1.5 px-3",onClick:()=>void de(N),disabled:h.isPending||!N,children:[h.isPending?t.jsx(G,{className:"w-3.5 h-3.5 animate-spin"}):t.jsx(Et,{className:"w-3.5 h-3.5"}),e("proxyStatusWidget.install")]})]}),N&&a?.maxStableVersion&&ae(N,a.maxStableVersion)&&t.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-[11px] text-amber-600 dark:text-amber-400",children:[t.jsx(ne,{className:"w-3.5 h-3.5 flex-shrink-0"}),t.jsx("span",{children:e("proxyStatusWidget.versionsAboveUnstable",{version:a.maxStableVersion})})]}),N&&a?.faultyRange&&ie(N,a.faultyRange.min,a.faultyRange.max)&&t.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-[11px] text-amber-600 dark:text-amber-400",children:[t.jsx(ne,{className:"w-3.5 h-3.5 flex-shrink-0"}),t.jsx("span",{children:e("proxyStatusWidget.versionsKnownIssues",{version:N})})]}),r?.checkedAt&&t.jsx("div",{className:"mt-2 text-[10px] text-muted-foreground/60",children:e("proxyStatusWidget.lastChecked",{time:Xt(r.checkedAt,e)})})]})}),!D&&t.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[t.jsx("span",{className:"text-xs text-muted-foreground",children:e("proxyStatusWidget.notRunning")}),t.jsxs(K,{variant:"outline",size:"sm",className:"h-7 text-xs gap-1",onClick:()=>p.mutate(),disabled:p.isPending,children:[p.isPending?t.jsx(G,{className:"w-3 h-3 animate-spin"}):t.jsx(Pt,{className:"w-3 h-3"}),e("proxyStatusWidget.start")]})]}),t.jsx(st,{open:A,onOpenChange:$,children:t.jsxs(nt,{children:[t.jsxs(rt,{children:[t.jsxs(at,{className:"flex items-center gap-2",children:[t.jsx(ne,{className:"w-5 h-5 text-amber-500"}),e(P==="faulty"?"proxyStatusWidget.installFaultyTitle":"proxyStatusWidget.installUnstableTitle")]}),t.jsxs(it,{className:"space-y-2",children:[P==="faulty"?t.jsx("p",{children:t.jsx(fe,{i18nKey:"proxyStatusWidget.installFaultyDesc",values:{version:y??"",range:Ae||""},components:{strong:t.jsx("strong",{})}})}):t.jsx("p",{children:t.jsx(fe,{i18nKey:"proxyStatusWidget.installUnstableDesc",values:{version:y??"",maxStable:ue},components:{strong:t.jsx("strong",{})}})}),t.jsx("p",{className:"text-amber-600 dark:text-amber-400",children:e(P==="faulty"?"proxyStatusWidget.installFaultyWarning":"proxyStatusWidget.installUnstableWarning")}),t.jsx("p",{children:e("proxyStatusWidget.installUnstableConfirm")})]})]}),t.jsxs(ot,{children:[t.jsx(lt,{onClick:Pe,children:e("proxyStatusWidget.cancel")}),t.jsx(ct,{onClick:Ee,className:"bg-amber-500 hover:bg-amber-600 text-white",children:e("proxyStatusWidget.installAnyway")})]})]})})]})})}export{os as P};
|