@chenpu17/cc-gw 0.8.8 → 0.8.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +61 -16
  2. package/package.json +17 -7
  3. package/src/web/dist/assets/About-C_IouOGj.js +1 -0
  4. package/src/web/dist/assets/ApiKeys-Dz-M_uW5.js +1 -0
  5. package/src/web/dist/assets/ConfirmDialog-COgrXiJw.js +1 -0
  6. package/src/web/dist/assets/Dashboard-81R9MI8r.js +1 -0
  7. package/src/web/dist/assets/DialogShell-blgQezT9.js +1 -0
  8. package/src/web/dist/assets/Events-B1zBaQzl.js +1 -0
  9. package/src/web/dist/assets/Help-DM0vXHor.js +5 -0
  10. package/src/web/dist/assets/Login-ygiPlEBP.js +1 -0
  11. package/src/web/dist/assets/Logs-DKh46bsP.js +1 -0
  12. package/src/web/dist/assets/ModelManagement-71W1a6n9.js +1 -0
  13. package/src/web/dist/assets/PageHeader-C01S2XTN.js +1 -0
  14. package/src/web/dist/assets/PageSection-CPPskzEi.js +1 -0
  15. package/src/web/dist/assets/PageState-Cntv0Sf4.js +1 -0
  16. package/src/web/dist/assets/Profiler-l9K8vLHs.js +1 -0
  17. package/src/web/dist/assets/RoutingManagement-CYdcFS8f.js +1 -0
  18. package/src/web/dist/assets/Settings-DJp6w85X.js +1 -0
  19. package/src/web/dist/assets/Skeleton-DgZEIS_E.js +1 -0
  20. package/src/web/dist/assets/app-C09yoSxh.js +61 -0
  21. package/src/web/dist/assets/card-BMPheH9g.js +1 -0
  22. package/src/web/dist/assets/{charts-core-D_rRW-0W.js → charts-core-D9OugzV_.js} +1 -1
  23. package/src/web/dist/assets/{charts-engine-BXnGh0aE.js → charts-engine-DleyglMn.js} +1 -1
  24. package/src/web/dist/assets/{charts-react-t97X9Vfc.js → charts-react-BqhUp1x_.js} +1 -1
  25. package/src/web/dist/assets/gateway-Bf1h2eFf.js +1 -0
  26. package/src/web/dist/assets/global-B_AcmMvG.js +1 -0
  27. package/src/web/dist/assets/global-DOpF330e.css +1 -0
  28. package/src/web/dist/assets/{i18n-dgCQR_PB.js → i18n-B3N4Df3E.js} +1 -1
  29. package/src/web/dist/assets/input-1_zNDnlx.js +1 -0
  30. package/src/web/dist/assets/label-B5W3eu-E.js +1 -0
  31. package/src/web/dist/assets/landing-BF3DRAr3.js +5 -0
  32. package/src/web/dist/assets/live-api-keys-CJUuaCev.png +0 -0
  33. package/src/web/dist/assets/live-dashboard-B7vLOY_S.png +0 -0
  34. package/src/web/dist/assets/live-events-D_njD291.png +0 -0
  35. package/src/web/dist/assets/live-logs-PRpgTV6S.png +0 -0
  36. package/src/web/dist/assets/live-model-management-xkBDeuLk.png +0 -0
  37. package/src/web/dist/assets/package-anTRKkYU.js +1 -0
  38. package/src/web/dist/assets/popover-UGE5kTdI.js +1 -0
  39. package/src/web/dist/assets/{query-Db16w3tH.js → query-Cpxr1dul.js} +1 -1
  40. package/src/web/dist/assets/queryKeys-DDTfNI_C.js +1 -0
  41. package/src/web/dist/assets/{radix-D08JKSgz.js → radix-bG5h1Ymq.js} +2 -2
  42. package/src/web/dist/assets/{router-BURlSZbt.js → router-DspBTS8b.js} +1 -1
  43. package/src/web/dist/assets/select-DJFQztdh.js +1 -0
  44. package/src/web/dist/assets/switch-BqheRBDw.js +1 -0
  45. package/src/web/dist/assets/table-C5nemz39.js +1 -0
  46. package/src/web/dist/assets/useApiQuery-828HesQD.js +1 -0
  47. package/src/web/dist/assets/useAppMutation-Com8yWoS.js +1 -0
  48. package/src/web/dist/assets/useModelManagementState-DY72pEhZ.js +1 -0
  49. package/src/web/dist/assets/utils-DSaa7c6v.js +1 -0
  50. package/src/web/dist/assets/{vendor-DfnQOGOQ.js → vendor-LWJeAdU1.js} +114 -74
  51. package/src/web/dist/cc-gw-mark.svg +27 -0
  52. package/src/web/dist/cc-gw-social-card.png +0 -0
  53. package/src/web/dist/cc-gw-social-card.svg +143 -0
  54. package/src/web/dist/index.html +11 -7
  55. package/src/web/dist/landing.html +55 -0
  56. package/src/web/dist/robots.txt +3 -0
  57. package/src/web/dist/site.webmanifest +18 -0
  58. package/src/web/dist/assets/About-DL-kRONi.js +0 -1
  59. package/src/web/dist/assets/ApiKeys-B8z3u4IT.js +0 -1
  60. package/src/web/dist/assets/ConfirmDialog-BOlSnrzw.js +0 -1
  61. package/src/web/dist/assets/Dashboard-oP_O6VHo.js +0 -1
  62. package/src/web/dist/assets/DialogShell-CIfpW2Dh.js +0 -1
  63. package/src/web/dist/assets/EChart-B2VLuu4H.js +0 -1
  64. package/src/web/dist/assets/Events-CV2keu3U.js +0 -1
  65. package/src/web/dist/assets/Help-CsDD4R4j.js +0 -8
  66. package/src/web/dist/assets/Login-CBDYephM.js +0 -1
  67. package/src/web/dist/assets/Logs-DGKWZwT6.js +0 -1
  68. package/src/web/dist/assets/ModelManagement-DwXLeUHU.js +0 -1
  69. package/src/web/dist/assets/PageHeader-CXZYQQD4.js +0 -1
  70. package/src/web/dist/assets/PageSection-DVUeDf43.js +0 -1
  71. package/src/web/dist/assets/PageState-BQHM_52P.js +0 -1
  72. package/src/web/dist/assets/Profiler-DMGK-XFA.js +0 -1
  73. package/src/web/dist/assets/RoutingManagement-u1VryAxe.js +0 -1
  74. package/src/web/dist/assets/Settings-EhwD6Y4g.js +0 -1
  75. package/src/web/dist/assets/Skeleton-Go6kbxGz.js +0 -1
  76. package/src/web/dist/assets/badge-CJGSNmZk.js +0 -1
  77. package/src/web/dist/assets/card-1Yb5z5wa.js +0 -1
  78. package/src/web/dist/assets/gateway-BngR7DkG.js +0 -1
  79. package/src/web/dist/assets/index--7y4K3jp.css +0 -1
  80. package/src/web/dist/assets/index-GHIvOfHn.js +0 -61
  81. package/src/web/dist/assets/input-C-ScmIz9.js +0 -1
  82. package/src/web/dist/assets/label-Dg9f6DDv.js +0 -1
  83. package/src/web/dist/assets/popover-DmaWzvZZ.js +0 -1
  84. package/src/web/dist/assets/queryKeys-BMvyDTQS.js +0 -1
  85. package/src/web/dist/assets/select-C8ErmS7h.js +0 -1
  86. package/src/web/dist/assets/switch-B2WWdhr1.js +0 -1
  87. package/src/web/dist/assets/useApiQuery-qs2heY2G.js +0 -1
  88. package/src/web/dist/assets/useAppMutation-DHIZ_u7B.js +0 -1
  89. package/src/web/dist/assets/useModelManagementState-BXSC17d4.js +0 -1
  90. package/src/web/dist/assets/utils-COMB3wUn.js +0 -1
