llm-simple-router 1.0.20 → 1.0.21

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 (55) hide show
  1. package/frontend-dist/assets/{AuthLayout-BwI_T7qz.js → AuthLayout-UzmdwXpC.js} +1 -1
  2. package/frontend-dist/assets/{Card-C5jCkE1m.js → Card-BAJ7K-oq.js} +1 -1
  3. package/frontend-dist/assets/{CardContent-Dozca7Pu.js → CardContent-D4ma-cic.js} +1 -1
  4. package/frontend-dist/assets/{CardTitle-DqrzLNUU.js → CardTitle-B3frXOF6.js} +1 -1
  5. package/frontend-dist/assets/{CascadingModelSelect-D2DRpM28.js → CascadingModelSelect-D1iTboYP.js} +1 -1
  6. package/frontend-dist/assets/{Checkbox-B-BvqDQI.js → Checkbox-FFHFrFEk.js} +1 -1
  7. package/frontend-dist/assets/{CollapsibleContent-BV1VGpMl.js → CollapsibleContent-CsQhKwq1.js} +1 -1
  8. package/frontend-dist/assets/{CollapsibleTrigger-BNuoyr3g.js → CollapsibleTrigger-x1DJz63o.js} +1 -1
  9. package/frontend-dist/assets/{ConcurrencyControl-XSeHDo1-.js → ConcurrencyControl-CjQi9JM0.js} +1 -1
  10. package/frontend-dist/assets/{Dashboard-CsgO9KeQ.js → Dashboard-DKm9udvl.js} +1 -1
  11. package/frontend-dist/assets/{Input-C5OLhaEA.js → Input-4bkkJSKj.js} +1 -1
  12. package/frontend-dist/assets/{Label-B5FJLcPy.js → Label-D9CEaBof.js} +1 -1
  13. package/frontend-dist/assets/{Login-wZ8_XeqQ.js → Login-h4I4rmnC.js} +1 -1
  14. package/frontend-dist/assets/{Logs-CiC8wTHb.js → Logs-CAU6FiMD.js} +1 -1
  15. package/frontend-dist/assets/{ModelMappings-CZcMgWbM.js → ModelMappings-B6rCeno-.js} +1 -1
  16. package/frontend-dist/assets/{Monitor-Cb4RhaXB.js → Monitor-Dmb_-qsO.js} +1 -1
  17. package/frontend-dist/assets/{Providers-DGwBmDka.js → Providers-U4m7hTSJ.js} +1 -1
  18. package/frontend-dist/assets/{ProxyEnhancement-Duyvg2Pu.js → ProxyEnhancement-DRgjcB7n.js} +1 -1
  19. package/frontend-dist/assets/{QuickSetup-MgM8jncN.js → QuickSetup-BNmLBUdC.js} +1 -1
  20. package/frontend-dist/assets/{RetryRules-CucoGQb3.js → RetryRules-Bl3ZVdvu.js} +1 -1
  21. package/frontend-dist/assets/{RouterKeys-Cj46NlnE.js → RouterKeys-BwnEUWyG.js} +1 -1
  22. package/frontend-dist/assets/{RovingFocusItem-zXj-QlAl.js → RovingFocusItem-DsNw2OyU.js} +1 -1
  23. package/frontend-dist/assets/{Schedules-BxtgE_jQ.js → Schedules-D2N8icq0.js} +1 -1
  24. package/frontend-dist/assets/{Separator-Cmw60D6s.js → Separator-BAEMvYDZ.js} +1 -1
  25. package/frontend-dist/assets/{Settings-CSjzJJ1L.js → Settings-C4ZqRV31.js} +1 -1
  26. package/frontend-dist/assets/{Setup-P3Amua1-.js → Setup-BXEaeu0C.js} +1 -1
  27. package/frontend-dist/assets/{Skeleton-Bb6JdseU.js → Skeleton-BwwGudhK.js} +1 -1
  28. package/frontend-dist/assets/{Switch-G855OsUp.js → Switch-C9A1URA9.js} +1 -1
  29. package/frontend-dist/assets/{TableHeader-CFMCLKRy.js → TableHeader-B8tbY3uE.js} +1 -1
  30. package/frontend-dist/assets/{TabsTrigger-P5C-goq6.js → TabsTrigger-BciD13aS.js} +1 -1
  31. package/frontend-dist/assets/{UnifiedRequestDialog-b0YkEvxq.js → UnifiedRequestDialog-Dnhxxnoi.js} +1 -1
  32. package/frontend-dist/assets/{VisuallyHiddenInput-De_zFaJT.js → VisuallyHiddenInput-Deh-FeJI.js} +1 -1
  33. package/frontend-dist/assets/arrow-down-CL1-lpk5.js +1 -0
  34. package/frontend-dist/assets/{badge-BKjuTJ01.js → badge-_5ZpB7R1.js} +1 -1
  35. package/frontend-dist/assets/{button-DpPvjx0f.js → button-BcmABzob.js} +2 -2
  36. package/frontend-dist/assets/chevron-right-Bf3Fdg6M.js +1 -0
  37. package/frontend-dist/assets/{dialog-BxDRyeVd.js → dialog-BDw6KIzh.js} +1 -1
  38. package/frontend-dist/assets/{image-Bp59tVen.js → image-BQjpozCO.js} +1 -1
  39. package/frontend-dist/assets/{index-Di7f6Crg.js → index-CpvOTf7s.js} +2 -2
  40. package/frontend-dist/assets/{model-patches-CGEItLFI.js → model-patches-Bz5q_usR.js} +1 -1
  41. package/frontend-dist/assets/{pencil-d2ST8J0H.js → pencil-QUrS_Knn.js} +1 -1
  42. package/frontend-dist/assets/plus-COwF_5ra.js +1 -0
  43. package/frontend-dist/assets/search-aFGV_wt3.js +1 -0
  44. package/frontend-dist/assets/{sparkles-C1RBYUoM.js → sparkles-D26eNUGF.js} +1 -1
  45. package/frontend-dist/assets/{transform-domain-CaOlRFL4.js → transform-domain-BiEMeUvX.js} +1 -1
  46. package/frontend-dist/assets/{trash-2-C1YCkSOe.js → trash-2-4HdxTT6S.js} +1 -1
  47. package/frontend-dist/assets/{useClipboard-DfhNcDMZ.js → useClipboard-Bv5gUQAX.js} +1 -1
  48. package/frontend-dist/assets/{useLogRetention-Ck3INr4l.js → useLogRetention-NFhOwCBf.js} +1 -1
  49. package/frontend-dist/assets/{useProviderGroups-IgmEpHao.js → useProviderGroups-Z3iRaBYM.js} +1 -1
  50. package/frontend-dist/index.html +2 -2
  51. package/package.json +1 -1
  52. package/frontend-dist/assets/arrow-down-C0j8UmLw.js +0 -1
  53. package/frontend-dist/assets/chevron-right-QdaibhaO.js +0 -1
  54. package/frontend-dist/assets/plus-DPWmbUOf.js +0 -1
  55. package/frontend-dist/assets/search-BNr8kuWX.js +0 -1
