hermes-web-ui 0.6.24 → 0.6.25
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-DV-LtXVi.js → ChannelsView-p3dSvD02.js} +1 -1
- package/dist/client/assets/js/{ChatPanel-DyZWRnQs.js → ChatPanel-DRCE0v4g.js} +1 -1
- package/dist/client/assets/js/{ChatView-CuWpMwOd.js → ChatView-CAoJp8-Q.js} +1 -1
- package/dist/client/assets/js/{CodingAgentsView-D_Ngirz0.js → CodingAgentsView-X0I-H0Yu.js} +1 -1
- package/dist/client/assets/js/{DesktopPetView-BGY-7Dcd.js → DesktopPetView-BH9a1zur.js} +1 -1
- package/dist/client/assets/js/{DevicesView-BNZqDe2U.js → DevicesView-CMcwuGZ6.js} +1 -1
- package/dist/client/assets/js/{FileEditor-BPFC-M3W.js → FileEditor-CzWdryd5.js} +1 -1
- package/dist/client/assets/js/{FileRenameModal-5mJtyNBP.js → FileRenameModal-C2YmHkSN.js} +1 -1
- package/dist/client/assets/js/{FilesView-CRbkvC6l.js → FilesView-CKxvh6yi.js} +1 -1
- package/dist/client/assets/js/{GlobalAgentView-my3AKdll.js → GlobalAgentView-77p8MKvy.js} +1 -1
- package/dist/client/assets/js/{GroupChatView-btwSVoC0.js → GroupChatView-D1WFEfIs.js} +1 -1
- package/dist/client/assets/js/{HistoryMessageList-IubX9-tb.js → HistoryMessageList-BcG-gj6N.js} +1 -1
- package/dist/client/assets/js/{HistoryView-N3v7MNfo.js → HistoryView-CzybyBXj.js} +1 -1
- package/dist/client/assets/js/{JobsView-CHq_TJQ6.js → JobsView-BviznpSY.js} +1 -1
- package/dist/client/assets/js/{KanbanView-BMh8IgQo.js → KanbanView-B0c6OMrf.js} +1 -1
- package/dist/client/assets/js/{LoginView-sE4g4Zua.js → LoginView-B9nES8-3.js} +1 -1
- package/dist/client/assets/js/{LogsView-awh5ZCp8.js → LogsView-kLI6-05w.js} +1 -1
- package/dist/client/assets/js/{MarkdownRenderer-BbGvq6C-.js → MarkdownRenderer-DQvs79tf.js} +1 -1
- package/dist/client/assets/js/{McpManagerView-CnSCITtQ.js → McpManagerView-BZU1Puf0.js} +1 -1
- package/dist/client/assets/js/{MemoryView-CbQOeUKI.js → MemoryView-BH4LZtYd.js} +1 -1
- package/dist/client/assets/js/{MessageItem-DSHiAgFE.js → MessageItem-Cu3_aQT8.js} +2 -2
- package/dist/client/assets/js/{MessageList-oRCKlivC.js → MessageList-Ds_mjMbf.js} +1 -1
- package/dist/client/assets/js/{ModelsView-B0esXyBm.js → ModelsView-CZK6wwtt.js} +1 -1
- package/dist/client/assets/js/{OutlinePanel-BofcYepl.js → OutlinePanel-CYuSrNX9.js} +1 -1
- package/dist/client/assets/js/{PageSidebarFooter-BPeWlPvZ.js → PageSidebarFooter-Dk-OfmNy.js} +1 -1
- package/dist/client/assets/js/{PerformanceView-gc12dWCZ.js → PerformanceView-DkXk4HB_.js} +1 -1
- package/dist/client/assets/js/{PetdexView-CZjbg41u.js → PetdexView-DGkSZYVi.js} +1 -1
- package/dist/client/assets/js/{PluginsView-DRwyXTJC.js → PluginsView-D197obRC.js} +1 -1
- package/dist/client/assets/js/{ProfilesView-zVd3TfNW.js → ProfilesView-BhGBaYDE.js} +1 -1
- package/dist/client/assets/js/{SettingRow-G7ZusJw_.js → SettingRow-DfRI-z7L.js} +1 -1
- package/dist/client/assets/js/{SettingsCircuitBadge-CFo2KqP-.js → SettingsCircuitBadge-Eiv8LQz0.js} +1 -1
- package/dist/client/assets/js/{SettingsView-DDjt6UpN.js → SettingsView-B4ipIIOj.js} +1 -1
- package/dist/client/assets/js/{SkillsUsageView-DnVnAYHG.js → SkillsUsageView-DT4o1LA9.js} +1 -1
- package/dist/client/assets/js/{SkillsView-CHi4L7Oi.js → SkillsView-CUK-9OLz.js} +1 -1
- package/dist/client/assets/js/{TerminalPanel-Dx7huJY2.js → TerminalPanel-gyT2AS7Z.js} +1 -1
- package/dist/client/assets/js/{TerminalView-PQIIFHwX.js → TerminalView-C3a6BwEG.js} +1 -1
- package/dist/client/assets/js/{UsageView-Dzr2wBc7.js → UsageView-DrUS9OIk.js} +1 -1
- package/dist/client/assets/js/{VersionPreviewView-JQrieRPU.js → VersionPreviewView-qbXwqYd3.js} +1 -1
- package/dist/client/assets/js/{WorkflowView-DRanDY9s.js → WorkflowView-D-6z--9A.js} +1 -1
- package/dist/client/assets/js/{_plugin-vue_export-helper-fFMkIM4P.js → _plugin-vue_export-helper-CvnFozKy.js} +2 -2
- package/dist/client/assets/js/{chat-timestamp-CZtP79YD.js → chat-timestamp-CkDNtK9Y.js} +1 -1
- package/dist/client/assets/js/{files-DOpu4Qfg.js → files-CBYc0MSs.js} +1 -1
- package/dist/client/assets/js/index-B2IKGvbR.js +3 -0
- package/dist/client/assets/js/{models-y7NaVj-e.js → models-DetB4_Ug.js} +1 -1
- package/dist/client/assets/js/{session-browser-prefs-BOqwOeHi.js → session-browser-prefs-BYjSnxJq.js} +1 -1
- package/dist/client/assets/js/{skills-D7ZMzzzG.js → skills-5qxphanX.js} +1 -1
- package/dist/client/assets/js/{system-CRmVbE8Z.js → system-Onp4yS9N.js} +1 -1
- package/dist/client/assets/js/{ttsHelpers-vHLmbeY4.js → ttsHelpers-DNcZ5khq.js} +1 -1
- package/dist/client/assets/js/{useSttSettings-s4LBWl55.js → useSttSettings-C-jexrW7.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/agent-bridge/python/bridge_runtime.py +2 -2
- package/dist/server/index.js +3 -3
- package/dist/server/openapi.json +1 -1
- package/package.json +1 -1
- package/dist/client/assets/js/index-Brl4qW5V.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as wi,n as A}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as Ye,A as $e,Bn as Ue,Bt as Ie,Dn as Ui,E as ce,Hn as r,I as ki,It as W,K as Re,Kt as Z,M as xe,Nn as Me,O as j,Ot as K,P as Pi,Qn as Ca,V as re,Wt as Ci,an as g,cn as O,cr as e,er as $,et as Ti,f as me,fn as N,g as Ta,hn as te,in as C,jn as U,kn as ke,m as ee,mt as G,nt as Ai,on as Y,pn as a,pr as y,sn as B,t as ie,tn as ye,u as xi,ur as Ve,v as Xe,vn as ge,w as Aa}from"./ui-vendor-DDMfmCj2.js";import{M as $i,N as Mi,O as se,P as Oi,k as ae}from"./vue-vendor-BsMpqyaC.js";import{d as Di,f as Oe,n as le,t as ne,u as Ne}from"./_plugin-vue_export-helper-fFMkIM4P.js";import{N as Fi}from"./vendor-B1Lfatlz.js";import{l as Ii,x as je}from"./system-CRmVbE8Z.js";import{At as Ri,Dt as xa,Et as $a,F as We,I as Ge,L as be,P as zi,R as he,S as Je,Tt as Hi,b as Vi,c as Li,f as Ni,g as Ma,h as Ki,jt as Ei,l as Bi,m as qi,p as Yi,s as Xi,u as ji,v as Wi,wt as Gi,x as Qe,y as Ji}from"./index-Brl4qW5V.js";import{n as Se,t as H}from"./SettingRow-G7ZusJw_.js";import{n as Qi,t as Zi}from"./session-browser-prefs-BOqwOeHi.js";import{a as el,c as tl,d as sl,i as al,l as il,n as ll,o as Ze,r as nl,s as ol,t as rl,u as ul}from"./useSttSettings-s4LBWl55.js";import{a as dl,c as ze,d as cl,i as vl,l as Oa,n as Da,o as Ke,p as pl,r as Fa,s as ml,t as Ia,u as Ee}from"./ttsHelpers-vHLmbeY4.js";import{n as gl,t as et}from"./chat-input-height-BhYiNOv7.js";import{n as _l,t as fl}from"./models-y7NaVj-e.js";var tt,st,at,Ra,it=A((()=>{Z(),ie(),se(),be(),Ri(),zi(),gl(),Se(),tt={class:"settings-section"},st={class:"notify-controls"},at={class:"chat-input-height-controls"},Ra=te({__name:"DisplaySettings",setup(p){const t=he(),n=re(),{t:i}=ae(),{brightness:s,setBrightness:w}=Ei(),P=[{label:i("settings.display.themeLight"),value:"light"},{label:i("settings.display.themeDark"),value:"dark"},{label:i("settings.display.themeSystem"),value:"system"}],_=C(()=>et(t.display.chat_input_height));async function m(T){try{await t.saveSection("display",T),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}function l(T){const M=T;w(M),m({skin:M})}function b(T){return m({chat_input_height:et(T)})}function S(){return m({chat_input_height:null})}function h(T){return T.reason==="insecure"?"settings.display.notifyOnCompleteInsecure":T.reason==="unsupported"?"settings.display.notifyOnCompleteUnsupported":"settings.display.notifyOnCompleteDenied"}async function R(T){if(T){const M=await We();if(!M.granted){n.error(i(h(M)));return}}await m({notify_on_complete:T}),T&&Ge({title:"Hermes",body:i("settings.display.notifyOnCompleteTest"),icon:"/coding-agents/hermes.png",tag:`hermes-complete-test-${Date.now()}`})}async function L(){const T=await We();if(!T.granted){n.error(i(h(T)));return}if(!await Ge({title:"Hermes",body:i("settings.display.notifyOnCompleteTest"),icon:"/coding-agents/hermes.png",tag:`hermes-complete-test-${Date.now()}`})){n.error(i("settings.display.notifyOnCompleteTestFailed"));return}n.success(i("settings.display.notifyOnCompleteTestSent"))}return(T,M)=>(U(),O("section",tt,[a(H,{label:e(i)("settings.display.theme"),hint:e(i)("settings.display.themeHint")},{default:r(()=>[a(e(G),{value:e(s),options:P,size:"small","consistent-menu-width":!1,class:"input-sm","onUpdate:value":l},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.streaming"),hint:e(i)("settings.display.streamingHint")},{default:r(()=>[a(e(ee),{value:e(t).display.streaming,"onUpdate:value":M[0]||(M[0]=D=>m({streaming:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.compact"),hint:e(i)("settings.display.compactHint")},{default:r(()=>[a(e(ee),{value:e(t).display.compact,"onUpdate:value":M[1]||(M[1]=D=>m({compact:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.showReasoning"),hint:e(i)("settings.display.showReasoningHint")},{default:r(()=>[a(e(ee),{value:e(t).display.show_reasoning,"onUpdate:value":M[2]||(M[2]=D=>m({show_reasoning:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.showCost"),hint:e(i)("settings.display.showCostHint")},{default:r(()=>[a(e(ee),{value:e(t).display.show_cost,"onUpdate:value":M[3]||(M[3]=D=>m({show_cost:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.inlineDiffs"),hint:e(i)("settings.display.inlineDiffsHint")},{default:r(()=>[a(e(ee),{value:e(t).display.inline_diffs,"onUpdate:value":M[4]||(M[4]=D=>m({inline_diffs:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.bellOnComplete"),hint:e(i)("settings.display.bellOnCompleteHint")},{default:r(()=>[a(e(ee),{value:e(t).display.bell_on_complete,"onUpdate:value":M[5]||(M[5]=D=>m({bell_on_complete:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.notifyOnComplete"),hint:`${e(i)("settings.display.notifyOnCompleteHint")} ${e(i)("settings.display.notifyOnCompleteMacHint")}`},{default:r(()=>[g("div",st,[a(e(ee),{value:e(t).display.notify_on_complete,"onUpdate:value":R},null,8,["value"]),a(e(K),{size:"tiny",secondary:"",onClick:L},{default:r(()=>[N(y(e(i)("settings.display.notifyOnCompleteTestButton")),1)]),_:1})])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.chatInputHeight"),hint:e(i)("settings.display.chatInputHeightHint")},{default:r(()=>[g("div",at,[a(e(ce),{value:_.value,min:e(48),max:e(400),step:8,"show-button":!1,size:"small",class:"input-sm","onUpdate:value":b},{suffix:r(()=>[...M[6]||(M[6]=[N("px",-1)])]),_:1},8,["value","min","max"]),a(e(K),{size:"tiny",secondary:"",onClick:S},{default:r(()=>[N(y(e(i)("common.reset")),1)]),_:1})])]),_:1},8,["label","hint"])]))}})})),yl=A((()=>{})),za,bl=A((()=>{it(),it(),yl(),le(),za=ne(Ra,[["__scopeId","data-v-46e61b5e"]])})),lt,Ha,nt=A((()=>{Z(),ie(),se(),be(),Se(),lt={class:"settings-section"},Ha=te({__name:"AgentSettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s={};function w(_){t.updateLocal("agent",_),t.saveSection("agent",_).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function P(_,m){t.updateLocal("agent",{[_]:m}),s[_]&&clearTimeout(s[_]),s[_]=setTimeout(async()=>{try{await t.saveSection("agent",{[_]:m}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(_,m)=>(U(),O("section",lt,[a(H,{label:e(i)("settings.agent.maxTurns"),hint:e(i)("settings.agent.maxTurnsHint")},{default:r(()=>[a(e(ce),{value:e(t).agent.max_turns,min:1,max:200,step:5,size:"small",class:"input-sm","onUpdate:value":m[0]||(m[0]=l=>l!=null&&P("max_turns",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.gatewayTimeout"),hint:e(i)("settings.agent.gatewayTimeoutHint")},{default:r(()=>[a(e(ce),{value:e(t).agent.gateway_timeout,min:60,max:7200,step:60,size:"small",class:"input-sm","onUpdate:value":m[1]||(m[1]=l=>l!=null&&P("gateway_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.restartDrainTimeout"),hint:e(i)("settings.agent.restartDrainTimeoutHint")},{default:r(()=>[a(e(ce),{value:e(t).agent.restart_drain_timeout,min:10,max:300,step:10,size:"small",class:"input-sm","onUpdate:value":m[2]||(m[2]=l=>l!=null&&P("restart_drain_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.toolEnforcement"),hint:e(i)("settings.agent.toolEnforcementHint")},{default:r(()=>[a(e(G),{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":m[3]||(m[3]=l=>w({tool_use_enforcement:l}))},null,8,["value","options"])]),_:1},8,["label","hint"])]))}})})),hl=A((()=>{})),Va,Sl=A((()=>{nt(),nt(),hl(),le(),Va=ne(Ha,[["__scopeId","data-v-d06d83a7"]])})),ot,rt,ut,La,dt=A((()=>{Z(),ie(),se(),be(),$a(),Se(),ot={class:"settings-section gateway-auto-start-settings"},rt={class:"section-title"},ut={class:"section-hint"},La=te({__name:"GatewayAutoStartSettings",setup(p){const t=he(),n=xa(),i=re(),{t:s}=ae(),w=C(()=>t.gatewayAutoStart.enabled!==!1),P=C(()=>Array.isArray(t.gatewayAutoStart.include)?"include":"all"),_=C(()=>t.gatewayAutoStart.management==="unified"),m=C(()=>t.gatewayAutoStart.include||[]),l=C(()=>t.gatewayAutoStart.exclude||[]),b=C(()=>(n.activeProfileName||n.activeProfile?.name||"default")==="default"),S=C(()=>n.profiles.map(V=>({label:V.name,value:V.name}))),h=C(()=>[{label:s("settings.gatewayAutoStart.modeAll"),value:"all"},{label:s("settings.gatewayAutoStart.modeInclude"),value:"include"}]);function R(V){const X=new Set,f=[];for(const o of V){const c=String(o||"").trim();!c||X.has(c)||(X.add(c),f.push(c))}return f}async function L(V){try{t.updateLocal("gatewayAutoStart",V),await t.saveSection("gatewayAutoStart",V,{restart:!1}),await t.fetchSettings(),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}function T(V){L(V==="include"?{include:t.gatewayAutoStart.include||[],exclude:null}:{include:null})}function M(V){L({management:V?"unified":"per_profile"})}function D(V){L({include:R(V),exclude:null})}function E(V){const X=R(V);L({exclude:X.length>0?X:null})}return(V,X)=>(U(),O("section",ot,[g("h3",rt,y(e(s)("settings.gatewayAutoStart.title")),1),g("p",ut,y(e(s)("settings.gatewayAutoStart.description")),1),a(H,{label:e(s)("settings.gatewayAutoStart.enabled"),hint:e(s)("settings.gatewayAutoStart.enabledHint")},{default:r(()=>[a(e(ee),{value:w.value,"onUpdate:value":X[0]||(X[0]=f=>L({enabled:f}))},null,8,["value"])]),_:1},8,["label","hint"]),b.value?(U(),Y(H,{key:0,label:e(s)("settings.gatewayAutoStart.management"),hint:e(s)("settings.gatewayAutoStart.managementHint")},{default:r(()=>[a(e(ee),{value:_.value,"onUpdate:value":M},null,8,["value"])]),_:1},8,["label","hint"])):B("",!0),a(H,{label:e(s)("settings.gatewayAutoStart.mode"),hint:e(s)("settings.gatewayAutoStart.modeHint")},{default:r(()=>[a(e(G),{value:P.value,options:h.value,size:"small",class:"input-md","onUpdate:value":T},null,8,["value","options"])]),_:1},8,["label","hint"]),P.value==="include"?(U(),Y(H,{key:1,label:e(s)("settings.gatewayAutoStart.include"),hint:e(s)("settings.gatewayAutoStart.includeHint")},{default:r(()=>[a(e(G),{multiple:"",filterable:"",value:m.value,options:S.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":D},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):B("",!0),P.value==="all"?(U(),Y(H,{key:2,label:e(s)("settings.gatewayAutoStart.exclude"),hint:e(s)("settings.gatewayAutoStart.excludeHint")},{default:r(()=>[a(e(G),{multiple:"",filterable:"",value:l.value,options:S.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":E},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):B("",!0)]))}})})),wl=A((()=>{})),Na,Ul=A((()=>{dt(),dt(),wl(),le(),Na=ne(La,[["__scopeId","data-v-a9b52cd2"]])})),ct,vt,pt,mt,Ka,gt=A((()=>{Z(),ie(),se(),be(),Se(),ct={class:"settings-section proxy-settings"},vt={class:"section-title"},pt={class:"section-hint"},mt={class:"settings-actions"},Ka=te({__name:"ProxySettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s=["HTTPS_PROXY","HTTP_PROXY","ALL_PROXY","NO_PROXY"],w=Ca({HTTPS_PROXY:"",HTTP_PROXY:"",ALL_PROXY:"",NO_PROXY:""});Ue(()=>t.proxy,_=>{for(const m of s)w[m]=String(_?.[m]||"")},{immediate:!0,deep:!0});async function P(){try{await t.saveSection("proxy",{...w}),await t.fetchSettings(),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}return(_,m)=>(U(),O("section",ct,[g("h3",vt,y(e(i)("settings.proxy.title")),1),g("p",pt,y(e(i)("settings.proxy.description")),1),a(H,{label:e(i)("settings.proxy.httpsProxy"),hint:e(i)("settings.proxy.httpsProxyHint")},{default:r(()=>[a(e(W),{value:w.HTTPS_PROXY,"onUpdate:value":m[0]||(m[0]=l=>w.HTTPS_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"http://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.httpProxy"),hint:e(i)("settings.proxy.httpProxyHint")},{default:r(()=>[a(e(W),{value:w.HTTP_PROXY,"onUpdate:value":m[1]||(m[1]=l=>w.HTTP_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"http://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.allProxy"),hint:e(i)("settings.proxy.allProxyHint")},{default:r(()=>[a(e(W),{value:w.ALL_PROXY,"onUpdate:value":m[2]||(m[2]=l=>w.ALL_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"socks5://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.noProxy"),hint:e(i)("settings.proxy.noProxyHint")},{default:r(()=>[a(e(W),{value:w.NO_PROXY,"onUpdate:value":m[3]||(m[3]=l=>w.NO_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"localhost,127.0.0.1,.local"},null,8,["value"])]),_:1},8,["label","hint"]),g("div",mt,[a(e(K),{type:"primary",loading:e(t).saving,onClick:P},{default:r(()=>[N(y(e(i)("settings.proxy.save")),1)]),_:1},8,["loading"])])]))}})})),kl=A((()=>{})),Ea,Pl=A((()=>{gt(),gt(),kl(),le(),Ea=ne(Ka,[["__scopeId","data-v-a377191a"]])})),_t,Ba,ft=A((()=>{Z(),ie(),se(),be(),Se(),_t={class:"settings-section"},Ba=te({__name:"MemorySettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s={};function w(_){t.updateLocal("memory",_),t.saveSection("memory",_).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function P(_,m){t.updateLocal("memory",{[_]:m}),s[_]&&clearTimeout(s[_]),s[_]=setTimeout(async()=>{try{await t.saveSection("memory",{[_]:m}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(_,m)=>(U(),O("section",_t,[a(H,{label:e(i)("settings.memory.enabled"),hint:e(i)("settings.memory.enabledHint")},{default:r(()=>[a(e(ee),{value:e(t).memory.memory_enabled,"onUpdate:value":m[0]||(m[0]=l=>w({memory_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.userProfile"),hint:e(i)("settings.memory.userProfileHint")},{default:r(()=>[a(e(ee),{value:e(t).memory.user_profile_enabled,"onUpdate:value":m[1]||(m[1]=l=>w({user_profile_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.charLimit"),hint:e(i)("settings.memory.charLimitHint")},{default:r(()=>[a(e(ce),{value:e(t).memory.memory_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":m[2]||(m[2]=l=>l!=null&&P("memory_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.userCharLimit"),hint:e(i)("settings.memory.userCharLimitHint")},{default:r(()=>[a(e(ce),{value:e(t).memory.user_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":m[3]||(m[3]=l=>l!=null&&P("user_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Cl=A((()=>{})),qa,Tl=A((()=>{ft(),ft(),Cl(),le(),qa=ne(Ba,[["__scopeId","data-v-b2529605"]])})),yt,Ya,bt=A((()=>{Z(),ie(),se(),be(),Se(),yt={class:"settings-section"},Ya=te({__name:"CompressionSettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s={enabled:!0,threshold:.5,target_ratio:.2,protect_last_n:20,protect_first_n:3},w={};function P(m){t.updateLocal("compression",m),t.saveSection("compression",m).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function _(m,l){t.updateLocal("compression",{[m]:l}),w[m]&&clearTimeout(w[m]),w[m]=setTimeout(async()=>{try{await t.saveSection("compression",{[m]:l}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(m,l)=>(U(),O("section",yt,[a(H,{label:e(i)("settings.compression.enabled"),hint:e(i)("settings.compression.enabledHint")},{default:r(()=>[a(e(ee),{value:e(t).compression.enabled??s.enabled,size:"small","onUpdate:value":l[0]||(l[0]=b=>P({enabled:b}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.threshold"),hint:e(i)("settings.compression.thresholdHint")},{default:r(()=>[a(e(ce),{value:e(t).compression.threshold??s.threshold,min:.1,max:.95,step:.05,size:"small",class:"input-sm","onUpdate:value":l[1]||(l[1]=b=>b!=null&&_("threshold",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.targetRatio"),hint:e(i)("settings.compression.targetRatioHint")},{default:r(()=>[a(e(ce),{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]=b=>b!=null&&_("target_ratio",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.protectLastN"),hint:e(i)("settings.compression.protectLastNHint")},{default:r(()=>[a(e(ce),{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]=b=>b!=null&&_("protect_last_n",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.protectFirstN"),hint:e(i)("settings.compression.protectFirstNHint")},{default:r(()=>[a(e(ce),{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]=b=>b!=null&&_("protect_first_n",b))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Al=A((()=>{})),Xa,xl=A((()=>{bt(),bt(),Al(),le(),Xa=ne(Ya,[["__scopeId","data-v-b584a6a0"]])})),ht,ja,St=A((()=>{Z(),ie(),se(),be(),Zi(),Se(),ht={class:"settings-section"},ja=te({__name:"SessionSettings",setup(p){const t=he(),n=Qi(),i=re(),{t:s}=ae(),w={};function P(b){t.updateLocal("session_reset",b),t.saveSection("session_reset",b).then(()=>{i.success(s("settings.saved"))}).catch(()=>{i.error(s("settings.saveFailed"))})}function _(b,S){t.updateLocal("session_reset",{[b]:S}),w[b]&&clearTimeout(w[b]),w[b]=setTimeout(async()=>{try{await t.saveSection("session_reset",{[b]:S}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}},300)}async function m(b){try{await t.saveSection("approvals",{mode:b?"manual":"off"}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}async function l(b,S){try{t.updateLocal(b,{write_approval:S}),await t.saveSection(b,{write_approval:S}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}return(b,S)=>(U(),O("section",ht,[a(H,{label:e(s)("settings.session.requireAuth"),hint:e(s)("settings.session.requireAuthHint")},{default:r(()=>[a(e(ee),{value:e(t).approvals.mode==="manual","onUpdate:value":m},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.memoryWriteApproval"),hint:e(s)("settings.session.memoryWriteApprovalHint")},{default:r(()=>[a(e(ee),{value:e(t).memory.write_approval===!0,"onUpdate:value":S[0]||(S[0]=h=>l("memory",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.skillsWriteApproval"),hint:e(s)("settings.session.skillsWriteApprovalHint")},{default:r(()=>[a(e(ee),{value:e(t).skills.write_approval===!0,"onUpdate:value":S[1]||(S[1]=h=>l("skills",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.mode"),hint:e(s)("settings.session.modeHint")},{default:r(()=>[a(e(G),{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":S[2]||(S[2]=h=>P({mode:h}))},null,8,["value","options"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.idleMinutes"),hint:e(s)("settings.session.idleMinutesHint")},{default:r(()=>[a(e(ce),{value:e(t).sessionReset.idle_minutes,min:10,max:10080,step:30,size:"small",class:"input-sm","onUpdate:value":S[3]||(S[3]=h=>h!=null&&_("idle_minutes",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.atHour"),hint:e(s)("settings.session.atHourHint")},{default:r(()=>[a(e(ce),{value:e(t).sessionReset.at_hour,min:0,max:23,step:1,size:"small",class:"input-sm","onUpdate:value":S[4]||(S[4]=h=>h!=null&&_("at_hour",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.liveMonitorHumanOnly"),hint:e(s)("settings.session.liveMonitorHumanOnlyHint")},{default:r(()=>[a(e(ee),{value:e(n).humanOnly,"onUpdate:value":S[5]||(S[5]=h=>e(n).setHumanOnly(h))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),$l=A((()=>{})),Wa,Ml=A((()=>{St(),St(),$l(),le(),Wa=ne(ja,[["__scopeId","data-v-5027aa2c"]])})),wt,Ga,Ut=A((()=>{Z(),ie(),se(),be(),Se(),wt={class:"settings-section"},Ga=te({__name:"PrivacySettings",setup(p){const t=he(),n=re(),{t:i}=ae();async function s(w){try{await t.saveSection("privacy",w),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}return(w,P)=>(U(),O("section",wt,[a(H,{label:e(i)("settings.privacy.redactPii"),hint:e(i)("settings.privacy.redactPiiHint")},{default:r(()=>[a(e(ee),{value:e(t).privacy.redact_pii,"onUpdate:value":P[0]||(P[0]=_=>s({redact_pii:_}))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Ol=A((()=>{})),Ja,Dl=A((()=>{Ut(),Ut(),Ol(),le(),Ja=ne(Ga,[["__scopeId","data-v-43145f27"]])})),kt,Pt,Ct,Tt,At,xt,$t,Mt,Qa,Ot=A((()=>{Z(),ie(),fl(),Ii(),se(),kt={class:"settings-section"},Pt={key:0,class:"empty-hint"},Ct={class:"provider-header"},Tt={class:"provider-name"},At={key:0,class:"provider-fields"},xt={class:"field-row"},$t={key:1,class:"provider-fields"},Mt={class:"field-row"},Qa=te({__name:"ModelSettings",setup(p){const{t}=ae(),n=_l(),i=re(),s=$(null),w=$({});ke(()=>{n.providers.length===0&&n.fetchProviders()});const P=b=>!n.providers.find(S=>S.provider===b)?.builtin&&b.startsWith("custom:");function _(b){if(!(b in w.value)){const S=n.providers.find(h=>h.provider===b);w.value[b]=S?.api_key||""}return w.value[b]}async function m(b){const S=_(b);if(!S.trim()){i.warning(t("settings.models.apiKeyPlaceholder"));return}s.value=b;try{await je(b,{api_key:S.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(h){i.error(h.message||t("settings.models.saveFailed"))}finally{s.value=null}}async function l(b){const S=_(b);s.value=b;try{await je(b,{api_key:S.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(h){i.error(h.message||t("settings.models.saveFailed"))}finally{s.value=null}}return(b,S)=>(U(),O("section",kt,[a(e(Ta),{show:e(n).loading},{default:r(()=>[e(n).providers.length===0?(U(),O("div",Pt,[a(e(Ci),{description:e(t)("settings.models.noProviders")},null,8,["description"])])):B("",!0),(U(!0),O(ye,null,Me(e(n).providers,h=>(U(),O("div",{key:h.provider,class:"provider-section"},[g("div",Ct,[g("h4",Tt,y(h.label),1),g("span",{class:Ve(["type-badge",P(h.provider)?"custom":"builtin"])},y(P(h.provider)?e(t)("models.customType"):e(t)("models.builtIn")),3)]),P(h.provider)?(U(),O("div",$t,[g("div",Mt,[a(e(W),{value:_(h.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>w.value[h.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(K),{type:"primary",size:"small",loading:s.value===h.provider,onClick:R=>l(h.provider)},{default:r(()=>[N(y(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])])):(U(),O("div",At,[g("div",xt,[a(e(W),{value:_(h.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>w.value[h.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(K),{type:"primary",size:"small",loading:s.value===h.provider,onClick:R=>m(h.provider)},{default:r(()=>[N(y(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])]))]))),128))]),_:1},8,["show"])]))}})})),Fl=A((()=>{})),Za,Il=A((()=>{Ot(),Ot(),Fl(),le(),Za=ne(Qa,[["__scopeId","data-v-8cd750e1"]])})),Dt,Ft,It,Rt,zt,Ht,Vt,Lt,Nt,Kt,Et,Bt,qt,Yt,Xt,jt,Wt,Gt,Jt,Qt,Zt,es,ts,ss,as,ei,is=A((()=>{Z(),ie(),se(),Ma(),Hi(),Dt=wi(Fi()),Ft={class:"account-settings"},It={class:"section-desc"},Rt={class:"avatar-section"},zt={class:"section-title"},Ht={class:"avatar-row"},Vt={class:"avatar-display"},Lt={class:"avatar-actions"},Nt={class:"avatar-hint"},Kt={class:"action-buttons"},Et={class:"configured-section"},Bt={class:"action-row"},qt={class:"action-label"},Yt={class:"action-buttons"},Xt={class:"locked-ips-section"},jt={class:"section-title"},Wt={class:"action-row",style:{"margin-bottom":"12px"}},Gt={class:"action-label"},Jt={class:"action-buttons"},Qt={key:0,class:"locked-list"},Zt={class:"locked-info"},es={class:"locked-ip"},ts={class:"locked-badge"},ss={class:"locked-ttl"},as={key:1,class:"empty-hint"},ei=te({__name:"AccountSettings",setup(p){const{t}=ae(),n=re(),i=$(null),s=$(!1),w=$(null),P=$(null),_=$(!1);function m(d,u){return new Promise((k,J)=>{const ue=new FileReader;ue.onload=()=>{const pe=new Image;pe.onload=()=>{const de=document.createElement("canvas");de.width=pe.width,de.height=pe.height,de.getContext("2d").drawImage(pe,0,0);const Pe=Ce=>{const De=de.toDataURL("image/jpeg",Ce);De.length<=u||Ce<=.3?k(De):Pe(Ce-.1)};Pe(.8)},pe.onerror=J,pe.src=ue.result},ue.onerror=J,ue.readAsDataURL(d)})}async function l(d){const u=d.target,k=u.files?.[0];if(k){if(!["image/png","image/jpeg","image/webp"].includes(k.type)){n.error(t("settings.userAvatar.invalidType")),u.value="";return}if(k.size>1024*1024){n.error(t("settings.userAvatar.tooLarge")),u.value="";return}_.value=!0;try{let J;k.size>500*1024?J=await m(k,500*1024):J=await new Promise((ue,pe)=>{const de=new FileReader;de.onload=()=>ue(de.result),de.onerror=pe,de.readAsDataURL(k)}),await Je({type:"image",dataUrl:J}),w.value={type:"image",dataUrl:J},n.success(t("settings.userAvatar.saveSuccess"))}catch(J){n.error(J.message||t("settings.userAvatar.saveFailed"))}finally{_.value=!1,u.value=""}}}async function b(){_.value=!0;try{const d=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():Math.random().toString(36).slice(2),u=`${i.value||"default"}-${Date.now()}-${d}`,k=(0,Dt.default)(u),J="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(k)));await Je({type:"image",dataUrl:J,seed:u}),w.value={type:"image",dataUrl:J,seed:u},n.success(t("settings.userAvatar.saveSuccess"))}catch(d){n.error(d.message||t("settings.userAvatar.saveFailed"))}finally{_.value=!1}}async function S(){_.value=!0;try{await Wi(),w.value={type:"default",seed:i.value||"default"},n.success(t("settings.userAvatar.resetSuccess"))}catch(d){n.error(d.message||t("settings.userAvatar.resetFailed"))}finally{_.value=!1}}const h=$(!1),R=$(""),L=$(""),T=$(""),M=$(!1),D=$(""),E=$("");ke(async()=>{try{i.value=(await Ni()).username}catch{}try{w.value=await Ki()||{type:"default",seed:i.value||"default"}}catch{}});async function V(){if(L.value!==T.value){n.error(t("login.passwordMismatch"));return}if(L.value.length<6){n.error(t("login.passwordTooShort"));return}s.value=!0;try{await Xi(R.value,L.value),h.value=!1,R.value="",L.value="",T.value="",n.success(t("login.passwordChanged"))}catch(d){n.error(d.message||t("common.saveFailed"))}finally{s.value=!1}}async function X(){if(E.value.trim().length<2){n.error(t("login.usernameTooShort"));return}s.value=!0;try{await Li(D.value,E.value.trim()),i.value=E.value.trim(),M.value=!1,D.value="",E.value="",n.success(t("login.usernameChanged"))}catch(d){n.error(d.message||t("common.saveFailed"))}finally{s.value=!1}}function f(){R.value="",L.value="",T.value="",h.value=!0}function o(){D.value="",E.value="",M.value=!0}const c=$([]),v=$(!1);async function x(){v.value=!0;try{c.value=await Yi()}catch{}finally{v.value=!1}}async function ve(d){try{await Vi(d),n.success(t("settings.lockedIps.unlocked")),await x()}catch(u){n.error(u.message||t("common.saveFailed"))}}async function _e(){try{const d=await Ji();n.success(t("settings.lockedIps.allUnlocked",{count:d})),await x()}catch(d){n.error(d.message||t("common.saveFailed"))}}function fe(d){const u=Math.max(0,Math.round((d-Date.now())/6e4));return u>0?`${u} min`:t("common.expired")}function q(d){return t(`settings.lockedIps.type.${d}`)}return ke(()=>{x()}),(d,u)=>(U(),O("div",Ft,[g("p",It,y(e(t)("login.setupDescription")),1),g("div",Rt,[g("h3",zt,y(e(t)("settings.userAvatar.title")),1),g("div",Ht,[g("div",Vt,[a(Gi,{name:i.value||"default",avatar:w.value?.type==="image"&&w.value.dataUrl?{type:"image",dataUrl:w.value.dataUrl}:null,size:80},null,8,["name","avatar"])]),g("div",Lt,[g("p",Nt,y(e(t)("settings.userAvatar.hint")),1),g("div",Kt,[a(e(K),{onClick:u[0]||(u[0]=k=>P.value?.click())},{default:r(()=>[N(y(e(t)("settings.userAvatar.upload")),1)]),_:1}),a(e(K),{onClick:b,loading:_.value},{default:r(()=>[N(y(e(t)("settings.userAvatar.random")),1)]),_:1},8,["loading"]),a(e(K),{onClick:S,loading:_.value},{default:r(()=>[N(y(e(t)("settings.userAvatar.reset")),1)]),_:1},8,["loading"])]),g("input",{ref_key:"avatarFileInput",ref:P,type:"file",accept:".png,.jpg,.jpeg,.webp",style:{display:"none"},onChange:l},null,544)])])]),g("div",Et,[g("div",Bt,[g("span",qt,y(e(t)("login.passwordLoginConfigured",{username:i.value})),1),g("div",Yt,[a(e(K),{onClick:f},{default:r(()=>[N(y(e(t)("login.changePassword")),1)]),_:1}),a(e(K),{onClick:o},{default:r(()=>[N(y(e(t)("login.changeUsername")),1)]),_:1})])])]),g("div",Xt,[g("h3",jt,y(e(t)("settings.lockedIps.title")),1),g("div",Wt,[g("span",Gt,y(e(t)("settings.lockedIps.count",{count:c.value.length})),1),g("div",Jt,[a(e(K),{size:"small",loading:v.value,onClick:x},{default:r(()=>[N(y(e(t)("common.retry")),1)]),_:1},8,["loading"]),c.value.length>0?(U(),Y(e(Aa),{key:0,onPositiveClick:_e},{trigger:r(()=>[a(e(K),{size:"small",type:"warning"},{default:r(()=>[N(y(e(t)("settings.lockedIps.unlockAll")),1)]),_:1})]),default:r(()=>[N(" "+y(e(t)("settings.lockedIps.unlockAllConfirm")),1)]),_:1})):B("",!0)])]),c.value.length>0?(U(),O("div",Qt,[(U(!0),O(ye,null,Me(c.value,k=>(U(),O("div",{key:k.ip+k.type,class:"locked-item"},[g("div",Zt,[g("span",es,y(k.ip),1),g("span",ts,y(q(k.type)),1),g("span",ss,y(fe(k.lockedUntil)),1)]),a(e(K),{size:"tiny",type:"error",ghost:"",onClick:J=>ve(k.ip)},{default:r(()=>[N(y(e(t)("settings.lockedIps.unlock")),1)]),_:1},8,["onClick"])]))),128))])):(U(),O("p",as,y(e(t)("settings.lockedIps.empty")),1))]),a(e(Re),{show:h.value,"onUpdate:show":u[5]||(u[5]=k=>h.value=k),preset:"dialog",title:e(t)("login.changePassword")},{action:r(()=>[a(e(K),{onClick:u[4]||(u[4]=k=>h.value=!1)},{default:r(()=>[N(y(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:V},{default:r(()=>[N(y(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:r(()=>[a(e($e),{"label-placement":"top"},{default:r(()=>[a(e(j),{label:e(t)("login.currentPassword")},{default:r(()=>[a(e(W),{value:R.value,"onUpdate:value":u[1]||(u[1]=k=>R.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("login.newPassword")},{default:r(()=>[a(e(W),{value:L.value,"onUpdate:value":u[2]||(u[2]=k=>L.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.newPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("login.confirmPassword")},{default:r(()=>[a(e(W),{value:T.value,"onUpdate:value":u[3]||(u[3]=k=>T.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.confirmPassword"),onKeyup:Ye(V,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"]),a(e(Re),{show:M.value,"onUpdate:show":u[9]||(u[9]=k=>M.value=k),preset:"dialog",title:e(t)("login.changeUsername")},{action:r(()=>[a(e(K),{onClick:u[8]||(u[8]=k=>M.value=!1)},{default:r(()=>[N(y(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:X},{default:r(()=>[N(y(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:r(()=>[a(e($e),{"label-placement":"top"},{default:r(()=>[a(e(j),{label:e(t)("login.currentPassword")},{default:r(()=>[a(e(W),{value:D.value,"onUpdate:value":u[6]||(u[6]=k=>D.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("login.newUsername")},{default:r(()=>[a(e(W),{value:E.value,"onUpdate:value":u[7]||(u[7]=k=>E.value=k),placeholder:e(t)("login.usernamePlaceholder"),onKeyup:Ye(X,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"])]))}})})),Rl=A((()=>{})),ti,zl=A((()=>{is(),is(),Rl(),le(),ti=ne(ei,[["__scopeId","data-v-61e79d43"]])})),ls,ns,os,rs,si,us=A((()=>{Z(),ie(),se(),Ma(),ls={class:"user-management"},ns={class:"toolbar"},os={class:"section-title"},rs={class:"section-desc"},si=te({__name:"UserManagementSettings",setup(p){const{t}=ae(),n=re(),i=$(!1),s=$(!1),w=$([]),P=$([]),_=$(!1),m=$(null),l=Ca({username:"",password:"",role:"admin",status:"active",profiles:[]}),b=C(()=>[{label:t("users.roles.admin"),value:"admin"},{label:t("users.roles.superAdmin"),value:"super_admin"}]),S=C(()=>[{label:t("users.status.active"),value:"active"},{label:t("users.status.disabled"),value:"disabled"}]),h=C(()=>P.value.map(o=>({label:o,value:o})));function R(){m.value=null,l.username="",l.password="",l.role="admin",l.status="active",l.profiles=[]}async function L(){i.value=!0;try{const o=await qi();w.value=o.users,P.value=o.profiles}catch(o){n.error(o.message||t("users.loadFailed"))}finally{i.value=!1}}function T(){R(),_.value=!0}function M(o){m.value=o,l.username=o.username,l.password="",l.role=o.role,l.status=o.status,l.profiles=[...o.profiles],_.value=!0}async function D(){if(l.username.trim().length<2){n.error(t("login.usernameTooShort"));return}if(!m.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 o={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},c=m.value?await Qe(m.value.id,o):await Bi({...o,password:l.password});w.value=c.users,P.value=c.profiles,_.value=!1,R(),n.success(t("common.saved"))}catch(o){n.error(o.message||t("common.saveFailed"))}finally{s.value=!1}}async function E(o,c){s.value=!0;try{const v=await Qe(o.id,{status:c});w.value=v.users,P.value=v.profiles,n.success(t("common.saved"))}catch(v){n.error(v.message||t("common.saveFailed"))}finally{s.value=!1}}async function V(o){s.value=!0;try{const c=await ji(o.id);w.value=c.users,P.value=c.profiles,n.success(t("common.saved"))}catch(c){n.error(c.message||t("common.deleteFailed"))}finally{s.value=!1}}function X(o){return o?new Date(o).toLocaleString():"-"}const f=C(()=>[{title:t("users.username"),key:"username",minWidth:140},{title:t("users.role"),key:"role",width:130,render:o=>ge(Ie,{size:"small",type:o.role==="super_admin"?"warning":"default"},{default:()=>o.role==="super_admin"?t("users.roles.superAdmin"):t("users.roles.admin")})},{title:t("users.statusLabel"),key:"status",width:110,render:o=>ge(Ie,{size:"small",type:o.status==="active"?"success":"error"},{default:()=>o.status==="active"?t("users.status.active"):t("users.status.disabled")})},{title:t("users.profiles"),key:"profiles",minWidth:200,render:o=>o.role==="super_admin"?ge("span",{class:"muted"},t("users.allProfiles")):ge(xe,{size:4},{default:()=>o.profiles.length?o.profiles.map(c=>ge(Ie,{size:"small",bordered:!1},{default:()=>c})):ge("span",{class:"muted"},t("users.noProfiles"))})},{title:t("users.lastLogin"),key:"last_login_at",minWidth:170,render:o=>X(o.last_login_at)},{title:t("common.edit"),key:"actions",width:280,render:o=>ge(xe,{size:8},{default:()=>[ge(K,{size:"small",onClick:()=>M(o)},{default:()=>t("common.edit")}),ge(K,{size:"small",type:o.status==="active"?"warning":"primary",ghost:!0,loading:s.value,onClick:()=>E(o,o.status==="active"?"disabled":"active")},{default:()=>o.status==="active"?t("users.disable"):t("users.enable")}),ge(Aa,{onPositiveClick:()=>V(o)},{trigger:()=>ge(K,{size:"small",type:"error",ghost:!0,loading:s.value},{default:()=>t("common.delete")}),default:()=>t("users.deleteConfirm")})]})}]);return ke(L),(o,c)=>(U(),O("div",ls,[g("div",ns,[g("div",null,[g("h3",os,y(e(t)("users.title")),1),g("p",rs,y(e(t)("users.description")),1)]),a(e(K),{type:"primary",onClick:T},{default:r(()=>[N(y(e(t)("users.create")),1)]),_:1})]),a(e(Ti),{columns:f.value,data:w.value,loading:i.value,bordered:!1,"single-line":!1,size:"small"},null,8,["columns","data","loading"]),a(e(Re),{show:_.value,"onUpdate:show":c[6]||(c[6]=v=>_.value=v),preset:"dialog",title:m.value?e(t)("users.edit"):e(t)("users.create")},{action:r(()=>[a(e(K),{onClick:c[5]||(c[5]=v=>_.value=!1)},{default:r(()=>[N(y(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:D},{default:r(()=>[N(y(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:r(()=>[a(e($e),{"label-placement":"top"},{default:r(()=>[a(e(j),{label:e(t)("users.username")},{default:r(()=>[a(e(W),{value:l.username,"onUpdate:value":c[0]||(c[0]=v=>l.username=v),placeholder:e(t)("login.usernamePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:m.value?e(t)("users.newPasswordOptional"):e(t)("login.newPassword")},{default:r(()=>[a(e(W),{value:l.password,"onUpdate:value":c[1]||(c[1]=v=>l.password=v),type:"password","show-password-on":"click",placeholder:e(t)("login.passwordPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("users.role")},{default:r(()=>[a(e(G),{value:l.role,"onUpdate:value":c[2]||(c[2]=v=>l.role=v),options:b.value},null,8,["value","options"])]),_:1},8,["label"]),a(e(j),{label:e(t)("users.statusLabel")},{default:r(()=>[a(e(G),{value:l.status,"onUpdate:value":c[3]||(c[3]=v=>l.status=v),options:S.value},null,8,["value","options"])]),_:1},8,["label"]),l.role!=="super_admin"?(U(),Y(e(j),{key:0,label:e(t)("users.profiles")},{default:r(()=>[a(e(G),{value:l.profiles,"onUpdate:value":c[4]||(c[4]=v=>l.profiles=v),multiple:"",filterable:"",options:h.value,placeholder:e(t)("users.profilesPlaceholder")},null,8,["value","options","placeholder"])]),_:1},8,["label"])):B("",!0)]),_:1})]),_:1},8,["show","title"])]))}})})),Hl=A((()=>{})),ai,Vl=A((()=>{us(),us(),Hl(),le(),ai=ne(si,[["__scopeId","data-v-bcd3f33a"]])}));function Ll(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"||p==="doubao"?p:null}function Nl(p){if(p&&typeof p=="object"){const t=p,n=Ll(t.activeProvider);if(Array.isArray(t.providers))return{providers:t.providers,activeProvider:n};if(Array.isArray(t.settings))return{providers:t.settings,activeProvider:n}}return{providers:[],activeProvider:null}}async function Kl(){return Nl(await Oe("/api/hermes/tts/settings"))}async function El(p,t){const n=await Oe(`/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 Bl(p){return(await Oe("/api/hermes/tts/settings/active",{method:"PUT",body:JSON.stringify({provider:p})})).activeProvider}async function ql(p){return Oe(`/api/hermes/tts/settings/${p}`,{method:"DELETE"})}var Yl=A((()=>{Ne()})),we,Be=A((()=>{Ee(),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-doubao",kind:"tts",provider:"doubao",label:"Volcengine Doubao TTS",labelKey:"settings.voice.presetDoubaoTtsLabel",baseUrl:"https://openspeech.bytedance.com/api/v3/tts/unidirectional",defaultModel:Ke,isSecretRequired:!0,capabilities:{models:!0,voices:!0,stylePrompt:!0}},{id:"tts-custom",kind:"tts",provider:"custom",label:"Custom TTS",labelKey:"settings.voice.presetCustomTtsLabel",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-browser",kind:"stt",provider:"browser",label:"Browser STT",labelKey:"settings.voice.presetBrowserSttLabel",description:"Native browser speech recognition API.",descriptionKey:"settings.voice.presetBrowserSttDescription",isBuiltin:!0,isSecretRequired:!1,capabilities:{}},{id:"stt-openai",kind:"stt",provider:"openai",label:"OpenAI Whisper",labelKey:"settings.voice.presetOpenaiWhisperLabel",baseUrl:"https://api.openai.com/v1",defaultModel:"whisper-1",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-groq",kind:"stt",provider:"custom",label:"Groq STT",labelKey:"settings.voice.presetGroqSttLabel",baseUrl:"https://api.groq.com/openai/v1",defaultModel:"whisper-large-v3",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-doubao",kind:"stt",provider:"doubao",label:"Volcengine Doubao STT",labelKey:"settings.voice.presetDoubaoSttLabel",baseUrl:"https://openspeech.bytedance.com/api/v3/auc/bigmodel",defaultModel:"volc.seedasr.auc",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-custom",kind:"stt",provider:"custom",label:"Custom STT",labelKey:"settings.voice.presetCustomSttLabel",isSecretRequired:!0,capabilities:{models:!0}}]}));function ds(p){return p==="openai"||p==="custom"||p==="doubao"}function cs(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"||p==="doubao"}function vs(p){return p==="browser"||p==="openai"||p==="custom"||p==="doubao"}function He(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"||p==="doubao"}function Q(p,t){const n=p[t];return typeof n=="string"?n:""}function Xl(){const{t:p}=ae(),t=$([]),n=$(!1),i=dl(),s=ll(),w=C(()=>`tts-${i.provider.value==="webspeech"?"edge":i.provider.value}`),P=C(()=>`stt-${s.provider.value}`),_=C(()=>t.value.filter(f=>f.kind==="tts")),m=C(()=>t.value.filter(f=>f.kind==="stt")),l=C(()=>_.value.find(f=>f.id===w.value)||_.value[0]||null),b=C(()=>m.value.find(f=>f.id===P.value)||m.value[0]||null),S=C(()=>_.value.map(f=>({label:f.label,value:f.id}))),h=C(()=>m.value.map(f=>({label:f.label,value:f.id})));function R(f){if(!He(f.provider))return;i.setProvider(f.provider);const o=f.settings;if(f.provider==="edge"){i.setEdgeVoice(Q(o,"voice")||f.voice||i.edgeVoice.value);const c=Number(o.rate),v=Number(o.pitch);Number.isFinite(c)&&i.setEdgeRate(c),Number.isFinite(v)&&i.setEdgePitchHz(v);return}if(f.provider==="openai"){i.setOpenaiBaseUrl(f.baseUrl||Q(o,"baseUrl")),i.setOpenaiModel(f.model||Q(o,"model")||i.openaiModel.value),i.setOpenaiVoice(f.voice||Q(o,"voice")||i.openaiVoice.value);return}if(f.provider==="custom"){i.setCustomUrl(f.baseUrl||Q(o,"baseUrl"));return}if(f.provider==="mimo"){i.setMimoBaseUrl(f.baseUrl||Q(o,"baseUrl")||i.mimoBaseUrl.value),i.setMimoModel(f.model||Q(o,"model")||i.mimoModel.value),i.setMimoVoice(f.voice||Q(o,"voice")||i.mimoVoice.value),i.setMimoStylePrompt(Q(o,"stylePrompt")),i.setMimoVoiceDesignDesc(Q(o,"voiceDesignDesc"));return}f.provider==="doubao"&&(i.setDoubaoBaseUrl(f.baseUrl||Q(o,"baseUrl")||i.doubaoBaseUrl.value),i.setDoubaoModel(f.model||Q(o,"model")||i.doubaoModel.value),i.setDoubaoVoice(f.voice||Q(o,"voice")||i.doubaoVoice.value),i.setDoubaoStylePrompt(Q(o,"stylePrompt")))}function L(f){if(!vs(f.provider))return;s.setProvider(f.provider);const o=f.settings;if(f.provider==="openai"){s.setOpenaiModel(f.model||Q(o,"model")||s.openaiModel.value),s.setOpenaiLanguage(Q(o,"language")),s.setOpenaiPrompt(Q(o,"prompt"));return}f.provider==="custom"&&(s.setCustomBaseUrl(f.baseUrl||Q(o,"baseUrl")),s.setCustomModel(f.model||Q(o,"model")||s.customModel.value),s.setCustomLanguage(Q(o,"language")),s.setCustomPrompt(Q(o,"prompt")))}function T(f,o,c){const v=we.find(x=>x.kind==="tts"&&x.provider===f&&(x.baseUrl===o.baseUrl||!x.baseUrl));return{id:`tts-${f}`,kind:"tts",provider:f,label:v?.labelKey?p(v.labelKey):v?.label||`${f} TTS`,baseUrl:o.baseUrl,model:o.model,voice:o.voice,settings:o,hasSecret:c,active:w.value===`tts-${f}`}}function M(f,o,c){const v=we.find(x=>x.kind==="stt"&&x.provider===f&&(x.baseUrl===o.baseUrl||!x.baseUrl));return{id:`stt-${f}`,kind:"stt",provider:f,label:v?.labelKey?p(v.labelKey):v?.label||`${f} STT`,baseUrl:o.baseUrl,model:o.model,settings:o,hasSecret:c,active:P.value===`stt-${f}`}}async function D(){n.value=!0;try{await s.loadServerSttSettings(!0);const[f,o]=await Promise.all([Kl(),al()]);f.activeProvider&&He(f.activeProvider)&&i.setProvider(f.activeProvider);const c=[{id:"tts-edge",kind:"tts",provider:"edge",label:p("settings.voice.presetEdgeTtsLabel"),isBuiltin:!0,hasSecret:!1,active:w.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:P.value==="stt-browser",settings:{}}];for(const v of f.providers){const x=T(v.provider,v.settings,v.secrets?.apiKey==="[stored]"),ve=c.find(_e=>_e.id===x.id);ve?Object.assign(ve,x,{isBuiltin:ve.isBuiltin}):c.push(x)}for(const v of o.providers)c.push(M(v.provider,v.settings,v.secrets?.apiKey==="[stored]"));t.value=c.map(v=>({...v,active:v.kind==="tts"?v.id===w.value:v.id===P.value}))}finally{n.value=!1}}async function E(f,o){const c=t.value.find(v=>v.kind===f&&v.id===o);c&&(f==="tts"?(R(c),He(c.provider)&&await Bl(c.provider)):(L(c),vs(c.provider)&&await Ze(c.provider)),t.value=t.value.map(v=>({...v,active:v.kind===f?v.id===o:v.active})))}async function V(f,o,c){if(f==="tts"){if(!cs(o))throw new Error(`Unsupported TTS provider: ${String(o)}`);const x=await El(o,{settings:c.settings,secrets:c.secrets,activeProvider:o});return await D(),await E("tts",`tts-${o}`),x}if(o==="browser")return await Ze("browser"),s.setProvider("browser"),await D(),null;if(!ds(o))throw new Error(`Unsupported STT provider: ${String(o)}`);const v=await ol(o,{settings:c.settings,secrets:c.secrets,activeProvider:o});return await D(),await E("stt",`stt-${o}`),v}async function X(f,o){if(f==="tts"){if(!cs(o)||o==="edge")return;await ql(o)}else{if(!ds(o))return;await nl(o)}await D()}return{connections:t,ttsConnections:_,sttConnections:m,activeTtsId:w,activeSttId:P,activeTtsConnection:l,activeSttConnection:b,ttsConnectionOptions:S,sttConnectionOptions:h,loading:n,refresh:D,setActiveConnection:E,saveConnection:V,deleteSecret:X}}var jl=A((()=>{Z(),se(),Yl(),el(),vl(),rl(),Be()})),ps,ms,ii,gs=A((()=>{Z(),ps={class:"provider-meta-item"},ms=["title"],ii=te({__name:"ProviderMetaItem",props:{label:{},value:{}},setup(p){return(t,n)=>(U(),O("div",ps,[g("dt",null,y(p.label),1),g("dd",{title:String(p.value||"—")},y(p.value||"—"),9,ms)]))}})})),Wl=A((()=>{})),li,Gl=A((()=>{gs(),gs(),Wl(),le(),li=ne(ii,[["__scopeId","data-v-6e8cbcf2"]])})),_s,fs,ys,bs,hs,Ss,ws,Us,ks,Ps,Cs,Ts,As,xs,$s,ni,Ms=A((()=>{Z(),ie(),se(),Gl(),_s=["data-state"],fs={class:"card-main"},ys={class:"provider-identity"},bs={class:"provider-icon","aria-hidden":"true"},hs={class:"provider-copy"},Ss={class:"provider-title-row"},ws=["title"],Us={class:"provider-kind"},ks={class:"provider-description"},Ps={class:"provider-meta"},Cs={class:"provider-control"},Ts=["aria-label"],As={key:1,class:"feedback-row error",role:"alert"},xs={class:"error-summary"},$s={key:1,class:"error-details"},ni=te({__name:"VoiceApiCard",props:{connection:{},testState:{}},emits:["setActive","test","edit","connect","remove"],setup(p,{emit:t}){const n=p,i=t,{t:s}=ae(),w=$(!1);Ue(()=>n.testState?.message,()=>{w.value=!1});const P=C(()=>!(n.connection.kind==="stt"&&n.connection.provider==="browser")),_=C(()=>!n.connection.isBuiltin),m=C(()=>_.value?n.connection.hasSecret?s("settings.voice.keyStored"):s("settings.voice.keyMissing"):s("settings.voice.builtin")),l=C(()=>n.connection.isBuiltin?s("settings.voice.builtin"):s("settings.voice.customApi")),b=C(()=>n.connection.active?"success":_.value&&!n.connection.hasSecret?"warning":"default"),S=C(()=>n.connection.active?s("settings.voice.active"):_.value&&!n.connection.hasSecret?s("settings.voice.keyMissing"):s("settings.voice.connected")),h=C(()=>n.connection.model||String(n.connection.settings.model||"")),R=C(()=>n.connection.voice||String(n.connection.settings.voice||"")),L=C(()=>n.connection.baseUrl||(n.connection.isBuiltin?s("settings.voice.localBuiltin"):"")),T=C(()=>{const q=n.testState?.status;return s(q==="success"?"settings.voice.testSuccess":q==="error"?"settings.voice.testFailedShort":q==="loading"?"settings.voice.testing":q==="recording"?"settings.voice.recording":"settings.voice.notTested")}),M=C(()=>_.value&&!n.connection.hasSecret?s("settings.voice.connect"):s("common.edit")),D=C(()=>n.testState?.status==="recording"?s("settings.voice.sttTestStopButton"):s("settings.voice.testAction")),E=C(()=>n.connection.kind==="tts"?[{key:"source",label:s("settings.voice.source"),value:L.value},{key:"model",label:s("settings.voice.model"),value:h.value},{key:"voice",label:s("settings.voice.voice"),value:R.value},{key:"api-key",label:s("settings.voice.apiKey"),value:m.value}]:[{key:"source",label:s("settings.voice.source"),value:L.value},{key:"model",label:s("settings.voice.model"),value:h.value},{key:"api-key",label:s("settings.voice.apiKey"),value:m.value},{key:"last-test",label:s("settings.voice.lastTest"),value:T.value}]),V=C(()=>{const q=n.testState?.status;return!!q&&q!=="idle"&&q!=="error"}),X=C(()=>n.testState?.status==="error"),f=C(()=>n.testState?.message||"");function o(q){const d=q.indexOf("{");if(d<0)return null;try{const u=JSON.parse(q.slice(d)),k=u.error||u.message||u.detail;return typeof k=="string"&&k.trim()?k.trim():null}catch{return null}}function c(q){return q.replace(/^API Error\s+\d+\s*:\s*/i,"").replace(/^Error\s*:\s*/i,"").trim()}const v=C(()=>{const q=f.value.trim();if(!q)return s("settings.voice.testFailedSummary");const d=o(q)||c(q);return!d||d.startsWith("{")||d.startsWith("[")?s("settings.voice.testFailedSummary"):d.length>180?`${d.slice(0,177).trim()}…`:d}),x=C(()=>{const q=f.value.trim();return q.length>0&&q!==v.value}),ve=C(()=>[{label:s("settings.voice.remove"),key:"remove",disabled:n.connection.isBuiltin}]);function _e(){if(_.value&&!n.connection.hasSecret){i("connect",n.connection);return}i("edit",n.connection)}function fe(q){q==="remove"&&!n.connection.isBuiltin&&i("remove",n.connection)}return(q,d)=>(U(),O("article",{class:Ve(["voice-api-card",{active:p.connection.active}]),"data-state":p.testState?.status||"idle"},[g("div",fs,[g("div",ys,[g("div",bs,y(p.connection.kind==="tts"?"T":"S"),1),g("div",hs,[g("div",Ss,[g("h5",{class:"provider-title",title:p.connection.label},y(p.connection.label),9,ws),g("span",Us,y(l.value),1)]),g("p",ks,y(p.connection.kind==="tts"?e(s)("settings.voice.ttsCardHint"):e(s)("settings.voice.sttCardHint")),1)])]),g("dl",Ps,[(U(!0),O(ye,null,Me(E.value,u=>(U(),Y(li,{key:u.key,label:u.label,value:u.value},null,8,["label","value"]))),128))]),g("div",Cs,[a(e(Ie),{class:"status-badge",size:"small",type:b.value,round:"",bordered:!1},{default:r(()=>[N(y(S.value),1)]),_:1},8,["type"]),g("div",{class:"card-actions","aria-label":`${p.connection.label} actions`},[p.connection.active?B("",!0):(U(),Y(e(K),{key:0,size:"tiny",secondary:"",onClick:d[0]||(d[0]=u=>i("setActive",p.connection))},{default:r(()=>[N(y(e(s)("settings.voice.setActive")),1)]),_:1})),a(e(K),{size:"tiny",loading:p.testState?.status==="loading","data-testid":`voice-card-test-${p.connection.id}`,onClick:d[1]||(d[1]=u=>i("test",p.connection))},{default:r(()=>[N(y(D.value),1)]),_:1},8,["loading","data-testid"]),P.value?(U(),Y(e(K),{key:1,size:"tiny",onClick:_e},{default:r(()=>[N(y(M.value),1)]),_:1})):B("",!0),_.value?(U(),Y(e(Ai),{key:2,trigger:"click",size:"small",options:ve.value,onSelect:fe},{default:r(()=>[a(e(K),{size:"tiny","aria-label":e(s)("settings.voice.moreActionsFor",{provider:p.connection.label})},{default:r(()=>[N(y(e(s)("settings.voice.moreActions")),1)]),_:1},8,["aria-label"])]),_:1},8,["options"])):B("",!0)],8,Ts)])]),V.value?(U(),O("div",{key:0,class:Ve(["feedback-row",p.testState?.status]),role:"status"},y(p.testState?.message||(p.testState?.status==="success"?e(s)("settings.voice.testSuccess"):"")),3)):B("",!0),X.value?(U(),O("div",As,[g("div",xs,y(v.value),1),x.value?(U(),Y(e(K),{key:0,class:"details-toggle",text:"",size:"tiny",onClick:d[2]||(d[2]=u=>w.value=!w.value)},{default:r(()=>[N(y(w.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)]),_:1})):B("",!0),w.value?(U(),O("pre",$s,y(f.value),1)):B("",!0)])):B("",!0)],10,_s))}})})),Jl=A((()=>{})),Le,Ql=A((()=>{Ms(),Ms(),Jl(),le(),Le=ne(ni,[["__scopeId","data-v-b8bd5b05"]])}));async function Zl(p){return Oe("/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 en=A((()=>{Ne()})),Os,Ds,Fs,Is,Rs,zs,Hs,Vs,Ls,Ns,Ks,Es,Bs,qs,Ys,Xs,oi,js=A((()=>{Z(),ie(),se(),en(),Be(),Ee(),Os={class:"form-section"},Ds={class:"form-section"},Fs={class:"section-heading"},Is={key:0,class:"connection-actions"},Rs={key:1,class:"inline-error","data-testid":"voice-provider-probe-error"},zs={key:1},Hs={key:0,class:"form-section"},Vs={class:"section-heading"},Ls={key:0,class:"helper-text"},Ns={key:1,class:"helper-text"},Ks={key:2,class:"helper-text"},Es={key:3,class:"helper-text"},Bs={key:1,class:"form-section"},qs={class:"section-heading"},Ys={key:2,class:"form-section"},Xs={class:"modal-footer"},oi=te({__name:"VoiceApiFormModal",props:{kind:{},show:{type:Boolean}},emits:["close","saved"],setup(p,{emit:t}){const n=p,i=t,{t:s}=ae(),w=re(),P=$(!1),_=$(null),m=$("openai-compatible"),l=$({baseUrl:"",apiKey:"",model:"",voice:"",audioTranscode:"none"}),b=$(!1),S=$(!1),h=$(!1),R=$(!1),L=$(!1),T=$([]),M=$(""),D=$(""),E=$(""),V=$(!1),X=$("");let f=null,o=0,c=!1;const v=C(()=>we.filter(z=>z.kind===n.kind&&!z.isBuiltin).map(z=>({label:z.labelKey?s(z.labelKey):z.label,value:z.id}))),x=C(()=>we.find(z=>z.id===_.value)||null),ve=C(()=>x.value?.provider==="custom"),_e=C(()=>n.kind==="tts"&&x.value?.provider==="doubao"),fe=C(()=>m.value==="openai-compatible"),q=C(()=>{const z=T.value.map(I=>({label:I.capability==="preferred"?`${I.label} · ${s("settings.voice.modelRecommendedSuffix")}`:I.label,value:I.id})),F=l.value.model.trim();return F&&!z.some(I=>I.value===F)?[{label:F,value:F},...z]:z}),d=C(()=>[{label:s("settings.voice.sttAudioTranscodeNone"),value:"none"},{label:s("settings.voice.sttAudioTranscodeFfmpeg"),value:"ffmpeg"}]),u=C(()=>{const z=l.value.voice.trim(),F=ze.map(I=>({label:I.label,value:I.value}));return z&&!ze.some(I=>I.value===z)?[{label:z,value:z},...F]:F}),k=C(()=>Fe(l.value.baseUrl)),J=C(()=>!h.value&&!l.value.baseUrl.trim()||!x.value||!x.value.isSecretRequired?"":Te(l.value.baseUrl)),ue=C(()=>!x.value?.capabilities?.models||!S.value||l.value.model.trim()?"":s("settings.voice.modelRequiredConnectManual")),pe=C(()=>!R.value||!x.value?.isSecretRequired||l.value.apiKey.trim()?"":s("settings.voice.apiKeyRequired")),de=C(()=>!!x.value&&fe.value&&!!l.value.baseUrl.trim()&&!!l.value.apiKey.trim()&&!Te(l.value.baseUrl)),Pe=C(()=>!(!x.value||x.value.isSecretRequired&&(!l.value.apiKey.trim()||Te(l.value.baseUrl))||x.value.capabilities?.models&&!l.value.model.trim()||_e.value&&!l.value.voice.trim())),Ce=C(()=>x.value?m.value==="manual"?s("settings.voice.discoveryManualHint"):!l.value.baseUrl.trim()||!l.value.apiKey.trim()?s("settings.voice.discoveryCredentialHint"):s("settings.voice.discoveryNoAutoProbeHint"):"");Ue(()=>n.show,z=>{z?De():Ae()}),Ue([()=>l.value.baseUrl,()=>l.value.apiKey,m],()=>{if(c){c=!1;return}Ae(),T.value=[],M.value="",D.value="",E.value="",V.value=!1}),Ui(()=>Ae());function De(){_.value=null,m.value="openai-compatible",l.value={baseUrl:"",apiKey:"",model:"",voice:"",audioTranscode:"none"},b.value=!1,S.value=!1,h.value=!1,R.value=!1,X.value="",T.value=[],M.value="",D.value="",E.value="",V.value=!1,Ae()}function Fe(z){const F=z.trim();if(!F)return"";try{const I=new URL(F);return I.hash="",I.pathname=I.pathname.replace(/\/+$/,"")||"/",I.toString().replace(/\/$/,"")}catch{return F.replace(/\/+$/,"")}}function Te(z){const F=z.trim();if(!F)return s("settings.voice.baseUrlRequired");try{const I=new URL(F);return I.protocol!=="https:"&&I.protocol!=="http:"?s("settings.voice.baseUrlHttpsRequired"):""}catch{return s("settings.voice.baseUrlInvalid")}}function Ae(){f&&(f.abort(),f=null),L.value=!1}function mi(z){_.value=z;const F=we.find(oe=>oe.id===z);m.value=F?.provider==="custom"||F?.provider==="openai"?"openai-compatible":"manual";const I=n.kind==="tts"&&F?.provider==="doubao";l.value={baseUrl:F?.baseUrl||"",model:I?Ke:F?.defaultModel||"",voice:I?ml:"",apiKey:"",audioTranscode:"none"},b.value=!1,S.value=!1,h.value=!1,R.value=!1,X.value=""}function gi(z){l.value.model=z||"",b.value=!0,S.value=!0}function _i(z){l.value.voice=z||"",l.value.model=Oa(z)||"seed-tts-2.0",S.value=!0,b.value=!1}function fi(){M.value&&(l.value.model=M.value,S.value=!0,b.value=!1)}function yi(){h.value=!0,Te(l.value.baseUrl)||(l.value.baseUrl=k.value)}function bi(){return`${n.kind}|${x.value?.provider||""}|${m.value}|${Fe(l.value.baseUrl)}|${l.value.apiKey.trim()}`}async function hi(){if(R.value=!0,!de.value)return;const z=bi();X.value!==z&&(X.value=z,await qe())}async function qe(){if(!x.value||!fe.value)return;h.value=!0,R.value=!0;const z=Te(l.value.baseUrl);if(z){D.value=z;return}if(!l.value.apiKey.trim()){D.value=s("settings.voice.apiKeyRequiredForDiscovery");return}Ae();const F=++o,I=new AbortController;f=I,L.value=!0,D.value="",E.value="",V.value=!1;try{const oe=await Zl({kind:n.kind,provider:String(x.value.provider),compatibility:m.value,baseUrl:Fe(l.value.baseUrl),apiKey:l.value.apiKey.trim(),signal:I.signal});if(F!==o)return;oe.normalizedBaseUrl&&(c=!0,l.value.baseUrl=oe.normalizedBaseUrl),T.value=oe.models||[],M.value=oe.recommendedModel||"",D.value=oe.ok?"":oe.errorSummary||s("settings.voice.discoveryFailedManualFallback"),E.value=oe.errorDetails||"",oe.ok&&oe.recommendedModel&&!b.value&&!l.value.model.trim()&&(l.value.model=oe.recommendedModel,S.value=!0)}catch(oe){if(I.signal.aborted||F!==o)return;D.value=oe instanceof Error?oe.message:s("settings.voice.discoveryFailedManualFallback"),E.value=""}finally{F===o&&(L.value=!1,f=null)}}async function Si(){if(x.value){if(h.value=!0,R.value=!0,S.value=!0,!Pe.value){w.warning(ue.value||J.value||pe.value||s("settings.voice.completeRequiredProviderFields"));return}P.value=!0;try{i("saved",{preset:x.value,settings:{baseUrl:Fe(l.value.baseUrl),model:l.value.model.trim(),...n.kind==="tts"&&l.value.voice.trim()?{voice:l.value.voice.trim()}:{},...n.kind==="stt"?{audioTranscode:l.value.audioTranscode}:{}},secrets:{apiKey:l.value.apiKey.trim()}})}finally{P.value=!1}}}return(z,F)=>(U(),Y(e(Re),{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":F[8]||(F[8]=I=>i("close"))},{footer:r(()=>[g("div",Xs,[a(e(K),{onClick:F[7]||(F[7]=I=>i("close"))},{default:r(()=>[N(y(e(s)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:P.value,disabled:!Pe.value,"data-testid":"voice-provider-save",onClick:Si},{default:r(()=>[N(y(e(s)("common.add")),1)]),_:1},8,["loading","disabled"])])]),default:r(()=>[a(e($e),{"label-placement":"top",class:"provider-form"},{default:r(()=>[g("section",Os,[a(e(j),{label:e(s)("models.selectProvider"),required:""},{default:r(()=>[a(e(G),{value:_.value,"onUpdate:value":[F[0]||(F[0]=I=>_.value=I),mi],options:v.value,placeholder:e(s)("models.chooseProvider"),"data-testid":"voice-provider-select"},null,8,["value","options","placeholder"])]),_:1},8,["label"]),x.value&&ve.value?(U(),Y(e(j),{key:0,label:e(s)("settings.voice.apiCompatibility"),required:""},{default:r(()=>[a(e(G),{value:m.value,"onUpdate:value":F[1]||(F[1]=I=>m.value=I),options:[{label:e(s)("settings.voice.openaiCompatible"),value:"openai-compatible"},{label:e(s)("settings.voice.manualCustomEndpoint"),value:"manual"}],"data-testid":"voice-provider-compatibility"},null,8,["value","options"])]),_:1},8,["label"])):B("",!0)]),x.value?(U(),O(ye,{key:0},[g("section",Ds,[g("div",Fs,[g("span",null,y(e(s)("settings.voice.connectionStep")),1),g("small",null,y(Ce.value),1)]),a(e(j),{label:e(s)("models.baseUrl"),required:x.value.isSecretRequired,feedback:J.value},{default:r(()=>[a(e(W),{value:l.value.baseUrl,"onUpdate:value":F[2]||(F[2]=I=>l.value.baseUrl=I),placeholder:e(s)("models.baseUrlPlaceholder"),disabled:!!x.value.baseUrl&&x.value.provider!=="custom","data-testid":"voice-provider-base-url",onBlur:yi},null,8,["value","placeholder","disabled"])]),_:1},8,["label","required","feedback"]),a(e(j),{label:e(s)("models.apiKey"),required:x.value.isSecretRequired,feedback:pe.value},{default:r(()=>[a(e(W),{value:l.value.apiKey,"onUpdate:value":F[3]||(F[3]=I=>l.value.apiKey=I),type:"password","show-password-on":"click",autocomplete:"off",placeholder:x.value.isSecretRequired?e(s)("settings.voice.apiKeyConnectPlaceholder"):e(s)("models.apiKeyPlaceholder"),"data-testid":"voice-provider-api-key",onBlur:hi},null,8,["value","placeholder"])]),_:1},8,["label","required","feedback"]),fe.value?(U(),O("div",Is,[a(e(K),{size:"small",loading:L.value,disabled:!de.value,"data-testid":"voice-provider-probe",onClick:qe},{default:r(()=>[N(y(e(s)("settings.voice.connectFetchModels")),1)]),_:1},8,["loading","disabled"])])):B("",!0),D.value?(U(),O("div",Rs,[g("span",null,y(D.value),1),E.value?(U(),O("button",{key:0,type:"button",class:"link-button",onClick:F[4]||(F[4]=I=>V.value=!V.value)},y(V.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)):B("",!0),V.value&&E.value?(U(),O("pre",zs,y(E.value),1)):B("",!0)])):B("",!0)]),x.value.capabilities?.models?(U(),O("section",Hs,[g("div",Vs,[g("span",null,y(e(s)("settings.voice.model")),1),g("small",null,y(e(s)("settings.voice.modelConnectManualHint")),1)]),a(e(j),{label:e(s)("models.defaultModel"),feedback:ue.value},{default:r(()=>[a(e(G),{value:l.value.model,options:q.value,tag:"",filterable:"",loading:L.value,placeholder:e(s)("settings.voice.modelConnectManualHint"),"data-testid":"voice-provider-model","onUpdate:value":gi},null,8,["value","options","loading","placeholder"])]),_:1},8,["label","feedback"]),L.value?(U(),O("div",Ls,y(e(s)("settings.voice.fetchingModels")),1)):M.value&&b.value&&l.value.model!==M.value?(U(),O("div",Ns,[N(y(e(s)("settings.voice.recommendedModel",{model:M.value}))+" ",1),g("button",{type:"button",class:"link-button",onClick:fi},y(e(s)("settings.voice.useRecommendedModel")),1)])):T.value.length?(U(),O("div",Ks,y(e(s)("settings.voice.modelsDiscovered",{count:T.value.length})),1)):D.value?(U(),O("div",Es,y(e(s)("settings.voice.discoveryFailedManualFallback")),1)):B("",!0)])):B("",!0),_e.value?(U(),O("section",Bs,[g("div",qs,[g("span",null,y(e(s)("settings.voice.voice")),1),g("small",null,y(e(s)("settings.voice.doubaoVoiceHint")),1)]),a(e(j),{label:e(s)("settings.voice.voice")},{default:r(()=>[a(e(G),{value:l.value.voice,"onUpdate:value":[F[5]||(F[5]=I=>l.value.voice=I),_i],options:u.value,tag:"",filterable:"","data-testid":"voice-provider-voice"},null,8,["value","options"])]),_:1},8,["label"])])):B("",!0),p.kind==="stt"?(U(),O("section",Ys,[a(e(j),{label:e(s)("settings.voice.sttAudioTranscode")},{default:r(()=>[a(e(G),{value:l.value.audioTranscode,"onUpdate:value":F[6]||(F[6]=I=>l.value.audioTranscode=I),options:d.value,"data-testid":"voice-provider-audio-transcode"},null,8,["value","options"])]),_:1},8,["label"])])):B("",!0)],64)):B("",!0)]),_:1})]),_:1},8,["show","title"]))}})})),tn=A((()=>{})),ri,sn=A((()=>{js(),js(),tn(),le(),ri=ne(oi,[["__scopeId","data-v-9aec528e"]])})),Ws,Gs,ui,Js=A((()=>{Z(),ie(),se(),Be(),Ee(),Da(),Ws={style:{"font-size":"12px",opacity:"0.6"}},Gs={style:{"font-size":"12px",opacity:"0.6"}},ui=te({__name:"VoiceApiConfigurator",props:{connection:{},show:{type:Boolean}},emits:["close","save"],setup(p,{emit:t}){const n=p,i=t,{t:s}=ae(),w=$(!1),P=$({}),_=$(""),m=C(()=>n.connection?we.find(o=>o.kind===n.connection.kind&&o.provider===n.connection.provider&&(o.baseUrl===n.connection.baseUrl||!o.baseUrl)):null),l=C(()=>m.value?.capabilities||{});function b(o,c){P.value[o]=c??""}function S(o){const c=P.value[o];return typeof c=="string"?c:typeof c=="number"?String(c):""}function h(o,c=0){const v=P.value[o];if(typeof v=="number"&&Number.isFinite(v))return v;if(typeof v=="string"&&v.trim()){const x=Number(v);if(Number.isFinite(x))return x}return c}Ue(()=>n.connection,o=>{o&&(P.value={...o.settings,model:o.model||String(o.settings.model||""),voice:o.voice||String(o.settings.voice||"")},o.provider==="edge"&&(P.value.rate=h("rate",1),P.value.pitch=h("pitch",0)),_.value="")},{immediate:!0});async function R(){if(n.connection){w.value=!0;try{const o=_.value.trim();i("save",n.connection,{settings:{...P.value},...o?{secrets:{apiKey:o}}:{}})}finally{w.value=!1}}}const L=[{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"}],T=[{label:"Alloy",value:"alloy"},{label:"Echo",value:"echo"},{label:"Fable",value:"fable"},{label:"Nova",value:"nova"},{label:"Onyx",value:"onyx"},{label:"Shimmer",value:"shimmer"}],M=[{label:"冰糖 (中文·女)",value:"冰糖"},{label:"茉莉 (中文·女)",value:"茉莉"},{label:"苏打 (中文·男)",value:"苏打"},{label:"白桦 (中文·男)",value:"白桦"}],D=[{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"}],E=[{label:"Seed TTS 2.0",value:Ke}],V=C(()=>{const o=S("voice").trim(),c=ze.map(v=>({label:v.label,value:v.value}));return o&&!ze.some(v=>v.value===o)?[{label:o,value:o},...c]:c}),X=C(()=>[{label:s("settings.voice.sttAudioTranscodeNone"),value:"none"},{label:s("settings.voice.sttAudioTranscodeFfmpeg"),value:"ffmpeg"}]);function f(o){b("voice",o),b("model",Oa(o)||"seed-tts-2.0")}return(o,c)=>(U(),Y(e(ki),{show:p.show,width:400,"onUpdate:show":c[16]||(c[16]=v=>i("close"))},{default:r(()=>[a(e(Pi),{title:p.connection?.label,closable:""},{footer:r(()=>[a(e(xe),{justify:"end"},{default:r(()=>[a(e(K),{onClick:c[15]||(c[15]=v=>i("close"))},{default:r(()=>[N(y(e(s)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:w.value,onClick:R},{default:r(()=>[N(y(e(s)("common.save")),1)]),_:1},8,["loading"])]),_:1})]),default:r(()=>[p.connection?(U(),Y(e($e),{key:0,"label-placement":"top"},{default:r(()=>[p.connection.isBuiltin?B("",!0):(U(),Y(e(j),{key:0,label:e(s)("settings.voice.apiKey")},{default:r(()=>[a(e(W),{value:_.value,"onUpdate:value":c[0]||(c[0]=v=>_.value=v),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?(U(),Y(e(j),{key:1,label:e(s)("settings.voice.model")},{default:r(()=>[p.connection.provider==="mimo"?(U(),Y(e(G),{key:0,value:S("model"),options:D,"onUpdate:value":c[1]||(c[1]=v=>b("model",v))},null,8,["value"])):p.connection.provider==="doubao"?(U(),Y(e(G),{key:1,value:S("model")||e("seed-tts-2.0"),options:E,tag:"",filterable:"","onUpdate:value":c[2]||(c[2]=v=>b("model",v))},null,8,["value"])):(U(),Y(e(W),{key:2,value:S("model"),placeholder:e(s)("models.selectOrInput"),"onUpdate:value":c[3]||(c[3]=v=>b("model",v))},null,8,["value","placeholder"]))]),_:1},8,["label"])):B("",!0),l.value.voices?(U(),Y(e(j),{key:2,label:e(s)("settings.voice.voice")},{default:r(()=>[p.connection.provider==="edge"?(U(),Y(e(G),{key:0,value:S("voice"),options:L,filterable:"","onUpdate:value":c[4]||(c[4]=v=>b("voice",v))},null,8,["value"])):p.connection.provider==="openai"?(U(),Y(e(G),{key:1,value:S("voice"),options:T,"onUpdate:value":c[5]||(c[5]=v=>b("voice",v))},null,8,["value"])):p.connection.provider==="mimo"&&S("model")==="mimo-v2.5-tts"?(U(),Y(e(G),{key:2,value:S("voice"),options:M,"onUpdate:value":c[6]||(c[6]=v=>b("voice",v))},null,8,["value"])):p.connection.provider==="doubao"?(U(),Y(e(G),{key:3,value:S("voice"),options:V.value,tag:"",filterable:"","onUpdate:value":f},null,8,["value","options"])):(U(),Y(e(W),{key:4,value:S("voice"),"onUpdate:value":c[7]||(c[7]=v=>b("voice",v))},null,8,["value"]))]),_:1},8,["label"])):B("",!0),p.connection.provider==="edge"?(U(),O(ye,{key:3},[a(e(j),{label:e(s)("settings.voice.edgeRate")},{default:r(()=>[a(e(xe),{vertical:"",style:{width:"100%"}},{default:r(()=>[a(e(Xe),{value:h("rate",1),min:.5,max:2,step:.05,"onUpdate:value":c[8]||(c[8]=v=>b("rate",Array.isArray(v)?v[0]:v))},null,8,["value"]),g("span",Ws,y(h("rate",1).toFixed(2))+"x ("+y(e(Fa)(h("rate",1)))+")",1)]),_:1})]),_:1},8,["label"]),a(e(j),{label:e(s)("settings.voice.edgePitch")},{default:r(()=>[a(e(xe),{vertical:"",style:{width:"100%"}},{default:r(()=>[a(e(Xe),{value:h("pitch",0),min:-20,max:20,step:1,"onUpdate:value":c[9]||(c[9]=v=>b("pitch",Array.isArray(v)?v[0]:v))},null,8,["value"]),g("span",Gs,y(h("pitch",0)>0?"+":"")+y(h("pitch",0))+" Hz ("+y(e(Ia)(h("pitch",0)))+")",1)]),_:1})]),_:1},8,["label"])],64)):B("",!0),p.connection.provider==="mimo"?(U(),O(ye,{key:4},[l.value.stylePrompt?(U(),Y(e(j),{key:0,label:e(s)("settings.voice.mimoStylePrompt")},{default:r(()=>[a(e(W),{value:S("stylePrompt"),type:"textarea",rows:2,"onUpdate:value":c[10]||(c[10]=v=>b("stylePrompt",v))},null,8,["value"])]),_:1},8,["label"])):B("",!0),S("model")==="mimo-v2.5-tts-voicedesign"?(U(),Y(e(j),{key:1,label:e(s)("settings.voice.mimoVoiceDesignPrompt")},{default:r(()=>[a(e(W),{value:S("voiceDesignDesc"),type:"textarea",rows:3,"onUpdate:value":c[11]||(c[11]=v=>b("voiceDesignDesc",v))},null,8,["value"])]),_:1},8,["label"])):B("",!0)],64)):B("",!0),p.connection.kind==="stt"&&p.connection.provider!=="browser"?(U(),O(ye,{key:5},[a(e(j),{label:e(s)("settings.voice.sttAudioTranscode")},{default:r(()=>[a(e(G),{value:S("audioTranscode")||"none",options:X.value,"onUpdate:value":c[12]||(c[12]=v=>b("audioTranscode",v))},null,8,["value","options"])]),_:1},8,["label"]),a(e(j),{label:e(s)("settings.voice.sttLanguage")},{default:r(()=>[a(e(W),{value:S("language"),"onUpdate:value":c[13]||(c[13]=v=>b("language",v))},null,8,["value"])]),_:1},8,["label"]),a(e(j),{label:e(s)("settings.voice.sttPrompt")},{default:r(()=>[a(e(W),{value:S("prompt"),type:"textarea",rows:2,"onUpdate:value":c[14]||(c[14]=v=>b("prompt",v))},null,8,["value"])]),_:1},8,["label"])],64)):B("",!0)]),_:1})):B("",!0)]),_:1},8,["title"])]),_:1},8,["show"]))}})})),di,an=A((()=>{Js(),Js(),di=ui})),Qs,Zs,ea,ta,sa,aa,ia,la,na,oa,ra,ua,da,ca,va,pa,ma,ga,_a,fa,ya,ba,ci,ha=A((()=>{Z(),ie(),se(),cl(),ul(),tl(),jl(),Da(),Ql(),sn(),an(),Qs={class:"voice-settings"},Zs={class:"settings-section voice-provider-section","aria-labelledby":"tts-providers-title"},ea={class:"section-header"},ta={class:"section-copy"},sa={id:"tts-providers-title",class:"section-title"},aa={class:"section-desc"},ia={class:"section-controls"},la={class:"active-select"},na={class:"active-label"},oa={class:"active-summary"},ra={class:"test-copy-row"},ua={class:"provider-list"},da={class:"settings-section voice-provider-section","aria-labelledby":"stt-providers-title"},ca={class:"section-header"},va={class:"section-copy"},pa={id:"stt-providers-title",class:"section-title"},ma={class:"section-desc"},ga={class:"section-controls"},_a={class:"active-select"},fa={class:"active-label"},ya={class:"active-summary"},ba={class:"provider-list"},ci=te({__name:"VoiceSettings",setup(p){const{t}=ae(),n=re(),i=pl(),s=Xl(),w=$(t("settings.voice.testTextDefault")),P=$(!1),_=$("tts"),m=$(!1),l=$(null),b=sl({maxDurationMs:3e4}),S=$({}),h=C(()=>s.activeTtsConnection.value?.label||t("settings.voice.noneSelected")),R=C(()=>s.activeSttConnection.value?.label||t("settings.voice.noneSelected"));ke(async()=>{await s.refresh()});function L(d){_.value=d,P.value=!0}function T(d,u,k){S.value={...S.value,[d]:{status:u,message:k}}}function M(d){const u={...S.value};for(const[k,J]of Object.entries(u))k!==d&&J.status==="recording"&&(u[k]={status:"idle"});S.value=u}async function D(d){try{await s.saveConnection(_.value,d.preset.provider,{settings:d.settings,secrets:d.secrets}),P.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(u){n.error(u instanceof Error?u.message:t("settings.voice.ttsSaveFailed"))}}function E(d){l.value=d,m.value=!0}async function V(d,u){try{await s.saveConnection(d.kind,d.provider,u),m.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(k){n.error(k instanceof Error?k.message:t("settings.voice.ttsSaveFailed"))}}async function X(d){try{await s.deleteSecret(d.kind,d.provider),T(d.id,"idle"),n.success(t("settings.voice.ttsCleared"))}catch(u){n.error(u instanceof Error?u.message:t("settings.voice.ttsClearFailed"))}}async function f(d){await s.setActiveConnection(d.kind,d.id)}async function o(d){await s.setActiveConnection("tts",d)}async function c(d){await s.setActiveConnection("stt",d)}function v(d){return{...d.settings,baseUrl:d.baseUrl||d.settings.baseUrl,model:d.model||d.settings.model,voice:d.voice||d.settings.voice}}function x(d){const u=v(d),k=d.provider==="edge"||d.provider==="openai"||d.provider==="custom"||d.provider==="doubao"?d.provider:void 0,J=Number(u.rate),ue=Number(u.pitch);return{baseUrl:String(u.baseUrl||""),model:typeof u.model=="string"?u.model:void 0,voice:typeof u.voice=="string"?u.voice:void 0,rate:d.provider==="edge"&&Number.isFinite(J)?Fa(J):typeof u.rate=="string"?u.rate:void 0,pitch:d.provider==="edge"&&Number.isFinite(ue)?Ia(ue):typeof u.pitch=="string"?u.pitch:void 0,stylePrompt:typeof u.stylePrompt=="string"?u.stylePrompt:void 0,provider:k}}function ve(d){const u=v(d);return{baseUrl:String(u.baseUrl||"https://api.xiaomimimo.com/v1"),model:String(u.model||"mimo-v2.5-tts"),voice:typeof u.voice=="string"?u.voice:void 0,authMode:u.authMode==="api-key"||u.authMode==="bearer"||u.authMode==="both"?u.authMode:void 0,voiceMode:u.voiceMode==="preset"||u.voiceMode==="voiceDesign"||u.voiceMode==="voiceClone"?u.voiceMode:void 0,voiceDesignDesc:typeof u.voiceDesignDesc=="string"?u.voiceDesignDesc:void 0,voiceCloneDataUri:typeof u.voiceCloneDataUri=="string"?u.voiceCloneDataUri:void 0,voiceCloneFormat:u.voiceCloneFormat==="mp3"||u.voiceCloneFormat==="wav"?u.voiceCloneFormat:void 0,stylePrompt:typeof u.stylePrompt=="string"?u.stylePrompt:void 0}}async function _e(d){const u=w.value.trim();if(!u){T(d.id,"error",t("settings.voice.testTextRequired"));return}if(!d.isBuiltin&&!d.hasSecret){T(d.id,"error",t("settings.voice.keyMissingForTest"));return}T(d.id,"loading",t("settings.voice.testing"));try{d.provider==="mimo"?await i.mimoPlay(d.id,u,ve(d)):(d.provider==="edge"||d.provider==="openai"||d.provider==="custom"||d.provider==="doubao")&&await i.openaiPlay(d.id,u,x(d)),T(d.id,"success",t("settings.voice.testSuccess"))}catch(k){T(d.id,"error",t("settings.voice.testFailed",{error:k instanceof Error?k.message:String(k)}))}}async function fe(d){if(d.provider==="browser"){T(d.id,"success",t("settings.voice.browserSttTestHint"));return}if(!d.hasSecret){T(d.id,"error",t("settings.voice.keyMissingForTest"));return}if(S.value[d.id]?.status==="recording"){T(d.id,"loading",t("settings.voice.transcribing"));try{const u=await b.stop();if(!u.size){T(d.id,"error",t("settings.voice.sttEmptyAudio"));return}const k=await il({audio:u,provider:d.provider});T(d.id,"success",k.text||t("settings.voice.sttTestSuccess"))}catch(u){T(d.id,"error",t("settings.voice.sttTestFailed",{error:u instanceof Error?u.message:String(u)}))}return}try{M(d.id),await b.start(),T(d.id,"recording",t("settings.voice.sttRecordingHint"))}catch(u){console.error("[VoiceSettings] Failed to start STT card test recording:",u),T(d.id,"error",t("settings.voice.sttTestFailed",{error:u instanceof Error?u.message:String(u)}))}}async function q(d){if(d.kind==="tts"){await _e(d);return}await fe(d)}return(d,u)=>(U(),O("div",Qs,[g("section",Zs,[g("header",ea,[g("div",ta,[g("h4",sa,y(e(t)("settings.voice.ttsProvidersTitle")),1),g("p",aa,y(e(t)("settings.voice.ttsProvidersDescription")),1)]),g("div",ia,[g("div",la,[g("span",na,y(e(t)("settings.voice.activeTtsApi")),1),a(e(G),{value:e(s).activeTtsId.value,options:e(s).ttsConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeTtsApi"),"onUpdate:value":o},null,8,["value","options","aria-label"]),g("span",oa,y(h.value),1)]),a(e(K),{size:"small",secondary:"",onClick:u[0]||(u[0]=k=>L("tts"))},{default:r(()=>[N(y(e(t)("settings.voice.addTtsApi")),1)]),_:1})])]),g("div",ra,[a(e(W),{value:w.value,"onUpdate:value":u[1]||(u[1]=k=>w.value=k),size:"small",placeholder:e(t)("settings.voice.testTextPlaceholder"),"data-testid":"tts-test-text"},null,8,["value","placeholder"])]),g("div",ua,[(U(!0),O(ye,null,Me(e(s).ttsConnections.value,k=>(U(),Y(Le,{key:k.id,connection:k,"test-state":S.value[k.id],onSetActive:f,onTest:q,onEdit:E,onConnect:E,onRemove:X},null,8,["connection","test-state"]))),128))])]),g("section",da,[g("header",ca,[g("div",va,[g("h4",pa,y(e(t)("settings.voice.sttProvidersTitle")),1),g("p",ma,y(e(t)("settings.voice.sttProvidersDescription")),1)]),g("div",ga,[g("div",_a,[g("span",fa,y(e(t)("settings.voice.activeSttApi")),1),a(e(G),{value:e(s).activeSttId.value,options:e(s).sttConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeSttApi"),"onUpdate:value":c},null,8,["value","options","aria-label"]),g("span",ya,y(R.value),1)]),a(e(K),{size:"small",secondary:"",onClick:u[2]||(u[2]=k=>L("stt"))},{default:r(()=>[N(y(e(t)("settings.voice.addSttApi")),1)]),_:1})])]),g("div",ba,[(U(!0),O(ye,null,Me(e(s).sttConnections.value,k=>(U(),Y(Le,{key:k.id,connection:k,"test-state":S.value[k.id],onSetActive:f,onTest:q,onEdit:E,onConnect:E,onRemove:X},null,8,["connection","test-state"]))),128))])]),a(ri,{show:P.value,kind:_.value,onClose:u[3]||(u[3]=k=>P.value=!1),onSaved:D},null,8,["show","kind"]),a(di,{show:m.value,connection:l.value,onClose:u[4]||(u[4]=k=>m.value=!1),onSave:V},null,8,["show","connection"])]))}})})),ln=A((()=>{})),vi,nn=A((()=>{ha(),ha(),ln(),le(),vi=ne(ci,[["__scopeId","data-v-6df4117c"]])})),Sa,wa,Ua,ka,pi,Pa=A((()=>{Z(),$i(),ie(),se(),be(),bl(),Sl(),Ul(),Pl(),Tl(),xl(),Ml(),Dl(),Il(),zl(),Vl(),nn(),Ne(),$a(),Sa={class:"settings-view"},wa={class:"page-header"},Ua={class:"header-title"},ka={class:"settings-content"},pi=te({__name:"SettingsView",setup(p){const t=he(),n=xa(),{t:i}=ae(),s=Di(),w=Mi(),P=Oi(),_=$("account"),m=C(()=>new Set(["account",...s?["users"]:[],"display","proxy","agent","memory","compression","session","privacy","models","voice"]));function l(h){const R=typeof h=="string"?h:"";return m.value.has(R)?R:"account"}function b(h){_.value=l(h),P.replace({query:{...w.query,tab:_.value==="account"?void 0:_.value}})}Ue(()=>w.query.tab,h=>{_.value=l(h)},{immediate:!0});async function S(){(!n.activeProfileName||n.profiles.length===0)&&await n.fetchProfiles(),await t.fetchSettings()}return ke(()=>{S()}),(h,R)=>(U(),O("div",Sa,[g("header",wa,[g("h2",Ua,y(e(i)("settings.title")),1)]),g("div",ka,[a(e(Ta),{show:e(t).loading||e(t).saving,size:"large",description:e(i)("common.loading")},{default:r(()=>[a(e(xi),{value:_.value,"onUpdate:value":[R[0]||(R[0]=L=>_.value=L),b],type:"line",animated:""},{default:r(()=>[a(e(me),{name:"account",tab:e(i)("settings.tabs.account")},{default:r(()=>[a(ti)]),_:1},8,["tab"]),e(s)?(U(),Y(e(me),{key:0,name:"users",tab:e(i)("settings.tabs.users")},{default:r(()=>[a(ai)]),_:1},8,["tab"])):B("",!0),a(e(me),{name:"display",tab:e(i)("settings.tabs.display")},{default:r(()=>[a(za)]),_:1},8,["tab"]),a(e(me),{name:"proxy",tab:e(i)("settings.tabs.proxy")},{default:r(()=>[a(Ea)]),_:1},8,["tab"]),a(e(me),{name:"agent",tab:e(i)("settings.tabs.agent")},{default:r(()=>[a(Va),a(Na)]),_:1},8,["tab"]),a(e(me),{name:"memory",tab:e(i)("settings.tabs.memory")},{default:r(()=>[a(qa)]),_:1},8,["tab"]),a(e(me),{name:"compression",tab:e(i)("settings.tabs.compression")},{default:r(()=>[a(Xa)]),_:1},8,["tab"]),a(e(me),{name:"session",tab:e(i)("settings.tabs.session")},{default:r(()=>[a(Wa)]),_:1},8,["tab"]),a(e(me),{name:"privacy",tab:e(i)("settings.tabs.privacy")},{default:r(()=>[a(Ja)]),_:1},8,["tab"]),a(e(me),{name:"models",tab:e(i)("settings.tabs.models")},{default:r(()=>[a(Za)]),_:1},8,["tab"]),a(e(me),{name:"voice",tab:e(i)("settings.tabs.voice")},{default:r(()=>[a(vi)]),_:1},8,["tab"])]),_:1},8,["value"])]),_:1},8,["show","description"])])]))}})})),on=A((()=>{})),rn,un=A((()=>{Pa(),Pa(),on(),le(),rn=ne(pi,[["__scopeId","data-v-ed31db3f"]])}));un();export{rn as default};
|
|
1
|
+
import{a as wi,n as A}from"./rolldown-runtime-M0oDzQ_3.js";import{$t as Ye,A as $e,Bn as Ue,Bt as Ie,Dn as Ui,E as ce,Hn as r,I as ki,It as W,K as Re,Kt as Z,M as xe,Nn as Me,O as j,Ot as K,P as Pi,Qn as Ca,V as re,Wt as Ci,an as g,cn as O,cr as e,er as $,et as Ti,f as me,fn as N,g as Ta,hn as te,in as C,jn as U,kn as ke,m as ee,mt as G,nt as Ai,on as Y,pn as a,pr as y,sn as B,t as ie,tn as ye,u as xi,ur as Ve,v as Xe,vn as ge,w as Aa}from"./ui-vendor-DDMfmCj2.js";import{M as $i,N as Mi,O as se,P as Oi,k as ae}from"./vue-vendor-BsMpqyaC.js";import{d as Di,f as Oe,n as le,t as ne,u as Ne}from"./_plugin-vue_export-helper-CvnFozKy.js";import{N as Fi}from"./vendor-B1Lfatlz.js";import{l as Ii,x as je}from"./system-Onp4yS9N.js";import{At as Ri,Dt as xa,Et as $a,F as We,I as Ge,L as be,P as zi,R as he,S as Je,Tt as Hi,b as Vi,c as Li,f as Ni,g as Ma,h as Ki,jt as Ei,l as Bi,m as qi,p as Yi,s as Xi,u as ji,v as Wi,wt as Gi,x as Qe,y as Ji}from"./index-B2IKGvbR.js";import{n as Se,t as H}from"./SettingRow-DfRI-z7L.js";import{n as Qi,t as Zi}from"./session-browser-prefs-BYjSnxJq.js";import{a as el,c as tl,d as sl,i as al,l as il,n as ll,o as Ze,r as nl,s as ol,t as rl,u as ul}from"./useSttSettings-C-jexrW7.js";import{a as dl,c as ze,d as cl,i as vl,l as Oa,n as Da,o as Ke,p as pl,r as Fa,s as ml,t as Ia,u as Ee}from"./ttsHelpers-DNcZ5khq.js";import{n as gl,t as et}from"./chat-input-height-BhYiNOv7.js";import{n as _l,t as fl}from"./models-DetB4_Ug.js";var tt,st,at,Ra,it=A((()=>{Z(),ie(),se(),be(),Ri(),zi(),gl(),Se(),tt={class:"settings-section"},st={class:"notify-controls"},at={class:"chat-input-height-controls"},Ra=te({__name:"DisplaySettings",setup(p){const t=he(),n=re(),{t:i}=ae(),{brightness:s,setBrightness:w}=Ei(),P=[{label:i("settings.display.themeLight"),value:"light"},{label:i("settings.display.themeDark"),value:"dark"},{label:i("settings.display.themeSystem"),value:"system"}],_=C(()=>et(t.display.chat_input_height));async function m(T){try{await t.saveSection("display",T),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}function l(T){const M=T;w(M),m({skin:M})}function b(T){return m({chat_input_height:et(T)})}function S(){return m({chat_input_height:null})}function h(T){return T.reason==="insecure"?"settings.display.notifyOnCompleteInsecure":T.reason==="unsupported"?"settings.display.notifyOnCompleteUnsupported":"settings.display.notifyOnCompleteDenied"}async function R(T){if(T){const M=await We();if(!M.granted){n.error(i(h(M)));return}}await m({notify_on_complete:T}),T&&Ge({title:"Hermes",body:i("settings.display.notifyOnCompleteTest"),icon:"/coding-agents/hermes.png",tag:`hermes-complete-test-${Date.now()}`})}async function L(){const T=await We();if(!T.granted){n.error(i(h(T)));return}if(!await Ge({title:"Hermes",body:i("settings.display.notifyOnCompleteTest"),icon:"/coding-agents/hermes.png",tag:`hermes-complete-test-${Date.now()}`})){n.error(i("settings.display.notifyOnCompleteTestFailed"));return}n.success(i("settings.display.notifyOnCompleteTestSent"))}return(T,M)=>(U(),O("section",tt,[a(H,{label:e(i)("settings.display.theme"),hint:e(i)("settings.display.themeHint")},{default:r(()=>[a(e(G),{value:e(s),options:P,size:"small","consistent-menu-width":!1,class:"input-sm","onUpdate:value":l},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.streaming"),hint:e(i)("settings.display.streamingHint")},{default:r(()=>[a(e(ee),{value:e(t).display.streaming,"onUpdate:value":M[0]||(M[0]=D=>m({streaming:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.compact"),hint:e(i)("settings.display.compactHint")},{default:r(()=>[a(e(ee),{value:e(t).display.compact,"onUpdate:value":M[1]||(M[1]=D=>m({compact:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.showReasoning"),hint:e(i)("settings.display.showReasoningHint")},{default:r(()=>[a(e(ee),{value:e(t).display.show_reasoning,"onUpdate:value":M[2]||(M[2]=D=>m({show_reasoning:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.showCost"),hint:e(i)("settings.display.showCostHint")},{default:r(()=>[a(e(ee),{value:e(t).display.show_cost,"onUpdate:value":M[3]||(M[3]=D=>m({show_cost:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.inlineDiffs"),hint:e(i)("settings.display.inlineDiffsHint")},{default:r(()=>[a(e(ee),{value:e(t).display.inline_diffs,"onUpdate:value":M[4]||(M[4]=D=>m({inline_diffs:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.bellOnComplete"),hint:e(i)("settings.display.bellOnCompleteHint")},{default:r(()=>[a(e(ee),{value:e(t).display.bell_on_complete,"onUpdate:value":M[5]||(M[5]=D=>m({bell_on_complete:D}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.notifyOnComplete"),hint:`${e(i)("settings.display.notifyOnCompleteHint")} ${e(i)("settings.display.notifyOnCompleteMacHint")}`},{default:r(()=>[g("div",st,[a(e(ee),{value:e(t).display.notify_on_complete,"onUpdate:value":R},null,8,["value"]),a(e(K),{size:"tiny",secondary:"",onClick:L},{default:r(()=>[N(y(e(i)("settings.display.notifyOnCompleteTestButton")),1)]),_:1})])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.display.chatInputHeight"),hint:e(i)("settings.display.chatInputHeightHint")},{default:r(()=>[g("div",at,[a(e(ce),{value:_.value,min:e(48),max:e(400),step:8,"show-button":!1,size:"small",class:"input-sm","onUpdate:value":b},{suffix:r(()=>[...M[6]||(M[6]=[N("px",-1)])]),_:1},8,["value","min","max"]),a(e(K),{size:"tiny",secondary:"",onClick:S},{default:r(()=>[N(y(e(i)("common.reset")),1)]),_:1})])]),_:1},8,["label","hint"])]))}})})),yl=A((()=>{})),za,bl=A((()=>{it(),it(),yl(),le(),za=ne(Ra,[["__scopeId","data-v-46e61b5e"]])})),lt,Ha,nt=A((()=>{Z(),ie(),se(),be(),Se(),lt={class:"settings-section"},Ha=te({__name:"AgentSettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s={};function w(_){t.updateLocal("agent",_),t.saveSection("agent",_).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function P(_,m){t.updateLocal("agent",{[_]:m}),s[_]&&clearTimeout(s[_]),s[_]=setTimeout(async()=>{try{await t.saveSection("agent",{[_]:m}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(_,m)=>(U(),O("section",lt,[a(H,{label:e(i)("settings.agent.maxTurns"),hint:e(i)("settings.agent.maxTurnsHint")},{default:r(()=>[a(e(ce),{value:e(t).agent.max_turns,min:1,max:200,step:5,size:"small",class:"input-sm","onUpdate:value":m[0]||(m[0]=l=>l!=null&&P("max_turns",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.gatewayTimeout"),hint:e(i)("settings.agent.gatewayTimeoutHint")},{default:r(()=>[a(e(ce),{value:e(t).agent.gateway_timeout,min:60,max:7200,step:60,size:"small",class:"input-sm","onUpdate:value":m[1]||(m[1]=l=>l!=null&&P("gateway_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.restartDrainTimeout"),hint:e(i)("settings.agent.restartDrainTimeoutHint")},{default:r(()=>[a(e(ce),{value:e(t).agent.restart_drain_timeout,min:10,max:300,step:10,size:"small",class:"input-sm","onUpdate:value":m[2]||(m[2]=l=>l!=null&&P("restart_drain_timeout",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.agent.toolEnforcement"),hint:e(i)("settings.agent.toolEnforcementHint")},{default:r(()=>[a(e(G),{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":m[3]||(m[3]=l=>w({tool_use_enforcement:l}))},null,8,["value","options"])]),_:1},8,["label","hint"])]))}})})),hl=A((()=>{})),Va,Sl=A((()=>{nt(),nt(),hl(),le(),Va=ne(Ha,[["__scopeId","data-v-d06d83a7"]])})),ot,rt,ut,La,dt=A((()=>{Z(),ie(),se(),be(),$a(),Se(),ot={class:"settings-section gateway-auto-start-settings"},rt={class:"section-title"},ut={class:"section-hint"},La=te({__name:"GatewayAutoStartSettings",setup(p){const t=he(),n=xa(),i=re(),{t:s}=ae(),w=C(()=>t.gatewayAutoStart.enabled!==!1),P=C(()=>Array.isArray(t.gatewayAutoStart.include)?"include":"all"),_=C(()=>t.gatewayAutoStart.management==="unified"),m=C(()=>t.gatewayAutoStart.include||[]),l=C(()=>t.gatewayAutoStart.exclude||[]),b=C(()=>(n.activeProfileName||n.activeProfile?.name||"default")==="default"),S=C(()=>n.profiles.map(V=>({label:V.name,value:V.name}))),h=C(()=>[{label:s("settings.gatewayAutoStart.modeAll"),value:"all"},{label:s("settings.gatewayAutoStart.modeInclude"),value:"include"}]);function R(V){const X=new Set,f=[];for(const o of V){const c=String(o||"").trim();!c||X.has(c)||(X.add(c),f.push(c))}return f}async function L(V){try{t.updateLocal("gatewayAutoStart",V),await t.saveSection("gatewayAutoStart",V,{restart:!1}),await t.fetchSettings(),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}function T(V){L(V==="include"?{include:t.gatewayAutoStart.include||[],exclude:null}:{include:null})}function M(V){L({management:V?"unified":"per_profile"})}function D(V){L({include:R(V),exclude:null})}function E(V){const X=R(V);L({exclude:X.length>0?X:null})}return(V,X)=>(U(),O("section",ot,[g("h3",rt,y(e(s)("settings.gatewayAutoStart.title")),1),g("p",ut,y(e(s)("settings.gatewayAutoStart.description")),1),a(H,{label:e(s)("settings.gatewayAutoStart.enabled"),hint:e(s)("settings.gatewayAutoStart.enabledHint")},{default:r(()=>[a(e(ee),{value:w.value,"onUpdate:value":X[0]||(X[0]=f=>L({enabled:f}))},null,8,["value"])]),_:1},8,["label","hint"]),b.value?(U(),Y(H,{key:0,label:e(s)("settings.gatewayAutoStart.management"),hint:e(s)("settings.gatewayAutoStart.managementHint")},{default:r(()=>[a(e(ee),{value:_.value,"onUpdate:value":M},null,8,["value"])]),_:1},8,["label","hint"])):B("",!0),a(H,{label:e(s)("settings.gatewayAutoStart.mode"),hint:e(s)("settings.gatewayAutoStart.modeHint")},{default:r(()=>[a(e(G),{value:P.value,options:h.value,size:"small",class:"input-md","onUpdate:value":T},null,8,["value","options"])]),_:1},8,["label","hint"]),P.value==="include"?(U(),Y(H,{key:1,label:e(s)("settings.gatewayAutoStart.include"),hint:e(s)("settings.gatewayAutoStart.includeHint")},{default:r(()=>[a(e(G),{multiple:"",filterable:"",value:m.value,options:S.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":D},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):B("",!0),P.value==="all"?(U(),Y(H,{key:2,label:e(s)("settings.gatewayAutoStart.exclude"),hint:e(s)("settings.gatewayAutoStart.excludeHint")},{default:r(()=>[a(e(G),{multiple:"",filterable:"",value:l.value,options:S.value,size:"small",class:"input-md",placeholder:e(s)("settings.gatewayAutoStart.profileListPlaceholder"),"onUpdate:value":E},null,8,["value","options","placeholder"])]),_:1},8,["label","hint"])):B("",!0)]))}})})),wl=A((()=>{})),Na,Ul=A((()=>{dt(),dt(),wl(),le(),Na=ne(La,[["__scopeId","data-v-a9b52cd2"]])})),ct,vt,pt,mt,Ka,gt=A((()=>{Z(),ie(),se(),be(),Se(),ct={class:"settings-section proxy-settings"},vt={class:"section-title"},pt={class:"section-hint"},mt={class:"settings-actions"},Ka=te({__name:"ProxySettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s=["HTTPS_PROXY","HTTP_PROXY","ALL_PROXY","NO_PROXY"],w=Ca({HTTPS_PROXY:"",HTTP_PROXY:"",ALL_PROXY:"",NO_PROXY:""});Ue(()=>t.proxy,_=>{for(const m of s)w[m]=String(_?.[m]||"")},{immediate:!0,deep:!0});async function P(){try{await t.saveSection("proxy",{...w}),await t.fetchSettings(),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}return(_,m)=>(U(),O("section",ct,[g("h3",vt,y(e(i)("settings.proxy.title")),1),g("p",pt,y(e(i)("settings.proxy.description")),1),a(H,{label:e(i)("settings.proxy.httpsProxy"),hint:e(i)("settings.proxy.httpsProxyHint")},{default:r(()=>[a(e(W),{value:w.HTTPS_PROXY,"onUpdate:value":m[0]||(m[0]=l=>w.HTTPS_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"http://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.httpProxy"),hint:e(i)("settings.proxy.httpProxyHint")},{default:r(()=>[a(e(W),{value:w.HTTP_PROXY,"onUpdate:value":m[1]||(m[1]=l=>w.HTTP_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"http://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.allProxy"),hint:e(i)("settings.proxy.allProxyHint")},{default:r(()=>[a(e(W),{value:w.ALL_PROXY,"onUpdate:value":m[2]||(m[2]=l=>w.ALL_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"socks5://127.0.0.1:7890"},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.proxy.noProxy"),hint:e(i)("settings.proxy.noProxyHint")},{default:r(()=>[a(e(W),{value:w.NO_PROXY,"onUpdate:value":m[3]||(m[3]=l=>w.NO_PROXY=l),clearable:"",size:"small",class:"input-lg",placeholder:"localhost,127.0.0.1,.local"},null,8,["value"])]),_:1},8,["label","hint"]),g("div",mt,[a(e(K),{type:"primary",loading:e(t).saving,onClick:P},{default:r(()=>[N(y(e(i)("settings.proxy.save")),1)]),_:1},8,["loading"])])]))}})})),kl=A((()=>{})),Ea,Pl=A((()=>{gt(),gt(),kl(),le(),Ea=ne(Ka,[["__scopeId","data-v-a377191a"]])})),_t,Ba,ft=A((()=>{Z(),ie(),se(),be(),Se(),_t={class:"settings-section"},Ba=te({__name:"MemorySettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s={};function w(_){t.updateLocal("memory",_),t.saveSection("memory",_).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function P(_,m){t.updateLocal("memory",{[_]:m}),s[_]&&clearTimeout(s[_]),s[_]=setTimeout(async()=>{try{await t.saveSection("memory",{[_]:m}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(_,m)=>(U(),O("section",_t,[a(H,{label:e(i)("settings.memory.enabled"),hint:e(i)("settings.memory.enabledHint")},{default:r(()=>[a(e(ee),{value:e(t).memory.memory_enabled,"onUpdate:value":m[0]||(m[0]=l=>w({memory_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.userProfile"),hint:e(i)("settings.memory.userProfileHint")},{default:r(()=>[a(e(ee),{value:e(t).memory.user_profile_enabled,"onUpdate:value":m[1]||(m[1]=l=>w({user_profile_enabled:l}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.charLimit"),hint:e(i)("settings.memory.charLimitHint")},{default:r(()=>[a(e(ce),{value:e(t).memory.memory_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":m[2]||(m[2]=l=>l!=null&&P("memory_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.memory.userCharLimit"),hint:e(i)("settings.memory.userCharLimitHint")},{default:r(()=>[a(e(ce),{value:e(t).memory.user_char_limit,min:100,max:1e4,step:100,size:"small",class:"input-sm","onUpdate:value":m[3]||(m[3]=l=>l!=null&&P("user_char_limit",l))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Cl=A((()=>{})),qa,Tl=A((()=>{ft(),ft(),Cl(),le(),qa=ne(Ba,[["__scopeId","data-v-b2529605"]])})),yt,Ya,bt=A((()=>{Z(),ie(),se(),be(),Se(),yt={class:"settings-section"},Ya=te({__name:"CompressionSettings",setup(p){const t=he(),n=re(),{t:i}=ae(),s={enabled:!0,threshold:.5,target_ratio:.2,protect_last_n:20,protect_first_n:3},w={};function P(m){t.updateLocal("compression",m),t.saveSection("compression",m).then(()=>{n.success(i("settings.saved"))}).catch(()=>{n.error(i("settings.saveFailed"))})}function _(m,l){t.updateLocal("compression",{[m]:l}),w[m]&&clearTimeout(w[m]),w[m]=setTimeout(async()=>{try{await t.saveSection("compression",{[m]:l}),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}},300)}return(m,l)=>(U(),O("section",yt,[a(H,{label:e(i)("settings.compression.enabled"),hint:e(i)("settings.compression.enabledHint")},{default:r(()=>[a(e(ee),{value:e(t).compression.enabled??s.enabled,size:"small","onUpdate:value":l[0]||(l[0]=b=>P({enabled:b}))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.threshold"),hint:e(i)("settings.compression.thresholdHint")},{default:r(()=>[a(e(ce),{value:e(t).compression.threshold??s.threshold,min:.1,max:.95,step:.05,size:"small",class:"input-sm","onUpdate:value":l[1]||(l[1]=b=>b!=null&&_("threshold",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.targetRatio"),hint:e(i)("settings.compression.targetRatioHint")},{default:r(()=>[a(e(ce),{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]=b=>b!=null&&_("target_ratio",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.protectLastN"),hint:e(i)("settings.compression.protectLastNHint")},{default:r(()=>[a(e(ce),{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]=b=>b!=null&&_("protect_last_n",b))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(i)("settings.compression.protectFirstN"),hint:e(i)("settings.compression.protectFirstNHint")},{default:r(()=>[a(e(ce),{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]=b=>b!=null&&_("protect_first_n",b))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Al=A((()=>{})),Xa,xl=A((()=>{bt(),bt(),Al(),le(),Xa=ne(Ya,[["__scopeId","data-v-b584a6a0"]])})),ht,ja,St=A((()=>{Z(),ie(),se(),be(),Zi(),Se(),ht={class:"settings-section"},ja=te({__name:"SessionSettings",setup(p){const t=he(),n=Qi(),i=re(),{t:s}=ae(),w={};function P(b){t.updateLocal("session_reset",b),t.saveSection("session_reset",b).then(()=>{i.success(s("settings.saved"))}).catch(()=>{i.error(s("settings.saveFailed"))})}function _(b,S){t.updateLocal("session_reset",{[b]:S}),w[b]&&clearTimeout(w[b]),w[b]=setTimeout(async()=>{try{await t.saveSection("session_reset",{[b]:S}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}},300)}async function m(b){try{await t.saveSection("approvals",{mode:b?"manual":"off"}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}async function l(b,S){try{t.updateLocal(b,{write_approval:S}),await t.saveSection(b,{write_approval:S}),i.success(s("settings.saved"))}catch{i.error(s("settings.saveFailed"))}}return(b,S)=>(U(),O("section",ht,[a(H,{label:e(s)("settings.session.requireAuth"),hint:e(s)("settings.session.requireAuthHint")},{default:r(()=>[a(e(ee),{value:e(t).approvals.mode==="manual","onUpdate:value":m},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.memoryWriteApproval"),hint:e(s)("settings.session.memoryWriteApprovalHint")},{default:r(()=>[a(e(ee),{value:e(t).memory.write_approval===!0,"onUpdate:value":S[0]||(S[0]=h=>l("memory",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.skillsWriteApproval"),hint:e(s)("settings.session.skillsWriteApprovalHint")},{default:r(()=>[a(e(ee),{value:e(t).skills.write_approval===!0,"onUpdate:value":S[1]||(S[1]=h=>l("skills",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.mode"),hint:e(s)("settings.session.modeHint")},{default:r(()=>[a(e(G),{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":S[2]||(S[2]=h=>P({mode:h}))},null,8,["value","options"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.idleMinutes"),hint:e(s)("settings.session.idleMinutesHint")},{default:r(()=>[a(e(ce),{value:e(t).sessionReset.idle_minutes,min:10,max:10080,step:30,size:"small",class:"input-sm","onUpdate:value":S[3]||(S[3]=h=>h!=null&&_("idle_minutes",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.atHour"),hint:e(s)("settings.session.atHourHint")},{default:r(()=>[a(e(ce),{value:e(t).sessionReset.at_hour,min:0,max:23,step:1,size:"small",class:"input-sm","onUpdate:value":S[4]||(S[4]=h=>h!=null&&_("at_hour",h))},null,8,["value"])]),_:1},8,["label","hint"]),a(H,{label:e(s)("settings.session.liveMonitorHumanOnly"),hint:e(s)("settings.session.liveMonitorHumanOnlyHint")},{default:r(()=>[a(e(ee),{value:e(n).humanOnly,"onUpdate:value":S[5]||(S[5]=h=>e(n).setHumanOnly(h))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),$l=A((()=>{})),Wa,Ml=A((()=>{St(),St(),$l(),le(),Wa=ne(ja,[["__scopeId","data-v-5027aa2c"]])})),wt,Ga,Ut=A((()=>{Z(),ie(),se(),be(),Se(),wt={class:"settings-section"},Ga=te({__name:"PrivacySettings",setup(p){const t=he(),n=re(),{t:i}=ae();async function s(w){try{await t.saveSection("privacy",w),n.success(i("settings.saved"))}catch{n.error(i("settings.saveFailed"))}}return(w,P)=>(U(),O("section",wt,[a(H,{label:e(i)("settings.privacy.redactPii"),hint:e(i)("settings.privacy.redactPiiHint")},{default:r(()=>[a(e(ee),{value:e(t).privacy.redact_pii,"onUpdate:value":P[0]||(P[0]=_=>s({redact_pii:_}))},null,8,["value"])]),_:1},8,["label","hint"])]))}})})),Ol=A((()=>{})),Ja,Dl=A((()=>{Ut(),Ut(),Ol(),le(),Ja=ne(Ga,[["__scopeId","data-v-43145f27"]])})),kt,Pt,Ct,Tt,At,xt,$t,Mt,Qa,Ot=A((()=>{Z(),ie(),fl(),Ii(),se(),kt={class:"settings-section"},Pt={key:0,class:"empty-hint"},Ct={class:"provider-header"},Tt={class:"provider-name"},At={key:0,class:"provider-fields"},xt={class:"field-row"},$t={key:1,class:"provider-fields"},Mt={class:"field-row"},Qa=te({__name:"ModelSettings",setup(p){const{t}=ae(),n=_l(),i=re(),s=$(null),w=$({});ke(()=>{n.providers.length===0&&n.fetchProviders()});const P=b=>!n.providers.find(S=>S.provider===b)?.builtin&&b.startsWith("custom:");function _(b){if(!(b in w.value)){const S=n.providers.find(h=>h.provider===b);w.value[b]=S?.api_key||""}return w.value[b]}async function m(b){const S=_(b);if(!S.trim()){i.warning(t("settings.models.apiKeyPlaceholder"));return}s.value=b;try{await je(b,{api_key:S.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(h){i.error(h.message||t("settings.models.saveFailed"))}finally{s.value=null}}async function l(b){const S=_(b);s.value=b;try{await je(b,{api_key:S.trim()}),i.success(t("settings.models.saved")),await n.fetchProviders()}catch(h){i.error(h.message||t("settings.models.saveFailed"))}finally{s.value=null}}return(b,S)=>(U(),O("section",kt,[a(e(Ta),{show:e(n).loading},{default:r(()=>[e(n).providers.length===0?(U(),O("div",Pt,[a(e(Ci),{description:e(t)("settings.models.noProviders")},null,8,["description"])])):B("",!0),(U(!0),O(ye,null,Me(e(n).providers,h=>(U(),O("div",{key:h.provider,class:"provider-section"},[g("div",Ct,[g("h4",Tt,y(h.label),1),g("span",{class:Ve(["type-badge",P(h.provider)?"custom":"builtin"])},y(P(h.provider)?e(t)("models.customType"):e(t)("models.builtIn")),3)]),P(h.provider)?(U(),O("div",$t,[g("div",Mt,[a(e(W),{value:_(h.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>w.value[h.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(K),{type:"primary",size:"small",loading:s.value===h.provider,onClick:R=>l(h.provider)},{default:r(()=>[N(y(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])])):(U(),O("div",At,[g("div",xt,[a(e(W),{value:_(h.provider),type:"password","show-password-on":"click",placeholder:e(t)("settings.models.apiKeyPlaceholder"),autocomplete:"off","onUpdate:value":R=>w.value[h.provider]=R},null,8,["value","placeholder","onUpdate:value"]),a(e(K),{type:"primary",size:"small",loading:s.value===h.provider,onClick:R=>m(h.provider)},{default:r(()=>[N(y(e(t)("settings.models.save")),1)]),_:1},8,["loading","onClick"])])]))]))),128))]),_:1},8,["show"])]))}})})),Fl=A((()=>{})),Za,Il=A((()=>{Ot(),Ot(),Fl(),le(),Za=ne(Qa,[["__scopeId","data-v-8cd750e1"]])})),Dt,Ft,It,Rt,zt,Ht,Vt,Lt,Nt,Kt,Et,Bt,qt,Yt,Xt,jt,Wt,Gt,Jt,Qt,Zt,es,ts,ss,as,ei,is=A((()=>{Z(),ie(),se(),Ma(),Hi(),Dt=wi(Fi()),Ft={class:"account-settings"},It={class:"section-desc"},Rt={class:"avatar-section"},zt={class:"section-title"},Ht={class:"avatar-row"},Vt={class:"avatar-display"},Lt={class:"avatar-actions"},Nt={class:"avatar-hint"},Kt={class:"action-buttons"},Et={class:"configured-section"},Bt={class:"action-row"},qt={class:"action-label"},Yt={class:"action-buttons"},Xt={class:"locked-ips-section"},jt={class:"section-title"},Wt={class:"action-row",style:{"margin-bottom":"12px"}},Gt={class:"action-label"},Jt={class:"action-buttons"},Qt={key:0,class:"locked-list"},Zt={class:"locked-info"},es={class:"locked-ip"},ts={class:"locked-badge"},ss={class:"locked-ttl"},as={key:1,class:"empty-hint"},ei=te({__name:"AccountSettings",setup(p){const{t}=ae(),n=re(),i=$(null),s=$(!1),w=$(null),P=$(null),_=$(!1);function m(d,u){return new Promise((k,J)=>{const ue=new FileReader;ue.onload=()=>{const pe=new Image;pe.onload=()=>{const de=document.createElement("canvas");de.width=pe.width,de.height=pe.height,de.getContext("2d").drawImage(pe,0,0);const Pe=Ce=>{const De=de.toDataURL("image/jpeg",Ce);De.length<=u||Ce<=.3?k(De):Pe(Ce-.1)};Pe(.8)},pe.onerror=J,pe.src=ue.result},ue.onerror=J,ue.readAsDataURL(d)})}async function l(d){const u=d.target,k=u.files?.[0];if(k){if(!["image/png","image/jpeg","image/webp"].includes(k.type)){n.error(t("settings.userAvatar.invalidType")),u.value="";return}if(k.size>1024*1024){n.error(t("settings.userAvatar.tooLarge")),u.value="";return}_.value=!0;try{let J;k.size>500*1024?J=await m(k,500*1024):J=await new Promise((ue,pe)=>{const de=new FileReader;de.onload=()=>ue(de.result),de.onerror=pe,de.readAsDataURL(k)}),await Je({type:"image",dataUrl:J}),w.value={type:"image",dataUrl:J},n.success(t("settings.userAvatar.saveSuccess"))}catch(J){n.error(J.message||t("settings.userAvatar.saveFailed"))}finally{_.value=!1,u.value=""}}}async function b(){_.value=!0;try{const d=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():Math.random().toString(36).slice(2),u=`${i.value||"default"}-${Date.now()}-${d}`,k=(0,Dt.default)(u),J="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(k)));await Je({type:"image",dataUrl:J,seed:u}),w.value={type:"image",dataUrl:J,seed:u},n.success(t("settings.userAvatar.saveSuccess"))}catch(d){n.error(d.message||t("settings.userAvatar.saveFailed"))}finally{_.value=!1}}async function S(){_.value=!0;try{await Wi(),w.value={type:"default",seed:i.value||"default"},n.success(t("settings.userAvatar.resetSuccess"))}catch(d){n.error(d.message||t("settings.userAvatar.resetFailed"))}finally{_.value=!1}}const h=$(!1),R=$(""),L=$(""),T=$(""),M=$(!1),D=$(""),E=$("");ke(async()=>{try{i.value=(await Ni()).username}catch{}try{w.value=await Ki()||{type:"default",seed:i.value||"default"}}catch{}});async function V(){if(L.value!==T.value){n.error(t("login.passwordMismatch"));return}if(L.value.length<6){n.error(t("login.passwordTooShort"));return}s.value=!0;try{await Xi(R.value,L.value),h.value=!1,R.value="",L.value="",T.value="",n.success(t("login.passwordChanged"))}catch(d){n.error(d.message||t("common.saveFailed"))}finally{s.value=!1}}async function X(){if(E.value.trim().length<2){n.error(t("login.usernameTooShort"));return}s.value=!0;try{await Li(D.value,E.value.trim()),i.value=E.value.trim(),M.value=!1,D.value="",E.value="",n.success(t("login.usernameChanged"))}catch(d){n.error(d.message||t("common.saveFailed"))}finally{s.value=!1}}function f(){R.value="",L.value="",T.value="",h.value=!0}function o(){D.value="",E.value="",M.value=!0}const c=$([]),v=$(!1);async function x(){v.value=!0;try{c.value=await Yi()}catch{}finally{v.value=!1}}async function ve(d){try{await Vi(d),n.success(t("settings.lockedIps.unlocked")),await x()}catch(u){n.error(u.message||t("common.saveFailed"))}}async function _e(){try{const d=await Ji();n.success(t("settings.lockedIps.allUnlocked",{count:d})),await x()}catch(d){n.error(d.message||t("common.saveFailed"))}}function fe(d){const u=Math.max(0,Math.round((d-Date.now())/6e4));return u>0?`${u} min`:t("common.expired")}function q(d){return t(`settings.lockedIps.type.${d}`)}return ke(()=>{x()}),(d,u)=>(U(),O("div",Ft,[g("p",It,y(e(t)("login.setupDescription")),1),g("div",Rt,[g("h3",zt,y(e(t)("settings.userAvatar.title")),1),g("div",Ht,[g("div",Vt,[a(Gi,{name:i.value||"default",avatar:w.value?.type==="image"&&w.value.dataUrl?{type:"image",dataUrl:w.value.dataUrl}:null,size:80},null,8,["name","avatar"])]),g("div",Lt,[g("p",Nt,y(e(t)("settings.userAvatar.hint")),1),g("div",Kt,[a(e(K),{onClick:u[0]||(u[0]=k=>P.value?.click())},{default:r(()=>[N(y(e(t)("settings.userAvatar.upload")),1)]),_:1}),a(e(K),{onClick:b,loading:_.value},{default:r(()=>[N(y(e(t)("settings.userAvatar.random")),1)]),_:1},8,["loading"]),a(e(K),{onClick:S,loading:_.value},{default:r(()=>[N(y(e(t)("settings.userAvatar.reset")),1)]),_:1},8,["loading"])]),g("input",{ref_key:"avatarFileInput",ref:P,type:"file",accept:".png,.jpg,.jpeg,.webp",style:{display:"none"},onChange:l},null,544)])])]),g("div",Et,[g("div",Bt,[g("span",qt,y(e(t)("login.passwordLoginConfigured",{username:i.value})),1),g("div",Yt,[a(e(K),{onClick:f},{default:r(()=>[N(y(e(t)("login.changePassword")),1)]),_:1}),a(e(K),{onClick:o},{default:r(()=>[N(y(e(t)("login.changeUsername")),1)]),_:1})])])]),g("div",Xt,[g("h3",jt,y(e(t)("settings.lockedIps.title")),1),g("div",Wt,[g("span",Gt,y(e(t)("settings.lockedIps.count",{count:c.value.length})),1),g("div",Jt,[a(e(K),{size:"small",loading:v.value,onClick:x},{default:r(()=>[N(y(e(t)("common.retry")),1)]),_:1},8,["loading"]),c.value.length>0?(U(),Y(e(Aa),{key:0,onPositiveClick:_e},{trigger:r(()=>[a(e(K),{size:"small",type:"warning"},{default:r(()=>[N(y(e(t)("settings.lockedIps.unlockAll")),1)]),_:1})]),default:r(()=>[N(" "+y(e(t)("settings.lockedIps.unlockAllConfirm")),1)]),_:1})):B("",!0)])]),c.value.length>0?(U(),O("div",Qt,[(U(!0),O(ye,null,Me(c.value,k=>(U(),O("div",{key:k.ip+k.type,class:"locked-item"},[g("div",Zt,[g("span",es,y(k.ip),1),g("span",ts,y(q(k.type)),1),g("span",ss,y(fe(k.lockedUntil)),1)]),a(e(K),{size:"tiny",type:"error",ghost:"",onClick:J=>ve(k.ip)},{default:r(()=>[N(y(e(t)("settings.lockedIps.unlock")),1)]),_:1},8,["onClick"])]))),128))])):(U(),O("p",as,y(e(t)("settings.lockedIps.empty")),1))]),a(e(Re),{show:h.value,"onUpdate:show":u[5]||(u[5]=k=>h.value=k),preset:"dialog",title:e(t)("login.changePassword")},{action:r(()=>[a(e(K),{onClick:u[4]||(u[4]=k=>h.value=!1)},{default:r(()=>[N(y(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:V},{default:r(()=>[N(y(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:r(()=>[a(e($e),{"label-placement":"top"},{default:r(()=>[a(e(j),{label:e(t)("login.currentPassword")},{default:r(()=>[a(e(W),{value:R.value,"onUpdate:value":u[1]||(u[1]=k=>R.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("login.newPassword")},{default:r(()=>[a(e(W),{value:L.value,"onUpdate:value":u[2]||(u[2]=k=>L.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.newPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("login.confirmPassword")},{default:r(()=>[a(e(W),{value:T.value,"onUpdate:value":u[3]||(u[3]=k=>T.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.confirmPassword"),onKeyup:Ye(V,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"]),a(e(Re),{show:M.value,"onUpdate:show":u[9]||(u[9]=k=>M.value=k),preset:"dialog",title:e(t)("login.changeUsername")},{action:r(()=>[a(e(K),{onClick:u[8]||(u[8]=k=>M.value=!1)},{default:r(()=>[N(y(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:X},{default:r(()=>[N(y(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:r(()=>[a(e($e),{"label-placement":"top"},{default:r(()=>[a(e(j),{label:e(t)("login.currentPassword")},{default:r(()=>[a(e(W),{value:D.value,"onUpdate:value":u[6]||(u[6]=k=>D.value=k),type:"password","show-password-on":"click",placeholder:e(t)("login.currentPassword")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("login.newUsername")},{default:r(()=>[a(e(W),{value:E.value,"onUpdate:value":u[7]||(u[7]=k=>E.value=k),placeholder:e(t)("login.usernamePlaceholder"),onKeyup:Ye(X,["enter"])},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["show","title"])]))}})})),Rl=A((()=>{})),ti,zl=A((()=>{is(),is(),Rl(),le(),ti=ne(ei,[["__scopeId","data-v-61e79d43"]])})),ls,ns,os,rs,si,us=A((()=>{Z(),ie(),se(),Ma(),ls={class:"user-management"},ns={class:"toolbar"},os={class:"section-title"},rs={class:"section-desc"},si=te({__name:"UserManagementSettings",setup(p){const{t}=ae(),n=re(),i=$(!1),s=$(!1),w=$([]),P=$([]),_=$(!1),m=$(null),l=Ca({username:"",password:"",role:"admin",status:"active",profiles:[]}),b=C(()=>[{label:t("users.roles.admin"),value:"admin"},{label:t("users.roles.superAdmin"),value:"super_admin"}]),S=C(()=>[{label:t("users.status.active"),value:"active"},{label:t("users.status.disabled"),value:"disabled"}]),h=C(()=>P.value.map(o=>({label:o,value:o})));function R(){m.value=null,l.username="",l.password="",l.role="admin",l.status="active",l.profiles=[]}async function L(){i.value=!0;try{const o=await qi();w.value=o.users,P.value=o.profiles}catch(o){n.error(o.message||t("users.loadFailed"))}finally{i.value=!1}}function T(){R(),_.value=!0}function M(o){m.value=o,l.username=o.username,l.password="",l.role=o.role,l.status=o.status,l.profiles=[...o.profiles],_.value=!0}async function D(){if(l.username.trim().length<2){n.error(t("login.usernameTooShort"));return}if(!m.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 o={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},c=m.value?await Qe(m.value.id,o):await Bi({...o,password:l.password});w.value=c.users,P.value=c.profiles,_.value=!1,R(),n.success(t("common.saved"))}catch(o){n.error(o.message||t("common.saveFailed"))}finally{s.value=!1}}async function E(o,c){s.value=!0;try{const v=await Qe(o.id,{status:c});w.value=v.users,P.value=v.profiles,n.success(t("common.saved"))}catch(v){n.error(v.message||t("common.saveFailed"))}finally{s.value=!1}}async function V(o){s.value=!0;try{const c=await ji(o.id);w.value=c.users,P.value=c.profiles,n.success(t("common.saved"))}catch(c){n.error(c.message||t("common.deleteFailed"))}finally{s.value=!1}}function X(o){return o?new Date(o).toLocaleString():"-"}const f=C(()=>[{title:t("users.username"),key:"username",minWidth:140},{title:t("users.role"),key:"role",width:130,render:o=>ge(Ie,{size:"small",type:o.role==="super_admin"?"warning":"default"},{default:()=>o.role==="super_admin"?t("users.roles.superAdmin"):t("users.roles.admin")})},{title:t("users.statusLabel"),key:"status",width:110,render:o=>ge(Ie,{size:"small",type:o.status==="active"?"success":"error"},{default:()=>o.status==="active"?t("users.status.active"):t("users.status.disabled")})},{title:t("users.profiles"),key:"profiles",minWidth:200,render:o=>o.role==="super_admin"?ge("span",{class:"muted"},t("users.allProfiles")):ge(xe,{size:4},{default:()=>o.profiles.length?o.profiles.map(c=>ge(Ie,{size:"small",bordered:!1},{default:()=>c})):ge("span",{class:"muted"},t("users.noProfiles"))})},{title:t("users.lastLogin"),key:"last_login_at",minWidth:170,render:o=>X(o.last_login_at)},{title:t("common.edit"),key:"actions",width:280,render:o=>ge(xe,{size:8},{default:()=>[ge(K,{size:"small",onClick:()=>M(o)},{default:()=>t("common.edit")}),ge(K,{size:"small",type:o.status==="active"?"warning":"primary",ghost:!0,loading:s.value,onClick:()=>E(o,o.status==="active"?"disabled":"active")},{default:()=>o.status==="active"?t("users.disable"):t("users.enable")}),ge(Aa,{onPositiveClick:()=>V(o)},{trigger:()=>ge(K,{size:"small",type:"error",ghost:!0,loading:s.value},{default:()=>t("common.delete")}),default:()=>t("users.deleteConfirm")})]})}]);return ke(L),(o,c)=>(U(),O("div",ls,[g("div",ns,[g("div",null,[g("h3",os,y(e(t)("users.title")),1),g("p",rs,y(e(t)("users.description")),1)]),a(e(K),{type:"primary",onClick:T},{default:r(()=>[N(y(e(t)("users.create")),1)]),_:1})]),a(e(Ti),{columns:f.value,data:w.value,loading:i.value,bordered:!1,"single-line":!1,size:"small"},null,8,["columns","data","loading"]),a(e(Re),{show:_.value,"onUpdate:show":c[6]||(c[6]=v=>_.value=v),preset:"dialog",title:m.value?e(t)("users.edit"):e(t)("users.create")},{action:r(()=>[a(e(K),{onClick:c[5]||(c[5]=v=>_.value=!1)},{default:r(()=>[N(y(e(t)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:s.value,onClick:D},{default:r(()=>[N(y(e(t)("common.save")),1)]),_:1},8,["loading"])]),default:r(()=>[a(e($e),{"label-placement":"top"},{default:r(()=>[a(e(j),{label:e(t)("users.username")},{default:r(()=>[a(e(W),{value:l.username,"onUpdate:value":c[0]||(c[0]=v=>l.username=v),placeholder:e(t)("login.usernamePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:m.value?e(t)("users.newPasswordOptional"):e(t)("login.newPassword")},{default:r(()=>[a(e(W),{value:l.password,"onUpdate:value":c[1]||(c[1]=v=>l.password=v),type:"password","show-password-on":"click",placeholder:e(t)("login.passwordPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(e(j),{label:e(t)("users.role")},{default:r(()=>[a(e(G),{value:l.role,"onUpdate:value":c[2]||(c[2]=v=>l.role=v),options:b.value},null,8,["value","options"])]),_:1},8,["label"]),a(e(j),{label:e(t)("users.statusLabel")},{default:r(()=>[a(e(G),{value:l.status,"onUpdate:value":c[3]||(c[3]=v=>l.status=v),options:S.value},null,8,["value","options"])]),_:1},8,["label"]),l.role!=="super_admin"?(U(),Y(e(j),{key:0,label:e(t)("users.profiles")},{default:r(()=>[a(e(G),{value:l.profiles,"onUpdate:value":c[4]||(c[4]=v=>l.profiles=v),multiple:"",filterable:"",options:h.value,placeholder:e(t)("users.profilesPlaceholder")},null,8,["value","options","placeholder"])]),_:1},8,["label"])):B("",!0)]),_:1})]),_:1},8,["show","title"])]))}})})),Hl=A((()=>{})),ai,Vl=A((()=>{us(),us(),Hl(),le(),ai=ne(si,[["__scopeId","data-v-bcd3f33a"]])}));function Ll(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"||p==="doubao"?p:null}function Nl(p){if(p&&typeof p=="object"){const t=p,n=Ll(t.activeProvider);if(Array.isArray(t.providers))return{providers:t.providers,activeProvider:n};if(Array.isArray(t.settings))return{providers:t.settings,activeProvider:n}}return{providers:[],activeProvider:null}}async function Kl(){return Nl(await Oe("/api/hermes/tts/settings"))}async function El(p,t){const n=await Oe(`/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 Bl(p){return(await Oe("/api/hermes/tts/settings/active",{method:"PUT",body:JSON.stringify({provider:p})})).activeProvider}async function ql(p){return Oe(`/api/hermes/tts/settings/${p}`,{method:"DELETE"})}var Yl=A((()=>{Ne()})),we,Be=A((()=>{Ee(),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-doubao",kind:"tts",provider:"doubao",label:"Volcengine Doubao TTS",labelKey:"settings.voice.presetDoubaoTtsLabel",baseUrl:"https://openspeech.bytedance.com/api/v3/tts/unidirectional",defaultModel:Ke,isSecretRequired:!0,capabilities:{models:!0,voices:!0,stylePrompt:!0}},{id:"tts-custom",kind:"tts",provider:"custom",label:"Custom TTS",labelKey:"settings.voice.presetCustomTtsLabel",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-browser",kind:"stt",provider:"browser",label:"Browser STT",labelKey:"settings.voice.presetBrowserSttLabel",description:"Native browser speech recognition API.",descriptionKey:"settings.voice.presetBrowserSttDescription",isBuiltin:!0,isSecretRequired:!1,capabilities:{}},{id:"stt-openai",kind:"stt",provider:"openai",label:"OpenAI Whisper",labelKey:"settings.voice.presetOpenaiWhisperLabel",baseUrl:"https://api.openai.com/v1",defaultModel:"whisper-1",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-groq",kind:"stt",provider:"custom",label:"Groq STT",labelKey:"settings.voice.presetGroqSttLabel",baseUrl:"https://api.groq.com/openai/v1",defaultModel:"whisper-large-v3",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-doubao",kind:"stt",provider:"doubao",label:"Volcengine Doubao STT",labelKey:"settings.voice.presetDoubaoSttLabel",baseUrl:"https://openspeech.bytedance.com/api/v3/auc/bigmodel",defaultModel:"volc.seedasr.auc",isSecretRequired:!0,capabilities:{models:!0}},{id:"stt-custom",kind:"stt",provider:"custom",label:"Custom STT",labelKey:"settings.voice.presetCustomSttLabel",isSecretRequired:!0,capabilities:{models:!0}}]}));function ds(p){return p==="openai"||p==="custom"||p==="doubao"}function cs(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"||p==="doubao"}function vs(p){return p==="browser"||p==="openai"||p==="custom"||p==="doubao"}function He(p){return p==="edge"||p==="openai"||p==="custom"||p==="mimo"||p==="doubao"}function Q(p,t){const n=p[t];return typeof n=="string"?n:""}function Xl(){const{t:p}=ae(),t=$([]),n=$(!1),i=dl(),s=ll(),w=C(()=>`tts-${i.provider.value==="webspeech"?"edge":i.provider.value}`),P=C(()=>`stt-${s.provider.value}`),_=C(()=>t.value.filter(f=>f.kind==="tts")),m=C(()=>t.value.filter(f=>f.kind==="stt")),l=C(()=>_.value.find(f=>f.id===w.value)||_.value[0]||null),b=C(()=>m.value.find(f=>f.id===P.value)||m.value[0]||null),S=C(()=>_.value.map(f=>({label:f.label,value:f.id}))),h=C(()=>m.value.map(f=>({label:f.label,value:f.id})));function R(f){if(!He(f.provider))return;i.setProvider(f.provider);const o=f.settings;if(f.provider==="edge"){i.setEdgeVoice(Q(o,"voice")||f.voice||i.edgeVoice.value);const c=Number(o.rate),v=Number(o.pitch);Number.isFinite(c)&&i.setEdgeRate(c),Number.isFinite(v)&&i.setEdgePitchHz(v);return}if(f.provider==="openai"){i.setOpenaiBaseUrl(f.baseUrl||Q(o,"baseUrl")),i.setOpenaiModel(f.model||Q(o,"model")||i.openaiModel.value),i.setOpenaiVoice(f.voice||Q(o,"voice")||i.openaiVoice.value);return}if(f.provider==="custom"){i.setCustomUrl(f.baseUrl||Q(o,"baseUrl"));return}if(f.provider==="mimo"){i.setMimoBaseUrl(f.baseUrl||Q(o,"baseUrl")||i.mimoBaseUrl.value),i.setMimoModel(f.model||Q(o,"model")||i.mimoModel.value),i.setMimoVoice(f.voice||Q(o,"voice")||i.mimoVoice.value),i.setMimoStylePrompt(Q(o,"stylePrompt")),i.setMimoVoiceDesignDesc(Q(o,"voiceDesignDesc"));return}f.provider==="doubao"&&(i.setDoubaoBaseUrl(f.baseUrl||Q(o,"baseUrl")||i.doubaoBaseUrl.value),i.setDoubaoModel(f.model||Q(o,"model")||i.doubaoModel.value),i.setDoubaoVoice(f.voice||Q(o,"voice")||i.doubaoVoice.value),i.setDoubaoStylePrompt(Q(o,"stylePrompt")))}function L(f){if(!vs(f.provider))return;s.setProvider(f.provider);const o=f.settings;if(f.provider==="openai"){s.setOpenaiModel(f.model||Q(o,"model")||s.openaiModel.value),s.setOpenaiLanguage(Q(o,"language")),s.setOpenaiPrompt(Q(o,"prompt"));return}f.provider==="custom"&&(s.setCustomBaseUrl(f.baseUrl||Q(o,"baseUrl")),s.setCustomModel(f.model||Q(o,"model")||s.customModel.value),s.setCustomLanguage(Q(o,"language")),s.setCustomPrompt(Q(o,"prompt")))}function T(f,o,c){const v=we.find(x=>x.kind==="tts"&&x.provider===f&&(x.baseUrl===o.baseUrl||!x.baseUrl));return{id:`tts-${f}`,kind:"tts",provider:f,label:v?.labelKey?p(v.labelKey):v?.label||`${f} TTS`,baseUrl:o.baseUrl,model:o.model,voice:o.voice,settings:o,hasSecret:c,active:w.value===`tts-${f}`}}function M(f,o,c){const v=we.find(x=>x.kind==="stt"&&x.provider===f&&(x.baseUrl===o.baseUrl||!x.baseUrl));return{id:`stt-${f}`,kind:"stt",provider:f,label:v?.labelKey?p(v.labelKey):v?.label||`${f} STT`,baseUrl:o.baseUrl,model:o.model,settings:o,hasSecret:c,active:P.value===`stt-${f}`}}async function D(){n.value=!0;try{await s.loadServerSttSettings(!0);const[f,o]=await Promise.all([Kl(),al()]);f.activeProvider&&He(f.activeProvider)&&i.setProvider(f.activeProvider);const c=[{id:"tts-edge",kind:"tts",provider:"edge",label:p("settings.voice.presetEdgeTtsLabel"),isBuiltin:!0,hasSecret:!1,active:w.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:P.value==="stt-browser",settings:{}}];for(const v of f.providers){const x=T(v.provider,v.settings,v.secrets?.apiKey==="[stored]"),ve=c.find(_e=>_e.id===x.id);ve?Object.assign(ve,x,{isBuiltin:ve.isBuiltin}):c.push(x)}for(const v of o.providers)c.push(M(v.provider,v.settings,v.secrets?.apiKey==="[stored]"));t.value=c.map(v=>({...v,active:v.kind==="tts"?v.id===w.value:v.id===P.value}))}finally{n.value=!1}}async function E(f,o){const c=t.value.find(v=>v.kind===f&&v.id===o);c&&(f==="tts"?(R(c),He(c.provider)&&await Bl(c.provider)):(L(c),vs(c.provider)&&await Ze(c.provider)),t.value=t.value.map(v=>({...v,active:v.kind===f?v.id===o:v.active})))}async function V(f,o,c){if(f==="tts"){if(!cs(o))throw new Error(`Unsupported TTS provider: ${String(o)}`);const x=await El(o,{settings:c.settings,secrets:c.secrets,activeProvider:o});return await D(),await E("tts",`tts-${o}`),x}if(o==="browser")return await Ze("browser"),s.setProvider("browser"),await D(),null;if(!ds(o))throw new Error(`Unsupported STT provider: ${String(o)}`);const v=await ol(o,{settings:c.settings,secrets:c.secrets,activeProvider:o});return await D(),await E("stt",`stt-${o}`),v}async function X(f,o){if(f==="tts"){if(!cs(o)||o==="edge")return;await ql(o)}else{if(!ds(o))return;await nl(o)}await D()}return{connections:t,ttsConnections:_,sttConnections:m,activeTtsId:w,activeSttId:P,activeTtsConnection:l,activeSttConnection:b,ttsConnectionOptions:S,sttConnectionOptions:h,loading:n,refresh:D,setActiveConnection:E,saveConnection:V,deleteSecret:X}}var jl=A((()=>{Z(),se(),Yl(),el(),vl(),rl(),Be()})),ps,ms,ii,gs=A((()=>{Z(),ps={class:"provider-meta-item"},ms=["title"],ii=te({__name:"ProviderMetaItem",props:{label:{},value:{}},setup(p){return(t,n)=>(U(),O("div",ps,[g("dt",null,y(p.label),1),g("dd",{title:String(p.value||"—")},y(p.value||"—"),9,ms)]))}})})),Wl=A((()=>{})),li,Gl=A((()=>{gs(),gs(),Wl(),le(),li=ne(ii,[["__scopeId","data-v-6e8cbcf2"]])})),_s,fs,ys,bs,hs,Ss,ws,Us,ks,Ps,Cs,Ts,As,xs,$s,ni,Ms=A((()=>{Z(),ie(),se(),Gl(),_s=["data-state"],fs={class:"card-main"},ys={class:"provider-identity"},bs={class:"provider-icon","aria-hidden":"true"},hs={class:"provider-copy"},Ss={class:"provider-title-row"},ws=["title"],Us={class:"provider-kind"},ks={class:"provider-description"},Ps={class:"provider-meta"},Cs={class:"provider-control"},Ts=["aria-label"],As={key:1,class:"feedback-row error",role:"alert"},xs={class:"error-summary"},$s={key:1,class:"error-details"},ni=te({__name:"VoiceApiCard",props:{connection:{},testState:{}},emits:["setActive","test","edit","connect","remove"],setup(p,{emit:t}){const n=p,i=t,{t:s}=ae(),w=$(!1);Ue(()=>n.testState?.message,()=>{w.value=!1});const P=C(()=>!(n.connection.kind==="stt"&&n.connection.provider==="browser")),_=C(()=>!n.connection.isBuiltin),m=C(()=>_.value?n.connection.hasSecret?s("settings.voice.keyStored"):s("settings.voice.keyMissing"):s("settings.voice.builtin")),l=C(()=>n.connection.isBuiltin?s("settings.voice.builtin"):s("settings.voice.customApi")),b=C(()=>n.connection.active?"success":_.value&&!n.connection.hasSecret?"warning":"default"),S=C(()=>n.connection.active?s("settings.voice.active"):_.value&&!n.connection.hasSecret?s("settings.voice.keyMissing"):s("settings.voice.connected")),h=C(()=>n.connection.model||String(n.connection.settings.model||"")),R=C(()=>n.connection.voice||String(n.connection.settings.voice||"")),L=C(()=>n.connection.baseUrl||(n.connection.isBuiltin?s("settings.voice.localBuiltin"):"")),T=C(()=>{const q=n.testState?.status;return s(q==="success"?"settings.voice.testSuccess":q==="error"?"settings.voice.testFailedShort":q==="loading"?"settings.voice.testing":q==="recording"?"settings.voice.recording":"settings.voice.notTested")}),M=C(()=>_.value&&!n.connection.hasSecret?s("settings.voice.connect"):s("common.edit")),D=C(()=>n.testState?.status==="recording"?s("settings.voice.sttTestStopButton"):s("settings.voice.testAction")),E=C(()=>n.connection.kind==="tts"?[{key:"source",label:s("settings.voice.source"),value:L.value},{key:"model",label:s("settings.voice.model"),value:h.value},{key:"voice",label:s("settings.voice.voice"),value:R.value},{key:"api-key",label:s("settings.voice.apiKey"),value:m.value}]:[{key:"source",label:s("settings.voice.source"),value:L.value},{key:"model",label:s("settings.voice.model"),value:h.value},{key:"api-key",label:s("settings.voice.apiKey"),value:m.value},{key:"last-test",label:s("settings.voice.lastTest"),value:T.value}]),V=C(()=>{const q=n.testState?.status;return!!q&&q!=="idle"&&q!=="error"}),X=C(()=>n.testState?.status==="error"),f=C(()=>n.testState?.message||"");function o(q){const d=q.indexOf("{");if(d<0)return null;try{const u=JSON.parse(q.slice(d)),k=u.error||u.message||u.detail;return typeof k=="string"&&k.trim()?k.trim():null}catch{return null}}function c(q){return q.replace(/^API Error\s+\d+\s*:\s*/i,"").replace(/^Error\s*:\s*/i,"").trim()}const v=C(()=>{const q=f.value.trim();if(!q)return s("settings.voice.testFailedSummary");const d=o(q)||c(q);return!d||d.startsWith("{")||d.startsWith("[")?s("settings.voice.testFailedSummary"):d.length>180?`${d.slice(0,177).trim()}…`:d}),x=C(()=>{const q=f.value.trim();return q.length>0&&q!==v.value}),ve=C(()=>[{label:s("settings.voice.remove"),key:"remove",disabled:n.connection.isBuiltin}]);function _e(){if(_.value&&!n.connection.hasSecret){i("connect",n.connection);return}i("edit",n.connection)}function fe(q){q==="remove"&&!n.connection.isBuiltin&&i("remove",n.connection)}return(q,d)=>(U(),O("article",{class:Ve(["voice-api-card",{active:p.connection.active}]),"data-state":p.testState?.status||"idle"},[g("div",fs,[g("div",ys,[g("div",bs,y(p.connection.kind==="tts"?"T":"S"),1),g("div",hs,[g("div",Ss,[g("h5",{class:"provider-title",title:p.connection.label},y(p.connection.label),9,ws),g("span",Us,y(l.value),1)]),g("p",ks,y(p.connection.kind==="tts"?e(s)("settings.voice.ttsCardHint"):e(s)("settings.voice.sttCardHint")),1)])]),g("dl",Ps,[(U(!0),O(ye,null,Me(E.value,u=>(U(),Y(li,{key:u.key,label:u.label,value:u.value},null,8,["label","value"]))),128))]),g("div",Cs,[a(e(Ie),{class:"status-badge",size:"small",type:b.value,round:"",bordered:!1},{default:r(()=>[N(y(S.value),1)]),_:1},8,["type"]),g("div",{class:"card-actions","aria-label":`${p.connection.label} actions`},[p.connection.active?B("",!0):(U(),Y(e(K),{key:0,size:"tiny",secondary:"",onClick:d[0]||(d[0]=u=>i("setActive",p.connection))},{default:r(()=>[N(y(e(s)("settings.voice.setActive")),1)]),_:1})),a(e(K),{size:"tiny",loading:p.testState?.status==="loading","data-testid":`voice-card-test-${p.connection.id}`,onClick:d[1]||(d[1]=u=>i("test",p.connection))},{default:r(()=>[N(y(D.value),1)]),_:1},8,["loading","data-testid"]),P.value?(U(),Y(e(K),{key:1,size:"tiny",onClick:_e},{default:r(()=>[N(y(M.value),1)]),_:1})):B("",!0),_.value?(U(),Y(e(Ai),{key:2,trigger:"click",size:"small",options:ve.value,onSelect:fe},{default:r(()=>[a(e(K),{size:"tiny","aria-label":e(s)("settings.voice.moreActionsFor",{provider:p.connection.label})},{default:r(()=>[N(y(e(s)("settings.voice.moreActions")),1)]),_:1},8,["aria-label"])]),_:1},8,["options"])):B("",!0)],8,Ts)])]),V.value?(U(),O("div",{key:0,class:Ve(["feedback-row",p.testState?.status]),role:"status"},y(p.testState?.message||(p.testState?.status==="success"?e(s)("settings.voice.testSuccess"):"")),3)):B("",!0),X.value?(U(),O("div",As,[g("div",xs,y(v.value),1),x.value?(U(),Y(e(K),{key:0,class:"details-toggle",text:"",size:"tiny",onClick:d[2]||(d[2]=u=>w.value=!w.value)},{default:r(()=>[N(y(w.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)]),_:1})):B("",!0),w.value?(U(),O("pre",$s,y(f.value),1)):B("",!0)])):B("",!0)],10,_s))}})})),Jl=A((()=>{})),Le,Ql=A((()=>{Ms(),Ms(),Jl(),le(),Le=ne(ni,[["__scopeId","data-v-b8bd5b05"]])}));async function Zl(p){return Oe("/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 en=A((()=>{Ne()})),Os,Ds,Fs,Is,Rs,zs,Hs,Vs,Ls,Ns,Ks,Es,Bs,qs,Ys,Xs,oi,js=A((()=>{Z(),ie(),se(),en(),Be(),Ee(),Os={class:"form-section"},Ds={class:"form-section"},Fs={class:"section-heading"},Is={key:0,class:"connection-actions"},Rs={key:1,class:"inline-error","data-testid":"voice-provider-probe-error"},zs={key:1},Hs={key:0,class:"form-section"},Vs={class:"section-heading"},Ls={key:0,class:"helper-text"},Ns={key:1,class:"helper-text"},Ks={key:2,class:"helper-text"},Es={key:3,class:"helper-text"},Bs={key:1,class:"form-section"},qs={class:"section-heading"},Ys={key:2,class:"form-section"},Xs={class:"modal-footer"},oi=te({__name:"VoiceApiFormModal",props:{kind:{},show:{type:Boolean}},emits:["close","saved"],setup(p,{emit:t}){const n=p,i=t,{t:s}=ae(),w=re(),P=$(!1),_=$(null),m=$("openai-compatible"),l=$({baseUrl:"",apiKey:"",model:"",voice:"",audioTranscode:"none"}),b=$(!1),S=$(!1),h=$(!1),R=$(!1),L=$(!1),T=$([]),M=$(""),D=$(""),E=$(""),V=$(!1),X=$("");let f=null,o=0,c=!1;const v=C(()=>we.filter(z=>z.kind===n.kind&&!z.isBuiltin).map(z=>({label:z.labelKey?s(z.labelKey):z.label,value:z.id}))),x=C(()=>we.find(z=>z.id===_.value)||null),ve=C(()=>x.value?.provider==="custom"),_e=C(()=>n.kind==="tts"&&x.value?.provider==="doubao"),fe=C(()=>m.value==="openai-compatible"),q=C(()=>{const z=T.value.map(I=>({label:I.capability==="preferred"?`${I.label} · ${s("settings.voice.modelRecommendedSuffix")}`:I.label,value:I.id})),F=l.value.model.trim();return F&&!z.some(I=>I.value===F)?[{label:F,value:F},...z]:z}),d=C(()=>[{label:s("settings.voice.sttAudioTranscodeNone"),value:"none"},{label:s("settings.voice.sttAudioTranscodeFfmpeg"),value:"ffmpeg"}]),u=C(()=>{const z=l.value.voice.trim(),F=ze.map(I=>({label:I.label,value:I.value}));return z&&!ze.some(I=>I.value===z)?[{label:z,value:z},...F]:F}),k=C(()=>Fe(l.value.baseUrl)),J=C(()=>!h.value&&!l.value.baseUrl.trim()||!x.value||!x.value.isSecretRequired?"":Te(l.value.baseUrl)),ue=C(()=>!x.value?.capabilities?.models||!S.value||l.value.model.trim()?"":s("settings.voice.modelRequiredConnectManual")),pe=C(()=>!R.value||!x.value?.isSecretRequired||l.value.apiKey.trim()?"":s("settings.voice.apiKeyRequired")),de=C(()=>!!x.value&&fe.value&&!!l.value.baseUrl.trim()&&!!l.value.apiKey.trim()&&!Te(l.value.baseUrl)),Pe=C(()=>!(!x.value||x.value.isSecretRequired&&(!l.value.apiKey.trim()||Te(l.value.baseUrl))||x.value.capabilities?.models&&!l.value.model.trim()||_e.value&&!l.value.voice.trim())),Ce=C(()=>x.value?m.value==="manual"?s("settings.voice.discoveryManualHint"):!l.value.baseUrl.trim()||!l.value.apiKey.trim()?s("settings.voice.discoveryCredentialHint"):s("settings.voice.discoveryNoAutoProbeHint"):"");Ue(()=>n.show,z=>{z?De():Ae()}),Ue([()=>l.value.baseUrl,()=>l.value.apiKey,m],()=>{if(c){c=!1;return}Ae(),T.value=[],M.value="",D.value="",E.value="",V.value=!1}),Ui(()=>Ae());function De(){_.value=null,m.value="openai-compatible",l.value={baseUrl:"",apiKey:"",model:"",voice:"",audioTranscode:"none"},b.value=!1,S.value=!1,h.value=!1,R.value=!1,X.value="",T.value=[],M.value="",D.value="",E.value="",V.value=!1,Ae()}function Fe(z){const F=z.trim();if(!F)return"";try{const I=new URL(F);return I.hash="",I.pathname=I.pathname.replace(/\/+$/,"")||"/",I.toString().replace(/\/$/,"")}catch{return F.replace(/\/+$/,"")}}function Te(z){const F=z.trim();if(!F)return s("settings.voice.baseUrlRequired");try{const I=new URL(F);return I.protocol!=="https:"&&I.protocol!=="http:"?s("settings.voice.baseUrlHttpsRequired"):""}catch{return s("settings.voice.baseUrlInvalid")}}function Ae(){f&&(f.abort(),f=null),L.value=!1}function mi(z){_.value=z;const F=we.find(oe=>oe.id===z);m.value=F?.provider==="custom"||F?.provider==="openai"?"openai-compatible":"manual";const I=n.kind==="tts"&&F?.provider==="doubao";l.value={baseUrl:F?.baseUrl||"",model:I?Ke:F?.defaultModel||"",voice:I?ml:"",apiKey:"",audioTranscode:"none"},b.value=!1,S.value=!1,h.value=!1,R.value=!1,X.value=""}function gi(z){l.value.model=z||"",b.value=!0,S.value=!0}function _i(z){l.value.voice=z||"",l.value.model=Oa(z)||"seed-tts-2.0",S.value=!0,b.value=!1}function fi(){M.value&&(l.value.model=M.value,S.value=!0,b.value=!1)}function yi(){h.value=!0,Te(l.value.baseUrl)||(l.value.baseUrl=k.value)}function bi(){return`${n.kind}|${x.value?.provider||""}|${m.value}|${Fe(l.value.baseUrl)}|${l.value.apiKey.trim()}`}async function hi(){if(R.value=!0,!de.value)return;const z=bi();X.value!==z&&(X.value=z,await qe())}async function qe(){if(!x.value||!fe.value)return;h.value=!0,R.value=!0;const z=Te(l.value.baseUrl);if(z){D.value=z;return}if(!l.value.apiKey.trim()){D.value=s("settings.voice.apiKeyRequiredForDiscovery");return}Ae();const F=++o,I=new AbortController;f=I,L.value=!0,D.value="",E.value="",V.value=!1;try{const oe=await Zl({kind:n.kind,provider:String(x.value.provider),compatibility:m.value,baseUrl:Fe(l.value.baseUrl),apiKey:l.value.apiKey.trim(),signal:I.signal});if(F!==o)return;oe.normalizedBaseUrl&&(c=!0,l.value.baseUrl=oe.normalizedBaseUrl),T.value=oe.models||[],M.value=oe.recommendedModel||"",D.value=oe.ok?"":oe.errorSummary||s("settings.voice.discoveryFailedManualFallback"),E.value=oe.errorDetails||"",oe.ok&&oe.recommendedModel&&!b.value&&!l.value.model.trim()&&(l.value.model=oe.recommendedModel,S.value=!0)}catch(oe){if(I.signal.aborted||F!==o)return;D.value=oe instanceof Error?oe.message:s("settings.voice.discoveryFailedManualFallback"),E.value=""}finally{F===o&&(L.value=!1,f=null)}}async function Si(){if(x.value){if(h.value=!0,R.value=!0,S.value=!0,!Pe.value){w.warning(ue.value||J.value||pe.value||s("settings.voice.completeRequiredProviderFields"));return}P.value=!0;try{i("saved",{preset:x.value,settings:{baseUrl:Fe(l.value.baseUrl),model:l.value.model.trim(),...n.kind==="tts"&&l.value.voice.trim()?{voice:l.value.voice.trim()}:{},...n.kind==="stt"?{audioTranscode:l.value.audioTranscode}:{}},secrets:{apiKey:l.value.apiKey.trim()}})}finally{P.value=!1}}}return(z,F)=>(U(),Y(e(Re),{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":F[8]||(F[8]=I=>i("close"))},{footer:r(()=>[g("div",Xs,[a(e(K),{onClick:F[7]||(F[7]=I=>i("close"))},{default:r(()=>[N(y(e(s)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:P.value,disabled:!Pe.value,"data-testid":"voice-provider-save",onClick:Si},{default:r(()=>[N(y(e(s)("common.add")),1)]),_:1},8,["loading","disabled"])])]),default:r(()=>[a(e($e),{"label-placement":"top",class:"provider-form"},{default:r(()=>[g("section",Os,[a(e(j),{label:e(s)("models.selectProvider"),required:""},{default:r(()=>[a(e(G),{value:_.value,"onUpdate:value":[F[0]||(F[0]=I=>_.value=I),mi],options:v.value,placeholder:e(s)("models.chooseProvider"),"data-testid":"voice-provider-select"},null,8,["value","options","placeholder"])]),_:1},8,["label"]),x.value&&ve.value?(U(),Y(e(j),{key:0,label:e(s)("settings.voice.apiCompatibility"),required:""},{default:r(()=>[a(e(G),{value:m.value,"onUpdate:value":F[1]||(F[1]=I=>m.value=I),options:[{label:e(s)("settings.voice.openaiCompatible"),value:"openai-compatible"},{label:e(s)("settings.voice.manualCustomEndpoint"),value:"manual"}],"data-testid":"voice-provider-compatibility"},null,8,["value","options"])]),_:1},8,["label"])):B("",!0)]),x.value?(U(),O(ye,{key:0},[g("section",Ds,[g("div",Fs,[g("span",null,y(e(s)("settings.voice.connectionStep")),1),g("small",null,y(Ce.value),1)]),a(e(j),{label:e(s)("models.baseUrl"),required:x.value.isSecretRequired,feedback:J.value},{default:r(()=>[a(e(W),{value:l.value.baseUrl,"onUpdate:value":F[2]||(F[2]=I=>l.value.baseUrl=I),placeholder:e(s)("models.baseUrlPlaceholder"),disabled:!!x.value.baseUrl&&x.value.provider!=="custom","data-testid":"voice-provider-base-url",onBlur:yi},null,8,["value","placeholder","disabled"])]),_:1},8,["label","required","feedback"]),a(e(j),{label:e(s)("models.apiKey"),required:x.value.isSecretRequired,feedback:pe.value},{default:r(()=>[a(e(W),{value:l.value.apiKey,"onUpdate:value":F[3]||(F[3]=I=>l.value.apiKey=I),type:"password","show-password-on":"click",autocomplete:"off",placeholder:x.value.isSecretRequired?e(s)("settings.voice.apiKeyConnectPlaceholder"):e(s)("models.apiKeyPlaceholder"),"data-testid":"voice-provider-api-key",onBlur:hi},null,8,["value","placeholder"])]),_:1},8,["label","required","feedback"]),fe.value?(U(),O("div",Is,[a(e(K),{size:"small",loading:L.value,disabled:!de.value,"data-testid":"voice-provider-probe",onClick:qe},{default:r(()=>[N(y(e(s)("settings.voice.connectFetchModels")),1)]),_:1},8,["loading","disabled"])])):B("",!0),D.value?(U(),O("div",Rs,[g("span",null,y(D.value),1),E.value?(U(),O("button",{key:0,type:"button",class:"link-button",onClick:F[4]||(F[4]=I=>V.value=!V.value)},y(V.value?e(s)("settings.voice.hideDetails"):e(s)("settings.voice.showDetails")),1)):B("",!0),V.value&&E.value?(U(),O("pre",zs,y(E.value),1)):B("",!0)])):B("",!0)]),x.value.capabilities?.models?(U(),O("section",Hs,[g("div",Vs,[g("span",null,y(e(s)("settings.voice.model")),1),g("small",null,y(e(s)("settings.voice.modelConnectManualHint")),1)]),a(e(j),{label:e(s)("models.defaultModel"),feedback:ue.value},{default:r(()=>[a(e(G),{value:l.value.model,options:q.value,tag:"",filterable:"",loading:L.value,placeholder:e(s)("settings.voice.modelConnectManualHint"),"data-testid":"voice-provider-model","onUpdate:value":gi},null,8,["value","options","loading","placeholder"])]),_:1},8,["label","feedback"]),L.value?(U(),O("div",Ls,y(e(s)("settings.voice.fetchingModels")),1)):M.value&&b.value&&l.value.model!==M.value?(U(),O("div",Ns,[N(y(e(s)("settings.voice.recommendedModel",{model:M.value}))+" ",1),g("button",{type:"button",class:"link-button",onClick:fi},y(e(s)("settings.voice.useRecommendedModel")),1)])):T.value.length?(U(),O("div",Ks,y(e(s)("settings.voice.modelsDiscovered",{count:T.value.length})),1)):D.value?(U(),O("div",Es,y(e(s)("settings.voice.discoveryFailedManualFallback")),1)):B("",!0)])):B("",!0),_e.value?(U(),O("section",Bs,[g("div",qs,[g("span",null,y(e(s)("settings.voice.voice")),1),g("small",null,y(e(s)("settings.voice.doubaoVoiceHint")),1)]),a(e(j),{label:e(s)("settings.voice.voice")},{default:r(()=>[a(e(G),{value:l.value.voice,"onUpdate:value":[F[5]||(F[5]=I=>l.value.voice=I),_i],options:u.value,tag:"",filterable:"","data-testid":"voice-provider-voice"},null,8,["value","options"])]),_:1},8,["label"])])):B("",!0),p.kind==="stt"?(U(),O("section",Ys,[a(e(j),{label:e(s)("settings.voice.sttAudioTranscode")},{default:r(()=>[a(e(G),{value:l.value.audioTranscode,"onUpdate:value":F[6]||(F[6]=I=>l.value.audioTranscode=I),options:d.value,"data-testid":"voice-provider-audio-transcode"},null,8,["value","options"])]),_:1},8,["label"])])):B("",!0)],64)):B("",!0)]),_:1})]),_:1},8,["show","title"]))}})})),tn=A((()=>{})),ri,sn=A((()=>{js(),js(),tn(),le(),ri=ne(oi,[["__scopeId","data-v-9aec528e"]])})),Ws,Gs,ui,Js=A((()=>{Z(),ie(),se(),Be(),Ee(),Da(),Ws={style:{"font-size":"12px",opacity:"0.6"}},Gs={style:{"font-size":"12px",opacity:"0.6"}},ui=te({__name:"VoiceApiConfigurator",props:{connection:{},show:{type:Boolean}},emits:["close","save"],setup(p,{emit:t}){const n=p,i=t,{t:s}=ae(),w=$(!1),P=$({}),_=$(""),m=C(()=>n.connection?we.find(o=>o.kind===n.connection.kind&&o.provider===n.connection.provider&&(o.baseUrl===n.connection.baseUrl||!o.baseUrl)):null),l=C(()=>m.value?.capabilities||{});function b(o,c){P.value[o]=c??""}function S(o){const c=P.value[o];return typeof c=="string"?c:typeof c=="number"?String(c):""}function h(o,c=0){const v=P.value[o];if(typeof v=="number"&&Number.isFinite(v))return v;if(typeof v=="string"&&v.trim()){const x=Number(v);if(Number.isFinite(x))return x}return c}Ue(()=>n.connection,o=>{o&&(P.value={...o.settings,model:o.model||String(o.settings.model||""),voice:o.voice||String(o.settings.voice||"")},o.provider==="edge"&&(P.value.rate=h("rate",1),P.value.pitch=h("pitch",0)),_.value="")},{immediate:!0});async function R(){if(n.connection){w.value=!0;try{const o=_.value.trim();i("save",n.connection,{settings:{...P.value},...o?{secrets:{apiKey:o}}:{}})}finally{w.value=!1}}}const L=[{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"}],T=[{label:"Alloy",value:"alloy"},{label:"Echo",value:"echo"},{label:"Fable",value:"fable"},{label:"Nova",value:"nova"},{label:"Onyx",value:"onyx"},{label:"Shimmer",value:"shimmer"}],M=[{label:"冰糖 (中文·女)",value:"冰糖"},{label:"茉莉 (中文·女)",value:"茉莉"},{label:"苏打 (中文·男)",value:"苏打"},{label:"白桦 (中文·男)",value:"白桦"}],D=[{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"}],E=[{label:"Seed TTS 2.0",value:Ke}],V=C(()=>{const o=S("voice").trim(),c=ze.map(v=>({label:v.label,value:v.value}));return o&&!ze.some(v=>v.value===o)?[{label:o,value:o},...c]:c}),X=C(()=>[{label:s("settings.voice.sttAudioTranscodeNone"),value:"none"},{label:s("settings.voice.sttAudioTranscodeFfmpeg"),value:"ffmpeg"}]);function f(o){b("voice",o),b("model",Oa(o)||"seed-tts-2.0")}return(o,c)=>(U(),Y(e(ki),{show:p.show,width:400,"onUpdate:show":c[16]||(c[16]=v=>i("close"))},{default:r(()=>[a(e(Pi),{title:p.connection?.label,closable:""},{footer:r(()=>[a(e(xe),{justify:"end"},{default:r(()=>[a(e(K),{onClick:c[15]||(c[15]=v=>i("close"))},{default:r(()=>[N(y(e(s)("common.cancel")),1)]),_:1}),a(e(K),{type:"primary",loading:w.value,onClick:R},{default:r(()=>[N(y(e(s)("common.save")),1)]),_:1},8,["loading"])]),_:1})]),default:r(()=>[p.connection?(U(),Y(e($e),{key:0,"label-placement":"top"},{default:r(()=>[p.connection.isBuiltin?B("",!0):(U(),Y(e(j),{key:0,label:e(s)("settings.voice.apiKey")},{default:r(()=>[a(e(W),{value:_.value,"onUpdate:value":c[0]||(c[0]=v=>_.value=v),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?(U(),Y(e(j),{key:1,label:e(s)("settings.voice.model")},{default:r(()=>[p.connection.provider==="mimo"?(U(),Y(e(G),{key:0,value:S("model"),options:D,"onUpdate:value":c[1]||(c[1]=v=>b("model",v))},null,8,["value"])):p.connection.provider==="doubao"?(U(),Y(e(G),{key:1,value:S("model")||e("seed-tts-2.0"),options:E,tag:"",filterable:"","onUpdate:value":c[2]||(c[2]=v=>b("model",v))},null,8,["value"])):(U(),Y(e(W),{key:2,value:S("model"),placeholder:e(s)("models.selectOrInput"),"onUpdate:value":c[3]||(c[3]=v=>b("model",v))},null,8,["value","placeholder"]))]),_:1},8,["label"])):B("",!0),l.value.voices?(U(),Y(e(j),{key:2,label:e(s)("settings.voice.voice")},{default:r(()=>[p.connection.provider==="edge"?(U(),Y(e(G),{key:0,value:S("voice"),options:L,filterable:"","onUpdate:value":c[4]||(c[4]=v=>b("voice",v))},null,8,["value"])):p.connection.provider==="openai"?(U(),Y(e(G),{key:1,value:S("voice"),options:T,"onUpdate:value":c[5]||(c[5]=v=>b("voice",v))},null,8,["value"])):p.connection.provider==="mimo"&&S("model")==="mimo-v2.5-tts"?(U(),Y(e(G),{key:2,value:S("voice"),options:M,"onUpdate:value":c[6]||(c[6]=v=>b("voice",v))},null,8,["value"])):p.connection.provider==="doubao"?(U(),Y(e(G),{key:3,value:S("voice"),options:V.value,tag:"",filterable:"","onUpdate:value":f},null,8,["value","options"])):(U(),Y(e(W),{key:4,value:S("voice"),"onUpdate:value":c[7]||(c[7]=v=>b("voice",v))},null,8,["value"]))]),_:1},8,["label"])):B("",!0),p.connection.provider==="edge"?(U(),O(ye,{key:3},[a(e(j),{label:e(s)("settings.voice.edgeRate")},{default:r(()=>[a(e(xe),{vertical:"",style:{width:"100%"}},{default:r(()=>[a(e(Xe),{value:h("rate",1),min:.5,max:2,step:.05,"onUpdate:value":c[8]||(c[8]=v=>b("rate",Array.isArray(v)?v[0]:v))},null,8,["value"]),g("span",Ws,y(h("rate",1).toFixed(2))+"x ("+y(e(Fa)(h("rate",1)))+")",1)]),_:1})]),_:1},8,["label"]),a(e(j),{label:e(s)("settings.voice.edgePitch")},{default:r(()=>[a(e(xe),{vertical:"",style:{width:"100%"}},{default:r(()=>[a(e(Xe),{value:h("pitch",0),min:-20,max:20,step:1,"onUpdate:value":c[9]||(c[9]=v=>b("pitch",Array.isArray(v)?v[0]:v))},null,8,["value"]),g("span",Gs,y(h("pitch",0)>0?"+":"")+y(h("pitch",0))+" Hz ("+y(e(Ia)(h("pitch",0)))+")",1)]),_:1})]),_:1},8,["label"])],64)):B("",!0),p.connection.provider==="mimo"?(U(),O(ye,{key:4},[l.value.stylePrompt?(U(),Y(e(j),{key:0,label:e(s)("settings.voice.mimoStylePrompt")},{default:r(()=>[a(e(W),{value:S("stylePrompt"),type:"textarea",rows:2,"onUpdate:value":c[10]||(c[10]=v=>b("stylePrompt",v))},null,8,["value"])]),_:1},8,["label"])):B("",!0),S("model")==="mimo-v2.5-tts-voicedesign"?(U(),Y(e(j),{key:1,label:e(s)("settings.voice.mimoVoiceDesignPrompt")},{default:r(()=>[a(e(W),{value:S("voiceDesignDesc"),type:"textarea",rows:3,"onUpdate:value":c[11]||(c[11]=v=>b("voiceDesignDesc",v))},null,8,["value"])]),_:1},8,["label"])):B("",!0)],64)):B("",!0),p.connection.kind==="stt"&&p.connection.provider!=="browser"?(U(),O(ye,{key:5},[a(e(j),{label:e(s)("settings.voice.sttAudioTranscode")},{default:r(()=>[a(e(G),{value:S("audioTranscode")||"none",options:X.value,"onUpdate:value":c[12]||(c[12]=v=>b("audioTranscode",v))},null,8,["value","options"])]),_:1},8,["label"]),a(e(j),{label:e(s)("settings.voice.sttLanguage")},{default:r(()=>[a(e(W),{value:S("language"),"onUpdate:value":c[13]||(c[13]=v=>b("language",v))},null,8,["value"])]),_:1},8,["label"]),a(e(j),{label:e(s)("settings.voice.sttPrompt")},{default:r(()=>[a(e(W),{value:S("prompt"),type:"textarea",rows:2,"onUpdate:value":c[14]||(c[14]=v=>b("prompt",v))},null,8,["value"])]),_:1},8,["label"])],64)):B("",!0)]),_:1})):B("",!0)]),_:1},8,["title"])]),_:1},8,["show"]))}})})),di,an=A((()=>{Js(),Js(),di=ui})),Qs,Zs,ea,ta,sa,aa,ia,la,na,oa,ra,ua,da,ca,va,pa,ma,ga,_a,fa,ya,ba,ci,ha=A((()=>{Z(),ie(),se(),cl(),ul(),tl(),jl(),Da(),Ql(),sn(),an(),Qs={class:"voice-settings"},Zs={class:"settings-section voice-provider-section","aria-labelledby":"tts-providers-title"},ea={class:"section-header"},ta={class:"section-copy"},sa={id:"tts-providers-title",class:"section-title"},aa={class:"section-desc"},ia={class:"section-controls"},la={class:"active-select"},na={class:"active-label"},oa={class:"active-summary"},ra={class:"test-copy-row"},ua={class:"provider-list"},da={class:"settings-section voice-provider-section","aria-labelledby":"stt-providers-title"},ca={class:"section-header"},va={class:"section-copy"},pa={id:"stt-providers-title",class:"section-title"},ma={class:"section-desc"},ga={class:"section-controls"},_a={class:"active-select"},fa={class:"active-label"},ya={class:"active-summary"},ba={class:"provider-list"},ci=te({__name:"VoiceSettings",setup(p){const{t}=ae(),n=re(),i=pl(),s=Xl(),w=$(t("settings.voice.testTextDefault")),P=$(!1),_=$("tts"),m=$(!1),l=$(null),b=sl({maxDurationMs:3e4}),S=$({}),h=C(()=>s.activeTtsConnection.value?.label||t("settings.voice.noneSelected")),R=C(()=>s.activeSttConnection.value?.label||t("settings.voice.noneSelected"));ke(async()=>{await s.refresh()});function L(d){_.value=d,P.value=!0}function T(d,u,k){S.value={...S.value,[d]:{status:u,message:k}}}function M(d){const u={...S.value};for(const[k,J]of Object.entries(u))k!==d&&J.status==="recording"&&(u[k]={status:"idle"});S.value=u}async function D(d){try{await s.saveConnection(_.value,d.preset.provider,{settings:d.settings,secrets:d.secrets}),P.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(u){n.error(u instanceof Error?u.message:t("settings.voice.ttsSaveFailed"))}}function E(d){l.value=d,m.value=!0}async function V(d,u){try{await s.saveConnection(d.kind,d.provider,u),m.value=!1,n.success(t("settings.voice.ttsSaved"))}catch(k){n.error(k instanceof Error?k.message:t("settings.voice.ttsSaveFailed"))}}async function X(d){try{await s.deleteSecret(d.kind,d.provider),T(d.id,"idle"),n.success(t("settings.voice.ttsCleared"))}catch(u){n.error(u instanceof Error?u.message:t("settings.voice.ttsClearFailed"))}}async function f(d){await s.setActiveConnection(d.kind,d.id)}async function o(d){await s.setActiveConnection("tts",d)}async function c(d){await s.setActiveConnection("stt",d)}function v(d){return{...d.settings,baseUrl:d.baseUrl||d.settings.baseUrl,model:d.model||d.settings.model,voice:d.voice||d.settings.voice}}function x(d){const u=v(d),k=d.provider==="edge"||d.provider==="openai"||d.provider==="custom"||d.provider==="doubao"?d.provider:void 0,J=Number(u.rate),ue=Number(u.pitch);return{baseUrl:String(u.baseUrl||""),model:typeof u.model=="string"?u.model:void 0,voice:typeof u.voice=="string"?u.voice:void 0,rate:d.provider==="edge"&&Number.isFinite(J)?Fa(J):typeof u.rate=="string"?u.rate:void 0,pitch:d.provider==="edge"&&Number.isFinite(ue)?Ia(ue):typeof u.pitch=="string"?u.pitch:void 0,stylePrompt:typeof u.stylePrompt=="string"?u.stylePrompt:void 0,provider:k}}function ve(d){const u=v(d);return{baseUrl:String(u.baseUrl||"https://api.xiaomimimo.com/v1"),model:String(u.model||"mimo-v2.5-tts"),voice:typeof u.voice=="string"?u.voice:void 0,authMode:u.authMode==="api-key"||u.authMode==="bearer"||u.authMode==="both"?u.authMode:void 0,voiceMode:u.voiceMode==="preset"||u.voiceMode==="voiceDesign"||u.voiceMode==="voiceClone"?u.voiceMode:void 0,voiceDesignDesc:typeof u.voiceDesignDesc=="string"?u.voiceDesignDesc:void 0,voiceCloneDataUri:typeof u.voiceCloneDataUri=="string"?u.voiceCloneDataUri:void 0,voiceCloneFormat:u.voiceCloneFormat==="mp3"||u.voiceCloneFormat==="wav"?u.voiceCloneFormat:void 0,stylePrompt:typeof u.stylePrompt=="string"?u.stylePrompt:void 0}}async function _e(d){const u=w.value.trim();if(!u){T(d.id,"error",t("settings.voice.testTextRequired"));return}if(!d.isBuiltin&&!d.hasSecret){T(d.id,"error",t("settings.voice.keyMissingForTest"));return}T(d.id,"loading",t("settings.voice.testing"));try{d.provider==="mimo"?await i.mimoPlay(d.id,u,ve(d)):(d.provider==="edge"||d.provider==="openai"||d.provider==="custom"||d.provider==="doubao")&&await i.openaiPlay(d.id,u,x(d)),T(d.id,"success",t("settings.voice.testSuccess"))}catch(k){T(d.id,"error",t("settings.voice.testFailed",{error:k instanceof Error?k.message:String(k)}))}}async function fe(d){if(d.provider==="browser"){T(d.id,"success",t("settings.voice.browserSttTestHint"));return}if(!d.hasSecret){T(d.id,"error",t("settings.voice.keyMissingForTest"));return}if(S.value[d.id]?.status==="recording"){T(d.id,"loading",t("settings.voice.transcribing"));try{const u=await b.stop();if(!u.size){T(d.id,"error",t("settings.voice.sttEmptyAudio"));return}const k=await il({audio:u,provider:d.provider});T(d.id,"success",k.text||t("settings.voice.sttTestSuccess"))}catch(u){T(d.id,"error",t("settings.voice.sttTestFailed",{error:u instanceof Error?u.message:String(u)}))}return}try{M(d.id),await b.start(),T(d.id,"recording",t("settings.voice.sttRecordingHint"))}catch(u){console.error("[VoiceSettings] Failed to start STT card test recording:",u),T(d.id,"error",t("settings.voice.sttTestFailed",{error:u instanceof Error?u.message:String(u)}))}}async function q(d){if(d.kind==="tts"){await _e(d);return}await fe(d)}return(d,u)=>(U(),O("div",Qs,[g("section",Zs,[g("header",ea,[g("div",ta,[g("h4",sa,y(e(t)("settings.voice.ttsProvidersTitle")),1),g("p",aa,y(e(t)("settings.voice.ttsProvidersDescription")),1)]),g("div",ia,[g("div",la,[g("span",na,y(e(t)("settings.voice.activeTtsApi")),1),a(e(G),{value:e(s).activeTtsId.value,options:e(s).ttsConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeTtsApi"),"onUpdate:value":o},null,8,["value","options","aria-label"]),g("span",oa,y(h.value),1)]),a(e(K),{size:"small",secondary:"",onClick:u[0]||(u[0]=k=>L("tts"))},{default:r(()=>[N(y(e(t)("settings.voice.addTtsApi")),1)]),_:1})])]),g("div",ra,[a(e(W),{value:w.value,"onUpdate:value":u[1]||(u[1]=k=>w.value=k),size:"small",placeholder:e(t)("settings.voice.testTextPlaceholder"),"data-testid":"tts-test-text"},null,8,["value","placeholder"])]),g("div",ua,[(U(!0),O(ye,null,Me(e(s).ttsConnections.value,k=>(U(),Y(Le,{key:k.id,connection:k,"test-state":S.value[k.id],onSetActive:f,onTest:q,onEdit:E,onConnect:E,onRemove:X},null,8,["connection","test-state"]))),128))])]),g("section",da,[g("header",ca,[g("div",va,[g("h4",pa,y(e(t)("settings.voice.sttProvidersTitle")),1),g("p",ma,y(e(t)("settings.voice.sttProvidersDescription")),1)]),g("div",ga,[g("div",_a,[g("span",fa,y(e(t)("settings.voice.activeSttApi")),1),a(e(G),{value:e(s).activeSttId.value,options:e(s).sttConnectionOptions.value,size:"small","aria-label":e(t)("settings.voice.activeSttApi"),"onUpdate:value":c},null,8,["value","options","aria-label"]),g("span",ya,y(R.value),1)]),a(e(K),{size:"small",secondary:"",onClick:u[2]||(u[2]=k=>L("stt"))},{default:r(()=>[N(y(e(t)("settings.voice.addSttApi")),1)]),_:1})])]),g("div",ba,[(U(!0),O(ye,null,Me(e(s).sttConnections.value,k=>(U(),Y(Le,{key:k.id,connection:k,"test-state":S.value[k.id],onSetActive:f,onTest:q,onEdit:E,onConnect:E,onRemove:X},null,8,["connection","test-state"]))),128))])]),a(ri,{show:P.value,kind:_.value,onClose:u[3]||(u[3]=k=>P.value=!1),onSaved:D},null,8,["show","kind"]),a(di,{show:m.value,connection:l.value,onClose:u[4]||(u[4]=k=>m.value=!1),onSave:V},null,8,["show","connection"])]))}})})),ln=A((()=>{})),vi,nn=A((()=>{ha(),ha(),ln(),le(),vi=ne(ci,[["__scopeId","data-v-6df4117c"]])})),Sa,wa,Ua,ka,pi,Pa=A((()=>{Z(),$i(),ie(),se(),be(),bl(),Sl(),Ul(),Pl(),Tl(),xl(),Ml(),Dl(),Il(),zl(),Vl(),nn(),Ne(),$a(),Sa={class:"settings-view"},wa={class:"page-header"},Ua={class:"header-title"},ka={class:"settings-content"},pi=te({__name:"SettingsView",setup(p){const t=he(),n=xa(),{t:i}=ae(),s=Di(),w=Mi(),P=Oi(),_=$("account"),m=C(()=>new Set(["account",...s?["users"]:[],"display","proxy","agent","memory","compression","session","privacy","models","voice"]));function l(h){const R=typeof h=="string"?h:"";return m.value.has(R)?R:"account"}function b(h){_.value=l(h),P.replace({query:{...w.query,tab:_.value==="account"?void 0:_.value}})}Ue(()=>w.query.tab,h=>{_.value=l(h)},{immediate:!0});async function S(){(!n.activeProfileName||n.profiles.length===0)&&await n.fetchProfiles(),await t.fetchSettings()}return ke(()=>{S()}),(h,R)=>(U(),O("div",Sa,[g("header",wa,[g("h2",Ua,y(e(i)("settings.title")),1)]),g("div",ka,[a(e(Ta),{show:e(t).loading||e(t).saving,size:"large",description:e(i)("common.loading")},{default:r(()=>[a(e(xi),{value:_.value,"onUpdate:value":[R[0]||(R[0]=L=>_.value=L),b],type:"line",animated:""},{default:r(()=>[a(e(me),{name:"account",tab:e(i)("settings.tabs.account")},{default:r(()=>[a(ti)]),_:1},8,["tab"]),e(s)?(U(),Y(e(me),{key:0,name:"users",tab:e(i)("settings.tabs.users")},{default:r(()=>[a(ai)]),_:1},8,["tab"])):B("",!0),a(e(me),{name:"display",tab:e(i)("settings.tabs.display")},{default:r(()=>[a(za)]),_:1},8,["tab"]),a(e(me),{name:"proxy",tab:e(i)("settings.tabs.proxy")},{default:r(()=>[a(Ea)]),_:1},8,["tab"]),a(e(me),{name:"agent",tab:e(i)("settings.tabs.agent")},{default:r(()=>[a(Va),a(Na)]),_:1},8,["tab"]),a(e(me),{name:"memory",tab:e(i)("settings.tabs.memory")},{default:r(()=>[a(qa)]),_:1},8,["tab"]),a(e(me),{name:"compression",tab:e(i)("settings.tabs.compression")},{default:r(()=>[a(Xa)]),_:1},8,["tab"]),a(e(me),{name:"session",tab:e(i)("settings.tabs.session")},{default:r(()=>[a(Wa)]),_:1},8,["tab"]),a(e(me),{name:"privacy",tab:e(i)("settings.tabs.privacy")},{default:r(()=>[a(Ja)]),_:1},8,["tab"]),a(e(me),{name:"models",tab:e(i)("settings.tabs.models")},{default:r(()=>[a(Za)]),_:1},8,["tab"]),a(e(me),{name:"voice",tab:e(i)("settings.tabs.voice")},{default:r(()=>[a(vi)]),_:1},8,["tab"])]),_:1},8,["value"])]),_:1},8,["show","description"])])]))}})})),on=A((()=>{})),rn,un=A((()=>{Pa(),Pa(),on(),le(),rn=ne(pi,[["__scopeId","data-v-ed31db3f"]])}));un();export{rn as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as P}from"./rolldown-runtime-M0oDzQ_3.js";import{Hn as H,Kt as sl,Nn as f,Ot as K,an as e,cn as n,cr as i,er as p,fn as C,fr as b,hn as al,in as v,jn as r,kn as tl,pn as R,pr as a,sn as F,t as il,tn as m,ur as j}from"./ui-vendor-DDMfmCj2.js";import{O as ol,k as nl}from"./vue-vendor-BsMpqyaC.js";import{n as rl,t as ul}from"./_plugin-vue_export-helper-
|
|
1
|
+
import{n as P}from"./rolldown-runtime-M0oDzQ_3.js";import{Hn as H,Kt as sl,Nn as f,Ot as K,an as e,cn as n,cr as i,er as p,fn as C,fr as b,hn as al,in as v,jn as r,kn as tl,pn as R,pr as a,sn as F,t as il,tn as m,ur as j}from"./ui-vendor-DDMfmCj2.js";import{O as ol,k as nl}from"./vue-vendor-BsMpqyaC.js";import{n as rl,t as ul}from"./_plugin-vue_export-helper-CvnFozKy.js";import{Dt as dl,Et as _l}from"./index-B2IKGvbR.js";import{l as cl,o as vl}from"./skills-5qxphanX.js";var G,J,Q,W,X,Y,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,De,Me,Ve,$e,Fe,qe,Be,Pe,Ne,Ae,Le,Te,ze,Ie,Oe,Ee,q,B,Ke,He=P((()=>{sl(),ol(),il(),_l(),cl(),G={class:"skills-usage-view"},J={class:"page-header"},Q={class:"header-text"},W={class:"header-title"},X={class:"header-subtitle"},Y={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"},De={class:"usage-panel"},Me={class:"panel-header"},Ve={key:0,class:"skills-usage-state compact"},$e=["aria-label"],Fe={class:"skills-row table-head",role:"row"},qe={role:"columnheader"},Be={role:"columnheader"},Pe={role:"columnheader"},Ne={role:"columnheader"},Ae={role:"columnheader"},Le={class:"skill-name",role:"cell"},Te={role:"cell"},ze={role:"cell"},Ie={class:"share-cell",role:"cell"},Oe={class:"share-bar"},Ee={class:"last-used",role:"cell"},q=6,B="#5b6b84",Ke=al({__name:"SkillsUsageView",setup(pl){const{t}=nl(),D=dl(),Re=[7,30,90,365],N=["#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),je=v(()=>Math.max(...(o.value?.by_day??[]).map(s=>s.total_count),1)),Ge=v(()=>g.value&&!!o.value),w=p(null),x=p(null),y=v(()=>o.value?.by_day.find(s=>s.date===w.value)??null),Je=v(()=>y.value?I(y.value):[]),Qe=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"}),M=v(()=>(o.value?.top_skills??[]).slice(0,q)),We=v(()=>new Set(M.value.map(s=>s.skill)));function T(s){return`${s.toFixed(1)}%`}function Xe(s){return s?new Date(s*1e3).toLocaleString():"—"}function Ye(s){return`${Math.max(2,s/je.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)-q,0);return s>0?`${t("skillsUsage.otherSkills")} (+${s})`:t("skillsUsage.otherSkills")}function V(s){const d=M.value.findIndex(l=>l.skill===s);return d>=0?N[d%N.length]:B}function I(s){const d=s.skills??[],l=new Map(d.map(u=>[u.skill,z(u)])),c=M.value.map(u=>({key:u.skill,label:u.skill,count:l.get(u.skill)??0,color:V(u.skill)})).filter(u=>u.count>0),_=d.filter(u=>!We.value.has(u.skill)).reduce((u,ll)=>u+z(ll),0);return _>0&&c.push({key:"other-skills",label:el(),count:_,color:B}),c}function O(s,d){w.value=s.date,x.value=d}function E(s){w.value===s.date&&(w.value=null,x.value=null)}async function $(s=h.value,d=!1){h.value=s,(!D.activeProfileName||D.profiles.length===0)&&await D.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 tl(()=>{$(7)}),(s,d)=>(r(),n("div",G,[e("header",J,[e("div",Q,[e("h2",W,a(i(t)("skillsUsage.title")),1),e("p",X,a(i(t)("skillsUsage.subtitle")),1)]),e("div",Y,[e("div",{class:"period-selector",role:"group","aria-label":i(t)("skillsUsage.periodSelector")},[(r(),n(m,null,f(Re,l=>R(i(K),{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=>$(l)},{default:H(()=>[C(a(i(t)("skillsUsage.periodLabel",{days:l})),1)]),_:2},1032,["secondary","quaternary","type","aria-pressed","onClick"])),64))],8,Z),R(i(K),{size:"small",quaternary:"",loading:g.value,onClick:d[0]||(d[0]=l=>$(h.value,!0))},{default:H(()=>[C(a(i(t)("skillsUsage.refresh")),1)]),_:1},8,["loading"])])]),e("div",ee,[k.value&&!o.value?(r(),n("div",le,a(k.value),1)):g.value&&!o.value?(r(),n("div",se,a(i(t)("common.loading")),1)):o.value?(r(),n(m,{key:2},[k.value?(r(),n("div",ae,a(k.value),1)):F("",!0),e("section",te,[e("div",{class:j(["usage-panel chart-panel",{"is-refreshing":Ge.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?(r(),n(m,{key:1},[e("div",ne,[(r(!0),n(m,null,f(o.value.by_day,(l,c)=>(r(),n("div",{key:l.date,class:"skill-bar-col",tabindex:"0",onMouseenter:_=>O(l,c),onFocusin:_=>O(l,c),onMouseleave:_=>E(l),onFocusout:_=>E(l)},[e("div",ue,[e("div",{class:"skill-bar-fill",style:b({height:Ye(l.total_count)})},[(r(!0),n(m,null,f(I(l),_=>(r(),n("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?(r(),n("div",{key:0,class:j(["floating-tooltip",Qe.value])},[e("div",_e,a(y.value.date),1),(r(!0),n(m,null,f(Je.value,l=>(r(),n("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)):(r(),n("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",De,[e("div",Me,[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?(r(),n("div",{key:1,class:"skills-table",role:"table","aria-label":i(t)("skillsUsage.topSkills")},[e("div",Fe,[e("span",qe,a(i(t)("skillsUsage.skill")),1),e("span",Be,a(i(t)("skillsUsage.loads")),1),e("span",Pe,a(i(t)("skillsUsage.edits")),1),e("span",Ne,a(i(t)("skillsUsage.share")),1),e("span",Ae,a(i(t)("skillsUsage.lastUsed")),1)]),(r(!0),n(m,null,f(o.value.top_skills,l=>(r(),n("div",{key:l.skill,class:"skills-row",role:"row"},[e("span",Le,[e("i",{class:"skill-color-dot",style:b({background:V(l.skill)})},null,4),C(" "+a(l.skill),1)]),e("span",Te,a(l.view_count),1),e("span",ze,a(l.manage_count),1),e("span",Ie,[e("span",Oe,[e("span",{style:b({width:T(l.percentage),background:V(l.skill)})},null,4)]),C(" "+a(T(l.percentage)),1)]),e("span",Ee,a(Xe(l.last_used_at)),1)]))),128))],8,$e)):(r(),n("div",Ve,a(i(t)("skillsUsage.noData")),1))])],64)):F("",!0)])]))}})})),hl=P((()=>{})),kl,ml=P((()=>{He(),He(),hl(),rl(),kl=ul(Ke,[["__scopeId","data-v-efe6595e"]])}));ml();export{kl as default};
|