@@ -1 +0,0 @@
1
- import{aF as o}from"./vendor-DfnQOGOQ.js";import{a as u}from"./query-Db16w3tH.js";import{r as s,t as i}from"./index-GHIvOfHn.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 +0,0 @@
1
- import{u as o,b as q}from"./query-Db16w3tH.js";import{u as x,t as y}from"./index-GHIvOfHn.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};
@@ -1 +0,0 @@
1
- import{r as d}from"./vendor-DfnQOGOQ.js";import{u as $t,a as Ft}from"./query-Db16w3tH.js";import{h as A,b as K,u as jt,t as Ce,d as ne}from"./index-GHIvOfHn.js";import{g as L}from"./gateway-BngR7DkG.js";import{q as B}from"./queryKeys-BMvyDTQS.js";import{u as Oe}from"./useAppMutation-DHIZ_u7B.js";import{u as It}from"./useApiQuery-qs2heY2G.js";import{u as Lt}from"./i18n-dgCQR_PB.js";const _t=["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"],Jt=["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 ae(s,i){var f;return(f=s==null?void 0:s.customEndpoints)!=null&&f.length?s.customEndpoints:i}function oe(s){return s?Object.entries(s).map(([i,f])=>({id:O(),source:i,target:f})):[]}function re(s,i){var E,p,h;if(!s)return{};const f={},c=s.endpointRouting??{};f.anthropic=oe(((E=c.anthropic)==null?void 0:E.modelRoutes)??s.modelRoutes??{}),f.openai=oe(((p=c.openai)==null?void 0:p.modelRoutes)??{});for(const v of ae(s,i))(h=v.routing)!=null&&h.modelRoutes?f[v.id]=oe(v.routing.modelRoutes):f[v.id]=[];return f}function xe(s,i,f){var p,h,v;const c=ae(s,i).find($=>$.id===f);if(c)return((p=c.routing)==null?void 0:p.modelRoutes)??{};const E=s.endpointRouting??{};return f==="anthropic"?((h=E.anthropic)==null?void 0:h.modelRoutes)??s.modelRoutes??{}:f==="openai"?((v=E.openai)==null?void 0:v.modelRoutes)??{}:{}}function qt(s){const i={};for(const f of s){const c=f.source.trim(),E=f.target.trim();c&&E&&(i[c]=E)}return i}function Te(s,i){return JSON.stringify(qt(s))!==JSON.stringify(i)}function Wt(s,i){if(s==="anthropic")return!0;const f=i.find(c=>c.id===s);return f?f.paths&&f.paths.length>0?f.paths.some(c=>c.protocol==="anthropic"):f.protocol==="anthropic":!1}function Xt(s,i,f){var E,p,h;if(!i)return;if(s==="anthropic"||s==="openai")return(p=(E=i.endpointRouting)==null?void 0:E[s])==null?void 0:p.validation;const c=ae(i,f).find(v=>v.id===s);return(h=c==null?void 0:c.routing)==null?void 0:h.validation}function Bt(s,i){const f=[{key:"providers",label:s("modelManagement.tabs.providers"),description:s("modelManagement.tabs.providersDesc"),isSystem:!0,canDelete:!1},{key:"anthropic",label:s("modelManagement.tabs.anthropic"),description:s("modelManagement.tabs.anthropicDesc"),isSystem:!0,canDelete:!1,protocols:["anthropic"]},{key:"openai",label:s("modelManagement.tabs.openai"),description:s("modelManagement.tabs.openaiDesc"),isSystem:!0,canDelete:!1,protocols:["openai-auto","openai-chat","openai-responses"]}],c=i.map(E=>{let p=s("modelManagement.tabs.customEndpoint"),h=[];if(E.paths&&E.paths.length>0)p=`${s("modelManagement.tabs.customEndpoint")}: ${E.paths.map(v=>`${v.path} (${v.protocol})`).join(", ")}`,h=[...new Set(E.paths.map(v=>v.protocol))];else if(E.path){const v=E.protocol||"anthropic";p=`${s("modelManagement.tabs.customEndpoint")}: ${E.path} (${v})`,h=[v]}return{key:E.id,label:E.label||E.id,description:p,isSystem:!1,canDelete:E.deletable!==!1,protocols:h}});return[...f,...c]}function Nt(s){return s.label&&s.label.trim().length>0?`${s.label} (${s.id})`:s.id}const H={savePreset(s,i){return A(K.post(`/api/routing-presets/${s}`,{name:i}))},applyPreset(s,i){return A(K.post(`/api/routing-presets/${s}/apply`,{name:i}))},deletePreset(s,i){return A(K.delete(`/api/routing-presets/${s}/${encodeURIComponent(i)}`))},testProvider(s,i){return A(K.post(`/api/providers/${s}/test`,i))}};function $e(s,i){var c,E,p;const f={anthropic:((c=s.routingPresets)==null?void 0:c.anthropic)??[],openai:((E=s.routingPresets)==null?void 0:E.openai)??[]};for(const h of i){const v=(p=s.customEndpoints)==null?void 0:p.find($=>$.id===h.id);f[h.id]=(v==null?void 0:v.routingPresets)??h.routingPresets??[]}return f}function Yt(){var ke;const{t:s}=Lt(),{pushToast:i}=jt(),f=$t(),c=It(B.config.full(),L.configRequest()),p=((ke=Ft({queryKey:B.customEndpoints.all(),queryFn:ne.list,refetchInterval:1e4}).data)==null?void 0:ke.endpoints)??[],h=d.useMemo(()=>Bt(s,p),[p,s]),[v,$]=d.useState("providers"),[u,D]=d.useState(null),[Fe,G]=d.useState(!1),[_,J]=d.useState("create"),[N,W]=d.useState(void 0),[je,X]=d.useState(void 0),[Ie,ie]=d.useState(null),[Le,Y]=d.useState(!1),[F,P]=d.useState({}),[qe,x]=d.useState({}),[Be,ue]=d.useState(null),[le,Z]=d.useState({}),[de,ce]=d.useState({}),[Ne,U]=d.useState({}),[Ue,me]=d.useState(null),[Ve,fe]=d.useState(null),[Qe,pe]=d.useState(null),[ze,ge]=d.useState(!1),[ee,he]=d.useState(null),[V,te]=d.useState(!0),[ve,ye]=d.useState({}),[Ae,Ee]=d.useState(!1),[Ke,He]=d.useState({}),[Ge,_e]=d.useState(null),[l,Re]=d.useState(null),[Je,be]=d.useState(!1),[se,We]=d.useState(""),[Q,Xe]=d.useState("all"),Ye=d.useMemo(()=>h.filter(e=>e.isSystem),[h]),Ze=d.useMemo(()=>h.filter(e=>!e.isSystem),[h]),et=d.useMemo(()=>h.find(e=>e.key===v)??h[0]??null,[v,h]),k=(u==null?void 0:u.providers)??[],tt=k.length,st=d.useMemo(()=>k.filter(e=>{var a;if(!(Q==="all"||(e.type??"custom")===Q))return!1;const t=se.trim().toLowerCase();return t?[e.id,e.label??"",e.baseUrl,e.defaultModel??"",...((a=e.models)==null?void 0:a.map(r=>r.id))??[]].join(" ").toLowerCase().includes(t):!0}),[se,Q,k]),q=d.useMemo(()=>[{key:"anthropic-beta",value:"claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14",label:s("providers.testDialog.options.beta.label"),description:s("providers.testDialog.options.beta.description")}],[s]);d.useEffect(()=>{if(!c.data)return;const e=c.data;D(e),P(n=>{const t=re(e,p);if(!n||Object.keys(n).length===0)return t;const o={...t};for(const[a,r]of Object.entries(n)){if(!(a in t))continue;const m=xe(e,p,a);Te(r,m)&&(o[a]=r)}return o}),x({}),Z($e(e,p))},[c.data,p]),d.useEffect(()=>{!c.isError||!c.error||i({title:s("providers.toast.loadFailure",{message:c.error.message}),variant:"error"})},[c.error,c.isError,i,s]),d.useEffect(()=>{h.some(e=>e.key===v)||$("providers")},[v,h]);const nt=d.useMemo(()=>{const e=new Map;for(const n of k){if(!n.defaultModel||!n.models)continue;const t=n.models.find(o=>o.id===n.defaultModel);t&&e.set(n.id,Nt(t))}return e},[k]),ot=d.useMemo(()=>{const e=[],n=new Set;for(const t of k){const o=t.label&&t.label!==t.id?`${t.label} (${t.id})`:t.id,a=t.models??[];if(a.length>0)for(const m of a){const R=`${t.id}:${m.id}`;n.has(R)||(n.add(R),e.push({value:R,label:`${o} · ${m.label??m.id}`}))}else if(t.defaultModel){const m=`${t.id}:${t.defaultModel}`;n.has(m)||(n.add(m),e.push({value:m,label:`${o} · ${t.defaultModel}`}))}const r=`${t.id}:*`;n.has(r)||(n.add(r),e.push({value:r,label:s("settings.routing.providerPassthroughOption",{provider:o})}))}for(const t of Object.values(F).flat()){const o=t.target.trim();o&&!n.has(o)&&(n.add(o),e.push({value:o,label:o}))}return e},[k,F,s]),rt=()=>{X(void 0),Y(!0)},at=e=>{X(e),Y(!0)},it=e=>u?xe(u,p,e):{},ut=d.useMemo(()=>{const e={};for(const n of h){if(n.key==="providers")continue;const t=F[n.key]||[];e[n.key]=Te(t,it(n.key))}return e},[u,p,F,h]),Se=(e,n)=>{Z(t=>({...t,[e]:n})),D(t=>{if(!t)return t;if(e==="anthropic"||e==="openai")return{...t,routingPresets:{...t.routingPresets,[e]:n}};const o=[...t.customEndpoints??[]],a=o.findIndex(r=>r.id===e);return a===-1?t:(o[a]={...o[a],routingPresets:n},{...t,customEndpoints:o})})},T=()=>u?!0:(i({title:s("settings.toast.missingConfig"),variant:"error"}),c.refetch(),!1),lt=(e,n)=>{ce(t=>({...t,[e]:n})),n.trim()&&U(t=>({...t,[e]:null}))},dt=async e=>{if(!T())return;const n=(de[e]??"").trim();if(!n){U(t=>({...t,[e]:s("modelManagement.validation.presetName")}));return}if((le[e]??[]).some(t=>t.name.toLowerCase()===n.toLowerCase())){U(t=>({...t,[e]:s("modelManagement.validation.presetDuplicate",{name:n})}));return}me(e);try{const o=(await H.savePreset(e,n)).presets??[];Se(e,o),ce(a=>({...a,[e]:""})),U(a=>({...a,[e]:null})),i({title:s("modelManagement.toast.presetSaved",{name:n}),variant:"success"})}catch(t){i({title:s("modelManagement.toast.presetSaveFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{me(null),c.refetch()}},ct=async(e,n)=>{if(T()){fe({endpoint:e,name:n.name});try{const o=(await H.applyPreset(e,n.name)).config;if(o)D(o),P(re(o,p)),Z($e(o,p));else{const a=n.modelRoutes??{};P(r=>({...r,[e]:Object.entries(a).map(([m,R])=>({id:O(),source:m,target:R}))})),D(r=>{var R,y,g,b;if(!r)return r;const m=(r.customEndpoints??[]).findIndex(S=>S.id===e);if(m!==-1){const S=[...r.customEndpoints??[]],C=S[m];return S[m]={...C,routing:{defaults:((R=C.routing)==null?void 0:R.defaults)??r.defaults,...C.routing??{},modelRoutes:a}},{...r,customEndpoints:S}}return e==="anthropic"||e==="openai"?{...r,endpointRouting:{...r.endpointRouting??{},[e]:{defaults:((g=(y=r.endpointRouting)==null?void 0:y[e])==null?void 0:g.defaults)??r.defaults,...((b=r.endpointRouting)==null?void 0:b[e])??{},modelRoutes:a}},modelRoutes:e==="anthropic"?a:r.modelRoutes??{}}:r})}e!=="anthropic"&&e!=="openai"&&await f.invalidateQueries({queryKey:B.customEndpoints.all()}),i({title:s("modelManagement.toast.presetApplySuccess",{name:n.name}),variant:"success"})}catch(t){i({title:s("modelManagement.toast.presetApplyFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{fe(null),c.refetch()}}},mt=async(e,n)=>{if(T()){pe({endpoint:e,name:n.name});try{const t=await H.deletePreset(e,n.name);Se(e,t.presets??[]),i({title:s("modelManagement.toast.presetDeleteSuccess",{name:n.name}),variant:"success"})}catch(t){i({title:s("modelManagement.toast.presetDeleteFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{pe(null),c.refetch()}}},ft=()=>{T()&&(J("create"),W(void 0),G(!0))},pt=e=>{T()&&(J("edit"),W(e),G(!0))},gt=async e=>{if(!u)throw new Error(s("settings.toast.missingConfig"));const n=_==="create"?[...k,e]:k.map(o=>N&&o.id===N.id?{...e,id:N.id}:o),t={...u,providers:n};await L.saveConfig(t),D(t),P(re(t,p)),c.refetch(),i({title:_==="create"?s("providers.toast.createSuccess",{name:e.label||e.id}):s("providers.toast.updateSuccess",{name:e.label||e.id}),variant:"success"})},ht=async e=>{const n=p.find(t=>t.id===e);if(!(!n||n.deletable===!1))try{await ne.delete(e),await f.invalidateQueries({queryKey:B.customEndpoints.all()}),i({title:s("modelManagement.deleteEndpointSuccess"),variant:"success"}),v===e&&$("providers")}catch(t){const o=Ce(t);i({title:s("modelManagement.deleteEndpointError",{error:o.message}),variant:"error"})}},Me=async(e,n)=>{ie(e.id);try{const t=n&&(n.headers||n.query)?{headers:n.headers&&Object.keys(n.headers).length>0?n.headers:void 0,query:n.query&&n.query.trim().length>0?n.query.trim():void 0}:void 0,o=await H.testProvider(e.id,t);if(o.ok){i({title:s("providers.toast.testSuccess"),description:s("providers.toast.testSuccessDesc",{status:o.status,duration:o.durationMs?`${o.durationMs} ms`:"—"}),variant:"success"});return}i({title:s("providers.toast.testFailure",{message:`${o.status} ${o.statusText}`}),variant:"error"})}catch(t){i({title:s("providers.toast.testFailure",{message:t instanceof Error?t.message:"unknown"}),variant:"error"})}finally{ie(null)}},vt=e=>{if(e.type!=="anthropic"){Me(e);return}const n=e.extraHeaders??{},t=new Map(q.map(r=>[r.key.toLowerCase(),r])),o={};let a=!0;for(const r of q){const m=Object.entries(n).find(([g])=>g.toLowerCase()===r.key.toLowerCase());if(!m)continue;const[R,y]=m;String(y??"")!==r.value&&(a=!1,o[R]=String(y??""))}for(const[r,m]of Object.entries(n))t.has(r.toLowerCase())||(o[r]=String(m??""));ye(o),te(a),he(e),ge(!0)},we=()=>{ge(!1),he(null),te(!0),ye({})},yt=async()=>{if(!ee)return;const e={};if(V)for(const o of q)e[o.key]=o.value;const n=new Map(q.map(o=>[o.key.toLowerCase(),o]));for(const[o,a]of Object.entries(ve))n.get(o.toLowerCase())&&V||(e[o]=a);const t=ee;we(),await Me(t,{headers:Object.keys(e).length>0?e:void 0,query:V?"beta=true":void 0})},Pe=async e=>{var y,g,b,S,C,z;if(!T())return;const n=k.filter(M=>M.id!==e.id),t=M=>{const w={};if(!M)return w;for(const[j,I]of Object.entries(M)){if(!I)continue;const[De]=I.split(":");De&&De===e.id||I===e.id||(w[j]=I)}return w},o=(u==null?void 0:u.endpointRouting)??{},a=t(((y=o.anthropic)==null?void 0:y.modelRoutes)??(u==null?void 0:u.modelRoutes)??{}),r=t(((g=o.openai)==null?void 0:g.modelRoutes)??{}),m=((u==null?void 0:u.customEndpoints)??p).map(M=>{const w=M.routing,j=w==null?void 0:w.modelRoutes;return j?{...M,routing:{...w,defaults:w.defaults??u.defaults,modelRoutes:t(j)}}:M}),R={...u,providers:n,modelRoutes:a,customEndpoints:m,endpointRouting:{anthropic:{defaults:((b=o.anthropic)==null?void 0:b.defaults)??u.defaults,modelRoutes:a,validation:(S=o.anthropic)==null?void 0:S.validation},openai:{defaults:((C=o.openai)==null?void 0:C.defaults)??u.defaults,modelRoutes:r,validation:(z=o.openai)==null?void 0:z.validation}}};try{await L.saveConfig(R),D(R),P({anthropic:Object.entries(a).map(([M,w])=>({id:O(),source:M,target:w})),openai:Object.entries(r).map(([M,w])=>({id:O(),source:M,target:w})),...Object.fromEntries(m.map(M=>{var w;return[M.id,Object.entries(((w=M.routing)==null?void 0:w.modelRoutes)??{}).map(([j,I])=>({id:O(),source:j,target:I}))]}))}),i({title:s("providers.toast.deleteSuccess",{name:e.label||e.id}),variant:"success"}),c.refetch()}catch(M){i({title:s("providers.toast.deleteFailure",{message:M instanceof Error?M.message:"unknown"}),variant:"error"})}},Et=async()=>{if(l){be(!0);try{l.kind==="provider"?await Pe(l.provider):l.kind==="preset"?await mt(l.endpoint,l.preset):await ht(l.endpoint.id),Re(null)}finally{be(!1)}}},Rt=e=>{P(n=>({...n,[e]:[...n[e]||[],{id:O(),source:"",target:""}]})),x(n=>({...n,[e]:null}))},bt=async(e,n)=>{var t,o;if(T()){Ee(!0);try{if(e==="anthropic"||e==="openai"){const a=e,r=u.endpointRouting?{...u.endpointRouting}:{},m=r[a]??{defaults:u.defaults,modelRoutes:(a==="anthropic"?u.modelRoutes:{})??{}},R={defaults:m.defaults??u.defaults,modelRoutes:m.modelRoutes??{}},y=n==="off"?void 0:{...m.validation??{},mode:n,allowExperimentalBlocks:((t=m.validation)==null?void 0:t.allowExperimentalBlocks)??!0},g={...u,endpointRouting:{...r,[a]:y?{...R,validation:y}:{...R}}};await L.saveConfig(g),D(g)}else{const a=[...u.customEndpoints??[]],r=a.findIndex(b=>b.id===e);if(r===-1)throw new Error(s("modelManagement.toast.endpointNotFound"));const m=a[r],R=m.routing??{defaults:u.defaults,modelRoutes:{}},y=n==="off"?void 0:{...R.validation??{},mode:n,allowExperimentalBlocks:((o=R.validation)==null?void 0:o.allowExperimentalBlocks)??!0};a[r]={...m,routing:y?{...R,validation:y}:{defaults:R.defaults,modelRoutes:R.modelRoutes}};const g={...u,customEndpoints:a};await L.saveConfig(g),D(g)}i({title:s("modelManagement.toast.validationModeSaved",{mode:s(`modelManagement.claudeValidation.options.${n}.label`)}),variant:"success"}),c.refetch()}catch(a){const r=Ce(a);i({title:s("modelManagement.toast.validationModeFailure",{message:r.message}),variant:"error"})}finally{Ee(!1)}}},St=(e,n)=>{P(t=>{const o=t[e]||[];return o.some(a=>a.source.trim()===n.trim())?t:{...t,[e]:[...o,{id:O(),source:n,target:""}]}}),x(t=>({...t,[e]:null}))},Mt=(e,n,t,o)=>{P(a=>({...a,[e]:(a[e]||[]).map(r=>r.id===n?{...r,[t]:o}:r)})),x(a=>({...a,[e]:null}))},wt=(e,n)=>{P(t=>({...t,[e]:(t[e]||[]).filter(o=>o.id!==n)})),x(t=>({...t,[e]:null}))},Pt=e=>{var t;if(!u)return;const n=(u.customEndpoints??p).find(o=>o.id===e);if(n)P(o=>{var a;return{...o,[e]:Object.entries(((a=n.routing)==null?void 0:a.modelRoutes)??{}).map(([r,m])=>({id:O(),source:r,target:m}))}});else{const o=u.endpointRouting??{},a=e,r=a==="anthropic"?u.modelRoutes??{}:{},m=((t=o[a])==null?void 0:t.modelRoutes)??r;P(R=>({...R,[e]:Object.entries(m).map(([y,g])=>({id:O(),source:y,target:g}))}))}x(o=>({...o,[e]:null}))},kt=Oe({mutationFn:async e=>(await L.saveConfig(e.nextConfig),e)}),Dt=Oe({mutationFn:async e=>(await ne.update(e.endpoint,{routing:e.routing}),e)}),Ct=async e=>{var o,a,r,m,R;if(!T())return;const n=F[e]||[],t={};for(const y of n){const g=y.source.trim(),b=y.target.trim();if(!(!g&&!b)){if(!g||!b){x(S=>({...S,[e]:s("settings.validation.routePair")}));return}if(t[g]){x(S=>({...S,[e]:s("settings.validation.routeDuplicate",{model:g})}));return}t[g]=b}}x(y=>({...y,[e]:null})),ue(e);try{const y=p.find(g=>g.id===e);if(y){const g={...y.routing??{},modelRoutes:t,defaults:((o=y.routing)==null?void 0:o.defaults)||u.defaults};await Dt.mutateAsync({endpoint:e,routing:g}),D(b=>{if(!b)return b;const S=[...b.customEndpoints??[]],C=S.findIndex(z=>z.id===e);return C===-1?b:(S[C]={...S[C],routing:g},{...b,customEndpoints:S})}),await f.invalidateQueries({queryKey:B.customEndpoints.all()})}else{const g={...u,endpointRouting:{...u.endpointRouting??{},[e]:{defaults:((r=(a=u.endpointRouting)==null?void 0:a[e])==null?void 0:r.defaults)??u.defaults,modelRoutes:t,validation:(R=(m=u.endpointRouting)==null?void 0:m[e])==null?void 0:R.validation}},modelRoutes:e==="anthropic"?t:u.modelRoutes??{}};await kt.mutateAsync({endpoint:e,nextConfig:g}),D(g)}P(g=>({...g,[e]:Object.entries(t).map(([b,S])=>({id:O(),source:b,target:S}))})),i({title:s("modelManagement.toast.routesSaved"),variant:"success"}),c.refetch()}catch(y){i({title:s("modelManagement.toast.routesSaveFailure",{message:y instanceof Error?y.message:"unknown"}),variant:"error"})}finally{ue(null)}},Ot=(l==null?void 0:l.kind)==="provider"?s("providers.actions.delete"):(l==null?void 0:l.kind)==="preset"?s("modelManagement.presets.delete"):(l==null?void 0:l.kind)==="endpoint"?s("common.delete"):"",xt=(l==null?void 0:l.kind)==="provider"?s("providers.confirm.delete",{name:l.provider.label||l.provider.id}):(l==null?void 0:l.kind)==="preset"?s("modelManagement.confirm.deletePreset",{name:l.preset.name}):(l==null?void 0:l.kind)==="endpoint"?s("modelManagement.deleteEndpointConfirm",{label:l.endpoint.label}):"",Tt=(l==null?void 0:l.kind)==="provider"?l.provider.label||l.provider.id:(l==null?void 0:l.kind)==="preset"?l.preset.name:(l==null?void 0:l.kind)==="endpoint"?l.endpoint.label:"";return{activeTab:v,activeTabInfo:et,anthropicTestHeaderOptions:q,applyingPreset:Ve,config:u,configQuery:c,confirmAction:l,confirmDialogDescription:xt,confirmDialogName:Tt,confirmDialogTitle:Ot,confirmingAction:Je,customEndpoints:p,customTabs:Ze,defaultLabels:nt,deletingPreset:Qe,drawerMode:_,drawerOpen:Fe,editingEndpoint:je,editingProvider:N,endpointDrawerOpen:Le,filteredProviders:st,handleAddRoute:Rt,handleAddSuggestion:St,handleApplyPreset:ct,handleConfirmDialog:Et,handleDeleteProvider:Pe,handleOpenCreate:ft,handleOpenCreateEndpoint:rt,handleOpenEditEndpoint:at,handleOpenEdit:pt,handlePresetNameChange:lt,handleProviderSubmit:gt,handleRemoveRoute:wt,handleResetRoutes:Pt,handleRouteChange:Mt,handleSavePreset:dt,handleSaveRoutes:Ct,handleValidationModeChange:bt,initiateTestConnection:vt,isDirtyByEndpoint:ut,presetDiffDialog:Ge,presetErrorByEndpoint:Ne,presetNameByEndpoint:de,presetsByEndpoint:le,presetsExpanded:Ke,providerCount:tt,providerModelOptions:ot,providerSearch:se,providerTypeFilter:Q,providers:k,pushToast:i,routeError:qe,routesByEndpoint:F,savingClaudeValidation:Ae,savingPresetFor:Ue,savingRouteFor:Be,setActiveTab:$,setConfirmAction:Re,setDrawerMode:J,setDrawerOpen:G,setEditingEndpoint:X,setEditingProvider:W,setEndpointDrawerOpen:Y,setPresetDiffDialog:_e,setPresetsExpanded:He,setProviderSearch:We,setProviderTypeFilter:Xe,setTestDialogUsePreset:te,systemTabs:Ye,tabs:h,testDialogOpen:ze,testDialogPreservedExtras:ve,testDialogProvider:ee,testDialogUsePreset:V,testingProviderId:Ie,closeTestDialog:we,confirmTestDialog:yt}}export{_t as C,Jt as O,Xt as g,Wt as i,Nt as r,Yt as u};
@@ -1 +0,0 @@
1
- const o=[12,28,48,88,112,152,184,208,228,262,292,332],s=2e5;function i(t){const r=new Date(t);return`${r.getFullYear()}-${`${r.getMonth()+1}`.padStart(2,"0")}-${`${r.getDate()}`.padStart(2,"0")} ${`${r.getHours()}`.padStart(2,"0")}:${`${r.getMinutes()}`.padStart(2,"0")}:${`${r.getSeconds()}`.padStart(2,"0")}`}function u(t){return t==null?"-":t.toLocaleString()}function l(t,r){const n=u(t);return n==="-"?"-":`${n} ${r}`}function f(t){return t?"true":"false"}function g(t,r){if(!t||t.trim().length===0)return r;if(t.length>s)return t;try{const n=JSON.parse(t);return JSON.stringify(n,null,2)}catch{return t}}function S(t,r){return t.status_code===null||t.status_code===void 0?t.error?{label:r("common.status.error"),tone:"error",variant:"destructive"}:{label:r("common.status.pending"),tone:"pending",variant:"warning"}:t.error||t.status_code>=400?{label:t.status_code.toString(),tone:"error",variant:"destructive"}:{label:t.status_code.toString(),tone:"success",variant:"success"}}function c(t){let r=0;for(let n=0;n<t.length;n+=1)r=r*31+t.charCodeAt(n)>>>0;return r}function d(t){const r=t==null?void 0:t.trim();if(!r)return null;const n=c(r),e=o[n%o.length],a=`hsl(${e} 82% 42%)`;return{sessionId:r,colorKey:`${e}`,rowStyle:{backgroundColor:`hsl(${e} 82% 42% / 0.08)`},hoverStyle:{backgroundColor:`hsl(${e} 82% 42% / 0.12)`},stickyStyle:{backgroundColor:`hsl(${e} 82% 42% / 0.1)`},accentStyle:{borderLeft:`3px solid ${a}`}}}export{l as a,i as b,f as c,u as d,d as e,g as f,S as g};