1import{$ as ge,$r as je,A as ue,Bi as u,Br as $i,Ct as xi,Di as ke,Dr as oe,Ft as Q,G as Ge,Gr as Mi,Jr as se,L as Fi,O as Oi,Or as ne,Ri as Pe,T as Je,Ti as Fa,U as Oa,Ur as Di,V as le,Vr as Fe,Wr as Ii,Yi as Da,Z as Ia,Zi as $,_i as _e,ai as X,an as Ie,at as Ue,da as x,di as L,fi as a,ft as me,ha as zi,ia as e,ii as f,ji as xe,k as Ri,ki as S,la as _,ln as Vi,lt as Ni,m as Hi,mi as re,n as de,oa as He,oi as B,pt as ze,qt as K,ri as P,rt as Me,si as O,st as Li,t as ce,ti as ye,tn as ee,tt as G,xt as Ei,z as fe,zr as Ee}from"./index-DICQ_NrC.js";import{c as Ki,f as Bi,g as Ze,h as Qe,i as qi,l as Yi,m as Xi,n as Wi,o as ji,p as Gi,r as Ji,s as Zi,t as Qi,u as za}from"./auth-QsFsuMT7.js";import{r as Ra,t as Va}from"./profiles-BBuprsc9.js";import{n as be,t as he}from"./settings-BrK6AqZg.js";import{n as et,r as tt,t as el}from"./completion-notification-f5aeFncY.js";import{n as tl,t as sl}from"./models-DVnbyrKb.js";import{n as al,r as il,t as ll}from"./ProfileAvatar-BVEUzJDB.js";import{n as Se,t as H}from"./SettingRow-CvGapQBr.js";import{n as ol,t as nl}from"./session-browser-prefs-nl0EdsGY.js";import{a as rl,c as ul,d as dl,i as cl,l as vl,n as pl,o as st,r as ml,s as gl,t as _l,u as fl}from"./useSttSettings-BJYYJV9v.js";import{a as Ke,c as Re,d as yl,i as Be,l as Na,n as Ha,o as qe,p as bl,r as La,s as hl,t as Ea,u as Ye}from"./ttsHelpers-DnozX32e.js";import{n as Sl,t as at}from"./chat-input-height-C__VSLxn.js";var it,lt,ot,Ka,nt=x((()=>{se(),ue(),oe(),he(),Oi(),el(),Sl(),Se(),it={class:"settings-section"},lt={class:"notify-controls"},ot={class:"chat-input-height-controls"},Ka=re({__name:"DisplaySettings",setup(v){const t=be(),r=me(),{t:i}=ne(),{brightness:s,setBrightness:w}=Ri(),A=[{label:i("settings.display.themeLight"),value:"light"},{label:i("settings.display.themeDark"),value:"dark"},{label:i("settings.display.themeSystem"),value:"system"}],m=P(()=>at(t.display.chat_input_height));async function p(T){try{await t.saveSection("display",T),r.success(i("settings.saved"))}catch{r.error(i("settings.saveFailed"))}}function n(T){const h=T;w(h),p({skin:h})}function b(T){return p({chat_input_height:at(T)})}function C(){return p({chat_input_height:null})}function y(T){return T.reason==="insecure"?"settings.display.notifyOnCompleteInsecure":T.reason==="unsupported"?"settings.display.notifyOnCompleteUnsupported":"settings.display.notifyOnCompleteDenied"}async function V(T){if(T){const h=await et();if(!h.granted){r.error(i(y(h)));return}}await p({notify_on_complete:T}),T&&tt({title:"Hermes",body:i("settings.display.notifyOnCompleteTest"),icon:"/coding-agents/hermes.png",tag:`hermes-complete-test-${Date.now()}`})}async function E(){const T=await et();if(!T.granted){r.error(i(y(T)));return}if(!await tt({title:"Hermes",body:i("settings.display.notifyOnCompleteTest"),icon:"/coding-agents/hermes.png",tag:`hermes-complete-test-${Date.now()}`})){r.error(i("settings.display.notifyOnCompleteTestFailed"));return}r.success(i("settings.display.notifyOnCompleteTestSent"))}return(T,h)=>(S(),O("section",it,[a(H,{label:e(i)("settings.display.theme"),hint:e(i)("settings.display.themeHint")},{default:u(()=>[a(e(Q),{value:e(s),options:A,size:"small","consistent-menu-width":!1,class:"input-sm","onUpdate:value":n},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.streaming"),hint:e(i)("settings.display.streamingHint")},{default:u(()=>[a(e(le),{value:e(t).display.streaming,"onUpdate:value":h[0]||(h[0]=F=>p({streaming:F}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.compact"),hint:e(i)("settings.display.compactHint")},{default:u(()=>[a(e(le),{value:e(t).display.compact,"onUpdate:value":h[1]||(h[1]=F=>p({compact:F}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.showReasoning"),hint:e(i)("settings.display.showReasoningHint")},{default:u(()=>[a(e(le),{value:e(t).display.show_reasoning,"onUpdate:value":h[2]||(h[2]=F=>p({show_reasoning:F}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.showCost"),hint:e(i)("settings.display.showCostHint")},{default:u(()=>[a(e(le),{value:e(t).display.show_cost,"onUpdate:value":h[3]||(h[3]=F=>p({show_cost:F}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.inlineDiffs"),hint:e(i)("settings.display.inlineDiffsHint")},{default:u(()=>[a(e(le),{value:e(t).display.inline_diffs,"onUpdate:value":h[4]||(h[4]=F=>p({inline_diffs:F}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.bellOnComplete"),hint:e(i)("settings.display.bellOnCompleteHint")},{default:u(()=>[a(e(le),{value:e(t).display.bell_on_complete,"onUpdate:value":h[5]||(h[5]=F=>p({bell_on_complete:F}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.notifyOnComplete"),hint:`${e(i)("settings.display.notifyOnCompleteHint")} ${e(i)("settings.display.notifyOnCompleteMacHint")}`},{default:u(()=>[f("div",lt,[a(e(le),{value:e(t).display.notify_on_complete,"onUpdate:value":V},null,8,["value"]),a(e(K),{size:"tiny",secondary:"",onClick:E},{default:u(()=>
1[L(_(e(i)("settings.display.notifyOnCompleteTestButton")),1)]),_:1})])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.chatInputHeight"),hint:e(i)("settings.display.chatInputHeightHint")},{default:u(()=>[f("div",ot,[a(e(ge),{value:m.value,min:e(48),max:e(400),step:8,"show-button":!1,size:"small",class:"input-sm","onUpdate:value":b},{suffix:u(()=>[...h[6]||(h[6]=[L("px",-1)])]),_:1},8,["value","min","max"]),a(e(K),{size:"tiny",secondary:"",onClick:C},{default:u(()=>[L(_(e(i)("common.reset")),1)]),_:1})])]),_:1},8,["label","hint"])]))}})})),wl=x((()=>{})),Ba,Ul=x((()=>{nt(),nt(),wl(),de(),Ba=ce(Ka,[["__scopeId","data-v-46e61b5e"]])})),rt,qa,ut=x((()=>{se(),ue(),oe(),he(),Se(),rt={class:"settings-section"},qa=re({__name:"AgentSettings",setup(v){const t=be(),r=me(),{t:i}=ne(),s={};function w(m){t.updateLocal("agent",m),t.saveSection("agent",m).then(()=>{r.success(i("settings.saved"))}).catch(()=>{r.error(i("settings.saveFailed"))})}function A(m,p){t.updateLocal("agent",{[m]:p}),s[m]&&clearTimeout(s[m]),s[m]=setTimeout(async()=>{try{await t.saveSection("agent",{[m]:p}),r.success(i("settings.saved"))}catch{r.error(i("settings.saveFailed"))}},300)}return(m,p)=>(S(),O("section",rt,[a(H,{label:e(i)("settings.agent.maxTurns"),hint:e(i)("settings.agent.maxTurnsHint")},{default:u(()=>[a(e(ge),{value:e(t).agent.max_turns,min:1,max:200,step:5,size:"small",class:"input-sm","onUpdate:value":p[0]||(p[0]=n=>n!=null&&A("max_turns",n))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.gatewayTimeout"),hint:e(i)("settings.agent.gatewayTimeoutHint")},{default:u(()=>[a(e(ge),{value:e(t).agent.gateway_timeout,min:60,max:7200,step:60,size:"small",class:"input-sm","onUpdate:value":p[1]||(p[1]=n=>n!=null&&A("gateway_timeout",n))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.restartDrainTimeout"),hint:e(i)("settings.agent.restartDrainTimeoutHint")},{default:u(()=>[a(e(ge),{value:e(t).agent.restart_drain_timeout,min:10,max:300,step:10,size:"small",class:"input-sm","onUpdate:value":p[2]||(p[2]=n=>n!=null&&A("restart_drain_timeout",n))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.toolEnforcement"),hint:e(i)("settings.agent.toolEnforcementHint")},{default:u(()=>[a(e(Q),{value:e(t).agent.tool_use_enforcement||"auto",options:[{label:e(i)("settings.agent.auto"),value:"auto"},{label:e(i)("settings.agent.always"),value:"always"},{label:e(i)("settings.agent.never"),value:"never"}],size:"small",class:"input-sm","onUpdate:value":p[3]||(p[3]=n=>w({tool_use_enforcement:n}))},null,8,["value","options"])]),_:1},8,["label","hint"])]))}})})),Cl=x((()=>{})),Ya,kl=x((()=>{ut(),ut(),Cl(),de(),Ya=ce(qa,[["__scopeId","data-v-d06d83a7"]])})),dt,ct,vt,Xa,pt=x((()=>{se(),ue(),oe(),he(),Va(),Se(),dt={class:"settings-section gateway-auto-start-settings"},ct={class:"section-title"},vt={class:"section-hint"},Xa=re({__name:"GatewayAutoStartSettings",setup(v){const t=be(),r=Ra(),i=me(),{t:s}=ne(),w=P(()=>t.gatewayAutoStart.enabled!==!1),A=P(()=>Array.isArray(t.gatewayAutoStart.include)?"include":"all"),m=P(()=>t.gatewayAutoStart.management==="unified"),p=P(()=>t.gatewayAutoStart.include||[]),n=P(()=>t.gatewayAutoStart.exclude||[]),b=P(()=>(r.activeProfileName||r.activeProfile?.name||"default")==="default"),C=P(()=>r.profiles.map(D=>({label:D.name,value:D.name}))),y=P(()=>[{label:s("settings.gatewayAutoStart.modeAll"),value:"all"},{label:s("settings.gatewayAutoStart.modeInclude"),value:"include"}]);function V(D){const j=new Set,Z=[];for(const k of D){const d=String(k||"").trim();!d||j.has(d)||(j.add(d),Z.push(d))}return Z}async function E(D){try{t.updateLocal("gatewayAutoStart",D),await t.saveSection("gatewayAutoStart",D,{restart:!1}),await t.fetchSettings(),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}function T(D){E(D==="include"?{include:t.gatewayAutoStart.include||[],exclude:null}:{include:null})}function h(D){E({management:D?"unified":"per_profile"})}function F(D){E({include:V(D),exclude:null})}function W(D){const j=V(D);E({exclude:j.length>0?j:null})}return(D,j)=>(S(),O("section",dt,[f("h3",ct,_(e(s)("settings.gatewayAutoStart.title")),1),f("p",vt,_(e(s)("settings.gatewayAutoStart.description")),1),a(H,{label:e(s)("settings.gatewayAutoStart.enabled"),hint:e(s)("settings.gatewayAutoStart.enabledHint")},{default:u(()=>[a(e(le),{value:w.value,"onUpdate:value":j[0]||(j[0]=Z=>E({enabled:Z}))},null,8,["value"])]),_:1},8,["label","hint"]),b.value?(S(),X(H,{key:0,label:e(s)("settings.gatewayAutoStart.management"),hint:e(s)("settings.gatewayAutoStart.managementHint")},{default:u(()=>[a(e(le),{value:m.value,"onUpdate:value":h},null,8,["value"])]),_:1},8,["label","hint"])):B("",!0),a(H,{label:e(s)("settings.gatewayAutoStart.mode"),hint:e(s)("settings.gatewayAutoStart.modeHint")},{default:u(()=>[a(e(Q),{value:A.value,options:y.value,size:"small",class:"input-md","onUpdate:value":T}
1,null,8,["value","options"])]),_:1},8,["label","hint"]),A.value==="include"?(S(),X(H,{key:1,label:e(s)("settings.gatewayAutoStart.include"),hint:e(s)("settings.gatewayAutoStart.includeHint")},{default:u(()=>[a(e(Q),{multiple:"",filterable:"",value:p.value,options:C.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":F},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):B("",!0),A.value==="all"?(S(),X(H,{key:2,label:e(s)("settings.gatewayAutoStart.exclude"),hint:e(s)("settings.gatewayAutoStart.excludeHint")},{default:u(()=>[a(e(Q),{multiple:"",filterable:"",value:n.value,options:C.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":W},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):B("",!0)]))}})})),Pl=x((()=>{})),Wa,Tl=x((()=>{pt(),pt(),Pl(),de(),Wa=ce(Xa,[["__scopeId","data-v-a9b52cd2"]])})),mt,gt,_t,ft,ja,yt=x((()=>{se(),ue(),oe(),he(),Se(),mt={class:"settings-section proxy-settings"},gt={class:"section-title"},_t={class:"section-hint"},ft={class:"settings-actions"},ja=re({__name:"ProxySettings",setup(v){const t=be(),r=me(),{t:i}=ne(),s=["HTTPS_PROXY","HTTP_PROXY","ALL_PROXY","NO_PROXY"],w=Da({HTTPS_PROXY:"",HTTP_PROXY:"",ALL_PROXY:"",NO_PROXY:""});Pe(()=>t.proxy,m=>{for(const p of s)w[p]=String(m?.[p]||"")},{immediate:!0,deep:!0});async function A(){try{await t.saveSection("proxy",{...w}),await t.fetchSettings(),r.success(i("settings.saved"))}catch{r.error(i("settings.saveFailed"))}}return(m,p)=>(S(),O("section",mt,[f("h3",gt,_(e(i)("settings.proxy.title")),1),f("p",_t,_(e(i)("settings.proxy.description")),1),a(H,{label:e(i)("settings.proxy.httpsProxy"),hint:e(i)("settings.proxy.httpsProxyHint")},{default:u(()=>[a(e(ee),{value:w.HTTPS_PROXY,"onUpdate:value":p[0]||(p[0]=n=>w.HTTPS_PROXY=n),clearable:"",size:"small",class:"input-lg",placeholder:"http://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.httpProxy"),hint:e(i)("settings.proxy.httpProxyHint")},{default:u(()=>[a(e(ee),{value:w.HTTP_PROXY,"onUpdate:value":p[1]||(p[1]=n=>w.HTTP_PROXY=n),clearable:"",size:"small",class:"input-lg",placeholder:"http://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.allProxy"),hint:e(i)("settings.proxy.allProxyHint")},{default:u(()=>[a(e(ee),{value:w.ALL_PROXY,"onUpdate:value":p[2]||(p[2]=n=>w.ALL_PROXY=n),clearable:"",size:"small",class:"input-lg",placeholder:"socks5://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.noProxy"),hint:e(i)("settings.proxy.noProxyHint")},{default:u(()=>[a(e(ee),{value:w.NO_PROXY,"onUpdate:value":p[3]||(p[3]=n=>w.NO_PROXY=n),clearable:"",size:"small",class:"input-lg",placeholder:"localhost,127.0.0.1,.local"},null,8,["value"])]),_:1}
1,8,["label","hint"]),f("div",ft,[a(e(K),{type:"primary",loading:e(t).saving,onClick:A},{default:u(()=>[L(_(e(i)("settings.proxy.save")),1)]),_:1},8,["loading"])])]))}})})),Al=x((()=>{})),Ga,$l=x((()=>{yt(),yt(),Al(),de(),Ga=ce(ja,[["__scopeId","data-v-393316a4"]])})),bt,Ja,ht=x((()=>{se(),ue(),oe(),he(),Se(),bt={class:"settings-section"},Ja=re({__name:"MemorySettings",setup(v){const t=be(),r=me(),{t:i}=ne(),s={};function w(m){t.updateLocal("memory",m),t.saveSection("memory",m).then(()=>{r.success(i("settings.saved"))}).catch(()=>{r.error(i("settings.saveFailed"))})}function A(m,p){t.updateLocal("memory",{[m]:p}),s[m]&&clearTimeout(s[m]),s[m]=setTimeout(async()=>{try{await t.saveSection("memory",{[m]:p}),r.success(i("settings.saved"))}catch{r.error(i("settings.saveFailed"))}},300)}return(m,p)=>(S(),O("section",bt,[a(H,{label:e(i)("settings.memory.enabled"),hint:e(i)("settings.memory.enabledHint")},{default:u(()=>[a(e(le),{value:e(t).memory.memory_enabled,"onUpdate:value":p[0]||(p[0]=n=>w({memory_enabled:n}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.userProfile"),hint:e(i)("settings.memory.userProfileHint")},{default:u(()=>[a(e(le),{value:e(t).memory.user_profile_enabled,"onUpdate:value":p[1]||(p[1]=n=>w({user_profile_enabled:n}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.charLimit"),hint:e(i)("settings.memory.charLimitHint")},{default:u(()=>[a(e(ge),{value:e(t).memory.memory_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":p[2]||(p[2]=n=>n!=null&&A("memory_char_limit",n))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.userCharLimit"),hint:e(i)("settings.memory.userCharLimitHint")},{default:u(()=>[a(e(ge),{value:e(t).memory.user_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":p[3]||(p[3]=n=>n!=null&&A("user_char_limit",n))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),xl=x((()=>{})),Za,Ml=x((()=>{ht(),ht(),xl(),de(),Za=ce(Ja,[["__scopeId","data-v-b2529605"]])})),St,Qa,wt=x((()=>{se(),ue(),oe(),he(),Se(),St={class:"settings-section"},Qa=re({__name:"CompressionSettings",setup(v){const t=be(),r=me(),{t:i}=ne(),s={enabled:!0,threshold:.5,target_ratio:.2,protect_last_n:20,protect_first_n:3},w={};function A(p){t.updateLocal("compression",p),t.saveSection("compression",p).then(()=>{r.success(i("settings.saved"))}).catch(()=>{r.error(i("settings.saveFailed"))})}function m(p,n){t.updateLocal("compression",{[p]:n}),w[p]&&clearTimeout(w[p]),w[p]=setTimeout(async()=>{try{await t.saveSection("compression",{[p]:n}),r.success(i("settings.saved"))}catch{r.error(i("settings.saveFailed"))}},300)}return(p,n)=>(S(),O("section",St,[a(H,{label:e(i)("settings.compression.enabled"),hint:e(i)("settings.compression.enabledHint")},{default:u(()=>[a(e(le),{value:e(t).compression.enabled??s.enabled,size:"small","onUpdate:value":n[0]||(n[0]=b=>A({enabled:b}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.threshold"),hint:e(i)("settings.compression.thresholdHint")},{default:u(()=>[a(e(ge),{value:e(t).compression.threshold??s.threshold,min:.1,max:.95,step:.05,size:"small",class:"input-sm","onUpdate:value":n[1]||(n[1]=b=>b!=null&&m("threshold",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.targetRatio"),hint:e(i)("settings.compression.targetRatioHint")},{default:u(()=>[a(e(ge),{value:e(t).compression.target_ratio??s.target_ratio,min:.05,max:.8,step:.05,size:"small",class:"input-sm","onUpdate:value":n[2]||(n[2]=b=>b!=null&&m("target_ratio",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.protectLastN"),hint:e(i)("settings.compression.protectLastNHint")},{default:u(()=>[a(e(ge),{value:e(t).compression.protect_last_n??s.protect_last_n,min:0,max:200,step:1,size:"small",class:"input-sm","onUpdate:value":n[3]||(n[3]=b=>b!=null&&m("protect_last_n",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.protectFirstN"),hint:e(i)("settings.compression.protectFirstNHint")},{default:u(()=>[a(e(ge),{value:e(t).compression.protect_first_n??s.protect_first_n,min:0,max:50,step:1,size:"small",class:"input-sm","onUpdate:value":n[4]||(n[4]=b=>b!=null&&m("protect_first_n",b))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Fl=x((()=>{})),ei,Ol=x((()=>{wt(),wt(),Fl(),de(),ei=ce(Qa,[["__scopeId","data-v-b584a6a0"]])}
1)),Ut,ti,Ct=x((()=>{se(),ue(),oe(),he(),nl(),Se(),Ut={class:"settings-section"},ti=re({__name:"SessionSettings",setup(v){const t=be(),r=ol(),i=me(),{t:s}=ne(),w={};function A(b){t.updateLocal("session_reset",b),t.saveSection("session_reset",b).then(()=>{i.success(s("settings.saved"))}).catch(()=>{i.error(s("settings.saveFailed"))})}function m(b,C){t.updateLocal("session_reset",{[b]:C}),w[b]&&clearTimeout(w[b]),w[b]=setTimeout(async()=>{try{await t.saveSection("session_reset",{[b]:C}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}},300)}async function p(b){try{await t.saveSection("approvals",{mode:b?"manual":"off"}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}async function n(b,C){try{t.updateLocal(b,{write_approval:C}),await t.saveSection(b,{write_approval:C}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}return(b,C)=>(S(),O("section",Ut,[a(H,{label:e(s)("settings.session.requireAuth"),hint:e(s)("settings.session.requireAuthHint")},{default:u(()=>[a(e(le),{value:e(t).approvals.mode==="manual","onUpdate:value":p},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.memoryWriteApproval"),hint:e(s)("settings.session.memoryWriteApprovalHint")},{default:u(()=>[a(e(le),{value:e(t).memory.write_approval===!0,"onUpdate:value":C[0]||(C[0]=y=>n("memory",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.skillsWriteApproval"),hint:e(s)("settings.session.skillsWriteApprovalHint")},{default:u(()=>[a(e(le),{value:e(t).skills.write_approval===!0,"onUpdate:value":C[1]||(C[1]=y=>n("skills",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.mode"),hint:e(s)("settings.session.modeHint")},{default:u(()=>[a(e(Q),{value:e(t).sessionReset.mode||"both",options:[{label:e(s)("settings.session.modeBoth"),value:"both"},{label:e(s)("settings.session.modeIdle"),value:"idle"},{label:e(s)("settings.session.modeDaily"),value:"daily"},{label:e(s)("settings.session.modeNone"),value:"none"}],size:"small",class:"input-md","onUpdate:value":C[2]||(C[2]=y=>A({mode:y}))},null,8,["value","options"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.idleMinutes"),hint:e(s)("settings.session.idleMinutesHint")},{default:u(()=>[a(e(ge),{value:e(t).sessionReset.idle_minutes,min:10,max:10080,step:30,size:"small",class:"input-sm","onUpdate:value":C[3]||(C[3]=y=>y!=null&&m("idle_minutes",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.atHour"),hint:e(s)("settings.session.atHourHint")},{default:u(()=>[a(e(ge),{value:e(t).sessionReset.at_hour,min:0,max:23,step:1,size:"small",class:"input-sm","onUpdate:value":C[4]||(C[4]=y=>y!=null&&m("at_hour",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.liveMonitorHumanOnly"),hint:e(s)("settings.session.liveMonitorHumanOnlyHint")},{default:u(()=>[a(e(le),{value:e(r).humanOnly,"onUpdate:value":C[5]||(C[5]=y=>e(r).setHumanOnly(y))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Dl=x((()=>{})),si,Il=x((()=>{Ct(),Ct(),Dl(),de(),si=ce(ti,[["__scopeId","data-v-5027aa2c"]])})),kt,ai,Pt=x((()=>{se(),ue(),oe(),he(),Se(),kt={class:"settings-section"},ai=re({__name:"PrivacySettings",setup(v){const t=be(),r=me(),{t:i}=ne();async function s(w){try{await t.saveSection("privacy",w),r.success(i("settings.saved"))}catch{r.error(i("settings.saveFailed"))}}return(w,A)=>(S(),O("section",kt,[a(H,{label:e(i)("settings.privacy.redactPii"),hint:e(i)("settings.privacy.redactPiiHint")},{default:u(()=>[a(e(le),{value:e(t).privacy.redact_pii,"onUpdate:value":A[0]||(A[0]=m=>s({redact_pii:m}))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),zl=x((()=>{})),ii,Rl=x((()=>{Pt(),Pt(),zl(),de(),ii=ce(ai,[["__scopeId","data-v-43145f27"]])})),Tt,At,$t,xt,Mt,Ft,Ot,Dt,li,It=x((()=>{se(),ue(),sl(),Hi(),oe(),Tt={class:"settings-section"},At={key:0,class:"empty-hint"},$t={class:"provider-header"},xt={class:"provider-name"},Mt={key:0,class:"provider-fields"},Ft={class:"field-row"},Ot={key:1,class:"provider-fields"},Dt={class:"field-row"},li=re({__name:"ModelSettings",setup(v){const{t}
1=ne(),r=tl(),i=me(),s=$(null),w=$({});ke(()=>{r.providers.length===0&&r.fetchProviders()});const A=b=>!r.providers.find(C=>C.provider===b)?.builtin&&b.startsWith("custom:");function m(b){if(!(b in w.value)){const C=r.providers.find(y=>y.provider===b);w.value[b]=C?.api_key||""}return w.value[b]}async function p(b){const C=m(b);if(!C.trim()){i.warning(t("settings.models.apiKeyPlaceholder"));return}s.value=b;try{await Je(b,{api_key:C.trim()}),i.success(t("settings.models.saved")),await r.fetchProviders()}catch(y){i.error(y.message||t("settings.models.saveFailed"))}finally{s.value=null}}async function n(b){const C=m(b);s.value=b;try{await Je(b,{api_key:C.trim()}),i.success(t("settings.models.saved")),await r.fetchProviders()}catch(y){i.error(y.message||t("settings.models.saveFailed"))}finally{s.value=null}}return(b,C)=>(S(),O("section",Tt,[a(e(Oa),{show:e(r).loading},{default:u(()=>[e(r).providers.length===0?(S(),O("div",At,[a(e(Vi),{description:e(t)("settings.models.noProviders")},null,8,["description"])])):B("",!0),(S(!0),O(ye,null,xe(e(r).providers,y=>(S(),O("div",{key:y.provider,class:"provider-section"},[f("div",$t,[f("h4",xt,_(y.label),1),f("span",{class:He(["type-badge",A(y.provider)?"custom":"builtin"])},_(A(y.provider)?e(t)("models.customType"):e(t)("models.builtIn")),3)]),A(y.provider)?(S(),O("div",Ot,[f("div",Dt,[a(e(ee),{value:m(y.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":V=>w.value[y.provider]=V},null,8,["value","placeholder","onUpdate:value"]),a(e(K),{type:"primary",size:"small",loading:s.value===y.provider,onClick:V=>n(y.provider)},{default:u(()=>[L(_(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])])):(S(),O("div",Mt,[f("div",Ft,[a(e(ee),{value:m(y.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":V=>w.value[y.provider]=V},null,8,["value","placeholder","onUpdate:value"]),a(e(K),{type:"primary",size:"small",loading:s.value===y.provider,onClick:V=>p(y.provider)},{default:u(()=>[L(_(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])]))]))),128))]),_:1},8,["show"])]))}})})),Vl=x((()=>{})),oi,Nl=x((()=>{It(),It(),Vl(),de(),oi=ce(li,[["__scopeId","data-v-8cd750e1"]])})),zt,Rt,Vt,Nt,Ht,Lt,Et,Kt,Bt,qt,Yt,Xt,Wt,jt,Gt,Jt,Zt,Qt,es,ts,ss,as,is,ls,os,ni,ns=x((()=>{se(),ue(),oe(),za(),al(),zt=zi(il()),Rt={class:"account-settings"},Vt={class:"section-desc"},Nt={class:"avatar-section"},Ht={class:"section-title"},Lt={class:"avatar-row"},Et={class:"avatar-display"},Kt={class:"avatar-actions"},Bt={class:"avatar-hint"},qt={class:"action-buttons"},Yt={class:"configured-section"},Xt={class:"action-row"},Wt={class:"action-label"},jt={class:"action-buttons"},Gt={class:"locked-ips-section"},Jt={class:"section-title"},Zt={class:"action-row",style:{"margin-bottom":"12px"}},Qt={class:"action-label"},es={class:"action-buttons"},ts={key:0,class:"locked-list"},ss={class:"locked-info"},as={class:"locked-ip"},is={class:"locked-badge"},ls={class:"locked-ttl"},os={key:1,class:"empty-hint"},ni=re({__name:"AccountSettings",setup(v){const{t}=ne(),r=me(),i=$(null),s=$(!1),w=$(null),A=$(null),m=$(!1);function p(M,o){return new Promise((l,c)=>{const J=new FileReader;J.onload=()=>{const ie=new Image;ie.onload=()=>{const pe=document.createElement("canvas");
1pe.width=ie.width,pe.height=ie.height,pe.getContext("2d").drawImage(ie,0,0);const we=Te=>{const Oe=pe.toDataURL("image/jpeg",Te);Oe.length<=o||Te<=.3?l(Oe):we(Te-.1)};we(.8)},ie.onerror=c,ie.src=J.result},J.onerror=c,J.readAsDataURL(M)})}async function n(M){const o=M.target,l=o.files?.[0];if(l){if(!["image/png","image/jpeg","image/webp"].includes(l.type)){r.error(t("settings.userAvatar.invalidType")),o.value="";return}if(l.size>1024*1024){r.error(t("settings.userAvatar.tooLarge")),o.value="";return}m.value=!0;try{let c;l.size>500*1024?c=await p(l,500*1024):c=await new Promise((J,ie)=>{const pe=new FileReader;pe.onload=()=>J(pe.result),pe.onerror=ie,pe.readAsDataURL(l)}),await Ze({type:"image",dataUrl:c}),w.value={type:"image",dataUrl:c},r.success(t("settings.userAvatar.saveSuccess"))}catch(c){r.error(c.message||t("settings.userAvatar.saveFailed"))}finally{m.value=!1,o.value=""}}}async function b(){m.value=!0;try{const M=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():Math.random().toString(36).slice(2),o=`${i.value||"default"}-${Date.now()}-${M}`,l=(0,zt.default)(o),c="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(l)));await Ze({type:"image",dataUrl:c,seed:o}),w.value={type:"image",dataUrl:c,seed:o},r.success(t("settings.userAvatar.saveSuccess"))}catch(M){r.error(M.message||t("settings.userAvatar.saveFailed"))}finally{m.value=!1}}async function C(){m.value=!0;try{await Bi(),w.value={type:"default",seed:i.value||"default"},r.success(t("settings.userAvatar.resetSuccess"))}catch(M){r.error(M.message||t("settings.userAvatar.resetFailed"))}finally{m.value=!1}}const y=$(!1),V=$(""),E=$(""),T=$(""),h=$(!1),F=$(""),W=$("");ke(async()=>{try{i.value=(await ji()).username}catch{}try{w.value=await Yi()||{type:"default",seed:i.value||"default"}}catch{}});async function D(){if(E.value!==T.value){r.error(t("login.passwordMismatch"));return}if(E.value.length<6){r.error(t("login.passwordTooShort"));return}s.value=!0;try{await Qi(V.value,E.value),y.value=!1,V.value="",E.value="",T.value="",r.success(t("login.passwordChanged"))}catch(M){r.error(M.message||t("common.saveFailed"))}finally{s.value=!1}}async function j(){if(W.value.trim().length<2){r.error(t("login.usernameTooShort"));return}s.value=!0;try{await Wi(F.value,W.value.trim()),i.value=W.value.trim(),h.value=!1,F.value="",W.value="",r.success(t("login.usernameChanged"))}catch(M){r.error(M.message||t("common.saveFailed"))}finally{s.value=!1}}function Z(){V.value="",E.value="",T.value="",y.value=!0}function k(){F.value="",W.value="",h.value=!0}const d=$([]),g=$(!1);async function U(){g.value=!0;try{d.value=await Zi()}catch{}finally{g.value=!1}}async function I(M){try{await Xi(M),r.success(t("settings.lockedIps.unlocked")),await U()}catch(o){r.error(o.message||t("common.saveFailed"))}}async function Y(){try{const M=await Gi();r.success(t("settings.lockedIps.allUnlocked",{count:M})),await U()}catch(M){r.error(M.message||t("common.saveFailed"))}}function ae(M){const o=Math.max(0,Math.round((M-Date.now())/6e4));return o>0?`${o} min`:t("common.expired")}function q(M){return t(`settings.lockedIps.type.${M}`)}return ke(()=>{U()}),(M,o)=>(S(),O("div",Rt,[f("p",Vt,_(e(t)("login.setupDescription")),1),f("div",Nt,[f("h3",Ht,_(e(t)("settings.userAvatar.title")),1),f("div",Lt,[f("div",Et,[a(ll,{name:i.value||"default",avatar:w.value?.type==="image"&&w.value.dataUrl?{type:"image",dataUrl:w.value.dataUrl}:null,size:80},null,8,["name","avatar"])]),f("div",Kt,[f("p",Bt,_(e(t)("settings.userAvatar.hint")),1),f("div",qt,[a(e(K),{onClick:o[0]||(o[0]=l=>A.value?.click())},{default:u(()=>[L(_(e(t)("settings.userAvatar.upload")),1)]),_:1}),a(e(K),{onClick:b,loading:m.value},{default:u(()=>[L(_(e(t)("settings.userAvatar.random")),1)]),_:1},8,["loading"]),a(e(K),{onClick:C,loading:m.value},{default:u(()=>[L(_(e(t)("settings.userAvatar.reset")),1)]),_:1},8,["loading"])]),f("input",{ref_key:"avatarFileInput",ref:A,type:"file",accept:".png,.jpg,.jpeg,.webp",style:{display:"none"},onChange:n},null,544)])])]),f("div",Yt,[f("div",Xt,[f("span",Wt,_(e(t)("login.passwordLoginConfigured",{username:i.value})),1),f("div",jt,[a(e(K),{onClick:Z},{default:u(()=>[L(_(e(t)("login.changePassword")),1)]),_:1}),a(e(K),{onClick:k},{default:u(()=>[L(_(e(t)("login.changeUsername")),1)]),_:1})])])]),f("div",Gt,[f("h3",Jt,_(e(t)("settings.lockedIps.title")),1),f("div",Zt,[f("span",Qt,_(e(t)("settings.lockedIps.count",{count:d.value.length})),1),f("div",es,[a(e(K),{size:"small",loading:g.value,onClick:U},{default:u(()=>
1[L(_(e(t)("common.retry")),1)]),_:1},8,["loading"]),d.value.length>0?(S(),X(e(Ia),{key:0,onPositiveClick:Y},{trigger:u(()=>[a(e(K),{size:"small",type:"warning"},{default:u(()=>[L(_(e(t)("settings.lockedIps.unlockAll")),1)]),_:1})]),default:u(()=>[L(" "+_(e(t)("settings.lockedIps.unlockAllConfirm")),1)]),_:1})):B("",!0)])]),d.value.length>0?(S(),O("div",ts,[(S(!0),O(ye,null,xe(d.value,l=>(S(),O("div",{key:l.ip+l.type,class:"locked-item"},[f("div",ss,[f("span",as,_(l.ip),1),f("span",is,_(q(l.type)),1),f("span",ls,_(ae(l.lockedUntil)),1)]),a(e(K),{size:"tiny",type:"error",ghost:"",onClick:c=>I(l.ip)},{default:u(()=>[L(_(e(t)("settings.lockedIps.unlock")),1)]),_:1},8,["onClick"])]))),128))])):(S(),O("p",os,_(e(t)("settings.lockedIps.empty")),1))]),a(e(ze),{show:y.value,"onUpdate:show":o[5]||(o[5]=l=>y.value=l),preset:"dialog",title:e(t)("login.changePassword")},{action:u(()=>[a(e(K),{onClick:o[4]||(o[4]=l=>y.value=!1)},{default:u(()=>[L(_(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:D},{default:u(()=>[L(_(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Me),{"label-placement":"top"},{default:u(()=>[a(e(G),{label:e(t)("login.currentPassword")},{default:u(()=>[a(e(ee),{value:V.value,"onUpdate:value":o[1]||(o[1]=l=>V.value=l),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(G),{label:e(t)("login.newPassword")},{default:u(()=>[a(e(ee),{value:E.value,"onUpdate:value":o[2]||(o[2]=l=>E.value=l),type:"password","show-password-on":"click",placeholder:e(t)("login.newPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(G),{label:e(t)("login.confirmPassword")},{default:u(()=>[a(e(ee),{value:T.value,"onUpdate:value":o[3]||(o[3]=l=>T.value=l),type:"password","show-password-on":"click",placeholder:e(t)("login.confirmPassword"),onKeyup:je(D,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"]),a(e(ze),{show:h.value,"onUpdate:show":o[9]||(o[9]=l=>h.value=l),preset:"dialog",title:e(t)("login.changeUsername")},{action:u(()=>[a(e(K),{onClick:o[8]||(o[8]=l=>h.value=!1)},{default:u(()=>[L(_(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:j},{default:u(()=>[L(_(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Me),{"label-placement":"top"},{default:u(()=>[a(e(G),{label:e(t)("login.currentPassword")},{default:u(()=>[a(e(ee),{value:F.value,"onUpdate:value":o[6]||(o[6]=l=>F.value=l),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(G),{label:e(t)("login.newUsername")},{default:u(()=>[a(e(ee),{value:W.value,"onUpdate:value":o[7]||(o[7]=l=>W.value=l),placeholder:e(t)("login.usernamePlaceholder"),onKeyup:je(j,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"])]))}})})),Hl=x((()=>{})),ri,Ll=x((()=>{ns(),ns(),Hl(),de(),ri=ce(ni,[["__scopeId","data-v-61e79d43"]])})),rs,us,ds,cs,ui,vs=x((()=>{se(),ue(),oe(),za(),rs={class:"user-management"},us={class:"toolbar"},ds={class:"section-title"},cs={class:"section-desc"},ui=re({__name:"UserManagementSettings",setup(v){const{t}=ne(),r=me(),i=$(!1),s=$(!1),w=$([]),A=$([]),m=$(!1),p=$(null),n=Da({username:"",password:"",role:"admin",status:"active",profiles:[]}),b=P(()=>[{label:t("users.roles.admin"),value:"admin"},{label:t("users.roles.superAdmin"),value:"super_admin"}]),C=P(()=>[{label:t("users.status.active"),value:"active"},{label:t("users.status.disabled"),value:"disabled"}]),y=P(()=>A.value.map(k=>({label:k,value:k})));function V(){p.value=null,n.username="",n.password="",n.role="admin",n.status="active",n.profiles=[]}async function E(){i.value=!0;try{const k=await Ki();w.value=k.users,A.value=k.profiles}catch(k){r.error(k.message||t("users.loadFailed"))}finally{i.value=!1}}function T(){V(),m.value=!0}function h(k){p.value=k,n.username=k.username,n.password="",n.role=k.role,n.status=k.status,n.profiles=[...k.profiles],m.value=!0}async function F(){if(n.username.trim().length<2){r.error(t("login.usernameTooShort"));return}if(!p.value&&n.password.length<6){r.error(t("login.passwordTooShort"));return}if(n.password&&n.password.length<6){r.error(t("login.passwordTooShort"));return}s.value=!0;try{const k={username:n.username.trim(),password:n.password||void 0,role:n.role,status:n.status,profiles:n.role==="super_admin"?[]:n.profiles,defaultProfile:n.profiles[0]||null},d=p.value?await Qe(p.value.id,k):await Ji({...k,password:n.password});w.value=d.users,A.value=d.profiles,m.value=!1,V(),r.success(t("common.saved"))}catch(k){r.error(k.message||t("common.saveFailed"))}finally{s.value=!1}}async function W(k,d){s.value=!0;try{const g=await Qe(k.id,{status:d});w.value=g.users,A.value=g.profiles,r.success(t("common.saved"))}catch(g){r.error(g.message||t("common.saveFailed"))}finally{s.value=!1}}async function D(k){s.value=!0;try{const d=await qi(k.id);w.value=d.users,A.value=d.profiles,r.success(t("common.saved"))}catch(d){r.error(d.message||t("common.deleteFailed"))}finally{s.value=!1}}
1function j(k){return k?new Date(k).toLocaleString():"-"}const Z=P(()=>[{title:t("users.username"),key:"username",minWidth:140},{title:t("users.role"),key:"role",width:130,render:k=>_e(Ie,{size:"small",type:k.role==="super_admin"?"warning":"default"},{default:()=>k.role==="super_admin"?t("users.roles.superAdmin"):t("users.roles.admin")})},{title:t("users.statusLabel"),key:"status",width:110,render:k=>_e(Ie,{size:"small",type:k.status==="active"?"success":"error"},{default:()=>k.status==="active"?t("users.status.active"):t("users.status.disabled")})},{title:t("users.profiles"),key:"profiles",minWidth:200,render:k=>k.role==="super_admin"?_e("span",{class:"muted"},t("users.allProfiles")):_e(Ue,{size:4},{default:()=>k.profiles.length?k.profiles.map(d=>_e(Ie,{size:"small",bordered:!1},{default:()=>d})):_e("span",{class:"muted"},t("users.noProfiles"))})},{title:t("users.lastLogin"),key:"last_login_at",minWidth:170,render:k=>j(k.last_login_at)},{title:t("common.edit"),key:"actions",width:280,render:k=>_e(Ue,{size:8},{default:()=>[_e(K,{size:"small",onClick:()=>h(k)},{default:()=>t("common.edit")}),_e(K,{size:"small",type:k.status==="active"?"warning":"primary",ghost:!0,loading:s.value,onClick:()=>W(k,k.status==="active"?"disabled":"active")},{default:()=>k.status==="active"?t("users.disable"):t("users.enable")}),_e(Ia,{onPositiveClick:()=>D(k)},{trigger:()=>_e(K,{size:"small",type:"error",ghost:!0,loading:s.value},{default:()=>t("common.delete")}),default:()=>t("users.deleteConfirm")})]})}]);return ke(E),(k,d)=>(S(),O("div",rs,[f("div",us,[f("div",null,[f("h3",ds,_(e(t)("users.title")),1),f("p",cs,_(e(t)("users.description")),1)]),a(e(K),{type:"primary",onClick:T},{default:u(()=>[L(_(e(t)("users.create")),1)]),_:1})]),a(e(Ei),{columns:Z.value,data:w.value,loading:i.value,bordered:!1,"single-line":!1,size:"small"},null,8,["columns","data","loading"]),a(e(ze),{show:m.value,"onUpdate:show":d[6]||(d[6]=g=>m.value=g),preset:"dialog",title:p.value?e(t)("users.edit"):e(t)("users.create")},{action:u(()=>[a(e(K),{onClick:d[5]||(d[5]=g=>m.value=!1)},{default:u(()=>[L(_(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:F},{default:u(()=>[L(_(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Me),{"label-placement":"top"},{default:u(()=>[a(e(G),{label:e(t)("users.username")},{default:u(()=>[a(e(ee),{value:n.username,"onUpdate:value":d[0]||(d[0]=g=>n.username=g),placeholder:e(t)("login.usernamePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(G),{label:p.value?e(t)("users.newPasswordOptional"):e(t)("login.newPassword")},{default:u(()=>[a(e(ee),{value:n.password,"onUpdate:value":d[1]||(d[1]=g=>n.password=g),type:"password","show-password-on":"click",placeholder:e(t)("login.passwordPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(G),{label:e(t)("users.role")},{default:u(()=>[a(e(Q),{value:n.role,"onUpdate:value":d[2]||(d[2]=g=>n.role=g),options:b.value},null,8,["value","options"])]),_:1},8,["label"]),a(e(G),{label:e(t)("users.statusLabel")},{default:u(()=>[a(e(Q),{value:n.status,"onUpdate:value":d[3]||(d[3]=g=>n.status=g),options:C.value},null,8,["value","options"])]),_:1},8,["label"]),n.role!=="super_admin"?(S(),X(e(G),{key:0,label:e(t)("users.profiles")},{default:u(()=>[a(e(Q),{value:n.profiles,"onUpdate:value":d[4]||(d[4]=g=>n.profiles=g),multiple:"",filterable:"",options:y.value,placeholder:e(t)("users.profilesPlaceholder")},null,8,["value","options","placeholder"])]),_:1},8,["label"])):B("",!0)]),_:1})]),_:1},8,["show","title"])]))}})})),El=x((()=>{})),di,Kl=x((()=>{vs(),vs(),El(),de(),di=ce(ui,[["__scopeId","data-v-bcd3f33a"]])}));function Bl(v){return v==="edge"||v==="openai"||v==="custom"||v==="mimo"||v==="doubao"?v:null}function ql(v){if(v&&typeof v=="object"){const t=v,r=Bl(t.activeProvider);if(Array.isArray(t.providers))return{providers:t.providers,activeProvider:r};if(Array.isArray(t.settings))return{providers:t.settings,activeProvider:r}}return{providers:[],activeProvider:null}}async function Yl(){return ql(await Fe("/api/hermes/tts/settings"))}async function Xl(v,t){const r=await Fe(`/api/hermes/tts/settings/${v}`,{method:"PUT",body:JSON.stringify(t)});return typeof r=="object"&&r!==null&&"setting"in r?r.setting:r}async function Wl(v){return(await Fe("/api/hermes/tts/settings/active",{method:"PUT",body:JSON.stringify({provider:v})})).activeProvider}async function jl(v){return Fe(`/api/hermes/tts/settings/${v}`,{method:"DELETE"})}var Gl=x((()=>{Ee()})),Ce,Xe=x((()=>{Ye(),Ce=[{id:"tts-edge",kind:"tts",provider:"edge",label:"Edge TTS",labelKey:"settings.voice.presetEdgeTtsLabel",description:"Free high-quality cloud voices from Microsoft Edge.",descriptionKey:"settings.voice.presetEdgeTtsDescription",isBuiltin:!0,isSecretRequired:!1,capabilities:{voices:!0,rate:!0,pitch:!0}},{id:"tts-openai",kind:"tts",provider:"openai",label:"OpenAI TTS",labelKey:"settings.voice.presetOpenaiTtsLabel",baseUrl:"https://api.openai.com/v1/audio/speech",defaultModel:"tts-1",isSecretRequired:!0,capabilities:{models:!0,voices:!0}},{id:"tts-mimo",kind:"tts",provider:"mimo",label:"MiMo TTS",labelKey:"settings.voice.presetMimoTtsLabel",baseUrl:"https://api.xiaomimimo.com/v1",defaultModel:"mimo-v2.5-tts",isSecretRequired:!0,capabilities:{models:!0,voices:!0,stylePrompt:!0,voiceDesign:!0,voiceClone:!0}},{id:"tts-doubao",kind:"tts",provider:"doubao",label:"Volcengine Doubao TTS",labelKey:"settings.voice.presetDoubaoTtsLabel",baseUrl:"https://openspeech.bytedance.com/api/v3/tts/unidirectional",defaultModel:qe,isSecretRequired:!0,capabilities:{models:!0,voices:!0,stylePrompt:!0}},{id:"tts-custom",kind:"tts",provider:"custom",label:"Custom TTS",labelKey:"settings.voice.presetCustomTtsLabel",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-browser",kind:"stt",provider:"browser",label:"Browser STT",labelKey:"settings.voice.presetBrowserSttLabel",description:"Native browser speech recognition API.",descriptionKey:"settings.voice.presetBrowserSttDescription",isBuiltin:!0,isSecretRequired:!1,capabilities:{}},{id:"stt-openai",kind:"stt",provider:"openai",label:"OpenAI Whisper",labelKey:"settings.voice.presetOpenaiWhisperLabel",baseUrl:"https://api.openai.com/v1",defaultModel:"whisper-1",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-groq",kind:"stt",provider:"custom",label:"Groq STT",labelKey:"settings.voice.presetGroqSttLabel",baseUrl:"https://api.groq.com/openai/v1",defaultModel:"whisper-large-v3",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-doubao",kind:"stt",provider:"doubao",label:"Volcengine Doubao STT",labelKey:"settings.voice.presetDoubaoSttLabel",baseUrl:"https://openspeech.bytedance.com/api/v3/auc/bigmodel",defaultModel:"volc.seedasr.auc",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-custom",kind:"stt",provider:"custom",label:"Custom STT",labelKey:"settings.voice.presetCustomSttLabel",isSecretRequired:!0,capabilities:{models:!0}}]}));function ps(v){return v==="openai"||v==="custom"||v==="doubao"}function ms(v){return v==="edge"||v==="openai"||v==="custom"||v==="mimo"||v==="doubao"}function Ve(v){return v==="browser"||v==="openai"||v==="custom"||v==="doubao"}function Ne(v){return v==="edge"||v==="openai"||v==="custom"||v==="mimo"||v==="doubao"}function te(v,t){const r=v[t];return typeof r=="string"?r:""}function Jl(){const{t:v}=ne(),t=$([]),r=$(!1),i=Ke(),s=pl(),w=$(i.provider.value==="webspeech"?"edge":i.provider.value),A=$(s.provider.value),m=P(()=>`tts-${w.value}`),p=P(()=>`stt-${A.value}`),n=P(()=>t.value.filter(d=>d.kind==="tts")),b=P(()=>t.value.filter(d=>d.kind==="stt")),C=P(()=>n.value.find(d=>d.id===m.value)||n.value[0]||null),y=P(()=>b.value.find(d=>d.id===p.value)||b.value[0]||null),V=P(()=>n.value.map(d=>({label:d.label,value:d.id}))),E=P(()=>b.value.map(d=>({label:d.label,value:d.id})));function T(d){if(!Ne(d.provider))return;i.setProvider(d.provider);const g=d.settings;if(d.provider==="edge"){i.setEdgeVoice(te(g,"voice")||d.voice||i.edgeVoice.value);const U=Number(g.rate),I=Number(g.pitch);Number.isFinite(U)&&i.setEdgeRate(U),Number.isFinite(I)&&i.setEdgePitchHz(I);return}if(d.provider==="openai"){i.setOpenaiBaseUrl(d.baseUrl||te(g,"baseUrl")),i.setOpenaiModel(d.model||te(g,"model")||i.openaiModel.value),i.setOpenaiVoice(d.voice||te(g,"voice")||i.openaiVoice.value);return}if(d.provider==="custom"){i.setCustomUrl(d.baseUrl||te(g,"baseUrl"));return}if(d.provider==="mimo"){i.setMimoBaseUrl(d.baseUrl||te(g,"baseUrl")||i.mimoBaseUrl.value),i.setMimoModel(d.model||te(g,"model")||i.mimoModel.value),i.setMimoVoice(d.voice||te(g,"voice")||i.mimoVoice.value),i.setMimoStylePrompt(te(g,"stylePrompt")),i.setMimoVoiceDesignDesc(te(g,"voiceDesignDesc"));const U=te(g,"voiceCloneFormat");(U==="mp3"||U==="wav")&&i.setMimoVoiceCloneFormat(U);return}d.provider==="doubao"&&(i.setDoubaoBaseUrl(d.baseUrl||te(g,"baseUrl")||i.doubaoBaseUrl.value),i.setDoubaoModel(d.model||te(g,"model")||i.doubaoModel.value),i.setDoubaoVoice(d.voice||te(g,"voice")||i.doubaoVoice.value),i.setDoubaoStylePrompt(te(g,"stylePrompt")))}function h(d){if(!Ve(d.provider))return;s.setProvider(d.provider);const g=d.settings;if(d.provider==="openai"){s.setOpenaiModel(d.model||te(g,"model")||s.openaiModel.value),s.setOpenaiLanguage(te(g,"language")),s.setOpenaiPrompt(te(g,"prompt"));return}d.provider==="custom"&&(s.setCustomBaseUrl(d.baseUrl||te(g,"baseUrl")),s.setCustomModel(d.model||te(g,"model")||s.customModel.value),s.setCustomLanguage(te(g,"language")),s.setCustomPrompt(te(g,"prompt")))}function F(d,g,U){const I=Ce.find(Y=>Y.kind==="tts"&&Y.provider===d&&(Y.baseUrl===g.baseUrl||!Y.baseUrl));return{id:`tts-${d}`,kind:"tts",provider:d,label:I?.labelKey?v(I.labelKey):I?.label||`${d} TTS`,baseUrl:g.baseUrl,model:g.model,voice:g.voice,settings:g,hasSecret:U,active:m.value===`tts-${d}`}}function W(d,g,U){const I=Ce.find(Y=>Y.kind==="stt"&&Y.provider===d&&(Y.baseUrl===g.baseUrl||!Y.baseUrl));return{id:`stt-${d}`,kind:"stt",provider:d,label:I?.labelKey?v(I.labelKey):I?.label||`${d} STT`,baseUrl:g.baseUrl,model:g.model,settings:g,hasSecret:U,active:p.value===`stt-${d}`}}async function D(){r.value=!0;try{await s.loadServerSttSettings(!0);const[d,g]=await Promise.all([Yl(),cl()]);d.activeProvider&&Ne(d.activeProvider)&&(w.value=d.activeProvider,i.setProvider(d.activeProvider)),g.activeProvider&&Ve(g.activeProvider)&&(A.value=g.activeProvider,s.setProvider(g.activeProvider));const U=[{id:"tts-edge",kind:"tts",provider:"edge",label:v("settings.voice.presetEdgeTtsLabel"),isBuiltin:!0,hasSecret:!1,active:m.value==="tts-edge",settings:{voice:i.edgeVoice.value,rate:i.edgeRate.value,pitch:i.edgePitchHz.value},voice:i.edgeVoice.value},{id:"stt-browser",kind:"stt",provider:"browser",label:v("settings.voice.presetBrowserSttLabel"),isBuiltin:!0,hasSecret:!1,active:p.value==="stt-browser",settings:{}}];for(const I of d.providers){const Y=F(I.provider,I.settings,I.secrets?.apiKey==="[stored]"),ae=U.find(q=>q.id===Y.id);ae?Object.assign(ae,Y,{isBuiltin:ae.isBuiltin}):U.push(Y)}for(const I of g.providers)U.push(W(I.provider,I.settings,I.secrets?.apiKey==="[stored]"));t.value=U.map(I=>({...I,active:I.kind==="tts"?I.id===m.value:I.id===p.value}))}finally{r.value=!1}}async function j(d,g){const U=t.value.find(I=>I.kind===d&&I.id===g);U&&(d==="tts"?Ne(U.provider)&&(w.value=await Wl(U.provider),T(U)):Ve(U.provider)&&(A.value=await st(U.provider),h(U)),t.value=t.value.map(I=>({...I,active:I.kind===d?I.id===g:I.active})))}async function Z(d,g,U){if(d==="tts"){if(!ms(g))throw new Error(`Unsupported TTS provider: ${String(g)}`);const Y={...U.settings||{}},ae=Object.prototype.hasOwnProperty.call(Y,"voiceCloneDataUri"),q=Object.prototype.hasOwnProperty.call(Y,"voiceCloneFileName"),M=Y.voiceCloneDataUri,o=Y.voiceCloneFileName;delete Y.voiceCloneDataUri,delete Y.voiceCloneFileName;const l=await Xl(g,{settings:Y,secrets:U.secrets,activeProvider:g});return await D(),await j("tts",`tts-${g}
1`),g==="mimo"&&(ae&&typeof M=="string"&&i.setMimoVoiceCloneDataUri(M),q&&typeof o=="string"&&i.setMimoVoiceCloneFileName(o)),l}if(g==="browser")return A.value=await st("browser"),s.setProvider("browser"),await D(),null;if(!ps(g))throw new Error(`Unsupported STT provider: ${String(g)}`);const I=await gl(g,{settings:U.settings,secrets:U.secrets,activeProvider:g});return await D(),await j("stt",`stt-${g}`),I}async function k(d,g){if(d==="tts"){if(!ms(g)||g==="edge")return;await jl(g)}else{if(!ps(g))return;await ml(g)}await D()}return{connections:t,ttsConnections:n,sttConnections:b,activeTtsId:m,activeSttId:p,activeTtsConnection:C,activeSttConnection:y,ttsConnectionOptions:V,sttConnectionOptions:E,loading:r,refresh:D,setActiveConnection:j,saveConnection:Z,deleteSecret:k}}var Zl=x((()=>{se(),oe(),Gl(),rl(),Be(),_l(),Xe()})),gs,_s,ci,fs=x((()=>{se(),gs={class:"provider-meta-item"},_s=["title"],ci=re({__name:"ProviderMetaItem",props:{label:{},value:{}},setup(v){return(t,r)=>(S(),O("div",gs,[f("dt",null,_(v.label),1),f("dd",{title:String(v.value||"â")},_(v.value||"â"),9,_s)]))}})})),Ql=x((()=>{})),vi,eo=x((()=>{fs(),fs(),Ql(),de(),vi=ce(ci,[["__scopeId","data-v-6e8cbcf2"]])})),ys,bs,hs,Ss,ws,Us,Cs,ks,Ps,Ts,As,$s,xs,Ms,Fs,pi,Os=x((()=>{se(),ue(),oe(),eo(),ys=["data-state"],bs={class:"card-main"},hs={class:"provider-identity"},Ss={class:"provider-icon","aria-hidden":"true"},ws={class:"provider-copy"},Us={class:"provider-title-row"},Cs=["title"],ks={class:"provider-kind"},Ps={class:"provider-description"},Ts={class:"provider-meta"},As={class:"provider-control"},$s=["aria-label"],xs={key:1,class:"feedback-row error",role:"alert"},Ms={class:"error-summary"},Fs={key:1,class:"error-details"},pi=re({__name:"VoiceApiCard",props:{connection:{},testState:{}},emits:["setActive","test","edit","connect","remove"],setup(v,{emit:t}){const r=v,i=t,{t:s}=ne(),w=$(!1);Pe(()=>r.testState?.message,()=>{w.value=!1});const A=P(()=>!(r.connection.kind==="stt"&&r.connection.provider==="browser")),m=P(()=>!r.connection.isBuiltin),p=P(()=>m.value?r.connection.hasSecret?s("settings.voice.keyStored"):s("settings.voice.keyMissing"):s("settings.voice.builtin")),n=P(()=>r.connection.isBuiltin?s("settings.voice.builtin"):s("settings.voice.customApi")),b=P(()=>r.connection.active?"success":m.value&&!r.connection.hasSecret?"warning":"default"),C=P(()=>r.connection.active?s("settings.voice.active"):m.value&&!r.connection.hasSecret?s("settings.voice.keyMissing"):s("settings.voice.connected")),y=P(()=>r.connection.model||String(r.connection.settings.model||"")),V=P(()=>r.connection.voice||String(r.connection.settings.voice||"")),E=P(()=>r.connection.baseUrl||(r.connection.isBuiltin?s("settings.voice.localBuiltin"):"")),T=P(()=>{const q=r.testState?.status;return s(q==="success"?"settings.voice.testSuccess":q==="error"?"settings.voice.testFailedShort":q==="loading"?"settings.voice.testing":q==="recording"?"settings.voice.recording":"settings.voice.notTested")}),h=P(()=>m.value&&!r.connection.hasSecret?s("settings.voice.connect"):s("common.edit")),F=P(()=>r.testState?.status==="recording"?s("settings.voice.sttTestStopButton"):s("settings.voice.testAction")),W=P(()=>r.connection.kind==="tts"?[{key:"source",label:s("settings.voice.source"),value:E.value},{key:"model",label:s("settings.voice.model"),value:y.value},{key:"voice",label:s("settings.voice.voice"),value:V.value},{key:"api-key",label:s("settings.voice.apiKey"),value:p.value}]:[{key:"source",label:s("settings.voice.source"),value:E.value},{key:"model",label:s("settings.voice.model"),value:y.value},{key:"api-key",label:s("settings.voice.apiKey"),value:p.value},{key:"last-test",label:s("settings.voice.lastTest"),value:T.value}]),D=P(()=>{const q=r.testState?.status;return!!q&&q!=="idle"&&q!=="error"}),j=P(()=>r.testState?.status==="error"),Z=P(()=>r.testState?.message||"");function k(q){const M=q.indexOf("{");if(M<0)return null;try{const o=JSON.parse(q.slice(M)),l=o.error||o.message||o.detail;return typeof l=="string"&&l.trim()?l.trim():null}catch{return null}}
1function d(q){return q.replace(/^API Error\s+\d+\s*:\s*/i,"").replace(/^Error\s*:\s*/i,"").trim()}const g=P(()=>{const q=Z.value.trim();if(!q)return s("settings.voice.testFailedSummary");const M=k(q)||d(q);return!M||M.startsWith("{")||M.startsWith("[")?s("settings.voice.testFailedSummary"):M.length>180?`${M.slice(0,177).trim()}â¦`:M}),U=P(()=>{const q=Z.value.trim();return q.length>0&&q!==g.value}),I=P(()=>[{label:s("settings.voice.remove"),key:"remove",disabled:r.connection.isBuiltin}]);function Y(){if(m.value&&!r.connection.hasSecret){i("connect",r.connection);return}i("edit",r.connection)}function ae(q){q==="remove"&&!r.connection.isBuiltin&&i("remove",r.connection)}return(q,M)=>(S(),O("article",{class:He(["voice-api-card",{active:v.connection.active}]),"data-state":v.testState?.status||"idle"},[f("div",bs,[f("div",hs,[f("div",Ss,_(v.connection.kind==="tts"?"T":"S"),1),f("div",ws,[f("div",Us,[f("h5",{class:"provider-title",title:v.connection.label},_(v.connection.label),9,Cs),f("span",ks,_(n.value),1)]),f("p",Ps,_(v.connection.kind==="tts"?e(s)("settings.voice.ttsCardHint"):e(s)("settings.voice.sttCardHint")),1)])]),f("dl",Ts,[(S(!0),O(ye,null,xe(W.value,o=>(S(),X(vi,{key:o.key,label:o.label,value:o.value},null,8,["label","value"]))),128))]),f("div",As,[a(e(Ie),{class:"status-badge",size:"small",type:b.value,round:"",bordered:!1},{default:u(()=>[L(_(C.value),1)]),_:1},8,["type"]),f("div",{class:"card-actions","aria-label":`${v.connection.label} actions`},[v.connection.active?B("",!0):(S(),X(e(K),{key:0,size:"tiny",secondary:"",onClick:M[0]||(M[0]=o=>i("setActive",v.connection))},{default:u(()=>[L(_(e(s)("settings.voice.setActive")),1)]),_:1})),a(e(K),{size:"tiny",loading:v.testState?.status==="loading","data-testid":`voice-card-test-${v.connection.id}`,onClick:M[1]||(M[1]=o=>i("test",v.connection))},{default:u(()=>[L(_(F.value),1)]),_:1},8,["loading","data-testid"]),A.value?(S(),X(e(K),{key:1,size:"tiny",onClick:Y},{default:u(()=>[L(_(h.value),1)]),_:1})):B("",!0),m.value?(S(),X(e(xi),{key:2,trigger:"click",size:"small",options:I.value,onSelect:ae},{default:u(()=>[a(e(K),{size:"tiny","aria-label":e(s)("settings.voice.moreActionsFor",{provider:v.connection.label})},{default:u(()=>[L(_(e(s)("settings.voice.moreActions")),1)]),_:1},8,["aria-label"])]),_:1},8,["options"])):B("",!0)],8,$s)])]),D.value?(S(),O("div",{key:0,class:He(["feedback-row",v.testState?.status]),role:"status"},_(v.testState?.message||(v.testState?.status==="success"?e(s)("settings.voice.testSuccess"):"")),3)):B("",!0),j.value?(S(),O("div",xs,[f("div",Ms,_(g.value),1),U.value?(S(),X(e(K),{key:0,class:"details-toggle",text:"",size:"tiny",onClick:M[2]||(M[2]=o=>w.value=!w.value)},{default:u(()=>[L(_(w.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)]),_:1})):B("",!0),w.value?(S(),O("pre",Fs,_(Z.value),1)):B("",!0)])):B("",!0)],10,ys))}})})),to=x((()=>{})),Le,so=x((()=>{Os(),Os(),to(),de(),Le=ce(pi,[["__scopeId","data-v-b8bd5b05"]])}));async function ao(v){return Fe("/api/voice/providers/probe",{method:"POST",signal:v.signal,body:JSON.stringify({kind:v.kind,provider:v.provider,compatibility:v.compatibility,baseUrl:v.baseUrl,apiKey:v.apiKey})})}var io=x((()=>{Ee()})),Ds,Is,zs,Rs,Vs,Ns,Hs,Ls,Es,Ks,Bs,qs,Ys,Xs,Ws,js,mi,Gs=x((()=>{se(),ue(),oe(),io(),Xe(),Ye(),Ds={class:"form-section"},Is={class:"form-section"},zs={class:"section-heading"},Rs={key:0,class:"connection-actions"},Vs={key:1,class:"inline-error","data-testid":"voice-provider-probe-error"},Ns={key:1},Hs={key:0,class:"form-section"},Ls={class:"section-heading"},Es={key:0,class:"helper-text"},Ks={key:1,class:"helper-text"},Bs={key:2,class:"helper-text"},qs={key:3,class:"helper-text"},Ys={key:1,class:"form-section"},Xs={class:"section-heading"},Ws={key:2,class:"form-section"},js={class:"modal-footer"},mi=re({__name:"VoiceApiFormModal",props:{kind:{},show:{type:Boolean}},emits:["close","saved"],setup(v,{emit:t}){const r=v,i=t,{t:s}=ne(),w=me(),A=$(!1),m=$(null),p=$("openai-compatible"),n=$({baseUrl:"",apiKey:"",model:"",voice:"",audioTranscode:"none"}),b=$(!1),C=$(!1),y=$(!1),V=$(!1),E=$(!1),T=$([]),h=$(""),F=$(""),W=$(""),D=$(!1),j=$("");let Z=null,k=0,d=!1;const g=P(()=>Ce.filter(N=>N.kind===r.kind&&!N.isBuiltin).map(N=>({label:N.labelKey?s(N.labelKey):N.label,value:N.id}))),U=P(()=>Ce.find(N=>N.id===m.value)||null),I=P(()=>U.value?.provider==="custom"),Y=P(()=>r.kind==="tts"&&U.value?.provider==="doubao"),ae=P(()=>p.value==="openai-compatible"),q=P(()=>{const N=T.value.map(R=>({label:R.capability==="preferred"?`${R.label} · ${s("settings.voice.modelRecommendedSuffix")}`:R.label,value:R.id})),z=n.value.model.trim();return z&&!N.some(R=>R.value===z)?[{label:z,value:z},...N]:N}),M=P(()=>[{label:s("settings.voice.sttAudioTranscodeNone"),value:"none"},{label:s("settings.voice.sttAudioTranscodeFfmpeg"),value:"ffmpeg"}]),o=P(()=>{const N=n.value.voice.trim(),z=Re.map(R=>({label:R.label,value:R.value}));return N&&!Re.some(R=>R.value===N)?[{label:N,value:N},...z]:z}),l=P(()=>De(n.value.baseUrl)),c=P(()=>!y.value&&!n.value.baseUrl.trim()||!U.value||!U.value.isSecretRequired?"":Ae(n.value.baseUrl)),J=P(()=>!U.value?.capabilities?.models||!C.value||n.value.model.trim()?"":s("settings.voice.modelRequiredConnectManual")),ie=P(()=>!V.value||!U.value?.isSecretRequired||n.value.apiKey.trim()?"":s("settings.voice.apiKeyRequired")),pe=P(()=>!!U.value&&ae.value&&!!n.value.baseUrl.trim()&&!!n.value.apiKey.trim()&&!Ae(n.value.baseUrl)),we=P(()=>!(!U.value||U.value.isSecretRequired&&(!n.value.apiKey.trim()||Ae(n.value.baseUrl))||U.value.capabilities?.models&&
1!n.value.model.trim()||Y.value&&!n.value.voice.trim())),Te=P(()=>U.value?p.value==="manual"?s("settings.voice.discoveryManualHint"):!n.value.baseUrl.trim()||!n.value.apiKey.trim()?s("settings.voice.discoveryCredentialHint"):s("settings.voice.discoveryNoAutoProbeHint"):"");Pe(()=>r.show,N=>{N?Oe():$e()}),Pe([()=>n.value.baseUrl,()=>n.value.apiKey,p],()=>{if(d){d=!1;return}$e(),T.value=[],h.value="",F.value="",W.value="",D.value=!1}),Fa(()=>$e());function Oe(){m.value=null,p.value="openai-compatible",n.value={baseUrl:"",apiKey:"",model:"",voice:"",audioTranscode:"none"},b.value=!1,C.value=!1,y.value=!1,V.value=!1,j.value="",T.value=[],h.value="",F.value="",W.value="",D.value=!1,$e()}function De(N){const z=N.trim();if(!z)return"";try{const R=new URL(z);return R.hash="",R.pathname=R.pathname.replace(/\/+$/,"")||"/",R.toString().replace(/\/$/,"")}catch{return z.replace(/\/+$/,"")}}function Ae(N){const z=N.trim();if(!z)return s("settings.voice.baseUrlRequired");try{const R=new URL(z);return R.protocol!=="https:"&&R.protocol!=="http:"?s("settings.voice.baseUrlHttpsRequired"):""}catch{return s("settings.voice.baseUrlInvalid")}}function $e(){Z&&(Z.abort(),Z=null),E.value=!1}function Si(N){m.value=N;const z=Ce.find(ve=>ve.id===N);p.value=z?.provider==="custom"||z?.provider==="openai"?"openai-compatible":"manual";const R=r.kind==="tts"&&z?.provider==="doubao";n.value={baseUrl:z?.baseUrl||"",model:R?qe:z?.defaultModel||"",voice:R?hl:"",apiKey:"",audioTranscode:"none"},b.value=!1,C.value=!1,y.value=!1,V.value=!1,j.value=""}function wi(N){n.value.model=N||"",b.value=!0,C.value=!0}function Ui(N){n.value.voice=N||"",n.value.model=Na(N)||"seed-tts-2.0",C.value=!0,b.value=!1}function Ci(){h.value&&(n.value.model=h.value,C.value=!0,b.value=!1)}function ki(){y.value=!0,Ae(n.value.baseUrl)||(n.value.baseUrl=l.value)}function Pi(){return`${r.kind}|${U.value?.provider||""}|${p.value}|${De(n.value.baseUrl)}|${n.value.apiKey.trim()}`}async function Ti(){if(V.value=!0,!pe.value)return;const N=Pi();j.value!==N&&(j.value=N,await We())}async function We(){if(!U.value||!ae.value)return;y.value=!0,V.value=!0;const N=Ae(n.value.baseUrl);if(N){F.value=N;return}if(!n.value.apiKey.trim()){F.value=s("settings.voice.apiKeyRequiredForDiscovery");return}$e();const z=++k,R=new AbortController;Z=R,E.value=!0,F.value="",W.value="",D.value=!1;try{const ve=await ao({kind:r.kind,provider:String(U.value.provider),compatibility:p.value,baseUrl:De(n.value.baseUrl),apiKey:n.value.apiKey.trim(),signal:R.signal});if(z!==k)return;ve.normalizedBaseUrl&&(d=!0,n.value.baseUrl=ve.normalizedBaseUrl),T.value=ve.models||[],h.value=ve.recommendedModel||"",F.value=ve.ok?"":ve.errorSummary||s("settings.voice.discoveryFailedManualFallback"),W.value=ve.errorDetails||"",ve.ok&&ve.recommendedModel&&!b.value&&!n.value.model.trim()&&(n.value.model=ve.recommendedModel,C.value=!0)}catch(ve){if(R.signal.aborted||z!==k)return;F.value=ve instanceof Error?ve.message:s("settings.voice.discoveryFailedManualFallback"),W.value=""}finally{z===k&&(E.value=!1,Z=null)}}async function Ai(){if(U.value){if(y.value=!0,V.value=!0,C.value=!0,!we.value){w.warning(J.value||c.value||ie.value||s("settings.voice.completeRequiredProviderFields"));return}A.value=!0;try{i("saved",{preset:U.value,settings:{baseUrl:De(n.value.baseUrl),model:n.value.model.trim(),...r.kind==="tts"&&n.value.voice.trim()?{voice:n.value.voice.trim()}:{},...r.kind==="stt"?{audioTranscode:n.value.audioTranscode}:{}},secrets:{apiKey:n.value.apiKey.trim()}})}finally{A.value=!1}}}return(N,z)=>(S(),X(e(ze),{show:v.show,preset:"card",title:v.kind==="tts"?e(s)("settings.voice.addTtsApi"):e(s)("settings.voice.addSttApi"),style:{width:"min(540px, calc(100vw - 32px))"},"onUpdate:show":z[8]||(z[8]=R=>i("close"))},{footer:u(()=>[f("div",js,[a(e(K),{onClick:z[7]||(z[7]=R=>i("close"))},{default:u(()=>[L(_(e(s)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:A.value,disabled:!we.value,"data-testid":"voice-provider-save",onClick:Ai},{default:u(()=>[L(_(e(s)("common.add")),1)]),_:1},8,["loading","disabled"])])]),default:u(()=>[a(e(Me),{"label-placement":"top",class:"provider-form"},{default:u(()=>[f("section",Ds,[a(e(G),{label:e(s)("models.selectProvider"),required:""},{default:u(()=>[a(e(Q),{value:m.value,"onUpdate:value":[z[0]||(z[0]=R=>m.value=R),Si],options:g.value,placeholder:e(s)("models.chooseProvider"),"data-testid":"voice-provider-select"}
1,null,8,["value","options","placeholder"])]),_:1},8,["label"]),U.value&&I.value?(S(),X(e(G),{key:0,label:e(s)("settings.voice.apiCompatibility"),required:""},{default:u(()=>[a(e(Q),{value:p.value,"onUpdate:value":z[1]||(z[1]=R=>p.value=R),options:[{label:e(s)("settings.voice.openaiCompatible"),value:"openai-compatible"},{label:e(s)("settings.voice.manualCustomEndpoint"),value:"manual"}],"data-testid":"voice-provider-compatibility"},null,8,["value","options"])]),_:1},8,["label"])):B("",!0)]),U.value?(S(),O(ye,{key:0},[f("section",Is,[f("div",zs,[f("span",null,_(e(s)("settings.voice.connectionStep")),1),f("small",null,_(Te.value),1)]),a(e(G),{label:e(s)("models.baseUrl"),required:U.value.isSecretRequired,feedback:c.value},{default:u(()=>[a(e(ee),{value:n.value.baseUrl,"onUpdate:value":z[2]||(z[2]=R=>n.value.baseUrl=R),placeholder:e(s)("models.baseUrlPlaceholder"),disabled:!!U.value.baseUrl&&U.value.provider!=="custom","data-testid":"voice-provider-base-url",onBlur:ki},null,8,["value","placeholder","disabled"])]),_:1},8,["label","required","feedback"]),a(e(G),{label:e(s)("models.apiKey"),required:U.value.isSecretRequired,feedback:ie.value},{default:u(()=>[a(e(ee),{value:n.value.apiKey,"onUpdate:value":z[3]||(z[3]=R=>n.value.apiKey=R),type:"password","show-password-on":"click",autocomplete:"off",placeholder:U.value.isSecretRequired?e(s)("settings.voice.apiKeyConnectPlaceholder"):e(s)("models.apiKeyPlaceholder"),"data-testid":"voice-provider-api-key",onBlur:Ti},null,8,["value","placeholder"])]),_:1},8,["label","required","feedback"]),ae.value?(S(),O("div",Rs,[a(e(K),{size:"small",loading:E.value,disabled:!pe.value,"data-testid":"voice-provider-probe",onClick:We},{default:u(()=>[L(_(e(s)("settings.voice.connectFetchModels")),1)]),_:1},8,["loading","disabled"])])):B("",!0),F.value?(S(),O("div",Vs,[f("span",null,_(F.value),1),W.value?(S(),O("button",{key:0,type:"button",class:"link-button",onClick:z[4]||(z[4]=R=>D.value=!D.value)},_(D.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)):B("",!0),D.value&&W.value?(S(),O("pre",Ns,_(W.value),1)):B("",!0)])):B("",!0)]),U.value.capabilities?.models?(S(),O("section",Hs,[f("div",Ls,[f("span",null,_(e(s)("settings.voice.model")),1),f("small",null,_(e(s)("settings.voice.modelConnectManualHint")),1)]),a(e(G),{label:e(s)("models.defaultModel"),feedback:J.value},{default:u(()=>[a(e(Q),{value:n.value.model,options:q.value,tag:"",filterable:"",loading:E.value,placeholder:e(s)("settings.voice.modelConnectManualHint"),"data-testid":"voice-provider-model","onUpdate:value":wi},null,8,["value","options","loading","placeholder"])]),_:1},8,["label","feedback"]),E.value?(S(),O("div",Es,_(e(s)("settings.voice.fetchingModels")),1)):h.value&&b.value&&n.value.model!==h.value?(S(),O("div",Ks,[L(_(e(s)("settings.voice.recommendedModel",{model:h.value}))+" ",1),f("button",{type:"button",class:"link-button",onClick:Ci},_(e(s)("settings.voice.useRecommendedModel")),1)])):T.value.length?(S(),O("div",Bs,_(e(s)("settings.voice.modelsDiscovered",{count:T.value.length})),1)):F.value?(S(),O("div",qs,_(e(s)("settings.voice.discoveryFailedManualFallback")),1)):B("",!0)])):B("",!0),Y.value?(S(),O("section",Ys,[f("div",Xs,[f("span",null,_(e(s)("settings.voice.voice")),1),f("small",null,_(e(s)("settings.voice.doubaoVoiceHint")),1)]),a(e(G),{label:e(s)("settings.voice.voice")},{default:u(()=>[a(e(Q),{value:n.value.voice,"onUpdate:value":[z[5]||(z[5]=R=>n.value.voice=R),Ui],options:o.value,tag:"",filterable:"","data-testid":"voice-provider-voice"},null,8,["value","options"])]),_:1},8,["label"])])):B("",!0),v.kind==="stt"?(S(),O("section",Ws,[a(e(G),{label:e(s)("settings.voice.sttAudioTranscode")},{default:u(()=>[a(e(Q),{value:n.value.audioTranscode,"onUpdate:value":z[6]||(z[6]=R=>n.value.audioTranscode=R),options:M.value,"data-testid":"voice-provider-audio-transcode"},null,8,["value","options"])]),_:1},8,["label"])])):B("",!0)],64)):B("",!0)]),_:1})]),_:1},8,["show","title"]))}})})),lo=x((()=>{})),gi,oo=x((()=>{Gs(),Gs(),lo(),de(),gi=ce(mi,[["__scopeId","data-v-9aec528e"]])})),Js,Zs,Qs,ea,ta,sa,_i,aa=x((()=>{se(),ue(),oe(),Xe(),Ye(),Ha(),Be(),Js={style:{"font-size":"12px",opacity:"0.6"}},Zs={style:{"font-size":"12px",opacity:"0.6"}}
1,Qs={key:0,style:{"font-size":"12px",opacity:"0.7"}},ea={style:{"font-size":"12px",opacity:"0.6"}},ta=10*1024*1024,sa="audio/mpeg,audio/mp3,audio/wav,.mp3,.wav",_i=re({__name:"VoiceApiConfigurator",props:{connection:{},show:{type:Boolean}},emits:["close","save"],setup(v,{emit:t}){const r=v,i=t,{t:s}=ne(),w=Ke(),A=$(!1),m=$({}),p=$(""),n=$(null),b=$(""),C=$(""),y=$("wav"),V=P(()=>r.connection?Ce.find(o=>o.kind===r.connection.kind&&o.provider===r.connection.provider&&(o.baseUrl===r.connection.baseUrl||!o.baseUrl)):null),E=P(()=>V.value?.capabilities||{});function T(o,l){m.value[o]=l??""}function h(o){const l=m.value[o];return typeof l=="string"?l:typeof l=="number"?String(l):""}function F(o,l=0){const c=m.value[o];if(typeof c=="number"&&Number.isFinite(c))return c;if(typeof c=="string"&&c.trim()){const J=Number(c);if(Number.isFinite(J))return J}return l}Pe(()=>r.connection,o=>{o&&(m.value={...o.settings,model:o.model||String(o.settings.model||""),voice:o.voice||String(o.settings.voice||"")},o.provider==="edge"&&(m.value.rate=F("rate",1),m.value.pitch=F("pitch",0)),p.value="",o.provider==="mimo"&&(b.value=w.mimoVoiceCloneDataUri.value,C.value=w.mimoVoiceCloneFileName.value,y.value=w.mimoVoiceCloneFormat.value))},{immediate:!0});function W(o){const l=o.name.toLowerCase();return o.type.includes("mpeg")||o.type.includes("mp3")||l.endsWith(".mp3")?"mp3":"wav"}function D(o){return new Promise((l,c)=>{const J=new FileReader;J.onload=()=>l(String(J.result||"")),J.onerror=()=>c(J.error||new Error("Failed to read audio file")),J.readAsDataURL(o)})}async function j(o){const l=o.target,c=l.files?.[0];if(!c)return;const J=c.name.toLowerCase();if(!(c.type==="audio/wav"||c.type==="audio/x-wav"||c.type==="audio/mpeg"||c.type==="audio/mp3"||J.endsWith(".wav")||J.endsWith(".mp3"))||c.size>ta){l.value="";return}try{const ie=W(c),pe=await D(c),we=ie==="mp3"?"audio/mpeg":"audio/wav";b.value=pe.replace(/^data:[^;,]*;base64,/,`data:${we};base64,`),C.value=c.name,y.value=ie}finally{l.value=""}}function Z(){b.value="",C.value="",y.value="wav",n.value&&(n.value.value="")}async function k(){if(r.connection){A.value=!0;try{const o=p.value.trim(),l={...m.value};if(r.connection.provider==="mimo"){const c=h("model");l.voiceMode=c==="mimo-v2.5-tts-voiceclone"?"voiceClone":c==="mimo-v2.5-tts-voicedesign"?"voiceDesign":"preset",c==="mimo-v2.5-tts-voiceclone"&&(l.voiceCloneDataUri=b.value,l.voiceCloneFileName=C.value,l.voiceCloneFormat=y.value)}i("save",r.connection,{settings:l,...o?{secrets:{apiKey:o}}:{}})}finally{A.value=!1}}}const d=[{label:"ææ (zh-CN-XiaoxiaoNeural)",value:"zh-CN-XiaoxiaoNeural"},{label:"æè± (zh-CN-XiaoxuanNeural)",value:"zh-CN-XiaoxuanNeural"},{label:"äºå¸ (zh-CN-YunxiNeural)",value:"zh-CN-YunxiNeural"},{label:"äºå¥ (zh-CN-YunjianNeural)",value:"zh-CN-YunjianNeural"},{label:"äºæ¬ (zh-CN-YunyangNeural)",value:"zh-CN-YunyangNeural"},{label:"Jenny (en-US-JennyNeural)",value:"en-US-JennyNeural"},{label:"Aria (en-US-AriaNeural)",value:"en-US-AriaNeural"},{label:"Guy (en-US-GuyNeural)",value:"en-US-GuyNeural"}],g=[{label:"Alloy",value:"alloy"},{label:"Echo",value:"echo"},{label:"Fable",value:"fable"},{label:"Nova",value:"nova"},{label:"Onyx",value:"onyx"},{label:"Shimmer",value:"shimmer"}],U=[{label:"å°ç³ (ä¸æÂ·å¥³)",value:"å°ç³"},{label:"èè (ä¸æÂ·å¥³)",value:"èè"},{label:"èæ (ä¸æÂ·ç·)",value:"èæ"},{label:"ç½æ¡¦ (ä¸æÂ·ç·)",value:"ç½æ¡¦"}],I=[{label:s("settings.voice.mimoModelPreset"),value:"mimo-v2.5-tts"},{label:s("settings.voice.mimoModelVoiceDesign"),value:"mimo-v2.5-tts-voicedesign"},{label:s("settings.voice.mimoModelVoiceClone"),value:"mimo-v2.5-tts-voiceclone"}],Y=[{label:"Seed TTS 2.0",value:qe}],ae=P(()=>{const o=h("voice").trim(),l=Re.map(c=>({label:c.label,value:c.value}));return o&&!Re.some(c=>c.value===o)?[{label:o,value:o},...l]:l}),q=P(()=>[{label:s("settings.voice.sttAudioTranscodeNone"),value:"none"},{label:s("settings.voice.sttAudioTranscodeFfmpeg"),value:"ffmpeg"}]);function M(o){T("voice",o),T("model",Na(o)||"seed-tts-2.0")}return(o,l)=>(S(),X(e(Ni),{show:v.show,width:400,"onUpdate:show":l[17]||(l[17]=c=>i("close"))},{default:u(()=>[a(e(Li),{title:v.connection?.label,closable:""},{footer:u(()=>[a(e(Ue),{justify:"end"},{default:u(()=>[a(e(K),{onClick:l[16]||(l[16]=c=>i("close"))},{default:u(()=>[L(_(e(s)("common.cancel")),1)]),_:1}
1),a(e(K),{type:"primary",loading:A.value,onClick:k},{default:u(()=>[L(_(e(s)("common.save")),1)]),_:1},8,["loading"])]),_:1})]),default:u(()=>[v.connection?(S(),X(e(Me),{key:0,"label-placement":"top"},{default:u(()=>[v.connection.isBuiltin?B("",!0):(S(),X(e(G),{key:0,label:e(s)("settings.voice.apiKey")},{default:u(()=>[a(e(ee),{value:p.value,"onUpdate:value":l[0]||(l[0]=c=>p.value=c),type:"password","show-password-on":"click",autocomplete:"off",placeholder:v.connection.hasSecret?e(s)("settings.voice.keepStoredKeyPlaceholder"):e(s)("settings.voice.apiKeyPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])),E.value.models?(S(),X(e(G),{key:1,label:e(s)("settings.voice.model")},{default:u(()=>[v.connection.provider==="mimo"?(S(),X(e(Q),{key:0,value:h("model"),options:I,"onUpdate:value":l[1]||(l[1]=c=>T("model",c))},null,8,["value"])):v.connection.provider==="doubao"?(S(),X(e(Q),{key:1,value:h("model")||e("seed-tts-2.0"),options:Y,tag:"",filterable:"","onUpdate:value":l[2]||(l[2]=c=>T("model",c))},null,8,["value"])):(S(),X(e(ee),{key:2,value:h("model"),placeholder:e(s)("models.selectOrInput"),"onUpdate:value":l[3]||(l[3]=c=>T("model",c))},null,8,["value","placeholder"]))]),_:1},8,["label"])):B("",!0),E.value.voices?(S(),X(e(G),{key:2,label:e(s)("settings.voice.voice")},{default:u(()=>[v.connection.provider==="edge"?(S(),X(e(Q),{key:0,value:h("voice"),options:d,filterable:"","onUpdate:value":l[4]||(l[4]=c=>T("voice",c))},null,8,["value"])):v.connection.provider==="openai"?(S(),X(e(Q),{key:1,value:h("voice"),options:g,"onUpdate:value":l[5]||(l[5]=c=>T("voice",c))},null,8,["value"])):v.connection.provider==="mimo"&&h("model")==="mimo-v2.5-tts"?(S(),X(e(Q),{key:2,value:h("voice"),options:U,"onUpdate:value":l[6]||(l[6]=c=>T("voice",c))},null,8,["value"])):v.connection.provider==="doubao"?(S(),X(e(Q),{key:3,value:h("voice"),options:ae.value,tag:"",filterable:"","onUpdate:value":M},null,8,["value","options"])):(S(),X(e(ee),{key:4,value:h("voice"),"onUpdate:value":l[7]||(l[7]=c=>T("voice",c))},null,8,["value"]))]),_:1},8,["label"])):B("",!0),v.connection.provider==="edge"?(S(),O(ye,{key:3},[a(e(G),{label:e(s)("settings.voice.edgeRate")},{default:u(()=>[a(e(Ue),{vertical:"",style:{width:"100%"}},{default:u(()=>[a(e(Ge),{value:F("rate",1),min:.5,max:2,step:.05,"onUpdate:value":l[8]||(l[8]=c=>T("rate",Array.isArray(c)?c[0]:c))},null,8,["value"]),f("span",Js,_(F("rate",1).toFixed(2))+"x ("+_(e(La)(F("rate",1)))+")",1)]),_:1})]),_:1},8,["label"]),a(e(G),{label:e(s)("settings.voice.edgePitch")},{default:u(()=>[a(e(Ue),{vertical:"",style:{width:"100%"}},{default:u(()=>[a(e(Ge),{value:F("pitch",0),min:-20,max:20,step:1,"onUpdate:value":l[9]||(l[9]=c=>T("pitch",Array.isArray(c)?c[0]:c))},null,8,["value"]),f("span",Zs,_(F("pitch",0)>0?"+":"")+_(F("pitch",0))+" Hz ("+_(e(Ea)(F("pitch",0)))+")",1)]),_:1})]),_:1},8,["label"])],64)):B("",!0),v.connection.provider==="mimo"?(S(),O(ye,{key:4},[E.value.stylePrompt?(S(),X(e(G),{key:0,label:e(s)("settings.voice.mimoStylePrompt")},{default:u(()=>[a(e(ee),{value:h("stylePrompt"),type:"textarea",rows:2,"onUpdate:value":l[10]||(l[10]=c=>T("stylePrompt",c))},null,8,["value"])]),_:1},8,["label"])):B("",!0),h("model")==="mimo-v2.5-tts-voicedesign"?(S(),X(e(G),{key:1,label:e(s)("settings.voice.mimoVoiceDesignPrompt")},{default:u(()=>[a(e(ee),{value:h("voiceDesignDesc"),type:"textarea",rows:3,"onUpdate:value":l[11]||(l[11]=c=>T("voiceDesignDesc",c))},null,8,["value"])]),_:1},8,["label"])):B("",!0),h("model")==="mimo-v2.5-tts-voiceclone"?(S(),X(e(G),{key:2,label:e(s)("settings.voice.mimoCloneAudio")},{default:u(()=>[a(e(Ue),{vertical:"",style:{width:"100%"}},{default:u(()=>[f("input",{ref_key:"mimoCloneAudioInput",ref:n,type:"file",accept:sa,style:{display:"none"},onChange:j},null,544),a(e(Ue),{align:"center"},{default:u(()=>[a(e(K),{size:"small",onClick:l[12]||(l[12]=c=>n.value?.click())},{default:u(()=>[L(_(e(s)("settings.voice.mimoCloneAudioUpload")),1)]),_:1}),C.value?(S(),O("span",Qs,_(C.value)+" · "+_(y.value),1)):B("",!0),b.value?(S(),X(e(K),{key:1,size:"small",tertiary:"",onClick:Z},{default:u(()=>[L(_(e(s)("settings.voice.mimoCloneAudioClear")),1)]),_:1})):B("",!0)]),_:1}),f("span",ea,_(e(s)("settings.voice.mimoCloneAudioHint")),1)]),_:1})]),_:1},8,["label"])):B("",!0)],64)):B("",!0),v.connection.kind==="stt"&&v.connection.provider!=="browser"?(S(),O(ye,{key:5},[a(e(G),{label:e(s)("settings.voice.sttAudioTranscode")},{default:u(()=>[a(e(Q),{value:h("audioTranscode")||"none",options:q.value,"onUpdate:value":l[13]||(l[13]=c=>T("audioTranscode",c))}
1,null,8,["value","options"])]),_:1},8,["label"]),a(e(G),{label:e(s)("settings.voice.sttLanguage")},{default:u(()=>[a(e(ee),{value:h("language"),"onUpdate:value":l[14]||(l[14]=c=>T("language",c))},null,8,["value"])]),_:1},8,["label"]),a(e(G),{label:e(s)("settings.voice.sttPrompt")},{default:u(()=>[a(e(ee),{value:h("prompt"),type:"textarea",rows:2,"onUpdate:value":l[15]||(l[15]=c=>T("prompt",c))},null,8,["value"])]),_:1},8,["label"])],64)):B("",!0)]),_:1})):B("",!0)]),_:1},8,["title"])]),_:1},8,["show"]))}})})),fi,no=x((()=>{aa(),aa(),fi=_i})),ia,la,oa,na,ra,ua,da,ca,va,pa,ma,ga,_a,fa,ya,ba,ha,Sa,wa,Ua,Ca,ka,yi,Pa=x((()=>{se(),ue(),oe(),yl(),fl(),ul(),Zl(),Be(),Ha(),so(),oo(),no(),ia={class:"voice-settings"},la={class:"settings-section voice-provider-section","aria-labelledby":"tts-providers-title"},oa={class:"section-header"},na={class:"section-copy"},ra={id:"tts-providers-title",class:"section-title"},ua={class:"section-desc"},da={class:"section-controls"},ca={class:"active-select"},va={class:"active-label"},pa={class:"active-summary"},ma={class:"test-copy-row"},ga={class:"provider-list"},_a={class:"settings-section voice-provider-section","aria-labelledby":"stt-providers-title"},fa={class:"section-header"},ya={class:"section-copy"},ba={id:"stt-providers-title",class:"section-title"},ha={class:"section-desc"},Sa={class:"section-controls"},wa={class:"active-select"},Ua={class:"active-label"},Ca={class:"active-summary"},ka={class:"provider-list"},yi=re({__name:"VoiceSettings",setup(v){const{t}=ne(),r=me(),i=bl(),s=Jl(),w=Ke(),A=$(t("settings.voice.testTextDefault")),m=$(!1),p=$("tts"),n=$(!1),b=$(null),C=dl({voiceActivityThreshold:.02}),y=$({}),V=P(()=>s.activeTtsConnection.value?.label||t("settings.voice.noneSelected")),E=P(()=>s.activeSttConnection.value?.label||t("settings.voice.noneSelected"));ke(async()=>{await s.refresh()}),Fa(()=>{C.cancel()});function T(o){p.value=o,m.value=!0}function h(o,l,c){y.value={...y.value,[o]:{status:l,message:c}}}function F(o){const l={...y.value};for(const[c,J]of Object.entries(l))c!==o&&J.status==="recording"&&(l[c]={status:"idle"});y.value=l}async function W(o){try{await s.saveConnection(p.value,o.preset.provider,{settings:o.settings,secrets:o.secrets}),m.value=!1,r.success(t("settings.voice.ttsSaved"))}catch(l){r.error(l instanceof Error?l.message:t("settings.voice.ttsSaveFailed"))}}function D(o){b.value=o,n.value=!0}async function j(o,l){try{await s.saveConnection(o.kind,o.provider,l),n.value=!1,r.success(t("settings.voice.ttsSaved"))}catch(c){r.error(c instanceof Error?c.message:t("settings.voice.ttsSaveFailed"))}}async function Z(o){try{await s.deleteSecret(o.kind,o.provider),h(o.id,"idle"),r.success(t("settings.voice.ttsCleared"))}catch(l){r.error(l instanceof Error?l.message:t("settings.voice.ttsClearFailed"))}}async function k(o){await s.setActiveConnection(o.kind,o.id)}async function d(o){await s.setActiveConnection("tts",o)}async function g(o){await s.setActiveConnection("stt",o)}function U(o){return{...o.settings,baseUrl:o.baseUrl||o.settings.baseUrl,model:o.model||o.settings.model,voice:o.voice||o.settings.voice}}function I(o){const l=U(o),c=o.provider==="edge"||o.provider==="openai"||o.provider==="custom"||o.provider==="doubao"?o.provider:void 0,J=Number(l.rate),ie=Number(l.pitch);return{baseUrl:String(l.baseUrl||""),model:typeof l.model=="string"?l.model:void 0,voice:typeof l.voice=="string"?l.voice:void 0,rate:o.provider==="edge"&&Number.isFinite(J)?La(J):typeof l.rate=="string"?l.rate:void 0,pitch:o.provider==="edge"&&Number.isFinite(ie)?Ea(ie):typeof l.pitch=="string"?l.pitch:void 0,stylePrompt:typeof l.stylePrompt=="string"?l.stylePrompt:void 0,provider:c}}function Y(o){const l=U(o);return{baseUrl:String(l.baseUrl||"https://api.xiaomimimo.com/v1"),model:String(l.model||"mimo-v2.5-tts"),voice:typeof l.voice=="string"?l.voice:void 0,authMode:l.authMode==="api-key"||l.authMode==="bearer"||l.authMode==="both"?l.authMode:void 0,voiceMode:l.voiceMode==="preset"||l.voiceMode==="voiceDesign"||l.voiceMode==="voiceClone"?l.voiceMode:void 0,voiceDesignDesc:typeof l.voiceDesignDesc=="string"?l.voiceDesignDesc:void 0,voiceCloneDataUri:typeof l.voiceCloneDataUri=="string"?l.voiceCloneDataUri:w.mimoVoiceCloneDataUri.value||void 0,voiceCloneFormat:l.voiceCloneFormat==="mp3"||l.voiceCloneFormat==="wav"?l.voiceCloneFormat:w.mimoVoiceCloneFormat.value,stylePrompt:typeof l.stylePrompt=="string"?l.stylePrompt:void 0}}async function ae(o){const l=A.value.trim();if(!l){h(o.id,"error",t("settings.voice.testTextRequired"));return}if(!o.isBuiltin&&!o.hasSecret){h(o.id,"error",t("settings.voice.keyMissingForTest"));return}h(o.id,"loading",t("settings.voice.testing"));try{o.provider==="mimo"?await i.mimoPlay(o.id,l,Y(o)):(o.provider==="edge"||o.provider==="openai"||o.provider==="custom"||o.provider==="doubao")&&await i.open
1aiPlay(o.id,l,I(o)),h(o.id,"success",t("settings.voice.testSuccess"))}catch(c){h(o.id,"error",t("settings.voice.testFailed",{error:c instanceof Error?c.message:String(c)}))}}async function q(o){if(o.provider==="browser"){h(o.id,"success",t("settings.voice.browserSttTestHint"));return}if(!o.hasSecret){h(o.id,"error",t("settings.voice.keyMissingForTest"));return}if(y.value[o.id]?.status==="recording"){h(o.id,"loading",t("settings.voice.transcribing"));try{const l=await C.stop();if(!l?.size){h(o.id,"error",t("settings.voice.sttEmptyAudio"));return}const c=await vl({audio:l,provider:o.provider});h(o.id,"success",c.text||t("settings.voice.sttTestSuccess"))}catch(l){h(o.id,"error",t("settings.voice.sttTestFailed",{error:l instanceof Error?l.message:String(l)}))}return}try{F(o.id),await C.start(),h(o.id,"recording",t("settings.voice.sttRecordingHint"))}catch(l){console.error("[VoiceSettings] Failed to start STT card test recording:",l),h(o.id,"error",t("settings.voice.sttTestFailed",{error:l instanceof Error?l.message:String(l)}))}}async function M(o){if(o.kind==="tts"){await ae(o);return}await q(o)}return(o,l)=>(S(),O("div",ia,[f("section",la,[f("header",oa,[f("div",na,[f("h4",ra,_(e(t)("settings.voice.ttsProvidersTitle")),1),f("p",ua,_(e(t)("settings.voice.ttsProvidersDescription")),1)]),f("div",da,[f("div",ca,[f("span",va,_(e(t)("settings.voice.activeTtsApi")),1),a(e(Q),{value:e(s).activeTtsId.value,options:e(s).ttsConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeTtsApi"),"onUpdate:value":d},null,8,["value","options","aria-label"]),f("span",pa,_(V.value),1)]),a(e(K),{size:"small",secondary:"",onClick:l[0]||(l[0]=c=>T("tts"))},{default:u(()=>[L(_(e(t)("settings.voice.addTtsApi")),1)]),_:1})])]),f("div",ma,[a(e(ee),{value:A.value,"onUpdate:value":l[1]||(l[1]=c=>A.value=c),size:"small",placeholder:e(t)("settings.voice.testTextPlaceholder"),"data-testid":"tts-test-text"},null,8,["value","placeholder"])]),f("div",ga,[(S(!0),O(ye,null,xe(e(s).ttsConnections.value,c=>(S(),X(Le,{key:c.id,connection:c,"test-state":y.value[c.id],onSetActive:k,onTest:M,onEdit:D,onConnect:D,onRemove:Z},null,8,["connection","test-state"]))),128))])]),f("section",_a,[f("header",fa,[f("div",ya,[f("h4",ba,_(e(t)("settings.voice.sttProvidersTitle")),1),f("p",ha,_(e(t)("settings.voice.sttProvidersDescription")),1)]),f("div",Sa,[f("div",wa,[f("span",Ua,_(e(t)("settings.voice.activeSttApi")),1),a(e(Q),{value:e(s).activeSttId.value,options:e(s).sttConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeSttApi"),"onUpdate:value":g},null,8,["value","options","aria-label"]),f("span",Ca,_(E.value),1)]),a(e(K),{size:"small",secondary:"",onClick:l[2]||(l[2]=c=>T("stt"))},{default:u(()=>[L(_(e(t)("settings.voice.addSttApi")),1)]),_:1})])]),f("div",ka,[(S(!0),O(ye,null,xe(e(s).sttConnections.value,c=>(S(),X(Le,{key:c.id,connection:c,"test-state":y.value[c.id],onSetActive:k,onTest:M,onEdit:D,onConnect:D,onRemove:Z},null,8,["connection","test-state"]))),128))])]),a(gi,{show:m.value,kind:p.value,onClose:l[3]||(l[3]=c=>m.value=!1),onSaved:W},null,8,["show","kind"]),a(fi,{show:n.value,connection:b.value,onClose:l[4]||(l[4]=c=>n.value=!1),onSave:j},null,8,["show","connection"])]))}})})),ro=x((()=>{})),bi,uo=x((()=>{Pa(),Pa(),ro(),de(),bi=ce(yi,[["__scopeId","data-v-5619c2da"]])})),Ta,Aa,$a,xa,hi,Ma=x((()=>{se(),Di(),ue(),oe(),he(),Ul(),kl(),Tl(),$l(),Ml(),Ol(),Il(),Rl(),Nl(),Ll(),Kl(),uo(),Ee(),Va(),Ta={class:"settings-view"},Aa={class:"page-header"},$a={class:"header-title"},xa={class:"settings-content"},hi=re({__name:"SettingsView",setup(v){const t=be(),r=Ra(),{t:i}=ne(),s=$i(),w=Ii(),A=Mi(),m=$("account"),p=P(()=>new Set(["account",...s?["users"]:[],"display","proxy","agent","memory","compression","session","privacy","models","voice"]));function n(y){const V=typeof y=="string"?y:"";return p.value.has(V)?V:"account"}function b(y){m.value=n(y),A.replace({query:{...w.query,tab:m.value==="account"?void 0:m.value}})}Pe(()=>w.query.tab,y=>{m.value=n(y)},{immediate:!0});async function C(){(!r.activeProfileName||r.profiles.length===0)&&await r.fetchProfiles(),await t.fetchSettings()}return ke(()=>{C()}),(y,V)=>(S(),O("div",Ta,[f("header",Aa,[f("h2",$a,_(e(i)("settings.title")),1)]),f("div",xa,[a(e(Oa),{show:e(t).loading||e(t).saving,size:"large",description:e(i)("common.loading")},{default:u(()=>
1[a(e(Fi),{value:m.value,"onUpdate:value":[V[0]||(V[0]=E=>m.value=E),b],type:"line",animated:""},{default:u(()=>[a(e(fe),{name:"account",tab:e(i)("settings.tabs.account")},{default:u(()=>[a(ri)]),_:1},8,["tab"]),e(s)?(S(),X(e(fe),{key:0,name:"users",tab:e(i)("settings.tabs.users")},{default:u(()=>[a(di)]),_:1},8,["tab"])):B("",!0),a(e(fe),{name:"display",tab:e(i)("settings.tabs.display")},{default:u(()=>[a(Ba)]),_:1},8,["tab"]),a(e(fe),{name:"proxy",tab:e(i)("settings.tabs.proxy")},{default:u(()=>[a(Ga)]),_:1},8,["tab"]),a(e(fe),{name:"agent",tab:e(i)("settings.tabs.agent")},{default:u(()=>[a(Ya),a(Wa)]),_:1},8,["tab"]),a(e(fe),{name:"memory",tab:e(i)("settings.tabs.memory")},{default:u(()=>[a(Za)]),_:1},8,["tab"]),a(e(fe),{name:"compression",tab:e(i)("settings.tabs.compression")},{default:u(()=>[a(ei)]),_:1},8,["tab"]),a(e(fe),{name:"session",tab:e(i)("settings.tabs.session")},{default:u(()=>[a(si)]),_:1},8,["tab"]),a(e(fe),{name:"privacy",tab:e(i)("settings.tabs.privacy")},{default:u(()=>[a(ii)]),_:1},8,["tab"]),a(e(fe),{name:"models",tab:e(i)("settings.tabs.models")},{default:u(()=>[a(oi)]),_:1},8,["tab"]),a(e(fe),{name:"voice",tab:e(i)("settings.tabs.voice")},{default:u(()=>[a(bi)]),_:1},8,["tab"])]),_:1},8,["value"])]),_:1},8,["show","description"])])]))}})})),co=x((()=>{})),vo,po=x((()=>{Ma(),Ma(),co(),de(),vo=ce(hi,[["__scopeId","data-v-ed31db3f"]])}));po();export{vo as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.