@quanthermes/hermes-web-ui 0.6.16 → 0.6.17
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/client/assets/js/{ChannelsView-C3g3StjL.js → ChannelsView-BwP8wsUV.js} +1 -1
- package/dist/client/assets/js/{ChatView-tIA9-kE6.js → ChatView-Mf_KaepB.js} +1 -1
- package/dist/client/assets/js/{CodingAgentsView-BjVUaZEX.js → CodingAgentsView-C0OyfzpB.js} +1 -1
- package/dist/client/assets/js/{DevicesView-CrHv1Mcc.js → DevicesView-Cfk24oSi.js} +1 -1
- package/dist/client/assets/js/{FileRenameModal-BmQIUMYK.js → FileRenameModal-DhB_Oy1Y.js} +1 -1
- package/dist/client/assets/js/{FilesView-BSJjUAhT.js → FilesView-CL3bT4UM.js} +1 -1
- package/dist/client/assets/js/{GroupChatView-DtWcdFAL.js → GroupChatView-DhNycaZ-.js} +1 -1
- package/dist/client/assets/js/{HistoryMessageList-L-9SSk3K.js → HistoryMessageList-C9ywhLVB.js} +1 -1
- package/dist/client/assets/js/{HistoryView-DWEeHcuC.js → HistoryView-CB4oqwnG.js} +1 -1
- package/dist/client/assets/js/{JobsView-BgofNKg-.js → JobsView-DrZUX1TJ.js} +1 -1
- package/dist/client/assets/js/{KanbanView-QPxTlH-J.js → KanbanView-B-rpBbt3.js} +1 -1
- package/dist/client/assets/js/{LoginView-McUee9pQ.js → LoginView-Ca6fECMY.js} +1 -1
- package/dist/client/assets/js/{LogsView-BT-4Df4G.js → LogsView-IjXDeQ1e.js} +1 -1
- package/dist/client/assets/js/{MarkdownRenderer-Jwbx4dOP.js → MarkdownRenderer-BlxKlSHX.js} +1 -1
- package/dist/client/assets/js/{McpManagerView-DLDPI-_O.js → McpManagerView-D-oJeFHz.js} +1 -1
- package/dist/client/assets/js/{MemoryView-Dq3pEc1S.js → MemoryView-BSlKBKzI.js} +1 -1
- package/dist/client/assets/js/{MessageItem-Dr5idUZb.js → MessageItem-Di7V6T5S.js} +1 -1
- package/dist/client/assets/js/{ModelsView-sfHqVERI.js → ModelsView-qxOq5hFg.js} +1 -1
- package/dist/client/assets/js/{OutlinePanel-BddtVbQw.js → OutlinePanel-D62oj0V9.js} +1 -1
- package/dist/client/assets/js/{PerformanceView-BYMIVkGl.js → PerformanceView-Coa_4sVf.js} +1 -1
- package/dist/client/assets/js/{PluginsView-Be878n_l.js → PluginsView-BHOXiJZv.js} +1 -1
- package/dist/client/assets/js/{ProfilesView-B6TQX72B.js → ProfilesView-DjODeu2z.js} +1 -1
- package/dist/client/assets/js/{SettingRow-vaeYDW5h.js → SettingRow-DWprXoV4.js} +1 -1
- package/dist/client/assets/js/{SettingsView-ClBbruK3.js → SettingsView-D5QX2BHT.js} +1 -1
- package/dist/client/assets/js/{SkillsUsageView-cAHh5inD.js → SkillsUsageView-CgpixSYd.js} +1 -1
- package/dist/client/assets/js/{SkillsView-DFxNT1UO.js → SkillsView-DVA_LzFa.js} +1 -1
- package/dist/client/assets/js/{TerminalPanel-Bwa-6ai-.js → TerminalPanel-DhnPxJTG.js} +1 -1
- package/dist/client/assets/js/{TerminalView-KMAVVfPx.js → TerminalView-tgOY8x6C.js} +1 -1
- package/dist/client/assets/js/{UsageView-DQUEWEZR.js → UsageView-DDvy4JWs.js} +1 -1
- package/dist/client/assets/js/{VersionPreviewView-BD_8pfy6.js → VersionPreviewView-DoYv9yy6.js} +1 -1
- package/dist/client/assets/js/{VirtualMessageList-BNu9wFPU.js → VirtualMessageList-CfXQfWcE.js} +1 -1
- package/dist/client/assets/js/{_plugin-vue_export-helper-uEMLHKI8.js → _plugin-vue_export-helper-CwNymSRn.js} +2 -2
- package/dist/client/assets/js/{index-1yNqMnGv.js → index-DW8M4rjb.js} +1 -1
- package/dist/client/assets/js/{models-B67JDoKt.js → models-BDUkz58x.js} +1 -1
- package/dist/client/assets/js/{session-browser-prefs-BMKJzhU0.js → session-browser-prefs-DjzuPSf7.js} +1 -1
- package/dist/client/assets/js/{skills-oOSUGydJ.js → skills-kS4Wy1_s.js} +1 -1
- package/dist/client/assets/js/{system-ClONwY0c.js → system-DaAaRr9k.js} +1 -1
- package/dist/client/assets/js/{useSttSettings-BAlyngwO.js → useSttSettings-DnVfL8DF.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/index.js +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as Wa,n as M}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as _e,A as Pe,Cn as ke,Dn as Te,E as me,Ht as Ja,I as Ya,K as Fe,M as Ae,Mn as $e,O as W,Ot as O,P as Xa,Pn as u,Pt as J,Qn as e,Rt as xe,Tn as b,Un as Qa,V as oe,Wn as F,Wt as Q,Zt as Le,an as q,dn as Z,er as ze,et as Za,f as ge,g as na,in as G,ln as N,m as ne,mn as pe,mt as Y,nn as T,nt as ei,on as z,rn as m,rr as g,t as se,u as ti,un as a,v as Ee,w as oa,xn as si}from"./ui-vendor-dYn1tJGA.js";import{c as ee,f as ai,l as te,m as ii,p as li}from"./vue-vendor-DZ4A_GHn.js";import{d as ni,f as De,n as ae,t as ie,u as Ke}from"./_plugin-vue_export-helper-uEMLHKI8.js";import{N as oi}from"./vendor-B1Lfatlz.js";import{S as Ne,u as ri}from"./system-ClONwY0c.js";import{$ as ui,C as be,J as di,S as he,X as ra,Y as ua,c as ci,et as vi,f as pi,g as Oe,h as He,i as mi,l as gi,m as _i,n as fi,o as yi,p as bi,q as hi,r as Si,s as wi,t as Ui,u as da}from"./index-1yNqMnGv.js";import{n as Ue,t as j}from"./SettingRow-vaeYDW5h.js";import{n as ki,t as Ci}from"./session-browser-prefs-BMKJzhU0.js";import{a as Ai,c as Pi,d as Ti,i as $i,l as Mi,n as xi,o as Be,r as Fi,s as Di,t as zi,u as Ii}from"./useSttSettings-BAlyngwO.js";import{a as Ki,c as Ri,i as Vi,n as Li,o as Ei,r as Ni,t as Oi}from"./ttsHelpers-CzQCvABU.js";import{n as Hi,t as Bi}from"./models-B67JDoKt.js";var qe,ca,je=M((()=>{Q(),se(),ee(),he(),ui(),Ue(),qe={class:"settings-section"},ca=Z({__name:"DisplaySettings",setup(p){const t=be(),n=oe(),{t:i}=te(),{brightness:s,setBrightness:h}=vi(),k=[{label:i("settings.display.themeLight"),value:"light"},{label:i("settings.display.themeDark"),value:"dark"},{label:i("settings.display.themeSystem"),value:"system"}];async function v(l){try{await t.saveSection("display",l),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}function f(l){const c=l;h(c),v({skin:c})}return(l,c)=>(b(),z("section",qe,[a(j,{label:e(i)("settings.display.theme"),hint:e(i)("settings.display.themeHint")},{default:u(()=>[a(e(Y),{value:e(s),options:k,size:"small","consistent-menu-width":!1,class:"input-sm","onUpdate:value":f},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.streaming"),hint:e(i)("settings.display.streamingHint")},{default:u(()=>[a(e(ne),{value:e(t).display.streaming,"onUpdate:value":c[0]||(c[0]=y=>v({streaming:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.compact"),hint:e(i)("settings.display.compactHint")},{default:u(()=>[a(e(ne),{value:e(t).display.compact,"onUpdate:value":c[1]||(c[1]=y=>v({compact:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.showReasoning"),hint:e(i)("settings.display.showReasoningHint")},{default:u(()=>[a(e(ne),{value:e(t).display.show_reasoning,"onUpdate:value":c[2]||(c[2]=y=>v({show_reasoning:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.showCost"),hint:e(i)("settings.display.showCostHint")},{default:u(()=>[a(e(ne),{value:e(t).display.show_cost,"onUpdate:value":c[3]||(c[3]=y=>v({show_cost:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.inlineDiffs"),hint:e(i)("settings.display.inlineDiffsHint")},{default:u(()=>[a(e(ne),{value:e(t).display.inline_diffs,"onUpdate:value":c[4]||(c[4]=y=>v({inline_diffs:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.bellOnComplete"),hint:e(i)("settings.display.bellOnCompleteHint")},{default:u(()=>[a(e(ne),{value:e(t).display.bell_on_complete,"onUpdate:value":c[5]||(c[5]=y=>v({bell_on_complete:y}))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),qi=M((()=>{})),va,ji=M((()=>{je(),je(),qi(),ae(),va=ie(ca,[["__scopeId","data-v-6ccfda93"]])})),Ge,pa,We=M((()=>{Q(),se(),ee(),he(),Ue(),Ge={class:"settings-section"},pa=Z({__name:"AgentSettings",setup(p){const t=be(),n=oe(),{t:i}=te(),s={};function h(v){t.updateLocal("agent",v),t.saveSection("agent",v).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function k(v,f){t.updateLocal("agent",{[v]:f}),s[v]&&clearTimeout(s[v]),s[v]=setTimeout(async()=>{try{await t.saveSection("agent",{[v]:f}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(v,f)=>(b(),z("section",Ge,[a(j,{label:e(i)("settings.agent.maxTurns"),hint:e(i)("settings.agent.maxTurnsHint")},{default:u(()=>[a(e(me),{value:e(t).agent.max_turns,min:1,max:200,step:5,size:"small",class:"input-sm","onUpdate:value":f[0]||(f[0]=l=>l!=null&&k("max_turns",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.agent.gatewayTimeout"),hint:e(i)("settings.agent.gatewayTimeoutHint")},{default:u(()=>[a(e(me),{value:e(t).agent.gateway_timeout,min:60,max:7200,step:60,size:"small",class:"input-sm","onUpdate:value":f[1]||(f[1]=l=>l!=null&&k("gateway_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.agent.restartDrainTimeout"),hint:e(i)("settings.agent.restartDrainTimeoutHint")},{default:u(()=>[a(e(me),{value:e(t).agent.restart_drain_timeout,min:10,max:300,step:10,size:"small",class:"input-sm","onUpdate:value":f[2]||(f[2]=l=>l!=null&&k("restart_drain_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.agent.toolEnforcement"),hint:e(i)("settings.agent.toolEnforcementHint")},{default:u(()=>[a(e(Y),{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":f[3]||(f[3]=l=>h({tool_use_enforcement:l}))},null,8,["value","options"])]),_:1},8,["label","hint"])]))}})})),Gi=M((()=>{})),ma,Wi=M((()=>{We(),We(),Gi(),ae(),ma=ie(pa,[["__scopeId","data-v-d06d83a7"]])})),Je,Ye,Xe,ga,Qe=M((()=>{Q(),se(),ee(),he(),ua(),Ue(),Je={class:"settings-section gateway-auto-start-settings"},Ye={class:"section-title"},Xe={class:"section-hint"},ga=Z({__name:"GatewayAutoStartSettings",setup(p){const t=be(),n=ra(),i=oe(),{t:s}=te(),h=T(()=>t.gatewayAutoStart.enabled!==!1),k=T(()=>Array.isArray(t.gatewayAutoStart.include)?"include":"all"),v=T(()=>t.gatewayAutoStart.include||[]),f=T(()=>t.gatewayAutoStart.exclude||[]),l=T(()=>n.profiles.map(I=>({label:I.name,value:I.name}))),c=T(()=>[{label:s("settings.gatewayAutoStart.modeAll"),value:"all"},{label:s("settings.gatewayAutoStart.modeInclude"),value:"include"}]);function y(I){const K=new Set,P=[];for(const C of I){const A=String(C||"").trim();!A||K.has(A)||(K.add(A),P.push(A))}return P}async function S(I){try{t.updateLocal("gatewayAutoStart",I),await t.saveSection("gatewayAutoStart",I,{restart:!1}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}function R(I){S(I==="include"?{include:t.gatewayAutoStart.include||[],exclude:null}:{include:null})}function B(I){S({include:y(I),exclude:null})}function V(I){const K=y(I);S({exclude:K.length>0?K:null})}return(I,K)=>(b(),z("section",Je,[m("h3",Ye,g(e(s)("settings.gatewayAutoStart.title")),1),m("p",Xe,g(e(s)("settings.gatewayAutoStart.description")),1),a(j,{label:e(s)("settings.gatewayAutoStart.enabled"),hint:e(s)("settings.gatewayAutoStart.enabledHint")},{default:u(()=>[a(e(ne),{value:h.value,"onUpdate:value":K[0]||(K[0]=P=>S({enabled:P}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.gatewayAutoStart.mode"),hint:e(s)("settings.gatewayAutoStart.modeHint")},{default:u(()=>[a(e(Y),{value:k.value,options:c.value,size:"small",class:"input-md","onUpdate:value":R},null,8,["value","options"])]),_:1},8,["label","hint"]),k.value==="include"?(b(),G(j,{key:0,label:e(s)("settings.gatewayAutoStart.include"),hint:e(s)("settings.gatewayAutoStart.includeHint")},{default:u(()=>[a(e(Y),{multiple:"",filterable:"",value:v.value,options:l.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":B},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):q("",!0),k.value==="all"?(b(),G(j,{key:1,label:e(s)("settings.gatewayAutoStart.exclude"),hint:e(s)("settings.gatewayAutoStart.excludeHint")},{default:u(()=>[a(e(Y),{multiple:"",filterable:"",value:f.value,options:l.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":V},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):q("",!0)]))}})})),Ji=M((()=>{})),_a,Yi=M((()=>{Qe(),Qe(),Ji(),ae(),_a=ie(ga,[["__scopeId","data-v-acd78d5c"]])})),Ze,fa,et=M((()=>{Q(),se(),ee(),he(),Ue(),Ze={class:"settings-section"},fa=Z({__name:"MemorySettings",setup(p){const t=be(),n=oe(),{t:i}=te(),s={};function h(v){t.updateLocal("memory",v),t.saveSection("memory",v).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function k(v,f){t.updateLocal("memory",{[v]:f}),s[v]&&clearTimeout(s[v]),s[v]=setTimeout(async()=>{try{await t.saveSection("memory",{[v]:f}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(v,f)=>(b(),z("section",Ze,[a(j,{label:e(i)("settings.memory.enabled"),hint:e(i)("settings.memory.enabledHint")},{default:u(()=>[a(e(ne),{value:e(t).memory.memory_enabled,"onUpdate:value":f[0]||(f[0]=l=>h({memory_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.memory.userProfile"),hint:e(i)("settings.memory.userProfileHint")},{default:u(()=>[a(e(ne),{value:e(t).memory.user_profile_enabled,"onUpdate:value":f[1]||(f[1]=l=>h({user_profile_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.memory.charLimit"),hint:e(i)("settings.memory.charLimitHint")},{default:u(()=>[a(e(me),{value:e(t).memory.memory_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":f[2]||(f[2]=l=>l!=null&&k("memory_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.memory.userCharLimit"),hint:e(i)("settings.memory.userCharLimitHint")},{default:u(()=>[a(e(me),{value:e(t).memory.user_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":f[3]||(f[3]=l=>l!=null&&k("user_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Xi=M((()=>{})),ya,Qi=M((()=>{et(),et(),Xi(),ae(),ya=ie(fa,[["__scopeId","data-v-b2529605"]])})),tt,ba,st=M((()=>{Q(),se(),ee(),he(),Ue(),tt={class:"settings-section"},ba=Z({__name:"CompressionSettings",setup(p){const t=be(),n=oe(),{t:i}=te(),s={enabled:!0,threshold:.5,target_ratio:.2,protect_last_n:20,protect_first_n:3},h={};function k(f){t.updateLocal("compression",f),t.saveSection("compression",f).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function v(f,l){t.updateLocal("compression",{[f]:l}),h[f]&&clearTimeout(h[f]),h[f]=setTimeout(async()=>{try{await t.saveSection("compression",{[f]:l}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(f,l)=>(b(),z("section",tt,[a(j,{label:e(i)("settings.compression.enabled"),hint:e(i)("settings.compression.enabledHint")},{default:u(()=>[a(e(ne),{value:e(t).compression.enabled??s.enabled,size:"small","onUpdate:value":l[0]||(l[0]=c=>k({enabled:c}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.threshold"),hint:e(i)("settings.compression.thresholdHint")},{default:u(()=>[a(e(me),{value:e(t).compression.threshold??s.threshold,min:.1,max:.95,step:.05,size:"small",class:"input-sm","onUpdate:value":l[1]||(l[1]=c=>c!=null&&v("threshold",c))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.targetRatio"),hint:e(i)("settings.compression.targetRatioHint")},{default:u(()=>[a(e(me),{value:e(t).compression.target_ratio??s.target_ratio,min:.05,max:.8,step:.05,size:"small",class:"input-sm","onUpdate:value":l[2]||(l[2]=c=>c!=null&&v("target_ratio",c))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.protectLastN"),hint:e(i)("settings.compression.protectLastNHint")},{default:u(()=>[a(e(me),{value:e(t).compression.protect_last_n??s.protect_last_n,min:0,max:200,step:1,size:"small",class:"input-sm","onUpdate:value":l[3]||(l[3]=c=>c!=null&&v("protect_last_n",c))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.protectFirstN"),hint:e(i)("settings.compression.protectFirstNHint")},{default:u(()=>[a(e(me),{value:e(t).compression.protect_first_n??s.protect_first_n,min:0,max:50,step:1,size:"small",class:"input-sm","onUpdate:value":l[4]||(l[4]=c=>c!=null&&v("protect_first_n",c))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Zi=M((()=>{})),ha,el=M((()=>{st(),st(),Zi(),ae(),ha=ie(ba,[["__scopeId","data-v-b584a6a0"]])})),at,Sa,it=M((()=>{Q(),se(),ee(),he(),Ci(),Ue(),at={class:"settings-section"},Sa=Z({__name:"SessionSettings",setup(p){const t=be(),n=ki(),i=oe(),{t:s}=te(),h={};function k(l){t.updateLocal("session_reset",l),t.saveSection("session_reset",l).then(()=>{i.success(s("settings.saved"))}).catch(()=>{i.error(s("settings.saveFailed"))})}function v(l,c){t.updateLocal("session_reset",{[l]:c}),h[l]&&clearTimeout(h[l]),h[l]=setTimeout(async()=>{try{await t.saveSection("session_reset",{[l]:c}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}},300)}async function f(l){try{await t.saveSection("approvals",{mode:l?"manual":"off"}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}return(l,c)=>(b(),z("section",at,[a(j,{label:e(s)("settings.session.requireAuth"),hint:e(s)("settings.session.requireAuthHint")},{default:u(()=>[a(e(ne),{value:e(t).approvals.mode==="manual","onUpdate:value":f},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.mode"),hint:e(s)("settings.session.modeHint")},{default:u(()=>[a(e(Y),{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[0]||(c[0]=y=>k({mode:y}))},null,8,["value","options"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.idleMinutes"),hint:e(s)("settings.session.idleMinutesHint")},{default:u(()=>[a(e(me),{value:e(t).sessionReset.idle_minutes,min:10,max:10080,step:30,size:"small",class:"input-sm","onUpdate:value":c[1]||(c[1]=y=>y!=null&&v("idle_minutes",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.atHour"),hint:e(s)("settings.session.atHourHint")},{default:u(()=>[a(e(me),{value:e(t).sessionReset.at_hour,min:0,max:23,step:1,size:"small",class:"input-sm","onUpdate:value":c[2]||(c[2]=y=>y!=null&&v("at_hour",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.liveMonitorHumanOnly"),hint:e(s)("settings.session.liveMonitorHumanOnlyHint")},{default:u(()=>[a(e(ne),{value:e(n).humanOnly,"onUpdate:value":c[3]||(c[3]=y=>e(n).setHumanOnly(y))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),tl=M((()=>{})),wa,sl=M((()=>{it(),it(),tl(),ae(),wa=ie(Sa,[["__scopeId","data-v-a317c50b"]])})),lt,Ua,nt=M((()=>{Q(),se(),ee(),he(),Ue(),lt={class:"settings-section"},Ua=Z({__name:"PrivacySettings",setup(p){const t=be(),n=oe(),{t:i}=te();async function s(h){try{await t.saveSection("privacy",h),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}return(h,k)=>(b(),z("section",lt,[a(j,{label:e(i)("settings.privacy.redactPii"),hint:e(i)("settings.privacy.redactPiiHint")},{default:u(()=>[a(e(ne),{value:e(t).privacy.redact_pii,"onUpdate:value":k[0]||(k[0]=v=>s({redact_pii:v}))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),al=M((()=>{})),ka,il=M((()=>{nt(),nt(),al(),ae(),ka=ie(Ua,[["__scopeId","data-v-43145f27"]])})),ot,rt,ut,dt,ct,vt,pt,mt,Ca,gt=M((()=>{Q(),se(),Bi(),ri(),ee(),ot={class:"settings-section"},rt={key:0,class:"empty-hint"},ut={class:"provider-header"},dt={class:"provider-name"},ct={key:0,class:"provider-fields"},vt={class:"field-row"},pt={key:1,class:"provider-fields"},mt={class:"field-row"},Ca=Z({__name:"ModelSettings",setup(p){const{t}=te(),n=Hi(),i=oe(),s=F(null),h=F({});ke(()=>{n.providers.length===0&&n.fetchProviders()});const k=c=>!n.providers.find(y=>y.provider===c)?.builtin&&c.startsWith("custom:");function v(c){if(!(c in h.value)){const y=n.providers.find(S=>S.provider===c);h.value[c]=y?.api_key||""}return h.value[c]}async function f(c){const y=v(c);if(!y.trim()){i.warning(t("settings.models.apiKeyPlaceholder"));return}s.value=c;try{await Ne(c,{api_key:y.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(S){i.error(S.message||t("settings.models.saveFailed"))}finally{s.value=null}}async function l(c){const y=v(c);s.value=c;try{await Ne(c,{api_key:y.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(S){i.error(S.message||t("settings.models.saveFailed"))}finally{s.value=null}}return(c,y)=>(b(),z("section",ot,[a(e(na),{show:e(n).loading},{default:u(()=>[e(n).providers.length===0?(b(),z("div",rt,[a(e(Ja),{description:e(t)("settings.models.noProviders")},null,8,["description"])])):q("",!0),(b(!0),z(_e,null,Te(e(n).providers,S=>(b(),z("div",{key:S.provider,class:"provider-section"},[m("div",ut,[m("h4",dt,g(S.label),1),m("span",{class:ze(["type-badge",k(S.provider)?"custom":"builtin"])},g(k(S.provider)?e(t)("models.customType"):e(t)("models.builtIn")),3)]),k(S.provider)?(b(),z("div",pt,[m("div",mt,[a(e(J),{value:v(S.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>h.value[S.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(O),{type:"primary",size:"small",loading:s.value===S.provider,onClick:R=>l(S.provider)},{default:u(()=>[N(g(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])])):(b(),z("div",ct,[m("div",vt,[a(e(J),{value:v(S.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>h.value[S.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(O),{type:"primary",size:"small",loading:s.value===S.provider,onClick:R=>f(S.provider)},{default:u(()=>[N(g(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])]))]))),128))]),_:1},8,["show"])]))}})})),ll=M((()=>{})),Aa,nl=M((()=>{gt(),gt(),ll(),ae(),Aa=ie(Ca,[["__scopeId","data-v-8cd750e1"]])})),_t,ft,yt,bt,ht,St,wt,Ut,kt,Ct,At,Pt,Tt,$t,Mt,xt,Ft,Dt,zt,It,Kt,Rt,Vt,Lt,Et,Pa,Nt=M((()=>{Q(),se(),ee(),da(),di(),_t=Wa(oi()),ft={class:"account-settings"},yt={class:"section-desc"},bt={class:"avatar-section"},ht={class:"section-title"},St={class:"avatar-row"},wt={class:"avatar-display"},Ut={class:"avatar-actions"},kt={class:"avatar-hint"},Ct={class:"action-buttons"},At={class:"configured-section"},Pt={class:"action-row"},Tt={class:"action-label"},$t={class:"action-buttons"},Mt={class:"locked-ips-section"},xt={class:"section-title"},Ft={class:"action-row",style:{"margin-bottom":"12px"}},Dt={class:"action-label"},zt={class:"action-buttons"},It={key:0,class:"locked-list"},Kt={class:"locked-info"},Rt={class:"locked-ip"},Vt={class:"locked-badge"},Lt={class:"locked-ttl"},Et={key:1,class:"empty-hint"},Pa=Z({__name:"AccountSettings",setup(p){const{t}=te(),n=oe(),i=F(null),s=F(!1),h=F(null),k=F(null),v=F(!1);function f($,o){return new Promise((r,x)=>{const de=new FileReader;de.onload=()=>{const ce=new Image;ce.onload=()=>{const ve=document.createElement("canvas");ve.width=ce.width,ve.height=ce.height,ve.getContext("2d").drawImage(ce,0,0);const Me=fe=>{const ye=ve.toDataURL("image/jpeg",fe);ye.length<=o||fe<=.3?r(ye):Me(fe-.1)};Me(.8)},ce.onerror=x,ce.src=de.result},de.onerror=x,de.readAsDataURL($)})}async function l($){const o=$.target,r=o.files?.[0];if(r){if(!["image/png","image/jpeg","image/webp"].includes(r.type)){n.error(t("settings.userAvatar.invalidType")),o.value="";return}if(r.size>1024*1024){n.error(t("settings.userAvatar.tooLarge")),o.value="";return}v.value=!0;try{let x;r.size>500*1024?x=await f(r,500*1024):x=await new Promise((de,ce)=>{const ve=new FileReader;ve.onload=()=>de(ve.result),ve.onerror=ce,ve.readAsDataURL(r)}),await Oe({type:"image",dataUrl:x}),h.value={type:"image",dataUrl:x},n.success(t("settings.userAvatar.saveSuccess"))}catch(x){n.error(x.message||t("settings.userAvatar.saveFailed"))}finally{v.value=!1,o.value=""}}}async function c(){v.value=!0;try{const $=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():Math.random().toString(36).slice(2),o=`${i.value||"default"}-${Date.now()}-${$}`,r=(0,_t.default)(o),x="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(r)));await Oe({type:"image",dataUrl:x,seed:o}),h.value={type:"image",dataUrl:x,seed:o},n.success(t("settings.userAvatar.saveSuccess"))}catch($){n.error($.message||t("settings.userAvatar.saveFailed"))}finally{v.value=!1}}async function y(){v.value=!0;try{await pi(),h.value={type:"default",seed:i.value||"default"},n.success(t("settings.userAvatar.resetSuccess"))}catch($){n.error($.message||t("settings.userAvatar.resetFailed"))}finally{v.value=!1}}const S=F(!1),R=F(""),B=F(""),V=F(""),I=F(!1),K=F(""),P=F("");ke(async()=>{try{i.value=(await yi()).username}catch{}try{h.value=await gi()||{type:"default",seed:i.value||"default"}}catch{}});async function C(){if(B.value!==V.value){n.error(t("login.passwordMismatch"));return}if(B.value.length<6){n.error(t("login.passwordTooShort"));return}s.value=!0;try{await Ui(R.value,B.value),S.value=!1,R.value="",B.value="",V.value="",n.success(t("login.passwordChanged"))}catch($){n.error($.message||t("common.saveFailed"))}finally{s.value=!1}}async function A(){if(P.value.trim().length<2){n.error(t("login.usernameTooShort"));return}s.value=!0;try{await fi(K.value,P.value.trim()),i.value=P.value.trim(),I.value=!1,K.value="",P.value="",n.success(t("login.usernameChanged"))}catch($){n.error($.message||t("common.saveFailed"))}finally{s.value=!1}}function _(){R.value="",B.value="",V.value="",S.value=!0}function d(){K.value="",P.value="",I.value=!0}const w=F([]),U=F(!1);async function D(){U.value=!0;try{w.value=await wi()}catch{}finally{U.value=!1}}async function re($){try{await _i($),n.success(t("settings.lockedIps.unlocked")),await D()}catch(o){n.error(o.message||t("common.saveFailed"))}}async function ue(){try{const $=await bi();n.success(t("settings.lockedIps.allUnlocked",{count:$})),await D()}catch($){n.error($.message||t("common.saveFailed"))}}function Se($){const o=Math.max(0,Math.round(($-Date.now())/6e4));return o>0?`${o} min`:t("common.expired")}return ke(()=>{D()}),($,o)=>(b(),z("div",ft,[m("p",yt,g(e(t)("login.setupDescription")),1),m("div",bt,[m("h3",ht,g(e(t)("settings.userAvatar.title")),1),m("div",St,[m("div",wt,[a(hi,{name:i.value||"default",avatar:h.value?.type==="image"&&h.value.dataUrl?{type:"image",dataUrl:h.value.dataUrl}:null,size:80},null,8,["name","avatar"])]),m("div",Ut,[m("p",kt,g(e(t)("settings.userAvatar.hint")),1),m("div",Ct,[a(e(O),{onClick:o[0]||(o[0]=r=>k.value?.click())},{default:u(()=>[N(g(e(t)("settings.userAvatar.upload")),1)]),_:1}),a(e(O),{onClick:c,loading:v.value},{default:u(()=>[N(g(e(t)("settings.userAvatar.random")),1)]),_:1},8,["loading"]),a(e(O),{onClick:y,loading:v.value},{default:u(()=>[N(g(e(t)("settings.userAvatar.reset")),1)]),_:1},8,["loading"])]),m("input",{ref_key:"avatarFileInput",ref:k,type:"file",accept:".png,.jpg,.jpeg,.webp",style:{display:"none"},onChange:l},null,544)])])]),m("div",At,[m("div",Pt,[m("span",Tt,g(e(t)("login.passwordLoginConfigured",{username:i.value})),1),m("div",$t,[a(e(O),{onClick:_},{default:u(()=>[N(g(e(t)("login.changePassword")),1)]),_:1}),a(e(O),{onClick:d},{default:u(()=>[N(g(e(t)("login.changeUsername")),1)]),_:1})])])]),m("div",Mt,[m("h3",xt,g(e(t)("settings.lockedIps.title")),1),m("div",Ft,[m("span",Dt,g(e(t)("settings.lockedIps.count",{count:w.value.length})),1),m("div",zt,[a(e(O),{size:"small",loading:U.value,onClick:D},{default:u(()=>[N(g(e(t)("common.retry")),1)]),_:1},8,["loading"]),w.value.length>0?(b(),G(e(oa),{key:0,onPositiveClick:ue},{trigger:u(()=>[a(e(O),{size:"small",type:"warning"},{default:u(()=>[N(g(e(t)("settings.lockedIps.unlockAll")),1)]),_:1})]),default:u(()=>[N(" "+g(e(t)("settings.lockedIps.unlockAllConfirm")),1)]),_:1})):q("",!0)])]),w.value.length>0?(b(),z("div",It,[(b(!0),z(_e,null,Te(w.value,r=>(b(),z("div",{key:r.ip+r.type,class:"locked-item"},[m("div",Kt,[m("span",Rt,g(r.ip),1),m("span",Vt,g(r.type),1),m("span",Lt,g(Se(r.lockedUntil)),1)]),a(e(O),{size:"tiny",type:"error",ghost:"",onClick:x=>re(r.ip)},{default:u(()=>[N(g(e(t)("settings.lockedIps.unlock")),1)]),_:1},8,["onClick"])]))),128))])):(b(),z("p",Et,g(e(t)("settings.lockedIps.empty")),1))]),a(e(Fe),{show:S.value,"onUpdate:show":o[5]||(o[5]=r=>S.value=r),preset:"dialog",title:e(t)("login.changePassword")},{action:u(()=>[a(e(O),{onClick:o[4]||(o[4]=r=>S.value=!1)},{default:u(()=>[N(g(e(t)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:s.value,onClick:C},{default:u(()=>[N(g(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Pe),{"label-placement":"top"},{default:u(()=>[a(e(W),{label:e(t)("login.currentPassword")},{default:u(()=>[a(e(J),{value:R.value,"onUpdate:value":o[1]||(o[1]=r=>R.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("login.newPassword")},{default:u(()=>[a(e(J),{value:B.value,"onUpdate:value":o[2]||(o[2]=r=>B.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.newPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("login.confirmPassword")},{default:u(()=>[a(e(J),{value:V.value,"onUpdate:value":o[3]||(o[3]=r=>V.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.confirmPassword"),onKeyup:Le(C,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"]),a(e(Fe),{show:I.value,"onUpdate:show":o[9]||(o[9]=r=>I.value=r),preset:"dialog",title:e(t)("login.changeUsername")},{action:u(()=>[a(e(O),{onClick:o[8]||(o[8]=r=>I.value=!1)},{default:u(()=>[N(g(e(t)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:s.value,onClick:A},{default:u(()=>[N(g(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Pe),{"label-placement":"top"},{default:u(()=>[a(e(W),{label:e(t)("login.currentPassword")},{default:u(()=>[a(e(J),{value:K.value,"onUpdate:value":o[6]||(o[6]=r=>K.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("login.newUsername")},{default:u(()=>[a(e(J),{value:P.value,"onUpdate:value":o[7]||(o[7]=r=>P.value=r),placeholder:e(t)("login.usernamePlaceholder"),onKeyup:Le(A,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"])]))}})})),ol=M((()=>{})),Ta,rl=M((()=>{Nt(),Nt(),ol(),ae(),Ta=ie(Pa,[["__scopeId","data-v-37ce8d61"]])})),Ot,Ht,Bt,qt,$a,jt=M((()=>{Q(),se(),ee(),da(),Ot={class:"user-management"},Ht={class:"toolbar"},Bt={class:"section-title"},qt={class:"section-desc"},$a=Z({__name:"UserManagementSettings",setup(p){const{t}=te(),n=oe(),i=F(!1),s=F(!1),h=F([]),k=F([]),v=F(!1),f=F(null),l=Qa({username:"",password:"",role:"admin",status:"active",profiles:[]}),c=T(()=>[{label:t("users.roles.admin"),value:"admin"},{label:t("users.roles.superAdmin"),value:"super_admin"}]),y=T(()=>[{label:t("users.status.active"),value:"active"},{label:t("users.status.disabled"),value:"disabled"}]),S=T(()=>k.value.map(d=>({label:d,value:d})));function R(){f.value=null,l.username="",l.password="",l.role="admin",l.status="active",l.profiles=[]}async function B(){i.value=!0;try{const d=await ci();h.value=d.users,k.value=d.profiles}catch(d){n.error(d.message||t("users.loadFailed"))}finally{i.value=!1}}function V(){R(),v.value=!0}function I(d){f.value=d,l.username=d.username,l.password="",l.role=d.role,l.status=d.status,l.profiles=[...d.profiles],v.value=!0}async function K(){if(l.username.trim().length<2){n.error(t("login.usernameTooShort"));return}if(!f.value&&l.password.length<6){n.error(t("login.passwordTooShort"));return}if(l.password&&l.password.length<6){n.error(t("login.passwordTooShort"));return}s.value=!0;try{const d={username:l.username.trim(),password:l.password||void 0,role:l.role,status:l.status,profiles:l.role==="super_admin"?[]:l.profiles,defaultProfile:l.profiles[0]||null},w=f.value?await He(f.value.id,d):await Si({...d,password:l.password});h.value=w.users,k.value=w.profiles,v.value=!1,R(),n.success(t("common.saved"))}catch(d){n.error(d.message||t("common.saveFailed"))}finally{s.value=!1}}async function P(d,w){s.value=!0;try{const U=await He(d.id,{status:w});h.value=U.users,k.value=U.profiles,n.success(t("common.saved"))}catch(U){n.error(U.message||t("common.saveFailed"))}finally{s.value=!1}}async function C(d){s.value=!0;try{const w=await mi(d.id);h.value=w.users,k.value=w.profiles,n.success(t("common.saved"))}catch(w){n.error(w.message||t("common.deleteFailed"))}finally{s.value=!1}}function A(d){return d?new Date(d).toLocaleString():"-"}const _=T(()=>[{title:t("users.username"),key:"username",minWidth:140},{title:t("users.role"),key:"role",width:130,render:d=>pe(xe,{size:"small",type:d.role==="super_admin"?"warning":"default"},{default:()=>d.role==="super_admin"?t("users.roles.superAdmin"):t("users.roles.admin")})},{title:t("users.statusLabel"),key:"status",width:110,render:d=>pe(xe,{size:"small",type:d.status==="active"?"success":"error"},{default:()=>d.status==="active"?t("users.status.active"):t("users.status.disabled")})},{title:t("users.profiles"),key:"profiles",minWidth:200,render:d=>d.role==="super_admin"?pe("span",{class:"muted"},t("users.allProfiles")):pe(Ae,{size:4},{default:()=>d.profiles.length?d.profiles.map(w=>pe(xe,{size:"small",bordered:!1},{default:()=>w})):pe("span",{class:"muted"},t("users.noProfiles"))})},{title:t("users.lastLogin"),key:"last_login_at",minWidth:170,render:d=>A(d.last_login_at)},{title:t("common.edit"),key:"actions",width:280,render:d=>pe(Ae,{size:8},{default:()=>[pe(O,{size:"small",onClick:()=>I(d)},{default:()=>t("common.edit")}),pe(O,{size:"small",type:d.status==="active"?"warning":"primary",ghost:!0,loading:s.value,onClick:()=>P(d,d.status==="active"?"disabled":"active")},{default:()=>d.status==="active"?t("users.disable"):t("users.enable")}),pe(oa,{onPositiveClick:()=>C(d)},{trigger:()=>pe(O,{size:"small",type:"error",ghost:!0,loading:s.value},{default:()=>t("common.delete")}),default:()=>t("users.deleteConfirm")})]})}]);return ke(B),(d,w)=>(b(),z("div",Ot,[m("div",Ht,[m("div",null,[m("h3",Bt,g(e(t)("users.title")),1),m("p",qt,g(e(t)("users.description")),1)]),a(e(O),{type:"primary",onClick:V},{default:u(()=>[N(g(e(t)("users.create")),1)]),_:1})]),a(e(Za),{columns:_.value,data:h.value,loading:i.value,bordered:!1,"single-line":!1,size:"small"},null,8,["columns","data","loading"]),a(e(Fe),{show:v.value,"onUpdate:show":w[6]||(w[6]=U=>v.value=U),preset:"dialog",title:f.value?e(t)("users.edit"):e(t)("users.create")},{action:u(()=>[a(e(O),{onClick:w[5]||(w[5]=U=>v.value=!1)},{default:u(()=>[N(g(e(t)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:s.value,onClick:K},{default:u(()=>[N(g(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Pe),{"label-placement":"top"},{default:u(()=>[a(e(W),{label:e(t)("users.username")},{default:u(()=>[a(e(J),{value:l.username,"onUpdate:value":w[0]||(w[0]=U=>l.username=U),placeholder:e(t)("login.usernamePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:f.value?e(t)("users.newPasswordOptional"):e(t)("login.newPassword")},{default:u(()=>[a(e(J),{value:l.password,"onUpdate:value":w[1]||(w[1]=U=>l.password=U),type:"password","show-password-on":"click",placeholder:e(t)("login.passwordPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("users.role")},{default:u(()=>[a(e(Y),{value:l.role,"onUpdate:value":w[2]||(w[2]=U=>l.role=U),options:c.value},null,8,["value","options"])]),_:1},8,["label"]),a(e(W),{label:e(t)("users.statusLabel")},{default:u(()=>[a(e(Y),{value:l.status,"onUpdate:value":w[3]||(w[3]=U=>l.status=U),options:y.value},null,8,["value","options"])]),_:1},8,["label"]),l.role!=="super_admin"?(b(),G(e(W),{key:0,label:e(t)("users.profiles")},{default:u(()=>[a(e(Y),{value:l.profiles,"onUpdate:value":w[4]||(w[4]=U=>l.profiles=U),multiple:"",filterable:"",options:S.value,placeholder:e(t)("users.profilesPlaceholder")},null,8,["value","options","placeholder"])]),_:1},8,["label"])):q("",!0)]),_:1})]),_:1},8,["show","title"])]))}})})),ul=M((()=>{})),Ma,dl=M((()=>{jt(),jt(),ul(),ae(),Ma=ie($a,[["__scopeId","data-v-bcd3f33a"]])}));function cl(p){if(p&&typeof p=="object"){const t=p;if(Array.isArray(t.providers))return{providers:t.providers};if(Array.isArray(t.settings))return{providers:t.settings}}return{providers:[]}}async function vl(){return cl(await De("/api/hermes/tts/settings"))}async function pl(p,t){const n=await De(`/api/hermes/tts/settings/${p}`,{method:"PUT",body:JSON.stringify(t)});return typeof n=="object"&&n!==null&&"setting"in n?n.setting:n}async function ml(p,t){const n=await De(`/api/hermes/tts/settings/${p}/secret/${t}`,{method:"DELETE"});return n&&typeof n=="object"&&"setting"in n?n.setting??null:n}var gl=M((()=>{Ke()})),we,Re=M((()=>{we=[{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-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-custom",kind:"stt",provider:"custom",label:"Custom STT",labelKey:"settings.voice.presetCustomSttLabel",isSecretRequired:!0,capabilities:{models:!0}}]}));function Gt(p){return p==="openai"||p==="custom"}function Wt(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"}function Jt(p){return p==="browser"||p==="openai"||p==="custom"}function _l(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"}function X(p,t){const n=p[t];return typeof n=="string"?n:""}function fl(){const{t:p}=te(),t=F([]),n=F(!1),i=Ki(),s=xi(),h=T(()=>`tts-${i.provider.value==="webspeech"?"edge":i.provider.value}`),k=T(()=>`stt-${s.provider.value}`),v=T(()=>t.value.filter(_=>_.kind==="tts")),f=T(()=>t.value.filter(_=>_.kind==="stt")),l=T(()=>v.value.find(_=>_.id===h.value)||v.value[0]||null),c=T(()=>f.value.find(_=>_.id===k.value)||f.value[0]||null),y=T(()=>v.value.map(_=>({label:_.label,value:_.id}))),S=T(()=>f.value.map(_=>({label:_.label,value:_.id})));function R(_){if(!_l(_.provider))return;i.setProvider(_.provider);const d=_.settings;if(_.provider==="edge"){i.setEdgeVoice(X(d,"voice")||_.voice||i.edgeVoice.value);const w=Number(d.rate),U=Number(d.pitch);Number.isFinite(w)&&i.setEdgeRate(w),Number.isFinite(U)&&i.setEdgePitchHz(U);return}if(_.provider==="openai"){i.setOpenaiBaseUrl(_.baseUrl||X(d,"baseUrl")),i.setOpenaiModel(_.model||X(d,"model")||i.openaiModel.value),i.setOpenaiVoice(_.voice||X(d,"voice")||i.openaiVoice.value);return}if(_.provider==="custom"){i.setCustomUrl(_.baseUrl||X(d,"baseUrl"));return}_.provider==="mimo"&&(i.setMimoBaseUrl(_.baseUrl||X(d,"baseUrl")||i.mimoBaseUrl.value),i.setMimoModel(_.model||X(d,"model")||i.mimoModel.value),i.setMimoVoice(_.voice||X(d,"voice")||i.mimoVoice.value),i.setMimoStylePrompt(X(d,"stylePrompt")),i.setMimoVoiceDesignDesc(X(d,"voiceDesignDesc")))}function B(_){if(!Jt(_.provider))return;s.setProvider(_.provider);const d=_.settings;if(_.provider==="openai"){s.setOpenaiModel(_.model||X(d,"model")||s.openaiModel.value),s.setOpenaiLanguage(X(d,"language")),s.setOpenaiPrompt(X(d,"prompt"));return}_.provider==="custom"&&(s.setCustomBaseUrl(_.baseUrl||X(d,"baseUrl")),s.setCustomModel(_.model||X(d,"model")||s.customModel.value),s.setCustomLanguage(X(d,"language")),s.setCustomPrompt(X(d,"prompt")))}function V(_,d,w){const U=we.find(D=>D.kind==="tts"&&D.provider===_&&(D.baseUrl===d.baseUrl||!D.baseUrl));return{id:`tts-${_}`,kind:"tts",provider:_,label:U?.labelKey?p(U.labelKey):U?.label||`${_} TTS`,baseUrl:d.baseUrl,model:d.model,voice:d.voice,settings:d,hasSecret:w,active:h.value===`tts-${_}`}}function I(_,d,w){const U=we.find(D=>D.kind==="stt"&&D.provider===_&&(D.baseUrl===d.baseUrl||!D.baseUrl));return{id:`stt-${_}`,kind:"stt",provider:_,label:U?.labelKey?p(U.labelKey):U?.label||`${_} STT`,baseUrl:d.baseUrl,model:d.model,settings:d,hasSecret:w,active:k.value===`stt-${_}`}}async function K(){n.value=!0;try{await s.loadServerSttSettings(!0);const[_,d]=await Promise.all([vl(),$i()]),w=[{id:"tts-edge",kind:"tts",provider:"edge",label:p("settings.voice.presetEdgeTtsLabel"),isBuiltin:!0,hasSecret:!1,active:h.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:p("settings.voice.presetBrowserSttLabel"),isBuiltin:!0,hasSecret:!1,active:k.value==="stt-browser",settings:{}}];for(const U of _.providers){const D=V(U.provider,U.settings,U.secrets?.apiKey==="[stored]"),re=w.find(ue=>ue.id===D.id);re?Object.assign(re,D,{isBuiltin:re.isBuiltin}):w.push(D)}for(const U of d.providers)w.push(I(U.provider,U.settings,U.secrets?.apiKey==="[stored]"));t.value=w.map(U=>({...U,active:U.kind==="tts"?U.id===h.value:U.id===k.value}))}finally{n.value=!1}}async function P(_,d){const w=t.value.find(U=>U.kind===_&&U.id===d);w&&(_==="tts"?R(w):(B(w),Jt(w.provider)&&await Be(w.provider)),t.value=t.value.map(U=>({...U,active:U.kind===_?U.id===d:U.active})))}async function C(_,d,w){if(_==="tts"){if(!Wt(d))throw new Error(`Unsupported TTS provider: ${String(d)}`);const D=await pl(d,{settings:w.settings,secrets:w.secrets});return await K(),await P("tts",`tts-${d}`),D}if(d==="browser")return await Be("browser"),s.setProvider("browser"),await K(),null;if(!Gt(d))throw new Error(`Unsupported STT provider: ${String(d)}`);const U=await Di(d,{settings:w.settings,secrets:w.secrets,activeProvider:d});return await K(),await P("stt",`stt-${d}`),U}async function A(_,d){if(_==="tts"){if(!Wt(d))return;await ml(d,"apiKey")}else{if(!Gt(d))return;await Fi(d,"apiKey")}await K()}return{connections:t,ttsConnections:v,sttConnections:f,activeTtsId:h,activeSttId:k,activeTtsConnection:l,activeSttConnection:c,ttsConnectionOptions:y,sttConnectionOptions:S,loading:n,refresh:K,setActiveConnection:P,saveConnection:C,deleteSecret:A}}var yl=M((()=>{Q(),ee(),gl(),Ai(),Vi(),zi(),Re()})),Yt,Xt,xa,Qt=M((()=>{Q(),Yt={class:"provider-meta-item"},Xt=["title"],xa=Z({__name:"ProviderMetaItem",props:{label:{},value:{}},setup(p){return(t,n)=>(b(),z("div",Yt,[m("dt",null,g(p.label),1),m("dd",{title:String(p.value||"—")},g(p.value||"—"),9,Xt)]))}})})),bl=M((()=>{})),Fa,hl=M((()=>{Qt(),Qt(),bl(),ae(),Fa=ie(xa,[["__scopeId","data-v-6e8cbcf2"]])})),Zt,es,ts,ss,as,is,ls,ns,os,rs,us,ds,cs,vs,ps,Da,ms=M((()=>{Q(),se(),ee(),hl(),Zt=["data-state"],es={class:"card-main"},ts={class:"provider-identity"},ss={class:"provider-icon","aria-hidden":"true"},as={class:"provider-copy"},is={class:"provider-title-row"},ls=["title"],ns={class:"provider-kind"},os={class:"provider-description"},rs={class:"provider-meta"},us={class:"provider-control"},ds=["aria-label"],cs={key:1,class:"feedback-row error",role:"alert"},vs={class:"error-summary"},ps={key:1,class:"error-details"},Da=Z({__name:"VoiceApiCard",props:{connection:{},testState:{}},emits:["setActive","test","edit","connect","remove"],setup(p,{emit:t}){const n=p,i=t,{t:s}=te(),h=F(!1);$e(()=>n.testState?.message,()=>{h.value=!1});const k=T(()=>!(n.connection.kind==="stt"&&n.connection.provider==="browser")),v=T(()=>!n.connection.isBuiltin),f=T(()=>v.value?n.connection.hasSecret?s("settings.voice.keyStored"):s("settings.voice.keyMissing"):s("settings.voice.builtin")),l=T(()=>n.connection.isBuiltin?s("settings.voice.builtin"):s("settings.voice.customApi")),c=T(()=>n.connection.active?"success":v.value&&!n.connection.hasSecret?"warning":"default"),y=T(()=>n.connection.active?s("settings.voice.active"):v.value&&!n.connection.hasSecret?s("settings.voice.keyMissing"):s("settings.voice.connected")),S=T(()=>n.connection.model||String(n.connection.settings.model||"")),R=T(()=>n.connection.voice||String(n.connection.settings.voice||"")),B=T(()=>n.connection.baseUrl||(n.connection.isBuiltin?s("settings.voice.localBuiltin"):"")),V=T(()=>{const $=n.testState?.status;return s($==="success"?"settings.voice.testSuccess":$==="error"?"settings.voice.testFailedShort":$==="loading"?"settings.voice.testing":$==="recording"?"settings.voice.recording":"settings.voice.notTested")}),I=T(()=>v.value&&!n.connection.hasSecret?s("settings.voice.connect"):s("common.edit")),K=T(()=>n.testState?.status==="recording"?s("settings.voice.sttTestStopButton"):s("settings.voice.testAction")),P=T(()=>n.connection.kind==="tts"?[{key:"source",label:s("settings.voice.source"),value:B.value},{key:"model",label:s("settings.voice.model"),value:S.value},{key:"voice",label:s("settings.voice.voice"),value:R.value},{key:"api-key",label:s("settings.voice.apiKey"),value:f.value}]:[{key:"source",label:s("settings.voice.source"),value:B.value},{key:"model",label:s("settings.voice.model"),value:S.value},{key:"api-key",label:s("settings.voice.apiKey"),value:f.value},{key:"last-test",label:s("settings.voice.lastTest"),value:V.value}]),C=T(()=>{const $=n.testState?.status;return!!$&&$!=="idle"&&$!=="error"}),A=T(()=>n.testState?.status==="error"),_=T(()=>n.testState?.message||"");function d($){const o=$.indexOf("{");if(o<0)return null;try{const r=JSON.parse($.slice(o)),x=r.error||r.message||r.detail;return typeof x=="string"&&x.trim()?x.trim():null}catch{return null}}function w($){return $.replace(/^API Error\s+\d+\s*:\s*/i,"").replace(/^Error\s*:\s*/i,"").trim()}const U=T(()=>{const $=_.value.trim();if(!$)return s("settings.voice.testFailedSummary");const o=d($)||w($);return!o||o.startsWith("{")||o.startsWith("[")?s("settings.voice.testFailedSummary"):o.length>180?`${o.slice(0,177).trim()}…`:o}),D=T(()=>{const $=_.value.trim();return $.length>0&&$!==U.value}),re=T(()=>[{label:s("settings.voice.remove"),key:"remove",disabled:!n.connection.hasSecret}]);function ue(){if(v.value&&!n.connection.hasSecret){i("connect",n.connection);return}i("edit",n.connection)}function Se($){$==="remove"&&n.connection.hasSecret&&i("remove",n.connection)}return($,o)=>(b(),z("article",{class:ze(["voice-api-card",{active:p.connection.active}]),"data-state":p.testState?.status||"idle"},[m("div",es,[m("div",ts,[m("div",ss,g(p.connection.kind==="tts"?"T":"S"),1),m("div",as,[m("div",is,[m("h5",{class:"provider-title",title:p.connection.label},g(p.connection.label),9,ls),m("span",ns,g(l.value),1)]),m("p",os,g(p.connection.kind==="tts"?e(s)("settings.voice.ttsCardHint"):e(s)("settings.voice.sttCardHint")),1)])]),m("dl",rs,[(b(!0),z(_e,null,Te(P.value,r=>(b(),G(Fa,{key:r.key,label:r.label,value:r.value},null,8,["label","value"]))),128))]),m("div",us,[a(e(xe),{class:"status-badge",size:"small",type:c.value,round:"",bordered:!1},{default:u(()=>[N(g(y.value),1)]),_:1},8,["type"]),m("div",{class:"card-actions","aria-label":`${p.connection.label} actions`},[p.connection.active?q("",!0):(b(),G(e(O),{key:0,size:"tiny",secondary:"",onClick:o[0]||(o[0]=r=>i("setActive",p.connection))},{default:u(()=>[N(g(e(s)("settings.voice.setActive")),1)]),_:1})),a(e(O),{size:"tiny",loading:p.testState?.status==="loading","data-testid":`voice-card-test-${p.connection.id}`,onClick:o[1]||(o[1]=r=>i("test",p.connection))},{default:u(()=>[N(g(K.value),1)]),_:1},8,["loading","data-testid"]),k.value?(b(),G(e(O),{key:1,size:"tiny",onClick:ue},{default:u(()=>[N(g(I.value),1)]),_:1})):q("",!0),v.value?(b(),G(e(ei),{key:2,trigger:"click",size:"small",options:re.value,onSelect:Se},{default:u(()=>[a(e(O),{size:"tiny","aria-label":e(s)("settings.voice.moreActionsFor",{provider:p.connection.label})},{default:u(()=>[N(g(e(s)("settings.voice.moreActions")),1)]),_:1},8,["aria-label"])]),_:1},8,["options"])):q("",!0)],8,ds)])]),C.value?(b(),z("div",{key:0,class:ze(["feedback-row",p.testState?.status]),role:"status"},g(p.testState?.message||(p.testState?.status==="success"?e(s)("settings.voice.testSuccess"):"")),3)):q("",!0),A.value?(b(),z("div",cs,[m("div",vs,g(U.value),1),D.value?(b(),G(e(O),{key:0,class:"details-toggle",text:"",size:"tiny",onClick:o[2]||(o[2]=r=>h.value=!h.value)},{default:u(()=>[N(g(h.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)]),_:1})):q("",!0),h.value?(b(),z("pre",ps,g(_.value),1)):q("",!0)])):q("",!0)],10,Zt))}})})),Sl=M((()=>{})),Ie,wl=M((()=>{ms(),ms(),Sl(),ae(),Ie=ie(Da,[["__scopeId","data-v-549f5d20"]])}));async function Ul(p){return De("/api/voice/providers/probe",{method:"POST",signal:p.signal,body:JSON.stringify({kind:p.kind,provider:p.provider,compatibility:p.compatibility,baseUrl:p.baseUrl,apiKey:p.apiKey})})}var kl=M((()=>{Ke()})),gs,_s,fs,ys,bs,hs,Ss,ws,Us,ks,Cs,As,Ps,za,Ts=M((()=>{Q(),se(),ee(),kl(),Re(),gs={class:"form-section"},_s={class:"form-section"},fs={class:"section-heading"},ys={key:0,class:"connection-actions"},bs={key:1,class:"inline-error","data-testid":"voice-provider-probe-error"},hs={key:1},Ss={key:0,class:"form-section"},ws={class:"section-heading"},Us={key:0,class:"helper-text"},ks={key:1,class:"helper-text"},Cs={key:2,class:"helper-text"},As={key:3,class:"helper-text"},Ps={class:"modal-footer"},za=Z({__name:"VoiceApiFormModal",props:{kind:{},show:{type:Boolean}},emits:["close","saved"],setup(p,{emit:t}){const n=p,i=t,{t:s}=te(),h=oe(),k=F(!1),v=F(null),f=F("openai-compatible"),l=F({baseUrl:"",apiKey:"",model:""}),c=F(!1),y=F(!1),S=F(!1),R=F(!1),B=F(!1),V=F([]),I=F(""),K=F(""),P=F(""),C=F(!1),A=F("");let _=null,d=0,w=!1;const U=T(()=>we.filter(H=>H.kind===n.kind&&!H.isBuiltin).map(H=>({label:H.labelKey?s(H.labelKey):H.label,value:H.id}))),D=T(()=>we.find(H=>H.id===v.value)||null),re=T(()=>D.value?.provider==="custom"),ue=T(()=>f.value==="openai-compatible"),Se=T(()=>{const H=V.value.map(E=>({label:E.capability==="preferred"?`${E.label} · ${s("settings.voice.modelRecommendedSuffix")}`:E.label,value:E.id})),L=l.value.model.trim();return L&&!H.some(E=>E.value===L)?[{label:L,value:L},...H]:H}),$=T(()=>fe(l.value.baseUrl)),o=T(()=>!S.value&&!l.value.baseUrl.trim()||!D.value||!D.value.isSecretRequired?"":ye(l.value.baseUrl)),r=T(()=>!D.value?.capabilities?.models||!y.value||l.value.model.trim()?"":s("settings.voice.modelRequiredConnectManual")),x=T(()=>!R.value||!D.value?.isSecretRequired||l.value.apiKey.trim()?"":s("settings.voice.apiKeyRequired")),de=T(()=>!!D.value&&ue.value&&!!l.value.baseUrl.trim()&&!!l.value.apiKey.trim()&&!ye(l.value.baseUrl)),ce=T(()=>!(!D.value||D.value.isSecretRequired&&(!l.value.apiKey.trim()||ye(l.value.baseUrl))||D.value.capabilities?.models&&!l.value.model.trim())),ve=T(()=>D.value?f.value==="manual"?s("settings.voice.discoveryManualHint"):!l.value.baseUrl.trim()||!l.value.apiKey.trim()?s("settings.voice.discoveryCredentialHint"):s("settings.voice.discoveryNoAutoProbeHint"):"");$e(()=>n.show,H=>{H?Me():Ce()}),$e([()=>l.value.baseUrl,()=>l.value.apiKey,f],()=>{if(w){w=!1;return}Ce(),V.value=[],I.value="",K.value="",P.value="",C.value=!1}),si(()=>Ce());function Me(){v.value=null,f.value="openai-compatible",l.value={baseUrl:"",apiKey:"",model:""},c.value=!1,y.value=!1,S.value=!1,R.value=!1,A.value="",V.value=[],I.value="",K.value="",P.value="",C.value=!1,Ce()}function fe(H){const L=H.trim();if(!L)return"";try{const E=new URL(L);return E.hash="",E.pathname=E.pathname.replace(/\/+$/,"")||"/",E.toString().replace(/\/$/,"")}catch{return L.replace(/\/+$/,"")}}function ye(H){const L=H.trim();if(!L)return s("settings.voice.baseUrlRequired");try{const E=new URL(L);return E.protocol!=="https:"&&E.hostname!=="localhost"&&E.hostname!=="127.0.0.1"?s("settings.voice.baseUrlHttpsRequired"):""}catch{return s("settings.voice.baseUrlInvalid")}}function Ce(){_&&(_.abort(),_=null),B.value=!1}function Na(H){v.value=H;const L=we.find(E=>E.id===H);f.value=L?.provider==="custom"||L?.provider==="openai"?"openai-compatible":"manual",l.value={baseUrl:L?.baseUrl||"",model:L?.defaultModel||"",apiKey:""},c.value=!1,y.value=!1,S.value=!1,R.value=!1,A.value=""}function Oa(H){l.value.model=H||"",c.value=!0,y.value=!0}function Ha(){I.value&&(l.value.model=I.value,y.value=!0,c.value=!1)}function Ba(){S.value=!0,ye(l.value.baseUrl)||(l.value.baseUrl=$.value)}function qa(){return`${n.kind}|${D.value?.provider||""}|${f.value}|${fe(l.value.baseUrl)}|${l.value.apiKey.trim()}`}async function ja(){if(R.value=!0,!de.value)return;const H=qa();A.value!==H&&(A.value=H,await Ve())}async function Ve(){if(!D.value||!ue.value)return;S.value=!0,R.value=!0;const H=ye(l.value.baseUrl);if(H){K.value=H;return}if(!l.value.apiKey.trim()){K.value=s("settings.voice.apiKeyRequiredForDiscovery");return}Ce();const L=++d,E=new AbortController;_=E,B.value=!0,K.value="",P.value="",C.value=!1;try{const le=await Ul({kind:n.kind,provider:String(D.value.provider),compatibility:f.value,baseUrl:fe(l.value.baseUrl),apiKey:l.value.apiKey.trim(),signal:E.signal});if(L!==d)return;le.normalizedBaseUrl&&(w=!0,l.value.baseUrl=le.normalizedBaseUrl),V.value=le.models||[],I.value=le.recommendedModel||"",K.value=le.ok?"":le.errorSummary||s("settings.voice.discoveryFailedManualFallback"),P.value=le.errorDetails||"",le.ok&&le.recommendedModel&&!c.value&&!l.value.model.trim()&&(l.value.model=le.recommendedModel,y.value=!0)}catch(le){if(E.signal.aborted||L!==d)return;K.value=le instanceof Error?le.message:s("settings.voice.discoveryFailedManualFallback"),P.value=""}finally{L===d&&(B.value=!1,_=null)}}async function Ga(){if(D.value){if(S.value=!0,R.value=!0,y.value=!0,!ce.value){h.warning(r.value||o.value||x.value||s("settings.voice.completeRequiredProviderFields"));return}k.value=!0;try{i("saved",{preset:D.value,settings:{baseUrl:fe(l.value.baseUrl),model:l.value.model.trim()},secrets:{apiKey:l.value.apiKey.trim()}})}finally{k.value=!1}}}return(H,L)=>(b(),G(e(Fe),{show:p.show,preset:"card",title:p.kind==="tts"?e(s)("settings.voice.addTtsApi"):e(s)("settings.voice.addSttApi"),style:{width:"min(540px, calc(100vw - 32px))"},"onUpdate:show":L[6]||(L[6]=E=>i("close"))},{footer:u(()=>[m("div",Ps,[a(e(O),{onClick:L[5]||(L[5]=E=>i("close"))},{default:u(()=>[N(g(e(s)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:k.value,disabled:!ce.value,"data-testid":"voice-provider-save",onClick:Ga},{default:u(()=>[N(g(e(s)("common.add")),1)]),_:1},8,["loading","disabled"])])]),default:u(()=>[a(e(Pe),{"label-placement":"top",class:"provider-form"},{default:u(()=>[m("section",gs,[a(e(W),{label:e(s)("models.selectProvider"),required:""},{default:u(()=>[a(e(Y),{value:v.value,"onUpdate:value":[L[0]||(L[0]=E=>v.value=E),Na],options:U.value,placeholder:e(s)("models.chooseProvider"),"data-testid":"voice-provider-select"},null,8,["value","options","placeholder"])]),_:1},8,["label"]),D.value&&re.value?(b(),G(e(W),{key:0,label:e(s)("settings.voice.apiCompatibility"),required:""},{default:u(()=>[a(e(Y),{value:f.value,"onUpdate:value":L[1]||(L[1]=E=>f.value=E),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"])):q("",!0)]),D.value?(b(),z(_e,{key:0},[m("section",_s,[m("div",fs,[m("span",null,g(e(s)("settings.voice.connectionStep")),1),m("small",null,g(ve.value),1)]),a(e(W),{label:e(s)("models.baseUrl"),required:D.value.isSecretRequired,feedback:o.value},{default:u(()=>[a(e(J),{value:l.value.baseUrl,"onUpdate:value":L[2]||(L[2]=E=>l.value.baseUrl=E),placeholder:e(s)("models.baseUrlPlaceholder"),disabled:!!D.value.baseUrl&&D.value.provider!=="custom","data-testid":"voice-provider-base-url",onBlur:Ba},null,8,["value","placeholder","disabled"])]),_:1},8,["label","required","feedback"]),a(e(W),{label:e(s)("models.apiKey"),required:D.value.isSecretRequired,feedback:x.value},{default:u(()=>[a(e(J),{value:l.value.apiKey,"onUpdate:value":L[3]||(L[3]=E=>l.value.apiKey=E),type:"password","show-password-on":"click",autocomplete:"off",placeholder:D.value.isSecretRequired?e(s)("settings.voice.apiKeyConnectPlaceholder"):e(s)("models.apiKeyPlaceholder"),"data-testid":"voice-provider-api-key",onBlur:ja},null,8,["value","placeholder"])]),_:1},8,["label","required","feedback"]),ue.value?(b(),z("div",ys,[a(e(O),{size:"small",loading:B.value,disabled:!de.value,"data-testid":"voice-provider-probe",onClick:Ve},{default:u(()=>[N(g(e(s)("settings.voice.connectFetchModels")),1)]),_:1},8,["loading","disabled"])])):q("",!0),K.value?(b(),z("div",bs,[m("span",null,g(K.value),1),P.value?(b(),z("button",{key:0,type:"button",class:"link-button",onClick:L[4]||(L[4]=E=>C.value=!C.value)},g(C.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)):q("",!0),C.value&&P.value?(b(),z("pre",hs,g(P.value),1)):q("",!0)])):q("",!0)]),D.value.capabilities?.models?(b(),z("section",Ss,[m("div",ws,[m("span",null,g(e(s)("settings.voice.model")),1),m("small",null,g(e(s)("settings.voice.modelConnectManualHint")),1)]),a(e(W),{label:e(s)("models.defaultModel"),feedback:r.value},{default:u(()=>[a(e(Y),{value:l.value.model,options:Se.value,tag:"",filterable:"",loading:B.value,placeholder:e(s)("settings.voice.modelConnectManualHint"),"data-testid":"voice-provider-model","onUpdate:value":Oa},null,8,["value","options","loading","placeholder"])]),_:1},8,["label","feedback"]),B.value?(b(),z("div",Us,g(e(s)("settings.voice.fetchingModels")),1)):I.value&&c.value&&l.value.model!==I.value?(b(),z("div",ks,[N(g(e(s)("settings.voice.recommendedModel",{model:I.value}))+" ",1),m("button",{type:"button",class:"link-button",onClick:Ha},g(e(s)("settings.voice.useRecommendedModel")),1)])):V.value.length?(b(),z("div",Cs,g(e(s)("settings.voice.modelsDiscovered",{count:V.value.length})),1)):K.value?(b(),z("div",As,g(e(s)("settings.voice.discoveryFailedManualFallback")),1)):q("",!0)])):q("",!0)],64)):q("",!0)]),_:1})]),_:1},8,["show","title"]))}})})),Cl=M((()=>{})),Ia,Al=M((()=>{Ts(),Ts(),Cl(),ae(),Ia=ie(za,[["__scopeId","data-v-5ae1761c"]])})),$s,Ms,Ka,xs=M((()=>{Q(),se(),ee(),Re(),Li(),$s={style:{"font-size":"12px",opacity:"0.6"}},Ms={style:{"font-size":"12px",opacity:"0.6"}},Ka=Z({__name:"VoiceApiConfigurator",props:{connection:{},show:{type:Boolean}},emits:["close","save"],setup(p,{emit:t}){const n=p,i=t,{t:s}=te(),h=F(!1),k=F({}),v=F(""),f=T(()=>n.connection?we.find(P=>P.kind===n.connection.kind&&P.provider===n.connection.provider&&(P.baseUrl===n.connection.baseUrl||!P.baseUrl)):null),l=T(()=>f.value?.capabilities||{});function c(P,C){k.value[P]=C??""}function y(P){const C=k.value[P];return typeof C=="string"?C:typeof C=="number"?String(C):""}function S(P,C=0){const A=k.value[P];if(typeof A=="number"&&Number.isFinite(A))return A;if(typeof A=="string"&&A.trim()){const _=Number(A);if(Number.isFinite(_))return _}return C}$e(()=>n.connection,P=>{P&&(k.value={...P.settings,model:P.model||String(P.settings.model||""),voice:P.voice||String(P.settings.voice||"")},P.provider==="edge"&&(k.value.rate=S("rate",1),k.value.pitch=S("pitch",0)),v.value="")},{immediate:!0});async function R(){if(n.connection){h.value=!0;try{const P=v.value.trim();i("save",n.connection,{settings:{...k.value},...P?{secrets:{apiKey:P}}:{}})}finally{h.value=!1}}}const B=[{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"}],V=[{label:"Alloy",value:"alloy"},{label:"Echo",value:"echo"},{label:"Fable",value:"fable"},{label:"Nova",value:"nova"},{label:"Onyx",value:"onyx"},{label:"Shimmer",value:"shimmer"}],I=[{label:"冰糖 (中文·女)",value:"冰糖"},{label:"茉莉 (中文·女)",value:"茉莉"},{label:"苏打 (中文·男)",value:"苏打"},{label:"白桦 (中文·男)",value:"白桦"}],K=[{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"}];return(P,C)=>(b(),G(e(Ya),{show:p.show,width:400,"onUpdate:show":C[14]||(C[14]=A=>i("close"))},{default:u(()=>[a(e(Xa),{title:p.connection?.label,closable:""},{footer:u(()=>[a(e(Ae),{justify:"end"},{default:u(()=>[a(e(O),{onClick:C[13]||(C[13]=A=>i("close"))},{default:u(()=>[N(g(e(s)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:h.value,onClick:R},{default:u(()=>[N(g(e(s)("common.save")),1)]),_:1},8,["loading"])]),_:1})]),default:u(()=>[p.connection?(b(),G(e(Pe),{key:0,"label-placement":"top"},{default:u(()=>[p.connection.isBuiltin?q("",!0):(b(),G(e(W),{key:0,label:e(s)("settings.voice.apiKey")},{default:u(()=>[a(e(J),{value:v.value,"onUpdate:value":C[0]||(C[0]=A=>v.value=A),type:"password","show-password-on":"click",autocomplete:"off",placeholder:p.connection.hasSecret?e(s)("settings.voice.keepStoredKeyPlaceholder"):e(s)("settings.voice.apiKeyPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])),l.value.models?(b(),G(e(W),{key:1,label:e(s)("settings.voice.model")},{default:u(()=>[p.connection.provider==="mimo"?(b(),G(e(Y),{key:0,value:y("model"),options:K,"onUpdate:value":C[1]||(C[1]=A=>c("model",A))},null,8,["value"])):(b(),G(e(J),{key:1,value:y("model"),placeholder:e(s)("models.selectOrInput"),"onUpdate:value":C[2]||(C[2]=A=>c("model",A))},null,8,["value","placeholder"]))]),_:1},8,["label"])):q("",!0),l.value.voices?(b(),G(e(W),{key:2,label:e(s)("settings.voice.voice")},{default:u(()=>[p.connection.provider==="edge"?(b(),G(e(Y),{key:0,value:y("voice"),options:B,filterable:"","onUpdate:value":C[3]||(C[3]=A=>c("voice",A))},null,8,["value"])):p.connection.provider==="openai"?(b(),G(e(Y),{key:1,value:y("voice"),options:V,"onUpdate:value":C[4]||(C[4]=A=>c("voice",A))},null,8,["value"])):p.connection.provider==="mimo"&&y("model")==="mimo-v2.5-tts"?(b(),G(e(Y),{key:2,value:y("voice"),options:I,"onUpdate:value":C[5]||(C[5]=A=>c("voice",A))},null,8,["value"])):(b(),G(e(J),{key:3,value:y("voice"),"onUpdate:value":C[6]||(C[6]=A=>c("voice",A))},null,8,["value"]))]),_:1},8,["label"])):q("",!0),p.connection.provider==="edge"?(b(),z(_e,{key:3},[a(e(W),{label:e(s)("settings.voice.edgeRate")},{default:u(()=>[a(e(Ae),{vertical:"",style:{width:"100%"}},{default:u(()=>[a(e(Ee),{value:S("rate",1),min:.5,max:2,step:.05,"onUpdate:value":C[7]||(C[7]=A=>c("rate",Array.isArray(A)?A[0]:A))},null,8,["value"]),m("span",$s,g(S("rate",1).toFixed(2))+"x ("+g(e(Ni)(S("rate",1)))+")",1)]),_:1})]),_:1},8,["label"]),a(e(W),{label:e(s)("settings.voice.edgePitch")},{default:u(()=>[a(e(Ae),{vertical:"",style:{width:"100%"}},{default:u(()=>[a(e(Ee),{value:S("pitch",0),min:-20,max:20,step:1,"onUpdate:value":C[8]||(C[8]=A=>c("pitch",Array.isArray(A)?A[0]:A))},null,8,["value"]),m("span",Ms,g(S("pitch",0)>0?"+":"")+g(S("pitch",0))+" Hz ("+g(e(Oi)(S("pitch",0)))+")",1)]),_:1})]),_:1},8,["label"])],64)):q("",!0),p.connection.provider==="mimo"?(b(),z(_e,{key:4},[l.value.stylePrompt?(b(),G(e(W),{key:0,label:e(s)("settings.voice.mimoStylePrompt")},{default:u(()=>[a(e(J),{value:y("stylePrompt"),type:"textarea",rows:2,"onUpdate:value":C[9]||(C[9]=A=>c("stylePrompt",A))},null,8,["value"])]),_:1},8,["label"])):q("",!0),y("model")==="mimo-v2.5-tts-voicedesign"?(b(),G(e(W),{key:1,label:e(s)("settings.voice.mimoVoiceDesignPrompt")},{default:u(()=>[a(e(J),{value:y("voiceDesignDesc"),type:"textarea",rows:3,"onUpdate:value":C[10]||(C[10]=A=>c("voiceDesignDesc",A))},null,8,["value"])]),_:1},8,["label"])):q("",!0)],64)):q("",!0),p.connection.kind==="stt"&&p.connection.provider!=="browser"?(b(),z(_e,{key:5},[a(e(W),{label:e(s)("settings.voice.sttLanguage")},{default:u(()=>[a(e(J),{value:y("language"),"onUpdate:value":C[11]||(C[11]=A=>c("language",A))},null,8,["value"])]),_:1},8,["label"]),a(e(W),{label:e(s)("settings.voice.sttPrompt")},{default:u(()=>[a(e(J),{value:y("prompt"),type:"textarea",rows:2,"onUpdate:value":C[12]||(C[12]=A=>c("prompt",A))},null,8,["value"])]),_:1},8,["label"])],64)):q("",!0)]),_:1})):q("",!0)]),_:1},8,["title"])]),_:1},8,["show"]))}})})),Ra,Pl=M((()=>{xs(),xs(),Ra=Ka})),Fs,Ds,zs,Is,Ks,Rs,Vs,Ls,Es,Ns,Os,Hs,Bs,qs,js,Gs,Ws,Js,Ys,Xs,Qs,Zs,Va,ea=M((()=>{Q(),se(),ee(),Ei(),Ii(),Pi(),yl(),wl(),Al(),Pl(),Fs={class:"voice-settings"},Ds={class:"settings-section voice-provider-section","aria-labelledby":"tts-providers-title"},zs={class:"section-header"},Is={class:"section-copy"},Ks={id:"tts-providers-title",class:"section-title"},Rs={class:"section-desc"},Vs={class:"section-controls"},Ls={class:"active-select"},Es={class:"active-label"},Ns={class:"active-summary"},Os={class:"test-copy-row"},Hs={class:"provider-list"},Bs={class:"settings-section voice-provider-section","aria-labelledby":"stt-providers-title"},qs={class:"section-header"},js={class:"section-copy"},Gs={id:"stt-providers-title",class:"section-title"},Ws={class:"section-desc"},Js={class:"section-controls"},Ys={class:"active-select"},Xs={class:"active-label"},Qs={class:"active-summary"},Zs={class:"provider-list"},Va=Z({__name:"VoiceSettings",setup(p){const{t}=te(),n=oe(),i=Ri(),s=fl(),h=F(t("settings.voice.testTextDefault")),k=F(!1),v=F("tts"),f=F(!1),l=F(null),c=Ti({maxDurationMs:3e4}),y=F({}),S=T(()=>s.activeTtsConnection.value?.label||t("settings.voice.noneSelected")),R=T(()=>s.activeSttConnection.value?.label||t("settings.voice.noneSelected"));ke(async()=>{await s.refresh()});function B(o){v.value=o,k.value=!0}function V(o,r,x){y.value={...y.value,[o]:{status:r,message:x}}}function I(o){const r={...y.value};for(const[x,de]of Object.entries(r))x!==o&&de.status==="recording"&&(r[x]={status:"idle"});y.value=r}async function K(o){try{await s.saveConnection(v.value,o.preset.provider,{settings:o.settings,secrets:o.secrets}),k.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(r){n.error(r instanceof Error?r.message:t("settings.voice.ttsSaveFailed"))}}function P(o){l.value=o,f.value=!0}async function C(o,r){try{await s.saveConnection(o.kind,o.provider,r),f.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(x){n.error(x instanceof Error?x.message:t("settings.voice.ttsSaveFailed"))}}async function A(o){try{await s.deleteSecret(o.kind,o.provider),V(o.id,"idle"),n.success(t("settings.voice.ttsCleared"))}catch(r){n.error(r instanceof Error?r.message:t("settings.voice.ttsClearFailed"))}}async function _(o){await s.setActiveConnection(o.kind,o.id)}async function d(o){await s.setActiveConnection("tts",o)}async function w(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 D(o){const r=U(o),x=o.provider==="edge"||o.provider==="openai"||o.provider==="custom"?o.provider:void 0;return{baseUrl:String(r.baseUrl||""),model:typeof r.model=="string"?r.model:void 0,voice:typeof r.voice=="string"?r.voice:void 0,rate:typeof r.rate=="string"?r.rate:void 0,pitch:typeof r.pitch=="string"?r.pitch:void 0,provider:x}}function re(o){const r=U(o);return{baseUrl:String(r.baseUrl||"https://api.xiaomimimo.com/v1"),model:String(r.model||"mimo-v2.5-tts"),voice:typeof r.voice=="string"?r.voice:void 0,authMode:r.authMode==="api-key"||r.authMode==="bearer"||r.authMode==="both"?r.authMode:void 0,voiceMode:r.voiceMode==="preset"||r.voiceMode==="voiceDesign"||r.voiceMode==="voiceClone"?r.voiceMode:void 0,voiceDesignDesc:typeof r.voiceDesignDesc=="string"?r.voiceDesignDesc:void 0,voiceCloneDataUri:typeof r.voiceCloneDataUri=="string"?r.voiceCloneDataUri:void 0,voiceCloneFormat:r.voiceCloneFormat==="mp3"||r.voiceCloneFormat==="wav"?r.voiceCloneFormat:void 0,stylePrompt:typeof r.stylePrompt=="string"?r.stylePrompt:void 0}}async function ue(o){const r=h.value.trim();if(!r){V(o.id,"error",t("settings.voice.testTextRequired"));return}if(!o.isBuiltin&&!o.hasSecret){V(o.id,"error",t("settings.voice.keyMissingForTest"));return}V(o.id,"loading",t("settings.voice.testing"));try{o.provider==="mimo"?await i.mimoPlay(o.id,r,re(o)):(o.provider==="edge"||o.provider==="openai"||o.provider==="custom")&&await i.openaiPlay(o.id,r,D(o)),V(o.id,"success",t("settings.voice.testSuccess"))}catch(x){V(o.id,"error",t("settings.voice.testFailed",{error:x instanceof Error?x.message:String(x)}))}}async function Se(o){if(o.provider==="browser"){V(o.id,"success",t("settings.voice.browserSttTestHint"));return}if(!o.hasSecret){V(o.id,"error",t("settings.voice.keyMissingForTest"));return}if(y.value[o.id]?.status==="recording"){V(o.id,"loading",t("settings.voice.transcribing"));try{const r=await c.stop();if(!r.size){V(o.id,"error",t("settings.voice.sttEmptyAudio"));return}const x=await Mi({audio:r,provider:o.provider});V(o.id,"success",x.text||t("settings.voice.sttTestSuccess"))}catch(r){V(o.id,"error",t("settings.voice.sttTestFailed",{error:r instanceof Error?r.message:String(r)}))}return}try{I(o.id),await c.start(),V(o.id,"recording",t("settings.voice.sttRecordingHint"))}catch(r){console.error("[VoiceSettings] Failed to start STT card test recording:",r),V(o.id,"error",t("settings.voice.sttTestFailed",{error:r instanceof Error?r.message:String(r)}))}}async function $(o){if(o.kind==="tts"){await ue(o);return}await Se(o)}return(o,r)=>(b(),z("div",Fs,[m("section",Ds,[m("header",zs,[m("div",Is,[m("h4",Ks,g(e(t)("settings.voice.ttsProvidersTitle")),1),m("p",Rs,g(e(t)("settings.voice.ttsProvidersDescription")),1)]),m("div",Vs,[m("div",Ls,[m("span",Es,g(e(t)("settings.voice.activeTtsApi")),1),a(e(Y),{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"]),m("span",Ns,g(S.value),1)]),a(e(O),{size:"small",secondary:"",onClick:r[0]||(r[0]=x=>B("tts"))},{default:u(()=>[N(g(e(t)("settings.voice.addTtsApi")),1)]),_:1})])]),m("div",Os,[a(e(J),{value:h.value,"onUpdate:value":r[1]||(r[1]=x=>h.value=x),size:"small",placeholder:e(t)("settings.voice.testTextPlaceholder"),"data-testid":"tts-test-text"},null,8,["value","placeholder"])]),m("div",Hs,[(b(!0),z(_e,null,Te(e(s).ttsConnections.value,x=>(b(),G(Ie,{key:x.id,connection:x,"test-state":y.value[x.id],onSetActive:_,onTest:$,onEdit:P,onConnect:P,onRemove:A},null,8,["connection","test-state"]))),128))])]),m("section",Bs,[m("header",qs,[m("div",js,[m("h4",Gs,g(e(t)("settings.voice.sttProvidersTitle")),1),m("p",Ws,g(e(t)("settings.voice.sttProvidersDescription")),1)]),m("div",Js,[m("div",Ys,[m("span",Xs,g(e(t)("settings.voice.activeSttApi")),1),a(e(Y),{value:e(s).activeSttId.value,options:e(s).sttConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeSttApi"),"onUpdate:value":w},null,8,["value","options","aria-label"]),m("span",Qs,g(R.value),1)]),a(e(O),{size:"small",secondary:"",onClick:r[2]||(r[2]=x=>B("stt"))},{default:u(()=>[N(g(e(t)("settings.voice.addSttApi")),1)]),_:1})])]),m("div",Zs,[(b(!0),z(_e,null,Te(e(s).sttConnections.value,x=>(b(),G(Ie,{key:x.id,connection:x,"test-state":y.value[x.id],onSetActive:_,onTest:$,onEdit:P,onConnect:P,onRemove:A},null,8,["connection","test-state"]))),128))])]),a(Ia,{show:k.value,kind:v.value,onClose:r[3]||(r[3]=x=>k.value=!1),onSaved:K},null,8,["show","kind"]),a(Ra,{show:f.value,connection:l.value,onClose:r[4]||(r[4]=x=>f.value=!1),onSave:C},null,8,["show","connection"])]))}})})),Tl=M((()=>{})),La,$l=M((()=>{ea(),ea(),Tl(),ae(),La=ie(Va,[["__scopeId","data-v-1c687169"]])})),ta,sa,aa,ia,Ea,la=M((()=>{Q(),ai(),se(),ee(),he(),ji(),Wi(),Yi(),Qi(),el(),sl(),il(),nl(),rl(),dl(),$l(),Ke(),ua(),ta={class:"settings-view"},sa={class:"page-header"},aa={class:"header-title"},ia={class:"settings-content"},Ea=Z({__name:"SettingsView",setup(p){const t=be(),n=ra(),{t:i}=te(),s=ni(),h=li(),k=ii(),v=F("account"),f=T(()=>new Set(["account",...s?["users"]:[],"display","agent","memory","compression","session","privacy","models","voice"]));function l(S){const R=typeof S=="string"?S:"";return f.value.has(R)?R:"account"}function c(S){v.value=l(S),k.replace({query:{...h.query,tab:v.value==="account"?void 0:v.value}})}$e(()=>h.query.tab,S=>{v.value=l(S)},{immediate:!0});async function y(){(!n.activeProfileName||n.profiles.length===0)&&await n.fetchProfiles(),await t.fetchSettings()}return ke(()=>{y()}),(S,R)=>(b(),z("div",ta,[m("header",sa,[m("h2",aa,g(e(i)("settings.title")),1)]),m("div",ia,[a(e(na),{show:e(t).loading||e(t).saving,size:"large",description:e(i)("common.loading")},{default:u(()=>[a(e(ti),{value:v.value,"onUpdate:value":[R[0]||(R[0]=B=>v.value=B),c],type:"line",animated:""},{default:u(()=>[a(e(ge),{name:"account",tab:e(i)("settings.tabs.account")},{default:u(()=>[a(Ta)]),_:1},8,["tab"]),e(s)?(b(),G(e(ge),{key:0,name:"users",tab:e(i)("settings.tabs.users")},{default:u(()=>[a(Ma)]),_:1},8,["tab"])):q("",!0),a(e(ge),{name:"display",tab:e(i)("settings.tabs.display")},{default:u(()=>[a(va)]),_:1},8,["tab"]),a(e(ge),{name:"agent",tab:e(i)("settings.tabs.agent")},{default:u(()=>[a(ma),a(_a)]),_:1},8,["tab"]),a(e(ge),{name:"memory",tab:e(i)("settings.tabs.memory")},{default:u(()=>[a(ya)]),_:1},8,["tab"]),a(e(ge),{name:"compression",tab:e(i)("settings.tabs.compression")},{default:u(()=>[a(ha)]),_:1},8,["tab"]),a(e(ge),{name:"session",tab:e(i)("settings.tabs.session")},{default:u(()=>[a(wa)]),_:1},8,["tab"]),a(e(ge),{name:"privacy",tab:e(i)("settings.tabs.privacy")},{default:u(()=>[a(ka)]),_:1},8,["tab"]),a(e(ge),{name:"models",tab:e(i)("settings.tabs.models")},{default:u(()=>[a(Aa)]),_:1},8,["tab"]),a(e(ge),{name:"voice",tab:e(i)("settings.tabs.voice")},{default:u(()=>[a(La)]),_:1},8,["tab"])]),_:1},8,["value"])]),_:1},8,["show","description"])])]))}})})),Ml=M((()=>{})),xl,Fl=M((()=>{la(),la(),Ml(),ae(),xl=ie(Ea,[["__scopeId","data-v-3a2d49d6"]])}));Fl();export{xl as default};
|
|
1
|
+
import{a as Wa,n as M}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as _e,A as Pe,Cn as ke,Dn as Te,E as me,Ht as Ja,I as Ya,K as Fe,M as Ae,Mn as $e,O as W,Ot as O,P as Xa,Pn as u,Pt as J,Qn as e,Rt as xe,Tn as b,Un as Qa,V as oe,Wn as F,Wt as Q,Zt as Le,an as q,dn as Z,er as ze,et as Za,f as ge,g as na,in as G,ln as N,m as ne,mn as pe,mt as Y,nn as T,nt as ei,on as z,rn as m,rr as g,t as se,u as ti,un as a,v as Ee,w as oa,xn as si}from"./ui-vendor-dYn1tJGA.js";import{c as ee,f as ai,l as te,m as ii,p as li}from"./vue-vendor-DZ4A_GHn.js";import{d as ni,f as De,n as ae,t as ie,u as Ke}from"./_plugin-vue_export-helper-CwNymSRn.js";import{N as oi}from"./vendor-B1Lfatlz.js";import{S as Ne,u as ri}from"./system-DaAaRr9k.js";import{$ as ui,C as be,J as di,S as he,X as ra,Y as ua,c as ci,et as vi,f as pi,g as Oe,h as He,i as mi,l as gi,m as _i,n as fi,o as yi,p as bi,q as hi,r as Si,s as wi,t as Ui,u as da}from"./index-DW8M4rjb.js";import{n as Ue,t as j}from"./SettingRow-DWprXoV4.js";import{n as ki,t as Ci}from"./session-browser-prefs-DjzuPSf7.js";import{a as Ai,c as Pi,d as Ti,i as $i,l as Mi,n as xi,o as Be,r as Fi,s as Di,t as zi,u as Ii}from"./useSttSettings-DnVfL8DF.js";import{a as Ki,c as Ri,i as Vi,n as Li,o as Ei,r as Ni,t as Oi}from"./ttsHelpers-CzQCvABU.js";import{n as Hi,t as Bi}from"./models-BDUkz58x.js";var qe,ca,je=M((()=>{Q(),se(),ee(),he(),ui(),Ue(),qe={class:"settings-section"},ca=Z({__name:"DisplaySettings",setup(p){const t=be(),n=oe(),{t:i}=te(),{brightness:s,setBrightness:h}=vi(),k=[{label:i("settings.display.themeLight"),value:"light"},{label:i("settings.display.themeDark"),value:"dark"},{label:i("settings.display.themeSystem"),value:"system"}];async function v(l){try{await t.saveSection("display",l),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}function f(l){const c=l;h(c),v({skin:c})}return(l,c)=>(b(),z("section",qe,[a(j,{label:e(i)("settings.display.theme"),hint:e(i)("settings.display.themeHint")},{default:u(()=>[a(e(Y),{value:e(s),options:k,size:"small","consistent-menu-width":!1,class:"input-sm","onUpdate:value":f},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.streaming"),hint:e(i)("settings.display.streamingHint")},{default:u(()=>[a(e(ne),{value:e(t).display.streaming,"onUpdate:value":c[0]||(c[0]=y=>v({streaming:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.compact"),hint:e(i)("settings.display.compactHint")},{default:u(()=>[a(e(ne),{value:e(t).display.compact,"onUpdate:value":c[1]||(c[1]=y=>v({compact:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.showReasoning"),hint:e(i)("settings.display.showReasoningHint")},{default:u(()=>[a(e(ne),{value:e(t).display.show_reasoning,"onUpdate:value":c[2]||(c[2]=y=>v({show_reasoning:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.showCost"),hint:e(i)("settings.display.showCostHint")},{default:u(()=>[a(e(ne),{value:e(t).display.show_cost,"onUpdate:value":c[3]||(c[3]=y=>v({show_cost:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.inlineDiffs"),hint:e(i)("settings.display.inlineDiffsHint")},{default:u(()=>[a(e(ne),{value:e(t).display.inline_diffs,"onUpdate:value":c[4]||(c[4]=y=>v({inline_diffs:y}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.display.bellOnComplete"),hint:e(i)("settings.display.bellOnCompleteHint")},{default:u(()=>[a(e(ne),{value:e(t).display.bell_on_complete,"onUpdate:value":c[5]||(c[5]=y=>v({bell_on_complete:y}))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),qi=M((()=>{})),va,ji=M((()=>{je(),je(),qi(),ae(),va=ie(ca,[["__scopeId","data-v-6ccfda93"]])})),Ge,pa,We=M((()=>{Q(),se(),ee(),he(),Ue(),Ge={class:"settings-section"},pa=Z({__name:"AgentSettings",setup(p){const t=be(),n=oe(),{t:i}=te(),s={};function h(v){t.updateLocal("agent",v),t.saveSection("agent",v).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function k(v,f){t.updateLocal("agent",{[v]:f}),s[v]&&clearTimeout(s[v]),s[v]=setTimeout(async()=>{try{await t.saveSection("agent",{[v]:f}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(v,f)=>(b(),z("section",Ge,[a(j,{label:e(i)("settings.agent.maxTurns"),hint:e(i)("settings.agent.maxTurnsHint")},{default:u(()=>[a(e(me),{value:e(t).agent.max_turns,min:1,max:200,step:5,size:"small",class:"input-sm","onUpdate:value":f[0]||(f[0]=l=>l!=null&&k("max_turns",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.agent.gatewayTimeout"),hint:e(i)("settings.agent.gatewayTimeoutHint")},{default:u(()=>[a(e(me),{value:e(t).agent.gateway_timeout,min:60,max:7200,step:60,size:"small",class:"input-sm","onUpdate:value":f[1]||(f[1]=l=>l!=null&&k("gateway_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.agent.restartDrainTimeout"),hint:e(i)("settings.agent.restartDrainTimeoutHint")},{default:u(()=>[a(e(me),{value:e(t).agent.restart_drain_timeout,min:10,max:300,step:10,size:"small",class:"input-sm","onUpdate:value":f[2]||(f[2]=l=>l!=null&&k("restart_drain_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.agent.toolEnforcement"),hint:e(i)("settings.agent.toolEnforcementHint")},{default:u(()=>[a(e(Y),{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":f[3]||(f[3]=l=>h({tool_use_enforcement:l}))},null,8,["value","options"])]),_:1},8,["label","hint"])]))}})})),Gi=M((()=>{})),ma,Wi=M((()=>{We(),We(),Gi(),ae(),ma=ie(pa,[["__scopeId","data-v-d06d83a7"]])})),Je,Ye,Xe,ga,Qe=M((()=>{Q(),se(),ee(),he(),ua(),Ue(),Je={class:"settings-section gateway-auto-start-settings"},Ye={class:"section-title"},Xe={class:"section-hint"},ga=Z({__name:"GatewayAutoStartSettings",setup(p){const t=be(),n=ra(),i=oe(),{t:s}=te(),h=T(()=>t.gatewayAutoStart.enabled!==!1),k=T(()=>Array.isArray(t.gatewayAutoStart.include)?"include":"all"),v=T(()=>t.gatewayAutoStart.include||[]),f=T(()=>t.gatewayAutoStart.exclude||[]),l=T(()=>n.profiles.map(I=>({label:I.name,value:I.name}))),c=T(()=>[{label:s("settings.gatewayAutoStart.modeAll"),value:"all"},{label:s("settings.gatewayAutoStart.modeInclude"),value:"include"}]);function y(I){const K=new Set,P=[];for(const C of I){const A=String(C||"").trim();!A||K.has(A)||(K.add(A),P.push(A))}return P}async function S(I){try{t.updateLocal("gatewayAutoStart",I),await t.saveSection("gatewayAutoStart",I,{restart:!1}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}function R(I){S(I==="include"?{include:t.gatewayAutoStart.include||[],exclude:null}:{include:null})}function B(I){S({include:y(I),exclude:null})}function V(I){const K=y(I);S({exclude:K.length>0?K:null})}return(I,K)=>(b(),z("section",Je,[m("h3",Ye,g(e(s)("settings.gatewayAutoStart.title")),1),m("p",Xe,g(e(s)("settings.gatewayAutoStart.description")),1),a(j,{label:e(s)("settings.gatewayAutoStart.enabled"),hint:e(s)("settings.gatewayAutoStart.enabledHint")},{default:u(()=>[a(e(ne),{value:h.value,"onUpdate:value":K[0]||(K[0]=P=>S({enabled:P}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.gatewayAutoStart.mode"),hint:e(s)("settings.gatewayAutoStart.modeHint")},{default:u(()=>[a(e(Y),{value:k.value,options:c.value,size:"small",class:"input-md","onUpdate:value":R},null,8,["value","options"])]),_:1},8,["label","hint"]),k.value==="include"?(b(),G(j,{key:0,label:e(s)("settings.gatewayAutoStart.include"),hint:e(s)("settings.gatewayAutoStart.includeHint")},{default:u(()=>[a(e(Y),{multiple:"",filterable:"",value:v.value,options:l.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":B},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):q("",!0),k.value==="all"?(b(),G(j,{key:1,label:e(s)("settings.gatewayAutoStart.exclude"),hint:e(s)("settings.gatewayAutoStart.excludeHint")},{default:u(()=>[a(e(Y),{multiple:"",filterable:"",value:f.value,options:l.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":V},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):q("",!0)]))}})})),Ji=M((()=>{})),_a,Yi=M((()=>{Qe(),Qe(),Ji(),ae(),_a=ie(ga,[["__scopeId","data-v-acd78d5c"]])})),Ze,fa,et=M((()=>{Q(),se(),ee(),he(),Ue(),Ze={class:"settings-section"},fa=Z({__name:"MemorySettings",setup(p){const t=be(),n=oe(),{t:i}=te(),s={};function h(v){t.updateLocal("memory",v),t.saveSection("memory",v).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function k(v,f){t.updateLocal("memory",{[v]:f}),s[v]&&clearTimeout(s[v]),s[v]=setTimeout(async()=>{try{await t.saveSection("memory",{[v]:f}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(v,f)=>(b(),z("section",Ze,[a(j,{label:e(i)("settings.memory.enabled"),hint:e(i)("settings.memory.enabledHint")},{default:u(()=>[a(e(ne),{value:e(t).memory.memory_enabled,"onUpdate:value":f[0]||(f[0]=l=>h({memory_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.memory.userProfile"),hint:e(i)("settings.memory.userProfileHint")},{default:u(()=>[a(e(ne),{value:e(t).memory.user_profile_enabled,"onUpdate:value":f[1]||(f[1]=l=>h({user_profile_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.memory.charLimit"),hint:e(i)("settings.memory.charLimitHint")},{default:u(()=>[a(e(me),{value:e(t).memory.memory_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":f[2]||(f[2]=l=>l!=null&&k("memory_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.memory.userCharLimit"),hint:e(i)("settings.memory.userCharLimitHint")},{default:u(()=>[a(e(me),{value:e(t).memory.user_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":f[3]||(f[3]=l=>l!=null&&k("user_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Xi=M((()=>{})),ya,Qi=M((()=>{et(),et(),Xi(),ae(),ya=ie(fa,[["__scopeId","data-v-b2529605"]])})),tt,ba,st=M((()=>{Q(),se(),ee(),he(),Ue(),tt={class:"settings-section"},ba=Z({__name:"CompressionSettings",setup(p){const t=be(),n=oe(),{t:i}=te(),s={enabled:!0,threshold:.5,target_ratio:.2,protect_last_n:20,protect_first_n:3},h={};function k(f){t.updateLocal("compression",f),t.saveSection("compression",f).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function v(f,l){t.updateLocal("compression",{[f]:l}),h[f]&&clearTimeout(h[f]),h[f]=setTimeout(async()=>{try{await t.saveSection("compression",{[f]:l}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(f,l)=>(b(),z("section",tt,[a(j,{label:e(i)("settings.compression.enabled"),hint:e(i)("settings.compression.enabledHint")},{default:u(()=>[a(e(ne),{value:e(t).compression.enabled??s.enabled,size:"small","onUpdate:value":l[0]||(l[0]=c=>k({enabled:c}))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.threshold"),hint:e(i)("settings.compression.thresholdHint")},{default:u(()=>[a(e(me),{value:e(t).compression.threshold??s.threshold,min:.1,max:.95,step:.05,size:"small",class:"input-sm","onUpdate:value":l[1]||(l[1]=c=>c!=null&&v("threshold",c))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.targetRatio"),hint:e(i)("settings.compression.targetRatioHint")},{default:u(()=>[a(e(me),{value:e(t).compression.target_ratio??s.target_ratio,min:.05,max:.8,step:.05,size:"small",class:"input-sm","onUpdate:value":l[2]||(l[2]=c=>c!=null&&v("target_ratio",c))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.protectLastN"),hint:e(i)("settings.compression.protectLastNHint")},{default:u(()=>[a(e(me),{value:e(t).compression.protect_last_n??s.protect_last_n,min:0,max:200,step:1,size:"small",class:"input-sm","onUpdate:value":l[3]||(l[3]=c=>c!=null&&v("protect_last_n",c))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(i)("settings.compression.protectFirstN"),hint:e(i)("settings.compression.protectFirstNHint")},{default:u(()=>[a(e(me),{value:e(t).compression.protect_first_n??s.protect_first_n,min:0,max:50,step:1,size:"small",class:"input-sm","onUpdate:value":l[4]||(l[4]=c=>c!=null&&v("protect_first_n",c))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Zi=M((()=>{})),ha,el=M((()=>{st(),st(),Zi(),ae(),ha=ie(ba,[["__scopeId","data-v-b584a6a0"]])})),at,Sa,it=M((()=>{Q(),se(),ee(),he(),Ci(),Ue(),at={class:"settings-section"},Sa=Z({__name:"SessionSettings",setup(p){const t=be(),n=ki(),i=oe(),{t:s}=te(),h={};function k(l){t.updateLocal("session_reset",l),t.saveSection("session_reset",l).then(()=>{i.success(s("settings.saved"))}).catch(()=>{i.error(s("settings.saveFailed"))})}function v(l,c){t.updateLocal("session_reset",{[l]:c}),h[l]&&clearTimeout(h[l]),h[l]=setTimeout(async()=>{try{await t.saveSection("session_reset",{[l]:c}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}},300)}async function f(l){try{await t.saveSection("approvals",{mode:l?"manual":"off"}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}return(l,c)=>(b(),z("section",at,[a(j,{label:e(s)("settings.session.requireAuth"),hint:e(s)("settings.session.requireAuthHint")},{default:u(()=>[a(e(ne),{value:e(t).approvals.mode==="manual","onUpdate:value":f},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.mode"),hint:e(s)("settings.session.modeHint")},{default:u(()=>[a(e(Y),{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[0]||(c[0]=y=>k({mode:y}))},null,8,["value","options"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.idleMinutes"),hint:e(s)("settings.session.idleMinutesHint")},{default:u(()=>[a(e(me),{value:e(t).sessionReset.idle_minutes,min:10,max:10080,step:30,size:"small",class:"input-sm","onUpdate:value":c[1]||(c[1]=y=>y!=null&&v("idle_minutes",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.atHour"),hint:e(s)("settings.session.atHourHint")},{default:u(()=>[a(e(me),{value:e(t).sessionReset.at_hour,min:0,max:23,step:1,size:"small",class:"input-sm","onUpdate:value":c[2]||(c[2]=y=>y!=null&&v("at_hour",y))},null,8,["value"])]),_:1},8,["label","hint"]),a(j,{label:e(s)("settings.session.liveMonitorHumanOnly"),hint:e(s)("settings.session.liveMonitorHumanOnlyHint")},{default:u(()=>[a(e(ne),{value:e(n).humanOnly,"onUpdate:value":c[3]||(c[3]=y=>e(n).setHumanOnly(y))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),tl=M((()=>{})),wa,sl=M((()=>{it(),it(),tl(),ae(),wa=ie(Sa,[["__scopeId","data-v-a317c50b"]])})),lt,Ua,nt=M((()=>{Q(),se(),ee(),he(),Ue(),lt={class:"settings-section"},Ua=Z({__name:"PrivacySettings",setup(p){const t=be(),n=oe(),{t:i}=te();async function s(h){try{await t.saveSection("privacy",h),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}return(h,k)=>(b(),z("section",lt,[a(j,{label:e(i)("settings.privacy.redactPii"),hint:e(i)("settings.privacy.redactPiiHint")},{default:u(()=>[a(e(ne),{value:e(t).privacy.redact_pii,"onUpdate:value":k[0]||(k[0]=v=>s({redact_pii:v}))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),al=M((()=>{})),ka,il=M((()=>{nt(),nt(),al(),ae(),ka=ie(Ua,[["__scopeId","data-v-43145f27"]])})),ot,rt,ut,dt,ct,vt,pt,mt,Ca,gt=M((()=>{Q(),se(),Bi(),ri(),ee(),ot={class:"settings-section"},rt={key:0,class:"empty-hint"},ut={class:"provider-header"},dt={class:"provider-name"},ct={key:0,class:"provider-fields"},vt={class:"field-row"},pt={key:1,class:"provider-fields"},mt={class:"field-row"},Ca=Z({__name:"ModelSettings",setup(p){const{t}=te(),n=Hi(),i=oe(),s=F(null),h=F({});ke(()=>{n.providers.length===0&&n.fetchProviders()});const k=c=>!n.providers.find(y=>y.provider===c)?.builtin&&c.startsWith("custom:");function v(c){if(!(c in h.value)){const y=n.providers.find(S=>S.provider===c);h.value[c]=y?.api_key||""}return h.value[c]}async function f(c){const y=v(c);if(!y.trim()){i.warning(t("settings.models.apiKeyPlaceholder"));return}s.value=c;try{await Ne(c,{api_key:y.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(S){i.error(S.message||t("settings.models.saveFailed"))}finally{s.value=null}}async function l(c){const y=v(c);s.value=c;try{await Ne(c,{api_key:y.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(S){i.error(S.message||t("settings.models.saveFailed"))}finally{s.value=null}}return(c,y)=>(b(),z("section",ot,[a(e(na),{show:e(n).loading},{default:u(()=>[e(n).providers.length===0?(b(),z("div",rt,[a(e(Ja),{description:e(t)("settings.models.noProviders")},null,8,["description"])])):q("",!0),(b(!0),z(_e,null,Te(e(n).providers,S=>(b(),z("div",{key:S.provider,class:"provider-section"},[m("div",ut,[m("h4",dt,g(S.label),1),m("span",{class:ze(["type-badge",k(S.provider)?"custom":"builtin"])},g(k(S.provider)?e(t)("models.customType"):e(t)("models.builtIn")),3)]),k(S.provider)?(b(),z("div",pt,[m("div",mt,[a(e(J),{value:v(S.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>h.value[S.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(O),{type:"primary",size:"small",loading:s.value===S.provider,onClick:R=>l(S.provider)},{default:u(()=>[N(g(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])])):(b(),z("div",ct,[m("div",vt,[a(e(J),{value:v(S.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>h.value[S.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(O),{type:"primary",size:"small",loading:s.value===S.provider,onClick:R=>f(S.provider)},{default:u(()=>[N(g(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])]))]))),128))]),_:1},8,["show"])]))}})})),ll=M((()=>{})),Aa,nl=M((()=>{gt(),gt(),ll(),ae(),Aa=ie(Ca,[["__scopeId","data-v-8cd750e1"]])})),_t,ft,yt,bt,ht,St,wt,Ut,kt,Ct,At,Pt,Tt,$t,Mt,xt,Ft,Dt,zt,It,Kt,Rt,Vt,Lt,Et,Pa,Nt=M((()=>{Q(),se(),ee(),da(),di(),_t=Wa(oi()),ft={class:"account-settings"},yt={class:"section-desc"},bt={class:"avatar-section"},ht={class:"section-title"},St={class:"avatar-row"},wt={class:"avatar-display"},Ut={class:"avatar-actions"},kt={class:"avatar-hint"},Ct={class:"action-buttons"},At={class:"configured-section"},Pt={class:"action-row"},Tt={class:"action-label"},$t={class:"action-buttons"},Mt={class:"locked-ips-section"},xt={class:"section-title"},Ft={class:"action-row",style:{"margin-bottom":"12px"}},Dt={class:"action-label"},zt={class:"action-buttons"},It={key:0,class:"locked-list"},Kt={class:"locked-info"},Rt={class:"locked-ip"},Vt={class:"locked-badge"},Lt={class:"locked-ttl"},Et={key:1,class:"empty-hint"},Pa=Z({__name:"AccountSettings",setup(p){const{t}=te(),n=oe(),i=F(null),s=F(!1),h=F(null),k=F(null),v=F(!1);function f($,o){return new Promise((r,x)=>{const de=new FileReader;de.onload=()=>{const ce=new Image;ce.onload=()=>{const ve=document.createElement("canvas");ve.width=ce.width,ve.height=ce.height,ve.getContext("2d").drawImage(ce,0,0);const Me=fe=>{const ye=ve.toDataURL("image/jpeg",fe);ye.length<=o||fe<=.3?r(ye):Me(fe-.1)};Me(.8)},ce.onerror=x,ce.src=de.result},de.onerror=x,de.readAsDataURL($)})}async function l($){const o=$.target,r=o.files?.[0];if(r){if(!["image/png","image/jpeg","image/webp"].includes(r.type)){n.error(t("settings.userAvatar.invalidType")),o.value="";return}if(r.size>1024*1024){n.error(t("settings.userAvatar.tooLarge")),o.value="";return}v.value=!0;try{let x;r.size>500*1024?x=await f(r,500*1024):x=await new Promise((de,ce)=>{const ve=new FileReader;ve.onload=()=>de(ve.result),ve.onerror=ce,ve.readAsDataURL(r)}),await Oe({type:"image",dataUrl:x}),h.value={type:"image",dataUrl:x},n.success(t("settings.userAvatar.saveSuccess"))}catch(x){n.error(x.message||t("settings.userAvatar.saveFailed"))}finally{v.value=!1,o.value=""}}}async function c(){v.value=!0;try{const $=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():Math.random().toString(36).slice(2),o=`${i.value||"default"}-${Date.now()}-${$}`,r=(0,_t.default)(o),x="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(r)));await Oe({type:"image",dataUrl:x,seed:o}),h.value={type:"image",dataUrl:x,seed:o},n.success(t("settings.userAvatar.saveSuccess"))}catch($){n.error($.message||t("settings.userAvatar.saveFailed"))}finally{v.value=!1}}async function y(){v.value=!0;try{await pi(),h.value={type:"default",seed:i.value||"default"},n.success(t("settings.userAvatar.resetSuccess"))}catch($){n.error($.message||t("settings.userAvatar.resetFailed"))}finally{v.value=!1}}const S=F(!1),R=F(""),B=F(""),V=F(""),I=F(!1),K=F(""),P=F("");ke(async()=>{try{i.value=(await yi()).username}catch{}try{h.value=await gi()||{type:"default",seed:i.value||"default"}}catch{}});async function C(){if(B.value!==V.value){n.error(t("login.passwordMismatch"));return}if(B.value.length<6){n.error(t("login.passwordTooShort"));return}s.value=!0;try{await Ui(R.value,B.value),S.value=!1,R.value="",B.value="",V.value="",n.success(t("login.passwordChanged"))}catch($){n.error($.message||t("common.saveFailed"))}finally{s.value=!1}}async function A(){if(P.value.trim().length<2){n.error(t("login.usernameTooShort"));return}s.value=!0;try{await fi(K.value,P.value.trim()),i.value=P.value.trim(),I.value=!1,K.value="",P.value="",n.success(t("login.usernameChanged"))}catch($){n.error($.message||t("common.saveFailed"))}finally{s.value=!1}}function _(){R.value="",B.value="",V.value="",S.value=!0}function d(){K.value="",P.value="",I.value=!0}const w=F([]),U=F(!1);async function D(){U.value=!0;try{w.value=await wi()}catch{}finally{U.value=!1}}async function re($){try{await _i($),n.success(t("settings.lockedIps.unlocked")),await D()}catch(o){n.error(o.message||t("common.saveFailed"))}}async function ue(){try{const $=await bi();n.success(t("settings.lockedIps.allUnlocked",{count:$})),await D()}catch($){n.error($.message||t("common.saveFailed"))}}function Se($){const o=Math.max(0,Math.round(($-Date.now())/6e4));return o>0?`${o} min`:t("common.expired")}return ke(()=>{D()}),($,o)=>(b(),z("div",ft,[m("p",yt,g(e(t)("login.setupDescription")),1),m("div",bt,[m("h3",ht,g(e(t)("settings.userAvatar.title")),1),m("div",St,[m("div",wt,[a(hi,{name:i.value||"default",avatar:h.value?.type==="image"&&h.value.dataUrl?{type:"image",dataUrl:h.value.dataUrl}:null,size:80},null,8,["name","avatar"])]),m("div",Ut,[m("p",kt,g(e(t)("settings.userAvatar.hint")),1),m("div",Ct,[a(e(O),{onClick:o[0]||(o[0]=r=>k.value?.click())},{default:u(()=>[N(g(e(t)("settings.userAvatar.upload")),1)]),_:1}),a(e(O),{onClick:c,loading:v.value},{default:u(()=>[N(g(e(t)("settings.userAvatar.random")),1)]),_:1},8,["loading"]),a(e(O),{onClick:y,loading:v.value},{default:u(()=>[N(g(e(t)("settings.userAvatar.reset")),1)]),_:1},8,["loading"])]),m("input",{ref_key:"avatarFileInput",ref:k,type:"file",accept:".png,.jpg,.jpeg,.webp",style:{display:"none"},onChange:l},null,544)])])]),m("div",At,[m("div",Pt,[m("span",Tt,g(e(t)("login.passwordLoginConfigured",{username:i.value})),1),m("div",$t,[a(e(O),{onClick:_},{default:u(()=>[N(g(e(t)("login.changePassword")),1)]),_:1}),a(e(O),{onClick:d},{default:u(()=>[N(g(e(t)("login.changeUsername")),1)]),_:1})])])]),m("div",Mt,[m("h3",xt,g(e(t)("settings.lockedIps.title")),1),m("div",Ft,[m("span",Dt,g(e(t)("settings.lockedIps.count",{count:w.value.length})),1),m("div",zt,[a(e(O),{size:"small",loading:U.value,onClick:D},{default:u(()=>[N(g(e(t)("common.retry")),1)]),_:1},8,["loading"]),w.value.length>0?(b(),G(e(oa),{key:0,onPositiveClick:ue},{trigger:u(()=>[a(e(O),{size:"small",type:"warning"},{default:u(()=>[N(g(e(t)("settings.lockedIps.unlockAll")),1)]),_:1})]),default:u(()=>[N(" "+g(e(t)("settings.lockedIps.unlockAllConfirm")),1)]),_:1})):q("",!0)])]),w.value.length>0?(b(),z("div",It,[(b(!0),z(_e,null,Te(w.value,r=>(b(),z("div",{key:r.ip+r.type,class:"locked-item"},[m("div",Kt,[m("span",Rt,g(r.ip),1),m("span",Vt,g(r.type),1),m("span",Lt,g(Se(r.lockedUntil)),1)]),a(e(O),{size:"tiny",type:"error",ghost:"",onClick:x=>re(r.ip)},{default:u(()=>[N(g(e(t)("settings.lockedIps.unlock")),1)]),_:1},8,["onClick"])]))),128))])):(b(),z("p",Et,g(e(t)("settings.lockedIps.empty")),1))]),a(e(Fe),{show:S.value,"onUpdate:show":o[5]||(o[5]=r=>S.value=r),preset:"dialog",title:e(t)("login.changePassword")},{action:u(()=>[a(e(O),{onClick:o[4]||(o[4]=r=>S.value=!1)},{default:u(()=>[N(g(e(t)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:s.value,onClick:C},{default:u(()=>[N(g(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Pe),{"label-placement":"top"},{default:u(()=>[a(e(W),{label:e(t)("login.currentPassword")},{default:u(()=>[a(e(J),{value:R.value,"onUpdate:value":o[1]||(o[1]=r=>R.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("login.newPassword")},{default:u(()=>[a(e(J),{value:B.value,"onUpdate:value":o[2]||(o[2]=r=>B.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.newPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("login.confirmPassword")},{default:u(()=>[a(e(J),{value:V.value,"onUpdate:value":o[3]||(o[3]=r=>V.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.confirmPassword"),onKeyup:Le(C,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"]),a(e(Fe),{show:I.value,"onUpdate:show":o[9]||(o[9]=r=>I.value=r),preset:"dialog",title:e(t)("login.changeUsername")},{action:u(()=>[a(e(O),{onClick:o[8]||(o[8]=r=>I.value=!1)},{default:u(()=>[N(g(e(t)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:s.value,onClick:A},{default:u(()=>[N(g(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Pe),{"label-placement":"top"},{default:u(()=>[a(e(W),{label:e(t)("login.currentPassword")},{default:u(()=>[a(e(J),{value:K.value,"onUpdate:value":o[6]||(o[6]=r=>K.value=r),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("login.newUsername")},{default:u(()=>[a(e(J),{value:P.value,"onUpdate:value":o[7]||(o[7]=r=>P.value=r),placeholder:e(t)("login.usernamePlaceholder"),onKeyup:Le(A,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"])]))}})})),ol=M((()=>{})),Ta,rl=M((()=>{Nt(),Nt(),ol(),ae(),Ta=ie(Pa,[["__scopeId","data-v-37ce8d61"]])})),Ot,Ht,Bt,qt,$a,jt=M((()=>{Q(),se(),ee(),da(),Ot={class:"user-management"},Ht={class:"toolbar"},Bt={class:"section-title"},qt={class:"section-desc"},$a=Z({__name:"UserManagementSettings",setup(p){const{t}=te(),n=oe(),i=F(!1),s=F(!1),h=F([]),k=F([]),v=F(!1),f=F(null),l=Qa({username:"",password:"",role:"admin",status:"active",profiles:[]}),c=T(()=>[{label:t("users.roles.admin"),value:"admin"},{label:t("users.roles.superAdmin"),value:"super_admin"}]),y=T(()=>[{label:t("users.status.active"),value:"active"},{label:t("users.status.disabled"),value:"disabled"}]),S=T(()=>k.value.map(d=>({label:d,value:d})));function R(){f.value=null,l.username="",l.password="",l.role="admin",l.status="active",l.profiles=[]}async function B(){i.value=!0;try{const d=await ci();h.value=d.users,k.value=d.profiles}catch(d){n.error(d.message||t("users.loadFailed"))}finally{i.value=!1}}function V(){R(),v.value=!0}function I(d){f.value=d,l.username=d.username,l.password="",l.role=d.role,l.status=d.status,l.profiles=[...d.profiles],v.value=!0}async function K(){if(l.username.trim().length<2){n.error(t("login.usernameTooShort"));return}if(!f.value&&l.password.length<6){n.error(t("login.passwordTooShort"));return}if(l.password&&l.password.length<6){n.error(t("login.passwordTooShort"));return}s.value=!0;try{const d={username:l.username.trim(),password:l.password||void 0,role:l.role,status:l.status,profiles:l.role==="super_admin"?[]:l.profiles,defaultProfile:l.profiles[0]||null},w=f.value?await He(f.value.id,d):await Si({...d,password:l.password});h.value=w.users,k.value=w.profiles,v.value=!1,R(),n.success(t("common.saved"))}catch(d){n.error(d.message||t("common.saveFailed"))}finally{s.value=!1}}async function P(d,w){s.value=!0;try{const U=await He(d.id,{status:w});h.value=U.users,k.value=U.profiles,n.success(t("common.saved"))}catch(U){n.error(U.message||t("common.saveFailed"))}finally{s.value=!1}}async function C(d){s.value=!0;try{const w=await mi(d.id);h.value=w.users,k.value=w.profiles,n.success(t("common.saved"))}catch(w){n.error(w.message||t("common.deleteFailed"))}finally{s.value=!1}}function A(d){return d?new Date(d).toLocaleString():"-"}const _=T(()=>[{title:t("users.username"),key:"username",minWidth:140},{title:t("users.role"),key:"role",width:130,render:d=>pe(xe,{size:"small",type:d.role==="super_admin"?"warning":"default"},{default:()=>d.role==="super_admin"?t("users.roles.superAdmin"):t("users.roles.admin")})},{title:t("users.statusLabel"),key:"status",width:110,render:d=>pe(xe,{size:"small",type:d.status==="active"?"success":"error"},{default:()=>d.status==="active"?t("users.status.active"):t("users.status.disabled")})},{title:t("users.profiles"),key:"profiles",minWidth:200,render:d=>d.role==="super_admin"?pe("span",{class:"muted"},t("users.allProfiles")):pe(Ae,{size:4},{default:()=>d.profiles.length?d.profiles.map(w=>pe(xe,{size:"small",bordered:!1},{default:()=>w})):pe("span",{class:"muted"},t("users.noProfiles"))})},{title:t("users.lastLogin"),key:"last_login_at",minWidth:170,render:d=>A(d.last_login_at)},{title:t("common.edit"),key:"actions",width:280,render:d=>pe(Ae,{size:8},{default:()=>[pe(O,{size:"small",onClick:()=>I(d)},{default:()=>t("common.edit")}),pe(O,{size:"small",type:d.status==="active"?"warning":"primary",ghost:!0,loading:s.value,onClick:()=>P(d,d.status==="active"?"disabled":"active")},{default:()=>d.status==="active"?t("users.disable"):t("users.enable")}),pe(oa,{onPositiveClick:()=>C(d)},{trigger:()=>pe(O,{size:"small",type:"error",ghost:!0,loading:s.value},{default:()=>t("common.delete")}),default:()=>t("users.deleteConfirm")})]})}]);return ke(B),(d,w)=>(b(),z("div",Ot,[m("div",Ht,[m("div",null,[m("h3",Bt,g(e(t)("users.title")),1),m("p",qt,g(e(t)("users.description")),1)]),a(e(O),{type:"primary",onClick:V},{default:u(()=>[N(g(e(t)("users.create")),1)]),_:1})]),a(e(Za),{columns:_.value,data:h.value,loading:i.value,bordered:!1,"single-line":!1,size:"small"},null,8,["columns","data","loading"]),a(e(Fe),{show:v.value,"onUpdate:show":w[6]||(w[6]=U=>v.value=U),preset:"dialog",title:f.value?e(t)("users.edit"):e(t)("users.create")},{action:u(()=>[a(e(O),{onClick:w[5]||(w[5]=U=>v.value=!1)},{default:u(()=>[N(g(e(t)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:s.value,onClick:K},{default:u(()=>[N(g(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:u(()=>[a(e(Pe),{"label-placement":"top"},{default:u(()=>[a(e(W),{label:e(t)("users.username")},{default:u(()=>[a(e(J),{value:l.username,"onUpdate:value":w[0]||(w[0]=U=>l.username=U),placeholder:e(t)("login.usernamePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:f.value?e(t)("users.newPasswordOptional"):e(t)("login.newPassword")},{default:u(()=>[a(e(J),{value:l.password,"onUpdate:value":w[1]||(w[1]=U=>l.password=U),type:"password","show-password-on":"click",placeholder:e(t)("login.passwordPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(W),{label:e(t)("users.role")},{default:u(()=>[a(e(Y),{value:l.role,"onUpdate:value":w[2]||(w[2]=U=>l.role=U),options:c.value},null,8,["value","options"])]),_:1},8,["label"]),a(e(W),{label:e(t)("users.statusLabel")},{default:u(()=>[a(e(Y),{value:l.status,"onUpdate:value":w[3]||(w[3]=U=>l.status=U),options:y.value},null,8,["value","options"])]),_:1},8,["label"]),l.role!=="super_admin"?(b(),G(e(W),{key:0,label:e(t)("users.profiles")},{default:u(()=>[a(e(Y),{value:l.profiles,"onUpdate:value":w[4]||(w[4]=U=>l.profiles=U),multiple:"",filterable:"",options:S.value,placeholder:e(t)("users.profilesPlaceholder")},null,8,["value","options","placeholder"])]),_:1},8,["label"])):q("",!0)]),_:1})]),_:1},8,["show","title"])]))}})})),ul=M((()=>{})),Ma,dl=M((()=>{jt(),jt(),ul(),ae(),Ma=ie($a,[["__scopeId","data-v-bcd3f33a"]])}));function cl(p){if(p&&typeof p=="object"){const t=p;if(Array.isArray(t.providers))return{providers:t.providers};if(Array.isArray(t.settings))return{providers:t.settings}}return{providers:[]}}async function vl(){return cl(await De("/api/hermes/tts/settings"))}async function pl(p,t){const n=await De(`/api/hermes/tts/settings/${p}`,{method:"PUT",body:JSON.stringify(t)});return typeof n=="object"&&n!==null&&"setting"in n?n.setting:n}async function ml(p,t){const n=await De(`/api/hermes/tts/settings/${p}/secret/${t}`,{method:"DELETE"});return n&&typeof n=="object"&&"setting"in n?n.setting??null:n}var gl=M((()=>{Ke()})),we,Re=M((()=>{we=[{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-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-custom",kind:"stt",provider:"custom",label:"Custom STT",labelKey:"settings.voice.presetCustomSttLabel",isSecretRequired:!0,capabilities:{models:!0}}]}));function Gt(p){return p==="openai"||p==="custom"}function Wt(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"}function Jt(p){return p==="browser"||p==="openai"||p==="custom"}function _l(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"}function X(p,t){const n=p[t];return typeof n=="string"?n:""}function fl(){const{t:p}=te(),t=F([]),n=F(!1),i=Ki(),s=xi(),h=T(()=>`tts-${i.provider.value==="webspeech"?"edge":i.provider.value}`),k=T(()=>`stt-${s.provider.value}`),v=T(()=>t.value.filter(_=>_.kind==="tts")),f=T(()=>t.value.filter(_=>_.kind==="stt")),l=T(()=>v.value.find(_=>_.id===h.value)||v.value[0]||null),c=T(()=>f.value.find(_=>_.id===k.value)||f.value[0]||null),y=T(()=>v.value.map(_=>({label:_.label,value:_.id}))),S=T(()=>f.value.map(_=>({label:_.label,value:_.id})));function R(_){if(!_l(_.provider))return;i.setProvider(_.provider);const d=_.settings;if(_.provider==="edge"){i.setEdgeVoice(X(d,"voice")||_.voice||i.edgeVoice.value);const w=Number(d.rate),U=Number(d.pitch);Number.isFinite(w)&&i.setEdgeRate(w),Number.isFinite(U)&&i.setEdgePitchHz(U);return}if(_.provider==="openai"){i.setOpenaiBaseUrl(_.baseUrl||X(d,"baseUrl")),i.setOpenaiModel(_.model||X(d,"model")||i.openaiModel.value),i.setOpenaiVoice(_.voice||X(d,"voice")||i.openaiVoice.value);return}if(_.provider==="custom"){i.setCustomUrl(_.baseUrl||X(d,"baseUrl"));return}_.provider==="mimo"&&(i.setMimoBaseUrl(_.baseUrl||X(d,"baseUrl")||i.mimoBaseUrl.value),i.setMimoModel(_.model||X(d,"model")||i.mimoModel.value),i.setMimoVoice(_.voice||X(d,"voice")||i.mimoVoice.value),i.setMimoStylePrompt(X(d,"stylePrompt")),i.setMimoVoiceDesignDesc(X(d,"voiceDesignDesc")))}function B(_){if(!Jt(_.provider))return;s.setProvider(_.provider);const d=_.settings;if(_.provider==="openai"){s.setOpenaiModel(_.model||X(d,"model")||s.openaiModel.value),s.setOpenaiLanguage(X(d,"language")),s.setOpenaiPrompt(X(d,"prompt"));return}_.provider==="custom"&&(s.setCustomBaseUrl(_.baseUrl||X(d,"baseUrl")),s.setCustomModel(_.model||X(d,"model")||s.customModel.value),s.setCustomLanguage(X(d,"language")),s.setCustomPrompt(X(d,"prompt")))}function V(_,d,w){const U=we.find(D=>D.kind==="tts"&&D.provider===_&&(D.baseUrl===d.baseUrl||!D.baseUrl));return{id:`tts-${_}`,kind:"tts",provider:_,label:U?.labelKey?p(U.labelKey):U?.label||`${_} TTS`,baseUrl:d.baseUrl,model:d.model,voice:d.voice,settings:d,hasSecret:w,active:h.value===`tts-${_}`}}function I(_,d,w){const U=we.find(D=>D.kind==="stt"&&D.provider===_&&(D.baseUrl===d.baseUrl||!D.baseUrl));return{id:`stt-${_}`,kind:"stt",provider:_,label:U?.labelKey?p(U.labelKey):U?.label||`${_} STT`,baseUrl:d.baseUrl,model:d.model,settings:d,hasSecret:w,active:k.value===`stt-${_}`}}async function K(){n.value=!0;try{await s.loadServerSttSettings(!0);const[_,d]=await Promise.all([vl(),$i()]),w=[{id:"tts-edge",kind:"tts",provider:"edge",label:p("settings.voice.presetEdgeTtsLabel"),isBuiltin:!0,hasSecret:!1,active:h.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:p("settings.voice.presetBrowserSttLabel"),isBuiltin:!0,hasSecret:!1,active:k.value==="stt-browser",settings:{}}];for(const U of _.providers){const D=V(U.provider,U.settings,U.secrets?.apiKey==="[stored]"),re=w.find(ue=>ue.id===D.id);re?Object.assign(re,D,{isBuiltin:re.isBuiltin}):w.push(D)}for(const U of d.providers)w.push(I(U.provider,U.settings,U.secrets?.apiKey==="[stored]"));t.value=w.map(U=>({...U,active:U.kind==="tts"?U.id===h.value:U.id===k.value}))}finally{n.value=!1}}async function P(_,d){const w=t.value.find(U=>U.kind===_&&U.id===d);w&&(_==="tts"?R(w):(B(w),Jt(w.provider)&&await Be(w.provider)),t.value=t.value.map(U=>({...U,active:U.kind===_?U.id===d:U.active})))}async function C(_,d,w){if(_==="tts"){if(!Wt(d))throw new Error(`Unsupported TTS provider: ${String(d)}`);const D=await pl(d,{settings:w.settings,secrets:w.secrets});return await K(),await P("tts",`tts-${d}`),D}if(d==="browser")return await Be("browser"),s.setProvider("browser"),await K(),null;if(!Gt(d))throw new Error(`Unsupported STT provider: ${String(d)}`);const U=await Di(d,{settings:w.settings,secrets:w.secrets,activeProvider:d});return await K(),await P("stt",`stt-${d}`),U}async function A(_,d){if(_==="tts"){if(!Wt(d))return;await ml(d,"apiKey")}else{if(!Gt(d))return;await Fi(d,"apiKey")}await K()}return{connections:t,ttsConnections:v,sttConnections:f,activeTtsId:h,activeSttId:k,activeTtsConnection:l,activeSttConnection:c,ttsConnectionOptions:y,sttConnectionOptions:S,loading:n,refresh:K,setActiveConnection:P,saveConnection:C,deleteSecret:A}}var yl=M((()=>{Q(),ee(),gl(),Ai(),Vi(),zi(),Re()})),Yt,Xt,xa,Qt=M((()=>{Q(),Yt={class:"provider-meta-item"},Xt=["title"],xa=Z({__name:"ProviderMetaItem",props:{label:{},value:{}},setup(p){return(t,n)=>(b(),z("div",Yt,[m("dt",null,g(p.label),1),m("dd",{title:String(p.value||"—")},g(p.value||"—"),9,Xt)]))}})})),bl=M((()=>{})),Fa,hl=M((()=>{Qt(),Qt(),bl(),ae(),Fa=ie(xa,[["__scopeId","data-v-6e8cbcf2"]])})),Zt,es,ts,ss,as,is,ls,ns,os,rs,us,ds,cs,vs,ps,Da,ms=M((()=>{Q(),se(),ee(),hl(),Zt=["data-state"],es={class:"card-main"},ts={class:"provider-identity"},ss={class:"provider-icon","aria-hidden":"true"},as={class:"provider-copy"},is={class:"provider-title-row"},ls=["title"],ns={class:"provider-kind"},os={class:"provider-description"},rs={class:"provider-meta"},us={class:"provider-control"},ds=["aria-label"],cs={key:1,class:"feedback-row error",role:"alert"},vs={class:"error-summary"},ps={key:1,class:"error-details"},Da=Z({__name:"VoiceApiCard",props:{connection:{},testState:{}},emits:["setActive","test","edit","connect","remove"],setup(p,{emit:t}){const n=p,i=t,{t:s}=te(),h=F(!1);$e(()=>n.testState?.message,()=>{h.value=!1});const k=T(()=>!(n.connection.kind==="stt"&&n.connection.provider==="browser")),v=T(()=>!n.connection.isBuiltin),f=T(()=>v.value?n.connection.hasSecret?s("settings.voice.keyStored"):s("settings.voice.keyMissing"):s("settings.voice.builtin")),l=T(()=>n.connection.isBuiltin?s("settings.voice.builtin"):s("settings.voice.customApi")),c=T(()=>n.connection.active?"success":v.value&&!n.connection.hasSecret?"warning":"default"),y=T(()=>n.connection.active?s("settings.voice.active"):v.value&&!n.connection.hasSecret?s("settings.voice.keyMissing"):s("settings.voice.connected")),S=T(()=>n.connection.model||String(n.connection.settings.model||"")),R=T(()=>n.connection.voice||String(n.connection.settings.voice||"")),B=T(()=>n.connection.baseUrl||(n.connection.isBuiltin?s("settings.voice.localBuiltin"):"")),V=T(()=>{const $=n.testState?.status;return s($==="success"?"settings.voice.testSuccess":$==="error"?"settings.voice.testFailedShort":$==="loading"?"settings.voice.testing":$==="recording"?"settings.voice.recording":"settings.voice.notTested")}),I=T(()=>v.value&&!n.connection.hasSecret?s("settings.voice.connect"):s("common.edit")),K=T(()=>n.testState?.status==="recording"?s("settings.voice.sttTestStopButton"):s("settings.voice.testAction")),P=T(()=>n.connection.kind==="tts"?[{key:"source",label:s("settings.voice.source"),value:B.value},{key:"model",label:s("settings.voice.model"),value:S.value},{key:"voice",label:s("settings.voice.voice"),value:R.value},{key:"api-key",label:s("settings.voice.apiKey"),value:f.value}]:[{key:"source",label:s("settings.voice.source"),value:B.value},{key:"model",label:s("settings.voice.model"),value:S.value},{key:"api-key",label:s("settings.voice.apiKey"),value:f.value},{key:"last-test",label:s("settings.voice.lastTest"),value:V.value}]),C=T(()=>{const $=n.testState?.status;return!!$&&$!=="idle"&&$!=="error"}),A=T(()=>n.testState?.status==="error"),_=T(()=>n.testState?.message||"");function d($){const o=$.indexOf("{");if(o<0)return null;try{const r=JSON.parse($.slice(o)),x=r.error||r.message||r.detail;return typeof x=="string"&&x.trim()?x.trim():null}catch{return null}}function w($){return $.replace(/^API Error\s+\d+\s*:\s*/i,"").replace(/^Error\s*:\s*/i,"").trim()}const U=T(()=>{const $=_.value.trim();if(!$)return s("settings.voice.testFailedSummary");const o=d($)||w($);return!o||o.startsWith("{")||o.startsWith("[")?s("settings.voice.testFailedSummary"):o.length>180?`${o.slice(0,177).trim()}…`:o}),D=T(()=>{const $=_.value.trim();return $.length>0&&$!==U.value}),re=T(()=>[{label:s("settings.voice.remove"),key:"remove",disabled:!n.connection.hasSecret}]);function ue(){if(v.value&&!n.connection.hasSecret){i("connect",n.connection);return}i("edit",n.connection)}function Se($){$==="remove"&&n.connection.hasSecret&&i("remove",n.connection)}return($,o)=>(b(),z("article",{class:ze(["voice-api-card",{active:p.connection.active}]),"data-state":p.testState?.status||"idle"},[m("div",es,[m("div",ts,[m("div",ss,g(p.connection.kind==="tts"?"T":"S"),1),m("div",as,[m("div",is,[m("h5",{class:"provider-title",title:p.connection.label},g(p.connection.label),9,ls),m("span",ns,g(l.value),1)]),m("p",os,g(p.connection.kind==="tts"?e(s)("settings.voice.ttsCardHint"):e(s)("settings.voice.sttCardHint")),1)])]),m("dl",rs,[(b(!0),z(_e,null,Te(P.value,r=>(b(),G(Fa,{key:r.key,label:r.label,value:r.value},null,8,["label","value"]))),128))]),m("div",us,[a(e(xe),{class:"status-badge",size:"small",type:c.value,round:"",bordered:!1},{default:u(()=>[N(g(y.value),1)]),_:1},8,["type"]),m("div",{class:"card-actions","aria-label":`${p.connection.label} actions`},[p.connection.active?q("",!0):(b(),G(e(O),{key:0,size:"tiny",secondary:"",onClick:o[0]||(o[0]=r=>i("setActive",p.connection))},{default:u(()=>[N(g(e(s)("settings.voice.setActive")),1)]),_:1})),a(e(O),{size:"tiny",loading:p.testState?.status==="loading","data-testid":`voice-card-test-${p.connection.id}`,onClick:o[1]||(o[1]=r=>i("test",p.connection))},{default:u(()=>[N(g(K.value),1)]),_:1},8,["loading","data-testid"]),k.value?(b(),G(e(O),{key:1,size:"tiny",onClick:ue},{default:u(()=>[N(g(I.value),1)]),_:1})):q("",!0),v.value?(b(),G(e(ei),{key:2,trigger:"click",size:"small",options:re.value,onSelect:Se},{default:u(()=>[a(e(O),{size:"tiny","aria-label":e(s)("settings.voice.moreActionsFor",{provider:p.connection.label})},{default:u(()=>[N(g(e(s)("settings.voice.moreActions")),1)]),_:1},8,["aria-label"])]),_:1},8,["options"])):q("",!0)],8,ds)])]),C.value?(b(),z("div",{key:0,class:ze(["feedback-row",p.testState?.status]),role:"status"},g(p.testState?.message||(p.testState?.status==="success"?e(s)("settings.voice.testSuccess"):"")),3)):q("",!0),A.value?(b(),z("div",cs,[m("div",vs,g(U.value),1),D.value?(b(),G(e(O),{key:0,class:"details-toggle",text:"",size:"tiny",onClick:o[2]||(o[2]=r=>h.value=!h.value)},{default:u(()=>[N(g(h.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)]),_:1})):q("",!0),h.value?(b(),z("pre",ps,g(_.value),1)):q("",!0)])):q("",!0)],10,Zt))}})})),Sl=M((()=>{})),Ie,wl=M((()=>{ms(),ms(),Sl(),ae(),Ie=ie(Da,[["__scopeId","data-v-549f5d20"]])}));async function Ul(p){return De("/api/voice/providers/probe",{method:"POST",signal:p.signal,body:JSON.stringify({kind:p.kind,provider:p.provider,compatibility:p.compatibility,baseUrl:p.baseUrl,apiKey:p.apiKey})})}var kl=M((()=>{Ke()})),gs,_s,fs,ys,bs,hs,Ss,ws,Us,ks,Cs,As,Ps,za,Ts=M((()=>{Q(),se(),ee(),kl(),Re(),gs={class:"form-section"},_s={class:"form-section"},fs={class:"section-heading"},ys={key:0,class:"connection-actions"},bs={key:1,class:"inline-error","data-testid":"voice-provider-probe-error"},hs={key:1},Ss={key:0,class:"form-section"},ws={class:"section-heading"},Us={key:0,class:"helper-text"},ks={key:1,class:"helper-text"},Cs={key:2,class:"helper-text"},As={key:3,class:"helper-text"},Ps={class:"modal-footer"},za=Z({__name:"VoiceApiFormModal",props:{kind:{},show:{type:Boolean}},emits:["close","saved"],setup(p,{emit:t}){const n=p,i=t,{t:s}=te(),h=oe(),k=F(!1),v=F(null),f=F("openai-compatible"),l=F({baseUrl:"",apiKey:"",model:""}),c=F(!1),y=F(!1),S=F(!1),R=F(!1),B=F(!1),V=F([]),I=F(""),K=F(""),P=F(""),C=F(!1),A=F("");let _=null,d=0,w=!1;const U=T(()=>we.filter(H=>H.kind===n.kind&&!H.isBuiltin).map(H=>({label:H.labelKey?s(H.labelKey):H.label,value:H.id}))),D=T(()=>we.find(H=>H.id===v.value)||null),re=T(()=>D.value?.provider==="custom"),ue=T(()=>f.value==="openai-compatible"),Se=T(()=>{const H=V.value.map(E=>({label:E.capability==="preferred"?`${E.label} · ${s("settings.voice.modelRecommendedSuffix")}`:E.label,value:E.id})),L=l.value.model.trim();return L&&!H.some(E=>E.value===L)?[{label:L,value:L},...H]:H}),$=T(()=>fe(l.value.baseUrl)),o=T(()=>!S.value&&!l.value.baseUrl.trim()||!D.value||!D.value.isSecretRequired?"":ye(l.value.baseUrl)),r=T(()=>!D.value?.capabilities?.models||!y.value||l.value.model.trim()?"":s("settings.voice.modelRequiredConnectManual")),x=T(()=>!R.value||!D.value?.isSecretRequired||l.value.apiKey.trim()?"":s("settings.voice.apiKeyRequired")),de=T(()=>!!D.value&&ue.value&&!!l.value.baseUrl.trim()&&!!l.value.apiKey.trim()&&!ye(l.value.baseUrl)),ce=T(()=>!(!D.value||D.value.isSecretRequired&&(!l.value.apiKey.trim()||ye(l.value.baseUrl))||D.value.capabilities?.models&&!l.value.model.trim())),ve=T(()=>D.value?f.value==="manual"?s("settings.voice.discoveryManualHint"):!l.value.baseUrl.trim()||!l.value.apiKey.trim()?s("settings.voice.discoveryCredentialHint"):s("settings.voice.discoveryNoAutoProbeHint"):"");$e(()=>n.show,H=>{H?Me():Ce()}),$e([()=>l.value.baseUrl,()=>l.value.apiKey,f],()=>{if(w){w=!1;return}Ce(),V.value=[],I.value="",K.value="",P.value="",C.value=!1}),si(()=>Ce());function Me(){v.value=null,f.value="openai-compatible",l.value={baseUrl:"",apiKey:"",model:""},c.value=!1,y.value=!1,S.value=!1,R.value=!1,A.value="",V.value=[],I.value="",K.value="",P.value="",C.value=!1,Ce()}function fe(H){const L=H.trim();if(!L)return"";try{const E=new URL(L);return E.hash="",E.pathname=E.pathname.replace(/\/+$/,"")||"/",E.toString().replace(/\/$/,"")}catch{return L.replace(/\/+$/,"")}}function ye(H){const L=H.trim();if(!L)return s("settings.voice.baseUrlRequired");try{const E=new URL(L);return E.protocol!=="https:"&&E.hostname!=="localhost"&&E.hostname!=="127.0.0.1"?s("settings.voice.baseUrlHttpsRequired"):""}catch{return s("settings.voice.baseUrlInvalid")}}function Ce(){_&&(_.abort(),_=null),B.value=!1}function Na(H){v.value=H;const L=we.find(E=>E.id===H);f.value=L?.provider==="custom"||L?.provider==="openai"?"openai-compatible":"manual",l.value={baseUrl:L?.baseUrl||"",model:L?.defaultModel||"",apiKey:""},c.value=!1,y.value=!1,S.value=!1,R.value=!1,A.value=""}function Oa(H){l.value.model=H||"",c.value=!0,y.value=!0}function Ha(){I.value&&(l.value.model=I.value,y.value=!0,c.value=!1)}function Ba(){S.value=!0,ye(l.value.baseUrl)||(l.value.baseUrl=$.value)}function qa(){return`${n.kind}|${D.value?.provider||""}|${f.value}|${fe(l.value.baseUrl)}|${l.value.apiKey.trim()}`}async function ja(){if(R.value=!0,!de.value)return;const H=qa();A.value!==H&&(A.value=H,await Ve())}async function Ve(){if(!D.value||!ue.value)return;S.value=!0,R.value=!0;const H=ye(l.value.baseUrl);if(H){K.value=H;return}if(!l.value.apiKey.trim()){K.value=s("settings.voice.apiKeyRequiredForDiscovery");return}Ce();const L=++d,E=new AbortController;_=E,B.value=!0,K.value="",P.value="",C.value=!1;try{const le=await Ul({kind:n.kind,provider:String(D.value.provider),compatibility:f.value,baseUrl:fe(l.value.baseUrl),apiKey:l.value.apiKey.trim(),signal:E.signal});if(L!==d)return;le.normalizedBaseUrl&&(w=!0,l.value.baseUrl=le.normalizedBaseUrl),V.value=le.models||[],I.value=le.recommendedModel||"",K.value=le.ok?"":le.errorSummary||s("settings.voice.discoveryFailedManualFallback"),P.value=le.errorDetails||"",le.ok&&le.recommendedModel&&!c.value&&!l.value.model.trim()&&(l.value.model=le.recommendedModel,y.value=!0)}catch(le){if(E.signal.aborted||L!==d)return;K.value=le instanceof Error?le.message:s("settings.voice.discoveryFailedManualFallback"),P.value=""}finally{L===d&&(B.value=!1,_=null)}}async function Ga(){if(D.value){if(S.value=!0,R.value=!0,y.value=!0,!ce.value){h.warning(r.value||o.value||x.value||s("settings.voice.completeRequiredProviderFields"));return}k.value=!0;try{i("saved",{preset:D.value,settings:{baseUrl:fe(l.value.baseUrl),model:l.value.model.trim()},secrets:{apiKey:l.value.apiKey.trim()}})}finally{k.value=!1}}}return(H,L)=>(b(),G(e(Fe),{show:p.show,preset:"card",title:p.kind==="tts"?e(s)("settings.voice.addTtsApi"):e(s)("settings.voice.addSttApi"),style:{width:"min(540px, calc(100vw - 32px))"},"onUpdate:show":L[6]||(L[6]=E=>i("close"))},{footer:u(()=>[m("div",Ps,[a(e(O),{onClick:L[5]||(L[5]=E=>i("close"))},{default:u(()=>[N(g(e(s)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:k.value,disabled:!ce.value,"data-testid":"voice-provider-save",onClick:Ga},{default:u(()=>[N(g(e(s)("common.add")),1)]),_:1},8,["loading","disabled"])])]),default:u(()=>[a(e(Pe),{"label-placement":"top",class:"provider-form"},{default:u(()=>[m("section",gs,[a(e(W),{label:e(s)("models.selectProvider"),required:""},{default:u(()=>[a(e(Y),{value:v.value,"onUpdate:value":[L[0]||(L[0]=E=>v.value=E),Na],options:U.value,placeholder:e(s)("models.chooseProvider"),"data-testid":"voice-provider-select"},null,8,["value","options","placeholder"])]),_:1},8,["label"]),D.value&&re.value?(b(),G(e(W),{key:0,label:e(s)("settings.voice.apiCompatibility"),required:""},{default:u(()=>[a(e(Y),{value:f.value,"onUpdate:value":L[1]||(L[1]=E=>f.value=E),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"])):q("",!0)]),D.value?(b(),z(_e,{key:0},[m("section",_s,[m("div",fs,[m("span",null,g(e(s)("settings.voice.connectionStep")),1),m("small",null,g(ve.value),1)]),a(e(W),{label:e(s)("models.baseUrl"),required:D.value.isSecretRequired,feedback:o.value},{default:u(()=>[a(e(J),{value:l.value.baseUrl,"onUpdate:value":L[2]||(L[2]=E=>l.value.baseUrl=E),placeholder:e(s)("models.baseUrlPlaceholder"),disabled:!!D.value.baseUrl&&D.value.provider!=="custom","data-testid":"voice-provider-base-url",onBlur:Ba},null,8,["value","placeholder","disabled"])]),_:1},8,["label","required","feedback"]),a(e(W),{label:e(s)("models.apiKey"),required:D.value.isSecretRequired,feedback:x.value},{default:u(()=>[a(e(J),{value:l.value.apiKey,"onUpdate:value":L[3]||(L[3]=E=>l.value.apiKey=E),type:"password","show-password-on":"click",autocomplete:"off",placeholder:D.value.isSecretRequired?e(s)("settings.voice.apiKeyConnectPlaceholder"):e(s)("models.apiKeyPlaceholder"),"data-testid":"voice-provider-api-key",onBlur:ja},null,8,["value","placeholder"])]),_:1},8,["label","required","feedback"]),ue.value?(b(),z("div",ys,[a(e(O),{size:"small",loading:B.value,disabled:!de.value,"data-testid":"voice-provider-probe",onClick:Ve},{default:u(()=>[N(g(e(s)("settings.voice.connectFetchModels")),1)]),_:1},8,["loading","disabled"])])):q("",!0),K.value?(b(),z("div",bs,[m("span",null,g(K.value),1),P.value?(b(),z("button",{key:0,type:"button",class:"link-button",onClick:L[4]||(L[4]=E=>C.value=!C.value)},g(C.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)):q("",!0),C.value&&P.value?(b(),z("pre",hs,g(P.value),1)):q("",!0)])):q("",!0)]),D.value.capabilities?.models?(b(),z("section",Ss,[m("div",ws,[m("span",null,g(e(s)("settings.voice.model")),1),m("small",null,g(e(s)("settings.voice.modelConnectManualHint")),1)]),a(e(W),{label:e(s)("models.defaultModel"),feedback:r.value},{default:u(()=>[a(e(Y),{value:l.value.model,options:Se.value,tag:"",filterable:"",loading:B.value,placeholder:e(s)("settings.voice.modelConnectManualHint"),"data-testid":"voice-provider-model","onUpdate:value":Oa},null,8,["value","options","loading","placeholder"])]),_:1},8,["label","feedback"]),B.value?(b(),z("div",Us,g(e(s)("settings.voice.fetchingModels")),1)):I.value&&c.value&&l.value.model!==I.value?(b(),z("div",ks,[N(g(e(s)("settings.voice.recommendedModel",{model:I.value}))+" ",1),m("button",{type:"button",class:"link-button",onClick:Ha},g(e(s)("settings.voice.useRecommendedModel")),1)])):V.value.length?(b(),z("div",Cs,g(e(s)("settings.voice.modelsDiscovered",{count:V.value.length})),1)):K.value?(b(),z("div",As,g(e(s)("settings.voice.discoveryFailedManualFallback")),1)):q("",!0)])):q("",!0)],64)):q("",!0)]),_:1})]),_:1},8,["show","title"]))}})})),Cl=M((()=>{})),Ia,Al=M((()=>{Ts(),Ts(),Cl(),ae(),Ia=ie(za,[["__scopeId","data-v-5ae1761c"]])})),$s,Ms,Ka,xs=M((()=>{Q(),se(),ee(),Re(),Li(),$s={style:{"font-size":"12px",opacity:"0.6"}},Ms={style:{"font-size":"12px",opacity:"0.6"}},Ka=Z({__name:"VoiceApiConfigurator",props:{connection:{},show:{type:Boolean}},emits:["close","save"],setup(p,{emit:t}){const n=p,i=t,{t:s}=te(),h=F(!1),k=F({}),v=F(""),f=T(()=>n.connection?we.find(P=>P.kind===n.connection.kind&&P.provider===n.connection.provider&&(P.baseUrl===n.connection.baseUrl||!P.baseUrl)):null),l=T(()=>f.value?.capabilities||{});function c(P,C){k.value[P]=C??""}function y(P){const C=k.value[P];return typeof C=="string"?C:typeof C=="number"?String(C):""}function S(P,C=0){const A=k.value[P];if(typeof A=="number"&&Number.isFinite(A))return A;if(typeof A=="string"&&A.trim()){const _=Number(A);if(Number.isFinite(_))return _}return C}$e(()=>n.connection,P=>{P&&(k.value={...P.settings,model:P.model||String(P.settings.model||""),voice:P.voice||String(P.settings.voice||"")},P.provider==="edge"&&(k.value.rate=S("rate",1),k.value.pitch=S("pitch",0)),v.value="")},{immediate:!0});async function R(){if(n.connection){h.value=!0;try{const P=v.value.trim();i("save",n.connection,{settings:{...k.value},...P?{secrets:{apiKey:P}}:{}})}finally{h.value=!1}}}const B=[{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"}],V=[{label:"Alloy",value:"alloy"},{label:"Echo",value:"echo"},{label:"Fable",value:"fable"},{label:"Nova",value:"nova"},{label:"Onyx",value:"onyx"},{label:"Shimmer",value:"shimmer"}],I=[{label:"冰糖 (中文·女)",value:"冰糖"},{label:"茉莉 (中文·女)",value:"茉莉"},{label:"苏打 (中文·男)",value:"苏打"},{label:"白桦 (中文·男)",value:"白桦"}],K=[{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"}];return(P,C)=>(b(),G(e(Ya),{show:p.show,width:400,"onUpdate:show":C[14]||(C[14]=A=>i("close"))},{default:u(()=>[a(e(Xa),{title:p.connection?.label,closable:""},{footer:u(()=>[a(e(Ae),{justify:"end"},{default:u(()=>[a(e(O),{onClick:C[13]||(C[13]=A=>i("close"))},{default:u(()=>[N(g(e(s)("common.cancel")),1)]),_:1}),a(e(O),{type:"primary",loading:h.value,onClick:R},{default:u(()=>[N(g(e(s)("common.save")),1)]),_:1},8,["loading"])]),_:1})]),default:u(()=>[p.connection?(b(),G(e(Pe),{key:0,"label-placement":"top"},{default:u(()=>[p.connection.isBuiltin?q("",!0):(b(),G(e(W),{key:0,label:e(s)("settings.voice.apiKey")},{default:u(()=>[a(e(J),{value:v.value,"onUpdate:value":C[0]||(C[0]=A=>v.value=A),type:"password","show-password-on":"click",autocomplete:"off",placeholder:p.connection.hasSecret?e(s)("settings.voice.keepStoredKeyPlaceholder"):e(s)("settings.voice.apiKeyPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])),l.value.models?(b(),G(e(W),{key:1,label:e(s)("settings.voice.model")},{default:u(()=>[p.connection.provider==="mimo"?(b(),G(e(Y),{key:0,value:y("model"),options:K,"onUpdate:value":C[1]||(C[1]=A=>c("model",A))},null,8,["value"])):(b(),G(e(J),{key:1,value:y("model"),placeholder:e(s)("models.selectOrInput"),"onUpdate:value":C[2]||(C[2]=A=>c("model",A))},null,8,["value","placeholder"]))]),_:1},8,["label"])):q("",!0),l.value.voices?(b(),G(e(W),{key:2,label:e(s)("settings.voice.voice")},{default:u(()=>[p.connection.provider==="edge"?(b(),G(e(Y),{key:0,value:y("voice"),options:B,filterable:"","onUpdate:value":C[3]||(C[3]=A=>c("voice",A))},null,8,["value"])):p.connection.provider==="openai"?(b(),G(e(Y),{key:1,value:y("voice"),options:V,"onUpdate:value":C[4]||(C[4]=A=>c("voice",A))},null,8,["value"])):p.connection.provider==="mimo"&&y("model")==="mimo-v2.5-tts"?(b(),G(e(Y),{key:2,value:y("voice"),options:I,"onUpdate:value":C[5]||(C[5]=A=>c("voice",A))},null,8,["value"])):(b(),G(e(J),{key:3,value:y("voice"),"onUpdate:value":C[6]||(C[6]=A=>c("voice",A))},null,8,["value"]))]),_:1},8,["label"])):q("",!0),p.connection.provider==="edge"?(b(),z(_e,{key:3},[a(e(W),{label:e(s)("settings.voice.edgeRate")},{default:u(()=>[a(e(Ae),{vertical:"",style:{width:"100%"}},{default:u(()=>[a(e(Ee),{value:S("rate",1),min:.5,max:2,step:.05,"onUpdate:value":C[7]||(C[7]=A=>c("rate",Array.isArray(A)?A[0]:A))},null,8,["value"]),m("span",$s,g(S("rate",1).toFixed(2))+"x ("+g(e(Ni)(S("rate",1)))+")",1)]),_:1})]),_:1},8,["label"]),a(e(W),{label:e(s)("settings.voice.edgePitch")},{default:u(()=>[a(e(Ae),{vertical:"",style:{width:"100%"}},{default:u(()=>[a(e(Ee),{value:S("pitch",0),min:-20,max:20,step:1,"onUpdate:value":C[8]||(C[8]=A=>c("pitch",Array.isArray(A)?A[0]:A))},null,8,["value"]),m("span",Ms,g(S("pitch",0)>0?"+":"")+g(S("pitch",0))+" Hz ("+g(e(Oi)(S("pitch",0)))+")",1)]),_:1})]),_:1},8,["label"])],64)):q("",!0),p.connection.provider==="mimo"?(b(),z(_e,{key:4},[l.value.stylePrompt?(b(),G(e(W),{key:0,label:e(s)("settings.voice.mimoStylePrompt")},{default:u(()=>[a(e(J),{value:y("stylePrompt"),type:"textarea",rows:2,"onUpdate:value":C[9]||(C[9]=A=>c("stylePrompt",A))},null,8,["value"])]),_:1},8,["label"])):q("",!0),y("model")==="mimo-v2.5-tts-voicedesign"?(b(),G(e(W),{key:1,label:e(s)("settings.voice.mimoVoiceDesignPrompt")},{default:u(()=>[a(e(J),{value:y("voiceDesignDesc"),type:"textarea",rows:3,"onUpdate:value":C[10]||(C[10]=A=>c("voiceDesignDesc",A))},null,8,["value"])]),_:1},8,["label"])):q("",!0)],64)):q("",!0),p.connection.kind==="stt"&&p.connection.provider!=="browser"?(b(),z(_e,{key:5},[a(e(W),{label:e(s)("settings.voice.sttLanguage")},{default:u(()=>[a(e(J),{value:y("language"),"onUpdate:value":C[11]||(C[11]=A=>c("language",A))},null,8,["value"])]),_:1},8,["label"]),a(e(W),{label:e(s)("settings.voice.sttPrompt")},{default:u(()=>[a(e(J),{value:y("prompt"),type:"textarea",rows:2,"onUpdate:value":C[12]||(C[12]=A=>c("prompt",A))},null,8,["value"])]),_:1},8,["label"])],64)):q("",!0)]),_:1})):q("",!0)]),_:1},8,["title"])]),_:1},8,["show"]))}})})),Ra,Pl=M((()=>{xs(),xs(),Ra=Ka})),Fs,Ds,zs,Is,Ks,Rs,Vs,Ls,Es,Ns,Os,Hs,Bs,qs,js,Gs,Ws,Js,Ys,Xs,Qs,Zs,Va,ea=M((()=>{Q(),se(),ee(),Ei(),Ii(),Pi(),yl(),wl(),Al(),Pl(),Fs={class:"voice-settings"},Ds={class:"settings-section voice-provider-section","aria-labelledby":"tts-providers-title"},zs={class:"section-header"},Is={class:"section-copy"},Ks={id:"tts-providers-title",class:"section-title"},Rs={class:"section-desc"},Vs={class:"section-controls"},Ls={class:"active-select"},Es={class:"active-label"},Ns={class:"active-summary"},Os={class:"test-copy-row"},Hs={class:"provider-list"},Bs={class:"settings-section voice-provider-section","aria-labelledby":"stt-providers-title"},qs={class:"section-header"},js={class:"section-copy"},Gs={id:"stt-providers-title",class:"section-title"},Ws={class:"section-desc"},Js={class:"section-controls"},Ys={class:"active-select"},Xs={class:"active-label"},Qs={class:"active-summary"},Zs={class:"provider-list"},Va=Z({__name:"VoiceSettings",setup(p){const{t}=te(),n=oe(),i=Ri(),s=fl(),h=F(t("settings.voice.testTextDefault")),k=F(!1),v=F("tts"),f=F(!1),l=F(null),c=Ti({maxDurationMs:3e4}),y=F({}),S=T(()=>s.activeTtsConnection.value?.label||t("settings.voice.noneSelected")),R=T(()=>s.activeSttConnection.value?.label||t("settings.voice.noneSelected"));ke(async()=>{await s.refresh()});function B(o){v.value=o,k.value=!0}function V(o,r,x){y.value={...y.value,[o]:{status:r,message:x}}}function I(o){const r={...y.value};for(const[x,de]of Object.entries(r))x!==o&&de.status==="recording"&&(r[x]={status:"idle"});y.value=r}async function K(o){try{await s.saveConnection(v.value,o.preset.provider,{settings:o.settings,secrets:o.secrets}),k.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(r){n.error(r instanceof Error?r.message:t("settings.voice.ttsSaveFailed"))}}function P(o){l.value=o,f.value=!0}async function C(o,r){try{await s.saveConnection(o.kind,o.provider,r),f.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(x){n.error(x instanceof Error?x.message:t("settings.voice.ttsSaveFailed"))}}async function A(o){try{await s.deleteSecret(o.kind,o.provider),V(o.id,"idle"),n.success(t("settings.voice.ttsCleared"))}catch(r){n.error(r instanceof Error?r.message:t("settings.voice.ttsClearFailed"))}}async function _(o){await s.setActiveConnection(o.kind,o.id)}async function d(o){await s.setActiveConnection("tts",o)}async function w(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 D(o){const r=U(o),x=o.provider==="edge"||o.provider==="openai"||o.provider==="custom"?o.provider:void 0;return{baseUrl:String(r.baseUrl||""),model:typeof r.model=="string"?r.model:void 0,voice:typeof r.voice=="string"?r.voice:void 0,rate:typeof r.rate=="string"?r.rate:void 0,pitch:typeof r.pitch=="string"?r.pitch:void 0,provider:x}}function re(o){const r=U(o);return{baseUrl:String(r.baseUrl||"https://api.xiaomimimo.com/v1"),model:String(r.model||"mimo-v2.5-tts"),voice:typeof r.voice=="string"?r.voice:void 0,authMode:r.authMode==="api-key"||r.authMode==="bearer"||r.authMode==="both"?r.authMode:void 0,voiceMode:r.voiceMode==="preset"||r.voiceMode==="voiceDesign"||r.voiceMode==="voiceClone"?r.voiceMode:void 0,voiceDesignDesc:typeof r.voiceDesignDesc=="string"?r.voiceDesignDesc:void 0,voiceCloneDataUri:typeof r.voiceCloneDataUri=="string"?r.voiceCloneDataUri:void 0,voiceCloneFormat:r.voiceCloneFormat==="mp3"||r.voiceCloneFormat==="wav"?r.voiceCloneFormat:void 0,stylePrompt:typeof r.stylePrompt=="string"?r.stylePrompt:void 0}}async function ue(o){const r=h.value.trim();if(!r){V(o.id,"error",t("settings.voice.testTextRequired"));return}if(!o.isBuiltin&&!o.hasSecret){V(o.id,"error",t("settings.voice.keyMissingForTest"));return}V(o.id,"loading",t("settings.voice.testing"));try{o.provider==="mimo"?await i.mimoPlay(o.id,r,re(o)):(o.provider==="edge"||o.provider==="openai"||o.provider==="custom")&&await i.openaiPlay(o.id,r,D(o)),V(o.id,"success",t("settings.voice.testSuccess"))}catch(x){V(o.id,"error",t("settings.voice.testFailed",{error:x instanceof Error?x.message:String(x)}))}}async function Se(o){if(o.provider==="browser"){V(o.id,"success",t("settings.voice.browserSttTestHint"));return}if(!o.hasSecret){V(o.id,"error",t("settings.voice.keyMissingForTest"));return}if(y.value[o.id]?.status==="recording"){V(o.id,"loading",t("settings.voice.transcribing"));try{const r=await c.stop();if(!r.size){V(o.id,"error",t("settings.voice.sttEmptyAudio"));return}const x=await Mi({audio:r,provider:o.provider});V(o.id,"success",x.text||t("settings.voice.sttTestSuccess"))}catch(r){V(o.id,"error",t("settings.voice.sttTestFailed",{error:r instanceof Error?r.message:String(r)}))}return}try{I(o.id),await c.start(),V(o.id,"recording",t("settings.voice.sttRecordingHint"))}catch(r){console.error("[VoiceSettings] Failed to start STT card test recording:",r),V(o.id,"error",t("settings.voice.sttTestFailed",{error:r instanceof Error?r.message:String(r)}))}}async function $(o){if(o.kind==="tts"){await ue(o);return}await Se(o)}return(o,r)=>(b(),z("div",Fs,[m("section",Ds,[m("header",zs,[m("div",Is,[m("h4",Ks,g(e(t)("settings.voice.ttsProvidersTitle")),1),m("p",Rs,g(e(t)("settings.voice.ttsProvidersDescription")),1)]),m("div",Vs,[m("div",Ls,[m("span",Es,g(e(t)("settings.voice.activeTtsApi")),1),a(e(Y),{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"]),m("span",Ns,g(S.value),1)]),a(e(O),{size:"small",secondary:"",onClick:r[0]||(r[0]=x=>B("tts"))},{default:u(()=>[N(g(e(t)("settings.voice.addTtsApi")),1)]),_:1})])]),m("div",Os,[a(e(J),{value:h.value,"onUpdate:value":r[1]||(r[1]=x=>h.value=x),size:"small",placeholder:e(t)("settings.voice.testTextPlaceholder"),"data-testid":"tts-test-text"},null,8,["value","placeholder"])]),m("div",Hs,[(b(!0),z(_e,null,Te(e(s).ttsConnections.value,x=>(b(),G(Ie,{key:x.id,connection:x,"test-state":y.value[x.id],onSetActive:_,onTest:$,onEdit:P,onConnect:P,onRemove:A},null,8,["connection","test-state"]))),128))])]),m("section",Bs,[m("header",qs,[m("div",js,[m("h4",Gs,g(e(t)("settings.voice.sttProvidersTitle")),1),m("p",Ws,g(e(t)("settings.voice.sttProvidersDescription")),1)]),m("div",Js,[m("div",Ys,[m("span",Xs,g(e(t)("settings.voice.activeSttApi")),1),a(e(Y),{value:e(s).activeSttId.value,options:e(s).sttConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeSttApi"),"onUpdate:value":w},null,8,["value","options","aria-label"]),m("span",Qs,g(R.value),1)]),a(e(O),{size:"small",secondary:"",onClick:r[2]||(r[2]=x=>B("stt"))},{default:u(()=>[N(g(e(t)("settings.voice.addSttApi")),1)]),_:1})])]),m("div",Zs,[(b(!0),z(_e,null,Te(e(s).sttConnections.value,x=>(b(),G(Ie,{key:x.id,connection:x,"test-state":y.value[x.id],onSetActive:_,onTest:$,onEdit:P,onConnect:P,onRemove:A},null,8,["connection","test-state"]))),128))])]),a(Ia,{show:k.value,kind:v.value,onClose:r[3]||(r[3]=x=>k.value=!1),onSaved:K},null,8,["show","kind"]),a(Ra,{show:f.value,connection:l.value,onClose:r[4]||(r[4]=x=>f.value=!1),onSave:C},null,8,["show","connection"])]))}})})),Tl=M((()=>{})),La,$l=M((()=>{ea(),ea(),Tl(),ae(),La=ie(Va,[["__scopeId","data-v-1c687169"]])})),ta,sa,aa,ia,Ea,la=M((()=>{Q(),ai(),se(),ee(),he(),ji(),Wi(),Yi(),Qi(),el(),sl(),il(),nl(),rl(),dl(),$l(),Ke(),ua(),ta={class:"settings-view"},sa={class:"page-header"},aa={class:"header-title"},ia={class:"settings-content"},Ea=Z({__name:"SettingsView",setup(p){const t=be(),n=ra(),{t:i}=te(),s=ni(),h=li(),k=ii(),v=F("account"),f=T(()=>new Set(["account",...s?["users"]:[],"display","agent","memory","compression","session","privacy","models","voice"]));function l(S){const R=typeof S=="string"?S:"";return f.value.has(R)?R:"account"}function c(S){v.value=l(S),k.replace({query:{...h.query,tab:v.value==="account"?void 0:v.value}})}$e(()=>h.query.tab,S=>{v.value=l(S)},{immediate:!0});async function y(){(!n.activeProfileName||n.profiles.length===0)&&await n.fetchProfiles(),await t.fetchSettings()}return ke(()=>{y()}),(S,R)=>(b(),z("div",ta,[m("header",sa,[m("h2",aa,g(e(i)("settings.title")),1)]),m("div",ia,[a(e(na),{show:e(t).loading||e(t).saving,size:"large",description:e(i)("common.loading")},{default:u(()=>[a(e(ti),{value:v.value,"onUpdate:value":[R[0]||(R[0]=B=>v.value=B),c],type:"line",animated:""},{default:u(()=>[a(e(ge),{name:"account",tab:e(i)("settings.tabs.account")},{default:u(()=>[a(Ta)]),_:1},8,["tab"]),e(s)?(b(),G(e(ge),{key:0,name:"users",tab:e(i)("settings.tabs.users")},{default:u(()=>[a(Ma)]),_:1},8,["tab"])):q("",!0),a(e(ge),{name:"display",tab:e(i)("settings.tabs.display")},{default:u(()=>[a(va)]),_:1},8,["tab"]),a(e(ge),{name:"agent",tab:e(i)("settings.tabs.agent")},{default:u(()=>[a(ma),a(_a)]),_:1},8,["tab"]),a(e(ge),{name:"memory",tab:e(i)("settings.tabs.memory")},{default:u(()=>[a(ya)]),_:1},8,["tab"]),a(e(ge),{name:"compression",tab:e(i)("settings.tabs.compression")},{default:u(()=>[a(ha)]),_:1},8,["tab"]),a(e(ge),{name:"session",tab:e(i)("settings.tabs.session")},{default:u(()=>[a(wa)]),_:1},8,["tab"]),a(e(ge),{name:"privacy",tab:e(i)("settings.tabs.privacy")},{default:u(()=>[a(ka)]),_:1},8,["tab"]),a(e(ge),{name:"models",tab:e(i)("settings.tabs.models")},{default:u(()=>[a(Aa)]),_:1},8,["tab"]),a(e(ge),{name:"voice",tab:e(i)("settings.tabs.voice")},{default:u(()=>[a(La)]),_:1},8,["tab"])]),_:1},8,["value"])]),_:1},8,["show","description"])])]))}})})),Ml=M((()=>{})),xl,Fl=M((()=>{la(),la(),Ml(),ae(),xl=ie(Ea,[["__scopeId","data-v-3a2d49d6"]])}));Fl();export{xl as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as q}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as m,Cn as sl,Dn as f,Ot as W,Pn as E,Qn as i,Tn as n,Wn as p,Wt as al,an as F,dn as tl,er as H,ln as C,nn as v,nr as b,on as r,rn as e,rr as a,t as il,un as K}from"./ui-vendor-dYn1tJGA.js";import{c as ol,l as nl}from"./vue-vendor-DZ4A_GHn.js";import{n as rl,t as ul}from"./_plugin-vue_export-helper-
|
|
1
|
+
import{n as q}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as m,Cn as sl,Dn as f,Ot as W,Pn as E,Qn as i,Tn as n,Wn as p,Wt as al,an as F,dn as tl,er as H,ln as C,nn as v,nr as b,on as r,rn as e,rr as a,t as il,un as K}from"./ui-vendor-dYn1tJGA.js";import{c as ol,l as nl}from"./vue-vendor-DZ4A_GHn.js";import{n as rl,t as ul}from"./_plugin-vue_export-helper-CwNymSRn.js";import{X as dl,Y as _l}from"./index-DW8M4rjb.js";import{l as cl,o as vl}from"./skills-kS4Wy1_s.js";var Q,X,Y,j,G,J,Z,ee,le,se,ae,te,ie,oe,ne,re,ue,de,_e,ce,ve,he,ke,me,pe,ge,ye,fe,be,Se,Ue,we,xe,Ce,$e,De,Me,Ve,Fe,Be,Pe,qe,Te,Ae,Le,Ne,ze,Ie,Re,Oe,B,P,Ee,We=q((()=>{al(),ol(),il(),_l(),cl(),Q={class:"skills-usage-view"},X={class:"page-header"},Y={class:"header-text"},j={class:"header-title"},G={class:"header-subtitle"},J={class:"skills-usage-toolbar"},Z=["aria-label"],ee={class:"skills-usage-content"},le={key:0,class:"skills-usage-state error"},se={key:1,class:"skills-usage-state"},ae={key:0,class:"inline-error"},te={class:"overview-grid"},ie={class:"panel-header"},oe={key:0,class:"skills-usage-state compact"},ne={class:"skill-bar-chart"},re=["onMouseenter","onFocusin","onMouseleave","onFocusout"],ue={class:"skill-bar-track"},de=["data-skill"],_e={class:"tooltip-date"},ce={class:"tooltip-row total"},ve={class:"bar-dates"},he=["aria-label"],ke={class:"summary-card primary"},me={class:"summary-label"},pe={class:"summary-value"},ge={class:"summary-card"},ye={class:"summary-label"},fe={class:"summary-value"},be={class:"summary-card"},Se={class:"summary-label"},Ue={class:"summary-value"},we={class:"summary-card"},xe={class:"summary-label"},Ce={class:"summary-value"},$e={class:"usage-panel"},De={class:"panel-header"},Me={key:0,class:"skills-usage-state compact"},Ve=["aria-label"],Fe={class:"skills-row table-head",role:"row"},Be={role:"columnheader"},Pe={role:"columnheader"},qe={role:"columnheader"},Te={role:"columnheader"},Ae={role:"columnheader"},Le={class:"skill-name",role:"cell"},Ne={role:"cell"},ze={role:"cell"},Ie={class:"share-cell",role:"cell"},Re={class:"share-bar"},Oe={class:"last-used",role:"cell"},B=6,P="#5b6b84",Ee=tl({__name:"SkillsUsageView",setup(pl){const{t}=nl(),$=dl(),He=[7,30,90,365],T=["#2f6eea","#f26d3d","#f49a5c","#9aa7ff","#8f2c8f","#00c2d1"],h=p(7),g=p(!1),k=p(""),S=p({});let U=0;const A={},o=v(()=>S.value[h.value]??null),L=v(()=>(o.value?.summary.total_skill_actions??0)>0),Ke=v(()=>Math.max(...(o.value?.by_day??[]).map(s=>s.total_count),1)),Qe=v(()=>g.value&&!!o.value),w=p(null),x=p(null),y=v(()=>o.value?.by_day.find(s=>s.date===w.value)??null),Xe=v(()=>y.value?I(y.value):[]),Ye=v(()=>{const s=o.value?.by_day.length??0;return x.value===null||s<=0?"align-right":x.value>=s/2?"align-left":"align-right"}),D=v(()=>(o.value?.top_skills??[]).slice(0,B)),je=v(()=>new Set(D.value.map(s=>s.skill)));function N(s){return`${s.toFixed(1)}%`}function Ge(s){return s?new Date(s*1e3).toLocaleString():"—"}function Je(s){return`${Math.max(2,s/Ke.value*100)}%`}function Ze(s){return Math.max(s,0)}function z(s){return s.total_count||s.view_count+s.manage_count}function el(){const s=Math.max((o.value?.top_skills.length??0)-B,0);return s>0?`${t("skillsUsage.otherSkills")} (+${s})`:t("skillsUsage.otherSkills")}function M(s){const d=D.value.findIndex(l=>l.skill===s);return d>=0?T[d%T.length]:P}function I(s){const d=s.skills??[],l=new Map(d.map(u=>[u.skill,z(u)])),c=D.value.map(u=>({key:u.skill,label:u.skill,count:l.get(u.skill)??0,color:M(u.skill)})).filter(u=>u.count>0),_=d.filter(u=>!je.value.has(u.skill)).reduce((u,ll)=>u+z(ll),0);return _>0&&c.push({key:"other-skills",label:el(),count:_,color:P}),c}function R(s,d){w.value=s.date,x.value=d}function O(s){w.value===s.date&&(w.value=null,x.value=null)}async function V(s=h.value,d=!1){h.value=s,(!$.activeProfileName||$.profiles.length===0)&&await $.fetchProfiles();const l=++U;A[s]=l,g.value=!0,(!S.value[s]||d)&&(k.value="");try{const c=await vl(s);A[s]===l&&(S.value={...S.value,[s]:c}),l===U&&(k.value="")}catch(c){l===U&&(k.value=c?.message||t("skillsUsage.loadFailed"))}finally{l===U&&(g.value=!1)}}return sl(()=>{V(7)}),(s,d)=>(n(),r("div",Q,[e("header",X,[e("div",Y,[e("h2",j,a(i(t)("skillsUsage.title")),1),e("p",G,a(i(t)("skillsUsage.subtitle")),1)]),e("div",J,[e("div",{class:"period-selector",role:"group","aria-label":i(t)("skillsUsage.periodSelector")},[(n(),r(m,null,f(He,l=>K(i(W),{key:l,size:"small",secondary:h.value===l,quaternary:h.value!==l,type:h.value===l?"primary":"default","aria-pressed":h.value===l?"true":"false",onClick:c=>V(l)},{default:E(()=>[C(a(i(t)("skillsUsage.periodLabel",{days:l})),1)]),_:2},1032,["secondary","quaternary","type","aria-pressed","onClick"])),64))],8,Z),K(i(W),{size:"small",quaternary:"",loading:g.value,onClick:d[0]||(d[0]=l=>V(h.value,!0))},{default:E(()=>[C(a(i(t)("skillsUsage.refresh")),1)]),_:1},8,["loading"])])]),e("div",ee,[k.value&&!o.value?(n(),r("div",le,a(k.value),1)):g.value&&!o.value?(n(),r("div",se,a(i(t)("common.loading")),1)):o.value?(n(),r(m,{key:2},[k.value?(n(),r("div",ae,a(k.value),1)):F("",!0),e("section",te,[e("div",{class:H(["usage-panel chart-panel",{"is-refreshing":Qe.value}]),"data-testid":"skills-usage-chart"},[e("div",ie,[e("h3",null,a(i(t)("skillsUsage.dailyTrend")),1),e("span",null,a(i(t)("skillsUsage.periodSummary",{days:o.value.period_days})),1)]),L.value?(n(),r(m,{key:1},[e("div",ne,[(n(!0),r(m,null,f(o.value.by_day,(l,c)=>(n(),r("div",{key:l.date,class:"skill-bar-col",tabindex:"0",onMouseenter:_=>R(l,c),onFocusin:_=>R(l,c),onMouseleave:_=>O(l),onFocusout:_=>O(l)},[e("div",ue,[e("div",{class:"skill-bar-fill",style:b({height:Je(l.total_count)})},[(n(!0),r(m,null,f(I(l),_=>(n(),r("div",{key:_.key,class:"skill-bar-segment","data-skill":_.key,style:b({flex:Ze(_.count),background:_.color})},null,12,de))),128))],4)])],40,re))),128))]),y.value?(n(),r("div",{key:0,class:H(["floating-tooltip",Ye.value])},[e("div",_e,a(y.value.date),1),(n(!0),r(m,null,f(Xe.value,l=>(n(),r("div",{key:l.key,class:"tooltip-row"},[e("i",{class:"tooltip-dot",style:b({background:l.color})},null,4),e("span",null,a(l.label),1),e("strong",null,a(l.count),1)]))),128)),e("div",ce,[e("span",null,a(i(t)("skillsUsage.totalActions")),1),e("strong",null,a(y.value.total_count),1)])],2)):F("",!0),e("div",ve,[e("span",null,a(o.value.by_day[0]?.date.slice(5)),1),e("span",null,a(o.value.by_day[o.value.by_day.length-1]?.date.slice(5)),1)])],64)):(n(),r("div",oe,a(i(t)("skillsUsage.noData")),1))],2),e("div",{class:"summary-grid","data-testid":"skills-usage-stats","aria-label":i(t)("skillsUsage.summary")},[e("div",ke,[e("div",me,a(i(t)("skillsUsage.totalActions")),1),e("div",pe,a(o.value.summary.total_skill_actions),1)]),e("div",ge,[e("div",ye,a(i(t)("skillsUsage.loads")),1),e("div",fe,a(o.value.summary.total_skill_loads),1)]),e("div",be,[e("div",Se,a(i(t)("skillsUsage.edits")),1),e("div",Ue,a(o.value.summary.total_skill_edits),1)]),e("div",we,[e("div",xe,a(i(t)("skillsUsage.distinctSkills")),1),e("div",Ce,a(o.value.summary.distinct_skills_used),1)])],8,he)]),e("section",$e,[e("div",De,[e("h3",null,a(i(t)("skillsUsage.topSkills")),1),e("span",null,a(i(t)("skillsUsage.periodSummary",{days:o.value.period_days})),1)]),L.value?(n(),r("div",{key:1,class:"skills-table",role:"table","aria-label":i(t)("skillsUsage.topSkills")},[e("div",Fe,[e("span",Be,a(i(t)("skillsUsage.skill")),1),e("span",Pe,a(i(t)("skillsUsage.loads")),1),e("span",qe,a(i(t)("skillsUsage.edits")),1),e("span",Te,a(i(t)("skillsUsage.share")),1),e("span",Ae,a(i(t)("skillsUsage.lastUsed")),1)]),(n(!0),r(m,null,f(o.value.top_skills,l=>(n(),r("div",{key:l.skill,class:"skills-row",role:"row"},[e("span",Le,[e("i",{class:"skill-color-dot",style:b({background:M(l.skill)})},null,4),C(" "+a(l.skill),1)]),e("span",Ne,a(l.view_count),1),e("span",ze,a(l.manage_count),1),e("span",Ie,[e("span",Re,[e("span",{style:b({width:N(l.percentage),background:M(l.skill)})},null,4)]),C(" "+a(N(l.percentage)),1)]),e("span",Oe,a(Ge(l.last_used_at)),1)]))),128))],8,Ve)):(n(),r("div",Me,a(i(t)("skillsUsage.noData")),1))])],64)):F("",!0)])]))}})})),hl=q((()=>{})),kl,ml=q((()=>{We(),We(),hl(),rl(),kl=ul(Ee,[["__scopeId","data-v-efe6595e"]])}));ml();export{kl as default};
|