ompgui 0.5.10 → 0.6.1

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 (86) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -4
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +6 -6
  5. package/.next/react-loadable-manifest.json +12 -11
  6. package/.next/required-server-files.js +2 -2
  7. package/.next/required-server-files.json +2 -2
  8. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +2 -2
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  12. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page.js +1 -1
  15. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/_not-found.html +1 -1
  17. package/.next/server/app/_not-found.rsc +17 -14
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +17 -14
  19. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +8 -7
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/api/agent/running/events/route.js +1 -1
  22. package/.next/server/app/api/app-update/route.js +1 -1
  23. package/.next/server/app/index.html +1 -1
  24. package/.next/server/app/index.rsc +13 -9
  25. package/.next/server/app/index.segments/__PAGE__.segment.rsc +10 -11
  26. package/.next/server/app/index.segments/_full.segment.rsc +13 -9
  27. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/login/page.js +1 -1
  29. package/.next/server/app/login/page.js.nft.json +1 -1
  30. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/login.html +1 -1
  32. package/.next/server/app/login.rsc +18 -15
  33. package/.next/server/app/login.segments/_full.segment.rsc +18 -15
  34. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  35. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +8 -8
  36. package/.next/server/app/manifest.webmanifest/route.js +1 -1
  37. package/.next/server/app/manifest.webmanifest.body +1 -1
  38. package/.next/server/app/page.js +2 -2
  39. package/.next/server/app/page.js.nft.json +1 -1
  40. package/.next/server/app/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app-paths-manifest.json +4 -4
  42. package/.next/server/chunks/2865.js +1 -1
  43. package/.next/server/chunks/4119.js +18 -0
  44. package/.next/server/chunks/474.js +1 -0
  45. package/.next/server/chunks/6209.js +1 -1
  46. package/.next/server/chunks/933.js +1 -1
  47. package/.next/server/middleware-build-manifest.js +1 -1
  48. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  49. package/.next/server/pages/404.html +1 -1
  50. package/.next/server/pages/500.html +1 -1
  51. package/.next/server/server-reference-manifest.json +1 -1
  52. package/.next/static/chunks/1133.bea8503e209b9e2c.js +1 -0
  53. package/.next/static/chunks/1279-86e0a1e8adc2c8b1.js +1 -0
  54. package/.next/static/chunks/3274.2a04ea2716225057.js +1 -0
  55. package/.next/static/chunks/4315-c29ee51432448dad.js +1 -0
  56. package/.next/static/chunks/484.3215a9f03ff865da.js +1 -0
  57. package/.next/static/chunks/4906-7dff29185f63f908.js +1 -0
  58. package/.next/static/chunks/5658.eb16997c19c2372b.js +1 -0
  59. package/.next/static/chunks/7194.0b9186e22efff8bc.js +1 -0
  60. package/.next/static/chunks/7224-45882082fb768fdb.js +1 -0
  61. package/.next/static/chunks/7269.b7603306b5d6cbd1.js +17 -0
  62. package/.next/static/chunks/9448.3ded6700334581bd.js +2 -0
  63. package/.next/static/chunks/9668.5e681bc0055ed4d0.js +1 -0
  64. package/.next/static/chunks/app/login/page-96cae346e4259ebf.js +1 -0
  65. package/.next/static/chunks/app/page-a47220367beaef82.js +59 -0
  66. package/.next/static/chunks/webpack-dc676f61c481aaa2.js +1 -0
  67. package/.next/static/css/ad6ba188a6d5de0d.css +3 -0
  68. package/README.md +1 -1
  69. package/package.json +1 -1
  70. package/.next/server/chunks/8005.js +0 -18
  71. package/.next/static/chunks/1133.c52cb85df8434dfe.js +0 -1
  72. package/.next/static/chunks/2041.17ffd4146285d582.js +0 -17
  73. package/.next/static/chunks/3274.90e0bf3b4004e4d8.js +0 -1
  74. package/.next/static/chunks/4315-003248443d68d4df.js +0 -1
  75. package/.next/static/chunks/484.b4abadb8cdd9c97f.js +0 -1
  76. package/.next/static/chunks/5658.00ec4620fb11878f.js +0 -1
  77. package/.next/static/chunks/8486.304d239e5e097b1b.js +0 -1
  78. package/.next/static/chunks/8920-c73b529c74b3a43d.js +0 -1
  79. package/.next/static/chunks/9448.a3d481d9e75112d4.js +0 -2
  80. package/.next/static/chunks/9668.b217cc6e8f550236.js +0 -1
  81. package/.next/static/chunks/app/login/page-9944fe0148c69be1.js +0 -1
  82. package/.next/static/chunks/app/page-c650f2d9ae8d199b.js +0 -59
  83. package/.next/static/chunks/webpack-c01e953327d82b66.js +0 -1
  84. package/.next/static/css/45214e1537eb75a6.css +0 -3
  85. /package/.next/static/{NYtVaQy909o9b9LqcM3T6 → 4RPdHtTBa6zi2yK1ALV9m}/_buildManifest.js +0 -0
  86. /package/.next/static/{NYtVaQy909o9b9LqcM3T6 → 4RPdHtTBa6zi2yK1ALV9m}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3274],{33274:(e,r,t)=>{t.r(r),t.d(r,{ModelsConfig:()=>eT,modelsConfigFingerprint:()=>eI});var o=t(95155),n=t(12115),i=t(31590),a=t(4315);function s(e){if("string"!=typeof e)return!1;let r=e.trim();if(!r||r.startsWith("//"))return!1;try{let e=new URL(r);return"http:"===e.protocol||"https:"===e.protocol||"mailto:"===e.protocol}catch{return!1}}function l(e){return Object.entries(e).every(([e,r])=>"id"===e?"string"==typeof r&&""===r.trim():void 0===r)}var d=t(18136),c=t(30808),p=t(34906),x=t(38158),u=t(19805),g=t(88074),v=t(65738),h=t(12651),m=t(86272),f=t(82749),b=t(64577),y=t(35484),j=t(2125),C=t(19707),k=t(40557),S=t(80846),w=t(51087),z=t(84111);function I({open:e,providerName:r,providerBaseUrl:t,existingIds:i,onAdd:s,onClose:l}){let{t:d}=(0,a.s9)(),[p,x]=(0,n.useState)(""),[u,g]=(0,n.useState)(null),[v,h]=(0,n.useState)(!1),[m,f]=(0,n.useState)(null),b=(0,n.useRef)(null),y=(0,n.useRef)(0);(0,n.useEffect)(()=>{if(!e)return;b.current?.focus();let o=p.trim();if(!o){y.current+=1,g(null),f(null),h(!1);return}let n=new URLSearchParams({q:o,limit:String(30)});r&&n.set("provider",r),t&&n.set("baseUrl",t);let i=new AbortController,a=y.current+1;y.current=a,h(!0);let s=setTimeout(async()=>{try{let e=await fetch(`/api/models-config/catalog?${n.toString()}`,{signal:i.signal}),r=await e.json();if(y.current!==a)return;if(!e.ok)throw Error(r.error??`HTTP ${e.status}`);g(r.models??[]),f(null)}catch(e){if(y.current!==a)return;"AbortError"!==e.name&&f(e instanceof Error?e.message:String(e))}finally{y.current===a&&h(!1)}},250);return()=>{clearTimeout(s),i.abort()}},[p,e,r,t]);let j={display:"flex",flexDirection:"row",alignItems:"center",gap:10,padding:"9px 12px",background:"var(--bg-panel)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",marginBottom:"var(--space-3)",minWidth:0};return(0,o.jsx)(c.lG,{open:!0,onOpenChange:e=>{e||l()},children:(0,o.jsxs)(c.Cf,{ariaLabel:d("modelsConfig.catalogTitle"),style:{width:720,maxWidth:"min(92vw, 720px)",maxHeight:"min(72dvh, calc(100dvh - 32px))",padding:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,o.jsx)(c.L3,{style:{margin:"14px 18px 8px",fontSize:18},children:d("modelsConfig.catalogTitle")}),(0,o.jsx)("div",{style:{padding:"8px 14px 12px",flexShrink:0},children:(0,o.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"6px 10px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)"},children:(0,o.jsx)("input",{ref:b,value:p,onChange:e=>x(e.target.value),"aria-label":d("modelsConfig.catalogSearchPlaceholder"),placeholder:d("modelsConfig.catalogSearchPlaceholder"),style:{flex:1,background:"none",border:"none",outline:"none",color:"var(--text)",fontSize:"var(--text-base)",boxSizing:"border-box",minWidth:0}})})}),(0,o.jsx)("div",{style:{flex:1,overflowY:"auto",padding:"4px 14px 14px"},children:m?(0,o.jsx)("div",{role:"alert",style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--status-error)",textAlign:"center"},children:d("modelsConfig.catalogError",{error:m})}):v?(0,o.jsx)("div",{role:"status","aria-live":"polite",style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.catalogLoading")}):null===u?(0,o.jsx)("div",{style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.catalogSearchPlaceholder")}):0===u.length?(0,o.jsx)("div",{style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.catalogNoResults")}):u.map(e=>{var r;let n=i.has(e.id),a=!!e.providerBaseUrl&&!t;return(0,o.jsxs)("div",{style:j,children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)",minWidth:0},children:[(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",fontFamily:"var(--font-mono)",color:"var(--text)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.id}),e.reasoning&&(0,o.jsx)("span",{style:{fontSize:9,padding:"1px 4px",background:"var(--accent-subtle)",color:"var(--accent)",borderRadius:3,flexShrink:0},children:"T"})]}),(0,o.jsxs)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[e.providerName,void 0!==e.contextWindow?` \xb7 ${d("modelsConfig.catalogContext",{n:(r=e.contextWindow,(0,z.wk)(r))})}`:"",void 0!==e.cost.input&&void 0!==e.cost.output?` \xb7 ${d("modelsConfig.catalogPrice",{input:e.cost.input,output:e.cost.output})}`:"",a?` \xb7 ${d("modelsConfig.catalogSetBaseUrl")}`:""]})]}),n?(0,o.jsx)("span",{style:{flexShrink:0,padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-dim)",fontSize:12},children:d("modelsConfig.catalogAdded")}):(0,o.jsx)("button",{type:"button","aria-label":"Add "+e.id+" ("+e.providerName+")",onClick:()=>{let r;return s((r=void 0!==e.cost.input&&void 0!==e.cost.output,{id:e.id,...e.name&&e.name!==e.id?{name:e.name}:{},...void 0!==e.reasoning?{reasoning:e.reasoning}:{},...e.input?{input:e.input}:{},...void 0!==e.contextWindow?{contextWindow:e.contextWindow}:{},...void 0!==e.maxTokens?{maxTokens:e.maxTokens}:{},...r?{cost:{input:e.cost.input,output:e.cost.output,cacheRead:e.cost.cacheRead??0,cacheWrite:e.cost.cacheWrite??0}}:{}}),e.providerBaseUrl)},style:{flexShrink:0,padding:"5px 12px",background:"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:"var(--on-accent)",cursor:"pointer",fontSize:"var(--text-md)",fontWeight:600},children:d("modelsConfig.catalogAdd")})]},e.key)})})]})})}var T=t(67381),R=t(64433),A=t(70350),P=t(88195),M=t(9312),O=t(87275),$=t(22008),W=t(95476),E=t(35029),N=t(14489),L=t(78728),U=t(19872),D=t(7751),H=t(92526),K=t(48238),B=t(57794),F=t(41098),_=t(84604),J=t(15315),q=t(74278),Y=t(55457),V=t(71437),X=t(29167),Z=t(97283),G=t(34166),Q=t(33889),ee=t(85486),er=t(74068),et=t(83546),eo=t(83709);let en={anthropic:{Icon:T.A,hasColor:!1},openai:{Icon:R.A,hasColor:!1},"openai-codex":{Icon:R.A,hasColor:!1},google:{Icon:A.A,hasColor:!0},"google-vertex":{Icon:A.A,hasColor:!0},"ant-ling":{Icon:Q.A,hasColor:!0},deepseek:{Icon:P.A,hasColor:!0},groq:{Icon:M.A,hasColor:!1},mistral:{Icon:O.A,hasColor:!0},moonshotai:{Icon:$.A,hasColor:!1},"moonshotai-cn":{Icon:$.A,hasColor:!1},moonshot:{Icon:$.A,hasColor:!1},minimax:{Icon:W.A,hasColor:!0},"minimax-cn":{Icon:W.A,hasColor:!0},fireworks:{Icon:E.A,hasColor:!0},huggingface:{Icon:N.A,hasColor:!0},cerebras:{Icon:L.A,hasColor:!0},openrouter:{Icon:U.A,hasColor:!1},xai:{Icon:D.A,hasColor:!1},"cloudflare-ai-gateway":{Icon:H.A,hasColor:!0},"cloudflare-workers-ai":{Icon:H.A,hasColor:!0},"vercel-ai-gateway":{Icon:K.A,hasColor:!1},"github-copilot":{Icon:B.A,hasColor:!1},"amazon-bedrock":{Icon:F.A,hasColor:!0},"azure-openai-responses":{Icon:_.A,hasColor:!0},"kimi-coding":{Icon:J.A,hasColor:!0},nvidia:{Icon:ee.A,hasColor:!0},opencode:{Icon:er.A,hasColor:!1},"opencode-go":{Icon:er.A,hasColor:!1},qwen:{Icon:q.A,hasColor:!0},xiaomi:{Icon:et.A,hasColor:!1},"xiaomi-token-plan-ams":{Icon:et.A,hasColor:!1},"xiaomi-token-plan-cn":{Icon:et.A,hasColor:!1},"xiaomi-token-plan-sgp":{Icon:et.A,hasColor:!1},zai:{Icon:eo.A,hasColor:!1},"zai-coding-cn":{Icon:eo.A,hasColor:!1},zhipu:{Icon:Y.A,hasColor:!0},cohere:{Icon:V.A,hasColor:!0},perplexity:{Icon:X.A,hasColor:!0},together:{Icon:Z.A,hasColor:!0},grok:{Icon:G.A,hasColor:!1}};function ei({models:e,connectedProviders:r,onChanged:t}){let[i,a]=(0,n.useState)(null),[s,l]=(0,n.useState)(null),[d,c]=(0,n.useState)(!1);(0,n.useEffect)(()=>{fetch("/api/omp-settings").then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(e=>a(e.settings??{})).catch(e=>l(e instanceof Error?e.message:String(e)))},[]);let p=(0,n.useRef)(null),g=(0,n.useRef)(!1),v=e=>{a(e),c(!0),l(null),p.current=e,g.current||(g.current=!0,(async()=>{try{for(;null!==p.current;){let e=p.current;p.current=null;try{let r=await fetch("/api/omp-settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:e})}),o=await r.json();if(!r.ok||o.error)throw Error(o.error||`HTTP ${r.status}`);null===p.current&&a(o.settings??e),await t()}catch(e){l(e instanceof Error?e.message:String(e));break}}}finally{g.current=!1,c(!1)}})())};if(!i)return(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"Loading native OMP registry settings..."});let h=!0===i.registryHasScopedEntries,m=e.map(e=>`${e.provider}/${e.id}`),f=(i.enabledModels?.length??0)>0,b=new Set(i.enabledModels??m),y=[...new Set([...e.map(e=>e.provider),...r.map(e=>e.id),...i.disabledProviders??[]])].sort(),j=new Set(i.disabledProviders??[]),C=i.modelProviderOrder??[],k=[...C,...y.filter(e=>!C.includes(e))];return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)(ep,{children:"Native OMP Model Registry"}),(0,o.jsxs)("p",{style:{margin:"4px 0 0",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.5},children:["These settings affect the models OMP itself can resolve. They are saved in ",(0,o.jsx)("code",{children:"~/.omp/agent/config.yml"}),", unlike the Composer picker."]})]}),(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"10px 12px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:[(0,o.jsx)("input",{type:"checkbox",checked:f,disabled:d||h,onChange:e=>void v({...i,enabledModels:e.target.checked?m:[]})})," Restrict OMP to selected models"]}),(0,o.jsx)("p",{style:{margin:0,padding:"8px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:f?"Unchecked models are unavailable to every OMP session.":"All currently available OMP models are allowed."}),f&&(0,o.jsx)("div",{style:{maxHeight:260,overflowY:"auto",borderTop:"1px solid var(--border)"},children:e.map(e=>{let r=`${e.provider}/${e.id}`;return(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"6px 12px",color:"var(--text-muted)",fontSize:"var(--text-md)"},children:[(0,o.jsx)("input",{type:"checkbox",checked:b.has(r),disabled:d||h,onChange:e=>{let t=new Set(b);e.target.checked?t.add(r):t.delete(r),v({...i,enabledModels:[...t]})}}),(0,o.jsx)("code",{children:r})]},r)})})]}),(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsx)("div",{style:{padding:"10px 12px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:"Disabled Providers"}),(0,o.jsx)("p",{style:{margin:0,padding:"8px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:"Disabling a provider removes it from OMP's model registry, even if it has credentials."}),(0,o.jsx)("div",{style:{borderTop:"1px solid var(--border)"},children:y.map(e=>(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 12px",color:"var(--text-muted)",fontSize:"var(--text-md)"},children:[(0,o.jsx)("input",{type:"checkbox",checked:j.has(e),disabled:d||h,onChange:r=>{let t=new Set(j);r.target.checked?t.add(e):t.delete(e),v({...i,disabledProviders:[...t]})}}),(0,o.jsx)(ew,{id:e,size:14}),(0,o.jsx)("code",{children:e})]},e))})]}),(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsx)("div",{style:{padding:"10px 12px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:"Provider Preference"}),(0,o.jsx)("p",{style:{margin:0,padding:"8px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:"Sets OMP's provider order when a model id is ambiguous."}),(0,o.jsx)("div",{style:{borderTop:"1px solid var(--border)"},children:k.map((e,r)=>(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 12px",color:"var(--text-muted)",fontSize:"var(--text-md)"},children:[(0,o.jsx)(ew,{id:e,size:14}),(0,o.jsx)("code",{style:{flex:1},children:e}),(0,o.jsx)("button",{type:"button",disabled:d||h||0===r,onClick:()=>{let e=[...k];[e[r-1],e[r]]=[e[r],e[r-1]],v({...i,modelProviderOrder:e})},title:"Move provider up","aria-label":`Move provider ${e} up`,className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:4,background:"transparent",color:"var(--text-muted)",cursor:"pointer"},children:(0,o.jsx)(x.A,{size:14})}),(0,o.jsx)("button",{type:"button",disabled:d||h||r===k.length-1,onClick:()=>{let e=[...k];[e[r+1],e[r]]=[e[r],e[r+1]],v({...i,modelProviderOrder:e})},title:"Move provider down","aria-label":`Move provider ${e} down`,className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:4,background:"transparent",color:"var(--text-muted)",cursor:"pointer"},children:(0,o.jsx)(u.A,{size:14})})]},e))})]}),h&&(0,o.jsxs)("div",{role:"status",style:{padding:"9px 11px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.45},children:["OMP path-scoped registry entries are configured. Edit ",(0,o.jsx)("code",{children:"config.yml"})," directly to preserve their path rules."]}),s&&(0,o.jsx)("div",{role:"alert",style:{color:"var(--status-error)",fontSize:"var(--text-md)"},children:s})]})}let ea="omp-composer-models",es=["default","smol","slow","vision","plan","designer","commit","tiny","task","advisor"];function el({models:e}){let[r,t]=(0,n.useState)({}),[i,a]=(0,n.useState)(!0),[s,l]=(0,n.useState)(!1),[d,c]=(0,n.useState)(null);(0,n.useEffect)(()=>{fetch("/api/model-roles").then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(e=>t(e.roles??{})).catch(e=>c(e instanceof Error?e.message:String(e))).finally(()=>a(!1))},[]);let p=async()=>{l(!0),c(null);try{let e=await fetch("/api/model-roles",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({roles:r})}),t=await e.json();if(!e.ok||t.error)throw Error(t.error||`HTTP ${e.status}`);w.oR.success("OMP model roles saved")}catch(e){c(e instanceof Error?e.message:String(e))}finally{l(!1)}};return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)(ep,{children:"OMP Model Roles"}),(0,o.jsxs)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:["Saved natively in ",(0,o.jsx)("code",{children:"~/.omp/agent/config.yml"}),". Choose an OMP model and its supported reasoning level for each role."]})]}),i?(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"Loading roles..."}):es.map(n=>{let i,a,s,l,d;return(0,o.jsxs)("div",{className:"model-role-row",style:{display:"grid",gridTemplateColumns:"82px minmax(0, 1fr) minmax(110px, 0.35fr)",alignItems:"center",gap:10,fontSize:"var(--text-md)"},children:[(0,o.jsx)("code",{style:{color:"var(--text-muted)"},children:n}),(a=(i=r[n]??"").replace(/:([^,:]+)$/,""),s=i.match(/:([^,:]+)$/)?.[1]??"",l=e.find(e=>`${e.provider}/${e.id}`===a),d=!a||!!l,(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("select",{"aria-label":`Model override for ${n}`,value:a,onChange:e=>{var o;let i,a;return o=e.target.value,i=r[n]??"",a=i.match(/:([^,:]+)$/)?.[1]??"",void t(e=>({...e,[n]:o?`${o}${a?`:${a}`:""}`:""}))},style:{minWidth:0,padding:"7px 9px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",fontSize:"var(--text-md)"},children:[(0,o.jsx)("option",{value:"",children:"No override"}),!d&&(0,o.jsxs)("option",{value:a,children:[a," (not currently available)"]}),e.map(e=>(0,o.jsxs)("option",{value:`${e.provider}/${e.id}`,children:[e.name||e.id," (",e.provider,"/",e.id,")"]},`${e.provider}:${e.id}`))]}),(0,o.jsxs)("select",{"aria-label":`Thinking level for ${n}`,value:s,disabled:!l,onChange:e=>{var o;let i;return o=e.target.value,i=(r[n]??"").replace(/:([^,:]+)$/,""),void t(e=>({...e,[n]:i?`${i}${o?`:${o}`:""}`:""}))},style:{minWidth:0,padding:"7px 9px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",fontSize:"var(--text-md)",opacity:l?1:.55},children:[(0,o.jsx)("option",{value:"",children:"Model default"}),(l?.thinkingLevels??[]).filter(e=>"off"!==e).map(e=>(0,o.jsx)("option",{value:e,children:e},e))]})]}))]},n)}),d&&(0,o.jsx)("div",{role:"alert",style:{color:"var(--status-error)",fontSize:"var(--text-md)"},children:d}),(0,o.jsx)("button",{type:"button",onClick:()=>void p(),disabled:i||s,style:{alignSelf:"flex-start",padding:"7px 12px",border:"none",borderRadius:"var(--radius-control)",background:"var(--accent)",color:"var(--on-accent)",cursor:s?"wait":"pointer",fontSize:"var(--text-md)",fontWeight:600},children:s?"Saving...":"Save OMP roles"})]})}let ed=["openai-completions","openai-responses","openai-codex-responses","azure-openai-responses","anthropic-messages","bedrock-converse-stream","google-generative-ai","google-gemini-cli","google-vertex"];function ec({text:e}){let r=e.split("`");return 1===r.length?(0,o.jsx)(o.Fragment,{children:e}):(0,o.jsx)(o.Fragment,{children:r.map((e,r)=>r%2==1?(0,o.jsx)("code",{style:{fontFamily:"var(--font-mono)"},children:e},r):e)})}function ep({children:e}){return(0,o.jsx)("div",{style:{fontSize:"var(--text-sm)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:2},children:e})}function ex({icon:e,label:r,selected:t,onClick:n}){return(0,o.jsxs)("button",{type:"button",onClick:n,style:{width:"100%",padding:"8px 10px",border:"none",borderRadius:"var(--radius-control)",background:t?"var(--bg-selected)":"none",color:t?"var(--text)":"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-md)",textAlign:"left",display:"flex",alignItems:"center",gap:"var(--space-4)",fontWeight:t?600:400},children:[(0,o.jsx)(e,{size:14,style:{color:t?"var(--accent)":"currentColor",flexShrink:0}}),r]})}let eu=e=>({onMouseEnter:r=>{e||(r.currentTarget.style.background="var(--bg-hover)")},onMouseLeave:r=>{e||(r.currentTarget.style.background="none")}}),eg={onMouseEnter:e=>{e.currentTarget.style.color="var(--accent)",e.currentTarget.style.borderColor="var(--accent)"},onMouseLeave:e=>{e.currentTarget.style.color="var(--text-muted)",e.currentTarget.style.borderColor="var(--border)"}},ev=[{label:"\uD83E\uDD99 Ollama",baseUrl:"http://localhost:11434/v1",auth:"none"},{label:"⚡ LM Studio / vLLM",baseUrl:"http://localhost:1234/v1",auth:"none"},{label:"\uD83C\uDF10 OpenRouter",baseUrl:"https://openrouter.ai/api/v1",auth:"apiKey"},{label:"\uD83E\uDD16 Local Proxy (:2455)",baseUrl:"http://127.0.0.1:2455/v1",auth:"keep"}],eh={padding:"4px 8px",fontSize:"var(--text-sm)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",cursor:"pointer"};function em({name:e,provider:r,onChange:t,onRename:i,onDelete:s}){let{t:l}=(0,a.s9)(),[d,c]=(0,n.useState)(e),[x,u]=(0,n.useState)(!1);(0,n.useEffect)(()=>c(e),[e]);let h=(e,o)=>t({...r,[e]:o}),m=(0,p.JT)(()=>d.trim()?null:l("modelsConfig.errorNameRequired")),f=(0,p.JT)(()=>{let e=r.baseUrl??"";if(!e.trim())return null;try{let r=new URL(e);if("http:"!==r.protocol&&"https:"!==r.protocol)return l("modelsConfig.errorUrlInvalid");return null}catch{return l("modelsConfig.errorUrlInvalid")}}),b=!0===r.apiKeyConfigured,y=b&&void 0===r.apiKey,j=(0,p.JT)(()=>"none"===r.auth||"oauth"===r.auth||!r.models?.length||y||"string"==typeof r.apiKey&&r.apiKey.trim()?null:l("modelsConfig.errorApiKeyRequired")),C=d.trim(),k=r.baseUrl?r.baseUrl.replace(/^https?:\/\//,"").split("/")[0]||r.baseUrl:"Default endpoint";return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-6)"},children:[(0,o.jsxs)("div",{style:{padding:"14px 16px",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:10,boxShadow:"var(--shadow-card)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-5)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,o.jsx)("div",{style:{width:"var(--control-height-lg)",height:"var(--control-height-lg)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",border:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:(0,o.jsx)(ew,{id:e,size:20})}),(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[(0,o.jsx)("div",{style:{fontSize:15,fontWeight:700,fontFamily:"var(--font-mono)",color:"var(--text)"},children:e}),(0,o.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)",fontFamily:"var(--font-mono)"},children:k})]})]}),(0,o.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)"},children:"none"===r.auth?(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"var(--bg-subtle)",color:"var(--text-muted)",fontWeight:500},children:"Auth: None"}):y||"string"==typeof r.apiKey&&r.apiKey.length>0?(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--accent) 15%, transparent)",color:"var(--accent)",fontWeight:600},children:"Key Set"}):null===r.apiKey?(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--status-warning) 15%, transparent)",color:"var(--status-warning)",fontWeight:600},children:"Key Will Clear"}):(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--status-error) 15%, transparent)",color:"var(--status-error)",fontWeight:600},children:"Key Missing"})})]}),(0,o.jsxs)("div",{style:{borderTop:"1px solid var(--border)",paddingTop:10,marginTop:4},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",fontWeight:700,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:6},children:"Quick Endpoint Presets"}),(0,o.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"var(--space-3)"},children:ev.map(e=>(0,o.jsx)("button",{type:"button",onClick:()=>{t({...r,baseUrl:e.baseUrl,api:"openai-completions",auth:"keep"===e.auth?r.auth:e.auth}),w.oR.success(`Applied ${e.baseUrl} endpoint preset`)},style:eh,children:e.label},e.baseUrl))})]})]}),(0,o.jsxs)(p.M_,{label:(0,o.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:"var(--space-3)"},children:[(0,o.jsx)(g.A,{size:12,"aria-hidden":"true"})," Configuration Details"]}),children:[(0,o.jsx)(p.D0,{label:l("modelsConfig.providerName"),required:!0,error:m.error,children:(0,o.jsx)(p.ks,{value:d,onChange:e=>{c(e),m.onChange()},placeholder:"provider-name",mono:!0,invalid:!!m.error,error:m.error,onBlurValidate:m.onBlur})}),C!==e&&(0,o.jsx)("button",{type:"button",onClick:()=>{m.onSubmit()||i(C)},style:{alignSelf:"flex-start",padding:"5px 12px",background:"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:"var(--on-accent)",cursor:"pointer",fontSize:"var(--text-sm)",fontWeight:600},children:l("modelsConfig.rename")}),(0,o.jsx)(p.D0,{label:l("modelsConfig.baseUrl"),error:f.error,children:(0,o.jsx)(p.ks,{value:r.baseUrl??"",onChange:e=>{h("baseUrl",e||void 0),f.onChange()},placeholder:"https://api.example.com/v1",mono:!0,invalid:!!f.error,error:f.error,onBlurValidate:f.onBlur})}),(0,o.jsxs)(p.D0,{label:l("modelsConfig.apiKey"),hint:(0,o.jsxs)("span",{children:[(0,o.jsx)(ec,{text:l("modelsConfig.apiKeyHint")}),y&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("br",{}),"A configured key is retained unless you replace it or explicitly clear it."]})]}),error:j.error,children:[(0,o.jsx)(p.L4,{value:"string"==typeof r.apiKey?r.apiKey:"",onChange:e=>{h("apiKey",e||(b?null:void 0)),j.onChange()},placeholder:l("modelsConfig.apiKeyPlaceholder"),invalid:!!j.error,error:j.error,onBlurValidate:j.onBlur,showLabel:l("modelsConfig.showApiKey"),hideLabel:l("modelsConfig.hideApiKey")}),b&&(0,o.jsx)("button",{type:"button",onClick:()=>{h("apiKey",null),j.onChange(),j.onBlur()},style:{alignSelf:"flex-start",padding:"4px 9px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-sm)"},children:"Clear stored API key"})]}),(0,o.jsx)(p.Jl,{label:l("modelsConfig.noApiKeyRequired"),checked:"none"===r.auth,onChange:e=>{h("auth",e?"none":void 0),e&&j.onChange(),j.onBlur()}}),(0,o.jsx)(p.D0,{label:l("modelsConfig.api"),children:(0,o.jsx)(p.l6,{value:r.api??"openai-completions",onChange:e=>h("api",e),options:r.api&&!ed.includes(r.api)?[r.api,...ed]:ed,required:!0,placeholder:l("modelsConfig.inheritNone")})})]}),(0,o.jsxs)("section",{style:{padding:"14px 16px",border:"1px solid color-mix(in srgb, var(--status-error) 25%, transparent)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-5)"},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("div",{style:{fontSize:12.5,fontWeight:600,color:"var(--text)"},children:"Remove Provider"}),(0,o.jsxs)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)",marginTop:2},children:["Delete ",e," and remove its models from models.yml configuration."]})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>u(!0),style:{padding:"6px 12px",background:"none",border:"1px solid var(--status-error)",borderRadius:"var(--radius-control)",color:"var(--status-error)",cursor:"pointer",fontSize:"var(--text-md)",display:"inline-flex",alignItems:"center",gap:5,fontWeight:500,flexShrink:0},children:[(0,o.jsx)(v.A,{size:13,"aria-hidden":"true"})," ",l("modelsConfig.delete")]})]}),(0,o.jsx)(p.TM,{open:x,onOpenChange:u,title:l("modelsConfig.deleteProviderTitle",{name:e}),description:l("modelsConfig.deleteProviderBody",{name:e}),confirmLabel:l("modelsConfig.delete"),cancelLabel:l("modelsConfig.cancel"),danger:!0,onConfirm:()=>{u(!1),s()}})]})}let ef=["minimal","low","medium","high","xhigh","max"],eb={minimal:"var(--text-dim)",low:"color-mix(in srgb, var(--accent) 45%, var(--text-muted))",medium:"var(--accent)",high:"var(--accent-hover)",xhigh:"var(--status-warning)",max:"var(--status-error)"};function ey({value:e,onChange:r}){let{t}=(0,a.s9)(),n=e?.efforts,i=e?.effortMap??{},s=(t,o)=>{let a=new Set(n??[...ef]),s={...i};null===o?(a.delete(t),delete s[t]):(a.add(t),"omit"===o?delete s[t]:s[t]=o);let l=ef.filter(e=>a.has(e));0===l.length||l.length===ef.length&&0===Object.keys(s).length?r(void 0):r({...e??{},mode:e?.mode??"effort",efforts:l,effortMap:Object.keys(s).length?s:void 0})};return(0,o.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:2},children:ef.map(e=>{let r=void 0!==n&&!n.includes(e),a=r?null:i[e],l=r?"null":"string"==typeof a?"string":"omit",d="string"==typeof a?a:"",c=eb[e],p={padding:"4px 10px",fontSize:"var(--text-xs)",border:"none",cursor:"pointer",fontWeight:400,transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)",whiteSpace:"nowrap",background:"var(--bg-panel)",color:"var(--text-dim)"},x={background:"var(--accent)",color:"var(--on-accent)",fontWeight:600};return(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"5px 4px",borderRadius:"var(--radius-control)",background:"transparent",border:"1px solid transparent"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:5,width:68,flexShrink:0},children:[(0,o.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:c,flexShrink:0,opacity:"null"===l?.3:1}}),(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",color:"null"===l?"var(--text-dim)":"var(--text-muted)",textDecoration:"null"===l?"line-through":"none"},children:e})]}),(0,o.jsxs)("div",{style:{display:"flex",borderRadius:"var(--radius-control)",border:"1px solid var(--border)",overflow:"hidden",flexShrink:0},children:[(0,o.jsx)("button",{onClick:()=>s(e,"omit"),style:{...p,..."omit"===l?x:{}},children:t("modelsConfig.default")}),(0,o.jsx)("button",{onClick:()=>s(e,null),style:{...p,borderLeft:"1px solid var(--border)",..."null"===l?{background:"var(--status-error)",color:"var(--on-accent)",fontWeight:600}:{}},children:t("modelsConfig.disabled")})]}),(0,o.jsxs)("div",{style:{display:"flex",borderRadius:"var(--radius-control)",border:`1px solid ${"string"===l?"var(--accent)":"var(--border)"}`,overflow:"hidden",transition:"border-color var(--dur-fast) var(--ease-out-warm)"},children:[(0,o.jsx)("button",{onClick:()=>s(e,d||e),style:{...p,..."string"===l?x:{},borderRight:"1px solid var(--border)",flexShrink:0},children:t("modelsConfig.custom")}),(0,o.jsx)("input",{value:d,onChange:r=>s(e,r.target.value),onFocus:()=>{"string"!==l&&s(e,d||e)},placeholder:e,maxLength:10,style:{width:"12ch",background:"string"===l?"var(--bg)":"var(--bg-panel)",border:"none",outline:"none",color:"string"===l?"var(--text)":"var(--text-dim)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",padding:"4px 7px",transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)"}})]})]},e)})})}let ej={input:"modelsConfig.costInput",output:"modelsConfig.costOutput",cacheRead:"modelsConfig.costCacheRead",cacheWrite:"modelsConfig.costCacheWrite"};function eC({providerName:e,provider:r,model:t,onChange:i,onDelete:s}){let{t:l}=(0,a.s9)(),[c,x]=(0,n.useState)({phase:"idle"}),[u,g]=(0,n.useState)(!1),j=(e,r)=>i({...t,[e]:r}),C=(0,p.JT)(()=>t.id.trim()?null:l("modelsConfig.errorIdRequired")),k=(()=>{if("idle"===c.phase)return null;if("testing"===c.phase)return l("modelsConfig.validatingConfig");let e=[void 0!==c.latencyMs?`${c.latencyMs}ms`:null,void 0!==c.status?`HTTP ${c.status}`:null].filter(Boolean);return"success"===c.phase?[l("modelsConfig.ok"),...e,c.responseText||null].filter(Boolean).join(" \xb7 "):[l("modelsConfig.failed"),...e,c.message].filter(Boolean).join(" \xb7 ")})();(0,n.useEffect)(()=>{x({phase:"idle"})},[e,r.baseUrl,r.api,r.apiKey,t.id,t.api]);let S=(0,n.useCallback)(async()=>{if(t.id.trim()&&"testing"!==c.phase){x({phase:"testing"});try{let o=await fetch("/api/models-config/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerName:e,provider:r,model:t})}),n=await o.json();if(!o.ok||!n.ok)return void x({phase:"error",message:n.error||n.code?(0,d.K)(n):`HTTP ${o.status}`,latencyMs:n.latencyMs,status:n.status});x({phase:"success",latencyMs:n.latencyMs,status:n.status,responseText:n.responseText})}catch(e){x({phase:"error",message:e instanceof Error?e.message:String(e)})}}},[t,r,e,c.phase]);return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)(p.M_,{label:(0,o.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:5},children:[(0,o.jsx)(h.A,{size:11,"aria-hidden":"true"})," ",l("modelsConfig.model")]}),children:[(0,o.jsxs)("div",{className:"model-detail-grid-2",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},children:[(0,o.jsx)(p.D0,{label:l("modelsConfig.idRequired"),required:!0,error:C.error,children:(0,o.jsx)(p.ks,{value:t.id,onChange:e=>{j("id",e),C.onChange()},placeholder:"model-id",mono:!0,invalid:!!C.error,error:C.error,onBlurValidate:C.onBlur})}),(0,o.jsx)(p.D0,{label:l("modelsConfig.name"),children:(0,o.jsx)(p.ks,{value:t.name??"",onChange:e=>j("name",e||void 0),placeholder:l("modelsConfig.displayNamePlaceholder")})})]}),(0,o.jsx)(p.D0,{label:l("modelsConfig.apiOverride"),children:(0,o.jsx)(p.l6,{value:t.api??"",onChange:e=>j("api",e||void 0),options:t.api&&!ed.includes(t.api)?[t.api,...ed]:ed,placeholder:l("modelsConfig.inheritNone")})}),(0,o.jsxs)("div",{style:{display:"flex",gap:20,flexWrap:"wrap"},children:[(0,o.jsx)(p.Jl,{label:l("modelsConfig.reasoningThinking"),checked:t.reasoning??!1,onChange:e=>j("reasoning",e||void 0)}),(0,o.jsx)(p.Jl,{label:l("modelsConfig.imageInput"),checked:t.input?.includes("image")??!1,onChange:e=>j("input",e?["text","image"]:void 0)})]})]}),t.reasoning&&(0,o.jsxs)(p.M_,{label:(0,o.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:5},children:[(0,o.jsx)(m.A,{size:11,"aria-hidden":"true"})," ",l("modelsConfig.thinkingLevels")]}),children:[(0,o.jsx)("div",{style:{display:"flex",justifyContent:"flex-end"},children:t.thinking&&(0,o.jsxs)("button",{type:"button",onClick:()=>j("thinking",void 0),style:{fontSize:"var(--text-xs)",padding:"3px 9px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-dim)",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"var(--space-2)"},children:[(0,o.jsx)(f.A,{size:10,"aria-hidden":"true"})," ",l("modelsConfig.resetToAuto")]})}),(0,o.jsx)(ey,{value:t.thinking,onChange:e=>j("thinking",e)})]}),(0,o.jsx)(p.M_,{label:l("modelsConfig.tokenLimits"),children:(0,o.jsxs)("div",{className:"model-detail-grid-2",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},children:[(0,o.jsx)(p.D0,{label:l("modelsConfig.contextWindowTokens"),children:(0,o.jsx)(p.XZ,{value:void 0!==t.contextWindow?String(t.contextWindow):"",onChange:e=>j("contextWindow",e?parseInt(e):void 0),placeholder:"128000"})}),(0,o.jsx)(p.D0,{label:l("modelsConfig.maxOutputTokens"),children:(0,o.jsx)(p.XZ,{value:void 0!==t.maxTokens?String(t.maxTokens):"",onChange:e=>j("maxTokens",e?parseInt(e):void 0),placeholder:"16384"})})]})}),(0,o.jsx)(p.M_,{label:l("modelsConfig.costPerMillion"),children:(0,o.jsx)("div",{className:"model-detail-grid-4",style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr 1fr",gap:10},children:["input","output","cacheRead","cacheWrite"].map(e=>(0,o.jsx)(p.D0,{label:l(ej[e]),children:(0,o.jsx)(p.XZ,{value:t.cost?.[e]!==void 0?String(t.cost[e]):"",onChange:r=>{let o;return o=parseFloat(r),void i({...t,cost:{...t.cost??{},[e]:isNaN(o)?void 0:o}})},placeholder:"0"})},e))})}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:"var(--space-4)"},children:[k&&(0,o.jsxs)("span",{title:k,style:{maxWidth:360,padding:"4px 10px",border:`1px solid ${"error"===c.phase?"color-mix(in srgb, var(--accent) 30%, transparent)":"success"===c.phase?"color-mix(in srgb, var(--accent) 25%, transparent)":"var(--border)"}`,borderRadius:"var(--radius-control)",background:"error"===c.phase?"color-mix(in srgb, var(--accent) 10%, var(--bg-panel))":"success"===c.phase?"color-mix(in srgb, var(--accent) 8%, var(--bg-panel))":"var(--bg-panel)",color:"error"===c.phase||"success"===c.phase?"var(--text)":"var(--text-muted)",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:"var(--space-3)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:["success"===c.phase?(0,o.jsx)(b.A,{size:11,"aria-hidden":"true"}):null,"error"===c.phase?(0,o.jsx)(y.A,{size:11,"aria-hidden":"true"}):null,k]}),(0,o.jsxs)("div",{style:{display:"flex",gap:"var(--space-4)",marginLeft:"auto"},children:[(0,o.jsxs)("button",{type:"button",onClick:S,disabled:!t.id.trim()||"testing"===c.phase,title:l("modelsConfig.testTitle"),style:{padding:"5px 12px",background:"success"===c.phase?"color-mix(in srgb, var(--accent) 18%, var(--bg-panel))":"none",border:`1px solid ${"success"===c.phase?"color-mix(in srgb, var(--accent) 30%, transparent)":"var(--border)"}`,borderRadius:"var(--radius-control)",color:"success"===c.phase?"var(--accent)":t.id.trim()&&"testing"!==c.phase?"var(--text-muted)":"var(--text-dim)",cursor:t.id.trim()&&"testing"!==c.phase?"pointer":"not-allowed",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:5},children:["success"===c.phase&&(0,o.jsx)(b.A,{size:11,"aria-hidden":"true"}),"testing"===c.phase?l("modelsConfig.testing"):"success"===c.phase?l("modelsConfig.ok"):l("modelsConfig.test")]}),(0,o.jsxs)("button",{type:"button",onClick:()=>g(!0),style:{padding:"5px 12px",background:"none",border:"1px solid color-mix(in srgb, var(--accent) 30%, transparent)",borderRadius:"var(--radius-control)",color:"var(--accent)",cursor:"pointer",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:"var(--space-2)"},children:[(0,o.jsx)(v.A,{size:11,"aria-hidden":"true"})," ",l("modelsConfig.remove")]})]})]}),(0,o.jsx)(p.TM,{open:u,onOpenChange:g,title:l("modelsConfig.removeModelTitle",{id:t.id}),description:l("modelsConfig.removeModelBody",{id:t.id}),confirmLabel:l("modelsConfig.remove"),cancelLabel:l("modelsConfig.cancel"),danger:!0,onConfirm:()=>{g(!1),s()}})]})}function ek({provider:e,onRefresh:r}){let{t,tn:i}=(0,a.s9)(),[l,c]=(0,n.useState)({phase:"idle"}),[p,x]=(0,n.useState)(""),u=(0,n.useRef)(null),g=(0,n.useRef)(null);(0,n.useEffect)(()=>{("auth"===l.phase||"prompt"===l.phase)&&setTimeout(()=>g.current?.focus(),50)},[l.phase]),(0,n.useEffect)(()=>{c({phase:"idle"}),x(""),u.current?.close(),u.current=null},[e.id]),(0,n.useEffect)(()=>()=>{u.current?.close()},[]);let v=(0,n.useCallback)(()=>{u.current?.close(),c({phase:"connecting"}),x("");let o=new EventSource(`/api/auth/login/${encodeURIComponent(e.id)}`);u.current=o,o.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}"auth"===t.type?(c({phase:"auth",url:t.url,instructions:t.instructions??null,token:t.token}),s(t.url)&&window.open(t.url,"_blank","noopener,noreferrer")):"device_code"===t.type?(c({phase:"device_code",userCode:t.userCode,verificationUri:t.verificationUri,intervalSeconds:t.intervalSeconds??null,expiresInSeconds:t.expiresInSeconds??null}),s(t.verificationUri)&&window.open(t.verificationUri,"_blank","noopener,noreferrer")):"prompt_request"===t.type?c({phase:"prompt",message:t.message,placeholder:t.placeholder??null,token:t.token}):"select_request"===t.type?c({phase:"select",message:t.message,options:t.options??[],token:t.token}):"progress"===t.type?c({phase:"progress",message:t.message}):"success"===t.type?(o.close(),c({phase:"success"}),r()):"error"===t.type?(o.close(),c({phase:"error",message:t.message})):"cancelled"===t.type&&(o.close(),c({phase:"idle"}))},o.onerror=()=>{o.close(),c(e=>"success"===e.phase?e:{phase:"error",message:t("modelsConfig.connectionLost")})}},[e.id,r,t]),h=(0,n.useCallback)(async(r,o)=>{if(o.trim()){c({phase:"progress",message:t("modelsConfig.verifying")});try{let n=await fetch(`/api/auth/login/${encodeURIComponent(e.id)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:r,code:o.trim()})});if(!n.ok){let e=await n.json().catch(()=>({}));c({phase:"error",message:e.error||e.code?(0,d.K)(e):t("modelsConfig.serverError",{status:n.status})});return}x("")}catch(e){c({phase:"error",message:e instanceof Error?e.message:t("modelsConfig.networkError")})}}},[e.id,t]),m=(0,n.useCallback)(async(r,o)=>{c({phase:"progress",message:t("modelsConfig.continuing")});try{let n=await fetch(`/api/auth/login/${encodeURIComponent(e.id)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:r,code:o})});if(!n.ok){let e=await n.json().catch(()=>({}));c({phase:"error",message:e.error||e.code?(0,d.K)(e):t("modelsConfig.serverError",{status:n.status})})}}catch(e){c({phase:"error",message:e instanceof Error?e.message:t("modelsConfig.networkError")})}},[e.id,t]),f="connecting"===l.phase||"progress"===l.phase||"auth"===l.phase||"device_code"===l.phase||"prompt"===l.phase||"select"===l.phase;return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-6)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,o.jsx)(ep,{children:t("modelsConfig.subscription")}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)"},children:[(0,o.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:e.loggedIn?"var(--status-success)":"var(--border)",display:"inline-block"}}),(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",color:e.loggedIn?"var(--status-success)":"var(--text-dim)"},children:e.loggedIn?t("modelsConfig.connected"):t("modelsConfig.notConnected")})]})]}),(0,o.jsxs)("div",{style:{minHeight:48},children:["idle"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:e.loggedIn?t("modelsConfig.alreadyConnected"):t("modelsConfig.connectAccount",{name:e.name})}),"connecting"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)"},children:t("modelsConfig.openingBrowser")}),"select"===l.phase&&(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:l.message}),(0,o.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-3)"},children:l.options.map(e=>(0,o.jsx)("button",{onClick:()=>m(l.token,e.id),style:{padding:"6px 9px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-md)",textAlign:"left"},children:e.label},e.id))})]}),("auth"===l.phase||"prompt"===l.phase)&&(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:"auth"===l.phase?t("modelsConfig.completeSignIn"):l.message}),"auth"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.5},children:(0,o.jsx)("a",{href:l.url,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--accent)",wordBreak:"break-all"},children:t("modelsConfig.browserNotOpened")})}),(0,o.jsxs)("div",{style:{display:"flex",gap:"var(--space-3)"},children:[(0,o.jsx)("input",{ref:g,value:p,onChange:e=>x(e.target.value),onKeyDown:e=>{"Enter"===e.key&&h(l.token,p)},placeholder:"auth"===l.phase?"http://localhost:1455/auth/callback?code=…":l.placeholder??t("modelsConfig.enterValue"),style:{flex:1,padding:"6px 9px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text)",fontSize:"var(--text-md)",outline:"none",fontFamily:"var(--font-mono)",boxSizing:"border-box"}}),(0,o.jsx)("button",{onClick:()=>h(l.token,p),disabled:!p.trim(),style:{padding:"6px 12px",background:p.trim()?"var(--accent)":"var(--bg-panel)",border:"none",borderRadius:"var(--radius-control)",color:p.trim()?"var(--on-accent)":"var(--text-dim)",cursor:p.trim()?"pointer":"not-allowed",fontSize:"var(--text-md)",fontWeight:600,flexShrink:0},children:t("modelsConfig.submit")})]})]}),"device_code"===l.phase&&(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:t("modelsConfig.deviceCodeInstructions")}),(0,o.jsx)("div",{style:{padding:"8px 10px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text)",fontSize:16,fontWeight:700,fontFamily:"var(--font-mono)",letterSpacing:0},children:l.userCode}),(0,o.jsxs)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.5},children:[(0,o.jsx)("a",{href:l.verificationUri,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--accent)",wordBreak:"break-all"},children:l.verificationUri}),l.expiresInSeconds?" "+i("modelsConfig.expiresInMinutes",Math.ceil(l.expiresInSeconds/60)):""]})]}),"progress"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)"},children:l.message}),"success"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--status-success)"},children:t("modelsConfig.connectedSuccessfully")}),"error"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--status-error)"},children:l.message})]}),(0,o.jsx)("div",{style:{display:"flex",gap:"var(--space-4)"},children:f?(0,o.jsx)("button",{onClick:()=>{u.current?.close(),c({phase:"idle"})},style:{padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-md)"},children:t("modelsConfig.cancel")}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("button",{onClick:v,style:{padding:"5px 14px",background:"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:"var(--on-accent)",cursor:"pointer",fontSize:"var(--text-md)",fontWeight:600},children:e.loggedIn?t("modelsConfig.relogin"):t("modelsConfig.login")}),e.loggedIn&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("button",{type:"button",disabled:!0,title:"Disconnect this OMP account from the OMP terminal",style:{padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-dim)",cursor:"not-allowed",fontSize:"var(--text-md)",opacity:.7},children:t("modelsConfig.disconnect")}),(0,o.jsx)("span",{style:{alignSelf:"center",color:"var(--text-dim)",fontSize:"var(--text-sm)"},children:"Use the OMP terminal to disconnect this account."})]})]})})]})}function eS({provider:e}){let{t:r,tn:t}=(0,a.s9)();return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-6)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,o.jsx)(ep,{children:r("modelsConfig.apiKey")}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)"},children:[(0,o.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:e.configured?"var(--status-success)":"var(--border)",display:"inline-block"}}),(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",color:e.configured?"var(--status-success)":"var(--text-dim)"},children:r(e.configured?"modelsConfig.configured":"modelsConfig.notConfigured")})]})]}),(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:e.configured?t("modelsConfig.providerConfigured",e.modelCount,{name:e.displayName}):r("modelsConfig.providerNotConfigured",{name:e.displayName})}),(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.5},children:(0,o.jsx)(ec,{text:r("modelsConfig.apiKeyManageHint")})})]})}function ew({id:e,size:r}){let t=en[e];if(!t){let t=e.split(/[-_]/).filter(Boolean).slice(0,2).map(e=>e[0]).join("").toUpperCase()||"?";return(0,o.jsx)("span",{"aria-hidden":"true",style:{width:r,height:r,border:"1px solid var(--border)",borderRadius:4,color:"var(--text-dim)",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,fontSize:Math.max(8,Math.floor(.42*r)),fontWeight:700,lineHeight:1},children:t})}return t.hasColor?(0,o.jsx)(t.Icon,{size:r}):(0,o.jsx)(t.Icon,{size:r,style:{color:"var(--text-muted)"}})}function ez({oauthProviders:e,apiKeyProviders:r,onSelectOAuth:t,onSelectApiKey:i,onAddCustom:s,onClose:l}){let{t:d,tn:p}=(0,a.s9)(),[x,u]=(0,n.useState)(""),g=(0,n.useRef)(null),v=x.trim().toLowerCase(),h=e.filter(e=>!e.loggedIn&&(!v||e.name.toLowerCase().includes(v))),m=r.filter(e=>!e.configured&&(!v||e.displayName.toLowerCase().includes(v)||e.id.toLowerCase().includes(v))),f=!v||"custom".includes(v)||"openai-compatible".includes(v)||"anthropic-compatible".includes(v),b=h.length+m.length+ +!!f,y={display:"flex",flexDirection:"row",alignItems:"center",gap:"var(--space-4)",padding:"10px 12px",background:"var(--bg-panel)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",boxSizing:"border-box",cursor:"pointer",minWidth:0,textAlign:"left",transition:"border-color var(--dur-fast) var(--ease-out-warm), background var(--dur-fast) var(--ease-out-warm)",width:"100%"};return(0,o.jsx)(c.lG,{open:!0,onOpenChange:e=>{e||l()},children:(0,o.jsxs)(c.Cf,{ariaLabel:d("modelsConfig.addProvider"),style:{width:820,maxWidth:"min(92vw, 820px)",maxHeight:"min(72dvh, calc(100dvh - 32px))",padding:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,o.jsx)(c.L3,{style:{margin:"14px 18px 8px",fontSize:18},children:d("modelsConfig.addProvider")}),(0,o.jsx)("div",{style:{padding:"8px 14px 12px",flexShrink:0},children:(0,o.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"6px 10px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)"},children:(0,o.jsx)("input",{ref:g,value:x,onChange:e=>u(e.target.value),placeholder:d("modelsConfig.searchProviders"),style:{flex:1,background:"none",border:"none",outline:"none",color:"var(--text)",fontSize:"var(--text-base)",boxSizing:"border-box",minWidth:0}})})}),(0,o.jsx)("div",{style:{flex:1,overflowY:"auto",padding:"4px 14px 14px"},children:0===b?(0,o.jsx)("div",{style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.noProvidersMatch")}):(0,o.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(min(240px, 100%), 1fr))",gap:"var(--space-4)"},children:[f&&(0,o.jsx)("div",{style:{gridColumn:"1 / -1",fontSize:"var(--text-xs)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.07em"},children:d("modelsConfig.customSection")}),f&&(0,o.jsxs)("button",{type:"button",onClick:()=>{s(),l()},style:y,onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.background="var(--bg-hover)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600,color:"var(--text)",lineHeight:1.3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d("modelsConfig.openaiAnthropicCompatible")}),(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",marginTop:2},children:d("modelsConfig.customEndpointFormat")})]}),(0,o.jsx)("span",{style:{width:26,height:26,borderRadius:"var(--radius-control)",background:"var(--bg-hover)",border:"1px dashed var(--border)",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:(0,o.jsx)(j.A,{size:13,"aria-hidden":"true"})})]}),h.length>0&&(0,o.jsx)("div",{style:{gridColumn:"1 / -1",paddingTop:6*!!f,fontSize:"var(--text-xs)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.07em"},children:d("modelsConfig.subscriptions")}),h.map(e=>(0,o.jsxs)("button",{type:"button",onClick:()=>{t(e.id),l()},style:y,onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.background="var(--bg-hover)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600,color:"var(--text)",lineHeight:1.3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",marginTop:2},children:"OAuth"})]}),(0,o.jsx)(ew,{id:e.id,size:28})]},e.id)),m.length>0&&(0,o.jsx)("div",{style:{gridColumn:"1 / -1",paddingTop:6*(h.length>0),fontSize:"var(--text-xs)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.07em"},children:d("modelsConfig.apiKey")}),m.map(e=>(0,o.jsxs)("button",{type:"button",onClick:()=>{i(e.id),l()},style:y,onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.background="var(--bg-hover)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600,color:"var(--text)",lineHeight:1.3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.displayName}),(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",marginTop:2},children:p("modelsConfig.modelCount",e.modelCount)})]}),(0,o.jsx)(ew,{id:e.id,size:28})]},e.id))]})})]})})}function eI(e){return Array.isArray(e)?`[${e.map(eI).join(",")}]`:e&&"object"==typeof e?`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${eI(e[r])}`).join(",")}}`:JSON.stringify(e)??"undefined"}function eT({onSaved:e,onDirtyChange:r}){let{t}=(0,a.s9)(),s=(0,i.a)(),[c,p]=(0,n.useState)({providers:{}}),x=(0,n.useRef)(c),u=(0,n.useCallback)(e=>{let r=x.current,t="function"==typeof e?e(r):e;t!==r&&(x.current=t,p(t))},[]),g=(0,n.useRef)(eI({providers:{}})),[v,h]=(0,n.useState)(!0),[m,b]=(0,n.useState)(!1),[y,z]=(0,n.useState)(null),[T,R]=(0,n.useState)([]),[A,P]=(0,n.useState)(!1),[M,O]=(0,n.useState)(null),[$,W]=(0,n.useState)([]),[E,N]=(0,n.useState)([]),[L,U]=(0,n.useState)([]),[D,H]=(0,n.useState)([]),[K,B]=(0,n.useState)(!0),[F,_]=(0,n.useState)(null),[J,q]=(0,n.useState)(!1),[Y,V]=(0,n.useState)(null),[X,Z]=(0,n.useState)(null),G=(0,n.useCallback)(()=>{fetch("/api/auth/providers").then(e=>e.json()).then(e=>{Array.isArray(e.providers)&&W(e.providers)}).catch(()=>{})},[]),Q=(0,n.useCallback)(()=>{fetch("/api/auth/all-providers").then(e=>e.json()).then(e=>{Array.isArray(e.providers)&&N(e.providers)}).catch(()=>{})},[]),ee=(0,n.useCallback)(async()=>{B(!0);try{let e=await fetch("/api/models",{cache:"no-store"}),r=e.ok?await e.json():null;U(r?.modelList??[]),H(r?.connectedProviders??[])}catch{U([]),H([])}finally{B(!1)}},[]),er=(0,n.useCallback)(async(e=eI(x.current))=>{h(!0);try{let r=await fetch("/api/models-config"),t=await r.json();if(eI(x.current)!==e)return;if(t.parseError){Z({message:t.parseError,path:t.path}),u({providers:{}}),O(null);return}if(!r.ok)throw Error(`HTTP ${r.status}`);Z(null),z(null),R([]);let o=t.providers?t:{...t,providers:{}};g.current=eI(o),u(o);let n=Object.keys(o.providers??{});n.length>0?O({type:"provider",name:n[0]}):O(null)}catch{}finally{h(!1)}},[u]);(0,n.useEffect)(()=>{er(),G(),Q(),ee()},[er,G,Q,ee]),(0,n.useEffect)(()=>{r?.(g.current!==eI(c))},[c,r]),(0,n.useEffect)(()=>{try{let e=JSON.parse(localStorage.getItem(ea)??"null");Array.isArray(e)&&_(new Set(e.filter(e=>"string"==typeof e)))}catch{}},[]);let et=(0,n.useCallback)((e,r)=>{_(t=>{let o=new Set(t??L.map(e=>`${e.provider}:${e.id}`)),n=`${e.provider}:${e.id}`;return r?o.add(n):o.delete(n),localStorage.setItem(ea,JSON.stringify([...o])),window.dispatchEvent(new Event("omp-composer-models-change")),o})},[L]),eo=(0,n.useCallback)((e,r)=>{_(t=>{let o=new Set(t??L.map(e=>`${e.provider}:${e.id}`));for(let t of L){if(t.provider!==e)continue;let n=`${t.provider}:${t.id}`;r?o.add(n):o.delete(n)}return localStorage.setItem(ea,JSON.stringify([...o])),window.dispatchEvent(new Event("omp-composer-models-change")),o})},[L]),en=(0,n.useCallback)(async e=>{let r=await fetch("/api/providers/enable",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e})}),t=await r.json();if(!r.ok||t.error)throw Error(t.error||`HTTP ${r.status}`);await ee()},[ee]),es=(0,n.useCallback)(()=>{let e="new-provider",r=1;for(;c.providers?.[e];)e=`new-provider-${r++}`;u(r=>({...r,providers:{...r.providers??{},[e]:{api:"openai-completions"}}})),O({type:"provider",name:e})},[c.providers,u]),ed=(0,n.useCallback)((e,r)=>{u(t=>({...t,providers:{...t.providers??{},[e]:r}}))},[u]),ec=(0,n.useCallback)((e,r)=>{u(t=>{let o=Object.entries(t.providers??{}),n=o.findIndex(([r])=>r===e);return -1===n?t:(o[n]=[r,o[n][1]],{...t,providers:Object.fromEntries(o)})}),O(t=>t?"provider"===t.type&&t.name===e?{type:"provider",name:r}:"model"===t.type&&t.providerName===e?{...t,providerName:r}:t:t)},[u]),ev=(0,n.useCallback)(e=>{u(r=>{let t={...r.providers??{}};return delete t[e],{...r,providers:t}}),u(e=>{let r=Object.keys(e.providers??{});return O(r.length>0?{type:"provider",name:r[0]}:null),e})},[u]),eh=(0,n.useCallback)(e=>{u(r=>{let t=r.providers?.[e]??{},o=[...t.models??[],{id:""}];return{...r,providers:{...r.providers??{},[e]:{...t,models:o}}}}),u(r=>{let t=(r.providers?.[e]?.models?.length??1)-1;return O({type:"model",providerName:e,index:t}),r})},[u]),ef=(0,n.useCallback)((e,r,t)=>{let o,n=(o={...r,id:r.id,...void 0!==r.cost?{cost:{...r.cost}}:{}},delete o.originalId,o);u(r=>{let o=r.providers?.[e]??{},i=[...o.models??[],n],a={...o,models:i};return t&&!o.baseUrl&&(a.baseUrl=t),{...r,providers:{...r.providers??{},[e]:a}}}),u(r=>{let t=(r.providers?.[e]?.models?.length??1)-1;return O({type:"model",providerName:e,index:t}),r}),V(null)},[u]),eb=(0,n.useCallback)((e,r,t)=>{u(o=>{let n=o.providers?.[e]??{},i=[...n.models??[]];return i[r]=t,{...o,providers:{...o.providers??{},[e]:{...n,models:i}}}})},[u]),ey=(0,n.useCallback)((e,r)=>{u(t=>{let o=t.providers?.[e]??{},n=[...o.models??[]];return n.splice(r,1),{...t,providers:{...t.providers??{},[e]:{...o,models:n.length?n:void 0}}}}),O({type:"provider",name:e})},[u]),ej=(0,n.useCallback)(async()=>{if(X)return;let o=x.current,n=function(e){if(!e.providers)return e;let r=!1,t={};for(let[o,n]of Object.entries(e.providers)){let e=n.models;if(!e?.some(l)){t[o]=n;continue}r=!0;let i=e.filter(e=>!l(e));t[o]={...n,models:i.length>0?i:void 0}}return r?{...e,providers:t}:e}(o),i=eI(o),a=eI(n);b(!0),z(null),R([]),P(!1);try{let o=await fetch("/api/models-config?mode=full",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),s=await o.json();if(!o.ok||s.error){let e=Array.isArray(s.issues)?s.issues.filter(e=>"string"==typeof e.path&&"string"==typeof e.message):[],r=e.map(e=>e.path?`${e.path}: ${e.message}`:e.message).join("; ");R(e);let n=s.error||s.code?(0,d.K)(s):`HTTP ${o.status}`;z(n),w.oR.error(t("modelsConfig.saveErrorTitle"),r?`${n}: ${r}`:n),"models_config_unparseable"===s.code&&Z({message:s.error??(0,d.K)(s)})}else{g.current=a;let o=eI(x.current)!==i;o&&r?.(!0),o||(u(n),r?.(!1),await er(a)),await ee(),Q(),e?.(),o&&r?.(!0),P(!0),setTimeout(()=>P(!1),2e3),w.oR.success(t("modelsConfig.saveSuccessTitle"))}}catch(r){let e=r instanceof Error?r.message:String(r);z(e),w.oR.error(t("modelsConfig.saveErrorTitle"),e)}finally{b(!1)}},[Q,er,ee,r,e,X,u,t]),eR=Object.entries(c.providers??{}),eA=$.filter(e=>e.loggedIn),eP=E.filter(e=>e.configured),eM=L.reduce((e,r)=>((e[r.provider]??=[]).push(r),e),{}),eO=(()=>{if(!M)return null;if("oauth"===M.type){let e=$.find(e=>e.id===M.providerId);return e?(0,o.jsx)(ek,{provider:e,onRefresh:()=>{G(),Q(),ee()}},e.id):null}if("apikey"===M.type){let e=E.find(e=>e.id===M.providerId);return e?(0,o.jsx)(eS,{provider:e},e.id):null}if("roles"===M.type)return(0,o.jsx)(el,{models:L});if("registry"===M.type)return(0,o.jsx)(ei,{models:L,connectedProviders:D,onChanged:ee});if("picker"===M.type)return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-5)"},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)(ep,{children:"Composer Model Picker"}),(0,o.jsx)("p",{style:{margin:"4px 0 0",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.5},children:"Choose which native OMP models are available in the composer. This changes only omp-web's picker, not OMP's model registry."})]}),(0,o.jsx)("button",{type:"button",onClick:()=>void ee(),disabled:K,title:"Refresh OMP runtime models",style:{padding:7,border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text-muted)",cursor:K?"wait":"pointer"},children:(0,o.jsx)(f.A,{size:14,"aria-hidden":"true"})})]}),K?(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"Loading OMP runtime models..."}):Object.entries(eM).map(([e,r])=>{let t=r.every(e=>null===F||F.has(`${e.provider}:${e.id}`)),n=r.some(e=>null===F||F.has(`${e.provider}:${e.id}`));return(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"9px 11px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:[(0,o.jsx)("input",{type:"checkbox",checked:t,ref:e=>{e&&(e.indeterminate=n&&!t)},onChange:r=>eo(e,r.target.checked),"aria-label":`Show all ${e} models in composer`}),(0,o.jsx)(ew,{id:e,size:15}),(0,o.jsx)("span",{children:e}),(0,o.jsxs)("span",{style:{marginLeft:"auto",color:"var(--text-dim)",fontSize:"var(--text-sm)",fontWeight:400},children:[r.length," model",1===r.length?"":"s"]})]}),(0,o.jsx)("div",{style:{padding:"4px 0"},children:r.map(e=>(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:9,padding:"7px 11px",color:"var(--text-muted)",cursor:"pointer"},children:[(0,o.jsx)("input",{type:"checkbox",checked:null===F||F.has(`${e.provider}:${e.id}`),onChange:r=>et(e,r.target.checked),"aria-label":`Show ${e.provider}/${e.id} in composer`}),(0,o.jsx)("span",{style:{minWidth:0,flex:1,fontSize:"var(--text-md)"},children:e.name||e.id}),(0,o.jsxs)("code",{style:{color:"var(--text-dim)",fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",whiteSpace:"nowrap"},children:[e.provider,"/",e.id]})]},`${e.provider}:${e.id}`))})]},e)}),!K&&0===L.length&&(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"OMP did not report any configured models."}),D.filter(e=>!eM[e.id]).map(e=>(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",padding:12},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:[(0,o.jsx)(ew,{id:e.id,size:15}),e.name]}),(0,o.jsx)("p",{style:{margin:"6px 0 0",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.5},children:e.disabled?"Connected, but disabled in OMP. Enable it to discover its models.":"Connected, but OMP has not reported models for this provider yet."}),e.disabled&&(0,o.jsx)("button",{type:"button",onClick:()=>void en(e.id).catch(e=>w.oR.error("Could not enable provider",e instanceof Error?e.message:String(e))),style:{marginTop:8,padding:"6px 10px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-md)"},children:"Enable in OMP"})]},e.id))]});if("provider"===M.type){let e=c.providers?.[M.name];return e?(0,o.jsx)(em,{name:M.name,provider:e,onChange:e=>ed(M.name,e),onRename:e=>ec(M.name,e),onDelete:()=>ev(M.name)},M.name):null}let e=c.providers?.[M.providerName],r=e?.models?.[M.index];return r?(0,o.jsx)(eC,{providerName:M.providerName,provider:e,model:r,onChange:e=>eb(M.providerName,M.index,e),onDelete:()=>ey(M.providerName,M.index)},`${M.providerName}-${M.index}`):null})();return(0,o.jsxs)(o.Fragment,{children:[X?(0,o.jsxs)("div",{style:{flex:1,overflowY:"auto",padding:"var(--space-8)",display:"flex",flexDirection:"column",gap:"var(--space-5)"},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-base)",fontWeight:600,color:"var(--status-error)"},children:t("modelsConfig.parseErrorTitle")}),(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.6},children:t("modelsConfig.parseErrorBody")}),X.path&&(0,o.jsx)("code",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",fontFamily:"var(--font-mono)",wordBreak:"break-all"},children:X.path}),(0,o.jsx)("pre",{style:{margin:0,padding:"10px 12px",background:"var(--bg-panel)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",whiteSpace:"pre-wrap",wordBreak:"break-word",overflowX:"auto"},children:X.message}),(0,o.jsx)("button",{onClick:()=>{er()},disabled:v,style:{alignSelf:"flex-start",padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",cursor:v?"default":"pointer",fontSize:"var(--text-md)"},children:v?t("modelsConfig.loading"):t("modelsConfig.reload")})]}):(0,o.jsxs)("div",{style:{flex:1,display:"flex",flexDirection:s?"column":"row",overflow:"hidden"},children:[(0,o.jsxs)("div",{style:{width:s?"100%":235,maxHeight:s?"40vh":void 0,borderRight:s?"none":"1px solid var(--border)",borderBottom:s?"1px solid var(--border)":"none",display:"flex",flexDirection:"column",flexShrink:0,background:"var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,overflowY:"auto",padding:"8px 6px"},children:[(0,o.jsx)(ex,{icon:C.A,label:"Native OMP registry",selected:M?.type==="registry",onClick:()=>O({type:"registry"})}),(0,o.jsx)(ex,{icon:k.A,label:"Composer model picker",selected:M?.type==="picker",onClick:()=>O({type:"picker"})}),(0,o.jsx)(ex,{icon:S.A,label:"OMP model roles",selected:M?.type==="roles",onClick:()=>O({type:"roles"})}),(eA.length>0||eP.length>0)&&(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)",padding:"14px 10px 6px",color:"var(--text-dim)",fontSize:"var(--text-xs)",fontWeight:700,letterSpacing:"0.06em",textTransform:"uppercase"},children:[(0,o.jsx)("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--accent)",flexShrink:0}}),"Connected through OMP"]}),eA.map(e=>{let r=M?.type==="oauth"&&M.providerId===e.id;return(0,o.jsxs)("button",{type:"button",onClick:()=>O({type:"oauth",providerId:e.id}),style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 10px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:r?"var(--bg-selected)":"none",fontWeight:r?600:400},...eu(r),children:[(0,o.jsx)(ew,{id:e.id,size:16}),(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",color:"var(--text)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,o.jsx)("span",{title:`OMP OAuth provider: ${e.id}`,style:{padding:"2px 5px",borderRadius:4,background:"var(--bg-subtle)",color:"var(--text-muted)",fontSize:9,fontWeight:500,flexShrink:0},children:"OAuth"})]},e.id)}),eP.map(e=>{let r=M?.type==="apikey"&&M.providerId===e.id;return(0,o.jsxs)("button",{type:"button",onClick:()=>O({type:"apikey",providerId:e.id}),style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 10px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:r?"var(--bg-selected)":"none",fontWeight:r?600:400},...eu(r),children:[(0,o.jsx)(ew,{id:e.id,size:16}),(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",color:"var(--text)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.displayName}),(0,o.jsx)("span",{title:`OMP API-key provider: ${e.id}`,style:{padding:"2px 5px",borderRadius:4,background:"var(--bg-subtle)",color:"var(--text-muted)",fontSize:9,fontWeight:500,flexShrink:0},children:"API key"})]},e.id)}),(eA.length>0||eP.length>0)&&eR.length>0&&(0,o.jsx)("div",{style:{margin:"8px 10px",borderTop:"1px solid var(--border)"}}),eR.length>0&&(0,o.jsx)("div",{style:{padding:"10px 10px 4px",fontSize:"var(--text-xs)",fontWeight:700,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.06em"},children:"Configured Providers"}),v?(0,o.jsx)("div",{style:{padding:"10px 8px",fontSize:"var(--text-md)",color:"var(--text-muted)"},children:t("modelsConfig.loading")}):eR.map(([e,r])=>{let n=M?.type==="provider"&&M.name===e,i=r.models??[];return(0,o.jsxs)("div",{style:{marginBottom:6,padding:"4px 6px",borderRadius:"var(--radius-control)",background:n?"var(--bg-panel)":"transparent",border:n?"1px solid var(--border)":"1px solid transparent"},children:[(0,o.jsxs)("button",{type:"button",onClick:()=>O({type:"provider",name:e}),style:{display:"flex",alignItems:"center",gap:7,padding:"6px 8px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:n?"var(--bg-selected)":"none"},...eu(n),children:[(0,o.jsx)(ew,{id:e,size:15}),(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",fontWeight:n?600:500,color:"var(--text)",fontFamily:"var(--font-mono)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),(0,o.jsxs)("span",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",padding:"1px 5px",borderRadius:4,background:"var(--bg-subtle)"},children:[i.length," model",1===i.length?"":"s"]})]}),i.map((r,n)=>{let i=M?.type==="model"&&M.providerName===e&&M.index===n;return(0,o.jsxs)("button",{type:"button",onClick:()=>O({type:"model",providerName:e,index:n}),style:{display:"flex",alignItems:"center",gap:"var(--space-3)",padding:"5px 8px 5px 28px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:i?"var(--bg-selected)":"none",marginTop:1},...eu(i),children:[(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",color:r.id?"var(--text-muted)":"var(--text-dim)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.id||t("modelsConfig.newModel")}),r.reasoning&&(0,o.jsx)("span",{style:{fontSize:9,padding:"1px 4px",background:"var(--accent-subtle)",color:"var(--accent)",borderRadius:3,flexShrink:0},children:"T"})]},n)}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)",padding:"6px 8px 4px 10px",marginTop:2,flexWrap:"nowrap"},children:[(0,o.jsxs)("button",{type:"button",onClick:r=>{r.stopPropagation(),eh(e)},style:{display:"inline-flex",alignItems:"center",gap:"var(--space-2)",padding:"3px 8px",borderRadius:"var(--radius-control)",cursor:"pointer",color:"var(--text-muted)",border:"1px solid var(--border)",background:"var(--bg-subtle)",fontFamily:"inherit",fontSize:"var(--text-sm)",whiteSpace:"nowrap",flexShrink:0},...eg,children:[(0,o.jsx)(j.A,{size:11,"aria-hidden":"true"}),(0,o.jsx)("span",{children:t("modelsConfig.addModel")})]}),(0,o.jsxs)("button",{type:"button",onClick:r=>{r.stopPropagation(),V(e)},style:{display:"inline-flex",alignItems:"center",gap:"var(--space-2)",padding:"3px 8px",borderRadius:"var(--radius-control)",cursor:"pointer",color:"var(--text-muted)",border:"1px solid var(--border)",background:"var(--bg-subtle)",fontFamily:"inherit",fontSize:"var(--text-sm)",whiteSpace:"nowrap",flexShrink:0},...eg,children:[(0,o.jsx)(k.A,{size:11,"aria-hidden":"true"}),(0,o.jsx)("span",{children:t("modelsConfig.addFromCatalog")})]})]})]},e)})]}),(0,o.jsx)("div",{style:{borderTop:"1px solid var(--border)",padding:"8px 6px"},children:(0,o.jsx)("button",{onClick:()=>q(!0),style:{display:"flex",alignItems:"center",justifyContent:"center",gap:5,width:"100%",padding:"6px 0",background:"none",border:"1px dashed var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-md)"},onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.color="var(--accent)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.color="var(--text-muted)"},children:t("modelsConfig.addProvider")})})]}),(0,o.jsx)("div",{style:{flex:1,overflowY:"auto",padding:20},children:v?(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("div",{className:"skeleton",style:{height:18,width:"40%"}}),(0,o.jsx)("div",{className:"skeleton",style:{height:12,width:"70%"}}),(0,o.jsx)("div",{className:"skeleton",style:{height:12,width:"55%"}}),(0,o.jsx)("div",{className:"skeleton",style:{height:90,width:"100%"}})]}):eO??(0,o.jsx)("div",{style:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-dim)",fontSize:"var(--text-base)"},children:t("modelsConfig.selectProviderOrModel")})})]}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:10,padding:"10px 18px",borderTop:"1px solid var(--border)",flexShrink:0},children:[(y||T.length>0)&&(0,o.jsxs)("div",{role:"alert",style:{fontSize:"var(--text-md)",color:"var(--status-error)",flex:1,minWidth:0},children:[y,T.length>0&&(0,o.jsx)("ul",{style:{margin:"4px 0 0",paddingLeft:18},children:T.map((e,r)=>(0,o.jsxs)("li",{children:[e.path?`${e.path}: `:"",e.message]},`${e.path}-${r}`))})]}),(0,o.jsxs)("button",{onClick:ej,disabled:m||A||null!==X,style:{position:"relative",padding:"6px 16px",minWidth:92,background:A?"var(--status-success)":m||X?"var(--bg-panel)":"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:A?"var(--on-accent)":m||X?"var(--text-muted)":"var(--on-accent)",cursor:m||A||X?"default":"pointer",fontSize:"var(--text-base)",fontWeight:600,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"var(--space-3)",transition:"background-color var(--dur-med) var(--ease-out-warm), color var(--dur-med) var(--ease-out-warm)",animation:A?"saved-pop var(--dur-theme) var(--ease-out-warm)":void 0},children:[A&&(0,o.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",style:{strokeDasharray:18,animation:"saved-check-draw 0.35s ease forwards",flexShrink:0},children:(0,o.jsx)("polyline",{points:"20 6 9 17 4 12"})}),(0,o.jsx)("span",{children:A?t("modelsConfig.saved"):m?t("modelsConfig.saving"):t("modelsConfig.save")})]})]}),J&&(0,o.jsx)(ez,{oauthProviders:$,apiKeyProviders:E,onSelectOAuth:e=>O({type:"oauth",providerId:e}),onSelectApiKey:e=>O({type:"apikey",providerId:e}),onAddCustom:es,onClose:()=>q(!1)}),null!==Y&&(0,o.jsx)(I,{open:!0,providerName:Y,providerBaseUrl:c.providers?.[Y]?.baseUrl??"",existingIds:new Set((c.providers?.[Y]?.models??[]).map(e=>e.id)),onAdd:(e,r)=>ef(Y,e,r),onClose:()=>V(null)})]})}}}]);