@@ -1 +1 @@
1
- import{$ as e,Ct as t,P as n,Q as r,Qt as i,R as a,St as o,U as s,X as c,Yt as l,at as u,bt as d,et as f,it as p,jt as m,n as h,nt as g,ot as _,qt as v,r as y,tt as b,vt as x,zt as S}from"./button-DpPvjx0f.js";import{t as C}from"./image-Bp59tVen.js";import{t as w}from"./plus-DPWmbUOf.js";import{t as T}from"./trash-2-C1YCkSOe.js";import{n as E,t as D}from"./CollapsibleContent-BV1VGpMl.js";import{t as O}from"./Label-B5FJLcPy.js";import{_ as k,g as A,h as j,m as M,v as N,yt as P}from"./index-Di7f6Crg.js";import{t as F}from"./badge-BKjuTJ01.js";import{t as I}from"./Input-C5OLhaEA.js";var L=a(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),R=a(`video`,[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]),z=a(`volume-2`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]),B=[{id:`claude-code`,name:`Claude Code`,icon:`C`,iconClass:`cc`,iconSvg:`claude`,brandBg:`bg-[#D97757]`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.claudeCodeDesc`,popular:!0},{id:`codex`,name:`Codex CLI`,icon:`CX`,iconClass:`cx`,iconSvg:`codex`,brandBg:`bg-[#74AA9C]`,format:`openai-responses`,defaultProvider:`DeepSeek`,defaultPlan:`OpenAI`,descriptionKey:`quickSetup.client.codexDesc`,popular:!0},{id:`pi`,name:`Pi`,icon:`P`,iconClass:`pi`,iconSvg:`pi`,brandBg:`bg-emerald-600`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.piDesc`},{id:`openai-sdk`,name:`OpenAI SDK`,icon:`OA`,iconClass:`oa`,iconSvg:`openai`,brandBg:`bg-[#10a37f]`,format:`openai`,defaultProvider:`DeepSeek`,defaultPlan:`OpenAI`,descriptionKey:`quickSetup.client.openaiSdkDesc`},{id:`anthropic-sdk`,name:`Anthropic SDK`,icon:`AN`,iconClass:`an`,iconSvg:`anthropic`,brandBg:`bg-[#D4976A]`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.anthropicSdkDesc`}],V=[{key:`deepseek_anthropic`,labelKey:`quickSetup.patch.deepseekAnthropic`,items:[{id:`thinking_consistency`,nameKey:`quickSetup.patch.thinkingConsistency`,descKey:`quickSetup.patch.thinkingConsistencyDesc`},{id:`orphan_tool_results`,nameKey:`quickSetup.patch.orphanToolResult`,descKey:`quickSetup.patch.orphanToolResultDesc`}]},{key:`deepseek_openai`,labelKey:`quickSetup.patch.deepseekOpenai`,items:[{id:`thinking_consistency`,nameKey:`quickSetup.patch.thinkingConsistency`,descKey:`quickSetup.patch.thinkingConsistencyDesc`},{id:`orphan_tool_results_oa`,nameKey:`quickSetup.patch.orphanToolResultOa`,descKey:`quickSetup.patch.orphanToolResultOaDesc`}]},{key:`general`,labelKey:`quickSetup.patch.general`,items:[{id:`developer_role`,nameKey:`quickSetup.patch.developerRole`,descKey:`quickSetup.patch.developerRoleDesc`}]}],H=[{label:`8K`,value:8e3},{label:`16K`,value:16e3},{label:`32K`,value:32e3},{label:`64K`,value:64e3},{label:`128K`,value:128e3},{label:`160K`,value:16e4},{label:`200K`,value:2e5},{label:`256K`,value:256e3},{label:`1M`,value:1e6}],U=1e6,W=256e3,G=2e5,K=128e3,q=32e3,J=16e3,Y=8e3;function X(e){let t=e.toLowerCase();return t.includes(`v4`)||t.includes(`v3.2`)||t.includes(`r1`)||t.includes(`reasoner`)||t.includes(`qwen3.6`)||t.includes(`mimo-v2.5`)?U:t.includes(`kimi`)||t.includes(`moonshotai`)||t.includes(`hunyuan-2.0`)||t.includes(`hunyuan-a13b`)||t.includes(`hunyuan-t1`)||t.includes(`step-3.5`)||t.includes(`step-3`)||t.includes(`qwen3.5-plus`)||t.includes(`qwen3-max`)||t.includes(`doubao`)||t.includes(`ark-code`)||t.includes(`tc-code`)?W:t.includes(`glm-5`)||t.includes(`glm-4.7`)||t.includes(`minimax`)?G:t.includes(`128k`)?K:t.includes(`32k`)?q:t.includes(`16k`)?J:t.includes(`8k`)?Y:K}var ee={"claude-code":[`sonnet`,`opus`,`haiku`],codex:[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex`,`gpt-5.2`],"openai-sdk":[`gpt-5.1`,`gpt-4.1`,`o3`,`o4-mini`],"anthropic-sdk":[`claude-sonnet-4-20250514`,`claude-opus-4-20250116`,`claude-haiku-4-20250414`]},te={class:`space-y-3`},Z={class:`mb-1.5 text-xs font-medium text-muted-foreground`},ne={class:`flex flex-wrap gap-1.5`},re=_({__name:`PatchChips`,props:{apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean},modelValue:{}},emits:[`update:modelValue`],setup(t,{emit:n}){let{t:a}=s();function o(e){return e.replace(/-/g,`_`)}let u=t,_=n,b=r(()=>V.filter(e=>e.key===`deepseek_anthropic`?u.isDeepSeek&&u.apiType===`anthropic`:e.key===`deepseek_openai`?u.isDeepSeek&&u.apiType===`openai`:e.key===`general`?u.apiType===`openai`&&u.isNonOpenaiEndpoint:!0));function S(e){let t=o(e);_(`update:modelValue`,u.modelValue.includes(t)?u.modelValue.filter(e=>e!==t):[...u.modelValue,t])}function C(e){return u.modelValue.includes(o(e))}return(t,n)=>(x(),g(`div`,te,[(x(!0),g(c,null,d(b.value,t=>(x(),g(`div`,{key:t.key},[e(`p`,Z,i(v(a)(t.labelKey)),1),e(`div`,ne,[(x(!0),g(c,null,d(t.items,t=>(x(),f(v(h),{key:t.id,type:`button`,variant:`outline`,size:`sm`,"aria-pressed":C(t.id),title:v(a)(t.descKey),class:l(v(y)(`inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs font-medium transition-all cursor-pointer select-none`,C(t.id)?`border-ring bg-primary/10 text-primary`:`border-border bg-transparent text-muted-foreground hover:border-muted-foreground hover:text-foreground`)),onClick:e=>S(t.id)},{default:m(()=>[e(`span`,{class:l(v(y)(`size-1.5 rounded-full transition-colors`,C(t.id)?`bg-primary`:`bg-border`))},null,2),p(` `+i(v(a)(t.nameKey)),1)]),_:2},1032,[`aria-pressed`,`title`,`class`,`onClick`]))),128))])]))),128))]))}}),ie={class:`flex items-center gap-2.5 px-3 min-h-8 py-1.5`},ae={key:0,width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,class:`text-primary-foreground`},oe=[`title`],se={key:2,class:`flex items-center gap-0.5 shrink-0`},ce=[`title`,`onClick`],le={class:`text-[11px]`},ue={class:`pl-9 pr-3 py-2 border-t border-border space-y-2`},de={class:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1`},fe={key:0},pe={class:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1`},me={class:`flex items-center gap-1.5`},he={class:`text-[11px] text-muted-foreground`},Q=1e3,ge=_({__name:`ModelCard`,props:{model:{},apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean},streamTimeoutMs:{},capabilities:{}},emits:[`update:model`,`remove`,`update:stream-timeout-ms`,`toggle-capability`],setup(a,{emit:h}){let _=n/Q,{t:w}=s(),O=a,P=h,B=S(!1),V=r(()=>H.find(e=>e.value===O.model.contextWindow)),U=r(()=>!!V.value);function W(e){let t=e;if(t===`__custom__`)return;let n=parseInt(t,10);isNaN(n)||P(`update:model`,{...O.model,contextWindow:n})}function G(e){let t=parseInt(e,10);!isNaN(t)&&t>0&&P(`update:model`,{...O.model,contextWindow:t})}function K(e){P(`update:model`,{...O.model,patches:e})}let q=r(()=>O.streamTimeoutMs!==void 0&&O.streamTimeoutMs!==null?Math.round(O.streamTimeoutMs/Q):_),J=r(()=>O.streamTimeoutMs===void 0),Y=[{key:`text`,icon:L,label:`text`},{key:`image`,icon:C,label:`image`},{key:`audio`,icon:z,label:`audio`},{key:`video`,icon:R,label:`video`}];function X(e){return e===`text`?!0:O.capabilities?.includes(e)??!1}return(n,r)=>{let s=o(`Button`);return x(),g(`div`,{class:l([`transition-colors group bg-card`,!a.model.enabled&&`opacity-40`])},[e(`div`,ie,[e(`div`,{class:l([`shrink-0 w-3.5 h-3.5 rounded-sm border-[1px] border-border flex items-center justify-center cursor-pointer transition-all`,a.model.enabled?`bg-primary border-primary`:`border-border hover:border-muted-foreground/50`]),onClick:r[0]||=e=>P(`update:model`,{...a.model,enabled:!a.model.enabled})},[a.model.enabled?(x(),g(`svg`,ae,[...r[6]||=[e(`path`,{d:`M18 6L9 17l-5-6`},null,-1)]])):b(``,!0)],2),e(`span`,{class:`truncate text-xs font-medium text-foreground min-w-[160px] max-w-[280px] font-mono`,title:a.model.name},i(a.model.name),9,oe),U.value?(x(),f(v(N),{key:0,"model-value":String(a.model.contextWindow),"onUpdate:modelValue":W},{default:m(()=>[u(v(j),{class:`h-6 w-16 text-[11px] font-mono px-1 gap-0 data-[size=default]:h-6`},{default:m(()=>[u(v(M),null,{default:m(()=>[p(i(V.value.label),1)]),_:1})]),_:1}),u(v(k),null,{default:m(()=>[(x(!0),g(c,null,d(v(H),e=>(x(),f(v(A),{key:e.value,value:String(e.value)},{default:m(()=>[p(i(e.label),1)]),_:2},1032,[`value`]))),128)),u(v(A),{value:`__custom__`},{default:m(()=>[p(i(v(w)(`quickSetup.model.contextCustom`)),1)]),_:1})]),_:1})]),_:1},8,[`model-value`])):(x(),f(v(I),{key:1,"model-value":String(a.model.contextWindow),type:`number`,min:`1`,class:`h-6 w-16 !text-[11px] text-center font-mono px-1.5 py-0 rounded [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,"onUpdate:modelValue":r[1]||=e=>G(e)},null,8,[`model-value`])),a.capabilities===void 0?b(``,!0):(x(),g(`div`,se,[(x(),g(c,null,d(Y,n=>e(`div`,{key:n.key,class:l([`w-5 h-5 rounded flex items-center justify-center border-[1px] transition-colors cursor-pointer`,v(y)(X(n.key)?`bg-primary/10 border-primary/30 text-primary`:`border-border text-muted-foreground/40 hover:text-muted-foreground`)]),title:n.label,onClick:e=>n.key!==`text`&&P(`toggle-capability`,n.key)},[(x(),f(t(n.icon),{class:`size-[11px]`}))],10,ce)),64))])),e(`div`,{class:l([`inline-flex items-center gap-1 h-[22px] px-2 border-[1px] border-border rounded cursor-pointer transition-colors shrink-0 select-none`,v(y)(a.model.patches.length>0?`bg-primary/10 border-primary/25 text-primary`:`border-border text-muted-foreground hover:border-foreground/20 hover:text-foreground`)]),onClick:r[2]||=e=>B.value=!B.value},[e(`span`,le,i(a.model.patches.length)+` `+i(v(w)(`quickSetup.patch.label`)),1),e(`span`,{class:l([`text-[8px] inline-block transition-transform`,B.value?`rotate-90`:``])},`▶`,2)],2),u(s,{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground hover:text-destructive`,onClick:r[3]||=e=>n.$emit(`remove`)},{default:m(()=>[u(v(T),{class:`size-3`})]),_:1})]),u(v(E),{open:B.value,"onUpdate:open":r[5]||=e=>B.value=e},{default:m(()=>[u(v(D),null,{default:m(()=>[e(`div`,ue,[e(`div`,null,[e(`div`,de,i(v(w)(`quickSetup.patch.sectionTitle`)),1),u(re,{"api-type":a.apiType,"is-deep-seek":a.isDeepSeek,"is-non-openai-endpoint":a.isNonOpenaiEndpoint,"model-value":a.model.patches,"onUpdate:modelValue":K},null,8,[`api-type`,`is-deep-seek`,`is-non-openai-endpoint`,`model-value`])]),a.streamTimeoutMs===void 0?b(``,!0):(x(),g(`div`,fe,[e(`div`,pe,i(v(w)(`quickSetup.patch.timeoutTitle`)),1),e(`div`,me,[u(v(I),{type:`number`,"model-value":q.value,"onUpdate:modelValue":r[4]||=e=>P(`update:stream-timeout-ms`,e?Number(e)*Q:void 0),class:`h-6 w-[72px] !text-[11px] font-mono text-right px-1.5 py-0 rounded [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,min:`1`},null,8,[`model-value`]),e(`span`,he,i(v(w)(`quickSetup.patch.timeoutSeconds`)),1),J.value?(x(),f(v(F),{key:0,variant:`outline`,class:`text-[9px] px-1 py-0 h-4 font-normal text-muted-foreground`},{default:m(()=>[p(i(v(w)(`providers.fields.timeoutPlaceholder`)),1)]),_:1})):b(``,!0)])]))])]),_:1})]),_:1},8,[`open`])],2)}}}),_e={class:`space-y-2`},ve={class:`flex items-center justify-between`},ye={key:0,class:`flex items-center gap-1.5`},$={key:0,class:`flex items-center gap-2 text-[11px] text-muted-foreground`},be={key:0,class:`opacity-70`},xe={class:`flex items-center gap-2`},Se={key:0,class:`flex-1 min-w-0`},Ce={key:1,class:`flex-1 text-[10px] text-muted-foreground`},we={class:`flex items-end gap-2`},Te={class:`min-w-0 space-y-0.5`,style:{flex:`6`}},Ee={class:`space-y-0.5`,style:{flex:`4`}},De={class:`text-xs text-muted-foreground`},Oe=_({__name:`EndpointEditor`,props:{modelValue:{},sharedKey:{},readonly:{type:Boolean}},emits:[`update:modelValue`],setup(t,{emit:n}){let{t:a}=s(),o=[`openai`,`openai-responses`,`anthropic`],_={openai:`bg-emerald-100 text-emerald-700 border-emerald-300 hover:bg-emerald-200 dark:bg-emerald-900/40 dark:text-emerald-400 dark:border-emerald-700 dark:hover:bg-emerald-800/50`,"openai-responses":`bg-blue-100 text-blue-700 border-blue-300 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:border-blue-700 dark:hover:bg-blue-800/50`,anthropic:`bg-amber-100 text-amber-700 border-amber-300 hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-400 dark:border-amber-700 dark:hover:bg-amber-800/50`},y={openai:`bg-emerald-200 text-emerald-800 border-emerald-400 dark:bg-emerald-800/60 dark:text-emerald-300 dark:border-emerald-500`,"openai-responses":`bg-blue-200 text-blue-800 border-blue-400 dark:bg-blue-800/60 dark:text-blue-300 dark:border-blue-500`,anthropic:`bg-amber-200 text-amber-800 border-amber-400 dark:bg-amber-800/60 dark:text-amber-300 dark:border-amber-500`},C=t,E=n,D=r(()=>C.modelValue.some(e=>e.api_key!==null&&e.api_key!==void 0&&e.api_key!==``)),k=S(!1),A=r(()=>k.value||D.value),j=r(()=>new Set(C.modelValue.map(e=>e.api_type)));function M(e){j.value.has(e)||E(`update:modelValue`,[...C.modelValue,{api_type:e,base_url:``,upstream_path:null,api_key:null}])}function N(e){let t=[...C.modelValue];t.splice(e,1),E(`update:modelValue`,t)}function L(e,t,n){let r=[...C.modelValue];r[e]={...r[e],[t]:n},E(`update:modelValue`,r)}return(n,r)=>(x(),g(`div`,_e,[e(`div`,ve,[u(v(O),{class:`text-xs text-muted-foreground`},{default:m(()=>[p(i(v(a)(`providers.endpoints.title`)),1)]),_:1}),t.readonly?b(``,!0):(x(),g(`div`,ye,[(x(),g(c,null,d(o,e=>u(v(h),{key:e,type:`button`,variant:`outline`,size:`sm`,class:l([`h-6 text-[10px] gap-0.5 px-2.5 border font-medium transition-colors`,j.value.has(e)?y[e]:_[e]]),disabled:j.value.has(e),onClick:t=>M(e)},{default:m(()=>[j.value.has(e)?(x(),f(v(P),{key:0,class:`w-3 h-3`})):(x(),f(v(w),{key:1,class:`w-3 h-3`})),p(` `+i(v(a)(`providers.endpoints.apiTypes.${e}`)),1)]),_:2},1032,[`class`,`disabled`,`onClick`])),64))]))]),t.readonly?b(``,!0):(x(),g(`div`,$,[u(v(h),{type:`button`,variant:`link`,size:`sm`,class:`h-auto p-0 text-[11px] text-muted-foreground underline decoration-dotted underline-offset-2 hover:text-foreground`,onClick:r[0]||=e=>k.value=!k.value},{default:m(()=>[p(i(A.value?v(a)(`providers.endpoints.hidePerEndpointKeys`):v(a)(`providers.endpoints.showPerEndpointKeys`)),1)]),_:1}),t.sharedKey&&!A.value?(x(),g(`span`,be,i(v(a)(`providers.endpoints.allUseSharedKey`)),1)):b(``,!0)])),(x(!0),g(c,null,d(t.modelValue,(n,o)=>(x(),g(`div`,{key:o,class:`rounded-md border bg-muted/30 p-2.5 space-y-2`},[e(`div`,xe,[u(v(F),{variant:`secondary`,class:`text-[11px] px-1.5 py-0 shrink-0`},{default:m(()=>[p(i(v(a)(`providers.endpoints.apiTypes.${n.api_type}`)),1)]),_:2},1024),A.value?(x(),g(`div`,Se,[u(v(I),{"model-value":n.api_key??``,type:`password`,autocomplete:`new-password`,disabled:t.readonly,placeholder:t.sharedKey?v(a)(`providers.endpoints.useSharedKey`):v(a)(`providers.endpoints.apiKeyPlaceholder`),class:`h-6 text-xs font-mono`,"onUpdate:modelValue":e=>L(o,`api_key`,String(e)||null)},null,8,[`model-value`,`disabled`,`placeholder`,`onUpdate:modelValue`])])):n.api_key?(x(),g(`div`,Ce,i(v(a)(`providers.endpoints.customKeySet`)),1)):b(``,!0),t.readonly?b(``,!0):(x(),f(v(h),{key:2,type:`button`,variant:`ghost`,size:`sm`,class:`h-6 w-6 p-0 shrink-0 text-muted-foreground hover:text-destructive`,disabled:t.modelValue.length<=1,onClick:e=>N(o)},{default:m(()=>[u(v(T),{class:`w-3.5 h-3.5`})]),_:1},8,[`disabled`,`onClick`]))]),e(`div`,we,[e(`div`,Te,[u(v(O),{class:`text-[10px] text-muted-foreground`},{default:m(()=>[...r[1]||=[p(`Base URL`,-1)]]),_:1}),u(v(I),{"model-value":n.base_url,type:`url`,required:``,disabled:t.readonly,placeholder:`https://api.example.com/v1`,class:`h-6 text-xs font-mono`,"onUpdate:modelValue":e=>L(o,`base_url`,String(e))},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`])]),e(`div`,Ee,[u(v(O),{class:`text-[10px] text-muted-foreground`},{default:m(()=>[p(i(v(a)(`providers.fields.upstreamPath`)),1)]),_:1}),u(v(I),{"model-value":n.upstream_path??``,disabled:t.readonly,placeholder:v(a)(`providers.fields.upstreamPathPlaceholder`),class:`h-6 text-xs font-mono`,"onUpdate:modelValue":e=>L(o,`upstream_path`,String(e)||null)},null,8,[`model-value`,`disabled`,`placeholder`,`onUpdate:modelValue`])])])]))),128)),e(`p`,De,i(v(a)(`providers.endpoints.hint`)),1)]))}});function ke(e,t,n){let r=[];return e.toLowerCase().includes(`deepseek`)&&(r.push(`thinking_consistency`),t===`anthropic`?r.push(`orphan_tool_results`):r.push(`orphan_tool_results_oa`)),t===`openai`&&n&&r.push(`developer_role`),r}export{ee as a,R as c,B as i,L as l,Oe as n,X as o,ge as r,z as s,ke as t};
1
+ import{$ as e,Ct as t,P as n,Q as r,Qt as i,R as a,St as o,U as s,X as c,Yt as l,at as u,bt as d,et as f,it as p,jt as m,n as h,nt as g,ot as _,qt as v,r as y,tt as b,vt as x,zt as S}from"./button-BcmABzob.js";import{t as C}from"./image-BQjpozCO.js";import{t as w}from"./plus-COwF_5ra.js";import{t as T}from"./trash-2-4HdxTT6S.js";import{n as E,t as D}from"./CollapsibleContent-CsQhKwq1.js";import{t as O}from"./Label-D9CEaBof.js";import{_ as k,g as A,h as j,m as M,v as N,yt as P}from"./index-CpvOTf7s.js";import{t as F}from"./badge-_5ZpB7R1.js";import{t as I}from"./Input-4bkkJSKj.js";var L=a(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),R=a(`video`,[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]),z=a(`volume-2`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]),B=[{id:`claude-code`,name:`Claude Code`,icon:`C`,iconClass:`cc`,iconSvg:`claude`,brandBg:`bg-[#D97757]`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.claudeCodeDesc`,popular:!0},{id:`codex`,name:`Codex CLI`,icon:`CX`,iconClass:`cx`,iconSvg:`codex`,brandBg:`bg-[#74AA9C]`,format:`openai-responses`,defaultProvider:`DeepSeek`,defaultPlan:`OpenAI`,descriptionKey:`quickSetup.client.codexDesc`,popular:!0},{id:`pi`,name:`Pi`,icon:`P`,iconClass:`pi`,iconSvg:`pi`,brandBg:`bg-emerald-600`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.piDesc`},{id:`openai-sdk`,name:`OpenAI SDK`,icon:`OA`,iconClass:`oa`,iconSvg:`openai`,brandBg:`bg-[#10a37f]`,format:`openai`,defaultProvider:`DeepSeek`,defaultPlan:`OpenAI`,descriptionKey:`quickSetup.client.openaiSdkDesc`},{id:`anthropic-sdk`,name:`Anthropic SDK`,icon:`AN`,iconClass:`an`,iconSvg:`anthropic`,brandBg:`bg-[#D4976A]`,format:`anthropic`,defaultProvider:`DeepSeek`,defaultPlan:`Anthropic`,descriptionKey:`quickSetup.client.anthropicSdkDesc`}],V=[{key:`deepseek_anthropic`,labelKey:`quickSetup.patch.deepseekAnthropic`,items:[{id:`thinking_consistency`,nameKey:`quickSetup.patch.thinkingConsistency`,descKey:`quickSetup.patch.thinkingConsistencyDesc`},{id:`orphan_tool_results`,nameKey:`quickSetup.patch.orphanToolResult`,descKey:`quickSetup.patch.orphanToolResultDesc`}]},{key:`deepseek_openai`,labelKey:`quickSetup.patch.deepseekOpenai`,items:[{id:`thinking_consistency`,nameKey:`quickSetup.patch.thinkingConsistency`,descKey:`quickSetup.patch.thinkingConsistencyDesc`},{id:`orphan_tool_results_oa`,nameKey:`quickSetup.patch.orphanToolResultOa`,descKey:`quickSetup.patch.orphanToolResultOaDesc`}]},{key:`general`,labelKey:`quickSetup.patch.general`,items:[{id:`developer_role`,nameKey:`quickSetup.patch.developerRole`,descKey:`quickSetup.patch.developerRoleDesc`}]}],H=[{label:`8K`,value:8e3},{label:`16K`,value:16e3},{label:`32K`,value:32e3},{label:`64K`,value:64e3},{label:`128K`,value:128e3},{label:`160K`,value:16e4},{label:`200K`,value:2e5},{label:`256K`,value:256e3},{label:`1M`,value:1e6}],U=1e6,W=256e3,G=2e5,K=128e3,q=32e3,J=16e3,Y=8e3;function X(e){let t=e.toLowerCase();return t.includes(`v4`)||t.includes(`v3.2`)||t.includes(`r1`)||t.includes(`reasoner`)||t.includes(`qwen3.6`)||t.includes(`mimo-v2.5`)?U:t.includes(`kimi`)||t.includes(`moonshotai`)||t.includes(`hunyuan-2.0`)||t.includes(`hunyuan-a13b`)||t.includes(`hunyuan-t1`)||t.includes(`step-3.5`)||t.includes(`step-3`)||t.includes(`qwen3.5-plus`)||t.includes(`qwen3-max`)||t.includes(`doubao`)||t.includes(`ark-code`)||t.includes(`tc-code`)?W:t.includes(`glm-5`)||t.includes(`glm-4.7`)||t.includes(`minimax`)?G:t.includes(`128k`)?K:t.includes(`32k`)?q:t.includes(`16k`)?J:t.includes(`8k`)?Y:K}var ee={"claude-code":[`sonnet`,`opus`,`haiku`],codex:[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex`,`gpt-5.2`],"openai-sdk":[`gpt-5.1`,`gpt-4.1`,`o3`,`o4-mini`],"anthropic-sdk":[`claude-sonnet-4-20250514`,`claude-opus-4-20250116`,`claude-haiku-4-20250414`]},te={class:`space-y-3`},Z={class:`mb-1.5 text-xs font-medium text-muted-foreground`},ne={class:`flex flex-wrap gap-1.5`},re=_({__name:`PatchChips`,props:{apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean},modelValue:{}},emits:[`update:modelValue`],setup(t,{emit:n}){let{t:a}=s();function o(e){return e.replace(/-/g,`_`)}let u=t,_=n,b=r(()=>V.filter(e=>e.key===`deepseek_anthropic`?u.isDeepSeek&&u.apiType===`anthropic`:e.key===`deepseek_openai`?u.isDeepSeek&&u.apiType===`openai`:e.key===`general`?u.apiType===`openai`&&u.isNonOpenaiEndpoint:!0));function S(e){let t=o(e);_(`update:modelValue`,u.modelValue.includes(t)?u.modelValue.filter(e=>e!==t):[...u.modelValue,t])}function C(e){return u.modelValue.includes(o(e))}return(t,n)=>(x(),g(`div`,te,[(x(!0),g(c,null,d(b.value,t=>(x(),g(`div`,{key:t.key},[e(`p`,Z,i(v(a)(t.labelKey)),1),e(`div`,ne,[(x(!0),g(c,null,d(t.items,t=>(x(),f(v(h),{key:t.id,type:`button`,variant:`outline`,size:`sm`,"aria-pressed":C(t.id),title:v(a)(t.descKey),class:l(v(y)(`inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs font-medium transition-all cursor-pointer select-none`,C(t.id)?`border-ring bg-primary/10 text-primary`:`border-border bg-transparent text-muted-foreground hover:border-muted-foreground hover:text-foreground`)),onClick:e=>S(t.id)},{default:m(()=>[e(`span`,{class:l(v(y)(`size-1.5 rounded-full transition-colors`,C(t.id)?`bg-primary`:`bg-border`))},null,2),p(` `+i(v(a)(t.nameKey)),1)]),_:2},1032,[`aria-pressed`,`title`,`class`,`onClick`]))),128))])]))),128))]))}}),ie={class:`flex items-center gap-2.5 px-3 min-h-8 py-1.5`},ae={key:0,width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,class:`text-primary-foreground`},oe=[`title`],se={key:2,class:`flex items-center gap-0.5 shrink-0`},ce=[`title`,`onClick`],le={class:`text-[11px]`},ue={class:`pl-9 pr-3 py-2 border-t border-border space-y-2`},de={class:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1`},fe={key:0},pe={class:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1`},me={class:`flex items-center gap-1.5`},he={class:`text-[11px] text-muted-foreground`},Q=1e3,ge=_({__name:`ModelCard`,props:{model:{},apiType:{},isDeepSeek:{type:Boolean},isNonOpenaiEndpoint:{type:Boolean},streamTimeoutMs:{},capabilities:{}},emits:[`update:model`,`remove`,`update:stream-timeout-ms`,`toggle-capability`],setup(a,{emit:h}){let _=n/Q,{t:w}=s(),O=a,P=h,B=S(!1),V=r(()=>H.find(e=>e.value===O.model.contextWindow)),U=r(()=>!!V.value);function W(e){let t=e;if(t===`__custom__`)return;let n=parseInt(t,10);isNaN(n)||P(`update:model`,{...O.model,contextWindow:n})}function G(e){let t=parseInt(e,10);!isNaN(t)&&t>0&&P(`update:model`,{...O.model,contextWindow:t})}function K(e){P(`update:model`,{...O.model,patches:e})}let q=r(()=>O.streamTimeoutMs!==void 0&&O.streamTimeoutMs!==null?Math.round(O.streamTimeoutMs/Q):_),J=r(()=>O.streamTimeoutMs===void 0),Y=[{key:`text`,icon:L,label:`text`},{key:`image`,icon:C,label:`image`},{key:`audio`,icon:z,label:`audio`},{key:`video`,icon:R,label:`video`}];function X(e){return e===`text`?!0:O.capabilities?.includes(e)??!1}return(n,r)=>{let s=o(`Button`);return x(),g(`div`,{class:l([`transition-colors group bg-card`,!a.model.enabled&&`opacity-40`])},[e(`div`,ie,[e(`div`,{class:l([`shrink-0 w-3.5 h-3.5 rounded-sm border-[1px] border-border flex items-center justify-center cursor-pointer transition-all`,a.model.enabled?`bg-primary border-primary`:`border-border hover:border-muted-foreground/50`]),onClick:r[0]||=e=>P(`update:model`,{...a.model,enabled:!a.model.enabled})},[a.model.enabled?(x(),g(`svg`,ae,[...r[6]||=[e(`path`,{d:`M18 6L9 17l-5-6`},null,-1)]])):b(``,!0)],2),e(`span`,{class:`truncate text-xs font-medium text-foreground min-w-[160px] max-w-[280px] font-mono`,title:a.model.name},i(a.model.name),9,oe),U.value?(x(),f(v(N),{key:0,"model-value":String(a.model.contextWindow),"onUpdate:modelValue":W},{default:m(()=>[u(v(j),{class:`h-6 w-16 text-[11px] font-mono px-1 gap-0 data-[size=default]:h-6`},{default:m(()=>[u(v(M),null,{default:m(()=>[p(i(V.value.label),1)]),_:1})]),_:1}),u(v(k),null,{default:m(()=>[(x(!0),g(c,null,d(v(H),e=>(x(),f(v(A),{key:e.value,value:String(e.value)},{default:m(()=>[p(i(e.label),1)]),_:2},1032,[`value`]))),128)),u(v(A),{value:`__custom__`},{default:m(()=>[p(i(v(w)(`quickSetup.model.contextCustom`)),1)]),_:1})]),_:1})]),_:1},8,[`model-value`])):(x(),f(v(I),{key:1,"model-value":String(a.model.contextWindow),type:`number`,min:`1`,class:`h-6 w-16 !text-[11px] text-center font-mono px-1.5 py-0 rounded [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,"onUpdate:modelValue":r[1]||=e=>G(e)},null,8,[`model-value`])),a.capabilities===void 0?b(``,!0):(x(),g(`div`,se,[(x(),g(c,null,d(Y,n=>e(`div`,{key:n.key,class:l([`w-5 h-5 rounded flex items-center justify-center border-[1px] transition-colors cursor-pointer`,v(y)(X(n.key)?`bg-primary/10 border-primary/30 text-primary`:`border-border text-muted-foreground/40 hover:text-muted-foreground`)]),title:n.label,onClick:e=>n.key!==`text`&&P(`toggle-capability`,n.key)},[(x(),f(t(n.icon),{class:`size-[11px]`}))],10,ce)),64))])),e(`div`,{class:l([`inline-flex items-center gap-1 h-[22px] px-2 border-[1px] border-border rounded cursor-pointer transition-colors shrink-0 select-none`,v(y)(a.model.patches.length>0?`bg-primary/10 border-primary/25 text-primary`:`border-border text-muted-foreground hover:border-foreground/20 hover:text-foreground`)]),onClick:r[2]||=e=>B.value=!B.value},[e(`span`,le,i(a.model.patches.length)+` `+i(v(w)(`quickSetup.patch.label`)),1),e(`span`,{class:l([`text-[8px] inline-block transition-transform`,B.value?`rotate-90`:``])},`▶`,2)],2),u(s,{type:`button`,variant:`ghost`,size:`icon-xs`,class:`shrink-0 text-muted-foreground hover:text-destructive`,onClick:r[3]||=e=>n.$emit(`remove`)},{default:m(()=>[u(v(T),{class:`size-3`})]),_:1})]),u(v(E),{open:B.value,"onUpdate:open":r[5]||=e=>B.value=e},{default:m(()=>[u(v(D),null,{default:m(()=>[e(`div`,ue,[e(`div`,null,[e(`div`,de,i(v(w)(`quickSetup.patch.sectionTitle`)),1),u(re,{"api-type":a.apiType,"is-deep-seek":a.isDeepSeek,"is-non-openai-endpoint":a.isNonOpenaiEndpoint,"model-value":a.model.patches,"onUpdate:modelValue":K},null,8,[`api-type`,`is-deep-seek`,`is-non-openai-endpoint`,`model-value`])]),a.streamTimeoutMs===void 0?b(``,!0):(x(),g(`div`,fe,[e(`div`,pe,i(v(w)(`quickSetup.patch.timeoutTitle`)),1),e(`div`,me,[u(v(I),{type:`number`,"model-value":q.value,"onUpdate:modelValue":r[4]||=e=>P(`update:stream-timeout-ms`,e?Number(e)*Q:void 0),class:`h-6 w-[72px] !text-[11px] font-mono text-right px-1.5 py-0 rounded [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,min:`1`},null,8,[`model-value`]),e(`span`,he,i(v(w)(`quickSetup.patch.timeoutSeconds`)),1),J.value?(x(),f(v(F),{key:0,variant:`outline`,class:`text-[9px] px-1 py-0 h-4 font-normal text-muted-foreground`},{default:m(()=>[p(i(v(w)(`providers.fields.timeoutPlaceholder`)),1)]),_:1})):b(``,!0)])]))])]),_:1})]),_:1},8,[`open`])],2)}}}),_e={class:`space-y-2`},ve={class:`flex items-center justify-between`},ye={key:0,class:`flex items-center gap-1.5`},$={key:0,class:`flex items-center gap-2 text-[11px] text-muted-foreground`},be={key:0,class:`opacity-70`},xe={class:`flex items-center gap-2`},Se={key:0,class:`flex-1 min-w-0`},Ce={key:1,class:`flex-1 text-[10px] text-muted-foreground`},we={class:`flex items-end gap-2`},Te={class:`min-w-0 space-y-0.5`,style:{flex:`6`}},Ee={class:`space-y-0.5`,style:{flex:`4`}},De={class:`text-xs text-muted-foreground`},Oe=_({__name:`EndpointEditor`,props:{modelValue:{},sharedKey:{},readonly:{type:Boolean}},emits:[`update:modelValue`],setup(t,{emit:n}){let{t:a}=s(),o=[`openai`,`openai-responses`,`anthropic`],_={openai:`bg-emerald-100 text-emerald-700 border-emerald-300 hover:bg-emerald-200 dark:bg-emerald-900/40 dark:text-emerald-400 dark:border-emerald-700 dark:hover:bg-emerald-800/50`,"openai-responses":`bg-blue-100 text-blue-700 border-blue-300 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:border-blue-700 dark:hover:bg-blue-800/50`,anthropic:`bg-amber-100 text-amber-700 border-amber-300 hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-400 dark:border-amber-700 dark:hover:bg-amber-800/50`},y={openai:`bg-emerald-200 text-emerald-800 border-emerald-400 dark:bg-emerald-800/60 dark:text-emerald-300 dark:border-emerald-500`,"openai-responses":`bg-blue-200 text-blue-800 border-blue-400 dark:bg-blue-800/60 dark:text-blue-300 dark:border-blue-500`,anthropic:`bg-amber-200 text-amber-800 border-amber-400 dark:bg-amber-800/60 dark:text-amber-300 dark:border-amber-500`},C=t,E=n,D=r(()=>C.modelValue.some(e=>e.api_key!==null&&e.api_key!==void 0&&e.api_key!==``)),k=S(!1),A=r(()=>k.value||D.value),j=r(()=>new Set(C.modelValue.map(e=>e.api_type)));function M(e){j.value.has(e)||E(`update:modelValue`,[...C.modelValue,{api_type:e,base_url:``,upstream_path:null,api_key:null}])}function N(e){let t=[...C.modelValue];t.splice(e,1),E(`update:modelValue`,t)}function L(e,t,n){let r=[...C.modelValue];r[e]={...r[e],[t]:n},E(`update:modelValue`,r)}return(n,r)=>(x(),g(`div`,_e,[e(`div`,ve,[u(v(O),{class:`text-xs text-muted-foreground`},{default:m(()=>[p(i(v(a)(`providers.endpoints.title`)),1)]),_:1}),t.readonly?b(``,!0):(x(),g(`div`,ye,[(x(),g(c,null,d(o,e=>u(v(h),{key:e,type:`button`,variant:`outline`,size:`sm`,class:l([`h-6 text-[10px] gap-0.5 px-2.5 border font-medium transition-colors`,j.value.has(e)?y[e]:_[e]]),disabled:j.value.has(e),onClick:t=>M(e)},{default:m(()=>[j.value.has(e)?(x(),f(v(P),{key:0,class:`w-3 h-3`})):(x(),f(v(w),{key:1,class:`w-3 h-3`})),p(` `+i(v(a)(`providers.endpoints.apiTypes.${e}`)),1)]),_:2},1032,[`class`,`disabled`,`onClick`])),64))]))]),t.readonly?b(``,!0):(x(),g(`div`,$,[u(v(h),{type:`button`,variant:`link`,size:`sm`,class:`h-auto p-0 text-[11px] text-muted-foreground underline decoration-dotted underline-offset-2 hover:text-foreground`,onClick:r[0]||=e=>k.value=!k.value},{default:m(()=>[p(i(A.value?v(a)(`providers.endpoints.hidePerEndpointKeys`):v(a)(`providers.endpoints.showPerEndpointKeys`)),1)]),_:1}),t.sharedKey&&!A.value?(x(),g(`span`,be,i(v(a)(`providers.endpoints.allUseSharedKey`)),1)):b(``,!0)])),(x(!0),g(c,null,d(t.modelValue,(n,o)=>(x(),g(`div`,{key:o,class:`rounded-md border bg-muted/30 p-2.5 space-y-2`},[e(`div`,xe,[u(v(F),{variant:`secondary`,class:`text-[11px] px-1.5 py-0 shrink-0`},{default:m(()=>[p(i(v(a)(`providers.endpoints.apiTypes.${n.api_type}`)),1)]),_:2},1024),A.value?(x(),g(`div`,Se,[u(v(I),{"model-value":n.api_key??``,type:`password`,autocomplete:`new-password`,disabled:t.readonly,placeholder:t.sharedKey?v(a)(`providers.endpoints.useSharedKey`):v(a)(`providers.endpoints.apiKeyPlaceholder`),class:`h-6 text-xs font-mono`,"onUpdate:modelValue":e=>L(o,`api_key`,String(e)||null)},null,8,[`model-value`,`disabled`,`placeholder`,`onUpdate:modelValue`])])):n.api_key?(x(),g(`div`,Ce,i(v(a)(`providers.endpoints.customKeySet`)),1)):b(``,!0),t.readonly?b(``,!0):(x(),f(v(h),{key:2,type:`button`,variant:`ghost`,size:`sm`,class:`h-6 w-6 p-0 shrink-0 text-muted-foreground hover:text-destructive`,disabled:t.modelValue.length<=1,onClick:e=>N(o)},{default:m(()=>[u(v(T),{class:`w-3.5 h-3.5`})]),_:1},8,[`disabled`,`onClick`]))]),e(`div`,we,[e(`div`,Te,[u(v(O),{class:`text-[10px] text-muted-foreground`},{default:m(()=>[...r[1]||=[p(`Base URL`,-1)]]),_:1}),u(v(I),{"model-value":n.base_url,type:`url`,required:``,disabled:t.readonly,placeholder:`https://api.example.com/v1`,class:`h-6 text-xs font-mono`,"onUpdate:modelValue":e=>L(o,`base_url`,String(e))},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`])]),e(`div`,Ee,[u(v(O),{class:`text-[10px] text-muted-foreground`},{default:m(()=>[p(i(v(a)(`providers.fields.upstreamPath`)),1)]),_:1}),u(v(I),{"model-value":n.upstream_path??``,disabled:t.readonly,placeholder:v(a)(`providers.fields.upstreamPathPlaceholder`),class:`h-6 text-xs font-mono`,"onUpdate:modelValue":e=>L(o,`upstream_path`,String(e)||null)},null,8,[`model-value`,`disabled`,`placeholder`,`onUpdate:modelValue`])])])]))),128)),e(`p`,De,i(v(a)(`providers.endpoints.hint`)),1)]))}});function ke(e,t,n){let r=[];return e.toLowerCase().includes(`deepseek`)&&(r.push(`thinking_consistency`),t===`anthropic`?r.push(`orphan_tool_results`):r.push(`orphan_tool_results_oa`)),t===`openai`&&n&&r.push(`developer_role`),r}export{ee as a,R as c,B as i,L as l,Oe as n,X as o,ge as r,z as s,ke as t};
@@ -1 +1 @@
1
- import{R as e}from"./button-DpPvjx0f.js";var t=e(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]);export{t};
1
+ import{R as e}from"./button-BcmABzob.js";var t=e(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{R as e}from"./button-BcmABzob.js";var t=e(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{R as e}from"./button-BcmABzob.js";var t=e(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]);export{t};
@@ -1 +1 @@
1
- import{R as e}from"./button-DpPvjx0f.js";var t=e(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]);export{t};
1
+ import{R as e}from"./button-BcmABzob.js";var t=e(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]);export{t};
@@ -1 +1 @@
1
- import{$ as e,Q as t,Qt as n,U as r,Yt as i,at as a,it as o,jt as s,nt as c,ot as l,qt as u,vt as d}from"./button-DpPvjx0f.js";import{t as f}from"./Label-B5FJLcPy.js";import{t as p}from"./Input-C5OLhaEA.js";var m={mode:`auto`,max_concurrency:10,queue_timeout_ms:12e4,max_queue_size:100},h={mode:`manual`,max_concurrency:3,queue_timeout_ms:12e4,max_queue_size:10},g={injectHeaders:``,dropFields:``,requestDefaults:``},_={proxyType:``,proxyUrl:``,proxyUsername:``,proxyPassword:``},v=l({__name:`TransformRulesForm`,props:{modelValue:{},compact:{type:Boolean}},emits:[`update:modelValue`],setup(l,{emit:m}){let h=l,_=m,{t:v}=r();function y(e){_(`update:modelValue`,{...h.modelValue,...e})}let b=t(()=>h.modelValue.injectHeaders??g.injectHeaders),x=t(()=>h.modelValue.dropFields??g.dropFields),S=t(()=>h.modelValue.requestDefaults??g.requestDefaults);return(t,r)=>(d(),c(`div`,{class:i(l.compact?`space-y-2`:`space-y-3`)},[e(`div`,null,[a(u(f),{class:`text-[11px] text-muted-foreground`},{default:s(()=>[o(n(u(v)(`providers.transform.injectHeaders`)),1)]),_:1}),a(u(p),{"model-value":b.value,placeholder:`{"x-custom": "value"}`,class:`mt-0.5 md:text-xs font-mono`,"onUpdate:modelValue":r[0]||=e=>y({injectHeaders:e})},null,8,[`model-value`])]),e(`div`,null,[a(u(f),{class:`text-[11px] text-muted-foreground`},{default:s(()=>[o(n(u(v)(`providers.transform.dropFields`)),1)]),_:1}),a(u(p),{"model-value":x.value,placeholder:`logprobs, frequency_penalty`,class:`mt-0.5 md:text-xs font-mono`,"onUpdate:modelValue":r[1]||=e=>y({dropFields:e})},null,8,[`model-value`])]),e(`div`,null,[a(u(f),{class:`text-[11px] text-muted-foreground`},{default:s(()=>[o(n(u(v)(`providers.transform.requestDefaults`)),1)]),_:1}),a(u(p),{"model-value":S.value,placeholder:`{"max_tokens": 4096}`,class:`mt-0.5 md:text-xs font-mono`,"onUpdate:modelValue":r[2]||=e=>y({requestDefaults:e})},null,8,[`model-value`])])],2))}});function y(e){let{injectHeaders:t,dropFields:n,requestDefaults:r}=e;if(!t.trim()&&!n.trim()&&!r.trim())return{rule:null,errorKey:null};let i=n?n.split(`,`).map(e=>e.trim()).filter(Boolean):null,a=null;if(r.trim())try{a=JSON.parse(r)}catch{return{rule:null,errorKey:`requestDefaultsJsonError`}}let o=null;if(t.trim())try{o=JSON.parse(t)}catch{return{rule:null,errorKey:`injectHeadersJsonError`}}return{rule:JSON.stringify({drop_fields:i,request_defaults:a,inject_headers:o}),errorKey:null}}export{_ as a,h as i,v as n,g as o,m as r,y as t};
1
+ import{$ as e,Q as t,Qt as n,U as r,Yt as i,at as a,it as o,jt as s,nt as c,ot as l,qt as u,vt as d}from"./button-BcmABzob.js";import{t as f}from"./Label-D9CEaBof.js";import{t as p}from"./Input-4bkkJSKj.js";var m={mode:`auto`,max_concurrency:10,queue_timeout_ms:12e4,max_queue_size:100},h={mode:`manual`,max_concurrency:3,queue_timeout_ms:12e4,max_queue_size:10},g={injectHeaders:``,dropFields:``,requestDefaults:``},_={proxyType:``,proxyUrl:``,proxyUsername:``,proxyPassword:``},v=l({__name:`TransformRulesForm`,props:{modelValue:{},compact:{type:Boolean}},emits:[`update:modelValue`],setup(l,{emit:m}){let h=l,_=m,{t:v}=r();function y(e){_(`update:modelValue`,{...h.modelValue,...e})}let b=t(()=>h.modelValue.injectHeaders??g.injectHeaders),x=t(()=>h.modelValue.dropFields??g.dropFields),S=t(()=>h.modelValue.requestDefaults??g.requestDefaults);return(t,r)=>(d(),c(`div`,{class:i(l.compact?`space-y-2`:`space-y-3`)},[e(`div`,null,[a(u(f),{class:`text-[11px] text-muted-foreground`},{default:s(()=>[o(n(u(v)(`providers.transform.injectHeaders`)),1)]),_:1}),a(u(p),{"model-value":b.value,placeholder:`{"x-custom": "value"}`,class:`mt-0.5 md:text-xs font-mono`,"onUpdate:modelValue":r[0]||=e=>y({injectHeaders:e})},null,8,[`model-value`])]),e(`div`,null,[a(u(f),{class:`text-[11px] text-muted-foreground`},{default:s(()=>[o(n(u(v)(`providers.transform.dropFields`)),1)]),_:1}),a(u(p),{"model-value":x.value,placeholder:`logprobs, frequency_penalty`,class:`mt-0.5 md:text-xs font-mono`,"onUpdate:modelValue":r[1]||=e=>y({dropFields:e})},null,8,[`model-value`])]),e(`div`,null,[a(u(f),{class:`text-[11px] text-muted-foreground`},{default:s(()=>[o(n(u(v)(`providers.transform.requestDefaults`)),1)]),_:1}),a(u(p),{"model-value":S.value,placeholder:`{"max_tokens": 4096}`,class:`mt-0.5 md:text-xs font-mono`,"onUpdate:modelValue":r[2]||=e=>y({requestDefaults:e})},null,8,[`model-value`])])],2))}});function y(e){let{injectHeaders:t,dropFields:n,requestDefaults:r}=e;if(!t.trim()&&!n.trim()&&!r.trim())return{rule:null,errorKey:null};let i=n?n.split(`,`).map(e=>e.trim()).filter(Boolean):null,a=null;if(r.trim())try{a=JSON.parse(r)}catch{return{rule:null,errorKey:`requestDefaultsJsonError`}}let o=null;if(t.trim())try{o=JSON.parse(t)}catch{return{rule:null,errorKey:`injectHeadersJsonError`}}return{rule:JSON.stringify({drop_fields:i,request_defaults:a,inject_headers:o}),errorKey:null}}export{_ as a,h as i,v as n,g as o,m as r,y as t};
@@ -1 +1 @@
1
- import{R as e}from"./button-DpPvjx0f.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
1
+ import{R as e}from"./button-BcmABzob.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
@@ -1 +1 @@
1
- import{zt as e}from"./button-DpPvjx0f.js";var t=2e3;function n(){let n=e(!1);async function i(e){try{return navigator.clipboard?.writeText?await navigator.clipboard.writeText(e):r(e),n.value=!0,setTimeout(()=>{n.value=!1},t),!0}catch{try{return r(e),n.value=!0,setTimeout(()=>{n.value=!1},t),!0}catch{return!1}}}return{copied:n,copy:i}}function r(e){let t=document.createElement(`textarea`);if(t.value=e,t.style.cssText=`position:fixed;left:-9999px;opacity:0`,document.body.appendChild(t),t.select(),!document.execCommand(`copy`))throw Error(`execCommand copy failed`);document.body.removeChild(t)}export{n as t};
1
+ import{zt as e}from"./button-BcmABzob.js";var t=2e3;function n(){let n=e(!1);async function i(e){try{return navigator.clipboard?.writeText?await navigator.clipboard.writeText(e):r(e),n.value=!0,setTimeout(()=>{n.value=!1},t),!0}catch{try{return r(e),n.value=!0,setTimeout(()=>{n.value=!1},t),!0}catch{return!1}}}return{copied:n,copy:i}}function r(e){let t=document.createElement(`textarea`);if(t.value=e,t.style.cssText=`position:fixed;left:-9999px;opacity:0`,document.body.appendChild(t),t.select(),!document.execCommand(`copy`))throw Error(`execCommand copy failed`);document.body.removeChild(t)}export{n as t};
@@ -1 +1 @@
1
- import{A as e,Q as t,U as n,j as r,zt as i}from"./button-DpPvjx0f.js";import{a,at as o,tt as s}from"./index-Di7f6Crg.js";var c=3,l=7;function u(){let{t:u}=n(),d=i(c),f=i(!1),p=i(l),m=i(!1),h=t(()=>p.value>d.value?u(`settings.retention.metricsExceedsLog`):``);async function g(){f.value=!0;try{d.value=(await e.setLogRetention(d.value)).days,a.success(u(`logs.retention.saved`))}catch(e){console.error(`logRetention.save:`,e),a.error(r(e,u(`logs.retention.updateFailed`)))}finally{f.value=!1}}async function _(){try{let{days:t}=await e.getLogRetention();d.value=t}catch(e){console.error(`logRetention.load:`,e),a.error(r(e,u(`logs.retention.loadFailed`)))}}async function v(){try{let{days:e}=await s();p.value=e}catch(e){console.error(`logRetention.loadMetricsDetail:`,e),a.error(r(e,u(`logs.retention.loadMetricsDetailFailed`)))}}async function y(){if(h.value){a.error(h.value);return}f.value=!0,m.value=!0;try{let[t,n]=await Promise.allSettled([e.setLogRetention(d.value),o(p.value)]);t.status===`fulfilled`&&(d.value=t.value.days),n.status===`fulfilled`&&(p.value=n.value.days);let i=[t,n].find(e=>e.status===`rejected`);if(i){a.error(r(i.reason,u(`logs.retention.updateFailed`)));return}a.success(u(`logs.retention.bothSaved`))}finally{f.value=!1,m.value=!1}}return{retentionDays:d,retentionSaving:f,saveRetention:g,loadRetention:_,metricsDetailDays:p,metricsDetailSaving:m,loadMetricsDetail:v,saveBoth:y,validationError:h}}export{u as t};
1
+ import{A as e,Q as t,U as n,j as r,zt as i}from"./button-BcmABzob.js";import{a,at as o,tt as s}from"./index-CpvOTf7s.js";var c=3,l=7;function u(){let{t:u}=n(),d=i(c),f=i(!1),p=i(l),m=i(!1),h=t(()=>p.value>d.value?u(`settings.retention.metricsExceedsLog`):``);async function g(){f.value=!0;try{d.value=(await e.setLogRetention(d.value)).days,a.success(u(`logs.retention.saved`))}catch(e){console.error(`logRetention.save:`,e),a.error(r(e,u(`logs.retention.updateFailed`)))}finally{f.value=!1}}async function _(){try{let{days:t}=await e.getLogRetention();d.value=t}catch(e){console.error(`logRetention.load:`,e),a.error(r(e,u(`logs.retention.loadFailed`)))}}async function v(){try{let{days:e}=await s();p.value=e}catch(e){console.error(`logRetention.loadMetricsDetail:`,e),a.error(r(e,u(`logs.retention.loadMetricsDetailFailed`)))}}async function y(){if(h.value){a.error(h.value);return}f.value=!0,m.value=!0;try{let[t,n]=await Promise.allSettled([e.setLogRetention(d.value),o(p.value)]);t.status===`fulfilled`&&(d.value=t.value.days),n.status===`fulfilled`&&(p.value=n.value.days);let i=[t,n].find(e=>e.status===`rejected`);if(i){a.error(r(i.reason,u(`logs.retention.updateFailed`)));return}a.success(u(`logs.retention.bothSaved`))}finally{f.value=!1,m.value=!1}}return{retentionDays:d,retentionSaving:f,saveRetention:g,loadRetention:_,metricsDetailDays:p,metricsDetailSaving:m,loadMetricsDetail:v,saveBoth:y,validationError:h}}export{u as t};
@@ -1 +1 @@
1
- import{N as e}from"./button-DpPvjx0f.js";function t(t,n){let{activeOnly:r=!1,includeStreamTimeout:i=!0,defaultContextWindow:a=e}=n??{};return(r?t.filter(e=>e.is_active):t).map(e=>({provider:{id:e.id,name:e.name},models:(e.models??[]).map(e=>{let t={name:e.name,contextWindow:e.context_window??a};return i&&(t.streamTimeoutMs=e.stream_timeout_ms??null),t})}))}export{t};
1
+ import{N as e}from"./button-BcmABzob.js";function t(t,n){let{activeOnly:r=!1,includeStreamTimeout:i=!0,defaultContextWindow:a=e}=n??{};return(r?t.filter(e=>e.is_active):t).map(e=>({provider:{id:e.id,name:e.name},models:(e.models??[]).map(e=>{let t={name:e.name,contextWindow:e.context_window??a};return i&&(t.streamTimeoutMs=e.stream_timeout_ms??null),t})}))}export{t};
@@ -8,8 +8,8 @@
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
9
  <link href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&display=optional" rel="stylesheet" />
10
10
  <title>LLM Simple Router</title>
11
- <script type="module" crossorigin src="/admin/assets/index-Di7f6Crg.js"></script>
12
- <link rel="modulepreload" crossorigin href="/admin/assets/button-DpPvjx0f.js">
11
+ <script type="module" crossorigin src="/admin/assets/index-CpvOTf7s.js"></script>
12
+ <link rel="modulepreload" crossorigin href="/admin/assets/button-BcmABzob.js">
13
13
  <link rel="stylesheet" crossorigin href="/admin/assets/index-BebG1zR0.css">
14
14
  </head>
15
15
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llm-simple-router",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "LLM API proxy router with OpenAI/Anthropic support, model mapping, retry strategies, and admin dashboard",
5
5
  "license": "MIT",
6
6
  "author": "ZZzzswszzZZ",
@@ -1 +0,0 @@
1
- import{R as e}from"./button-DpPvjx0f.js";var t=e(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]);export{t};
@@ -1 +0,0 @@
1
- import{R as e}from"./button-DpPvjx0f.js";var t=e(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]);export{t};
@@ -1 +0,0 @@
1
- import{R as e}from"./button-DpPvjx0f.js";var t=e(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
@@ -1 +0,0 @@
1
- import{R as e}from"./button-DpPvjx0f.js";var t=e(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]);export{t};