@deepseekcode/cli 1.0.28 → 1.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1489 -1440
- package/package.json +1 -1
- package/web/dist/assets/{AutomationView-CpFBgFvV.js → AutomationView-BJSLQ2Ka.js} +1 -1
- package/web/dist/assets/{ChannelConfigView-DGK82bWj.js → ChannelConfigView-DG4_15oh.js} +1 -1
- package/web/dist/assets/{ConnectorsView-5kzDUnd8.js → ConnectorsView-ByedXSa-.js} +1 -1
- package/web/dist/assets/{FileTreeView-BQfRRAXr.js → FileTreeView-DPA2dhx_.js} +1 -1
- package/web/dist/assets/{HookConfigView-CdQVgzog.js → HookConfigView-BJnvqm3N.js} +1 -1
- package/web/dist/assets/ModelsView-BBbmRxwR.js +1 -0
- package/web/dist/assets/{PluginsView-bQipmAy8.js → PluginsView-DxIWxsB-.js} +1 -1
- package/web/dist/assets/{SessionGrid-DFVjPnhc.js → SessionGrid-D-1XpCZg.js} +27 -27
- package/web/dist/assets/{SettingsPanel-CpmNWZmn.js → SettingsPanel-ivpxRR6O.js} +1 -1
- package/web/dist/assets/{SkillsView-DLGgMIsT.js → SkillsView-Cpr_kpor.js} +1 -1
- package/web/dist/assets/{TemplatesTab-4085BhAx.js → TemplatesTab-Cvyxqayr.js} +1 -1
- package/web/dist/assets/{TerminalView-BVZAuLTB.js → TerminalView-DTN8hmcS.js} +1 -1
- package/web/dist/assets/{ToolsView-DeCt1EIB.js → ToolsView-D_FET-NB.js} +1 -1
- package/web/dist/assets/{index-Bg6EQpr3.js → index-C7rIgpwO.js} +44 -44
- package/web/dist/index.html +1 -1
- package/web/dist/assets/ModelsView-Dpwx3f-Q.js +0 -1
package/web/dist/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<meta name="theme-color" content="#0d1117" />
|
|
13
13
|
<meta name="color-scheme" content="dark light" />
|
|
14
14
|
<title>DeepSeekCode Web</title>
|
|
15
|
-
<script type="module" crossorigin src="/assets/index-
|
|
15
|
+
<script type="module" crossorigin src="/assets/index-C7rIgpwO.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/icons-Cu8fYt4q.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/markdown-Bym7wmT0.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/react-vendor-D76F8wnc.js">
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./markdown-Bym7wmT0.js";import{a as o,h as te,a2 as Hs,z as Me,O as ae,X as cs,ap as qs,C as be,aq as Ie,ar as is,as as _s,ae as Vs,ag as Ws,at as Ys,au as Qs,D as Js,aj as Xs,av as us,$ as Zs,aw as et}from"./icons-Cu8fYt4q.js";import{a as h,u as st,t as T,M as ms,P as tt}from"./index-Bg6EQpr3.js";import"./react-vendor-D76F8wnc.js";import"./state-CZakZ3-m.js";import"./panels-BEKHl5l-.js";function at(){const[y,b]=o.useState([]),[C,t]=o.useState("1.0"),[P,je]=o.useState(!0),[f,le]=o.useState(!0),[ke,W]=o.useState(null),Y=o.useCallback(async()=>{le(!0),W(null);try{const g=await h.providers.presets();g.success&&g.data?(b(Array.isArray(g.data.providers)?g.data.providers:[]),t(g.data.version||"1.0"),je(g.data.customSupported!==!1)):W(g.error||"获取 Provider 列表失败")}catch(g){W(g instanceof Error?g.message:"未知错误")}finally{le(!1)}},[]);return o.useEffect(()=>{Y()},[Y]),{presets:y,loading:f,error:ke,version:C,customSupported:P,reload:Y}}const lt={providerKey:"",apiKeys:"",modelIds:"",baseUrl:"",apiType:"",fullPath:!1,setDefault:!1,modelOverrides:{}},xs=tt,fe={"openai-chat-completions":"OpenAI Chat","openai-completions":"OpenAI Compatible","openai-responses":"OpenAI Responses","anthropic-messages":"Anthropic Messages","codex-responses":"Codex (本机登录)","claude-code":"Claude Code (本机登录)"};function J(y){return y.trim().split("|")[0].trim()}function rt(y){const b=y.toLowerCase();return b.startsWith("claude-code://")||b.includes("/backend-api/codex")?b.startsWith("claude-code://")?"claude-code":"codex-responses":b.includes("/anthropic")||b.includes("/coding")||b.includes("/claude")||b.includes("/messages")?"anthropic-messages":b.includes("/responses")?"openai-responses":"openai-completions"}function Ue(y){if(!y)return{};const b={};for(const C of y.models){const t={};C.apiType&&C.apiType!==y.apiType&&(t.apiType=C.apiType),C.baseUrl&&(t.baseUrl=C.baseUrl),Object.keys(t).length>0&&(b[C.id]=t)}return b}const ge={"opencode-free":5,deepseek:10,moonshotai:20,"moonshotai-cn":21,"kimi-for-coding":22,zhipuai:30,zai:31,"alibaba-cn":40,alibaba:41,minimax:50,"minimax-cn":51,moark:60,siliconflow:70,"siliconflow-cn":71,"stepfun-ai":80,stepfun:81,modelscope:90,openai:100,anthropic:110,google:120,"google-vertex":121,meta:130,mistral:140,groq:150,xai:160,cohere:170,openrouter:180,huggingface:190};function mt(){var ss,ts,as,ls,rs,os;const{presets:y,loading:b,reload:C}=at(),{t}=st(),[P,je]=o.useState([]),[f,le]=o.useState(null),[ke,W]=o.useState(!0),[Y,g]=o.useState(null),[Ae,Ke]=o.useState(null),[n,hs]=o.useState(null),[M,bs]=o.useState([]),[fs,G]=o.useState(!1),[Ee,H]=o.useState("select"),[D,R]=o.useState(null),[m,j]=o.useState(lt),[gs,E]=o.useState(""),[$e,Fe]=o.useState(!1),[ze,$]=o.useState(null),[vs,X]=o.useState(!1),[re,Le]=o.useState(!1),[Z,oe]=o.useState(""),[Re,Oe]=o.useState({}),[Ne,Be]=o.useState(!1),[F,q]=o.useState([]),[ne,I]=o.useState(new Set),[Ge,O]=o.useState(null),[de,ee]=o.useState(""),[we,He]=o.useState(!1),[ce,B]=o.useState(null),_=o.useCallback(async()=>{try{const s=await h.config.provider.get();s.success&&s.data&&(hs(s.data),bs(Array.isArray(s.data.entries)?s.data.entries:[]))}catch{}},[]),k=o.useCallback(async()=>{W(!0),g(null);try{const[s,a]=await Promise.all([h.models.list(),h.system.status()]);if(await _(),s.success&&s.data&&Array.isArray(s.data.models)&&je(s.data.models),a.success&&a.data){const l=a.data.models||{total:0,online:0,offline:0};le({overallStatus:l.offline===0?"healthy":l.online>0?"degraded":"unhealthy",healthRate:l.total>0?l.online/l.total:0,healthyInstances:l.online,totalInstances:l.total,totalRequests:0})}}catch{g(t("models.loadFailed"))}finally{W(!1)}},[_,t]);o.useEffect(()=>{k()},[k]),o.useEffect(()=>{const s=()=>{k(),_()};return window.addEventListener("models-updated",s),()=>window.removeEventListener("models-updated",s)},[k,_]);const U=o.useCallback(s=>`${s.provider}:${s.id}`,[]),ys=o.useCallback(s=>Re[U(s)]||{inputTokens:0,outputTokens:0},[U,Re]),qe=o.useCallback((s,a,l)=>{const c=U(s);Oe(r=>{var d,i;return{...r,[c]:{inputTokens:a==="inputTokens"?l:((d=r[c])==null?void 0:d.inputTokens)||0,outputTokens:a==="outputTokens"?l:((i=r[c])==null?void 0:i.outputTokens)||0}}})},[U]),js=o.useCallback(s=>{Oe(a=>({...a,[U(s)]:{inputTokens:0,outputTokens:0}}))},[U]),z=o.useMemo(()=>{const s=[...y];return s.find(a=>a.key==="custom")||s.push({key:"custom",name:"Custom",baseUrl:"",apiType:"openai-completions",defaultModel:"",isCustom:!0}),s},[y]),ie=o.useMemo(()=>[...z].sort((s,a)=>{if(s.isCustom)return-1;if(a.isCustom)return 1;const l=ge[s.key],c=ge[a.key];return l!==void 0&&c!==void 0?l-c:l!==void 0?-1:c!==void 0?1:s.name.localeCompare(a.name)}),[z]),_e=o.useMemo(()=>{const s=Z.trim().toLowerCase();return s?ie.filter(a=>a.name.toLowerCase().includes(s)||a.key.toLowerCase().includes(s)||(a.defaultModel||"").toLowerCase().includes(s)||(a.baseUrl||"").toLowerCase().includes(s)||(a.models||[]).some(l=>String(l).toLowerCase().includes(s))):ie},[ie,Z]),L=o.useMemo(()=>{var c,r,d,i;const s=(n==null?void 0:n.providers)||{},a=new Set(z.map(u=>u.key)),l=Object.entries(s).filter(([u])=>!a.has(u));if(l.length!==0)return{keys:l.map(([u])=>u),modelCount:l.reduce((u,[,v])=>u+(v.modelCount||0),0),hasApiKey:l.some(([,u])=>u.hasApiKey),baseUrl:((r=(c=l.find(([,u])=>u.baseUrl))==null?void 0:c[1])==null?void 0:r.baseUrl)||"",apiType:((i=(d=l.find(([,u])=>u.apiType))==null?void 0:d[1])==null?void 0:i.apiType)||"openai-completions"}},[n,z]),V=D==="custom"?m.providerKey.trim():D||"",Ce=o.useMemo(()=>V?P.filter(s=>s.provider===V):[],[P,V]),ks=o.useMemo(()=>{const s=new Map;for(const l of P)s.has(l.provider)||s.set(l.provider,[]),s.get(l.provider).push(l);for(const l of M)s.has(l.key)||s.set(l.key,[]);const a=[...s.keys()];return a.sort((l,c)=>{const r=ge[l],d=ge[c];return r!==void 0&&d!==void 0?r-d:r!==void 0?-1:d!==void 0?1:l.localeCompare(c)}),a.map(l=>({provider:l,models:s.get(l)||[]}))},[P,M]),Ve=o.useCallback(s=>{var i,u;const a=(i=n==null?void 0:n.providers)==null?void 0:i[s.key],l=M.find(v=>v.key===s.key),c=P.filter(v=>v.provider===s.key).map(v=>v.id),r=((u=s.models)==null?void 0:u.slice(0,3).join(", "))||s.defaultModel,d=c.length>0?c.join(", "):r;R(s.key),E(""),j({providerKey:s.key,apiKeys:"",modelIds:d,baseUrl:(a==null?void 0:a.baseUrl)||s.baseUrl,apiType:(a==null?void 0:a.apiType)||s.apiType,fullPath:(a==null?void 0:a.fullPath)===!0,setDefault:(n==null?void 0:n.defaultProvider)!==s.key,modelOverrides:Ue(l)}),H("form"),G(!0),$(null),X(!1),q([]),I(new Set),O(null),ee("")},[P,n,M]),Ns=o.useCallback(s=>{var r;const a=(r=n==null?void 0:n.providers)==null?void 0:r[s],l=M.find(d=>d.key===s),c=P.filter(d=>d.provider===s).map(d=>d.id).join(", ");R("custom"),E(s),j({providerKey:s,apiKeys:"",modelIds:c,baseUrl:(a==null?void 0:a.baseUrl)||"",apiType:(a==null?void 0:a.apiType)||"",fullPath:(a==null?void 0:a.fullPath)===!0,setDefault:(n==null?void 0:n.defaultProvider)!==s,modelOverrides:Ue(l)}),$(null),X(!1),q([]),I(new Set),O(null),ee("")},[n,P,M]),Pe=o.useCallback(()=>{R("custom"),E(""),j({providerKey:"",apiKeys:"",modelIds:"",baseUrl:"",apiType:"",fullPath:!1,setDefault:!(n!=null&&n.configured),modelOverrides:{}}),H("form"),G(!0),$(null),X(!1),q([]),I(new Set),O(null),ee("")},[n]),ws=o.useCallback(async()=>{var a;const s=m.baseUrl;if(!s){O(t("models.baseUrlRequired"));return}Be(!0),O(null),q([]),I(new Set);try{const l=(m.apiKeys||"").split(/\r?\n|,/).map(d=>d.trim()).filter(Boolean)[0]||"",c=l.replace(/[^\x00-\xFF]/g,"");c!==l&&T.warning(t("models.apiKeySanitized"));const r=await h.models.fetch(s,c,m.fullPath===!0);if(r.success&&((a=r.data)!=null&&a.models)){const d=r.data.models;q(d);const i=new Set(d.map(w=>w.id)),u=m.modelIds.split(",").map(w=>w.trim()).filter(Boolean),v=u.filter(w=>i.has(w.split("|")[0].trim())),x=u.filter(w=>!i.has(w.split("|")[0].trim()));if(I(new Set(v.map(w=>w.split("|")[0].trim()))),x.length>0){const w=x.map(S=>S.split("|")[0].trim());j(S=>({...S,modelIds:v.join(", ")})),T.warning(t("models.autoRemovedMissingModels",{models:w.join(", ")}))}T.success(t("models.fetchedCount",{n:d.length}))}else O(r.error||t("models.fetchFailed"))}catch(l){O(l instanceof Error?l.message:t("models.requestFailed"))}finally{Be(!1)}},[m.baseUrl,m.apiKeys,m.modelIds,t]),Cs=o.useCallback(async()=>{var a,l;const s=m.baseUrl;if(!s){B({ok:!1,message:t("models.baseUrlRequired")});return}He(!0),B(null);try{const c=(m.apiKeys||"").split(/\r?\n|,/).map(i=>i.trim()).filter(Boolean)[0]||"",r=c.replace(/[^\x00-\xFF]/g,"");r!==c&&T.warning(t("models.apiKeySanitized"));const d=await h.providers.testConnection(s,r);if(d.success&&((a=d.data)!=null&&a.reachable)){const i=d.data,u={};i.resolvedBaseUrl&&i.resolvedBaseUrl!==m.baseUrl&&(u.baseUrl=i.resolvedBaseUrl),i.detectedApiType&&m.apiType===""&&(u.apiType=i.detectedApiType),Object.keys(u).length>0&&j(w=>({...w,...u}));const v=[];u.baseUrl&&v.push(t("models.baseUrlAutoCompleted",{url:u.baseUrl})),u.apiType&&v.push(t("models.apiTypeAutoSelected",{type:fe[u.apiType]}));const x=i.message||t("models.connectionSuccess");B({ok:!0,message:v.length>0?t("models.connectionSuccessWithHints",{message:x,hints:v.join(t("models.hintJoiner"))}):x})}else B({ok:!1,message:((l=d.data)==null?void 0:l.message)||d.error||t("models.connectionFailed")})}catch(c){B({ok:!1,message:c instanceof Error?c.message:t("models.requestFailed")})}finally{He(!1)}},[m.baseUrl,m.apiKeys,m.apiType,t]),Ps=o.useCallback(s=>{const a=new Set(ne);a.has(s)?a.delete(s):a.add(s),I(a),j(l=>({...l,modelIds:Array.from(a).join(", ")}))},[ne]),Ts=o.useCallback(s=>{const a=m.modelIds.split(",").map(d=>d.trim()).filter(Boolean),c=a.some(d=>J(d)===s.id)?a.filter(d=>J(d)!==s.id):[...a,s.name&&s.name!==s.id?`${s.id}|${s.name}`:s.id];j(d=>({...d,modelIds:c.join(", ")}));const r=new Set(F.map(d=>d.id));I(new Set(c.map(J).filter(d=>r.has(d))))},[m.modelIds,F]),[Ds,We]=o.useState(!1),[Te,Ye]=o.useState(""),[Qe,ue]=o.useState([]),[Ss,Je]=o.useState(!1),[Xe,me]=o.useState(null),[xe,Ms]=o.useState(!1),[pe,Is]=o.useState(!0),Us=o.useCallback(()=>{Ye(""),ue([]),me(null),We(!0),se("",{reason:!1,tool:!0})},[]),se=o.useCallback(async(s,a)=>{Je(!0),me(null);try{const l=await h.models.catalogSearch({q:s,reasoning:(a==null?void 0:a.reason)??!1,toolCall:(a==null?void 0:a.tool)??!0,limit:30});l.success&&l.data?ue(l.data.hits||[]):(me(l.error||t("models.catalogSearchFailed")),ue([]))}catch(l){me(l instanceof Error?l.message:t("models.requestFailed")),ue([])}finally{Je(!1)}},[t]),As=o.useCallback(s=>{j(a=>{const l=a.modelIds.split(",").map(c=>c.trim()).filter(Boolean);return l.includes(s.model.id)?a:{...a,modelIds:[...l,s.model.id].join(", ")}}),T.success(t("models.addedModel",{id:s.model.id}))},[t]),[De,Ks]=o.useState(null),Es=o.useCallback(s=>{Ye(s),De&&clearTimeout(De),Ks(setTimeout(()=>{se(s,{reason:xe,tool:pe})},300))},[De,xe,pe,se]),$s=async s=>{const a=s.provider,l=s.id,c=s.enabled!==!1,r=s.name||l,d=i=>c&&/default model/i.test(i);try{const i=await h.models.toggle(a,l);if(i.success){await k();return}const u=i.error||"";d(u)?T.error(t("models.defaultModelDisableBlocked",{name:r})):T.error(u||t("models.operationFailed"))}catch(i){const u=i instanceof Error?i.message:"";d(u)?T.error(t("models.defaultModelDisableBlocked",{name:r})):T.error(u||t("models.operationFailed"))}},Fs=async s=>{const a=U(s);Ke(a);try{await h.models.test(s.id),await k()}finally{Ke(null)}},zs=async(s,a)=>{if(confirm(t("models.deleteModelConfirm",{id:a})))try{(await h.models.delete(s,a)).success&&await k()}catch{}},Ze=o.useCallback(s=>{var d;const a=M.find(i=>i.key===s),l=z.find(i=>i.key===s),c=!l||l.isCustom,r=(d=n==null?void 0:n.providers)==null?void 0:d[s];R(c?"custom":s),E(c?s:""),j({providerKey:s,apiKeys:"",modelIds:(a==null?void 0:a.models.map(i=>i.name&&i.name!==i.id?`${i.id}|${i.name}`:i.id).join(", "))||"",baseUrl:(a==null?void 0:a.baseUrl)||(r==null?void 0:r.baseUrl)||(l==null?void 0:l.baseUrl)||"",apiType:(a==null?void 0:a.apiType)||(r==null?void 0:r.apiType)||(l==null?void 0:l.apiType)||"",fullPath:(a==null?void 0:a.fullPath)===!0||(r==null?void 0:r.fullPath)===!0,setDefault:(n==null?void 0:n.defaultProvider)!==s,modelOverrides:Ue(a)}),H("form"),G(!0),$(null),X(!1),q([]),I(new Set),O(null),ee("")},[M,z,n]),Ls=s=>{Ze(s.provider)},Rs=async()=>{var ns,ds;const s=z.find(p=>p.key===D)||null,a=D==="custom"?m.providerKey.trim():(s==null?void 0:s.key)||"";if(!a){$(t("models.providerNameRequired"));return}const l=(m.apiKeys||"").split(/\r?\n|,/).map(p=>p.trim()).filter(Boolean),c=!!((ds=(ns=n==null?void 0:n.providers)==null?void 0:ns[a])!=null&&ds.hasApiKey);if(l.length===0&&!c){$(t("models.apiKeyRequired"));return}const r=s||{baseUrl:"",apiType:"openai-completions",defaultModel:""},d=l.map(p=>p.replace(/[^\x00-\xFF]/g,"")).filter(Boolean),i=F.length>0?new Set(F.map(p=>p.id)):null,u=(m.modelIds||r.defaultModel||"").split(",").map(p=>p.trim()).filter(Boolean),v=i?u.filter(p=>i.has(p.split("|")[0].trim())):u,x=i?u.filter(p=>!i.has(p.split("|")[0].trim())):[];x.length>0&&T.warning(t("models.autoSkippedMissingModels",{models:x.map(p=>p.split("|")[0].trim()).join(", ")}));const w=v.map(J).filter(Boolean),S=new Set;for(const p of P)p.provider!==a||w.includes(p.id)||(p.isGlobalDefault&&S.add("global"),p.isActDefault&&S.add("act"),p.isPlanDefault&&S.add("plan"),p.isGoalDefault&&S.add("goal"));const Se={provider:a,name:a,baseUrl:m.baseUrl||r.baseUrl,fullPath:m.fullPath===!0,apiType:m.apiType||rt(m.baseUrl||r.baseUrl)||r.apiType,models:v.map((p,he)=>{const A=p.trim().split("|").map(Gs=>Gs.trim()).filter(Boolean),K=A[0]||"",N=m.modelOverrides[K];return{id:K,name:A[1]||K,aliases:A.length>2?A.slice(2):void 0,enabled:!0,priority:10+he,...N!=null&&N.apiType?{apiType:N.apiType}:{},...N!=null&&N.baseUrl?{baseUrl:N.baseUrl}:{}}}).filter(p=>p.id.length>0)};d.length>0&&(Se.apiKeys=d),(!(n!=null&&n.configured)||m.setDefault)&&(Se.setDefault=!0),Fe(!0),$(null);try{const p=await h.config.provider.save(Se);if(p.success){if(S.size>0){const he=w[0]||"",A={};if(he){const K=`${a}:${he}`;for(const N of S)A[N]=K}else{const K=P.find(N=>N.provider!==a);for(const N of S)N==="plan"||N==="goal"?A[N]=null:K&&(A[N]=`${K.provider}:${K.id}`)}Object.keys(A).length>0&&(await h.models.setDefaults(A)).success&&T.success(t("models.defaultsAutoUpdated"))}G(!1),H("select"),R(null),E(""),await _(),await k()}else $(p.error||t("models.saveFailed"))}catch(p){$(p instanceof Error?p.message:t("models.unknownError"))}finally{Fe(!1)}},es=async s=>{if(confirm(t("models.removeConfirm",{providerKey:s})))try{await h.config.provider.delete(s),await _(),await k()}catch{}},Os=s=>{switch(s){case"online":return"text-accent-green";case"offline":return"text-dark-muted";case"error":return"text-accent-red";default:return"text-dark-muted"}},Bs=s=>{switch(s){case"online":return e.jsx(et,{size:14});case"offline":return e.jsx(us,{size:14});case"error":return e.jsx(Zs,{size:14});default:return e.jsx(us,{size:14})}},Q=o.useMemo(()=>z.find(s=>s.key===D)||null,[D,z]);return ke?e.jsx("div",{className:"flex h-64 items-center justify-center text-dark-muted",children:t("models.loading")}):Y?e.jsx("div",{className:"flex h-64 items-center justify-center text-accent-red",children:Y}):e.jsx("div",{className:"ui-page flex-1 min-h-0",children:e.jsxs("div",{className:"ui-page-inner space-y-6",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h2",{className:"text-base font-semibold",children:t("models.providerConfig")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:async()=>{try{await h.providers.refresh(),T.success(t("models.providerListRefreshed")),Le(!0),await C(),setTimeout(()=>{C()},3e3)}catch{T.error(t("models.refreshFailed"))}},className:"btn btn-secondary px-3 py-2 text-xs",title:t("models.refreshListTitle"),children:[e.jsx(te,{size:12}),t("models.refreshList")]}),e.jsxs("button",{onClick:()=>{re&&oe(""),Le(s=>!s)},className:"btn btn-accent px-3 py-2 text-xs",children:[re?e.jsx(Hs,{size:12}):e.jsx(Me,{size:12}),t(re?"models.collapse":"models.addProvider")]})]})]}),re&&e.jsxs("div",{children:[e.jsxs("div",{className:"relative mb-3 max-w-md",children:[e.jsx(ae,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-dark-muted"}),e.jsx("input",{value:Z,onChange:s=>oe(s.target.value),className:"w-full pl-8 pr-8 py-1.5 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue",placeholder:t("models.providerSearchPlaceholder")}),Z&&e.jsx("button",{onClick:()=>oe(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-white",title:t("models.clear"),"aria-label":t("models.clearSearch"),children:e.jsx(cs,{size:13})})]}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3 max-h-[420px] overflow-y-auto custom-scrollbar pr-1",children:b?e.jsxs("div",{className:"col-span-full flex items-center justify-center py-4 text-dark-muted text-sm",children:[e.jsx(qs,{size:14,className:"mr-2 animate-spin"}),t("models.loadingProviders")]}):_e.length===0?e.jsxs("div",{className:"col-span-full border border-accent-red/30 bg-accent-red/10 rounded-lg p-4 text-center",children:[e.jsx("div",{className:"text-sm text-accent-red font-medium mb-1",children:t("models.noMatchingProviders")}),e.jsx("div",{className:"text-xs text-dark-muted mb-3",children:t("models.noMatchingProvidersHint",{query:Z})}),e.jsxs("div",{className:"flex items-center justify-center gap-2",children:[e.jsxs("button",{onClick:()=>oe(""),className:"inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-dark-border rounded hover:bg-dark-hover",children:[e.jsx(cs,{size:12}),t("models.clearSearch")]}),e.jsxs("button",{onClick:Pe,className:"inline-flex items-center gap-1 px-2.5 py-1 text-xs bg-accent-blue text-white rounded hover:opacity-90",children:[e.jsx(Me,{size:12}),t("models.addCustomProvider")]})]})]}):_e.map(s=>{var d,i;const a=s.key==="custom",l=a?L:(d=n==null?void 0:n.providers)==null?void 0:d[s.key],c=l==null?void 0:l.hasApiKey,r=a?!!(n!=null&&n.defaultProvider)&&((L==null?void 0:L.keys)||[]).includes(n.defaultProvider):(n==null?void 0:n.defaultProvider)===s.key;return e.jsxs("div",{className:`ui-card-interactive text-left p-4 relative ${c?"border-accent-green/30 bg-dark-surface hover:border-accent-green/50":"border-dark-border bg-dark-surface hover:border-dark-hover"}`,children:[e.jsxs("div",{onClick:()=>s.key==="custom"?Pe():Ve(s),className:"cursor-pointer",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("span",{className:"text-sm font-medium",children:s.name}),c&&e.jsx(be,{size:14,className:"text-accent-green"})]}),e.jsxs("div",{className:"text-[10px] text-dark-muted space-y-0.5",children:[e.jsx("div",{className:"truncate",children:a?(l==null?void 0:l.baseUrl)||t("models.customBaseUrl"):s.baseUrl||t("models.customBaseUrl")}),e.jsx("div",{className:"truncate",children:a&&L?`${L.keys.join(", ")}`:s.defaultModel||t("models.noDefaultModel")}),e.jsxs("div",{children:[l?t("models.configuredCount",{n:l.modelCount}):t("models.availableCount",{n:((i=s.models)==null?void 0:i.length)||0}),s.models&&s.models.length>0&&!l&&e.jsx("span",{className:"text-accent-blue",children:" ✓"})]})]}),r&&e.jsx("div",{className:"mt-1 text-[10px] text-accent-blue",children:t("models.defaultProviderBadge")})]}),c&&s.key!=="custom"&&e.jsx("button",{onClick:u=>{u.stopPropagation(),es(s.key)},className:"absolute top-1.5 right-1.5 p-1 rounded text-dark-muted hover:bg-accent-red/10 hover:text-accent-red transition-colors",title:t("models.deleteProvider"),"aria-label":t("models.deleteProviderNamed",{name:s.name}),children:e.jsx(Ie,{size:13})})]},s.key)})})]})]}),f&&e.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[e.jsx(ve,{title:t("models.overallStatus"),value:f.totalInstances===0?t("models.notConfigured"):f.overallStatus==="healthy"?t("models.healthy"):f.overallStatus==="degraded"?t("models.degraded"):t("models.abnormal"),color:f.totalInstances===0?"blue":f.overallStatus==="healthy"?"green":f.overallStatus==="degraded"?"yellow":"red"}),e.jsx(ve,{title:t("models.healthRate"),value:f.totalInstances===0?"N/A":`${(f.healthRate*100).toFixed(0)}%`,color:f.totalInstances===0?"blue":f.healthRate>.8?"green":f.healthRate>.5?"yellow":"red"}),e.jsx(ve,{title:t("models.onlineInstances"),value:f.totalInstances===0?t("models.none"):`${f.healthyInstances}/${f.totalInstances}`,color:f.healthyInstances>0?"green":"red"}),e.jsx(ve,{title:t("models.totalRequests"),value:f.totalRequests>0?f.totalRequests.toLocaleString():"0",color:"blue"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"flex items-center justify-between mb-3",children:e.jsx("h3",{className:"text-sm font-medium",children:t("models.configuredModels")})}),e.jsxs("div",{className:"space-y-4 max-h-[640px] overflow-y-auto custom-scrollbar pr-1",children:[ks.map(s=>{var c;const a=M.find(r=>r.key===s.provider),l=(c=n==null?void 0:n.providers)==null?void 0:c[s.provider];return e.jsxs("div",{className:"rounded-lg border border-dark-border overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 px-3 py-2 bg-dark-bg border-b border-dark-border",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-wrap",children:[e.jsx("span",{className:"text-xs font-semibold whitespace-nowrap",children:s.provider}),(n==null?void 0:n.defaultProvider)===s.provider&&e.jsx("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue whitespace-nowrap",children:t("models.defaultShort")}),e.jsx("span",{className:"text-[10px] text-dark-muted truncate",children:(l==null?void 0:l.baseUrl)||(a==null?void 0:a.baseUrl)||""}),e.jsx("span",{className:"text-[10px] text-dark-muted whitespace-nowrap",children:(a==null?void 0:a.apiType)||(l==null?void 0:l.apiType)||""}),l!=null&&l.hasApiKey||a!=null&&a.hasApiKey?e.jsx("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-accent-green/20 text-accent-green whitespace-nowrap",children:t("models.hasKey")}):e.jsx("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap",children:t("models.noKey")})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx("button",{onClick:()=>Ze(s.provider),className:"p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue",title:t("models.editProviderNamed",{name:s.provider}),children:e.jsx(is,{size:13})}),e.jsx("button",{onClick:()=>es(s.provider),className:"p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red",title:t("models.deleteProviderNamed",{name:s.provider}),children:e.jsx(Ie,{size:13})})]})]}),e.jsxs("div",{className:"space-y-2 p-2 bg-dark-surface/40",children:[s.models.map(r=>{const d=ys(r),i=d.inputTokens+d.outputTokens,u=a==null?void 0:a.models.find(x=>x.id===r.id),v=!!(u!=null&&u.apiType&&u.apiType!==(a==null?void 0:a.apiType));return e.jsx("div",{className:`bg-dark-surface border rounded-lg p-3 ${r.status==="online"?"border-accent-green":"border-dark-border"} ${r.enabled===!1?"opacity-60":""}`,children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1 flex-wrap",children:[e.jsx("span",{className:Os(r.status),children:Bs(r.status)}),e.jsx("span",{className:"font-medium text-sm",children:r.name}),e.jsx("span",{className:"text-[10px] text-dark-muted px-1.5 py-0.5 bg-dark-bg rounded",children:r.provider}),r.apiType&&e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded ${r.apiType==="anthropic-messages"||r.apiType==="openai-responses"?"bg-accent-purple/20 text-accent-purple":"bg-accent-blue/20 text-accent-blue"}`,children:fe[r.apiType]||r.apiType}),v&&e.jsx("span",{className:"text-[9px] px-1 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium",title:t("models.overrideTitle"),children:t("models.overrideBadge")}),r.isGlobalDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-green/20 text-accent-green font-medium",children:t("chat.globalDefault")}),r.isPlanDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue font-medium",children:t("chat.planDefault")}),r.isActDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium",children:t("chat.actDefault")}),r.isGoalDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-purple/20 text-accent-purple font-medium",children:t("chat.goalDefault")})]}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs",children:[e.jsx(ye,{label:t("models.loadLabel"),value:`${r.load}/${r.maxLoad}`}),e.jsx(ye,{label:"Token",value:`${r.tokens}/${r.maxTokens}`}),e.jsx(ye,{label:t("models.inputPrice"),value:`$${r.price.input}/1K`}),e.jsx(ye,{label:t("models.outputPrice"),value:`$${r.price.output}/1K`})]}),e.jsxs("div",{className:"mt-3 grid grid-cols-1 sm:grid-cols-4 gap-3 items-end",children:[e.jsx(ps,{label:t("models.inputTokensLabel"),value:d.inputTokens,onChange:x=>qe(r,"inputTokens",x)}),e.jsx(ps,{label:t("models.outputTokensLabel"),value:d.outputTokens,onChange:x=>qe(r,"outputTokens",x)}),e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] text-dark-muted mb-1",children:t("models.totalTokensLabel")}),e.jsx("div",{className:"px-3 py-2 rounded border border-dark-border bg-dark-bg text-sm font-mono",children:i.toLocaleString()})]}),e.jsxs("button",{onClick:()=>js(r),className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 rounded border border-dark-border text-sm text-dark-muted hover:bg-dark-hover",children:[e.jsx(_s,{size:13}),t("models.reset")]})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[!r.isGlobalDefault&&r.enabled!==!1&&e.jsx("button",{onClick:async()=>{try{await h.models.setDefaults({global:`${r.provider}:${r.id}`}),await k()}catch(x){g(x instanceof Error?x.message:t("models.setGlobalDefaultFailed"))}},className:"px-2 py-1 rounded text-[10px] border border-accent-green/30 text-accent-green hover:bg-accent-green/10",title:t("models.setGlobalDefaultTitle"),children:t("chat.globalDefault")}),!r.isPlanDefault&&r.enabled!==!1&&e.jsx("button",{onClick:async()=>{try{await h.models.setDefaults({plan:`${r.provider}:${r.id}`}),await k()}catch(x){g(x instanceof Error?x.message:t("models.setPlanDefaultFailed"))}},className:"px-2 py-1 rounded text-[10px] border border-accent-blue/30 text-accent-blue hover:bg-accent-blue/10",title:t("models.setPlanDefaultTitle"),children:t("chat.planDefault")}),r.isPlanDefault&&e.jsx("button",{onClick:async()=>{try{await h.models.setDefaults({plan:null}),await k()}catch(x){g(x instanceof Error?x.message:t("models.unsetPlanDefaultFailed"))}},className:"px-2 py-1 rounded text-[10px] border border-dark-border text-dark-muted hover:bg-dark-hover",title:t("models.unsetPlanDefaultTitle"),children:t("models.unsetPlanDefault")}),!r.isActDefault&&r.enabled!==!1&&e.jsx("button",{onClick:async()=>{try{await h.models.setDefaults({act:`${r.provider}:${r.id}`}),await k()}catch(x){g(x instanceof Error?x.message:t("models.setActDefaultFailed"))}},className:"px-2 py-1 rounded text-[10px] border border-accent-yellow/30 text-accent-yellow hover:bg-accent-yellow/10",title:t("models.setActDefaultTitle"),children:t("chat.actDefault")}),r.isActDefault&&e.jsx("button",{onClick:async()=>{try{await h.models.setDefaults({act:null}),await k()}catch(x){g(x instanceof Error?x.message:t("models.unsetActDefaultFailed"))}},className:"px-2 py-1 rounded text-[10px] border border-dark-border text-dark-muted hover:bg-dark-hover",title:t("models.unsetActDefaultTitle"),children:t("models.unsetActDefault")}),!r.isGoalDefault&&r.enabled!==!1&&e.jsx("button",{onClick:async()=>{try{await h.models.setDefaults({goal:`${r.provider}:${r.id}`}),await k()}catch(x){g(x instanceof Error?x.message:t("models.setGoalDefaultFailed"))}},className:"px-2 py-1 rounded text-[10px] border border-accent-purple/30 text-accent-purple hover:bg-accent-purple/10",title:t("models.setGoalDefaultTitle"),children:t("chat.goalDefault")}),r.isGoalDefault&&e.jsx("button",{onClick:async()=>{try{await h.models.setDefaults({goal:null}),await k()}catch(x){g(x instanceof Error?x.message:t("models.unsetGoalDefaultFailed"))}},className:"px-2 py-1 rounded text-[10px] border border-dark-border text-dark-muted hover:bg-dark-hover",title:t("models.unsetGoalDefaultTitle"),children:t("models.unsetGoalDefault")}),e.jsx("button",{onClick:()=>Ls(r),className:"p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue",title:t("models.editModel"),children:e.jsx(is,{size:13})}),e.jsx("button",{onClick:()=>zs(r.provider,r.id),className:"p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red",title:t("models.deleteModel"),children:e.jsx(Ie,{size:13})}),e.jsx("button",{onClick:()=>Fs(r),disabled:Ae===U(r),className:"p-1.5 rounded hover:bg-dark-hover disabled:opacity-50",title:t("models.refresh"),children:e.jsx(te,{size:13,className:Ae===U(r)?"animate-spin":""})}),e.jsx("button",{onClick:()=>$s(r),className:`px-2 py-0.5 rounded text-xs transition-colors ${r.enabled===!1?"bg-accent-green/20 text-accent-green hover:bg-accent-green/30":"bg-accent-red/20 text-accent-red hover:bg-accent-red/30"}`,children:r.enabled===!1?t("models.enable"):t("models.disable")})]})]})},U(r))}),s.models.length===0&&e.jsx("div",{className:"text-center text-[11px] text-dark-muted py-3",children:t("models.noModelsInProvider")})]})]},s.provider)}),P.length===0&&M.length===0&&e.jsxs("div",{className:"text-center text-dark-muted py-6",children:[e.jsx(Vs,{size:36,className:"mx-auto mb-2 opacity-40"}),e.jsx("p",{className:"text-sm",children:t("models.emptyHint")})]})]})]}),e.jsx(ms,{isOpen:fs,onClose:()=>{G(!1),H("select"),R(null),E("")},title:Ee==="select"?t("chat.selectProvider"):(Q==null?void 0:Q.name)||t("models.providerConfig"),size:"xl",children:Ee==="select"?e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[ie.filter(s=>s.key!=="custom").map(s=>e.jsxs("button",{onClick:()=>Ve(s),className:"text-left p-3 rounded-lg border border-dark-border bg-dark-bg hover:border-accent-blue transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(be,{size:14,className:"text-accent-blue"}),e.jsx("span",{className:"text-sm font-medium",children:s.name})]}),e.jsx("div",{className:"text-xs text-dark-muted",children:s.defaultModel})]},s.key)),e.jsxs("button",{onClick:Pe,className:"text-left p-3 rounded-lg border border-dashed border-dark-border bg-dark-bg hover:border-accent-blue transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(Ws,{size:14,className:"text-accent-blue"}),e.jsx("span",{className:"text-sm font-medium",children:t("models.customProvider")})]}),e.jsx("div",{className:"text-xs text-dark-muted",children:t("models.customProviderDesc")})]})]})}):e.jsxs("div",{className:"space-y-3",children:[D==="custom"&&e.jsxs("div",{className:"space-y-3",children:[L&&L.keys.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.editExistingConfig")}),e.jsxs("select",{value:gs,onChange:s=>{const a=s.target.value;a?Ns(a):(E(""),j(l=>({...l,providerKey:"",modelIds:"",baseUrl:"",apiType:"",apiKeys:""})))},className:"w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue",children:[e.jsx("option",{value:"",children:t("models.newCustomProviderOption")}),L.keys.map(s=>e.jsx("option",{value:s,children:s},s))]}),e.jsx("div",{className:"text-[11px] text-dark-muted/60 mt-1",children:t("models.editExistingConfigHint")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.providerNameLabel")}),e.jsx("input",{value:m.providerKey,onChange:s=>j(a=>({...a,providerKey:s.target.value})),className:"w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue",placeholder:t("models.providerNamePlaceholder")})]})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm text-dark-muted mb-1",children:["API Keys",(ts=(ss=n==null?void 0:n.providers)==null?void 0:ss[D==="custom"?m.providerKey.trim():D||""])!=null&&ts.hasApiKey?"":" *",e.jsx("span",{className:"text-dark-muted/60 text-xs",children:(ls=(as=n==null?void 0:n.providers)==null?void 0:as[D==="custom"?m.providerKey.trim():D||""])!=null&&ls.hasApiKey?t("models.apiKeysHintConfigured"):t("models.apiKeysHintNew")})]}),e.jsxs("div",{className:"relative",children:[e.jsx("textarea",{rows:3,value:m.apiKeys,onChange:s=>j(a=>({...a,apiKeys:s.target.value})),className:"w-full px-3 py-2 pr-10 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue resize-y custom-scrollbar",placeholder:t("models.apiKeyMultiPlaceholder")}),e.jsx("button",{onClick:()=>X(s=>!s),className:"absolute right-2 top-2 text-dark-muted hover:text-white",children:vs?e.jsx(Ys,{size:14}):e.jsx(Qs,{size:14})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.modelIdLabel")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:m.modelIds,onChange:s=>{const a=s.target.value;j(l=>({...l,modelIds:a})),I(()=>{const l=new Set;for(const c of a.split(",")){const r=c.trim().split("|")[0].trim();r&&F.some(d=>d.id===r)&&l.add(r)}return l})},className:"flex-1 px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue",placeholder:(Q==null?void 0:Q.defaultModel)||t("models.modelIdPlaceholder")}),e.jsxs("button",{onClick:ws,disabled:Ne||!m.baseUrl,className:"inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-blue/30 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 whitespace-nowrap",title:t("models.fetchModelsTitle"),children:[Ne?e.jsx(te,{size:13,className:"animate-spin"}):e.jsx(Js,{size:13}),t(Ne?"models.fetchingModels":"models.fetchModels")]}),e.jsxs("button",{onClick:Cs,disabled:we||!m.baseUrl,className:"inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-yellow/30 text-accent-yellow hover:bg-accent-yellow/10 disabled:opacity-50 whitespace-nowrap",title:t("models.testConnectionTitle"),children:[we?e.jsx(te,{size:13,className:"animate-spin"}):e.jsx(Xs,{size:13}),t(we?"models.testingConnection":"models.testConnection")]}),e.jsxs("button",{onClick:Us,className:"inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-green/30 text-accent-green hover:bg-accent-green/10 whitespace-nowrap",title:t("models.catalogSearchTitle"),children:[e.jsx(ae,{size:13}),t("models.catalogSearch")]})]}),ce&&e.jsxs("div",{className:`mt-1 text-xs ${ce.ok?"text-accent-green":"text-accent-red"}`,children:[ce.ok?"✓ ":"✗ ",ce.message]}),Ge&&e.jsx("div",{className:"mt-1 text-xs text-accent-red",children:Ge}),F.length===0&&Ce.length>0&&e.jsxs("div",{className:"mt-2 border border-dark-border rounded-lg bg-dark-bg p-2",children:[e.jsx("div",{className:"flex items-center justify-between mb-2",children:e.jsxs("span",{className:"text-xs text-dark-muted",children:[t("models.configuredPanelPrefix"),e.jsx("strong",{className:"text-dark-text",children:Ce.length}),t("models.configuredPanelSuffix"),e.jsx("span",{className:"text-accent-green/70",children:t("models.configuredPanelHint")})]})}),e.jsx("div",{className:"max-h-48 overflow-y-auto custom-scrollbar grid grid-cols-2 sm:grid-cols-3 gap-1",children:Ce.map(s=>{const a=m.modelIds.split(",").map(J).filter(Boolean).includes(s.id);return e.jsxs("div",{role:"checkbox","aria-checked":a,tabIndex:-1,onMouseDown:l=>l.preventDefault(),onClick:()=>Ts(s),className:`flex items-center gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${a?"bg-accent-green/20 text-accent-green border border-accent-green/30":"hover:bg-dark-hover border border-transparent"}`,children:[a?e.jsx(be,{size:10}):e.jsx("div",{className:"w-2.5 h-2.5 rounded border border-dark-border"}),e.jsx("span",{className:"truncate",children:s.name||s.id}),s.isGlobalDefault&&e.jsx("span",{className:"text-[9px] px-1 rounded bg-accent-green/20 shrink-0",children:t("models.globalShort")}),s.isPlanDefault&&e.jsx("span",{className:"text-[9px] px-1 rounded bg-accent-blue/20 shrink-0",children:"Plan"}),s.isActDefault&&e.jsx("span",{className:"text-[9px] px-1 rounded bg-accent-yellow/20 shrink-0",children:"Act"}),s.isGoalDefault&&e.jsx("span",{className:"text-[9px] px-1 rounded bg-accent-purple/20 shrink-0",children:"Goal"})]},s.id)})})]}),F.length>0&&e.jsxs("div",{className:"mt-2 border border-dark-border rounded-lg bg-dark-bg p-2",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("span",{className:"text-xs text-dark-muted",children:[t("models.fetchedPanelPrefix"),e.jsx("strong",{className:"text-dark-text",children:F.length}),t("models.fetchedPanelMiddle"),e.jsx("strong",{className:"text-accent-blue",children:ne.size}),t("models.fetchedPanelSuffix"),e.jsx("span",{className:"text-accent-blue/70",children:t("models.fetchedPanelHint")})]}),e.jsx("button",{onClick:()=>{q([]),I(new Set)},className:"px-2 py-0.5 text-[10px] border border-dark-border rounded hover:bg-dark-hover",children:t("models.close")})]}),e.jsxs("div",{className:"relative mb-2",children:[e.jsx(ae,{size:12,className:"absolute left-2 top-1/2 -translate-y-1/2 text-dark-muted"}),e.jsx("input",{value:de,onChange:s=>ee(s.target.value),className:"w-full pl-7 pr-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue",placeholder:t("models.modelSearchPlaceholder")})]}),e.jsx("div",{className:"max-h-48 overflow-y-auto custom-scrollbar grid grid-cols-2 sm:grid-cols-3 gap-1",children:F.filter(s=>!de||s.id.toLowerCase().includes(de.toLowerCase())||s.name.toLowerCase().includes(de.toLowerCase())).map(s=>{const a=ne.has(s.id);return e.jsxs("div",{role:"checkbox","aria-checked":a,tabIndex:-1,onMouseDown:l=>l.preventDefault(),onClick:()=>Ps(s.id),className:`flex items-center gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${a?"bg-accent-blue/20 text-accent-blue border border-accent-blue/30":"hover:bg-dark-hover border border-transparent"}`,children:[a?e.jsx(be,{size:10}):e.jsx("div",{className:"w-2.5 h-2.5 rounded border border-dark-border"}),e.jsx("span",{className:"truncate",children:s.id})]},s.id)})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:"Base URL"}),e.jsx("input",{value:m.baseUrl,onChange:s=>{j(a=>({...a,baseUrl:s.target.value})),B(null)},className:"w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue",placeholder:"https://api.example.com/v1"}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer select-none mt-2",children:[e.jsx("button",{type:"button",role:"switch","aria-checked":m.fullPath,onClick:()=>{j(s=>({...s,fullPath:!s.fullPath})),B(null)},className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${m.fullPath?"bg-accent-green":"bg-dark-border"}`,children:e.jsx("span",{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${m.fullPath?"translate-x-[18px]":"translate-x-0.5"}`})}),e.jsx("span",{className:"text-sm text-dark-muted",children:t("models.fullPathLabel")})]}),e.jsx("div",{className:"text-[11px] text-dark-muted/60 mt-1",children:t("models.fullPathHint")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.apiTypeLabel")}),e.jsxs("select",{value:m.apiType,onChange:s=>{j(a=>({...a,apiType:s.target.value})),B(null)},className:"w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue",children:[e.jsx("option",{value:"",children:t("models.apiTypeAutoDetect")}),xs.map(s=>e.jsx("option",{value:s,children:fe[s]},s))]}),e.jsx("div",{className:"text-[11px] text-dark-muted/60 mt-1",children:t("models.apiTypeHint")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm text-dark-muted mb-1",children:[t("models.modelApiTypeLabel"),e.jsx("span",{className:"text-dark-muted/60 text-xs",children:t("models.modelApiTypeHint")})]}),e.jsx("div",{className:"border border-dark-border rounded-lg divide-y divide-dark-border max-h-40 overflow-y-auto custom-scrollbar",children:(()=>{const s=m.modelIds.split(",").map(J).filter(Boolean);return s.length===0?e.jsx("div",{className:"px-3 py-2 text-xs text-dark-muted",children:t("models.modelApiTypeEmpty")}):s.map(a=>{var l;return e.jsxs("div",{className:"flex items-center justify-between gap-2 px-3 py-1.5",children:[e.jsx("span",{className:"text-xs truncate min-w-0",children:a}),e.jsxs("select",{value:((l=m.modelOverrides[a])==null?void 0:l.apiType)||"",onChange:c=>j(r=>({...r,modelOverrides:{...r.modelOverrides,[a]:{...r.modelOverrides[a]||{},apiType:c.target.value}}})),className:"w-52 px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue",children:[e.jsx("option",{value:"",children:"继承 Provider(默认)"}),xs.map(c=>e.jsx("option",{value:c,children:fe[c]},c))]})]},a)})})()})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:m.setDefault,onChange:s=>j(a=>({...a,setDefault:s.target.checked})),className:"accent-accent-blue"}),e.jsx("span",{className:"text-sm text-dark-muted",children:t("models.setDefaultProvider")})]}),ze&&e.jsx("div",{className:"text-sm text-accent-red",children:ze}),e.jsxs("div",{className:"flex justify-between gap-2 pt-2",children:[e.jsx("div",{children:V&&((os=(rs=n==null?void 0:n.providers)==null?void 0:rs[V])==null?void 0:os.hasApiKey)&&e.jsx("button",{onClick:async()=>{if(confirm(t("models.deleteProviderConfirm",{key:V})))try{await h.config.provider.delete(V),G(!1),H("select"),R(null),E(""),await _(),await k()}catch{}},className:"px-4 py-2 rounded border border-accent-red/30 text-accent-red hover:bg-accent-red/10 transition-colors text-sm",children:t("models.deleteProvider")})}),e.jsx("button",{onClick:()=>{H("select"),R(null),E(""),G(!1)},className:"px-4 py-2 rounded border border-dark-border hover:bg-dark-hover transition-colors text-sm",children:t("common.cancel")}),e.jsx("button",{onClick:Rs,disabled:$e,className:"px-4 py-2 bg-accent-blue text-white rounded hover:bg-accent-blue/80 transition-colors text-sm disabled:opacity-50",children:t($e?"common.saving":"common.save")})]})]})}),e.jsx(ms,{isOpen:Ds,onClose:()=>We(!1),title:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ae,{size:15,className:"text-accent-green"}),t("models.catalogTitle")]}),size:"2xl",children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(ae,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-dark-muted"}),e.jsx("input",{value:Te,onChange:s=>Es(s.target.value),className:"w-full pl-9 pr-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-green",placeholder:t("models.catalogSearchPlaceholder"),autoFocus:!0})]}),e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:pe,onChange:s=>{const a=s.target.checked;Is(a),se(Te,{reason:xe,tool:a})},className:"accent-accent-green"}),t("models.catalogOnlyToolCall")]}),e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:xe,onChange:s=>{const a=s.target.checked;Ms(a),se(Te,{reason:a,tool:pe})},className:"accent-accent-green"}),t("models.catalogOnlyReasoning")]})]}),Xe&&e.jsx("div",{className:"text-xs text-accent-red bg-accent-red/10 p-2 rounded",children:Xe}),Ss?e.jsxs("div",{className:"flex items-center justify-center py-10 text-dark-muted",children:[e.jsx(te,{size:18,className:"animate-spin mr-2"})," ",t("models.searching")]}):e.jsx("div",{className:"max-h-96 overflow-y-auto custom-scrollbar border border-dark-border rounded-lg divide-y divide-dark-border",children:Qe.length===0?e.jsx("div",{className:"py-10 text-center text-dark-muted text-sm",children:t("models.catalogNoResults")}):Qe.map(s=>{var a,l,c;return e.jsxs("div",{className:"flex items-center gap-3 px-3 py-2 hover:bg-dark-hover",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-medium text-dark-text truncate",children:s.model.name||s.model.id}),e.jsx("code",{className:"text-[10px] px-1.5 py-0.5 bg-dark-bg border border-dark-border rounded text-dark-muted truncate",children:s.model.id}),s.model.reasoning&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-accent-yellow/10 text-accent-yellow rounded",children:t("models.badgeReasoning")}),s.model.tool_call&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-accent-blue/10 text-accent-blue rounded",children:t("models.badgeToolCall")}),s.model.attachment&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-accent-green/10 text-accent-green rounded",children:t("models.badgeMultimodal")})]}),e.jsxs("div",{className:"text-[11px] text-dark-muted mt-0.5",children:[s.providerName,(a=s.model.limit)!=null&&a.context?` · ${t("models.ctxLimit",{k:(s.model.limit.context/1e3).toFixed(0)})}`:"",(l=s.model.limit)!=null&&l.output?` · ${t("models.outLimit",{k:(s.model.limit.output/1e3).toFixed(0)})}`:"",((c=s.model.cost)==null?void 0:c.input)!==void 0?` · $${s.model.cost.input}/M in / $${s.model.cost.output}/M out`:""]})]}),e.jsxs("button",{onClick:()=>As(s),className:"shrink-0 inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-accent-green/30 text-accent-green rounded hover:bg-accent-green/10 whitespace-nowrap",title:t("models.catalogAddTitle"),children:[e.jsx(Me,{size:12})," ",t("models.add")]})]},`${s.providerId}:${s.model.id}`)})}),e.jsx("div",{className:"text-[11px] text-dark-muted/60",children:t("models.catalogSourceHint")})]})})]})})}function ve({title:y,value:b,color:C}){const t={green:"bg-accent-green/10 text-accent-green",yellow:"bg-accent-yellow/10 text-accent-yellow",red:"bg-accent-red/10 text-accent-red",blue:"bg-accent-blue/10 text-accent-blue"};return e.jsxs("div",{className:`${t[C]} rounded-lg p-3`,children:[e.jsx("div",{className:"text-xs opacity-70",children:y}),e.jsx("div",{className:"text-xl font-semibold",children:b})]})}function ye({label:y,value:b}){return e.jsxs("div",{children:[e.jsx("div",{className:"text-dark-muted",children:y}),e.jsx("div",{children:b})]})}function ps({label:y,value:b,onChange:C}){return e.jsxs("div",{children:[e.jsx("label",{className:"block text-[11px] text-dark-muted mb-1",children:y}),e.jsx("input",{type:"number",min:"0",value:b,onChange:t=>C(parseInt(t.target.value,10)||0),className:"w-full px-3 py-2 rounded border border-dark-border bg-dark-bg text-sm focus:outline-none focus:border-accent-blue"})]})}export{mt as ModelsView,mt as default};
|