@chenpu17/cc-gw 0.8.13 → 0.8.14
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/package.json +5 -5
- package/src/web/dist/assets/{About-BtrUwqVl.js → About-pcECYYVj.js} +1 -1
- package/src/web/dist/assets/{ApiKeys-BgtU9Z5t.js → ApiKeys-IDt4ZfLj.js} +1 -1
- package/src/web/dist/assets/{ConfirmDialog-BHrsB4gR.js → ConfirmDialog-oYHVEpGJ.js} +1 -1
- package/src/web/dist/assets/{Dashboard-DIguazuF.js → Dashboard-BiCTswfM.js} +1 -1
- package/src/web/dist/assets/{DialogShell-DcG-SXEV.js → DialogShell-DcOGCV8m.js} +1 -1
- package/src/web/dist/assets/{Events-mZNIWc7c.js → Events-CCYCOF1f.js} +1 -1
- package/src/web/dist/assets/{Help-BHbnZJeo.js → Help-BW1R1cf1.js} +2 -2
- package/src/web/dist/assets/{Login-DugtPFxy.js → Login-Dn8fbfFq.js} +1 -1
- package/src/web/dist/assets/{Logs-BJBm-efJ.js → Logs-D2FFPpBP.js} +1 -1
- package/src/web/dist/assets/{ModelManagement-C32W7nDe.js → ModelManagement-BHSUJ4Dg.js} +1 -1
- package/src/web/dist/assets/{PageHeader--Lg_YQVw.js → PageHeader-DCqHI67a.js} +1 -1
- package/src/web/dist/assets/{PageSection-DIAhP18t.js → PageSection-CuZMzA0E.js} +1 -1
- package/src/web/dist/assets/{PageState-DKba6Ew1.js → PageState-B03H5AV0.js} +1 -1
- package/src/web/dist/assets/{Profiler-DTPqRwx7.js → Profiler-CEpu2dMu.js} +1 -1
- package/src/web/dist/assets/{RoutingManagement-B9Z0l4LZ.js → RoutingManagement-DahJxjA7.js} +1 -1
- package/src/web/dist/assets/{Settings-Ddx0C5eQ.js → Settings-Vp7jGxIW.js} +1 -1
- package/src/web/dist/assets/{Skeleton-cyuMRxwQ.js → Skeleton-i1PjWApN.js} +1 -1
- package/src/web/dist/assets/{app-BG16DmZH.js → app-COiQeF3y.js} +3 -3
- package/src/web/dist/assets/{card-CwTuH2Iq.js → card-ChFVaqLf.js} +1 -1
- package/src/web/dist/assets/{charts-core-D9OugzV_.js → charts-core-DzWzxST6.js} +1 -1
- package/src/web/dist/assets/{charts-engine-DleyglMn.js → charts-engine-Ds7lwC51.js} +1 -1
- package/src/web/dist/assets/{charts-react-BqhUp1x_.js → charts-react-D0nWbUCA.js} +1 -1
- package/src/web/dist/assets/{gateway-CExOTXeI.js → gateway-BU3dR2tm.js} +1 -1
- package/src/web/dist/assets/{global-CKvMKvrn.js → global-B-NXh5qD.js} +1 -1
- package/src/web/dist/assets/global-B_hBylxt.css +1 -0
- package/src/web/dist/assets/{i18n-B3N4Df3E.js → i18n-Bl2BcCDG.js} +1 -1
- package/src/web/dist/assets/{input-scp9nKJc.js → input-DW7jGTgj.js} +1 -1
- package/src/web/dist/assets/{label-fMXEnAEx.js → label-Ci1io7XA.js} +1 -1
- package/src/web/dist/assets/landing-BMe5-cHU.js +17 -0
- package/src/web/dist/assets/live-en-api-keys-Bx8N-eoh.png +0 -0
- package/src/web/dist/assets/live-en-dashboard-CJoX7IQT.png +0 -0
- package/src/web/dist/assets/live-en-events-DJwaP-WW.png +0 -0
- package/src/web/dist/assets/live-en-logs-BGGL53ab.png +0 -0
- package/src/web/dist/assets/live-en-model-management-BpjNblfR.png +0 -0
- package/src/web/dist/assets/package-D5lk1iqk.js +1 -0
- package/src/web/dist/assets/{popover-BGSWKBlu.js → popover-CQHCVE2z.js} +1 -1
- package/src/web/dist/assets/{query-Cpxr1dul.js → query-BbGWgOFk.js} +1 -1
- package/src/web/dist/assets/{queryKeys-DTnZc8Yy.js → queryKeys-ucXCzh0P.js} +1 -1
- package/src/web/dist/assets/{radix-bG5h1Ymq.js → radix-mHySgtou.js} +1 -1
- package/src/web/dist/assets/{router-DspBTS8b.js → router-CL3rf_uf.js} +1 -1
- package/src/web/dist/assets/{select-BjYpeVvo.js → select-BchX45jJ.js} +1 -1
- package/src/web/dist/assets/{switch-CgwYcn5P.js → switch-CT24uL_Q.js} +1 -1
- package/src/web/dist/assets/{table-BtnjYcvG.js → table-DdvG93mx.js} +1 -1
- package/src/web/dist/assets/{useApiQuery-jSeDDFuv.js → useApiQuery-tbd4JJaZ.js} +1 -1
- package/src/web/dist/assets/{useAppMutation-ChCrgiP6.js → useAppMutation-SONU2xFC.js} +1 -1
- package/src/web/dist/assets/useModelManagementState-DcQ0Ac-x.js +1 -0
- package/src/web/dist/assets/{vendor-LWJeAdU1.js → vendor-z22RpOY0.js} +86 -66
- package/src/web/dist/index.html +8 -8
- package/src/web/dist/landing.html +11 -11
- package/src/web/dist/assets/global-CUpRxoFd.css +0 -1
- package/src/web/dist/assets/landing-CHY6qfgq.js +0 -5
- package/src/web/dist/assets/package-BMIMFcQR.js +0 -1
- package/src/web/dist/assets/useModelManagementState-9RhvWh8Y.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as a,b as g,c as S,g as D,d as J,A as X,p as q,e as N,m as le,f as ie,h as A,k as se,R as ue,l as z}from"./vendor-
|
|
1
|
+
import{r as a,b as g,c as S,g as D,d as J,A as X,p as q,e as N,m as le,f as ie,h as A,k as se,R as ue,l as z}from"./vendor-z22RpOY0.js";/**
|
|
2
2
|
* React Router v6.30.3
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as o,j as e,
|
|
1
|
+
import{r as o,j as e,al as d,a1 as g,ay as w}from"./vendor-z22RpOY0.js";import{p as N,V as b,q as n,r as j,s as S,t as i,u as v,v as c,w as R,x as C,y as m,z as p,A as f,B as u}from"./radix-mHySgtou.js";import{c as r}from"./global-B-NXh5qD.js";const E=N,L=b,I=o.forwardRef(({className:s,children:t,...a},l)=>e.jsxs(n,{ref:l,className:r("flex h-9 w-full items-center justify-between rounded-lg border border-border bg-card px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",s),...a,children:[t,e.jsx(j,{asChild:!0,children:e.jsx(d,{className:"h-4 w-4 opacity-50"})})]}));I.displayName=n.displayName;const x=o.forwardRef(({className:s,...t},a)=>e.jsx(m,{ref:a,className:r("flex cursor-default items-center justify-center py-1",s),...t,children:e.jsx(w,{className:"h-4 w-4"})}));x.displayName=m.displayName;const h=o.forwardRef(({className:s,...t},a)=>e.jsx(p,{ref:a,className:r("flex cursor-default items-center justify-center py-1",s),...t,children:e.jsx(d,{className:"h-4 w-4"})}));h.displayName=p.displayName;const B=o.forwardRef(({className:s,children:t,position:a="popper",...l},y)=>e.jsx(S,{children:e.jsxs(i,{ref:y,className:r("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-[var(--surface-shadow-lg)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",a==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",s),position:a,...l,children:[e.jsx(x,{}),e.jsx(v,{className:r("p-2",a==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),e.jsx(h,{})]})}));B.displayName=i.displayName;const z=o.forwardRef(({className:s,...t},a)=>e.jsx(f,{ref:a,className:r("py-1.5 pl-8 pr-2 text-sm font-semibold",s),...t}));z.displayName=f.displayName;const V=o.forwardRef(({className:s,children:t,...a},l)=>e.jsxs(c,{ref:l,className:r("relative flex w-full cursor-default select-none items-center rounded-md py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",s),...a,children:[e.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:e.jsx(R,{children:e.jsx(g,{className:"h-4 w-4"})})}),e.jsx(C,{children:t})]}));V.displayName=c.displayName;const D=o.forwardRef(({className:s,...t},a)=>e.jsx(u,{ref:a,className:r("-mx-1 my-1 h-px bg-border",s),...t}));D.displayName=u.displayName;export{E as S,I as a,L as b,B as c,V as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,j as e}from"./vendor-
|
|
1
|
+
import{r as i,j as e}from"./vendor-z22RpOY0.js";import{D as r,E as n}from"./radix-mHySgtou.js";import{c as s}from"./global-B-NXh5qD.js";const c=i.forwardRef(({className:a,...t},o)=>e.jsx(r,{className:s("peer inline-flex h-7 w-12 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-[inset_0_0_0_1px_rgba(15,23,42,0.06)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",a),...t,ref:o,children:e.jsx(n,{className:s("pointer-events-none block h-6 w-6 rounded-full bg-background shadow-[0_3px_10px_rgba(15,23,42,0.18)] ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));c.displayName=r.displayName;export{c as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as r}from"./charts-react-
|
|
1
|
+
import{_ as r}from"./charts-react-D0nWbUCA.js";import{u as d,i as m,a as b,b as i,c,d as f,f as n,g as p}from"./charts-core-DzWzxST6.js";import{r as l,j as t}from"./vendor-z22RpOY0.js";import{c as o}from"./global-B-NXh5qD.js";d([m,b,i,c,f,n,p]);const _=r,x=l.forwardRef(({className:a,...e},s)=>t.jsx("div",{className:"relative w-full overflow-auto",children:t.jsx("table",{ref:s,className:o("w-full caption-bottom border-collapse text-sm",a),...e})}));x.displayName="Table";const u=l.forwardRef(({className:a,...e},s)=>t.jsx("thead",{ref:s,className:o("[&_tr]:border-b [&_tr]:border-border",a),...e}));u.displayName="TableHeader";const N=l.forwardRef(({className:a,...e},s)=>t.jsx("tbody",{ref:s,className:o("[&_tr:last-child]:border-0",a),...e}));N.displayName="TableBody";const T=l.forwardRef(({className:a,...e},s)=>t.jsx("tfoot",{ref:s,className:o("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...e}));T.displayName="TableFooter";const w=l.forwardRef(({className:a,...e},s)=>t.jsx("tr",{ref:s,className:o("border-b border-border transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted group",a),...e}));w.displayName="TableRow";const y=l.forwardRef(({className:a,...e},s)=>t.jsx("th",{ref:s,className:o("h-10 px-4 text-left align-middle text-xs font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",a),...e}));y.displayName="TableHead";const h=l.forwardRef(({className:a,...e},s)=>t.jsx("td",{ref:s,className:o("px-4 py-3 align-middle text-sm [&:has([role=checkbox])]:pr-0",a),...e}));h.displayName="TableCell";const j=l.forwardRef(({className:a,...e},s)=>t.jsx("caption",{ref:s,className:o("mt-4 text-sm text-muted-foreground",a),...e}));j.displayName="TableCaption";export{_ as E,x as T,u as a,w as b,y as c,N as d,h as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{aS as o}from"./vendor-z22RpOY0.js";import{a as u}from"./query-BbGWgOFk.js";import{r as s,t as i}from"./app-COiQeF3y.js";function m(r,e,a){return u({queryKey:r,placeholderData:o,...a,queryFn:async()=>{try{return await s(e)}catch(t){throw i(t)}}})}export{m as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as o,b as q}from"./query-
|
|
1
|
+
import{u as o,b as q}from"./query-BbGWgOFk.js";import{u as x,t as y}from"./app-COiQeF3y.js";function j({mutationFn:C,successToast:a,errorToast:p,invalidateKeys:n,onSuccess:m,onError:f,...M}){const Q=o(),{pushToast:A}=x();return q({...M,mutationFn:async t=>{try{return await C(t)}catch(u){throw y(u)}},onSuccess:async(t,u,w,h)=>{n!=null&&n.length&&await Promise.all(n.map(g=>Q.invalidateQueries({queryKey:g})));const i=a==null?void 0:a(t,u);i&&A({...i,variant:"success"}),await(m==null?void 0:m(t,u,w,h))},onError:async(t,u,w,h)=>{const i=p==null?void 0:p(t,u);i&&A({...i,variant:"error"}),await(f==null?void 0:f(t,u,w,h))}})}export{j as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as m}from"./vendor-z22RpOY0.js";import{u as qt,a as Bt}from"./query-BbGWgOFk.js";import{g as K,b as H,u as Nt,t as re,c as ie}from"./app-COiQeF3y.js";import{g as F}from"./gateway-BU3dR2tm.js";import{q as U}from"./queryKeys-ucXCzh0P.js";import{u as $e}from"./useAppMutation-SONU2xFC.js";import{u as Ut}from"./useApiQuery-tbd4JJaZ.js";import{u as Vt}from"./i18n-Bl2BcCDG.js";const G={savePreset(n,i){return K(H.post(`/api/routing-presets/${n}`,{name:i}))},applyPreset(n,i){return K(H.post(`/api/routing-presets/${n}/apply`,{name:i}))},deletePreset(n,i){return K(H.delete(`/api/routing-presets/${n}/${encodeURIComponent(i)}`))},testProvider(n,i){return K(H.post(`/api/providers/${n}/test`,i??{}))}},Zt=["claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929-thinking","claude-sonnet-4-20250514","claude-opus-4-1-20250805","claude-opus-4-1-20250805-thinking","claude-haiku-4-5-20251001","claude-haiku-4-5-20251001-thinking","claude-3-5-haiku-20241022"],en=["gpt-4o-mini","gpt-4o","o4-mini","o4-large","gpt-5-codex"];function O(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).slice(2,10)}function _(n,i){var p;return(p=n==null?void 0:n.customEndpoints)!=null&&p.length?n.customEndpoints:i}function le(n){return n?Object.entries(n).map(([i,p])=>({id:O(),source:i,target:p})):[]}function ue(n,i){var h,f,g;if(!n)return{};const p={},d=n.endpointRouting??{};p.anthropic=le(((h=d.anthropic)==null?void 0:h.modelRoutes)??n.modelRoutes??{}),p.openai=le(((f=d.openai)==null?void 0:f.modelRoutes)??{});for(const y of _(n,i))(g=y.routing)!=null&&g.modelRoutes?p[y.id]=le(y.routing.modelRoutes):p[y.id]=[];return p}function Fe(n,i,p){var f,g,y;const d=_(n,i).find(j=>j.id===p);if(d)return((f=d.routing)==null?void 0:f.modelRoutes)??{};const h=n.endpointRouting??{};return p==="anthropic"?((g=h.anthropic)==null?void 0:g.modelRoutes)??n.modelRoutes??{}:p==="openai"?((y=h.openai)==null?void 0:y.modelRoutes)??{}:{}}function Qt(n){const i={};for(const p of n){const d=p.source.trim(),h=p.target.trim();d&&h&&(i[d]=h)}return i}function je(n,i){return JSON.stringify(Qt(n))!==JSON.stringify(i)}function tn(n,i){if(n==="anthropic")return!0;const p=i.find(d=>d.id===n);return p?p.paths&&p.paths.length>0?p.paths.some(d=>d.protocol==="anthropic"):p.protocol==="anthropic":!1}function nn(n,i,p){var h,f,g;if(!i)return;if(n==="anthropic"||n==="openai")return(f=(h=i.endpointRouting)==null?void 0:h[n])==null?void 0:f.validation;const d=_(i,p).find(y=>y.id===n);return(g=d==null?void 0:d.routing)==null?void 0:g.validation}function sn(n,i,p){var h,f,g;if(!i)return;if(n==="anthropic"||n==="openai")return(f=(h=i.endpointRouting)==null?void 0:h[n])==null?void 0:f.compatibility;const d=_(i,p).find(y=>y.id===n);return(g=d==null?void 0:d.routing)==null?void 0:g.compatibility}function zt(n,i){const p=[{key:"providers",label:n("modelManagement.tabs.providers"),description:n("modelManagement.tabs.providersDesc"),isSystem:!0,canDelete:!1},{key:"anthropic",label:n("modelManagement.tabs.anthropic"),description:n("modelManagement.tabs.anthropicDesc"),isSystem:!0,canDelete:!1,protocols:["anthropic"]},{key:"openai",label:n("modelManagement.tabs.openai"),description:n("modelManagement.tabs.openaiDesc"),isSystem:!0,canDelete:!1,protocols:["openai-auto","openai-chat","openai-responses"]}],d=i.map(h=>{let f=n("modelManagement.tabs.customEndpoint"),g=[];if(h.paths&&h.paths.length>0)f=`${n("modelManagement.tabs.customEndpoint")}: ${h.paths.map(y=>`${y.path} (${y.protocol})`).join(", ")}`,g=[...new Set(h.paths.map(y=>y.protocol))];else if(h.path){const y=h.protocol||"anthropic";f=`${n("modelManagement.tabs.customEndpoint")}: ${h.path} (${y})`,g=[y]}return{key:h.id,label:h.label||h.id,description:f,isSystem:!1,canDelete:h.deletable!==!1,protocols:g}});return[...p,...d]}function At(n){return n.label&&n.label.trim().length>0?`${n.label} (${n.id})`:n.id}function Ie(n,i){var d,h,f;const p={anthropic:((d=n.routingPresets)==null?void 0:d.anthropic)??[],openai:((h=n.routingPresets)==null?void 0:h.openai)??[]};for(const g of i){const y=(f=n.customEndpoints)==null?void 0:f.find(j=>j.id===g.id);p[g.id]=(y==null?void 0:y.routingPresets)??g.routingPresets??[]}return p}function on(){var Oe;const{t:n}=Vt(),{pushToast:i}=Nt(),p=qt(),d=Ut(U.config.full(),F.configRequest()),f=((Oe=Bt({queryKey:U.customEndpoints.all(),queryFn:ie.list,refetchInterval:1e4}).data)==null?void 0:Oe.endpoints)??[],g=m.useMemo(()=>zt(n,f),[f,n]),[y,j]=m.useState("providers"),[l,k]=m.useState(null),[Le,J]=m.useState(!1),[W,X]=m.useState("create"),[V,Y]=m.useState(void 0),[qe,Z]=m.useState(void 0),[Be,de]=m.useState(null),[Ne,ee]=m.useState(!1),[I,D]=m.useState({}),[Ue,T]=m.useState({}),[Ve,ce]=m.useState(null),[me,te]=m.useState({}),[pe,fe]=m.useState({}),[Qe,Q]=m.useState({}),[ze,ge]=m.useState(null),[Ae,he]=m.useState(null),[Ke,ye]=m.useState(null),[He,ve]=m.useState(!1),[ne,Ee]=m.useState(null),[se,oe]=m.useState(!0),[be,Re]=m.useState({}),[Ge,Se]=m.useState(!1),[_e,Me]=m.useState(!1),[Je,We]=m.useState({}),[Xe,Ye]=m.useState(null),[c,we]=m.useState(null),[Ze,Ce]=m.useState(!1),[ae,et]=m.useState(""),[z,tt]=m.useState("all"),nt=m.useMemo(()=>g.filter(e=>e.isSystem),[g]),st=m.useMemo(()=>g.filter(e=>!e.isSystem),[g]),ot=m.useMemo(()=>g.find(e=>e.key===y)??g[0]??null,[y,g]),x=(l==null?void 0:l.providers)??[],at=x.length,rt=m.useMemo(()=>x.filter(e=>{var r;if(!(z==="all"||(e.type??"custom")===z))return!1;const t=ae.trim().toLowerCase();return t?[e.id,e.label??"",e.baseUrl,e.defaultModel??"",...((r=e.models)==null?void 0:r.map(a=>a.id))??[]].join(" ").toLowerCase().includes(t):!0}),[ae,z,x]),N=m.useMemo(()=>[{key:"anthropic-beta",value:"claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14",label:n("providers.testDialog.options.beta.label"),description:n("providers.testDialog.options.beta.description")}],[n]);m.useEffect(()=>{if(!d.data)return;const e=d.data;k(e),D(s=>{const t=ue(e,f);if(!s||Object.keys(s).length===0)return t;const o={...t};for(const[r,a]of Object.entries(s)){if(!(r in t))continue;const u=Fe(e,f,r);je(a,u)&&(o[r]=a)}return o}),T({}),te(Ie(e,f))},[d.data,f]),m.useEffect(()=>{!d.isError||!d.error||i({title:n("providers.toast.loadFailure",{message:d.error.message}),variant:"error"})},[d.error,d.isError,i,n]),m.useEffect(()=>{g.some(e=>e.key===y)||j("providers")},[y,g]);const it=m.useMemo(()=>{const e=new Map;for(const s of x){if(!s.defaultModel||!s.models)continue;const t=s.models.find(o=>o.id===s.defaultModel);t&&e.set(s.id,At(t))}return e},[x]),lt=m.useMemo(()=>{const e=[],s=new Set;for(const t of x){const o=t.label&&t.label!==t.id?`${t.label} (${t.id})`:t.id,r=t.models??[];if(r.length>0)for(const u of r){const v=`${t.id}:${u.id}`;s.has(v)||(s.add(v),e.push({value:v,label:`${o} · ${u.label??u.id}`}))}else if(t.defaultModel){const u=`${t.id}:${t.defaultModel}`;s.has(u)||(s.add(u),e.push({value:u,label:`${o} · ${t.defaultModel}`}))}const a=`${t.id}:*`;s.has(a)||(s.add(a),e.push({value:a,label:n("settings.routing.providerPassthroughOption",{provider:o})}))}for(const t of Object.values(I).flat()){const o=t.target.trim();o&&!s.has(o)&&(s.add(o),e.push({value:o,label:o}))}return e},[x,I,n]),ut=()=>{Z(void 0),ee(!0)},dt=e=>{Z(e),ee(!0)},ct=e=>l?Fe(l,f,e):{},mt=m.useMemo(()=>{const e={};for(const s of g){if(s.key==="providers")continue;const t=I[s.key]||[];e[s.key]=je(t,ct(s.key))}return e},[l,f,I,g]),Pe=(e,s)=>{te(t=>({...t,[e]:s})),k(t=>{if(!t)return t;if(e==="anthropic"||e==="openai")return{...t,routingPresets:{...t.routingPresets,[e]:s}};const o=[...t.customEndpoints??[]],r=o.findIndex(a=>a.id===e);return r===-1?t:(o[r]={...o[r],routingPresets:s},{...t,customEndpoints:o})})},$=()=>l?!0:(i({title:n("settings.toast.missingConfig"),variant:"error"}),d.refetch(),!1),pt=(e,s)=>{fe(t=>({...t,[e]:s})),s.trim()&&Q(t=>({...t,[e]:null}))},ft=async e=>{if(!$())return;const s=(pe[e]??"").trim();if(!s){Q(t=>({...t,[e]:n("modelManagement.validation.presetName")}));return}if((me[e]??[]).some(t=>t.name.toLowerCase()===s.toLowerCase())){Q(t=>({...t,[e]:n("modelManagement.validation.presetDuplicate",{name:s})}));return}ge(e);try{const o=(await G.savePreset(e,s)).presets??[];Pe(e,o),fe(r=>({...r,[e]:""})),Q(r=>({...r,[e]:null})),i({title:n("modelManagement.toast.presetSaved",{name:s}),variant:"success"})}catch(t){i({title:n("modelManagement.toast.presetSaveFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{ge(null),d.refetch()}},gt=async(e,s)=>{if($()){he({endpoint:e,name:s.name});try{const o=(await G.applyPreset(e,s.name)).config;if(o)k(o),D(ue(o,f)),te(Ie(o,f));else{const r=s.modelRoutes??{};D(a=>({...a,[e]:Object.entries(r).map(([u,v])=>({id:O(),source:u,target:v}))})),k(a=>{var v,b,S,R;if(!a)return a;const u=(a.customEndpoints??[]).findIndex(E=>E.id===e);if(u!==-1){const E=[...a.customEndpoints??[]],M=E[u];return E[u]={...M,routing:{defaults:((v=M.routing)==null?void 0:v.defaults)??a.defaults,...M.routing??{},modelRoutes:r}},{...a,customEndpoints:E}}return e==="anthropic"||e==="openai"?{...a,endpointRouting:{...a.endpointRouting??{},[e]:{defaults:((S=(b=a.endpointRouting)==null?void 0:b[e])==null?void 0:S.defaults)??a.defaults,...((R=a.endpointRouting)==null?void 0:R[e])??{},modelRoutes:r}},modelRoutes:e==="anthropic"?r:a.modelRoutes??{}}:a})}e!=="anthropic"&&e!=="openai"&&await p.invalidateQueries({queryKey:U.customEndpoints.all()}),i({title:n("modelManagement.toast.presetApplySuccess",{name:s.name}),variant:"success"})}catch(t){i({title:n("modelManagement.toast.presetApplyFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{he(null),d.refetch()}}},ht=async(e,s)=>{if($()){ye({endpoint:e,name:s.name});try{const t=await G.deletePreset(e,s.name);Pe(e,t.presets??[]),i({title:n("modelManagement.toast.presetDeleteSuccess",{name:s.name}),variant:"success"})}catch(t){i({title:n("modelManagement.toast.presetDeleteFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{ye(null),d.refetch()}}},yt=()=>{$()&&(X("create"),Y(void 0),J(!0))},vt=e=>{$()&&(X("edit"),Y(e),J(!0))},Et=async e=>{if(!l)throw new Error(n("settings.toast.missingConfig"));const s=W==="create"?[...x,e]:x.map(o=>V&&o.id===V.id?{...e,id:V.id}:o),t={...l,providers:s};await F.saveConfig(t),k(t),D(ue(t,f)),d.refetch(),i({title:W==="create"?n("providers.toast.createSuccess",{name:e.label||e.id}):n("providers.toast.updateSuccess",{name:e.label||e.id}),variant:"success"})},bt=async e=>{const s=f.find(t=>t.id===e);if(!(!s||s.deletable===!1))try{await ie.delete(e),await p.invalidateQueries({queryKey:U.customEndpoints.all()}),i({title:n("modelManagement.deleteEndpointSuccess"),variant:"success"}),y===e&&j("providers")}catch(t){const o=re(t);i({title:n("modelManagement.deleteEndpointError",{error:o.message}),variant:"error"})}},ke=async(e,s)=>{de(e.id);try{const t=s&&(s.headers||s.query)?{headers:s.headers&&Object.keys(s.headers).length>0?s.headers:void 0,query:s.query&&s.query.trim().length>0?s.query.trim():void 0}:void 0,o=await G.testProvider(e.id,t);if(o.ok){i({title:n("providers.toast.testSuccess"),description:n("providers.toast.testSuccessDesc",{status:o.status,duration:o.durationMs?`${o.durationMs} ms`:"—"}),variant:"success"});return}i({title:n("providers.toast.testFailure",{message:`${o.status} ${o.statusText}`}),variant:"error"})}catch(t){i({title:n("providers.toast.testFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{de(null)}},Rt=e=>{if(e.type!=="anthropic"){ke(e);return}const s=e.extraHeaders??{},t=new Map(N.map(a=>[a.key.toLowerCase(),a])),o={};let r=!0;for(const a of N){const u=Object.entries(s).find(([S])=>S.toLowerCase()===a.key.toLowerCase());if(!u)continue;const[v,b]=u;String(b??"")!==a.value&&(r=!1,o[v]=String(b??""))}for(const[a,u]of Object.entries(s))t.has(a.toLowerCase())||(o[a]=String(u??""));Re(o),oe(r),Ee(e),ve(!0)},De=()=>{ve(!1),Ee(null),oe(!0),Re({})},St=async()=>{if(!ne)return;const e={};if(se)for(const o of N)e[o.key]=o.value;const s=new Map(N.map(o=>[o.key.toLowerCase(),o]));for(const[o,r]of Object.entries(be))s.get(o.toLowerCase())&&se||(e[o]=r);const t=ne;De(),await ke(t,{headers:Object.keys(e).length>0?e:void 0})},xe=async e=>{var b,S,R,E,M,P,L,A;if(!$())return;const s=x.filter(w=>w.id!==e.id),t=w=>{const C={};if(!w)return C;for(const[q,B]of Object.entries(w)){if(!B)continue;const[Te]=B.split(":");Te&&Te===e.id||B===e.id||(C[q]=B)}return C},o=(l==null?void 0:l.endpointRouting)??{},r=t(((b=o.anthropic)==null?void 0:b.modelRoutes)??(l==null?void 0:l.modelRoutes)??{}),a=t(((S=o.openai)==null?void 0:S.modelRoutes)??{}),u=((l==null?void 0:l.customEndpoints)??f).map(w=>{const C=w.routing,q=C==null?void 0:C.modelRoutes;return q?{...w,routing:{...C,defaults:C.defaults??l.defaults,modelRoutes:t(q)}}:w}),v={...l,providers:s,modelRoutes:r,customEndpoints:u,endpointRouting:{anthropic:{defaults:((R=o.anthropic)==null?void 0:R.defaults)??l.defaults,modelRoutes:r,validation:(E=o.anthropic)==null?void 0:E.validation,compatibility:(M=o.anthropic)==null?void 0:M.compatibility},openai:{defaults:((P=o.openai)==null?void 0:P.defaults)??l.defaults,modelRoutes:a,validation:(L=o.openai)==null?void 0:L.validation,compatibility:(A=o.openai)==null?void 0:A.compatibility}}};try{await F.saveConfig(v),k(v),D({anthropic:Object.entries(r).map(([w,C])=>({id:O(),source:w,target:C})),openai:Object.entries(a).map(([w,C])=>({id:O(),source:w,target:C})),...Object.fromEntries(u.map(w=>{var C;return[w.id,Object.entries(((C=w.routing)==null?void 0:C.modelRoutes)??{}).map(([q,B])=>({id:O(),source:q,target:B}))]}))}),i({title:n("providers.toast.deleteSuccess",{name:e.label||e.id}),variant:"success"}),d.refetch()}catch(w){i({title:n("providers.toast.deleteFailure",{message:w instanceof Error?w.message:"unknown"}),variant:"error"})}},Mt=async()=>{if(c){Ce(!0);try{c.kind==="provider"?await xe(c.provider):c.kind==="preset"?await ht(c.endpoint,c.preset):await bt(c.endpoint.id),we(null)}finally{Ce(!1)}}},wt=e=>{D(s=>({...s,[e]:[...s[e]||[],{id:O(),source:"",target:""}]})),T(s=>({...s,[e]:null}))},Ct=async(e,s)=>{var t,o;if($()){Se(!0);try{if(e==="anthropic"||e==="openai"){const r=e,a=l.endpointRouting?{...l.endpointRouting}:{},u=a[r]??{defaults:l.defaults,modelRoutes:(r==="anthropic"?l.modelRoutes:{})??{}},v={defaults:u.defaults??l.defaults,modelRoutes:u.modelRoutes??{},compatibility:u.compatibility},b=s==="off"?void 0:{...u.validation??{},mode:s,allowExperimentalBlocks:((t=u.validation)==null?void 0:t.allowExperimentalBlocks)??!0},S={...l,endpointRouting:{...a,[r]:b?{...v,validation:b}:{...v}}};await F.saveConfig(S),k(S)}else{const r=[...l.customEndpoints??[]],a=r.findIndex(R=>R.id===e);if(a===-1)throw new Error(n("modelManagement.toast.endpointNotFound"));const u=r[a],v=u.routing??{defaults:l.defaults,modelRoutes:{}},b=s==="off"?void 0:{...v.validation??{},mode:s,allowExperimentalBlocks:((o=v.validation)==null?void 0:o.allowExperimentalBlocks)??!0};r[a]={...u,routing:b?{...v,validation:b}:{defaults:v.defaults,modelRoutes:v.modelRoutes,compatibility:v.compatibility}};const S={...l,customEndpoints:r};await F.saveConfig(S),k(S)}i({title:n("modelManagement.toast.validationModeSaved",{mode:n(`modelManagement.claudeValidation.options.${s}.label`)}),variant:"success"}),d.refetch()}catch(r){const a=re(r);i({title:n("modelManagement.toast.validationModeFailure",{message:a.message}),variant:"error"})}finally{Se(!1)}}},Pt=async(e,s)=>{if($()){Me(!0);try{if(e==="anthropic"||e==="openai"){const t=e,o=l.endpointRouting?{...l.endpointRouting}:{},r=o[t]??{defaults:l.defaults,modelRoutes:(t==="anthropic"?l.modelRoutes:{})??{}},a={defaults:r.defaults??l.defaults,modelRoutes:r.modelRoutes??{},validation:r.validation},u={...l,endpointRouting:{...o,[t]:s?{...a,compatibility:{enabled:!0}}:{...a}}};await F.saveConfig(u),k(u)}else{const t=[...l.customEndpoints??[]],o=t.findIndex(v=>v.id===e);if(o===-1)throw new Error(n("modelManagement.toast.endpointNotFound"));const r=t[o],a=r.routing??{defaults:l.defaults,modelRoutes:{}};t[o]={...r,routing:s?{...a,compatibility:{enabled:!0}}:{defaults:a.defaults,modelRoutes:a.modelRoutes,validation:a.validation}};const u={...l,customEndpoints:t};await F.saveConfig(u),k(u)}i({title:n("modelManagement.toast.compatibilitySaved",{state:n(s?"common.enabled":"common.disabled")}),variant:"success"}),d.refetch()}catch(t){const o=re(t);i({title:n("modelManagement.toast.compatibilitySaveFailure",{message:o.message}),variant:"error"})}finally{Me(!1)}}},kt=(e,s)=>{D(t=>{const o=t[e]||[];return o.some(r=>r.source.trim()===s.trim())?t:{...t,[e]:[...o,{id:O(),source:s,target:""}]}}),T(t=>({...t,[e]:null}))},Dt=(e,s,t,o)=>{D(r=>({...r,[e]:(r[e]||[]).map(a=>a.id===s?{...a,[t]:o}:a)})),T(r=>({...r,[e]:null}))},xt=(e,s)=>{D(t=>({...t,[e]:(t[e]||[]).filter(o=>o.id!==s)})),T(t=>({...t,[e]:null}))},Ot=e=>{var t;if(!l)return;const s=(l.customEndpoints??f).find(o=>o.id===e);if(s)D(o=>{var r;return{...o,[e]:Object.entries(((r=s.routing)==null?void 0:r.modelRoutes)??{}).map(([a,u])=>({id:O(),source:a,target:u}))}});else{const o=l.endpointRouting??{},r=e,a=r==="anthropic"?l.modelRoutes??{}:{},u=((t=o[r])==null?void 0:t.modelRoutes)??a;D(v=>({...v,[e]:Object.entries(u).map(([b,S])=>({id:O(),source:b,target:S}))}))}T(o=>({...o,[e]:null}))},Tt=$e({mutationFn:async e=>(await F.saveConfig(e.nextConfig),e)}),$t=$e({mutationFn:async e=>(await ie.update(e.endpoint,{routing:e.routing}),e)}),Ft=async e=>{var o,r,a,u,v,b,S;if(!$())return;const s=I[e]||[],t={};for(const R of s){const E=R.source.trim(),M=R.target.trim();if(!(!E&&!M)){if(!E||!M){T(P=>({...P,[e]:n("settings.validation.routePair")}));return}if(t[E]){T(P=>({...P,[e]:n("settings.validation.routeDuplicate",{model:E})}));return}t[E]=M}}T(R=>({...R,[e]:null})),ce(e);try{const R=f.find(E=>E.id===e);if(R){const E={...R.routing??{},modelRoutes:t,defaults:((o=R.routing)==null?void 0:o.defaults)||l.defaults};await $t.mutateAsync({endpoint:e,routing:E}),k(M=>{if(!M)return M;const P=[...M.customEndpoints??[]],L=P.findIndex(A=>A.id===e);return L===-1?M:(P[L]={...P[L],routing:E},{...M,customEndpoints:P})}),await p.invalidateQueries({queryKey:U.customEndpoints.all()})}else{const E={...l,endpointRouting:{...l.endpointRouting??{},[e]:{defaults:((a=(r=l.endpointRouting)==null?void 0:r[e])==null?void 0:a.defaults)??l.defaults,modelRoutes:t,validation:(v=(u=l.endpointRouting)==null?void 0:u[e])==null?void 0:v.validation,compatibility:(S=(b=l.endpointRouting)==null?void 0:b[e])==null?void 0:S.compatibility}},modelRoutes:e==="anthropic"?t:l.modelRoutes??{}};await Tt.mutateAsync({endpoint:e,nextConfig:E}),k(E)}D(E=>({...E,[e]:Object.entries(t).map(([M,P])=>({id:O(),source:M,target:P}))})),i({title:n("modelManagement.toast.routesSaved"),variant:"success"}),d.refetch()}catch(R){i({title:n("modelManagement.toast.routesSaveFailure",{message:R instanceof Error?R.message:"unknown"}),variant:"error"})}finally{ce(null)}},jt=(c==null?void 0:c.kind)==="provider"?n("providers.actions.delete"):(c==null?void 0:c.kind)==="preset"?n("modelManagement.presets.delete"):(c==null?void 0:c.kind)==="endpoint"?n("common.delete"):"",It=(c==null?void 0:c.kind)==="provider"?n("providers.confirm.delete",{name:c.provider.label||c.provider.id}):(c==null?void 0:c.kind)==="preset"?n("modelManagement.confirm.deletePreset",{name:c.preset.name}):(c==null?void 0:c.kind)==="endpoint"?n("modelManagement.deleteEndpointConfirm",{label:c.endpoint.label}):"",Lt=(c==null?void 0:c.kind)==="provider"?c.provider.label||c.provider.id:(c==null?void 0:c.kind)==="preset"?c.preset.name:(c==null?void 0:c.kind)==="endpoint"?c.endpoint.label:"";return{activeTab:y,activeTabInfo:ot,anthropicTestHeaderOptions:N,applyingPreset:Ae,config:l,configQuery:d,confirmAction:c,confirmDialogDescription:It,confirmDialogName:Lt,confirmDialogTitle:jt,confirmingAction:Ze,customEndpoints:f,customTabs:st,defaultLabels:it,deletingPreset:Ke,drawerMode:W,drawerOpen:Le,editingEndpoint:qe,editingProvider:V,endpointDrawerOpen:Ne,filteredProviders:rt,handleAddRoute:wt,handleAddSuggestion:kt,handleApplyPreset:gt,handleCompatibilityEnabledChange:Pt,handleConfirmDialog:Mt,handleDeleteProvider:xe,handleOpenCreate:yt,handleOpenCreateEndpoint:ut,handleOpenEditEndpoint:dt,handleOpenEdit:vt,handlePresetNameChange:pt,handleProviderSubmit:Et,handleRemoveRoute:xt,handleResetRoutes:Ot,handleRouteChange:Dt,handleSavePreset:ft,handleSaveRoutes:Ft,handleValidationModeChange:Ct,initiateTestConnection:Rt,isDirtyByEndpoint:mt,presetDiffDialog:Xe,presetErrorByEndpoint:Qe,presetNameByEndpoint:pe,presetsByEndpoint:me,presetsExpanded:Je,providerCount:at,providerModelOptions:lt,providerSearch:ae,providerTypeFilter:z,providers:x,pushToast:i,routeError:Ue,routesByEndpoint:I,savingClaudeValidation:Ge,savingCompatibilityPolicy:_e,savingPresetFor:ze,savingRouteFor:Ve,setActiveTab:j,setConfirmAction:we,setDrawerMode:X,setDrawerOpen:J,setEditingEndpoint:Z,setEditingProvider:Y,setEndpointDrawerOpen:ee,setPresetDiffDialog:Ye,setPresetsExpanded:We,setProviderSearch:et,setProviderTypeFilter:tt,setTestDialogUsePreset:oe,systemTabs:nt,tabs:g,testDialogOpen:He,testDialogPreservedExtras:be,testDialogProvider:ne,testDialogUsePreset:se,testingProviderId:Be,closeTestDialog:De,confirmTestDialog:St}}export{Zt as C,en as O,sn as a,nn as g,tn as i,on as u};
|