coding-tool-x 3.8.6 → 3.8.7
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/web/assets/{AgentsDrawer-Db9wAyaZ.js → AgentsDrawer-C7ePByZx.js} +1 -1
- package/dist/web/assets/{Analytics-C4gMzv7g.js → Analytics-BVG6ehFv.js} +1 -1
- package/dist/web/assets/{AssetPathField-Bd_nMFu3.js → AssetPathField-BZI9NvEr.js} +1 -1
- package/dist/web/assets/{ChatHistoryDrawer-CwzJHyNP.js → ChatHistoryDrawer-Ccl4rhdz.js} +1 -1
- package/dist/web/assets/{CollapseItem-CTCfSiue.js → CollapseItem-MxG_UD4o.js} +1 -1
- package/dist/web/assets/{CommandsDrawer-vDghB1U9.js → CommandsDrawer-DWbaxHRZ.js} +1 -1
- package/dist/web/assets/{ConfigExportDrawer-C-XDvlHc.js → ConfigExportDrawer-DrawKwxE.js} +1 -1
- package/dist/web/assets/{ConfigTemplates-CYY8XRED.js → ConfigTemplates-AiRPv2cd.js} +1 -1
- package/dist/web/assets/{ConfigTemplatesDrawer-CbsJp76X.js → ConfigTemplatesDrawer-CKMFsfEF.js} +1 -1
- package/dist/web/assets/{ConfigTemplatesPanel-liMSTh7s.js → ConfigTemplatesPanel-Cvbnkvpt.js} +1 -1
- package/dist/web/assets/{FavoritesDrawer-D6QSiYaL.js → FavoritesDrawer-DA-dR_vP.js} +1 -1
- package/dist/web/assets/{GatewayConvertDrawer-RvET6iNG.js → GatewayConvertDrawer-402_raGb.js} +1 -1
- package/dist/web/assets/{Home-P8eseZcf.js → Home-CTF8ZWKW.js} +1 -1
- package/dist/web/assets/{MarkdownEditor-CYmLGYju.js → MarkdownEditor-BvkDECwH.js} +1 -1
- package/dist/web/assets/{McpDrawer-Ch3bkKIq.js → McpDrawer-DZGHkuDm.js} +1 -1
- package/dist/web/assets/{McpFormDrawer-BcTlgSpN.js → McpFormDrawer-DPMnyt5L.js} +1 -1
- package/dist/web/assets/{PluginManager-Dh2o0xkZ.js → PluginManager-FKVeugr4.js} +1 -1
- package/dist/web/assets/{PluginsDrawer-deKQ5u3I.js → PluginsDrawer-MvM1R55d.js} +1 -1
- package/dist/web/assets/{PluginsPanel-BofsgQgj.js → PluginsPanel-CKuBs38B.js} +1 -1
- package/dist/web/assets/{ProjectList-DhSWJHTA.js → ProjectList-tsjwjXV1.js} +1 -1
- package/dist/web/assets/{PromptsDrawer-Cfb2FeeU.js → PromptsDrawer-B-X9ci8n.js} +1 -1
- package/dist/web/assets/{RecentSessionsDrawer-3eXamJhr.js → RecentSessionsDrawer-wLktMF_c.js} +1 -1
- package/dist/web/assets/{SessionCard-CW0eHURI.js → SessionCard-DkJPy0TY.js} +1 -1
- package/dist/web/assets/{SessionList-DQfyDGWU.js → SessionList-Gzhh4FOZ.js} +1 -1
- package/dist/web/assets/{SettingsDrawer-u_vwUuPS.js → SettingsDrawer-lMjttbkD.js} +1 -1
- package/dist/web/assets/{SkillManager-DHMprJLA.js → SkillManager-CzFxWxx-.js} +1 -1
- package/dist/web/assets/{SkillsDrawer-CkF3BpyC.js → SkillsDrawer-DF6JsSyj.js} +1 -1
- package/dist/web/assets/{SkillsPanel-DWE4pFGx.js → SkillsPanel--lLEts9y.js} +1 -1
- package/dist/web/assets/{SpeedTestDrawer-BgfG1Ked.js → SpeedTestDrawer-BaZkZqPP.js} +1 -1
- package/dist/web/assets/{Upload-CNwaGOws.js → Upload-BEQ-3Kqq.js} +1 -1
- package/dist/web/assets/{WorkspaceDrawer-Br5CeCzL.js → WorkspaceDrawer-BFSwZ5yU.js} +1 -1
- package/dist/web/assets/{WorkspaceManager-B2O8-qIw.js → WorkspaceManager-BHL1uYct.js} +1 -1
- package/dist/web/assets/{WorkspacePanel-5oDKit3c.js → WorkspacePanel-B5PooBtg.js} +1 -1
- package/dist/web/assets/{index-BMAUPq5K.js → index-BFInlZGI.js} +2 -2
- package/dist/web/assets/{index-Bi1MQHYX.css → index-BohDDAy_.css} +1 -1
- package/dist/web/assets/{useResponsiveDrawer-jbmqZuJs.js → useResponsiveDrawer-D-DDpbnI.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/src/shared/channel-driver.js +80 -5
package/dist/web/assets/{RecentSessionsDrawer-3eXamJhr.js → RecentSessionsDrawer-wLktMF_c.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Dn as e,i as s,t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{D as t,K as n,M as i,O as o,S as l,W as r,Z as c,b as u,et as d,g as m,mt as p,st as h,w as v}from"./vue-vendor-BqZbbXHA.js";import{Ct as f}from"./icons-B2Vg-IOC.js";import{n as w,t as y}from"./useResponsiveDrawer-
|
|
1
|
+
import{Dn as e,i as s,t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{D as t,K as n,M as i,O as o,S as l,W as r,Z as c,b as u,et as d,g as m,mt as p,st as h,w as v}from"./vue-vendor-BqZbbXHA.js";import{Ct as f}from"./icons-B2Vg-IOC.js";import{n as w,t as y}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as g}from"./DrawerContent-ChXgZ1Xm.js";import{I as j,M as _,N as x,ct as b,pt as k}from"./index-BFInlZGI.js";import{m as C,n as I,o as D,t as S}from"./sessions-Cmy31slD.js";import{t as M}from"./SessionCard-DkJPy0TY.js";var N=e({default:()=>R}),O={key:0,class:"loading-container"},P={key:1,class:"sessions-list"},R=a({__name:"RecentSessionsDrawer",props:{visible:{type:Boolean,default:!1},channel:{type:String,default:"claude"}},emits:["update:visible"],setup(e,{emit:a}){const{drawerWidth:N}=y(720),R=e,z=a,K=h(!1),T=h([]),U=h(!1),W=u(()=>R.channel);async function A(){U.value=!0;try{const e=await D(10,R.channel);T.value=e.sessions}catch(e){x.error("加载失败: "+e.message)}finally{U.value=!1}}async function B(e){const s=e.alias||"";let a=s;const t=await new Promise(e=>{const t=_.create({title:"设置别名",content:()=>i(b,{defaultValue:s,placeholder:"请输入会话别名","onUpdate:value":e=>{a=e},onKeyup:s=>{"Enter"===s.key&&(t.destroy(),e(a.trim()))}}),positiveText:"确定",negativeText:"取消",onPositiveClick:()=>{e(a.trim())},onNegativeClick:()=>{e(null)}})});if(null!==t)try{t?(await C(e.sessionId,t),x.success("别名设置成功")):(await I(e.sessionId),x.success("别名已删除")),await A()}catch(n){x.error("操作失败: "+n.message)}}async function E(e){try{const{copyResult:s}=await S(e.projectName,e.sessionId,R.channel);if("manual"===s?.method)return void x.warning("自动复制失败,已弹出手动复制框");x.success("启动命令已复制到剪贴板")}catch(s){x.error("复制失败: "+s.message)}}return c(()=>R.visible,e=>{K.value=e,e&&A()},{immediate:!0}),c(K,e=>{z("update:visible",e)}),c(()=>R.channel,()=>{K.value&&A()}),(e,a)=>(r(),l(p(w),{show:K.value,"onUpdate:show":a[0]||(a[0]=e=>K.value=e),width:p(N),placement:"right","show-close":!0},{default:d(()=>[o(p(g),{title:"claude"===R.channel?"Claude 最新对话":"codex"===R.channel?"Codex 最新对话":"gemini"===R.channel?"Gemini 最新对话":"opencode"===R.channel?"OpenCode 最新对话":"omp"===R.channel?"OMP 最新对话":"最新对话","native-scrollbar":!1,closable:""},{default:d(()=>[U.value?(r(),v("div",O,[o(p(j),{size:"medium"},{description:d(()=>[...a[1]||(a[1]=[t("加载中...",-1)])]),_:1})])):T.value.length>0?(r(),v("div",P,[(r(!0),v(m,null,n(T.value,e=>(r(),l(M,{key:e.sessionId,session:e,channel:W.value,"show-project":!0,"hide-fork":!0,"hide-delete":!0,onSetAlias:B,onLaunch:E},null,8,["session","channel"]))),128))])):(r(),l(p(k),{key:2,description:"暂无最近使用的会话",style:{"margin-top":"60px"}},{icon:d(()=>[o(p(s),{size:"48"},{default:d(()=>[o(p(f))]),_:1})]),_:1}))]),_:1},8,["title"])]),_:1},8,["show","width"]))}},[["__scopeId","data-v-57a5527b"]]);export{N as n,R as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as s,s as e,t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as o,D as t,O as i,S as l,W as n,_t as r,b as d,et as u,mt as c,q as f,st as p,w as m,x as h}from"./vue-vendor-BqZbbXHA.js";import{E as _,G as y,Ot as k,Tt as v,a as g,nt as M,r as j}from"./icons-B2Vg-IOC.js";import{$ as z,dt as $}from"./index-
|
|
1
|
+
import{i as s,s as e,t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as o,D as t,O as i,S as l,W as n,_t as r,b as d,et as u,mt as c,q as f,st as p,w as m,x as h}from"./vue-vendor-BqZbbXHA.js";import{E as _,G as y,Ot as k,Tt as v,a as g,nt as M,r as j}from"./icons-B2Vg-IOC.js";import{$ as z,dt as $}from"./index-BFInlZGI.js";var B={class:"session-left"},w={class:"session-icon"},F={class:"session-info"},b={class:"session-header"},D={class:"session-title-row"},x={class:"session-title"},C={class:"session-meta"},P={class:"meta-item"},S={key:0,class:"session-message"},I={key:1,class:"session-path"},N={class:"session-actions"},O=a({__name:"SessionCard",props:{session:{type:Object,required:!0},channel:{type:String,default:"claude"},showProject:{type:Boolean,default:!1},hideFork:{type:Boolean,default:!1},hideDelete:{type:Boolean,default:!1}},emits:["set-alias","launch","fork","delete"],setup(a,{emit:O}){const q=a,G=p(!1),E=d(()=>q.session.alias?`${q.session.alias} (${q.session.sessionId.substring(0,8)})`:q.session.sessionId);function K(s){const e=new Date(s),a=new Date-e,o=Math.floor(a/6e4),t=Math.floor(a/36e5),i=Math.floor(a/864e5);return o<1?"刚刚":o<60?`${o}分钟前`:t<24?`${t}小时前`:i<7?`${i}天前`:e.toLocaleDateString("zh-CN")}function L(s){if(!s)return"0 B";const e=Math.floor(Math.log(s)/Math.log(1024));return Math.round(s/Math.pow(1024,e)*100)/100+" "+["B","KB","MB","GB"][e]}return(d,p)=>(n(),m("div",{class:"session-item",onMouseenter:p[4]||(p[4]=s=>G.value=!0),onMouseleave:p[5]||(p[5]=s=>G.value=!1)},[h("div",B,[h("div",w,[i(c(s),{size:"24",color:"#18a058"},{default:u(()=>[i(c(v))]),_:1})]),h("div",F,[h("div",b,[h("div",D,[a.showProject&&a.session.projectDisplayName?(n(),l(c($),{key:0,size:"small",type:"info",bordered:!1,style:{"margin-right":"8px"}},{default:u(()=>[t(r(a.session.projectDisplayName),1)]),_:1})):o("",!0),h("span",x,r(E.value),1),a.session.forkedFrom?(n(),l(c(z),{key:1,placement:"top"},{trigger:u(()=>[i(c($),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(y))]),_:1})]),default:u(()=>[p[6]||(p[6]=t(" Fork ",-1))]),_:1})]),default:u(()=>[h("span",null,"Fork 自 "+r(a.session.forkedFrom),1)]),_:1})):o("",!0)]),h("div",C,[h("span",P,[i(c(s),{size:"14"},{default:u(()=>[i(c(k))]),_:1}),t(" "+r(K(a.session.mtime)),1)]),i(c($),{size:"small",bordered:!1,type:"info"},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(M))]),_:1})]),default:u(()=>[t(" "+r(L(a.session.size)),1)]),_:1}),a.session.gitBranch?(n(),l(c($),{key:0,size:"small",bordered:!1,type:"success"},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(y))]),_:1})]),default:u(()=>[t(" "+r(a.session.gitBranch),1)]),_:1})):o("",!0)])]),a.session.firstMessage?(n(),m("div",S,r(a.session.firstMessage),1)):o("",!0),a.showProject&&a.session.projectFullPath?(n(),m("div",I," 路径: "+r(a.session.projectFullPath),1)):o("",!0)])]),h("div",N,[i(c(e),{size:"small",onClick:p[0]||(p[0]=s=>d.$emit("set-alias",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(_))]),_:1})]),default:u(()=>[p[7]||(p[7]=t(" 别名 ",-1))]),_:1}),i(c(e),{type:"primary",size:"small",onClick:p[1]||(p[1]=s=>d.$emit("launch",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(g))]),_:1})]),default:u(()=>[p[8]||(p[8]=t(" 使用对话 ",-1))]),_:1}),a.hideFork?o("",!0):(n(),l(c(e),{key:0,size:"small",onClick:p[2]||(p[2]=s=>d.$emit("fork",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(y))]),_:1})]),default:u(()=>[p[9]||(p[9]=t(" Fork ",-1))]),_:1})),a.hideDelete?o("",!0):(n(),l(c(e),{key:1,size:"small",type:"error",onClick:p[3]||(p[3]=s=>d.$emit("delete",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(j))]),_:1})]),_:1})),f(d.$slots,"actions-extra",{},void 0,!0)])],32))}},[["__scopeId","data-v-32d1b310"]]);export{O as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,s as a,t as s}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as l,D as t,F as i,H as n,I as o,K as r,O as u,S as c,V as d,W as v,Z as p,_t as f,b as m,et as h,f as y,g,ht as k,i as _,m as w,mt as j,p as b,r as C,st as P,tt as I,w as x,x as z}from"./vue-vendor-BqZbbXHA.js";import{t as S}from"./vendors-D0c_0KLP.js";import{r as M}from"./platforms-CBkB45JP.js";import{G as N,Mt as $,Tt as F,_ as U,a as B,it as L,l as T,r as A,tt as O,u as D,x as E}from"./icons-B2Vg-IOC.js";import{t as q}from"./use-message-DoLM8C1C.js";import{S as H,l as K}from"./light-Cp0t7v32.js";import{c as W,s as R}from"./AssetPathField-Bd_nMFu3.js";import{t as V}from"./McpFormDrawer-BcTlgSpN.js";import{n as G,t as Z}from"./useResponsiveDrawer-jbmqZuJs.js";import{t as J}from"./DrawerContent-ChXgZ1Xm.js";import{t as Q}from"./headers-cf-QapUq.js";import{t as X}from"./SkillsPanel-DWE4pFGx.js";import{$ as Y,I as ee,K as ae,M as se,N as le,P as te,_ as ie,at as ne,ct as oe,dt as re,lt as ue,nt as ce,pt as de}from"./index-BMAUPq5K.js";import{c as ve,f as pe,t as fe}from"./sessions-Cmy31slD.js";import me from"./ChatHistoryDrawer-CwzJHyNP.js";import{t as he}from"./sessions-yC_oVVh8.js";import{i as ye,l as ge,n as ke,o as _e,r as we,t as je}from"./project-config-B2baPzYL.js";var be={class:"project-instruction-panel"},Ce={key:0,class:"unsupported-state"},Pe={class:"resource-path"},Ie={__name:"ProjectInstructionPanel",props:{projectPath:{type:String,required:!0},platform:{type:String,required:!0},instruction:{type:Object,default:()=>({supported:!1,path:null,exists:!1,content:""})}},emits:["updated"],setup(e,{emit:s}){const i=e,n=s,o=q(),r=H(),d=P(i.instruction.content||""),m=P(!1),y=P(!1);async function k(){m.value=!0;try{const e=await _e(i.projectPath,i.platform,d.value);d.value=e.content??d.value,n("updated",e),o.success("项目指令已保存")}catch(e){o.error(`保存项目指令失败:${e.message}`)}finally{m.value=!1}}function _(){r.warning({title:"删除项目指令",content:`确定删除 ${i.instruction.path} 吗?`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{y.value=!0;try{const e=await je(i.projectPath,i.platform);d.value="",n("updated",e),o.success("项目指令已删除")}catch(e){o.error(`删除项目指令失败:${e.message}`)}finally{y.value=!1}}})}return p(()=>i.instruction,e=>{d.value=e?.content||""},{deep:!0}),(s,i)=>(v(),x("div",be,[e.instruction?.supported?(v(),x(g,{key:1},[z("div",Pe,"目标文件:"+f(e.instruction.path),1),u(j(oe),{value:d.value,"onUpdate:value":i[0]||(i[0]=e=>d.value=e),type:"textarea",rows:16,placeholder:"输入项目指令",disabled:m.value},null,8,["value","disabled"]),u(j(ae),{justify:"end",class:"actions"},{default:h(()=>[e.instruction.exists?(v(),c(j(a),{key:0,"data-action":"delete-instruction",type:"error",secondary:"",loading:y.value,onClick:_},{default:h(()=>[...i[1]||(i[1]=[t(" 删除文件 ",-1)])]),_:1},8,["loading"])):l("",!0),u(j(a),{"data-action":"save-instruction",type:"primary",loading:m.value,onClick:k},{default:h(()=>[...i[2]||(i[2]=[t(" 保存 ",-1)])]),_:1},8,["loading"])]),_:1}),u(j(te),{depth:"3",class:"hint"},{default:h(()=>[...i[3]||(i[3]=[t(" 写入项目原生文件;修改后通常需要重新启动对应 CLI。 ",-1)])]),_:1})],64)):(v(),x("div",Ce," 当前平台不提供项目指令文件 "))]))}},xe=s(Ie,[["__scopeId","data-v-f2f46409"]]),ze={class:"project-mcp-panel"},Se={class:"panel-toolbar"},Me={class:"resource-path"},Ne={key:2,class:"server-list"},$e={class:"server-info"},Fe={class:"server-title"},Ue={class:"server-spec"},Be={__name:"ProjectMcpPanel",props:{projectPath:{type:String,required:!0},platform:{type:String,required:!0},mcp:{type:Object,default:()=>({supported:!0,servers:[]})}},emits:["updated"],setup(e,{emit:s}){const i=e,n=s,o=q(),d=H(),y=P(!1),k=P(null),_=P(""),w=P(i.mcp),b=m(()=>w.value||i.mcp||{servers:[]}),C=m(()=>Array.isArray(b.value?.servers)?b.value.servers:[]),I=m(()=>C.value.some(e=>{const a=e.server||{};return Object.keys(a.env||{}).length>0||Object.keys(a.headers||{}).length>0}));function S(e){const a=e.server||{};return"stdio"===a.type?`${a.command||""} ${(a.args||[]).join(" ")}`.trim():a.url||a.type||"MCP"}function M(){k.value=null,y.value=!0}async function N(){y.value=!1,k.value=null,await $(),n("updated")}async function $(){const e=await ye(i.projectPath,i.platform);w.value=e}return p(()=>i.mcp,e=>{w.value=e},{deep:!0}),p([()=>i.projectPath,()=>i.platform],()=>{i.projectPath&&i.platform&&$().catch(e=>o.error(`加载项目 MCP 失败:${e.message}`))}),(s,p)=>(v(),x("div",ze,[z("div",Se,[z("span",Me,"目标文件:"+f(b.value?.path||"当前平台未声明"),1),u(j(a),{size:"small",type:"primary",onClick:M},{default:h(()=>[...p[1]||(p[1]=[t(" 添加 MCP ",-1)])]),_:1})]),I.value?(v(),c(j(ue),{key:0,type:"warning",bordered:!1,style:{"margin-bottom":"12px"}},{default:h(()=>[...p[2]||(p[2]=[t(" 项目 MCP 配置中的静态密钥可能随项目进入 Git,请优先使用环境变量引用。 ",-1)])]),_:1})):l("",!0),0===C.value.length?(v(),c(j(de),{key:1,description:"暂无项目 MCP 服务器"})):(v(),x("div",Ne,[(v(!0),x(g,null,r(C.value,e=>(v(),x("div",{key:e.id,class:"server-row"},[z("div",$e,[z("div",Fe,f(e.id),1),z("div",Ue,f(S(e)),1)]),u(j(ae),{size:"small"},{default:h(()=>[u(j(a),{size:"tiny",loading:_.value===e.id,onClick:a=>async function(e){_.value=e.id;try{const a=await ge(i.projectPath,i.platform,e.id);a.success?o.success(`${e.id} 连接成功`):o.error(a.message||`${e.id} 连接失败`)}catch(a){o.error(`测试失败:${a.message}`)}finally{_.value=""}}(e)},{default:h(()=>[...p[3]||(p[3]=[t("测试",-1)])]),_:1},8,["loading","onClick"]),u(j(a),{size:"tiny",disabled:e.external,onClick:a=>function(e){k.value={id:e.id,...e},y.value=!0}(e)},{default:h(()=>[...p[4]||(p[4]=[t("编辑",-1)])]),_:1},8,["disabled","onClick"]),u(j(a),{size:"tiny",type:"error",secondary:"",disabled:e.external,onClick:a=>function(e){d.warning({title:"移除项目 MCP",content:`确定从当前项目移除 ${e.id} 吗?用户级配置不会被删除。`,positiveText:"移除",negativeText:"取消",onPositiveClick:async()=>{try{await ke(i.projectPath,i.platform,e.id),await $(),n("updated"),o.success("项目 MCP 已移除")}catch(a){o.error(`移除失败:${a.message}`)}}})}(e)},{default:h(()=>[...p[5]||(p[5]=[t("移除",-1)])]),_:1},8,["disabled","onClick"])]),_:2},1024)]))),128))])),u(V,{visible:y.value,"onUpdate:visible":p[0]||(p[0]=e=>y.value=e),"editing-server":k.value,"existing-ids":C.value.map(e=>e.id),scope:"project","project-path":e.projectPath,platform:e.platform,onSaved:N},null,8,["visible","editing-server","existing-ids","project-path","platform"])]))}},Le=s(Be,[["__scopeId","data-v-1ebbb765"]]),Te={class:"project-config-content"},Ae={class:"project-config-header"},Oe={key:0,class:"unsupported-state"},De={key:0,class:"unsupported-state"},Ee=s({__name:"ProjectConfigDrawer",props:{show:{type:Boolean,default:!1},projectPath:{type:String,default:""},platform:{type:String,default:"claude"}},emits:["update:show"],setup(e,{emit:a}){const s=e,l=a,{drawerWidth:i}=Z(760),n=m({get:()=>s.show,set:e=>l("update:show",e)}),o=[{label:"Claude",value:"claude"},{label:"Codex",value:"codex"},{label:"Gemini",value:"gemini"},{label:"OpenCode",value:"opencode"},{label:"OMP",value:"omp"}],r=P(s.platform||"claude"),y=P("instruction"),g=P(null),k=P(!1),_=P(0);async function w(){if(!s.projectPath||!r.value)return;const e=++_.value;k.value=!0;try{const a=await we(s.projectPath,r.value);if(e!==_.value)return;g.value=a}finally{e===_.value&&(k.value=!1)}}return p(n,e=>{e?(r.value=s.platform||"claude",y.value="instruction",w()):_.value+=1}),p([()=>s.projectPath,()=>s.platform,r],([e,a],s)=>{n.value&&e&&a&&(a===s?.[1]&&e===s?.[0]||w())}),d(()=>{n.value&&w()}),(a,s)=>(v(),c(j(G),{show:n.value,"onUpdate:show":s[2]||(s[2]=e=>n.value=e),width:j(i),placement:"right","show-mask":!0},{default:h(()=>[u(j(J),{title:"项目配置",closable:"","native-scrollbar":!1},{default:h(()=>[z("div",Te,[z("div",Ae,[z("div",null,[s[3]||(s[3]=z("div",{class:"project-config-title"},"当前项目",-1)),u(j(te),{depth:"3",class:"project-path"},{default:h(()=>[t(f(e.projectPath),1)]),_:1})]),u(j(ce),{value:r.value,"onUpdate:value":s[0]||(s[0]=e=>r.value=e),size:"small",options:o,disabled:k.value,style:{width:"130px"}},null,8,["value","disabled"])]),u(j(ee),{show:k.value},{default:h(()=>[u(j(R),{value:y.value,"onUpdate:value":s[1]||(s[1]=e=>y.value=e),type:"line",animated:""},{default:h(()=>[u(j(W),{name:"instruction",tab:"项目指令"},{default:h(()=>[u(xe,{"project-path":e.projectPath,platform:r.value,instruction:g.value?.instruction,onUpdated:w},null,8,["project-path","platform","instruction"])]),_:1}),u(j(W),{name:"skills",tab:"Skills"},{default:h(()=>[!1===g.value?.capabilities?.skills?(v(),x("div",Oe," 当前平台不提供项目 Skills ")):(v(),c(X,{key:1,platform:r.value,"project-path":e.projectPath,scope:"project","in-drawer":"","drawer-visible":n.value},null,8,["platform","project-path","drawer-visible"]))]),_:1}),u(j(W),{name:"mcp",tab:"MCP"},{default:h(()=>[!1===g.value?.capabilities?.mcp?(v(),x("div",De," 当前平台不提供项目 MCP ")):(v(),c(Le,{key:1,"project-path":e.projectPath,platform:r.value,mcp:g.value?.mcp,onUpdated:w},null,8,["project-path","platform","mcp"]))]),_:1})]),_:1},8,["value"])]),_:1},8,["show"])])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-e9a405fe"]]),qe={class:"session-list-container"},He={class:"header"},Ke={class:"title-bar"},We={class:"title-section"},Re={class:"title-with-count"},Ve={class:"header-actions"},Ge={key:0,class:"loading-container"},Ze={key:1,class:"loading-container compact"},Je=["onMouseenter","onClick"],Qe={key:0,class:"drag-handle"},Xe={class:"session-left"},Ye={class:"session-icon"},ea={class:"session-info"},aa={class:"session-header"},sa={class:"session-title-row"},la={class:"session-title"},ta={class:"session-meta"},ia={class:"session-right"},na={class:"session-tags-area"},oa={key:0,class:"session-actions"},ra={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},ua={class:"search-result-header"},ca={class:"search-result-title"},da="__full__",va=s({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(s){const q=s,H=_(),W=C(),R=he(),{addFavorite:V,removeFavorite:G,isFavorite:Z}=ie(),J=m(()=>M(W)),X=P(q.projectName),ye=m(()=>X.value||q.projectName),ge=P(""),ke=P(!1),_e=P(null),we=P(""),je=P(null),be=P([]),Ce=P(null),Pe=P(!1),Ie=P(!1),xe=P(null),ze=P(!1),Se=P(!1),Me=P([]),Ne=P(!1),$e=P(!1),Fe=P(null),Ue=P(""),Be=P(da),Le=P(!1),Te=P(!1),Ae=P([]),Oe=P(!1),De=P(""),va=P(""),pa=P(null),fa={group:{name:`${J.value}-sessions`,pull:!1,put:!1},forceFallback:!0,fallbackOnBody:!1,fallbackTolerance:4,scroll:!0};function ma(e){return"string"==typeof e&&(e.startsWith("/")||/^[A-Za-z]:[\\/]/.test(e)||e.startsWith("\\\\"))}const ha=m(()=>{const e=ye.value;return R.projects.find(a=>a.name===e)||R.projects.find(e=>e.displayName===q.projectName||e.fullPath===q.projectName||e.path===q.projectName)||null}),ya=m(()=>[R.currentProjectInfo?.fullPath,R.currentProjectInfo?.path,ha.value?.fullPath,ha.value?.path].find(ma)||""),ga=m(()=>R.currentProjectInfo?.displayName||ha.value?.displayName||q.projectName),ka=m(()=>ya.value||R.currentProjectInfo?.fullPath||ha.value?.fullPath||ha.value?.path||ye.value),_a=m(()=>new Set(Me.value)),wa=m(()=>Me.value.length),ja=m(()=>be.value.length>0&&be.value.every(e=>_a.value.has(e.sessionId))),ba=m(()=>wa.value>0&&!ja.value);async function Ca(){R.projects.length||await R.fetchProjects();const e=R.projects.find(e=>e.name===q.projectName);if(e)return X.value=e.name,e.name;const a=R.projects.find(e=>e.displayName===q.projectName||e.fullPath===q.projectName||e.path===q.projectName);return a?(X.value=a.name,a.name!==q.projectName&&await H.replace({name:"cli-sessions",params:{platform:J.value,projectName:a.name}}),a.name):(X.value=q.projectName,q.projectName)}p(()=>R.sessionsWithAlias,e=>{be.value=[...e];const a=new Set(e.map(e=>e.sessionId));Me.value=Me.value.filter(e=>a.has(e)),Se.value&&0===e.length&&Ma()},{immediate:!0});const Pa=m(()=>{if(!ge.value)return be.value;const e=ge.value.toLowerCase();return be.value.filter(a=>a.sessionId.toLowerCase().includes(e)||a.alias&&a.alias.toLowerCase().includes(e)||a.firstMessage&&a.firstMessage.toLowerCase().includes(e)||a.gitBranch&&a.gitBranch.toLowerCase().includes(e))});function Ia(){H.push({name:"cli-projects",params:{platform:J.value}})}async function xa(){if(ge.value){ze.value=!0;try{const e=await pe(ye.value,ge.value,35,J.value);Ce.value=e,Pe.value=!0}catch(e){le.error("搜索失败: "+e.message)}finally{ze.value=!1}}}async function za(){const e=be.value.map(e=>e.sessionId);await R.saveSessionOrder(e)}function Sa(){Se.value=!0,je.value=null}function Ma(){Se.value=!1,Me.value=[],je.value=null}function Na(e){return _a.value.has(e)}function $a(e,a=!Na(e)){const s=new Set(Me.value);a?s.add(e):s.delete(e),Me.value=Array.from(s)}function Fa(e){Me.value=e?be.value.map(e=>e.sessionId):[]}function Ua(e){Se.value?$a(e.sessionId):function(e){De.value=e.sessionId,va.value=e.alias||"",Oe.value=!0,o(()=>{pa.value?.open()})}(e)}async function Ba(){if(_e.value)try{const e=_e.value.sessionId;we.value?(await R.setAlias(e,we.value),le.success("别名设置成功")):(await R.deleteAlias(e),le.success("别名已删除")),ke.value=!1,_e.value=null,we.value=""}catch(e){le.error("操作失败: "+e.message)}}function La(){$e.value=!1,Fe.value=null,Ue.value="",Be.value=da,Ae.value=[],Le.value=!1,Te.value=!1}async function Ta(){if(Fe.value)try{Te.value=!0,await R.forkSession(Fe.value.sessionId,{afterUserMessageNumber:Be.value===da?null:Be.value,alias:Ue.value?.trim()||void 0}),le.success("Fork 成功!"),La()}catch(e){le.error("Fork 失败: "+e.message)}finally{Te.value=!1}}function Aa(e){le.error(e)}function Oa(e){const a=new Set((e||[]).filter(Boolean));0!==a.size&&(Me.value=Me.value.filter(e=>!a.has(e)),De.value&&a.has(De.value)&&(Oe.value=!1,De.value="",va.value=""))}async function Da(e){try{const{copyResult:a}=await fe(ye.value,e,J.value);if("manual"===a?.method)return void le.warning("自动复制失败,已弹出手动复制框");le.success("启动命令已复制到剪贴板")}catch(a){le.error("复制失败: "+a.message)}}function Ea(){if(0===wa.value)return void le.warning("请先选择要删除的会话");const e=[...Me.value];se.warning({title:"批量删除会话",content:`确定要删除选中的 ${e.length} 个会话吗?此操作不可恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{Ne.value=!0;try{const a=await R.deleteSessions(e);if(Oa(a.deletedSessionIds),0===a.failed.length)return le.success(`已删除 ${a.deletedSessionIds.length} 个会话`),void Ma();Me.value=a.failed.map(e=>e.sessionId),a.deletedSessionIds.length>0?le.warning(`已删除 ${a.deletedSessionIds.length} 个会话,${a.failed.length} 个删除失败`):le.error(`删除失败: ${a.failed[0].error.message}`)}finally{Ne.value=!1}}})}function qa(e){if(!e)return"0 B";const a=1024;return e<a?e+" B":e<a*a?(e/a).toFixed(1)+" KB":(e/a/a).toFixed(1)+" MB"}function Ha(e,a){if(!a||!e)return e;const s=new RegExp(`(${a})`,"gi");return e.replace(s,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function Ka(e,a=80){return e?e.length>a?e.substring(0,a)+"...":e:""}let Wa=0,Ra=!1;async function Va(){if("visible"!==document.visibilityState||Ra)return;const e=Date.now();if(!(e-Wa<3e4)){Ra=!0,Wa=e;try{const e=xe.value?.scrollTop||0,a=await Ca();await R.fetchSessions(a,{force:!0,silent:!0,fresh:!0}),await o(),xe.value&&(xe.value.scrollTop=e)}finally{Ra=!1}}}function Ga(){"visible"===document.visibilityState&&Va().catch(()=>{})}function Za(){Va().catch(()=>{})}return p([J,()=>q.projectName],([e])=>{Ie.value=!1,Ma(),R.setChannel(e),async function(e={}){const a=await Ca();await R.fetchSessions(a,e)}()},{immediate:!0}),d(()=>{document.addEventListener("visibilitychange",Ga),window.addEventListener("focus",Za)}),n(()=>{document.removeEventListener("visibilitychange",Ga),window.removeEventListener("focus",Za)}),(s,n)=>(v(),x("div",qe,[z("div",He,[z("div",Ke,[u(j(a),{size:"small",onClick:Ia,class:"back-button"},{icon:h(()=>[u(j(e),{size:"18"},{default:h(()=>[u(j($))]),_:1})]),_:1}),z("div",We,[z("div",Re,[u(j(Q),null,{default:h(()=>[t(f(ga.value),1)]),_:1}),u(j(te),{depth:"3",class:"session-count"},{default:h(()=>[t("("+f(j(R).sessions.length)+" 个对话)",1)]),_:1}),u(j(re),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:h(()=>[t(f(qa(j(R).totalSize)),1)]),_:1}),z("div",Ve,[Se.value?(v(),x(g,{key:0},[u(j(ne),{checked:ja.value,indeterminate:ba.value,disabled:0===be.value.length||Ne.value,"onUpdate:checked":Fa},{default:h(()=>[...n[14]||(n[14]=[t(" 全选 ",-1)])]),_:1},8,["checked","indeterminate","disabled"]),u(j(te),{depth:"3"},{default:h(()=>[t("已选 "+f(wa.value)+" 个",1)]),_:1}),u(j(a),{size:"small",type:"error",disabled:0===wa.value,loading:Ne.value,onClick:Ea},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[15]||(n[15]=t(" 删除 ",-1))]),_:1},8,["disabled","loading"]),u(j(a),{size:"small",disabled:Ne.value,onClick:Ma},{default:h(()=>[...n[16]||(n[16]=[t(" 完成 ",-1)])]),_:1},8,["disabled"])],64)):(v(),x(g,{key:1},[u(j(a),{size:"small",type:"error",secondary:"",onClick:Sa},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[17]||(n[17]=t(" 管理 ",-1))]),_:1}),u(j(a),{size:"small",type:"primary",secondary:"",disabled:!ya.value,onClick:n[0]||(n[0]=e=>Ie.value=!0)},{default:h(()=>[...n[18]||(n[18]=[t(" 项目配置 ",-1)])]),_:1},8,["disabled"])],64))])]),u(j(te),{depth:"3",class:"project-path"},{default:h(()=>[t(f(ka.value),1)]),_:1})]),u(j(oe),{value:ge.value,"onUpdate:value":n[1]||(n[1]=e=>ge.value=e),placeholder:"搜索会话...",clearable:"",class:"search-input",onKeyup:b(xa,["enter"]),disabled:ze.value},{prefix:h(()=>[u(j(e),null,{default:h(()=>[u(j(U))]),_:1})]),suffix:h(()=>[u(j(a),{text:"",onClick:xa,disabled:!ge.value||ze.value,loading:ze.value},{default:h(()=>[...n[19]||(n[19]=[t(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])])]),z("div",{class:"content",ref_key:"contentEl",ref:xe},[j(R).loading&&0===j(R).sessions.length&&!j(R).sessionsPending?(v(),x("div",Ge,[u(j(ee),{size:"large"},{description:h(()=>[...n[20]||(n[20]=[t(" 加载会话列表... ",-1)])]),_:1})])):j(R).sessionsPending?(v(),x("div",Ze,[u(j(ee),{size:"small"},{description:h(()=>[...n[21]||(n[21]=[t(" 正在生成会话列表... ",-1)])]),_:1})])):j(R).error&&0===j(R).sessions.length?(v(),c(j(ue),{key:2,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:h(()=>[t(f(j(R).error),1)]),_:1})):Pa.value.length>0?(v(),c(j(S),i({key:3,modelValue:be.value,"onUpdate:modelValue":n[4]||(n[4]=e=>be.value=e),"item-key":"sessionId",class:"sessions-list",handle:".drag-handle",disabled:Se.value||Ne.value},fa,{"ghost-class":"ghost","chosen-class":"chosen",animation:"200",onEnd:za}),{item:h(({element:s})=>[z("div",{class:k(["session-item",{"session-item-selected":Na(s.sessionId),"session-item-selection-mode":Se.value}]),onMouseenter:e=>je.value=s.sessionId,onMouseleave:n[3]||(n[3]=e=>je.value=null),onClick:e=>Ua(s)},[Se.value?(v(),x("div",{key:1,class:"selection-checkbox",onClick:n[2]||(n[2]=w(()=>{},["stop"]))},[u(j(ne),{checked:Na(s.sessionId),"onUpdate:checked":e=>$a(s.sessionId,e)},null,8,["checked","onUpdate:checked"])])):(v(),x("div",Qe,[u(j(e),{size:"16",color:"#999"},{default:h(()=>[u(j(E))]),_:1})])),z("div",Xe,[z("div",Ye,[u(j(e),{size:"24",color:"#18a058"},{default:h(()=>[u(j(F))]),_:1})]),z("div",ea,[z("div",aa,[z("div",sa,[z("span",la,f(s.alias?`${s.alias} (${s.sessionId.substring(0,8)})`:s.sessionId),1),s.forkedFrom?(v(),c(j(Y),{key:0,placement:"top"},{trigger:h(()=>[u(j(re),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[n[22]||(n[22]=t(" Fork ",-1))]),_:1})]),default:h(()=>[t(" Fork 自: "+f(s.forkedFrom),1)]),_:2},1024)):l("",!0)])]),z("div",ta,[u(j(te),{depth:"3"},{default:h(()=>{return[t(f((e=s.mtime,e?new Date(e).toLocaleString("zh-CN"):"")),1)];var e}),_:2},1024),u(j(te),{depth:"3"},{default:h(()=>[...n[23]||(n[23]=[t("•",-1)])]),_:1}),u(j(re),{size:"small",bordered:!1},{default:h(()=>[t(f(qa(s.size)),1)]),_:2},1024)]),s.firstMessage?(v(),c(j(te),{key:0,depth:"3",class:"session-message"},{default:h(()=>[t(f(Ka(s.firstMessage,80)),1)]),_:2},1024)):s.gitBranch||s.summary?l("",!0):(v(),c(j(te),{key:1,depth:"3",class:"session-message session-message-empty"},{default:h(()=>[...n[24]||(n[24]=[t(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),z("div",ia,[z("div",na,[s.gitBranch?(v(),c(j(re),{key:0,size:"small",type:"info",bordered:!1},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[t(" "+f(s.gitBranch),1)]),_:2},1024)):l("",!0)]),Se.value?l("",!0):(v(),x("div",oa,[u(j(ae),null,{default:h(()=>[I(u(j(a),{size:"small",type:"error",onClick:w(e=>{return a=s.sessionId,void se.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await R.deleteSession(a),Oa([a]),le.success("会话已删除")}catch(e){le.error("删除失败: "+e.message)}}});var a},["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[25]||(n[25]=t(" 删除 ",-1))]),_:1},8,["onClick"]),[[y,je.value===s.sessionId]]),u(j(a),{size:"small",onClick:w(e=>function(e){_e.value=e,we.value=e.alias||"",ke.value=!0}(s),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(L))]),_:1})]),default:h(()=>[n[26]||(n[26]=t(" 别名 ",-1))]),_:1},8,["onClick"]),u(j(a),{size:"small",type:j(Z)(J.value,ye.value,s.sessionId)?"warning":"default",onClick:w(e=>async function(e){const a=J.value,s=Z(a,ye.value,e.sessionId);try{if(s)await G(a,ye.value,e.sessionId),le.success("已取消收藏");else{const s={sessionId:e.sessionId,projectName:ye.value,projectDisplayName:ga.value,projectFullPath:ka.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await V(a,s),le.success("已添加到收藏")}}catch(l){le.error("操作失败: "+l.message)}}(s),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[j(Z)(J.value,ye.value,s.sessionId)?(v(),c(j(D),{key:0})):(v(),c(j(T),{key:1}))]),_:2},1024)]),default:h(()=>[t(" "+f(j(Z)(J.value,ye.value,s.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"!==J.value?(v(),c(j(a),{key:0,size:"small",onClick:w(e=>async function(e){if("opencode"!==J.value)try{const a=be.value.find(a=>a.sessionId===e);Fe.value=a||{sessionId:e},Ue.value="",Be.value=da,Ae.value=[{label:"完整会话末尾(保留全部消息)",value:da}],$e.value=!0,Le.value=!0;const s=await ve(ye.value,e,J.value),l=Array.isArray(s?.items)?s.items:[];Ae.value=[{label:"完整会话末尾(保留全部消息)",value:da},...l.map(e=>({label:`保留到第 ${e.userMessageNumber} 条用户消息这一轮 · ${e.preview}`,value:e.userMessageNumber}))]}catch(a){le.error("加载 Fork 位置失败: "+a.message),La()}finally{Le.value=!1}else le.warning("OpenCode 当前不支持该 Fork 操作")}(s.sessionId),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[n[27]||(n[27]=t(" Fork ",-1))]),_:1},8,["onClick"])):l("",!0),u(j(a),{size:"small",type:"primary",onClick:w(e=>Da(s.sessionId),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(B))]),_:1})]),default:h(()=>[n[28]||(n[28]=t(" 使用对话 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]))])],42,Je)]),_:1},16,["modelValue","disabled"])):(v(),c(j(de),{key:4,description:"没有找到会话",style:{"margin-top":"60px"}},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(O))]),_:1})]),_:1}))],512),u(j(K),{show:ke.value,"onUpdate:show":n[7]||(n[7]=e=>ke.value=e),preset:"dialog",title:"设置别名"},{action:h(()=>[u(j(ae),null,{default:h(()=>[u(j(a),{onClick:n[6]||(n[6]=e=>ke.value=!1)},{default:h(()=>[...n[29]||(n[29]=[t("取消",-1)])]),_:1}),u(j(a),{type:"primary",onClick:Ba},{default:h(()=>[...n[30]||(n[30]=[t("确定",-1)])]),_:1})]),_:1})]),default:h(()=>[u(j(oe),{value:we.value,"onUpdate:value":n[5]||(n[5]=e=>we.value=e),placeholder:"输入别名(留空删除)",onKeyup:b(Ba,["enter"])},null,8,["value"])]),_:1},8,["show"]),u(j(K),{show:$e.value,"onUpdate:show":n[10]||(n[10]=e=>$e.value=e),preset:"dialog",title:"Fork 对话"},{action:h(()=>[u(j(ae),null,{default:h(()=>[u(j(a),{disabled:Te.value,onClick:La},{default:h(()=>[...n[32]||(n[32]=[t("取消",-1)])]),_:1},8,["disabled"]),u(j(a),{type:"primary",loading:Te.value,onClick:Ta},{default:h(()=>[...n[33]||(n[33]=[t(" 确认 Fork ",-1)])]),_:1},8,["loading"])]),_:1})]),default:h(()=>[u(j(ae),{vertical:"",size:14},{default:h(()=>[u(j(te),{depth:"3"},{default:h(()=>[...n[31]||(n[31]=[t(" 可选择保留到第几条用户消息所在轮次;会包含这条消息后 AI 的完整输出。 ",-1)])]),_:1}),u(j(ce),{value:Be.value,"onUpdate:value":n[8]||(n[8]=e=>Be.value=e),options:Ae.value,loading:Le.value,clearable:"",placeholder:"选择保留到哪一轮(默认完整会话)"},null,8,["value","options","loading"]),u(j(oe),{value:Ue.value,"onUpdate:value":n[9]||(n[9]=e=>Ue.value=e),placeholder:"输入新会话别名(可选)",maxlength:"120"},null,8,["value"])]),_:1})]),_:1},8,["show"]),u(j(K),{show:Pe.value,"onUpdate:show":n[11]||(n[11]=e=>Pe.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:h(()=>[Ce.value?(v(),x("div",ra,[u(j(ue),{type:"info",style:{"margin-bottom":"16px"}},{default:h(()=>[t(' 关键词 "'+f(Ce.value.keyword)+'" 共找到 '+f(Ce.value.totalMatches)+" 处匹配 ",1)]),_:1}),(v(!0),x(g,null,r(Ce.value.sessions,s=>(v(),x("div",{key:s.sessionId,class:"search-result-item"},[z("div",ua,[z("div",ca,[u(j(te),{strong:""},{default:h(()=>[t(f(s.alias?`${s.alias} (${s.sessionId.substring(0,8)})`:s.sessionId.substring(0,8)),1)]),_:2},1024),u(j(re),{size:"small",bordered:!1},{default:h(()=>[t(f(s.matchCount)+" 个匹配",1)]),_:2},1024)]),u(j(a),{size:"small",type:"primary",onClick:e=>Da(s.sessionId)},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(B))]),_:1})]),default:h(()=>[n[34]||(n[34]=t(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(v(!0),x(g,null,r(s.matches,(e,a)=>(v(),x("div",{key:a,class:"search-match"},[u(j(re),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:h(()=>[t(f("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),u(j(te),{depth:"3",class:"search-match-text",innerHTML:Ha(e.context,Ce.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Ce.value.sessions.length?(v(),c(j(de),{key:0,description:"没有找到匹配的内容"})):l("",!0)])):l("",!0)]),_:1},8,["show"]),De.value?(v(),c(me,{key:0,ref_key:"chatHistoryRef",ref:pa,show:Oe.value,"onUpdate:show":n[12]||(n[12]=e=>Oe.value=e),"project-name":ye.value,"session-id":De.value,"session-alias":va.value,channel:J.value,onError:Aa},null,8,["show","project-name","session-id","session-alias","channel"])):l("",!0),u(Ee,{show:Ie.value,"onUpdate:show":n[13]||(n[13]=e=>Ie.value=e),"project-path":ya.value,platform:J.value},null,8,["show","project-path","platform"])]))}},[["__scopeId","data-v-ab6739c9"]]);export{va as default};
|
|
1
|
+
import{i as e,s as a,t as s}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as l,D as t,F as i,H as n,I as o,K as r,O as u,S as c,V as d,W as v,Z as p,_t as f,b as m,et as h,f as y,g,ht as k,i as _,m as w,mt as j,p as b,r as C,st as P,tt as I,w as x,x as z}from"./vue-vendor-BqZbbXHA.js";import{t as S}from"./vendors-D0c_0KLP.js";import{r as M}from"./platforms-CBkB45JP.js";import{G as N,Mt as $,Tt as F,_ as U,a as B,it as L,l as T,r as A,tt as O,u as D,x as E}from"./icons-B2Vg-IOC.js";import{t as q}from"./use-message-DoLM8C1C.js";import{S as H,l as K}from"./light-Cp0t7v32.js";import{c as W,s as R}from"./AssetPathField-BZI9NvEr.js";import{t as V}from"./McpFormDrawer-DPMnyt5L.js";import{n as G,t as Z}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as J}from"./DrawerContent-ChXgZ1Xm.js";import{t as Q}from"./headers-cf-QapUq.js";import{t as X}from"./SkillsPanel--lLEts9y.js";import{$ as Y,I as ee,K as ae,M as se,N as le,P as te,_ as ie,at as ne,ct as oe,dt as re,lt as ue,nt as ce,pt as de}from"./index-BFInlZGI.js";import{c as ve,f as pe,t as fe}from"./sessions-Cmy31slD.js";import me from"./ChatHistoryDrawer-Ccl4rhdz.js";import{t as he}from"./sessions-yC_oVVh8.js";import{i as ye,l as ge,n as ke,o as _e,r as we,t as je}from"./project-config-B2baPzYL.js";var be={class:"project-instruction-panel"},Ce={key:0,class:"unsupported-state"},Pe={class:"resource-path"},Ie={__name:"ProjectInstructionPanel",props:{projectPath:{type:String,required:!0},platform:{type:String,required:!0},instruction:{type:Object,default:()=>({supported:!1,path:null,exists:!1,content:""})}},emits:["updated"],setup(e,{emit:s}){const i=e,n=s,o=q(),r=H(),d=P(i.instruction.content||""),m=P(!1),y=P(!1);async function k(){m.value=!0;try{const e=await _e(i.projectPath,i.platform,d.value);d.value=e.content??d.value,n("updated",e),o.success("项目指令已保存")}catch(e){o.error(`保存项目指令失败:${e.message}`)}finally{m.value=!1}}function _(){r.warning({title:"删除项目指令",content:`确定删除 ${i.instruction.path} 吗?`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{y.value=!0;try{const e=await je(i.projectPath,i.platform);d.value="",n("updated",e),o.success("项目指令已删除")}catch(e){o.error(`删除项目指令失败:${e.message}`)}finally{y.value=!1}}})}return p(()=>i.instruction,e=>{d.value=e?.content||""},{deep:!0}),(s,i)=>(v(),x("div",be,[e.instruction?.supported?(v(),x(g,{key:1},[z("div",Pe,"目标文件:"+f(e.instruction.path),1),u(j(oe),{value:d.value,"onUpdate:value":i[0]||(i[0]=e=>d.value=e),type:"textarea",rows:16,placeholder:"输入项目指令",disabled:m.value},null,8,["value","disabled"]),u(j(ae),{justify:"end",class:"actions"},{default:h(()=>[e.instruction.exists?(v(),c(j(a),{key:0,"data-action":"delete-instruction",type:"error",secondary:"",loading:y.value,onClick:_},{default:h(()=>[...i[1]||(i[1]=[t(" 删除文件 ",-1)])]),_:1},8,["loading"])):l("",!0),u(j(a),{"data-action":"save-instruction",type:"primary",loading:m.value,onClick:k},{default:h(()=>[...i[2]||(i[2]=[t(" 保存 ",-1)])]),_:1},8,["loading"])]),_:1}),u(j(te),{depth:"3",class:"hint"},{default:h(()=>[...i[3]||(i[3]=[t(" 写入项目原生文件;修改后通常需要重新启动对应 CLI。 ",-1)])]),_:1})],64)):(v(),x("div",Ce," 当前平台不提供项目指令文件 "))]))}},xe=s(Ie,[["__scopeId","data-v-f2f46409"]]),ze={class:"project-mcp-panel"},Se={class:"panel-toolbar"},Me={class:"resource-path"},Ne={key:2,class:"server-list"},$e={class:"server-info"},Fe={class:"server-title"},Ue={class:"server-spec"},Be={__name:"ProjectMcpPanel",props:{projectPath:{type:String,required:!0},platform:{type:String,required:!0},mcp:{type:Object,default:()=>({supported:!0,servers:[]})}},emits:["updated"],setup(e,{emit:s}){const i=e,n=s,o=q(),d=H(),y=P(!1),k=P(null),_=P(""),w=P(i.mcp),b=m(()=>w.value||i.mcp||{servers:[]}),C=m(()=>Array.isArray(b.value?.servers)?b.value.servers:[]),I=m(()=>C.value.some(e=>{const a=e.server||{};return Object.keys(a.env||{}).length>0||Object.keys(a.headers||{}).length>0}));function S(e){const a=e.server||{};return"stdio"===a.type?`${a.command||""} ${(a.args||[]).join(" ")}`.trim():a.url||a.type||"MCP"}function M(){k.value=null,y.value=!0}async function N(){y.value=!1,k.value=null,await $(),n("updated")}async function $(){const e=await ye(i.projectPath,i.platform);w.value=e}return p(()=>i.mcp,e=>{w.value=e},{deep:!0}),p([()=>i.projectPath,()=>i.platform],()=>{i.projectPath&&i.platform&&$().catch(e=>o.error(`加载项目 MCP 失败:${e.message}`))}),(s,p)=>(v(),x("div",ze,[z("div",Se,[z("span",Me,"目标文件:"+f(b.value?.path||"当前平台未声明"),1),u(j(a),{size:"small",type:"primary",onClick:M},{default:h(()=>[...p[1]||(p[1]=[t(" 添加 MCP ",-1)])]),_:1})]),I.value?(v(),c(j(ue),{key:0,type:"warning",bordered:!1,style:{"margin-bottom":"12px"}},{default:h(()=>[...p[2]||(p[2]=[t(" 项目 MCP 配置中的静态密钥可能随项目进入 Git,请优先使用环境变量引用。 ",-1)])]),_:1})):l("",!0),0===C.value.length?(v(),c(j(de),{key:1,description:"暂无项目 MCP 服务器"})):(v(),x("div",Ne,[(v(!0),x(g,null,r(C.value,e=>(v(),x("div",{key:e.id,class:"server-row"},[z("div",$e,[z("div",Fe,f(e.id),1),z("div",Ue,f(S(e)),1)]),u(j(ae),{size:"small"},{default:h(()=>[u(j(a),{size:"tiny",loading:_.value===e.id,onClick:a=>async function(e){_.value=e.id;try{const a=await ge(i.projectPath,i.platform,e.id);a.success?o.success(`${e.id} 连接成功`):o.error(a.message||`${e.id} 连接失败`)}catch(a){o.error(`测试失败:${a.message}`)}finally{_.value=""}}(e)},{default:h(()=>[...p[3]||(p[3]=[t("测试",-1)])]),_:1},8,["loading","onClick"]),u(j(a),{size:"tiny",disabled:e.external,onClick:a=>function(e){k.value={id:e.id,...e},y.value=!0}(e)},{default:h(()=>[...p[4]||(p[4]=[t("编辑",-1)])]),_:1},8,["disabled","onClick"]),u(j(a),{size:"tiny",type:"error",secondary:"",disabled:e.external,onClick:a=>function(e){d.warning({title:"移除项目 MCP",content:`确定从当前项目移除 ${e.id} 吗?用户级配置不会被删除。`,positiveText:"移除",negativeText:"取消",onPositiveClick:async()=>{try{await ke(i.projectPath,i.platform,e.id),await $(),n("updated"),o.success("项目 MCP 已移除")}catch(a){o.error(`移除失败:${a.message}`)}}})}(e)},{default:h(()=>[...p[5]||(p[5]=[t("移除",-1)])]),_:1},8,["disabled","onClick"])]),_:2},1024)]))),128))])),u(V,{visible:y.value,"onUpdate:visible":p[0]||(p[0]=e=>y.value=e),"editing-server":k.value,"existing-ids":C.value.map(e=>e.id),scope:"project","project-path":e.projectPath,platform:e.platform,onSaved:N},null,8,["visible","editing-server","existing-ids","project-path","platform"])]))}},Le=s(Be,[["__scopeId","data-v-1ebbb765"]]),Te={class:"project-config-content"},Ae={class:"project-config-header"},Oe={key:0,class:"unsupported-state"},De={key:0,class:"unsupported-state"},Ee=s({__name:"ProjectConfigDrawer",props:{show:{type:Boolean,default:!1},projectPath:{type:String,default:""},platform:{type:String,default:"claude"}},emits:["update:show"],setup(e,{emit:a}){const s=e,l=a,{drawerWidth:i}=Z(760),n=m({get:()=>s.show,set:e=>l("update:show",e)}),o=[{label:"Claude",value:"claude"},{label:"Codex",value:"codex"},{label:"Gemini",value:"gemini"},{label:"OpenCode",value:"opencode"},{label:"OMP",value:"omp"}],r=P(s.platform||"claude"),y=P("instruction"),g=P(null),k=P(!1),_=P(0);async function w(){if(!s.projectPath||!r.value)return;const e=++_.value;k.value=!0;try{const a=await we(s.projectPath,r.value);if(e!==_.value)return;g.value=a}finally{e===_.value&&(k.value=!1)}}return p(n,e=>{e?(r.value=s.platform||"claude",y.value="instruction",w()):_.value+=1}),p([()=>s.projectPath,()=>s.platform,r],([e,a],s)=>{n.value&&e&&a&&(a===s?.[1]&&e===s?.[0]||w())}),d(()=>{n.value&&w()}),(a,s)=>(v(),c(j(G),{show:n.value,"onUpdate:show":s[2]||(s[2]=e=>n.value=e),width:j(i),placement:"right","show-mask":!0},{default:h(()=>[u(j(J),{title:"项目配置",closable:"","native-scrollbar":!1},{default:h(()=>[z("div",Te,[z("div",Ae,[z("div",null,[s[3]||(s[3]=z("div",{class:"project-config-title"},"当前项目",-1)),u(j(te),{depth:"3",class:"project-path"},{default:h(()=>[t(f(e.projectPath),1)]),_:1})]),u(j(ce),{value:r.value,"onUpdate:value":s[0]||(s[0]=e=>r.value=e),size:"small",options:o,disabled:k.value,style:{width:"130px"}},null,8,["value","disabled"])]),u(j(ee),{show:k.value},{default:h(()=>[u(j(R),{value:y.value,"onUpdate:value":s[1]||(s[1]=e=>y.value=e),type:"line",animated:""},{default:h(()=>[u(j(W),{name:"instruction",tab:"项目指令"},{default:h(()=>[u(xe,{"project-path":e.projectPath,platform:r.value,instruction:g.value?.instruction,onUpdated:w},null,8,["project-path","platform","instruction"])]),_:1}),u(j(W),{name:"skills",tab:"Skills"},{default:h(()=>[!1===g.value?.capabilities?.skills?(v(),x("div",Oe," 当前平台不提供项目 Skills ")):(v(),c(X,{key:1,platform:r.value,"project-path":e.projectPath,scope:"project","in-drawer":"","drawer-visible":n.value},null,8,["platform","project-path","drawer-visible"]))]),_:1}),u(j(W),{name:"mcp",tab:"MCP"},{default:h(()=>[!1===g.value?.capabilities?.mcp?(v(),x("div",De," 当前平台不提供项目 MCP ")):(v(),c(Le,{key:1,"project-path":e.projectPath,platform:r.value,mcp:g.value?.mcp,onUpdated:w},null,8,["project-path","platform","mcp"]))]),_:1})]),_:1},8,["value"])]),_:1},8,["show"])])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-e9a405fe"]]),qe={class:"session-list-container"},He={class:"header"},Ke={class:"title-bar"},We={class:"title-section"},Re={class:"title-with-count"},Ve={class:"header-actions"},Ge={key:0,class:"loading-container"},Ze={key:1,class:"loading-container compact"},Je=["onMouseenter","onClick"],Qe={key:0,class:"drag-handle"},Xe={class:"session-left"},Ye={class:"session-icon"},ea={class:"session-info"},aa={class:"session-header"},sa={class:"session-title-row"},la={class:"session-title"},ta={class:"session-meta"},ia={class:"session-right"},na={class:"session-tags-area"},oa={key:0,class:"session-actions"},ra={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},ua={class:"search-result-header"},ca={class:"search-result-title"},da="__full__",va=s({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(s){const q=s,H=_(),W=C(),R=he(),{addFavorite:V,removeFavorite:G,isFavorite:Z}=ie(),J=m(()=>M(W)),X=P(q.projectName),ye=m(()=>X.value||q.projectName),ge=P(""),ke=P(!1),_e=P(null),we=P(""),je=P(null),be=P([]),Ce=P(null),Pe=P(!1),Ie=P(!1),xe=P(null),ze=P(!1),Se=P(!1),Me=P([]),Ne=P(!1),$e=P(!1),Fe=P(null),Ue=P(""),Be=P(da),Le=P(!1),Te=P(!1),Ae=P([]),Oe=P(!1),De=P(""),va=P(""),pa=P(null),fa={group:{name:`${J.value}-sessions`,pull:!1,put:!1},forceFallback:!0,fallbackOnBody:!1,fallbackTolerance:4,scroll:!0};function ma(e){return"string"==typeof e&&(e.startsWith("/")||/^[A-Za-z]:[\\/]/.test(e)||e.startsWith("\\\\"))}const ha=m(()=>{const e=ye.value;return R.projects.find(a=>a.name===e)||R.projects.find(e=>e.displayName===q.projectName||e.fullPath===q.projectName||e.path===q.projectName)||null}),ya=m(()=>[R.currentProjectInfo?.fullPath,R.currentProjectInfo?.path,ha.value?.fullPath,ha.value?.path].find(ma)||""),ga=m(()=>R.currentProjectInfo?.displayName||ha.value?.displayName||q.projectName),ka=m(()=>ya.value||R.currentProjectInfo?.fullPath||ha.value?.fullPath||ha.value?.path||ye.value),_a=m(()=>new Set(Me.value)),wa=m(()=>Me.value.length),ja=m(()=>be.value.length>0&&be.value.every(e=>_a.value.has(e.sessionId))),ba=m(()=>wa.value>0&&!ja.value);async function Ca(){R.projects.length||await R.fetchProjects();const e=R.projects.find(e=>e.name===q.projectName);if(e)return X.value=e.name,e.name;const a=R.projects.find(e=>e.displayName===q.projectName||e.fullPath===q.projectName||e.path===q.projectName);return a?(X.value=a.name,a.name!==q.projectName&&await H.replace({name:"cli-sessions",params:{platform:J.value,projectName:a.name}}),a.name):(X.value=q.projectName,q.projectName)}p(()=>R.sessionsWithAlias,e=>{be.value=[...e];const a=new Set(e.map(e=>e.sessionId));Me.value=Me.value.filter(e=>a.has(e)),Se.value&&0===e.length&&Ma()},{immediate:!0});const Pa=m(()=>{if(!ge.value)return be.value;const e=ge.value.toLowerCase();return be.value.filter(a=>a.sessionId.toLowerCase().includes(e)||a.alias&&a.alias.toLowerCase().includes(e)||a.firstMessage&&a.firstMessage.toLowerCase().includes(e)||a.gitBranch&&a.gitBranch.toLowerCase().includes(e))});function Ia(){H.push({name:"cli-projects",params:{platform:J.value}})}async function xa(){if(ge.value){ze.value=!0;try{const e=await pe(ye.value,ge.value,35,J.value);Ce.value=e,Pe.value=!0}catch(e){le.error("搜索失败: "+e.message)}finally{ze.value=!1}}}async function za(){const e=be.value.map(e=>e.sessionId);await R.saveSessionOrder(e)}function Sa(){Se.value=!0,je.value=null}function Ma(){Se.value=!1,Me.value=[],je.value=null}function Na(e){return _a.value.has(e)}function $a(e,a=!Na(e)){const s=new Set(Me.value);a?s.add(e):s.delete(e),Me.value=Array.from(s)}function Fa(e){Me.value=e?be.value.map(e=>e.sessionId):[]}function Ua(e){Se.value?$a(e.sessionId):function(e){De.value=e.sessionId,va.value=e.alias||"",Oe.value=!0,o(()=>{pa.value?.open()})}(e)}async function Ba(){if(_e.value)try{const e=_e.value.sessionId;we.value?(await R.setAlias(e,we.value),le.success("别名设置成功")):(await R.deleteAlias(e),le.success("别名已删除")),ke.value=!1,_e.value=null,we.value=""}catch(e){le.error("操作失败: "+e.message)}}function La(){$e.value=!1,Fe.value=null,Ue.value="",Be.value=da,Ae.value=[],Le.value=!1,Te.value=!1}async function Ta(){if(Fe.value)try{Te.value=!0,await R.forkSession(Fe.value.sessionId,{afterUserMessageNumber:Be.value===da?null:Be.value,alias:Ue.value?.trim()||void 0}),le.success("Fork 成功!"),La()}catch(e){le.error("Fork 失败: "+e.message)}finally{Te.value=!1}}function Aa(e){le.error(e)}function Oa(e){const a=new Set((e||[]).filter(Boolean));0!==a.size&&(Me.value=Me.value.filter(e=>!a.has(e)),De.value&&a.has(De.value)&&(Oe.value=!1,De.value="",va.value=""))}async function Da(e){try{const{copyResult:a}=await fe(ye.value,e,J.value);if("manual"===a?.method)return void le.warning("自动复制失败,已弹出手动复制框");le.success("启动命令已复制到剪贴板")}catch(a){le.error("复制失败: "+a.message)}}function Ea(){if(0===wa.value)return void le.warning("请先选择要删除的会话");const e=[...Me.value];se.warning({title:"批量删除会话",content:`确定要删除选中的 ${e.length} 个会话吗?此操作不可恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{Ne.value=!0;try{const a=await R.deleteSessions(e);if(Oa(a.deletedSessionIds),0===a.failed.length)return le.success(`已删除 ${a.deletedSessionIds.length} 个会话`),void Ma();Me.value=a.failed.map(e=>e.sessionId),a.deletedSessionIds.length>0?le.warning(`已删除 ${a.deletedSessionIds.length} 个会话,${a.failed.length} 个删除失败`):le.error(`删除失败: ${a.failed[0].error.message}`)}finally{Ne.value=!1}}})}function qa(e){if(!e)return"0 B";const a=1024;return e<a?e+" B":e<a*a?(e/a).toFixed(1)+" KB":(e/a/a).toFixed(1)+" MB"}function Ha(e,a){if(!a||!e)return e;const s=new RegExp(`(${a})`,"gi");return e.replace(s,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function Ka(e,a=80){return e?e.length>a?e.substring(0,a)+"...":e:""}let Wa=0,Ra=!1;async function Va(){if("visible"!==document.visibilityState||Ra)return;const e=Date.now();if(!(e-Wa<3e4)){Ra=!0,Wa=e;try{const e=xe.value?.scrollTop||0,a=await Ca();await R.fetchSessions(a,{force:!0,silent:!0,fresh:!0}),await o(),xe.value&&(xe.value.scrollTop=e)}finally{Ra=!1}}}function Ga(){"visible"===document.visibilityState&&Va().catch(()=>{})}function Za(){Va().catch(()=>{})}return p([J,()=>q.projectName],([e])=>{Ie.value=!1,Ma(),R.setChannel(e),async function(e={}){const a=await Ca();await R.fetchSessions(a,e)}()},{immediate:!0}),d(()=>{document.addEventListener("visibilitychange",Ga),window.addEventListener("focus",Za)}),n(()=>{document.removeEventListener("visibilitychange",Ga),window.removeEventListener("focus",Za)}),(s,n)=>(v(),x("div",qe,[z("div",He,[z("div",Ke,[u(j(a),{size:"small",onClick:Ia,class:"back-button"},{icon:h(()=>[u(j(e),{size:"18"},{default:h(()=>[u(j($))]),_:1})]),_:1}),z("div",We,[z("div",Re,[u(j(Q),null,{default:h(()=>[t(f(ga.value),1)]),_:1}),u(j(te),{depth:"3",class:"session-count"},{default:h(()=>[t("("+f(j(R).sessions.length)+" 个对话)",1)]),_:1}),u(j(re),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:h(()=>[t(f(qa(j(R).totalSize)),1)]),_:1}),z("div",Ve,[Se.value?(v(),x(g,{key:0},[u(j(ne),{checked:ja.value,indeterminate:ba.value,disabled:0===be.value.length||Ne.value,"onUpdate:checked":Fa},{default:h(()=>[...n[14]||(n[14]=[t(" 全选 ",-1)])]),_:1},8,["checked","indeterminate","disabled"]),u(j(te),{depth:"3"},{default:h(()=>[t("已选 "+f(wa.value)+" 个",1)]),_:1}),u(j(a),{size:"small",type:"error",disabled:0===wa.value,loading:Ne.value,onClick:Ea},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[15]||(n[15]=t(" 删除 ",-1))]),_:1},8,["disabled","loading"]),u(j(a),{size:"small",disabled:Ne.value,onClick:Ma},{default:h(()=>[...n[16]||(n[16]=[t(" 完成 ",-1)])]),_:1},8,["disabled"])],64)):(v(),x(g,{key:1},[u(j(a),{size:"small",type:"error",secondary:"",onClick:Sa},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[17]||(n[17]=t(" 管理 ",-1))]),_:1}),u(j(a),{size:"small",type:"primary",secondary:"",disabled:!ya.value,onClick:n[0]||(n[0]=e=>Ie.value=!0)},{default:h(()=>[...n[18]||(n[18]=[t(" 项目配置 ",-1)])]),_:1},8,["disabled"])],64))])]),u(j(te),{depth:"3",class:"project-path"},{default:h(()=>[t(f(ka.value),1)]),_:1})]),u(j(oe),{value:ge.value,"onUpdate:value":n[1]||(n[1]=e=>ge.value=e),placeholder:"搜索会话...",clearable:"",class:"search-input",onKeyup:b(xa,["enter"]),disabled:ze.value},{prefix:h(()=>[u(j(e),null,{default:h(()=>[u(j(U))]),_:1})]),suffix:h(()=>[u(j(a),{text:"",onClick:xa,disabled:!ge.value||ze.value,loading:ze.value},{default:h(()=>[...n[19]||(n[19]=[t(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])])]),z("div",{class:"content",ref_key:"contentEl",ref:xe},[j(R).loading&&0===j(R).sessions.length&&!j(R).sessionsPending?(v(),x("div",Ge,[u(j(ee),{size:"large"},{description:h(()=>[...n[20]||(n[20]=[t(" 加载会话列表... ",-1)])]),_:1})])):j(R).sessionsPending?(v(),x("div",Ze,[u(j(ee),{size:"small"},{description:h(()=>[...n[21]||(n[21]=[t(" 正在生成会话列表... ",-1)])]),_:1})])):j(R).error&&0===j(R).sessions.length?(v(),c(j(ue),{key:2,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:h(()=>[t(f(j(R).error),1)]),_:1})):Pa.value.length>0?(v(),c(j(S),i({key:3,modelValue:be.value,"onUpdate:modelValue":n[4]||(n[4]=e=>be.value=e),"item-key":"sessionId",class:"sessions-list",handle:".drag-handle",disabled:Se.value||Ne.value},fa,{"ghost-class":"ghost","chosen-class":"chosen",animation:"200",onEnd:za}),{item:h(({element:s})=>[z("div",{class:k(["session-item",{"session-item-selected":Na(s.sessionId),"session-item-selection-mode":Se.value}]),onMouseenter:e=>je.value=s.sessionId,onMouseleave:n[3]||(n[3]=e=>je.value=null),onClick:e=>Ua(s)},[Se.value?(v(),x("div",{key:1,class:"selection-checkbox",onClick:n[2]||(n[2]=w(()=>{},["stop"]))},[u(j(ne),{checked:Na(s.sessionId),"onUpdate:checked":e=>$a(s.sessionId,e)},null,8,["checked","onUpdate:checked"])])):(v(),x("div",Qe,[u(j(e),{size:"16",color:"#999"},{default:h(()=>[u(j(E))]),_:1})])),z("div",Xe,[z("div",Ye,[u(j(e),{size:"24",color:"#18a058"},{default:h(()=>[u(j(F))]),_:1})]),z("div",ea,[z("div",aa,[z("div",sa,[z("span",la,f(s.alias?`${s.alias} (${s.sessionId.substring(0,8)})`:s.sessionId),1),s.forkedFrom?(v(),c(j(Y),{key:0,placement:"top"},{trigger:h(()=>[u(j(re),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[n[22]||(n[22]=t(" Fork ",-1))]),_:1})]),default:h(()=>[t(" Fork 自: "+f(s.forkedFrom),1)]),_:2},1024)):l("",!0)])]),z("div",ta,[u(j(te),{depth:"3"},{default:h(()=>{return[t(f((e=s.mtime,e?new Date(e).toLocaleString("zh-CN"):"")),1)];var e}),_:2},1024),u(j(te),{depth:"3"},{default:h(()=>[...n[23]||(n[23]=[t("•",-1)])]),_:1}),u(j(re),{size:"small",bordered:!1},{default:h(()=>[t(f(qa(s.size)),1)]),_:2},1024)]),s.firstMessage?(v(),c(j(te),{key:0,depth:"3",class:"session-message"},{default:h(()=>[t(f(Ka(s.firstMessage,80)),1)]),_:2},1024)):s.gitBranch||s.summary?l("",!0):(v(),c(j(te),{key:1,depth:"3",class:"session-message session-message-empty"},{default:h(()=>[...n[24]||(n[24]=[t(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),z("div",ia,[z("div",na,[s.gitBranch?(v(),c(j(re),{key:0,size:"small",type:"info",bordered:!1},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[t(" "+f(s.gitBranch),1)]),_:2},1024)):l("",!0)]),Se.value?l("",!0):(v(),x("div",oa,[u(j(ae),null,{default:h(()=>[I(u(j(a),{size:"small",type:"error",onClick:w(e=>{return a=s.sessionId,void se.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await R.deleteSession(a),Oa([a]),le.success("会话已删除")}catch(e){le.error("删除失败: "+e.message)}}});var a},["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[25]||(n[25]=t(" 删除 ",-1))]),_:1},8,["onClick"]),[[y,je.value===s.sessionId]]),u(j(a),{size:"small",onClick:w(e=>function(e){_e.value=e,we.value=e.alias||"",ke.value=!0}(s),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(L))]),_:1})]),default:h(()=>[n[26]||(n[26]=t(" 别名 ",-1))]),_:1},8,["onClick"]),u(j(a),{size:"small",type:j(Z)(J.value,ye.value,s.sessionId)?"warning":"default",onClick:w(e=>async function(e){const a=J.value,s=Z(a,ye.value,e.sessionId);try{if(s)await G(a,ye.value,e.sessionId),le.success("已取消收藏");else{const s={sessionId:e.sessionId,projectName:ye.value,projectDisplayName:ga.value,projectFullPath:ka.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await V(a,s),le.success("已添加到收藏")}}catch(l){le.error("操作失败: "+l.message)}}(s),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[j(Z)(J.value,ye.value,s.sessionId)?(v(),c(j(D),{key:0})):(v(),c(j(T),{key:1}))]),_:2},1024)]),default:h(()=>[t(" "+f(j(Z)(J.value,ye.value,s.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"!==J.value?(v(),c(j(a),{key:0,size:"small",onClick:w(e=>async function(e){if("opencode"!==J.value)try{const a=be.value.find(a=>a.sessionId===e);Fe.value=a||{sessionId:e},Ue.value="",Be.value=da,Ae.value=[{label:"完整会话末尾(保留全部消息)",value:da}],$e.value=!0,Le.value=!0;const s=await ve(ye.value,e,J.value),l=Array.isArray(s?.items)?s.items:[];Ae.value=[{label:"完整会话末尾(保留全部消息)",value:da},...l.map(e=>({label:`保留到第 ${e.userMessageNumber} 条用户消息这一轮 · ${e.preview}`,value:e.userMessageNumber}))]}catch(a){le.error("加载 Fork 位置失败: "+a.message),La()}finally{Le.value=!1}else le.warning("OpenCode 当前不支持该 Fork 操作")}(s.sessionId),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[n[27]||(n[27]=t(" Fork ",-1))]),_:1},8,["onClick"])):l("",!0),u(j(a),{size:"small",type:"primary",onClick:w(e=>Da(s.sessionId),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(B))]),_:1})]),default:h(()=>[n[28]||(n[28]=t(" 使用对话 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]))])],42,Je)]),_:1},16,["modelValue","disabled"])):(v(),c(j(de),{key:4,description:"没有找到会话",style:{"margin-top":"60px"}},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(O))]),_:1})]),_:1}))],512),u(j(K),{show:ke.value,"onUpdate:show":n[7]||(n[7]=e=>ke.value=e),preset:"dialog",title:"设置别名"},{action:h(()=>[u(j(ae),null,{default:h(()=>[u(j(a),{onClick:n[6]||(n[6]=e=>ke.value=!1)},{default:h(()=>[...n[29]||(n[29]=[t("取消",-1)])]),_:1}),u(j(a),{type:"primary",onClick:Ba},{default:h(()=>[...n[30]||(n[30]=[t("确定",-1)])]),_:1})]),_:1})]),default:h(()=>[u(j(oe),{value:we.value,"onUpdate:value":n[5]||(n[5]=e=>we.value=e),placeholder:"输入别名(留空删除)",onKeyup:b(Ba,["enter"])},null,8,["value"])]),_:1},8,["show"]),u(j(K),{show:$e.value,"onUpdate:show":n[10]||(n[10]=e=>$e.value=e),preset:"dialog",title:"Fork 对话"},{action:h(()=>[u(j(ae),null,{default:h(()=>[u(j(a),{disabled:Te.value,onClick:La},{default:h(()=>[...n[32]||(n[32]=[t("取消",-1)])]),_:1},8,["disabled"]),u(j(a),{type:"primary",loading:Te.value,onClick:Ta},{default:h(()=>[...n[33]||(n[33]=[t(" 确认 Fork ",-1)])]),_:1},8,["loading"])]),_:1})]),default:h(()=>[u(j(ae),{vertical:"",size:14},{default:h(()=>[u(j(te),{depth:"3"},{default:h(()=>[...n[31]||(n[31]=[t(" 可选择保留到第几条用户消息所在轮次;会包含这条消息后 AI 的完整输出。 ",-1)])]),_:1}),u(j(ce),{value:Be.value,"onUpdate:value":n[8]||(n[8]=e=>Be.value=e),options:Ae.value,loading:Le.value,clearable:"",placeholder:"选择保留到哪一轮(默认完整会话)"},null,8,["value","options","loading"]),u(j(oe),{value:Ue.value,"onUpdate:value":n[9]||(n[9]=e=>Ue.value=e),placeholder:"输入新会话别名(可选)",maxlength:"120"},null,8,["value"])]),_:1})]),_:1},8,["show"]),u(j(K),{show:Pe.value,"onUpdate:show":n[11]||(n[11]=e=>Pe.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:h(()=>[Ce.value?(v(),x("div",ra,[u(j(ue),{type:"info",style:{"margin-bottom":"16px"}},{default:h(()=>[t(' 关键词 "'+f(Ce.value.keyword)+'" 共找到 '+f(Ce.value.totalMatches)+" 处匹配 ",1)]),_:1}),(v(!0),x(g,null,r(Ce.value.sessions,s=>(v(),x("div",{key:s.sessionId,class:"search-result-item"},[z("div",ua,[z("div",ca,[u(j(te),{strong:""},{default:h(()=>[t(f(s.alias?`${s.alias} (${s.sessionId.substring(0,8)})`:s.sessionId.substring(0,8)),1)]),_:2},1024),u(j(re),{size:"small",bordered:!1},{default:h(()=>[t(f(s.matchCount)+" 个匹配",1)]),_:2},1024)]),u(j(a),{size:"small",type:"primary",onClick:e=>Da(s.sessionId)},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(B))]),_:1})]),default:h(()=>[n[34]||(n[34]=t(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(v(!0),x(g,null,r(s.matches,(e,a)=>(v(),x("div",{key:a,class:"search-match"},[u(j(re),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:h(()=>[t(f("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),u(j(te),{depth:"3",class:"search-match-text",innerHTML:Ha(e.context,Ce.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Ce.value.sessions.length?(v(),c(j(de),{key:0,description:"没有找到匹配的内容"})):l("",!0)])):l("",!0)]),_:1},8,["show"]),De.value?(v(),c(me,{key:0,ref_key:"chatHistoryRef",ref:pa,show:Oe.value,"onUpdate:show":n[12]||(n[12]=e=>Oe.value=e),"project-name":ye.value,"session-id":De.value,"session-alias":va.value,channel:J.value,onError:Aa},null,8,["show","project-name","session-id","session-alias","channel"])):l("",!0),u(Ee,{show:Ie.value,"onUpdate:show":n[13]||(n[13]=e=>Ie.value=e),"project-path":ya.value,platform:J.value},null,8,["show","project-path","platform"])]))}},[["__scopeId","data-v-ab6739c9"]]);export{va as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as e,F as a,I as t,Mt as l,N as s,P as n,bt as i,gn as o,gt as r,hn as u,ht as d,i as c,m as p,p as v,s as f,t as m,vn as y,xn as g,xt as h,yn as b}from"./_plugin-vue_export-helper-BeLZJZij.js";import{A as w,C as x,D as k,I as _,K as z,M as C,O as P,S,V as O,W as U,Y as j,Z as I,_t as N,b as A,dt as L,et as $,f as B,g as T,ht as M,l as E,m as R,mt as D,rt as W,st as Y,tt as J,u as F,w as q,x as V}from"./vue-vendor-BqZbbXHA.js";import{n as H}from"./client-UDwXBP9i.js";import{a as X,c as K,l as Z,o as G,t as Q,u as ee}from"./platforms-CBkB45JP.js";import{F as ae,Ft as te,I as le,N as se,_t as ne,bt as ie,ct as oe,f as re,h as ue,m as de,r as ce,s as pe,t as ve,v as fe,xt as me,yt as ye}from"./icons-B2Vg-IOC.js";import{f as ge}from"./use-message-DoLM8C1C.js";import{l as he}from"./light-Cp0t7v32.js";import{t as be}from"./Divider-D28g1gwj.js";import{n as we,t as xe}from"./useResponsiveDrawer-jbmqZuJs.js";import{t as ke}from"./DrawerContent-ChXgZ1Xm.js";import{A as _e,F as ze,I as Ce,K as Pe,N as Se,P as Oe,R as Ue,at as je,ct as Ie,dt as Ne,et as Ae,j as Le,lt as $e,nt as Be,pt as Te,st as Me,tt as Ee,xt as Re,y as De}from"./index-BMAUPq5K.js";var We=w({name:"SlotMachineNumber",props:{clsPrefix:{type:String,required:!0},value:{type:[Number,String],required:!0},oldOriginalNumber:{type:Number,default:void 0},newOriginalNumber:{type:Number,default:void 0}},setup(e){const a=Y(null),t=Y(e.value),l=Y(e.value),s=Y("up"),n=Y(!1),i=A(()=>n.value?`${e.clsPrefix}-base-slot-machine-current-number--${s.value}-scroll`:null),o=A(()=>n.value?`${e.clsPrefix}-base-slot-machine-old-number--${s.value}-scroll`:null);function r(){const a=e.newOriginalNumber,t=e.oldOriginalNumber;void 0!==t&&void 0!==a&&(a>t?u("up"):t>a&&u("down"))}function u(e){s.value=e,n.value=!1,_(()=>{var e;null===(e=a.value)||void 0===e||e.offsetWidth,n.value=!0})}return I(L(e,"value"),(e,a)=>{t.value=a,l.value=e,_(r)}),()=>{const{clsPrefix:s}=e;return C("span",{ref:a,class:`${s}-base-slot-machine-number`},null!==t.value?C("span",{class:[`${s}-base-slot-machine-old-number ${s}-base-slot-machine-old-number--top`,o.value]},t.value):null,C("span",{class:[`${s}-base-slot-machine-current-number`,i.value]},C("span",{ref:"numberWrapper",class:[`${s}-base-slot-machine-current-number__inner`,"number"!=typeof e.value&&`${s}-base-slot-machine-current-number__inner--not-number`]},l.value)),null!==t.value?C("span",{class:[`${s}-base-slot-machine-old-number ${s}-base-slot-machine-old-number--bottom`,o.value]},t.value):null)}}}),{cubicBezierEaseOut:Ye}=a;var Je=u([u("@keyframes n-base-slot-machine-fade-up-in","\n from {\n transform: translateY(60%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n "),u("@keyframes n-base-slot-machine-fade-down-in","\n from {\n transform: translateY(-60%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n "),u("@keyframes n-base-slot-machine-fade-up-out","\n from {\n transform: translateY(0%);\n opacity: 1;\n }\n to {\n transform: translateY(-60%);\n opacity: 0;\n }\n "),u("@keyframes n-base-slot-machine-fade-down-out","\n from {\n transform: translateY(0%);\n opacity: 1;\n }\n to {\n transform: translateY(60%);\n opacity: 0;\n }\n "),o("base-slot-machine","\n overflow: hidden;\n white-space: nowrap;\n display: inline-block;\n height: 18px;\n line-height: 18px;\n ",[o("base-slot-machine-number","\n display: inline-block;\n position: relative;\n height: 18px;\n width: .6em;\n max-width: .6em;\n ",[function({duration:e=".2s"}={}){return[u("&.fade-up-width-expand-transition-leave-active",{transition:`\n opacity ${e} ${Ye},\n max-width ${e} ${Ye},\n transform ${e} ${Ye}\n `}),u("&.fade-up-width-expand-transition-enter-active",{transition:`\n opacity ${e} ${Ye},\n max-width ${e} ${Ye},\n transform ${e} ${Ye}\n `}),u("&.fade-up-width-expand-transition-enter-to",{opacity:1,transform:"translateX(0) translateY(0)"}),u("&.fade-up-width-expand-transition-enter-from",{maxWidth:"0 !important",opacity:0,transform:"translateY(60%)"}),u("&.fade-up-width-expand-transition-leave-from",{opacity:1,transform:"translateY(0)"}),u("&.fade-up-width-expand-transition-leave-to",{maxWidth:"0 !important",opacity:0,transform:"translateY(60%)"})]}({duration:".2s"}),p({duration:".2s",delay:"0s"}),o("base-slot-machine-old-number","\n display: inline-block;\n opacity: 0;\n position: absolute;\n left: 0;\n right: 0;\n ",[b("top",{transform:"translateY(-100%)"}),b("bottom",{transform:"translateY(100%)"}),b("down-scroll",{animation:"n-base-slot-machine-fade-down-out .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),b("up-scroll",{animation:"n-base-slot-machine-fade-up-out .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1})]),o("base-slot-machine-current-number","\n display: inline-block;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 1;\n transform: translateY(0);\n width: .6em;\n ",[b("down-scroll",{animation:"n-base-slot-machine-fade-down-in .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),b("up-scroll",{animation:"n-base-slot-machine-fade-up-in .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),y("inner","\n display: inline-block;\n position: absolute;\n right: 0;\n top: 0;\n width: .6em;\n ",[b("not-number","\n right: unset;\n left: 0;\n ")])])])])]),Fe=w({name:"BaseSlotMachine",props:{clsPrefix:{type:String,required:!0},value:{type:[Number,String],default:0},max:{type:Number,default:void 0},appeared:{type:Boolean,required:!0}},setup(a){n("-base-slot-machine",Je,L(a,"clsPrefix"));const t=Y(),l=Y(),s=A(()=>{if("string"==typeof a.value)return[];if(a.value<1)return[0];const e=[];let t=a.value;for(void 0!==a.max&&(t=Math.min(a.max,t));t>=1;)e.push(t%10),t/=10,t=Math.floor(t);return e.reverse(),e});return I(L(a,"value"),(e,a)=>{"string"==typeof e?(l.value=void 0,t.value=void 0):"string"==typeof a?(l.value=e,t.value=void 0):(l.value=e,t.value=a)}),()=>{const{value:n,clsPrefix:i}=a;return"number"==typeof n?C("span",{class:`${i}-base-slot-machine`},C(F,{name:"fade-up-width-expand-transition",tag:"span"},{default:()=>s.value.map((e,a)=>C(We,{clsPrefix:i,key:s.value.length-a-1,oldOriginalNumber:t.value,newOriginalNumber:l.value,value:e}))}),C(e,{key:"+",width:!0},{default:()=>void 0!==a.max&&a.max<n?C(We,{clsPrefix:i,value:"+"}):null})):C("span",{class:`${i}-base-slot-machine`},n)}}}),qe=u([u("@keyframes badge-wave-spread",{from:{boxShadow:"0 0 0.5px 0px var(--n-ripple-color)",opacity:.6},to:{boxShadow:"0 0 0.5px 4.5px var(--n-ripple-color)",opacity:0}}),o("badge","\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n font-family: var(--n-font-family);\n ",[b("as-is",[o("badge-sup",{position:"static",transform:"translateX(0)"},[ge({transformOrigin:"left bottom",originalTransform:"translateX(0)"})])]),b("dot",[o("badge-sup","\n height: 8px;\n width: 8px;\n padding: 0;\n min-width: 8px;\n left: 100%;\n bottom: calc(100% - 4px);\n ",[u("::before","border-radius: 4px;")])]),o("badge-sup","\n background: var(--n-color);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n color: #FFF;\n position: absolute;\n height: 18px;\n line-height: 18px;\n border-radius: 9px;\n padding: 0 6px;\n text-align: center;\n font-size: var(--n-font-size);\n transform: translateX(-50%);\n left: 100%;\n bottom: calc(100% - 9px);\n font-variant-numeric: tabular-nums;\n z-index: 2;\n display: flex;\n align-items: center;\n ",[ge({transformOrigin:"left bottom",originalTransform:"translateX(-50%)"}),o("base-wave",{zIndex:1,animationDuration:"2s",animationIterationCount:"infinite",animationDelay:"1s",animationTimingFunction:"var(--n-ripple-bezier)",animationName:"badge-wave-spread"}),u("&::before",'\n opacity: 0;\n transform: scale(1);\n border-radius: 9px;\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ')])])]),Ve=w({name:"Badge",props:Object.assign(Object.assign({},s.props),{value:[String,Number],max:Number,dot:Boolean,type:{type:String,default:"default"},show:{type:Boolean,default:!0},showZero:Boolean,processing:Boolean,color:String,offset:Array}),setup(e,{slots:a}){const{mergedClsPrefixRef:n,inlineThemeDisabled:o,mergedRtlRef:u}=r(e),c=s("Badge","-badge",qe,Me,e,n),p=Y(!1),v=A(()=>e.show&&(e.dot||void 0!==e.value&&!(!e.showZero&&Number(e.value)<=0)||!i(a.value)));O(()=>{v.value&&(p.value=!0)});const f=t("Badge",u,n),m=A(()=>{const{type:a,color:t}=e,{common:{cubicBezierEaseInOut:l,cubicBezierEaseOut:s},self:{[g("color",a)]:n,fontFamily:i,fontSize:o}}=c.value;return{"--n-font-size":o,"--n-font-family":i,"--n-color":t||n,"--n-ripple-color":t||n,"--n-bezier":l,"--n-ripple-bezier":s}}),y=o?d("badge",A(()=>{let a="";const{type:t,color:s}=e;return t&&(a+=t[0]),s&&(a+=l(s)),a}),m,e):void 0,h=A(()=>{const{offset:a}=e;if(!a)return;const[t,l]=a,s="number"==typeof t?`${t}px`:t,n="number"==typeof l?`${l}px`:l;return{transform:`translate(calc(${(null==f?void 0:f.value)?"50%":"-50%"} + ${s}), ${n})`}});return{rtlEnabled:f,mergedClsPrefix:n,appeared:p,showBadge:v,handleAfterEnter:()=>{p.value=!0},handleAfterLeave:()=>{p.value=!1},cssVars:o?void 0:m,themeClass:null==y?void 0:y.themeClass,onRender:null==y?void 0:y.onRender,offsetStyle:h}},render(){var e;const{mergedClsPrefix:a,onRender:t,themeClass:l,$slots:s}=this;null==t||t();const n=null===(e=s.default)||void 0===e?void 0:e.call(s);return C("div",{class:[`${a}-badge`,this.rtlEnabled&&`${a}-badge--rtl`,l,{[`${a}-badge--dot`]:this.dot,[`${a}-badge--as-is`]:!n}],style:this.cssVars},n,C(E,{name:"fade-in-scale-up-transition",onAfterEnter:this.handleAfterEnter,onAfterLeave:this.handleAfterLeave},{default:()=>this.showBadge?C("sup",{class:`${a}-badge-sup`,title:Re(this.value),style:this.offsetStyle},h(s.value,()=>[this.dot?null:C(Fe,{clsPrefix:a,appeared:this.appeared,max:this.max,value:this.value})]),this.processing?C(v,{clsPrefix:a}):null):null}))}}),He={class:"remote-provider-fields"},Xe={class:"remote-field-label"},Ke=m({__name:"RemoteProviderFields",props:{provider:{type:Object,required:!0},definition:{type:Object,default:null}},setup(e){const a=e,t=A(()=>Array.isArray(a.definition?.fields)?a.definition.fields:[]);function l(e){const t=e?.visibleWhen;return!t||"object"!=typeof t||a.provider?.config?.[t.key]===t.equals}function s(e){return"secret"===e.type?"password":"text"}return(a,n)=>(U(),q("div",He,[(U(!0),q(T,null,z(t.value,a=>J((U(),q("div",{key:a.key,class:M(["remote-field",{"remote-field-wide":!0===a.wide}])},[V("span",Xe,N(a.label),1),"select"===a.type?(U(),S(D(Be),{key:0,value:e.provider.config[a.key],"onUpdate:value":t=>e.provider.config[a.key]=t,size:"small",options:a.options||[],placeholder:a.placeholder},null,8,["value","onUpdate:value","options","placeholder"])):(U(),S(D(Ie),{key:1,value:e.provider.config[a.key],"onUpdate:value":t=>e.provider.config[a.key]=t,size:"small",type:s(a),"show-password-on":"secret"===a.type?"click":void 0,placeholder:a.placeholder},null,8,["value","onUpdate:value","type","show-password-on","placeholder"]))],2)),[[B,l(a)]])),128))]))}},[["__scopeId","data-v-44913e2a"]]);var Ze={class:"settings-container"},Ge={class:"settings-sidebar"},Qe={class:"sidebar-header"},ea={class:"settings-menu"},aa=["onClick"],ta={class:"menu-label"},la={class:"settings-content"},sa={class:"settings-panel"},na={class:"panel-header"},ia={class:"panel-title-row"},oa={class:"panel-body"},ra={class:"setting-group"},ua={class:"setting-item"},da={class:"setting-label"},ca={class:"visibility-options"},pa={class:"visibility-item"},va={class:"visibility-info"},fa={class:"visibility-item"},ma={class:"visibility-info"},ya={class:"visibility-item"},ga={class:"visibility-info"},ha={class:"setting-item"},ba={class:"setting-label"},wa={class:"home-cli-settings"},xa={class:"platform-catalog-list"},ka={key:0,class:"platform-order-actions"},_a={class:"home-cli-actions"},za={class:"setting-item"},Ca={class:"setting-label"},Pa={class:"simple-theme-options"},Sa={class:"theme-text"},Oa={key:0,class:"theme-check"},Ua={class:"theme-text"},ja={key:0,class:"theme-check"},Ia={class:"settings-panel"},Na={class:"panel-header"},Aa={class:"panel-title-row"},La={class:"panel-body"},$a={class:"setting-group"},Ba={class:"setting-item"},Ta={class:"setting-label"},Ma={class:"notification-options"},Ea={class:"visibility-item"},Ra={class:"visibility-info"},Da={key:1,class:"notification-type-section"},Wa={class:"radio-content"},Ya={class:"radio-content"},Ja={class:"radio-content"},Fa={style:{"font-size":"13px"}},qa={class:"setting-item"},Va={class:"setting-label"},Ha={class:"notification-options"},Xa={class:"remote-provider-toolbar"},Ka={class:"remote-provider-header"},Za={class:"remote-provider-title-row"},Ga={class:"remote-provider-avatar"},Qa={class:"remote-provider-title"},et={class:"remote-provider-name-row"},at={class:"remote-provider-fields"},tt={class:"remote-field remote-field-wide"},lt={class:"remote-fields-descriptor"},st={class:"remote-provider-actions"},nt={class:"panel-footer"},it={class:"settings-panel"},ot={class:"panel-header"},rt={class:"panel-title-row"},ut={class:"panel-body"},dt={class:"setting-group"},ct={class:"setting-item"},pt={class:"setting-label"},vt={class:"ports-grid"},ft={class:"setting-item"},mt={class:"setting-label"},yt={class:"advanced-options"},gt={class:"option-field"},ht={class:"option-label"},bt={class:"setting-item"},wt={class:"setting-label"},xt={class:"advanced-options"},kt={class:"option-field"},_t={class:"option-label"},zt={class:"option-field"},Ct={class:"option-label"},Pt={class:"option-field"},St={class:"option-label"},Ot={class:"option-field"},Ut={class:"option-label"},jt={class:"setting-item"},It={class:"setting-label"},Nt={style:{"margin-top":"16px"}},At={style:{background:"var(--bg-secondary)",padding:"16px","border-radius":"8px","border-left":"3px solid var(--border-secondary)"}},Lt={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},$t={class:"panel-footer"},Bt={class:"settings-panel"},Tt={class:"panel-header"},Mt={class:"panel-title-row"},Et={class:"panel-body"},Rt={class:"setting-group"},Dt={class:"setting-item"},Wt={class:"setting-label"},Yt={class:"security-status"},Jt={class:"setting-item"},Ft={class:"setting-label"},qt={class:"security-form"},Vt={class:"panel-footer"},Ht={class:"settings-panel"},Xt={class:"panel-header"},Kt={class:"panel-title-row"},Zt={class:"panel-body"},Gt={class:"setting-item",style:{"margin-bottom":"12px"}},Qt={class:"model-meta-section"},el={class:"speed-test-defaults"},al={class:"speed-test-default-label"},tl={class:"model-toolbar"},ll={class:"model-filter-row"},sl={key:0,class:"setting-item"},nl={key:1,class:"model-list"},il=["onClick"],ol={class:"model-card-id"},rl={key:0,class:"model-card-body"},ul={class:"model-meta-editor"},dl={class:"model-meta-section"},cl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"8px"}},pl={class:"model-meta-section",style:{"margin-top":"8px"}},vl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"8px"}},fl={class:"panel-footer"},ml={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"12px"}},yl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"12px"}},gl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"12px"}},hl=m({__name:"SettingsDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(e,{emit:a}){const{drawerWidth:t,isMobile:l}=xe(720),s=Q(),{uiConfig:n}=X();async function i(e){return(await H.post("/settings/model-settings",e)).data}async function o(e){return(await H.delete(`/settings/model-settings/${encodeURIComponent(e)}`)).data}const r=e,u=a,d=A({get:()=>r.visible,set:e=>u("update:visible",e)}),p=Y("appearance"),{isDark:v,toggleTheme:m}=De(),y=Y(!0),g=Y(!0),h=Y(!1),b=Y({webUI:19999}),w=Y({webUI:19999}),_=A(()=>[{key:"webUI",label:"Web UI",defaultPort:19999},...s.all.filter(e=>e.portKey&&Number.isFinite(e.defaultPort)).sort((e,a)=>(e.sortOrder||0)-(a.sortOrder||0)).map(e=>({key:e.portKey,label:e.portLabel||e.label||e.key,defaultPort:e.defaultPort}))]),C=Y(!1),L=Y([...G]),E=Y([...G]),F=Y(!1),ge=Y(!1),Me=Y(!1),Re=A(()=>ge.value?"[v] 已启用":"未启用"),We=A(()=>ge.value?"重启电脑时 coding-tool-x 会自动启动。如需禁用,点击下方按钮":"启用后,重启电脑时 coding-tool-x 会自动启动");function Ye(e={}){const a=(e?.omp&&"object"==typeof e.omp&&!Array.isArray(e.omp)?e.omp:null)||e,t=Number.isInteger(a.intervalSeconds)&&a.intervalSeconds>=1&&a.intervalSeconds<=60?a.intervalSeconds:5;return{enabled:"boolean"!=typeof a.enabled||a.enabled,intervalSeconds:t}}function Je(e={}){return{maxLogs:e.maxLogs??100,statsInterval:e.statsInterval??30,enableSessionBinding:!1!==e.enableSessionBinding,nativeCliLogs:Ye(e.nativeCliLogs)}}const Fe=Y(Je()),qe=Y(Je()),He=Y([]),Xe=Y([]);function hl(e={}){const a=String(e.key||"").trim();return a?{key:a,label:String(e.label||a),description:"string"==typeof e.description?e.description:"",implementation:"string"==typeof e.implementation?e.implementation:"",externalMessage:"string"==typeof e.externalMessage?e.externalMessage:"",hints:Array.isArray(e.hints)?e.hints.filter(e=>"string"==typeof e):[]}:null}function bl(e={}){return{enabled:!0===e.enabled,type:"dialog"===e.type||"browser"===e.type?e.type:"notification",external:!0===e.external}}function wl(e,a=Xe.value){return a.find(a=>a.type===e)||null}function xl(e){return wl(e)?.label||e||"远程通知"}function kl(e){const a=xl(e).trim();return Array.from(a)[0]||"通"}function _l(e={},a=He.value,t=Xe.value){const l={enabled:e?.stopHook?.enabled,type:e?.stopHook?.type},s=e.platforms&&"object"==typeof e.platforms&&!Array.isArray(e.platforms)?e.platforms:{};return{platforms:Object.fromEntries(a.map(e=>[e.key,bl(s[e.key]||("claude"===e.key?l:{}))])),remoteNotifications:{providers:Array.isArray(e?.remoteNotifications?.providers)?e.remoteNotifications.providers.map(e=>function(e={},a=Xe.value){const t=String(e.type||"").trim(),l=wl(t,a)||a[0],s=l?.type||t;if(!s)return null;const n=l?.defaults&&"object"==typeof l.defaults?l.defaults:{};return{id:e.id||`${s}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,type:s,name:e.name||l?.label||s,enabled:!0===e.enabled,config:{...n,...e.config&&"object"==typeof e.config?e.config:{}}}}(e,t)).filter(Boolean):[]}}}const zl=Y(_l()),Cl=Y(_l()),Pl=Y(!1),Sl=Y(""),Ol=Y(""),Ul=A(()=>Xe.value.map(e=>({label:e.label||e.type,value:e.type}))),jl=Y(""),Il=Y("default"),Nl=A(()=>"undefined"!=typeof window&&"undefined"!=typeof Notification&&(!!window.isSecureContext||["localhost","127.0.0.1","::1"].includes(window.location.hostname))),Al=A(()=>Nl.value?"granted"===Il.value?"已授权":"denied"===Il.value?"已被浏览器拒绝,请在浏览器站点设置里重新开启":"尚未授权,保存时会请求浏览器权限":"当前环境不支持浏览器通知,请使用 localhost 或 HTTPS 页面");function Ll(e="notification"){if("browser"===e)return"浏览器通知";if("dialog"===e)return"确认式弹窗";switch(jl.value){case"win32":return"右上角悬浮卡片";case"darwin":return"角落横幅通知";case"linux":return"桌面环境通知";default:return"轻提醒卡片"}}function $l(e="notification"){return"browser"===e?Nl.value?"granted"===Il.value?"通过当前打开的 Web 页面显示浏览器原生通知":"denied"===Il.value?"浏览器通知权限已被拒绝,需要先在浏览器中重新授权":"通过当前打开的 Web 页面显示原生通知,保存时会请求权限":"当前页面环境不支持浏览器通知":"dialog"===e?"强制提醒,需要手动点击确认才能关闭":"win32"===jl.value?"轻量提醒,几秒后自动消失,带提示音(Windows 使用系统 Toast 风格提醒)":"轻量提醒,几秒后自动消失,带提示音"}function Bl(){"undefined"!=typeof Notification?Il.value=Notification.permission:Il.value="unsupported"}function Tl(){const e=function(e=Xe.value[0]?.type){const a=wl(e);return a?{id:`${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,type:e,name:xl(e),enabled:!1,config:{...a.defaults&&"object"==typeof a.defaults?a.defaults:{}}}:null}(Ol.value);e&&zl.value.remoteNotifications.providers.push(e)}const Ml=Y({hasPassword:!1}),El=Y(!1),Rl=Y(!1),Dl=Y({currentPassword:"",newPassword:"",confirmPassword:""}),Wl=Y(!1),Yl=A(()=>{const e=Dl.value.currentPassword.trim(),a=Dl.value.newPassword,t=Dl.value.confirmPassword;return Ml.value.hasPassword&&!e?"请输入当前密码":a?a.length<4?"新密码至少需要 4 位":t&&a!==t?"两次输入的新密码不一致":"":""}),Jl=A(()=>{const e=Dl.value;return(!Ml.value.hasPassword||Boolean(e.currentPassword.trim()))&&e.newPassword.length>=4&&e.newPassword===e.confirmPassword});let Fl=null;const ql=Y({name:"Models.dev",url:"",lastUpdated:""}),Vl=Y(!1),Hl=Y(!1),Xl=Y({}),Kl=Y({}),Zl=Y({}),Gl=Y(""),Ql=Y("all"),es=Y(!1),as=Y({modelId:"",context:128e3,output:8192,inputPrice:0,outputPrice:0,cacheCreationPrice:0,cacheReadPrice:0}),ts=Y(new Set),ls=Y({}),ss=Y({}),ns=A(()=>Object.keys(ls.value).map(e=>{const a="function"==typeof s.get?s.get(e):null;return{key:e,label:a?.label||a?.title||e}})),is=Y(new Set),os=A(()=>Object.keys(Zl.value).length>0),rs=A(()=>os.value||JSON.stringify(ls.value)!==JSON.stringify(ss.value)),us=A(()=>{const e=String(as.value.modelId||"").trim();if(!e)return"请输入模型 ID";const a=Object.keys(Xl.value).find(a=>a.toLowerCase()===e.toLowerCase());return a?`模型已存在:${a}`:!Number.isFinite(as.value.context)||as.value.context<=0?"Context 窗口必须为正数":!Number.isFinite(as.value.output)||as.value.output<=0?"Max Output 必须为正数":as.value.inputPrice<0||as.value.outputPrice<0||as.value.cacheCreationPrice<0||as.value.cacheReadPrice<0?"价格不能为负数":""});function ds(){as.value={modelId:"",context:128e3,output:8192,inputPrice:0,outputPrice:0,cacheCreationPrice:0,cacheReadPrice:0},es.value=!0}function cs(){es.value=!1}function ps(){if(us.value)return;const e=String(as.value.modelId||"").trim(),a={limit:{context:as.value.context,output:as.value.output},pricing:{input:as.value.inputPrice,output:as.value.outputPrice,cacheCreation:as.value.cacheCreationPrice,cacheRead:as.value.cacheReadPrice}};Xl.value[e]=a,Zl.value[e]={limit:{...a.limit},pricing:{...a.pricing}},Gl.value=e,es.value=!1,Se.success("模型已新增,请点击“保存设置”使其生效")}function vs(e){return ts.value.has(e)}function fs(e){return!vs(e)}const ms={claude:"claude",openai:"codex",gemini:"gemini"},ys=A(()=>{const e=Object.keys(Xl.value),a=Gl.value.trim().toLowerCase(),t=Ql.value,l=ms[t];return e.filter(e=>{if(a&&!e.toLowerCase().includes(a))return!1;const s=Xl.value[e];return"compatible"===t?!!Array.isArray(s?.toolTypes)&&(s.toolTypes.includes("opencode")||s.toolTypes.includes("omp")):l?Array.isArray(s?.toolTypes)?s.toolTypes.includes(l):gs(e,s)===l:"overrides"!==t||!!Kl.value[e]})});function gs(e,a=Xl.value[e]){const t=String(e||"").trim().toLowerCase(),l=hs(a);return l.length>0?l[0]:t.startsWith("claude-")?"claude":t.startsWith("gemini-")?"gemini":t.startsWith("gpt-")||t.startsWith("o1")||t.startsWith("o3")||t.startsWith("o4")?"codex":""}function hs(e={}){return Array.isArray(e?.toolTypes)?[...new Set(e.toolTypes.filter(e=>"string"==typeof e).map(e=>e.trim()).filter(Boolean))]:[]}const bs=A(()=>{const e=Object.fromEntries(ns.value.map(e=>[e.key,[]]));for(const[a,t]of Object.entries(Xl.value||{})){if(!t||"object"!=typeof t||!t.limit||!t.pricing)continue;const l=hs(t),s=l.length>0?"":gs(a,t);for(const t of l.length>0?l:[s])t&&e[t]&&e[t].push({label:a,value:a})}for(const a of Object.keys(e))e[a].sort((e,a)=>e.label.localeCompare(a.label));for(const a of ns.value){const t=String(ls.value[a.key]||"").trim();t&&e[a.key]&&(e[a.key].some(e=>e.value===t)||e[a.key].push({label:`${t}(自定义)`,value:t}))}return e});function ws(e,a,t){return void 0!==Zl.value[e]?.[a]?.[t]?Zl.value[e][a][t]:Xl.value[e]?.[a]?.[t]??null}function xs(e,a,t,l){if(!Zl.value[e]){const a=Xl.value[e]||{};Zl.value[e]={limit:{...a.limit||{}},pricing:{...a.pricing||{}}}}Zl.value[e][a]||(Zl.value[e][a]={}),Zl.value[e][a][t]=l}async function ks(){Vl.value=!0;try{const e=await async function(){return(await H.get("/settings/model-settings")).data}(),a=e.metadataSource||{};ql.value={name:a.name||"Models.dev",url:a.url||"",lastUpdated:a.lastUpdated||""},Xl.value=e.models&&"object"==typeof e.models&&!Array.isArray(e.models)?e.models:{};const t=e.overrides??e.modelMetadataOverrides;Kl.value={...t&&"object"==typeof t&&!Array.isArray(t)?t:{}};const l=Array.isArray(e.builtinModelIds)?e.builtinModelIds:Object.keys(Xl.value);ts.value=new Set(l.filter(e=>"string"==typeof e&&e.trim())),ls.value=Object.fromEntries(Object.entries(e.defaultSpeedTestModels||{}).filter(([,e])=>"string"==typeof e&&e.trim())),function(){const e={...ls.value};let a=!1;for(const t of ns.value){const l=bs.value[t.key]||[];0!==l.length&&(new Set(l.map(e=>e.value)).has(e[t.key])||(e[t.key]=l[0].value,a=!0))}a&&(ls.value=e)}(),ss.value={...ls.value},Zl.value={}}catch(e){}finally{Vl.value=!1}}async function _s(){Hl.value=!0;try{const e={...Kl.value};for(const[a,t]of Object.entries(Zl.value)){const l=e[a]||{};e[a]={limit:{...l.limit||{},...t.limit||{}},pricing:{...l.pricing||{},...t.pricing||{}}}}await i({overrides:e,defaultSpeedTestModels:ls.value}),Kl.value=e,ss.value={...ls.value},Zl.value={},await ks(),Se.success("模型设置已保存")}catch(e){Se.error("保存失败:"+e.message)}finally{Hl.value=!1}}async function zs(){try{await i({overrides:{},defaultSpeedTestModels:ls.value}),Kl.value={},Zl.value={},await ks(),Se.success("全部模型设置已重置为内置默认值")}catch(e){Se.error("重置失败:"+e.message)}}const Cs=A(()=>{const e=Object.keys(b.value).some(e=>b.value[e]!==w.value[e]),a=Fe.value.nativeCliLogs.enabled!==qe.value.nativeCliLogs.enabled||Fe.value.nativeCliLogs.intervalSeconds!==qe.value.nativeCliLogs.intervalSeconds;return e||Fe.value.maxLogs!==qe.value.maxLogs||Fe.value.statsInterval!==qe.value.statsInterval||Fe.value.enableSessionBinding!==qe.value.enableSessionBinding||a}),Ps=A(()=>[{key:"appearance",label:"外观设置",icon:W(oe)},{key:"notification",label:"通知设置",icon:W(ae)},{key:"advanced",label:"高级设置",icon:W(se)},{key:"security",label:"安全设置",icon:W(de)},{key:"model-settings",label:"模型设置",icon:W(re)}]),Ss=A(()=>{const e=Array.isArray(s.all)?s.all:[],a=new Map(e.map(e=>[e.key,e])),t=L.value.map(e=>a.get(e)).filter(Boolean),l=new Set(t.map(e=>e.key)),n=e.filter(e=>!l.has(e.key));return[...t,...n]});function Os(e){return String(e||"").trim().toLowerCase()}function Us(e=He.value){const a=new Set((Array.isArray(s.all)?s.all:[]).map(e=>Os(e.key)).filter(Boolean)),t=new Set(L.value.map(Os).filter(Boolean));return e.filter(e=>{const l=Os(e.key);return!a.has(l)||t.has(l)})}const js=A(()=>Us());const Is=A(()=>JSON.stringify(L.value)!==JSON.stringify(E.value));function Ns(e){return L.value.indexOf(e)}function As(e,a){const t=Ns(e),l=t+a;if(t<0||l<0||l>=L.value.length)return;const s=[...L.value],[n]=s.splice(t,1);s.splice(l,0,n),L.value=s}function Ls(){L.value=[...G]}async function $s(){try{const e=await K();if(e.success&&e.config){y.value=!1!==e.config.panelVisibility?.showChannels,g.value=!1!==e.config.panelVisibility?.showLogs,h.value=!0===e.config.channelBalance?.showRemaining;const a=Array.isArray(e.config.enabledCliPlatforms)?e.config.enabledCliPlatforms:G;L.value=[...a],E.value=[...a]}}catch(e){}}async function Bs(){F.value=!0;try{const e=await Z({enabledCliPlatforms:[...L.value]});if(!e.success)throw new Error(e.message||"保存失败");const a=Array.isArray(e.config?.enabledCliPlatforms)?[...e.config.enabledCliPlatforms]:[...L.value];L.value=[...a],E.value=[...a],n.value={...n.value,enabledCliPlatforms:[...a]},window.dispatchEvent(new CustomEvent("enabled-cli-platforms-change",{detail:{enabledCliPlatforms:[...a]}})),Se.success("首页 CLI 显示已保存")}catch(e){Se.error("保存失败: "+e.message)}finally{F.value=!1}}async function Ts(){try{await ee("panelVisibility","showChannels",y.value),await ee("panelVisibility","showLogs",g.value),await ee("channelBalance","showRemaining",h.value)}catch(e){}}function Ms(e){y.value=e,Ts(),window.dispatchEvent(new CustomEvent("panel-visibility-change",{detail:{showChannels:e,showLogs:g.value}}))}function Es(e){g.value=e,Ts(),window.dispatchEvent(new CustomEvent("panel-visibility-change",{detail:{showChannels:y.value,showLogs:e}}))}function Rs(e){h.value=e,Ts(),window.dispatchEvent(new CustomEvent("channel-balance-visibility-change",{detail:{showRemaining:e}}))}async function Ds(e){try{(await fetch("/api/config/advanced",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ports:b.value,maxLogs:Fe.value.maxLogs,statsInterval:Fe.value.statsInterval,enableSessionBinding:e,nativeCliLogs:Fe.value.nativeCliLogs})})).ok?(qe.value=Je(Fe.value),Se.success(e?"会话绑定已开启":"会话绑定已关闭")):(Fe.value.enableSessionBinding=!e,Se.error("保存失���"))}catch(a){Fe.value.enableSessionBinding=!e,Se.error("保存失败: "+a.message)}}function Ws(e={}){const a=function(e={}){const a=Array.isArray(e.platformDefinitions)?e.platformDefinitions.map(hl).filter(Boolean):[];if(a.length>0)return a;const t=e.platforms&&"object"==typeof e.platforms&&!Array.isArray(e.platforms)?e.platforms:{},l=Object.keys(t);return 0===l.length&&e.stopHook&&"object"==typeof e.stopHook&&l.push("claude"),l.map(e=>hl({key:e,label:e})).filter(Boolean)}(e),t=function(e={}){const a=Array.isArray(e.remoteProviderTypes)?e.remoteProviderTypes.map(e=>({...e,type:String(e?.type||"").trim()})).filter(e=>e.type):[],t=new Set(a.map(e=>e.type)),l=Array.isArray(e.remoteNotifications?.providers)?e.remoteNotifications.providers:[];for(const s of l){const e=String(s?.type||"").trim();e&&!t.has(e)&&(a.push({type:e,label:e,description:"",hint:"",defaults:{},fields:[]}),t.add(e))}return a}(e);return He.value=a,Xe.value=t,t.some(e=>e.type===Ol.value)||(Ol.value=t[0]?.type||""),{definitions:a,providerDefinitions:t}}async function Ys(){try{const e=await fetch("/api/hooks");if(e.ok){const a=await e.json(),{definitions:t,providerDefinitions:l}=Ws(a),s=_l(a,Us(t),l);zl.value=s,Cl.value=JSON.parse(JSON.stringify(s)),jl.value=a.platform||"",Bl()}}catch(e){}}async function Js(){Pl.value=!0;try{const e=new Set(js.value.map(e=>e.key));Object.entries(zl.value.platforms||{}).filter(([a])=>e.has(a)).some(([,e])=>!0===e?.enabled&&"browser"===e.type)&&await async function(){if(!Nl.value)throw new Error("当前页面环境不支持浏览器通知,请改用 HTTPS 或 localhost 页面");if(Bl(),"granted"===Il.value)return;const e=await Notification.requestPermission();if(Il.value=e,"granted"!==e)throw new Error("浏览器通知权限未授予")}();const a=await fetch("/api/hooks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({platforms:Object.fromEntries(Object.entries(zl.value.platforms||{}).filter(([a])=>e.has(a)).map(([e,a])=>[e,{enabled:a.enabled,type:a.type}])),remoteNotifications:{providers:zl.value.remoteNotifications.providers}})});if(a.ok){const e=await a.json(),{definitions:t,providerDefinitions:l}=Ws(e),s=_l(e,Us(t),l);zl.value=s,Cl.value=JSON.parse(JSON.stringify(s)),jl.value=e.platform||jl.value,Se.success("通知设置已保存")}else{const e=await a.json();Se.error("保存失败:"+(e.error||"未知错误"))}}catch(e){Se.error("保存失败:"+e.message)}finally{Pl.value=!1}}function Fs(){Dl.value={currentPassword:"",newPassword:"",confirmPassword:""}}async function qs(e=!1){return Rl.value&&Fl?Fl:El.value&&!e?Promise.resolve():(Rl.value=!0,Fl=(async()=>{try{const e=await _e();e.success&&(Ml.value={hasPassword:Boolean(e.hasPassword)},El.value=!0)}catch(e){}finally{Rl.value=!1,Fl=null}})(),Fl)}async function Vs(){if(!Jl.value)return void Se.warning("请完善密码信息");const e=Ml.value.hasPassword;Wl.value=!0;try{const a={newPassword:Dl.value.newPassword};Ml.value.hasPassword&&(a.currentPassword=Dl.value.currentPassword);const t=await Le(a);t.success?(Ml.value.hasPassword=!0,El.value=!0,Fs(),Se.success(e?"密码已更新":"密码已设置")):Se.error(t.error||"保存失败")}catch(a){Se.error(a.response?.data?.error||"保存失败")}finally{Wl.value=!1}}async function Hs(){C.value=!0;try{const e=await fetch("/api/config/advanced",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ports:b.value,maxLogs:Fe.value.maxLogs,statsInterval:Fe.value.statsInterval,enableSessionBinding:Fe.value.enableSessionBinding,nativeCliLogs:Fe.value.nativeCliLogs})});if(e.ok)w.value={...b.value},qe.value=Je(Fe.value),window.dispatchEvent(new CustomEvent("advanced-config-change",{detail:{maxLogs:Fe.value.maxLogs,statsInterval:Fe.value.statsInterval}})),Se.success("配置已保存,端口修改需要重启服务器生效;OMP 原生会话日志配置立即生效");else{const a=await e.json();Se.error("保存失败:"+(a.error||"未知错误"))}}catch(e){Se.error("保存失败:"+e.message)}finally{C.value=!1}}async function Xs(){try{const e=await async function(){return(await H.get("/pm2-autostart")).data}();e&&e.success?ge.value=e.data?.enabled||!1:ge.value=!1}catch(e){ge.value=!1}}async function Ks(){Me.value=!0;try{const e=await async function(){return(await H.post("/pm2-autostart",{action:"enable"})).data}();if(e.success)ge.value=!0,Se.success("开机自启已启用");else{const a=e.message||"未知错误";a.includes("暂无运行中的进程")||a.includes("请先启动")?Se.warning(a):Se.error(a)}}catch(e){Se.error(e.message||"启用失败:未知错误")}finally{Me.value=!1}}async function Zs(){Me.value=!0;try{const e=await async function(){return(await H.post("/pm2-autostart",{action:"disable"})).data}();if(e.success)ge.value=!1,Se.success("开机自启已禁用");else{const a=e.message||"未知错误";a.includes("未启用")||a.includes("不存在")?Se.warning(a):Se.error(a)}}catch(e){Se.error(e.message||"禁用失败:未知错误")}finally{Me.value=!1}}return O(()=>{"function"==typeof s.load&&s.load(),$s(),qs(),ks(),r.visible&&Ys()}),I(d,e=>{e?($s(),async function(){try{"function"==typeof s.load&&await s.load();const e=await fetch("/api/config/advanced");if(e.ok){const a=await e.json(),t={};for(const e of _.value)t[e.key]=a.ports?.[e.key]||e.defaultPort;b.value=t,w.value={...b.value},Fe.value=Je({maxLogs:a.maxLogs||100,statsInterval:a.statsInterval||30,enableSessionBinding:!1!==a.enableSessionBinding,nativeCliLogs:a.nativeCliLogs}),qe.value=Je(Fe.value)}}catch(e){}}(),Xs(),Ys(),ks(),qs(!0)):Fs()}),I(p,(e,a)=>{"security"===e&&qs(),"security"===a&&"security"!==e&&Fs()}),(e,a)=>(U(),S(D(we),{show:d.value,"onUpdate:show":a[25]||(a[25]=e=>d.value=e),width:D(t),placement:"right","show-mask":!0},{default:$(()=>[P(D(ke),{"show-header":!1,closable:"","native-scrollbar":!1},{default:$(()=>[V("div",Ze,[V("div",Ge,[V("div",Qe,[P(D(c),{size:"20",color:"var(--text-secondary)"},{default:$(()=>[P(D(ue))]),_:1}),a[26]||(a[26]=V("span",{class:"sidebar-title"},"设置分类",-1))]),V("div",ea,[(U(!0),q(T,null,z(Ps.value,e=>(U(),q("div",{key:e.key,class:M(["menu-item",{active:p.value===e.key}]),onClick:a=>p.value=e.key},[P(D(c),{size:18,class:"menu-icon"},{default:$(()=>[(U(),S(j(e.icon)))]),_:2},1024),V("span",ta,N(e.label),1),e.badge?(U(),S(D(Ve),{key:0,value:e.badge,type:e.badgeType||"info","show-zero":!1},null,8,["value","type"])):x("",!0)],10,aa))),128))])]),V("div",la,[J(V("div",sa,[V("div",na,[V("div",ia,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(oe))]),_:1}),V("div",null,[a[28]||(a[28]=V("h3",{class:"panel-title"},"外观设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[27]||(a[27]=[k("自定义界面外观和主题",-1)])]),_:1})])])]),V("div",oa,[V("div",ra,[V("div",ua,[V("div",da,[P(D(Oe),{strong:""},{default:$(()=>[...a[29]||(a[29]=[k("面板显示",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[30]||(a[30]=[k(" 控制右侧面板中各个区域的显示 ",-1)])]),_:1})]),V("div",ca,[V("div",pa,[V("div",va,[P(D(Oe),{strong:""},{default:$(()=>[...a[31]||(a[31]=[k("显示渠道列表",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[...a[32]||(a[32]=[k(" 在右侧面板显示 API 渠道管理区域 ",-1)])]),_:1})]),P(D(ze),{value:y.value,"onUpdate:value":Ms},null,8,["value"])]),V("div",fa,[V("div",ma,[P(D(Oe),{strong:""},{default:$(()=>[...a[33]||(a[33]=[k("显示实时日志",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[...a[34]||(a[34]=[k(" 在 Dashboard 显示实时日志区域 ",-1)])]),_:1})]),P(D(ze),{value:g.value,"onUpdate:value":Es},null,8,["value"])]),V("div",ya,[V("div",ga,[P(D(Oe),{strong:""},{default:$(()=>[...a[35]||(a[35]=[k("显示剩余金额",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[...a[36]||(a[36]=[k(" 在渠道卡片显示可识别 API 网关的余额 ",-1)])]),_:1})]),P(D(ze),{value:h.value,"onUpdate:value":Rs},null,8,["value"])])])]),P(D(be)),V("div",ha,[V("div",ba,[P(D(Oe),{strong:""},{default:$(()=>[...a[37]||(a[37]=[k("首页 CLI 显示",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[38]||(a[38]=[k(" 从已注册的平台目录中选择并排序首页显示的 CLI ",-1)])]),_:1})]),V("div",wa,[V("div",xa,[(U(!0),q(T,null,z(Ss.value,e=>(U(),q("div",{key:e.key,class:"platform-catalog-item"},[P(D(je),{checked:L.value.includes(e.key),"onUpdate:checked":a=>function(e,a){const t=L.value.filter(a=>a!==e);a&&t.push(e),L.value=t}(e.key,a)},{default:$(()=>[k(N(e.label||e.title||e.key),1)]),_:2},1032,["checked","onUpdate:checked"]),L.value.includes(e.key)?(U(),q("div",ka,[P(D(f),{text:"",size:"small",disabled:0===Ns(e.key),"aria-label":"上移",onClick:a=>As(e.key,-1)},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ne))]),_:1})]),_:1},8,["disabled","onClick"]),P(D(f),{text:"",size:"small",disabled:Ns(e.key)===L.value.length-1,"aria-label":"下移",onClick:a=>As(e.key,1)},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ie))]),_:1})]),_:1},8,["disabled","onClick"])])):x("",!0)]))),128))]),V("div",_a,[P(D(f),{size:"small",onClick:Ls},{default:$(()=>[...a[39]||(a[39]=[k("恢复默认显示",-1)])]),_:1}),P(D(f),{type:"primary",size:"small",loading:F.value,disabled:!Is.value,onClick:Bs},{default:$(()=>[...a[40]||(a[40]=[k(" 保存首页显示 ",-1)])]),_:1},8,["loading","disabled"])])])]),P(D(be)),V("div",za,[V("div",Ca,[P(D(Oe),{strong:""},{default:$(()=>[...a[41]||(a[41]=[k("界面主题",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[42]||(a[42]=[k(" 选择你喜欢的界面主题风格 ",-1)])]),_:1})]),V("div",Pa,[V("div",{class:M(["simple-theme-item",{active:!D(v)}]),onClick:a[0]||(a[0]=e=>D(v)&&D(m)())},[P(D(c),{size:20,class:"theme-icon"},{default:$(()=>[P(D(pe))]),_:1}),V("div",Sa,[P(D(Oe),{strong:""},{default:$(()=>[...a[43]||(a[43]=[k("亮色模式",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[44]||(a[44]=[k("经典的浅色主题",-1)])]),_:1})]),D(v)?x("",!0):(U(),q("div",Oa,[P(D(c),{size:20,color:"#18a058"},{default:$(()=>[P(D(me))]),_:1})]))],2),V("div",{class:M(["simple-theme-item",{active:D(v)}]),onClick:a[1]||(a[1]=e=>!D(v)&&D(m)())},[P(D(c),{size:20,class:"theme-icon"},{default:$(()=>[P(D(le))]),_:1}),V("div",Ua,[P(D(Oe),{strong:""},{default:$(()=>[...a[45]||(a[45]=[k("暗色模式",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[46]||(a[46]=[k("护眼的深色主题",-1)])]),_:1})]),D(v)?(U(),q("div",ja,[P(D(c),{size:20,color:"#18a058"},{default:$(()=>[P(D(me))]),_:1})])):x("",!0)],2)])])])])],512),[[B,"appearance"===p.value]]),J(V("div",Ia,[V("div",Na,[V("div",Aa,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(ae))]),_:1}),V("div",null,[a[48]||(a[48]=V("h3",{class:"panel-title"},"通知设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[47]||(a[47]=[k("配置任务完成时的系统通知",-1)])]),_:1})])])]),V("div",La,[V("div",$a,[(U(!0),q(T,null,z(js.value,(e,t)=>(U(),q(T,{key:e.key},[V("div",Ba,[V("div",Ta,[P(D(Oe),{strong:""},{default:$(()=>[k(N(e.label),1)]),_:2},1024),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[k(N(e.description),1)]),_:2},1024)]),V("div",Ma,[V("div",Ea,[V("div",Ra,[P(D(Oe),{strong:""},{default:$(()=>[...a[49]||(a[49]=[k("启用任务完成通知",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[k(N(e.implementation),1)]),_:2},1024)]),P(D(ze),{value:zl.value.platforms[e.key].enabled,"onUpdate:value":a=>zl.value.platforms[e.key].enabled=a},null,8,["value","onUpdate:value"])]),zl.value.platforms[e.key].external?(U(),S(D($e),{key:0,type:"warning",bordered:!1,style:{"margin-top":"16px"}},{default:$(()=>[k(N(e.externalMessage),1)]),_:2},1024)):x("",!0),zl.value.platforms[e.key].enabled?(U(),q("div",Da,[P(D(Oe),{depth:"2",style:{"font-size":"13px","margin-bottom":"12px",display:"block"}},{default:$(()=>[...a[50]||(a[50]=[k(" 选择通知方式 ",-1)])]),_:1}),P(D(Ae),{value:zl.value.platforms[e.key].type,"onUpdate:value":a=>zl.value.platforms[e.key].type=a},{default:$(()=>[P(D(Pe),{vertical:""},{default:$(()=>[P(D(Ee),{value:"notification"},{default:$(()=>[V("div",Wa,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ll("notification")),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>[k(N($l("notification")),1)]),_:1})])]),_:1}),P(D(Ee),{value:"browser",disabled:!Nl.value},{default:$(()=>[V("div",Ya,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ll("browser")),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>[k(N($l("browser")),1)]),_:1})])]),_:1},8,["disabled"]),P(D(Ee),{value:"dialog"},{default:$(()=>[V("div",Ja,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ll("dialog")),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>[k(N($l("dialog")),1)]),_:1})])]),_:1})]),_:1})]),_:1},8,["value","onUpdate:value"]),"claude"===e.key&&"darwin"===jl.value?(U(),S(D($e),{key:0,type:"info",bordered:!1,style:{"margin-top":"16px"},"show-icon":!1},{default:$(()=>[V("div",Fa,[P(D(Oe),{strong:""},{default:$(()=>[...a[51]||(a[51]=[k("[TIP] 更好的通知体验",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{display:"block","margin-top":"4px","font-size":"12px"}},{default:$(()=>[...a[52]||(a[52]=[k(" 安装 terminal-notifier 后,点击通知可自动打开终端 ",-1)])]),_:1}),P(D(Oe),{code:"",style:{display:"block","margin-top":"8px","font-size":"12px"}},{default:$(()=>[...a[53]||(a[53]=[k(" brew install terminal-notifier ",-1)])]),_:1})])]),_:1})):x("",!0),"browser"===zl.value.platforms[e.key].type?(U(),S(D($e),{key:1,type:"info",bordered:!1,style:{"margin-top":"16px"}},{default:$(()=>[k(" 当前权限状态:"+N(Al.value),1)]),_:1})):x("",!0)])):x("",!0)])]),t<js.value.length-1?(U(),S(D(be),{key:0})):x("",!0)],64))),128)),P(D(be)),V("div",qa,[V("div",Va,[P(D(Oe),{strong:""},{default:$(()=>[...a[54]||(a[54]=[k("远程通知渠道",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[55]||(a[55]=[k(" 支持服务端注册的远程通知渠道 ",-1)])]),_:1})]),V("div",Ha,[V("div",Xa,[P(D(Be),{value:Ol.value,"onUpdate:value":a[2]||(a[2]=e=>Ol.value=e),options:Ul.value,size:"small",style:{"max-width":"220px"}},null,8,["value","options"]),P(D(f),{size:"small",secondary:"",type:"primary",onClick:Tl},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(te))]),_:1})]),default:$(()=>[a[56]||(a[56]=k(" 添加渠道 ",-1))]),_:1})]),0===zl.value.remoteNotifications.providers.length?(U(),S(D(Te),{key:0,description:"还没有远程通知渠道",style:{padding:"20px 0"}})):x("",!0),(U(!0),q(T,null,z(zl.value.remoteNotifications.providers,e=>(U(),q("div",{key:e.id,class:"remote-provider-card"},[V("div",Ka,[V("div",Za,[V("div",Ga,N(kl(e.type)),1),V("div",Qa,[V("div",et,[P(D(Oe),{strong:""},{default:$(()=>[k(N(e.name||xl(e.type)),1)]),_:2},1024),P(D(Ne),{size:"tiny",bordered:!1,type:e.enabled?"success":"default"},{default:$(()=>[k(N(e.enabled?"已启用":"未启用"),1)]),_:2},1032,["type"])]),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>{return[k(N((a=e.type,wl(a)?.description||"")),1)];var a}),_:2},1024)])]),P(D(Pe),{size:"small",align:"center"},{default:$(()=>[P(D(ze),{value:e.enabled,"onUpdate:value":a=>e.enabled=a,size:"small"},null,8,["value","onUpdate:value"]),P(D(f),{size:"small",quaternary:"",circle:"",type:"error",onClick:a=>{return t=e.id,void(zl.value.remoteNotifications.providers=zl.value.remoteNotifications.providers.filter(e=>e.id!==t));var t}},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ce))]),_:1})]),_:1},8,["onClick"])]),_:2},1024)]),V("div",at,[V("div",tt,[a[57]||(a[57]=V("span",{class:"remote-field-label"},"渠道名称",-1)),P(D(Ie),{value:e.name,"onUpdate:value":a=>e.name=a,size:"small",placeholder:"例如:我的飞书"},null,8,["value","onUpdate:value"])]),V("div",lt,[P(Ke,{provider:e,definition:wl(e.type)},null,8,["provider","definition"])])]),V("div",st,[P(D(f),{size:"small",secondary:"",loading:Sl.value===e.id,onClick:a=>async function(e){Sl.value=e.id;try{const a=await fetch("/api/hooks/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e})}),t=await a.json().catch(()=>({}));if(!a.ok)throw new Error(t.error||"测试通知发送失败");Se.success(t.message||"测试通知已发送")}catch(a){Se.error("测试失败:"+a.message)}finally{Sl.value=""}}(e)},{default:$(()=>[...a[58]||(a[58]=[k(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>{return[k(N((a=e.type,wl(a)?.hint||"")),1)];var a}),_:2},1024)])]))),128))])])])]),V("div",nt,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:a[3]||(a[3]=e=>d.value=!1)},{default:$(()=>[...a[59]||(a[59]=[k(" 取消 ",-1)])]),_:1}),P(D(f),{type:"primary",size:"large",loading:Pl.value,disabled:JSON.stringify(zl.value)===JSON.stringify(Cl.value),onClick:Js},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[60]||(a[60]=k(" 保存设置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"notification"===p.value]]),J(V("div",it,[V("div",ot,[V("div",rt,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(se))]),_:1}),V("div",null,[a[62]||(a[62]=V("h3",{class:"panel-title"},"高级设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[61]||(a[61]=[k("端口配置和高级选项",-1)])]),_:1})])])]),V("div",ut,[V("div",dt,[V("div",ct,[V("div",pt,[P(D(Oe),{strong:""},{default:$(()=>[...a[63]||(a[63]=[k("端口配置",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[64]||(a[64]=[k(" 修改后需要重启服务器才能生效 ",-1)])]),_:1})]),V("div",vt,[(U(!0),q(T,null,z(_.value,e=>(U(),q("div",{key:e.key,class:"port-field"},[P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-bottom":"6px"}},{default:$(()=>[k(N(e.label),1)]),_:2},1024),P(D(Ue),{value:b.value[e.key],"onUpdate:value":a=>b.value[e.key]=a,min:1024,max:65535,"show-button":!1,placeholder:String(e.defaultPort)},{prefix:$(()=>[P(D(c),null,{default:$(()=>[P(D(se))]),_:1})]),_:1},8,["value","onUpdate:value","placeholder"])]))),128))])]),P(D(be)),V("div",ft,[V("div",mt,[P(D(Oe),{strong:""},{default:$(()=>[...a[65]||(a[65]=[k("负载均衡",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[66]||(a[66]=[k(" 多渠道负载均衡时的分配策略 ",-1)])]),_:1})]),V("div",yt,[V("div",gt,[V("div",ht,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[67]||(a[67]=[k("多渠道负载会话绑定",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[68]||(a[68]=[k("开启后同一对话始终使用同一渠道,保证上下文连续性",-1)])]),_:1})]),P(D(ze),{value:Fe.value.enableSessionBinding,"onUpdate:value":[a[4]||(a[4]=e=>Fe.value.enableSessionBinding=e),Ds],size:"medium"},null,8,["value"])])])]),P(D(be)),V("div",bt,[V("div",wt,[P(D(Oe),{strong:""},{default:$(()=>[...a[69]||(a[69]=[k("日志和性能",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[70]||(a[70]=[k(" 控制日志显示和数据刷新行为 ",-1)])]),_:1})]),V("div",xt,[V("div",kt,[V("div",_t,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[71]||(a[71]=[k("实时日志保留数量",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[72]||(a[72]=[k("超过此数量将自动清理旧日志",-1)])]),_:1})]),P(D(Ue),{value:Fe.value.maxLogs,"onUpdate:value":a[5]||(a[5]=e=>Fe.value.maxLogs=e),min:50,max:500,step:10,style:{width:"140px"}},{suffix:$(()=>[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[73]||(a[73]=[k("条",-1)])]),_:1})]),_:1},8,["value"])]),V("div",zt,[V("div",Ct,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[74]||(a[74]=[k("统计数据刷新间隔",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[75]||(a[75]=[k("自动刷新今日统计的时间间隔",-1)])]),_:1})]),P(D(Ue),{value:Fe.value.statsInterval,"onUpdate:value":a[6]||(a[6]=e=>Fe.value.statsInterval=e),min:10,max:300,step:5,style:{width:"140px"}},{suffix:$(()=>[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[76]||(a[76]=[k("秒",-1)])]),_:1})]),_:1},8,["value"])]),V("div",Pt,[V("div",St,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[77]||(a[77]=[k("CLI 原生会话日志",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[78]||(a[78]=[k("读取各 CLI 工具自己的会话日志,配置保存后立即生效",-1)])]),_:1})]),P(D(ze),{value:Fe.value.nativeCliLogs.enabled,"onUpdate:value":a[7]||(a[7]=e=>Fe.value.nativeCliLogs.enabled=e),size:"medium"},null,8,["value"])]),V("div",Ot,[V("div",Ut,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[79]||(a[79]=[k("CLI 原生日志读取间隔",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[80]||(a[80]=[k("轮询原生会话日志的时间间隔",-1)])]),_:1})]),P(D(Ue),{value:Fe.value.nativeCliLogs.intervalSeconds,"onUpdate:value":a[8]||(a[8]=e=>Fe.value.nativeCliLogs.intervalSeconds=e),min:1,max:60,step:1,style:{width:"140px"}},{suffix:$(()=>[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[81]||(a[81]=[k("秒",-1)])]),_:1})]),_:1},8,["value"])])])]),P(D(be)),V("div",jt,[V("div",It,[P(D(Oe),{strong:""},{default:$(()=>[...a[82]||(a[82]=[k("开机自启",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[83]||(a[83]=[k(" 启用此选项后,重启电脑时 coding-tool-x 会自动启动 ",-1)])]),_:1})]),V("div",Nt,[V("div",At,[V("div",Lt,[P(D(Oe),{strong:"",style:{flex:"1"}},{default:$(()=>[k(N(Re.value),1)]),_:1}),ge.value?(U(),S(D(f),{key:1,type:"warning",size:"small",loading:Me.value,onClick:Zs},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ve))]),_:1})]),default:$(()=>[a[85]||(a[85]=k(" 禁用自启 ",-1))]),_:1},8,["loading"])):(U(),S(D(f),{key:0,type:"primary",size:"small",loading:Me.value,onClick:Ks},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(me))]),_:1})]),default:$(()=>[a[84]||(a[84]=k(" 启用自启 ",-1))]),_:1},8,["loading"]))]),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[k(N(We.value),1)]),_:1})])])])])]),V("div",$t,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:a[9]||(a[9]=e=>d.value=!1)},{default:$(()=>[...a[86]||(a[86]=[k(" 取消 ",-1)])]),_:1}),P(D(f),{type:"primary",size:"large",loading:C.value,disabled:!Cs.value,onClick:Hs},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[87]||(a[87]=k(" 保存端口配置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"advanced"===p.value]]),J(V("div",Bt,[V("div",Tt,[V("div",Mt,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(de))]),_:1}),V("div",null,[a[89]||(a[89]=V("h3",{class:"panel-title"},"安全设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[88]||(a[88]=[k("设置访问密码,保护面板访问",-1)])]),_:1})])])]),V("div",Et,[V("div",Rt,[V("div",Dt,[V("div",Wt,[P(D(Oe),{strong:""},{default:$(()=>[...a[90]||(a[90]=[k("访问保护",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[91]||(a[91]=[k(" 启用后,重新打开面板时需要先输入访问密码 ",-1)])]),_:1})]),V("div",Yt,[Ml.value.hasPassword?(U(),S(D(Ne),{key:0,type:"success",bordered:!1},{default:$(()=>[...a[92]||(a[92]=[k(" 已启用 ",-1)])]),_:1})):(U(),S(D(Ne),{key:1,type:"warning",bordered:!1},{default:$(()=>[...a[93]||(a[93]=[k(" 未启用 ",-1)])]),_:1}))])]),P(D(be)),V("div",Jt,[V("div",Ft,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ml.value.hasPassword?"修改密码":"设置密码"),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[94]||(a[94]=[k(" 密码至少 4 位,建议包含数字与字母 ",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px","margin-top":"4px"}},{default:$(()=>[a[96]||(a[96]=k(" 忘记密码可在终端执行 ",-1)),P(D(Oe),{code:""},{default:$(()=>[...a[95]||(a[95]=[k("ctx security reset",-1)])]),_:1}),a[97]||(a[97]=k(" 关闭密码 ",-1))]),_:1})]),V("div",qt,[Ml.value.hasPassword?(U(),S(D(Ie),{key:0,value:Dl.value.currentPassword,"onUpdate:value":a[10]||(a[10]=e=>Dl.value.currentPassword=e),type:"password",placeholder:"当前密码","show-password-on":"click"},null,8,["value"])):x("",!0),P(D(Ie),{value:Dl.value.newPassword,"onUpdate:value":a[11]||(a[11]=e=>Dl.value.newPassword=e),type:"password",placeholder:"新密码","show-password-on":"click"},null,8,["value"]),P(D(Ie),{value:Dl.value.confirmPassword,"onUpdate:value":a[12]||(a[12]=e=>Dl.value.confirmPassword=e),type:"password",placeholder:"确认新密码","show-password-on":"click"},null,8,["value"]),Yl.value?(U(),S(D(Oe),{key:1,depth:"3",class:"security-error"},{default:$(()=>[k(N(Yl.value),1)]),_:1})):x("",!0)])])])]),V("div",Vt,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:a[13]||(a[13]=e=>d.value=!1)},{default:$(()=>[...a[98]||(a[98]=[k(" 取消 ",-1)])]),_:1}),P(D(f),{type:"primary",size:"large",loading:Wl.value,disabled:!Jl.value,onClick:Vs},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[99]||(a[99]=k(" 保存密码 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"security"===p.value]]),J(V("div",Ht,[V("div",Xt,[V("div",Kt,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(re))]),_:1}),V("div",null,[a[101]||(a[101]=V("h3",{class:"panel-title"},"模型设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[100]||(a[100]=[k("管理默认测速模型、模型上下文窗口和定价信息",-1)])]),_:1}),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[k(" 价格来源:Models.dev 参考价格(离线快照) · "+N(ql.value.lastUpdated||"日期未知"),1)]),_:1})])])]),V("div",Zt,[P(D(Ce),{show:Vl.value},{default:$(()=>[V("div",Gt,[V("div",Qt,[P(D(Oe),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:$(()=>[...a[102]||(a[102]=[k("默认测速模型",-1)])]),_:1}),V("div",el,[(U(!0),q(T,null,z(ns.value,e=>(U(),q("div",{key:e.key,class:"speed-test-default-row"},[V("div",al,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[k(N(e.label),1)]),_:2},1024)]),P(D(Be),{value:ls.value[e.key],"onUpdate:value":a=>ls.value[e.key]=a,options:bs.value[e.key],placeholder:`选择或输入${e.label}默认测速模型`,disabled:0===(bs.value[e.key]||[]).length,size:"small",filterable:"",tag:""},null,8,["value","onUpdate:value","options","placeholder","disabled"])]))),128))])])]),V("div",tl,[P(D(Ie),{value:Gl.value,"onUpdate:value":a[14]||(a[14]=e=>Gl.value=e),placeholder:"搜索模型 ID...",clearable:"",size:"small",style:{flex:"1","min-width":"0"}},null,8,["value"]),P(D(f),{size:"small",type:"primary",onClick:ds},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(te))]),_:1})]),default:$(()=>[a[103]||(a[103]=k(" 新增 ",-1))]),_:1})]),V("div",ll,[P(D(Ae),{value:Ql.value,"onUpdate:value":a[15]||(a[15]=e=>Ql.value=e),size:"small"},{default:$(()=>[P(D(Ee),{value:"all"},{default:$(()=>[...a[104]||(a[104]=[k("全部",-1)])]),_:1}),P(D(Ee),{value:"claude"},{default:$(()=>[...a[105]||(a[105]=[k("Claude",-1)])]),_:1}),P(D(Ee),{value:"openai"},{default:$(()=>[...a[106]||(a[106]=[k("OpenAI",-1)])]),_:1}),P(D(Ee),{value:"gemini"},{default:$(()=>[...a[107]||(a[107]=[k("Gemini",-1)])]),_:1}),P(D(Ee),{value:"compatible"},{default:$(()=>[...a[108]||(a[108]=[k("OpenCode / OMP",-1)])]),_:1}),P(D(Ee),{value:"overrides"},{default:$(()=>[...a[109]||(a[109]=[k("自定义",-1)])]),_:1})]),_:1},8,["value"])]),0===ys.value.length?(U(),q("div",sl,[P(D(Te),{description:"没有匹配的模型"})])):(U(),q("div",nl,[(U(!0),q(T,null,z(ys.value,e=>(U(),q("div",{key:e,class:M(["model-card",{expanded:is.value.has(e)}])},[V("div",{class:"model-card-header",onClick:a=>(e=>{is.value.has(e)?is.value.delete(e):is.value.add(e),is.value=new Set(is.value)})(e)},[P(D(c),{size:"14",class:"expand-icon"},{default:$(()=>[P(D(ye))]),_:1}),V("span",ol,N(e),1),Kl.value[e]?(U(),S(D(Ne),{key:0,type:"warning",size:"tiny",bordered:!1},{default:$(()=>[...a[110]||(a[110]=[k("自定义",-1)])]),_:1})):x("",!0),V("div",{class:"model-card-actions",onClick:a[16]||(a[16]=R(()=>{},["stop"]))},[Kl.value[e]&&vs(e)?(U(),S(D(f),{key:0,size:"tiny",quaternary:"",type:"warning",onClick:a=>async function(e){try{await o(e),delete Kl.value[e],delete Zl.value[e],await ks(),Se.success(`${e} 已重置为内置默认值`)}catch(a){Se.error("重置失败:"+a.message)}}(e)},{default:$(()=>[...a[111]||(a[111]=[k(" 重置 ",-1)])]),_:1},8,["onClick"])):x("",!0),fs(e)?(U(),S(D(f),{key:1,size:"tiny",quaternary:"",type:"error",onClick:a=>async function(e){try{const a=!!Kl.value[e];a&&(await o(e),delete Kl.value[e]),delete Zl.value[e],fs(e)?delete Xl.value[e]:a&&await ks(),Se.success(`已删除模型:${e}`)}catch(a){Se.error("删除失败:"+a.message)}}(e)},{default:$(()=>[...a[112]||(a[112]=[k(" 删除 ",-1)])]),_:1},8,["onClick"])):x("",!0)])],8,il),is.value.has(e)?(U(),q("div",rl,[V("div",ul,[V("div",dl,[P(D(Oe),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:$(()=>[...a[113]||(a[113]=[k("上下文限制",-1)])]),_:1}),V("div",cl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[114]||(a[114]=[k("Context 窗口 (tokens)",-1)])]),_:1}),P(D(Ue),{value:ws(e,"limit","context"),"onUpdate:value":a=>xs(e,"limit","context",a),min:1e3,step:1e3,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[115]||(a[115]=[k("Max Output (tokens)",-1)])]),_:1}),P(D(Ue),{value:ws(e,"limit","output"),"onUpdate:value":a=>xs(e,"limit","output",a),min:100,step:1e3,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])])])]),V("div",pl,[P(D(Oe),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:$(()=>[...a[116]||(a[116]=[k("定价(USD / 百万 tokens)",-1)])]),_:1}),V("div",vl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[117]||(a[117]=[k("输入价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","input"),"onUpdate:value":a=>xs(e,"pricing","input",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[118]||(a[118]=[k("输出价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","output"),"onUpdate:value":a=>xs(e,"pricing","output",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[119]||(a[119]=[k("缓存写入价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","cacheCreation"),"onUpdate:value":a=>xs(e,"pricing","cacheCreation",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[120]||(a[120]=[k("缓存读取价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","cacheRead"),"onUpdate:value":a=>xs(e,"pricing","cacheRead",a),min:0,step:.01,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])])])])])])):x("",!0)],2))),128))]))]),_:1},8,["show"])]),V("div",fl,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:zs,disabled:0===Object.keys(Kl.value).length},{default:$(()=>[...a[121]||(a[121]=[k(" 重置全部 ",-1)])]),_:1},8,["disabled"]),P(D(f),{type:"primary",size:"large",loading:Hl.value,disabled:!rs.value,onClick:_s},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[122]||(a[122]=k(" 保存设置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"model-settings"===p.value]])])]),P(D(he),{show:es.value,"onUpdate:show":a[24]||(a[24]=e=>es.value=e),preset:"card",title:"新增模型设置",style:{width:"560px"},"mask-closable":!1},{default:$(()=>[P(D(Pe),{vertical:"",size:12},{default:$(()=>[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[123]||(a[123]=[k("模型 ID",-1)])]),_:1}),P(D(Ie),{value:as.value.modelId,"onUpdate:value":a[17]||(a[17]=e=>as.value.modelId=e),placeholder:"例如:gpt-4.1-mini",clearable:""},null,8,["value"])]),V("div",ml,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[124]||(a[124]=[k("Context 窗口",-1)])]),_:1}),P(D(Ue),{value:as.value.context,"onUpdate:value":a[18]||(a[18]=e=>as.value.context=e),min:1e3,step:1e3,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[125]||(a[125]=[k("Max Output",-1)])]),_:1}),P(D(Ue),{value:as.value.output,"onUpdate:value":a[19]||(a[19]=e=>as.value.output=e),min:100,step:100,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),V("div",yl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[126]||(a[126]=[k("输入价格",-1)])]),_:1}),P(D(Ue),{value:as.value.inputPrice,"onUpdate:value":a[20]||(a[20]=e=>as.value.inputPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[127]||(a[127]=[k("输出价格",-1)])]),_:1}),P(D(Ue),{value:as.value.outputPrice,"onUpdate:value":a[21]||(a[21]=e=>as.value.outputPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),V("div",gl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[128]||(a[128]=[k("缓存写入价格",-1)])]),_:1}),P(D(Ue),{value:as.value.cacheCreationPrice,"onUpdate:value":a[22]||(a[22]=e=>as.value.cacheCreationPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[129]||(a[129]=[k("缓存读取价格",-1)])]),_:1}),P(D(Ue),{value:as.value.cacheReadPrice,"onUpdate:value":a[23]||(a[23]=e=>as.value.cacheReadPrice=e),min:0,step:.01,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),us.value?(U(),S(D(Oe),{key:0,depth:"3",class:"security-error"},{default:$(()=>[k(N(us.value),1)]),_:1})):x("",!0),P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{onClick:cs},{default:$(()=>[...a[130]||(a[130]=[k("取消",-1)])]),_:1}),P(D(f),{type:"primary",disabled:!!us.value,onClick:ps},{default:$(()=>[...a[131]||(a[131]=[k(" 新增 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["show"])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-f0261ba5"]]);export{hl as default};
|
|
1
|
+
import{E as e,F as a,I as t,Mt as l,N as s,P as n,bt as i,gn as o,gt as r,hn as u,ht as d,i as c,m as p,p as v,s as f,t as m,vn as y,xn as g,xt as h,yn as b}from"./_plugin-vue_export-helper-BeLZJZij.js";import{A as w,C as x,D as k,I as _,K as z,M as C,O as P,S,V as O,W as U,Y as j,Z as I,_t as N,b as A,dt as L,et as $,f as B,g as T,ht as M,l as E,m as R,mt as D,rt as W,st as Y,tt as J,u as F,w as q,x as V}from"./vue-vendor-BqZbbXHA.js";import{n as H}from"./client-UDwXBP9i.js";import{a as X,c as K,l as Z,o as G,t as Q,u as ee}from"./platforms-CBkB45JP.js";import{F as ae,Ft as te,I as le,N as se,_t as ne,bt as ie,ct as oe,f as re,h as ue,m as de,r as ce,s as pe,t as ve,v as fe,xt as me,yt as ye}from"./icons-B2Vg-IOC.js";import{f as ge}from"./use-message-DoLM8C1C.js";import{l as he}from"./light-Cp0t7v32.js";import{t as be}from"./Divider-D28g1gwj.js";import{n as we,t as xe}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as ke}from"./DrawerContent-ChXgZ1Xm.js";import{A as _e,F as ze,I as Ce,K as Pe,N as Se,P as Oe,R as Ue,at as je,ct as Ie,dt as Ne,et as Ae,j as Le,lt as $e,nt as Be,pt as Te,st as Me,tt as Ee,xt as Re,y as De}from"./index-BFInlZGI.js";var We=w({name:"SlotMachineNumber",props:{clsPrefix:{type:String,required:!0},value:{type:[Number,String],required:!0},oldOriginalNumber:{type:Number,default:void 0},newOriginalNumber:{type:Number,default:void 0}},setup(e){const a=Y(null),t=Y(e.value),l=Y(e.value),s=Y("up"),n=Y(!1),i=A(()=>n.value?`${e.clsPrefix}-base-slot-machine-current-number--${s.value}-scroll`:null),o=A(()=>n.value?`${e.clsPrefix}-base-slot-machine-old-number--${s.value}-scroll`:null);function r(){const a=e.newOriginalNumber,t=e.oldOriginalNumber;void 0!==t&&void 0!==a&&(a>t?u("up"):t>a&&u("down"))}function u(e){s.value=e,n.value=!1,_(()=>{var e;null===(e=a.value)||void 0===e||e.offsetWidth,n.value=!0})}return I(L(e,"value"),(e,a)=>{t.value=a,l.value=e,_(r)}),()=>{const{clsPrefix:s}=e;return C("span",{ref:a,class:`${s}-base-slot-machine-number`},null!==t.value?C("span",{class:[`${s}-base-slot-machine-old-number ${s}-base-slot-machine-old-number--top`,o.value]},t.value):null,C("span",{class:[`${s}-base-slot-machine-current-number`,i.value]},C("span",{ref:"numberWrapper",class:[`${s}-base-slot-machine-current-number__inner`,"number"!=typeof e.value&&`${s}-base-slot-machine-current-number__inner--not-number`]},l.value)),null!==t.value?C("span",{class:[`${s}-base-slot-machine-old-number ${s}-base-slot-machine-old-number--bottom`,o.value]},t.value):null)}}}),{cubicBezierEaseOut:Ye}=a;var Je=u([u("@keyframes n-base-slot-machine-fade-up-in","\n from {\n transform: translateY(60%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n "),u("@keyframes n-base-slot-machine-fade-down-in","\n from {\n transform: translateY(-60%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n "),u("@keyframes n-base-slot-machine-fade-up-out","\n from {\n transform: translateY(0%);\n opacity: 1;\n }\n to {\n transform: translateY(-60%);\n opacity: 0;\n }\n "),u("@keyframes n-base-slot-machine-fade-down-out","\n from {\n transform: translateY(0%);\n opacity: 1;\n }\n to {\n transform: translateY(60%);\n opacity: 0;\n }\n "),o("base-slot-machine","\n overflow: hidden;\n white-space: nowrap;\n display: inline-block;\n height: 18px;\n line-height: 18px;\n ",[o("base-slot-machine-number","\n display: inline-block;\n position: relative;\n height: 18px;\n width: .6em;\n max-width: .6em;\n ",[function({duration:e=".2s"}={}){return[u("&.fade-up-width-expand-transition-leave-active",{transition:`\n opacity ${e} ${Ye},\n max-width ${e} ${Ye},\n transform ${e} ${Ye}\n `}),u("&.fade-up-width-expand-transition-enter-active",{transition:`\n opacity ${e} ${Ye},\n max-width ${e} ${Ye},\n transform ${e} ${Ye}\n `}),u("&.fade-up-width-expand-transition-enter-to",{opacity:1,transform:"translateX(0) translateY(0)"}),u("&.fade-up-width-expand-transition-enter-from",{maxWidth:"0 !important",opacity:0,transform:"translateY(60%)"}),u("&.fade-up-width-expand-transition-leave-from",{opacity:1,transform:"translateY(0)"}),u("&.fade-up-width-expand-transition-leave-to",{maxWidth:"0 !important",opacity:0,transform:"translateY(60%)"})]}({duration:".2s"}),p({duration:".2s",delay:"0s"}),o("base-slot-machine-old-number","\n display: inline-block;\n opacity: 0;\n position: absolute;\n left: 0;\n right: 0;\n ",[b("top",{transform:"translateY(-100%)"}),b("bottom",{transform:"translateY(100%)"}),b("down-scroll",{animation:"n-base-slot-machine-fade-down-out .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),b("up-scroll",{animation:"n-base-slot-machine-fade-up-out .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1})]),o("base-slot-machine-current-number","\n display: inline-block;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 1;\n transform: translateY(0);\n width: .6em;\n ",[b("down-scroll",{animation:"n-base-slot-machine-fade-down-in .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),b("up-scroll",{animation:"n-base-slot-machine-fade-up-in .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),y("inner","\n display: inline-block;\n position: absolute;\n right: 0;\n top: 0;\n width: .6em;\n ",[b("not-number","\n right: unset;\n left: 0;\n ")])])])])]),Fe=w({name:"BaseSlotMachine",props:{clsPrefix:{type:String,required:!0},value:{type:[Number,String],default:0},max:{type:Number,default:void 0},appeared:{type:Boolean,required:!0}},setup(a){n("-base-slot-machine",Je,L(a,"clsPrefix"));const t=Y(),l=Y(),s=A(()=>{if("string"==typeof a.value)return[];if(a.value<1)return[0];const e=[];let t=a.value;for(void 0!==a.max&&(t=Math.min(a.max,t));t>=1;)e.push(t%10),t/=10,t=Math.floor(t);return e.reverse(),e});return I(L(a,"value"),(e,a)=>{"string"==typeof e?(l.value=void 0,t.value=void 0):"string"==typeof a?(l.value=e,t.value=void 0):(l.value=e,t.value=a)}),()=>{const{value:n,clsPrefix:i}=a;return"number"==typeof n?C("span",{class:`${i}-base-slot-machine`},C(F,{name:"fade-up-width-expand-transition",tag:"span"},{default:()=>s.value.map((e,a)=>C(We,{clsPrefix:i,key:s.value.length-a-1,oldOriginalNumber:t.value,newOriginalNumber:l.value,value:e}))}),C(e,{key:"+",width:!0},{default:()=>void 0!==a.max&&a.max<n?C(We,{clsPrefix:i,value:"+"}):null})):C("span",{class:`${i}-base-slot-machine`},n)}}}),qe=u([u("@keyframes badge-wave-spread",{from:{boxShadow:"0 0 0.5px 0px var(--n-ripple-color)",opacity:.6},to:{boxShadow:"0 0 0.5px 4.5px var(--n-ripple-color)",opacity:0}}),o("badge","\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n font-family: var(--n-font-family);\n ",[b("as-is",[o("badge-sup",{position:"static",transform:"translateX(0)"},[ge({transformOrigin:"left bottom",originalTransform:"translateX(0)"})])]),b("dot",[o("badge-sup","\n height: 8px;\n width: 8px;\n padding: 0;\n min-width: 8px;\n left: 100%;\n bottom: calc(100% - 4px);\n ",[u("::before","border-radius: 4px;")])]),o("badge-sup","\n background: var(--n-color);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n color: #FFF;\n position: absolute;\n height: 18px;\n line-height: 18px;\n border-radius: 9px;\n padding: 0 6px;\n text-align: center;\n font-size: var(--n-font-size);\n transform: translateX(-50%);\n left: 100%;\n bottom: calc(100% - 9px);\n font-variant-numeric: tabular-nums;\n z-index: 2;\n display: flex;\n align-items: center;\n ",[ge({transformOrigin:"left bottom",originalTransform:"translateX(-50%)"}),o("base-wave",{zIndex:1,animationDuration:"2s",animationIterationCount:"infinite",animationDelay:"1s",animationTimingFunction:"var(--n-ripple-bezier)",animationName:"badge-wave-spread"}),u("&::before",'\n opacity: 0;\n transform: scale(1);\n border-radius: 9px;\n content: "";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ')])])]),Ve=w({name:"Badge",props:Object.assign(Object.assign({},s.props),{value:[String,Number],max:Number,dot:Boolean,type:{type:String,default:"default"},show:{type:Boolean,default:!0},showZero:Boolean,processing:Boolean,color:String,offset:Array}),setup(e,{slots:a}){const{mergedClsPrefixRef:n,inlineThemeDisabled:o,mergedRtlRef:u}=r(e),c=s("Badge","-badge",qe,Me,e,n),p=Y(!1),v=A(()=>e.show&&(e.dot||void 0!==e.value&&!(!e.showZero&&Number(e.value)<=0)||!i(a.value)));O(()=>{v.value&&(p.value=!0)});const f=t("Badge",u,n),m=A(()=>{const{type:a,color:t}=e,{common:{cubicBezierEaseInOut:l,cubicBezierEaseOut:s},self:{[g("color",a)]:n,fontFamily:i,fontSize:o}}=c.value;return{"--n-font-size":o,"--n-font-family":i,"--n-color":t||n,"--n-ripple-color":t||n,"--n-bezier":l,"--n-ripple-bezier":s}}),y=o?d("badge",A(()=>{let a="";const{type:t,color:s}=e;return t&&(a+=t[0]),s&&(a+=l(s)),a}),m,e):void 0,h=A(()=>{const{offset:a}=e;if(!a)return;const[t,l]=a,s="number"==typeof t?`${t}px`:t,n="number"==typeof l?`${l}px`:l;return{transform:`translate(calc(${(null==f?void 0:f.value)?"50%":"-50%"} + ${s}), ${n})`}});return{rtlEnabled:f,mergedClsPrefix:n,appeared:p,showBadge:v,handleAfterEnter:()=>{p.value=!0},handleAfterLeave:()=>{p.value=!1},cssVars:o?void 0:m,themeClass:null==y?void 0:y.themeClass,onRender:null==y?void 0:y.onRender,offsetStyle:h}},render(){var e;const{mergedClsPrefix:a,onRender:t,themeClass:l,$slots:s}=this;null==t||t();const n=null===(e=s.default)||void 0===e?void 0:e.call(s);return C("div",{class:[`${a}-badge`,this.rtlEnabled&&`${a}-badge--rtl`,l,{[`${a}-badge--dot`]:this.dot,[`${a}-badge--as-is`]:!n}],style:this.cssVars},n,C(E,{name:"fade-in-scale-up-transition",onAfterEnter:this.handleAfterEnter,onAfterLeave:this.handleAfterLeave},{default:()=>this.showBadge?C("sup",{class:`${a}-badge-sup`,title:Re(this.value),style:this.offsetStyle},h(s.value,()=>[this.dot?null:C(Fe,{clsPrefix:a,appeared:this.appeared,max:this.max,value:this.value})]),this.processing?C(v,{clsPrefix:a}):null):null}))}}),He={class:"remote-provider-fields"},Xe={class:"remote-field-label"},Ke=m({__name:"RemoteProviderFields",props:{provider:{type:Object,required:!0},definition:{type:Object,default:null}},setup(e){const a=e,t=A(()=>Array.isArray(a.definition?.fields)?a.definition.fields:[]);function l(e){const t=e?.visibleWhen;return!t||"object"!=typeof t||a.provider?.config?.[t.key]===t.equals}function s(e){return"secret"===e.type?"password":"text"}return(a,n)=>(U(),q("div",He,[(U(!0),q(T,null,z(t.value,a=>J((U(),q("div",{key:a.key,class:M(["remote-field",{"remote-field-wide":!0===a.wide}])},[V("span",Xe,N(a.label),1),"select"===a.type?(U(),S(D(Be),{key:0,value:e.provider.config[a.key],"onUpdate:value":t=>e.provider.config[a.key]=t,size:"small",options:a.options||[],placeholder:a.placeholder},null,8,["value","onUpdate:value","options","placeholder"])):(U(),S(D(Ie),{key:1,value:e.provider.config[a.key],"onUpdate:value":t=>e.provider.config[a.key]=t,size:"small",type:s(a),"show-password-on":"secret"===a.type?"click":void 0,placeholder:a.placeholder},null,8,["value","onUpdate:value","type","show-password-on","placeholder"]))],2)),[[B,l(a)]])),128))]))}},[["__scopeId","data-v-44913e2a"]]);var Ze={class:"settings-container"},Ge={class:"settings-sidebar"},Qe={class:"sidebar-header"},ea={class:"settings-menu"},aa=["onClick"],ta={class:"menu-label"},la={class:"settings-content"},sa={class:"settings-panel"},na={class:"panel-header"},ia={class:"panel-title-row"},oa={class:"panel-body"},ra={class:"setting-group"},ua={class:"setting-item"},da={class:"setting-label"},ca={class:"visibility-options"},pa={class:"visibility-item"},va={class:"visibility-info"},fa={class:"visibility-item"},ma={class:"visibility-info"},ya={class:"visibility-item"},ga={class:"visibility-info"},ha={class:"setting-item"},ba={class:"setting-label"},wa={class:"home-cli-settings"},xa={class:"platform-catalog-list"},ka={key:0,class:"platform-order-actions"},_a={class:"home-cli-actions"},za={class:"setting-item"},Ca={class:"setting-label"},Pa={class:"simple-theme-options"},Sa={class:"theme-text"},Oa={key:0,class:"theme-check"},Ua={class:"theme-text"},ja={key:0,class:"theme-check"},Ia={class:"settings-panel"},Na={class:"panel-header"},Aa={class:"panel-title-row"},La={class:"panel-body"},$a={class:"setting-group"},Ba={class:"setting-item"},Ta={class:"setting-label"},Ma={class:"notification-options"},Ea={class:"visibility-item"},Ra={class:"visibility-info"},Da={key:1,class:"notification-type-section"},Wa={class:"radio-content"},Ya={class:"radio-content"},Ja={class:"radio-content"},Fa={style:{"font-size":"13px"}},qa={class:"setting-item"},Va={class:"setting-label"},Ha={class:"notification-options"},Xa={class:"remote-provider-toolbar"},Ka={class:"remote-provider-header"},Za={class:"remote-provider-title-row"},Ga={class:"remote-provider-avatar"},Qa={class:"remote-provider-title"},et={class:"remote-provider-name-row"},at={class:"remote-provider-fields"},tt={class:"remote-field remote-field-wide"},lt={class:"remote-fields-descriptor"},st={class:"remote-provider-actions"},nt={class:"panel-footer"},it={class:"settings-panel"},ot={class:"panel-header"},rt={class:"panel-title-row"},ut={class:"panel-body"},dt={class:"setting-group"},ct={class:"setting-item"},pt={class:"setting-label"},vt={class:"ports-grid"},ft={class:"setting-item"},mt={class:"setting-label"},yt={class:"advanced-options"},gt={class:"option-field"},ht={class:"option-label"},bt={class:"setting-item"},wt={class:"setting-label"},xt={class:"advanced-options"},kt={class:"option-field"},_t={class:"option-label"},zt={class:"option-field"},Ct={class:"option-label"},Pt={class:"option-field"},St={class:"option-label"},Ot={class:"option-field"},Ut={class:"option-label"},jt={class:"setting-item"},It={class:"setting-label"},Nt={style:{"margin-top":"16px"}},At={style:{background:"var(--bg-secondary)",padding:"16px","border-radius":"8px","border-left":"3px solid var(--border-secondary)"}},Lt={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},$t={class:"panel-footer"},Bt={class:"settings-panel"},Tt={class:"panel-header"},Mt={class:"panel-title-row"},Et={class:"panel-body"},Rt={class:"setting-group"},Dt={class:"setting-item"},Wt={class:"setting-label"},Yt={class:"security-status"},Jt={class:"setting-item"},Ft={class:"setting-label"},qt={class:"security-form"},Vt={class:"panel-footer"},Ht={class:"settings-panel"},Xt={class:"panel-header"},Kt={class:"panel-title-row"},Zt={class:"panel-body"},Gt={class:"setting-item",style:{"margin-bottom":"12px"}},Qt={class:"model-meta-section"},el={class:"speed-test-defaults"},al={class:"speed-test-default-label"},tl={class:"model-toolbar"},ll={class:"model-filter-row"},sl={key:0,class:"setting-item"},nl={key:1,class:"model-list"},il=["onClick"],ol={class:"model-card-id"},rl={key:0,class:"model-card-body"},ul={class:"model-meta-editor"},dl={class:"model-meta-section"},cl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"8px"}},pl={class:"model-meta-section",style:{"margin-top":"8px"}},vl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"8px"}},fl={class:"panel-footer"},ml={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"12px"}},yl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"12px"}},gl={style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"12px"}},hl=m({__name:"SettingsDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(e,{emit:a}){const{drawerWidth:t,isMobile:l}=xe(720),s=Q(),{uiConfig:n}=X();async function i(e){return(await H.post("/settings/model-settings",e)).data}async function o(e){return(await H.delete(`/settings/model-settings/${encodeURIComponent(e)}`)).data}const r=e,u=a,d=A({get:()=>r.visible,set:e=>u("update:visible",e)}),p=Y("appearance"),{isDark:v,toggleTheme:m}=De(),y=Y(!0),g=Y(!0),h=Y(!1),b=Y({webUI:19999}),w=Y({webUI:19999}),_=A(()=>[{key:"webUI",label:"Web UI",defaultPort:19999},...s.all.filter(e=>e.portKey&&Number.isFinite(e.defaultPort)).sort((e,a)=>(e.sortOrder||0)-(a.sortOrder||0)).map(e=>({key:e.portKey,label:e.portLabel||e.label||e.key,defaultPort:e.defaultPort}))]),C=Y(!1),L=Y([...G]),E=Y([...G]),F=Y(!1),ge=Y(!1),Me=Y(!1),Re=A(()=>ge.value?"[v] 已启用":"未启用"),We=A(()=>ge.value?"重启电脑时 coding-tool-x 会自动启动。如需禁用,点击下方按钮":"启用后,重启电脑时 coding-tool-x 会自动启动");function Ye(e={}){const a=(e?.omp&&"object"==typeof e.omp&&!Array.isArray(e.omp)?e.omp:null)||e,t=Number.isInteger(a.intervalSeconds)&&a.intervalSeconds>=1&&a.intervalSeconds<=60?a.intervalSeconds:5;return{enabled:"boolean"!=typeof a.enabled||a.enabled,intervalSeconds:t}}function Je(e={}){return{maxLogs:e.maxLogs??100,statsInterval:e.statsInterval??30,enableSessionBinding:!1!==e.enableSessionBinding,nativeCliLogs:Ye(e.nativeCliLogs)}}const Fe=Y(Je()),qe=Y(Je()),He=Y([]),Xe=Y([]);function hl(e={}){const a=String(e.key||"").trim();return a?{key:a,label:String(e.label||a),description:"string"==typeof e.description?e.description:"",implementation:"string"==typeof e.implementation?e.implementation:"",externalMessage:"string"==typeof e.externalMessage?e.externalMessage:"",hints:Array.isArray(e.hints)?e.hints.filter(e=>"string"==typeof e):[]}:null}function bl(e={}){return{enabled:!0===e.enabled,type:"dialog"===e.type||"browser"===e.type?e.type:"notification",external:!0===e.external}}function wl(e,a=Xe.value){return a.find(a=>a.type===e)||null}function xl(e){return wl(e)?.label||e||"远程通知"}function kl(e){const a=xl(e).trim();return Array.from(a)[0]||"通"}function _l(e={},a=He.value,t=Xe.value){const l={enabled:e?.stopHook?.enabled,type:e?.stopHook?.type},s=e.platforms&&"object"==typeof e.platforms&&!Array.isArray(e.platforms)?e.platforms:{};return{platforms:Object.fromEntries(a.map(e=>[e.key,bl(s[e.key]||("claude"===e.key?l:{}))])),remoteNotifications:{providers:Array.isArray(e?.remoteNotifications?.providers)?e.remoteNotifications.providers.map(e=>function(e={},a=Xe.value){const t=String(e.type||"").trim(),l=wl(t,a)||a[0],s=l?.type||t;if(!s)return null;const n=l?.defaults&&"object"==typeof l.defaults?l.defaults:{};return{id:e.id||`${s}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,type:s,name:e.name||l?.label||s,enabled:!0===e.enabled,config:{...n,...e.config&&"object"==typeof e.config?e.config:{}}}}(e,t)).filter(Boolean):[]}}}const zl=Y(_l()),Cl=Y(_l()),Pl=Y(!1),Sl=Y(""),Ol=Y(""),Ul=A(()=>Xe.value.map(e=>({label:e.label||e.type,value:e.type}))),jl=Y(""),Il=Y("default"),Nl=A(()=>"undefined"!=typeof window&&"undefined"!=typeof Notification&&(!!window.isSecureContext||["localhost","127.0.0.1","::1"].includes(window.location.hostname))),Al=A(()=>Nl.value?"granted"===Il.value?"已授权":"denied"===Il.value?"已被浏览器拒绝,请在浏览器站点设置里重新开启":"尚未授权,保存时会请求浏览器权限":"当前环境不支持浏览器通知,请使用 localhost 或 HTTPS 页面");function Ll(e="notification"){if("browser"===e)return"浏览器通知";if("dialog"===e)return"确认式弹窗";switch(jl.value){case"win32":return"右上角悬浮卡片";case"darwin":return"角落横幅通知";case"linux":return"桌面环境通知";default:return"轻提醒卡片"}}function $l(e="notification"){return"browser"===e?Nl.value?"granted"===Il.value?"通过当前打开的 Web 页面显示浏览器原生通知":"denied"===Il.value?"浏览器通知权限已被拒绝,需要先在浏览器中重新授权":"通过当前打开的 Web 页面显示原生通知,保存时会请求权限":"当前页面环境不支持浏览器通知":"dialog"===e?"强制提醒,需要手动点击确认才能关闭":"win32"===jl.value?"轻量提醒,几秒后自动消失,带提示音(Windows 使用系统 Toast 风格提醒)":"轻量提醒,几秒后自动消失,带提示音"}function Bl(){"undefined"!=typeof Notification?Il.value=Notification.permission:Il.value="unsupported"}function Tl(){const e=function(e=Xe.value[0]?.type){const a=wl(e);return a?{id:`${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,type:e,name:xl(e),enabled:!1,config:{...a.defaults&&"object"==typeof a.defaults?a.defaults:{}}}:null}(Ol.value);e&&zl.value.remoteNotifications.providers.push(e)}const Ml=Y({hasPassword:!1}),El=Y(!1),Rl=Y(!1),Dl=Y({currentPassword:"",newPassword:"",confirmPassword:""}),Wl=Y(!1),Yl=A(()=>{const e=Dl.value.currentPassword.trim(),a=Dl.value.newPassword,t=Dl.value.confirmPassword;return Ml.value.hasPassword&&!e?"请输入当前密码":a?a.length<4?"新密码至少需要 4 位":t&&a!==t?"两次输入的新密码不一致":"":""}),Jl=A(()=>{const e=Dl.value;return(!Ml.value.hasPassword||Boolean(e.currentPassword.trim()))&&e.newPassword.length>=4&&e.newPassword===e.confirmPassword});let Fl=null;const ql=Y({name:"Models.dev",url:"",lastUpdated:""}),Vl=Y(!1),Hl=Y(!1),Xl=Y({}),Kl=Y({}),Zl=Y({}),Gl=Y(""),Ql=Y("all"),es=Y(!1),as=Y({modelId:"",context:128e3,output:8192,inputPrice:0,outputPrice:0,cacheCreationPrice:0,cacheReadPrice:0}),ts=Y(new Set),ls=Y({}),ss=Y({}),ns=A(()=>Object.keys(ls.value).map(e=>{const a="function"==typeof s.get?s.get(e):null;return{key:e,label:a?.label||a?.title||e}})),is=Y(new Set),os=A(()=>Object.keys(Zl.value).length>0),rs=A(()=>os.value||JSON.stringify(ls.value)!==JSON.stringify(ss.value)),us=A(()=>{const e=String(as.value.modelId||"").trim();if(!e)return"请输入模型 ID";const a=Object.keys(Xl.value).find(a=>a.toLowerCase()===e.toLowerCase());return a?`模型已存在:${a}`:!Number.isFinite(as.value.context)||as.value.context<=0?"Context 窗口必须为正数":!Number.isFinite(as.value.output)||as.value.output<=0?"Max Output 必须为正数":as.value.inputPrice<0||as.value.outputPrice<0||as.value.cacheCreationPrice<0||as.value.cacheReadPrice<0?"价格不能为负数":""});function ds(){as.value={modelId:"",context:128e3,output:8192,inputPrice:0,outputPrice:0,cacheCreationPrice:0,cacheReadPrice:0},es.value=!0}function cs(){es.value=!1}function ps(){if(us.value)return;const e=String(as.value.modelId||"").trim(),a={limit:{context:as.value.context,output:as.value.output},pricing:{input:as.value.inputPrice,output:as.value.outputPrice,cacheCreation:as.value.cacheCreationPrice,cacheRead:as.value.cacheReadPrice}};Xl.value[e]=a,Zl.value[e]={limit:{...a.limit},pricing:{...a.pricing}},Gl.value=e,es.value=!1,Se.success("模型已新增,请点击“保存设置”使其生效")}function vs(e){return ts.value.has(e)}function fs(e){return!vs(e)}const ms={claude:"claude",openai:"codex",gemini:"gemini"},ys=A(()=>{const e=Object.keys(Xl.value),a=Gl.value.trim().toLowerCase(),t=Ql.value,l=ms[t];return e.filter(e=>{if(a&&!e.toLowerCase().includes(a))return!1;const s=Xl.value[e];return"compatible"===t?!!Array.isArray(s?.toolTypes)&&(s.toolTypes.includes("opencode")||s.toolTypes.includes("omp")):l?Array.isArray(s?.toolTypes)?s.toolTypes.includes(l):gs(e,s)===l:"overrides"!==t||!!Kl.value[e]})});function gs(e,a=Xl.value[e]){const t=String(e||"").trim().toLowerCase(),l=hs(a);return l.length>0?l[0]:t.startsWith("claude-")?"claude":t.startsWith("gemini-")?"gemini":t.startsWith("gpt-")||t.startsWith("o1")||t.startsWith("o3")||t.startsWith("o4")?"codex":""}function hs(e={}){return Array.isArray(e?.toolTypes)?[...new Set(e.toolTypes.filter(e=>"string"==typeof e).map(e=>e.trim()).filter(Boolean))]:[]}const bs=A(()=>{const e=Object.fromEntries(ns.value.map(e=>[e.key,[]]));for(const[a,t]of Object.entries(Xl.value||{})){if(!t||"object"!=typeof t||!t.limit||!t.pricing)continue;const l=hs(t),s=l.length>0?"":gs(a,t);for(const t of l.length>0?l:[s])t&&e[t]&&e[t].push({label:a,value:a})}for(const a of Object.keys(e))e[a].sort((e,a)=>e.label.localeCompare(a.label));for(const a of ns.value){const t=String(ls.value[a.key]||"").trim();t&&e[a.key]&&(e[a.key].some(e=>e.value===t)||e[a.key].push({label:`${t}(自定义)`,value:t}))}return e});function ws(e,a,t){return void 0!==Zl.value[e]?.[a]?.[t]?Zl.value[e][a][t]:Xl.value[e]?.[a]?.[t]??null}function xs(e,a,t,l){if(!Zl.value[e]){const a=Xl.value[e]||{};Zl.value[e]={limit:{...a.limit||{}},pricing:{...a.pricing||{}}}}Zl.value[e][a]||(Zl.value[e][a]={}),Zl.value[e][a][t]=l}async function ks(){Vl.value=!0;try{const e=await async function(){return(await H.get("/settings/model-settings")).data}(),a=e.metadataSource||{};ql.value={name:a.name||"Models.dev",url:a.url||"",lastUpdated:a.lastUpdated||""},Xl.value=e.models&&"object"==typeof e.models&&!Array.isArray(e.models)?e.models:{};const t=e.overrides??e.modelMetadataOverrides;Kl.value={...t&&"object"==typeof t&&!Array.isArray(t)?t:{}};const l=Array.isArray(e.builtinModelIds)?e.builtinModelIds:Object.keys(Xl.value);ts.value=new Set(l.filter(e=>"string"==typeof e&&e.trim())),ls.value=Object.fromEntries(Object.entries(e.defaultSpeedTestModels||{}).filter(([,e])=>"string"==typeof e&&e.trim())),function(){const e={...ls.value};let a=!1;for(const t of ns.value){const l=bs.value[t.key]||[];0!==l.length&&(new Set(l.map(e=>e.value)).has(e[t.key])||(e[t.key]=l[0].value,a=!0))}a&&(ls.value=e)}(),ss.value={...ls.value},Zl.value={}}catch(e){}finally{Vl.value=!1}}async function _s(){Hl.value=!0;try{const e={...Kl.value};for(const[a,t]of Object.entries(Zl.value)){const l=e[a]||{};e[a]={limit:{...l.limit||{},...t.limit||{}},pricing:{...l.pricing||{},...t.pricing||{}}}}await i({overrides:e,defaultSpeedTestModels:ls.value}),Kl.value=e,ss.value={...ls.value},Zl.value={},await ks(),Se.success("模型设置已保存")}catch(e){Se.error("保存失败:"+e.message)}finally{Hl.value=!1}}async function zs(){try{await i({overrides:{},defaultSpeedTestModels:ls.value}),Kl.value={},Zl.value={},await ks(),Se.success("全部模型设置已重置为内置默认值")}catch(e){Se.error("重置失败:"+e.message)}}const Cs=A(()=>{const e=Object.keys(b.value).some(e=>b.value[e]!==w.value[e]),a=Fe.value.nativeCliLogs.enabled!==qe.value.nativeCliLogs.enabled||Fe.value.nativeCliLogs.intervalSeconds!==qe.value.nativeCliLogs.intervalSeconds;return e||Fe.value.maxLogs!==qe.value.maxLogs||Fe.value.statsInterval!==qe.value.statsInterval||Fe.value.enableSessionBinding!==qe.value.enableSessionBinding||a}),Ps=A(()=>[{key:"appearance",label:"外观设置",icon:W(oe)},{key:"notification",label:"通知设置",icon:W(ae)},{key:"advanced",label:"高级设置",icon:W(se)},{key:"security",label:"安全设置",icon:W(de)},{key:"model-settings",label:"模型设置",icon:W(re)}]),Ss=A(()=>{const e=Array.isArray(s.all)?s.all:[],a=new Map(e.map(e=>[e.key,e])),t=L.value.map(e=>a.get(e)).filter(Boolean),l=new Set(t.map(e=>e.key)),n=e.filter(e=>!l.has(e.key));return[...t,...n]});function Os(e){return String(e||"").trim().toLowerCase()}function Us(e=He.value){const a=new Set((Array.isArray(s.all)?s.all:[]).map(e=>Os(e.key)).filter(Boolean)),t=new Set(L.value.map(Os).filter(Boolean));return e.filter(e=>{const l=Os(e.key);return!a.has(l)||t.has(l)})}const js=A(()=>Us());const Is=A(()=>JSON.stringify(L.value)!==JSON.stringify(E.value));function Ns(e){return L.value.indexOf(e)}function As(e,a){const t=Ns(e),l=t+a;if(t<0||l<0||l>=L.value.length)return;const s=[...L.value],[n]=s.splice(t,1);s.splice(l,0,n),L.value=s}function Ls(){L.value=[...G]}async function $s(){try{const e=await K();if(e.success&&e.config){y.value=!1!==e.config.panelVisibility?.showChannels,g.value=!1!==e.config.panelVisibility?.showLogs,h.value=!0===e.config.channelBalance?.showRemaining;const a=Array.isArray(e.config.enabledCliPlatforms)?e.config.enabledCliPlatforms:G;L.value=[...a],E.value=[...a]}}catch(e){}}async function Bs(){F.value=!0;try{const e=await Z({enabledCliPlatforms:[...L.value]});if(!e.success)throw new Error(e.message||"保存失败");const a=Array.isArray(e.config?.enabledCliPlatforms)?[...e.config.enabledCliPlatforms]:[...L.value];L.value=[...a],E.value=[...a],n.value={...n.value,enabledCliPlatforms:[...a]},window.dispatchEvent(new CustomEvent("enabled-cli-platforms-change",{detail:{enabledCliPlatforms:[...a]}})),Se.success("首页 CLI 显示已保存")}catch(e){Se.error("保存失败: "+e.message)}finally{F.value=!1}}async function Ts(){try{await ee("panelVisibility","showChannels",y.value),await ee("panelVisibility","showLogs",g.value),await ee("channelBalance","showRemaining",h.value)}catch(e){}}function Ms(e){y.value=e,Ts(),window.dispatchEvent(new CustomEvent("panel-visibility-change",{detail:{showChannels:e,showLogs:g.value}}))}function Es(e){g.value=e,Ts(),window.dispatchEvent(new CustomEvent("panel-visibility-change",{detail:{showChannels:y.value,showLogs:e}}))}function Rs(e){h.value=e,Ts(),window.dispatchEvent(new CustomEvent("channel-balance-visibility-change",{detail:{showRemaining:e}}))}async function Ds(e){try{(await fetch("/api/config/advanced",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ports:b.value,maxLogs:Fe.value.maxLogs,statsInterval:Fe.value.statsInterval,enableSessionBinding:e,nativeCliLogs:Fe.value.nativeCliLogs})})).ok?(qe.value=Je(Fe.value),Se.success(e?"会话绑定已开启":"会话绑定已关闭")):(Fe.value.enableSessionBinding=!e,Se.error("保存失���"))}catch(a){Fe.value.enableSessionBinding=!e,Se.error("保存失败: "+a.message)}}function Ws(e={}){const a=function(e={}){const a=Array.isArray(e.platformDefinitions)?e.platformDefinitions.map(hl).filter(Boolean):[];if(a.length>0)return a;const t=e.platforms&&"object"==typeof e.platforms&&!Array.isArray(e.platforms)?e.platforms:{},l=Object.keys(t);return 0===l.length&&e.stopHook&&"object"==typeof e.stopHook&&l.push("claude"),l.map(e=>hl({key:e,label:e})).filter(Boolean)}(e),t=function(e={}){const a=Array.isArray(e.remoteProviderTypes)?e.remoteProviderTypes.map(e=>({...e,type:String(e?.type||"").trim()})).filter(e=>e.type):[],t=new Set(a.map(e=>e.type)),l=Array.isArray(e.remoteNotifications?.providers)?e.remoteNotifications.providers:[];for(const s of l){const e=String(s?.type||"").trim();e&&!t.has(e)&&(a.push({type:e,label:e,description:"",hint:"",defaults:{},fields:[]}),t.add(e))}return a}(e);return He.value=a,Xe.value=t,t.some(e=>e.type===Ol.value)||(Ol.value=t[0]?.type||""),{definitions:a,providerDefinitions:t}}async function Ys(){try{const e=await fetch("/api/hooks");if(e.ok){const a=await e.json(),{definitions:t,providerDefinitions:l}=Ws(a),s=_l(a,Us(t),l);zl.value=s,Cl.value=JSON.parse(JSON.stringify(s)),jl.value=a.platform||"",Bl()}}catch(e){}}async function Js(){Pl.value=!0;try{const e=new Set(js.value.map(e=>e.key));Object.entries(zl.value.platforms||{}).filter(([a])=>e.has(a)).some(([,e])=>!0===e?.enabled&&"browser"===e.type)&&await async function(){if(!Nl.value)throw new Error("当前页面环境不支持浏览器通知,请改用 HTTPS 或 localhost 页面");if(Bl(),"granted"===Il.value)return;const e=await Notification.requestPermission();if(Il.value=e,"granted"!==e)throw new Error("浏览器通知权限未授予")}();const a=await fetch("/api/hooks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({platforms:Object.fromEntries(Object.entries(zl.value.platforms||{}).filter(([a])=>e.has(a)).map(([e,a])=>[e,{enabled:a.enabled,type:a.type}])),remoteNotifications:{providers:zl.value.remoteNotifications.providers}})});if(a.ok){const e=await a.json(),{definitions:t,providerDefinitions:l}=Ws(e),s=_l(e,Us(t),l);zl.value=s,Cl.value=JSON.parse(JSON.stringify(s)),jl.value=e.platform||jl.value,Se.success("通知设置已保存")}else{const e=await a.json();Se.error("保存失败:"+(e.error||"未知错误"))}}catch(e){Se.error("保存失败:"+e.message)}finally{Pl.value=!1}}function Fs(){Dl.value={currentPassword:"",newPassword:"",confirmPassword:""}}async function qs(e=!1){return Rl.value&&Fl?Fl:El.value&&!e?Promise.resolve():(Rl.value=!0,Fl=(async()=>{try{const e=await _e();e.success&&(Ml.value={hasPassword:Boolean(e.hasPassword)},El.value=!0)}catch(e){}finally{Rl.value=!1,Fl=null}})(),Fl)}async function Vs(){if(!Jl.value)return void Se.warning("请完善密码信息");const e=Ml.value.hasPassword;Wl.value=!0;try{const a={newPassword:Dl.value.newPassword};Ml.value.hasPassword&&(a.currentPassword=Dl.value.currentPassword);const t=await Le(a);t.success?(Ml.value.hasPassword=!0,El.value=!0,Fs(),Se.success(e?"密码已更新":"密码已设置")):Se.error(t.error||"保存失败")}catch(a){Se.error(a.response?.data?.error||"保存失败")}finally{Wl.value=!1}}async function Hs(){C.value=!0;try{const e=await fetch("/api/config/advanced",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ports:b.value,maxLogs:Fe.value.maxLogs,statsInterval:Fe.value.statsInterval,enableSessionBinding:Fe.value.enableSessionBinding,nativeCliLogs:Fe.value.nativeCliLogs})});if(e.ok)w.value={...b.value},qe.value=Je(Fe.value),window.dispatchEvent(new CustomEvent("advanced-config-change",{detail:{maxLogs:Fe.value.maxLogs,statsInterval:Fe.value.statsInterval}})),Se.success("配置已保存,端口修改需要重启服务器生效;OMP 原生会话日志配置立即生效");else{const a=await e.json();Se.error("保存失败:"+(a.error||"未知错误"))}}catch(e){Se.error("保存失败:"+e.message)}finally{C.value=!1}}async function Xs(){try{const e=await async function(){return(await H.get("/pm2-autostart")).data}();e&&e.success?ge.value=e.data?.enabled||!1:ge.value=!1}catch(e){ge.value=!1}}async function Ks(){Me.value=!0;try{const e=await async function(){return(await H.post("/pm2-autostart",{action:"enable"})).data}();if(e.success)ge.value=!0,Se.success("开机自启已启用");else{const a=e.message||"未知错误";a.includes("暂无运行中的进程")||a.includes("请先启动")?Se.warning(a):Se.error(a)}}catch(e){Se.error(e.message||"启用失败:未知错误")}finally{Me.value=!1}}async function Zs(){Me.value=!0;try{const e=await async function(){return(await H.post("/pm2-autostart",{action:"disable"})).data}();if(e.success)ge.value=!1,Se.success("开机自启已禁用");else{const a=e.message||"未知错误";a.includes("未启用")||a.includes("不存在")?Se.warning(a):Se.error(a)}}catch(e){Se.error(e.message||"禁用失败:未知错误")}finally{Me.value=!1}}return O(()=>{"function"==typeof s.load&&s.load(),$s(),qs(),ks(),r.visible&&Ys()}),I(d,e=>{e?($s(),async function(){try{"function"==typeof s.load&&await s.load();const e=await fetch("/api/config/advanced");if(e.ok){const a=await e.json(),t={};for(const e of _.value)t[e.key]=a.ports?.[e.key]||e.defaultPort;b.value=t,w.value={...b.value},Fe.value=Je({maxLogs:a.maxLogs||100,statsInterval:a.statsInterval||30,enableSessionBinding:!1!==a.enableSessionBinding,nativeCliLogs:a.nativeCliLogs}),qe.value=Je(Fe.value)}}catch(e){}}(),Xs(),Ys(),ks(),qs(!0)):Fs()}),I(p,(e,a)=>{"security"===e&&qs(),"security"===a&&"security"!==e&&Fs()}),(e,a)=>(U(),S(D(we),{show:d.value,"onUpdate:show":a[25]||(a[25]=e=>d.value=e),width:D(t),placement:"right","show-mask":!0},{default:$(()=>[P(D(ke),{"show-header":!1,closable:"","native-scrollbar":!1},{default:$(()=>[V("div",Ze,[V("div",Ge,[V("div",Qe,[P(D(c),{size:"20",color:"var(--text-secondary)"},{default:$(()=>[P(D(ue))]),_:1}),a[26]||(a[26]=V("span",{class:"sidebar-title"},"设置分类",-1))]),V("div",ea,[(U(!0),q(T,null,z(Ps.value,e=>(U(),q("div",{key:e.key,class:M(["menu-item",{active:p.value===e.key}]),onClick:a=>p.value=e.key},[P(D(c),{size:18,class:"menu-icon"},{default:$(()=>[(U(),S(j(e.icon)))]),_:2},1024),V("span",ta,N(e.label),1),e.badge?(U(),S(D(Ve),{key:0,value:e.badge,type:e.badgeType||"info","show-zero":!1},null,8,["value","type"])):x("",!0)],10,aa))),128))])]),V("div",la,[J(V("div",sa,[V("div",na,[V("div",ia,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(oe))]),_:1}),V("div",null,[a[28]||(a[28]=V("h3",{class:"panel-title"},"外观设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[27]||(a[27]=[k("自定义界面外观和主题",-1)])]),_:1})])])]),V("div",oa,[V("div",ra,[V("div",ua,[V("div",da,[P(D(Oe),{strong:""},{default:$(()=>[...a[29]||(a[29]=[k("面板显示",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[30]||(a[30]=[k(" 控制右侧面板中各个区域的显示 ",-1)])]),_:1})]),V("div",ca,[V("div",pa,[V("div",va,[P(D(Oe),{strong:""},{default:$(()=>[...a[31]||(a[31]=[k("显示渠道列表",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[...a[32]||(a[32]=[k(" 在右侧面板显示 API 渠道管理区域 ",-1)])]),_:1})]),P(D(ze),{value:y.value,"onUpdate:value":Ms},null,8,["value"])]),V("div",fa,[V("div",ma,[P(D(Oe),{strong:""},{default:$(()=>[...a[33]||(a[33]=[k("显示实时日志",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[...a[34]||(a[34]=[k(" 在 Dashboard 显示实时日志区域 ",-1)])]),_:1})]),P(D(ze),{value:g.value,"onUpdate:value":Es},null,8,["value"])]),V("div",ya,[V("div",ga,[P(D(Oe),{strong:""},{default:$(()=>[...a[35]||(a[35]=[k("显示剩余金额",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[...a[36]||(a[36]=[k(" 在渠道卡片显示可识别 API 网关的余额 ",-1)])]),_:1})]),P(D(ze),{value:h.value,"onUpdate:value":Rs},null,8,["value"])])])]),P(D(be)),V("div",ha,[V("div",ba,[P(D(Oe),{strong:""},{default:$(()=>[...a[37]||(a[37]=[k("首页 CLI 显示",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[38]||(a[38]=[k(" 从已注册的平台目录中选择并排序首页显示的 CLI ",-1)])]),_:1})]),V("div",wa,[V("div",xa,[(U(!0),q(T,null,z(Ss.value,e=>(U(),q("div",{key:e.key,class:"platform-catalog-item"},[P(D(je),{checked:L.value.includes(e.key),"onUpdate:checked":a=>function(e,a){const t=L.value.filter(a=>a!==e);a&&t.push(e),L.value=t}(e.key,a)},{default:$(()=>[k(N(e.label||e.title||e.key),1)]),_:2},1032,["checked","onUpdate:checked"]),L.value.includes(e.key)?(U(),q("div",ka,[P(D(f),{text:"",size:"small",disabled:0===Ns(e.key),"aria-label":"上移",onClick:a=>As(e.key,-1)},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ne))]),_:1})]),_:1},8,["disabled","onClick"]),P(D(f),{text:"",size:"small",disabled:Ns(e.key)===L.value.length-1,"aria-label":"下移",onClick:a=>As(e.key,1)},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ie))]),_:1})]),_:1},8,["disabled","onClick"])])):x("",!0)]))),128))]),V("div",_a,[P(D(f),{size:"small",onClick:Ls},{default:$(()=>[...a[39]||(a[39]=[k("恢复默认显示",-1)])]),_:1}),P(D(f),{type:"primary",size:"small",loading:F.value,disabled:!Is.value,onClick:Bs},{default:$(()=>[...a[40]||(a[40]=[k(" 保存首页显示 ",-1)])]),_:1},8,["loading","disabled"])])])]),P(D(be)),V("div",za,[V("div",Ca,[P(D(Oe),{strong:""},{default:$(()=>[...a[41]||(a[41]=[k("界面主题",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[42]||(a[42]=[k(" 选择你喜欢的界面主题风格 ",-1)])]),_:1})]),V("div",Pa,[V("div",{class:M(["simple-theme-item",{active:!D(v)}]),onClick:a[0]||(a[0]=e=>D(v)&&D(m)())},[P(D(c),{size:20,class:"theme-icon"},{default:$(()=>[P(D(pe))]),_:1}),V("div",Sa,[P(D(Oe),{strong:""},{default:$(()=>[...a[43]||(a[43]=[k("亮色模式",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[44]||(a[44]=[k("经典的浅色主题",-1)])]),_:1})]),D(v)?x("",!0):(U(),q("div",Oa,[P(D(c),{size:20,color:"#18a058"},{default:$(()=>[P(D(me))]),_:1})]))],2),V("div",{class:M(["simple-theme-item",{active:D(v)}]),onClick:a[1]||(a[1]=e=>!D(v)&&D(m)())},[P(D(c),{size:20,class:"theme-icon"},{default:$(()=>[P(D(le))]),_:1}),V("div",Ua,[P(D(Oe),{strong:""},{default:$(()=>[...a[45]||(a[45]=[k("暗色模式",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[46]||(a[46]=[k("护眼的深色主题",-1)])]),_:1})]),D(v)?(U(),q("div",ja,[P(D(c),{size:20,color:"#18a058"},{default:$(()=>[P(D(me))]),_:1})])):x("",!0)],2)])])])])],512),[[B,"appearance"===p.value]]),J(V("div",Ia,[V("div",Na,[V("div",Aa,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(ae))]),_:1}),V("div",null,[a[48]||(a[48]=V("h3",{class:"panel-title"},"通知设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[47]||(a[47]=[k("配置任务完成时的系统通知",-1)])]),_:1})])])]),V("div",La,[V("div",$a,[(U(!0),q(T,null,z(js.value,(e,t)=>(U(),q(T,{key:e.key},[V("div",Ba,[V("div",Ta,[P(D(Oe),{strong:""},{default:$(()=>[k(N(e.label),1)]),_:2},1024),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[k(N(e.description),1)]),_:2},1024)]),V("div",Ma,[V("div",Ea,[V("div",Ra,[P(D(Oe),{strong:""},{default:$(()=>[...a[49]||(a[49]=[k("启用任务完成通知",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px"}},{default:$(()=>[k(N(e.implementation),1)]),_:2},1024)]),P(D(ze),{value:zl.value.platforms[e.key].enabled,"onUpdate:value":a=>zl.value.platforms[e.key].enabled=a},null,8,["value","onUpdate:value"])]),zl.value.platforms[e.key].external?(U(),S(D($e),{key:0,type:"warning",bordered:!1,style:{"margin-top":"16px"}},{default:$(()=>[k(N(e.externalMessage),1)]),_:2},1024)):x("",!0),zl.value.platforms[e.key].enabled?(U(),q("div",Da,[P(D(Oe),{depth:"2",style:{"font-size":"13px","margin-bottom":"12px",display:"block"}},{default:$(()=>[...a[50]||(a[50]=[k(" 选择通知方式 ",-1)])]),_:1}),P(D(Ae),{value:zl.value.platforms[e.key].type,"onUpdate:value":a=>zl.value.platforms[e.key].type=a},{default:$(()=>[P(D(Pe),{vertical:""},{default:$(()=>[P(D(Ee),{value:"notification"},{default:$(()=>[V("div",Wa,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ll("notification")),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>[k(N($l("notification")),1)]),_:1})])]),_:1}),P(D(Ee),{value:"browser",disabled:!Nl.value},{default:$(()=>[V("div",Ya,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ll("browser")),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>[k(N($l("browser")),1)]),_:1})])]),_:1},8,["disabled"]),P(D(Ee),{value:"dialog"},{default:$(()=>[V("div",Ja,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ll("dialog")),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>[k(N($l("dialog")),1)]),_:1})])]),_:1})]),_:1})]),_:1},8,["value","onUpdate:value"]),"claude"===e.key&&"darwin"===jl.value?(U(),S(D($e),{key:0,type:"info",bordered:!1,style:{"margin-top":"16px"},"show-icon":!1},{default:$(()=>[V("div",Fa,[P(D(Oe),{strong:""},{default:$(()=>[...a[51]||(a[51]=[k("[TIP] 更好的通知体验",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{display:"block","margin-top":"4px","font-size":"12px"}},{default:$(()=>[...a[52]||(a[52]=[k(" 安装 terminal-notifier 后,点击通知可自动打开终端 ",-1)])]),_:1}),P(D(Oe),{code:"",style:{display:"block","margin-top":"8px","font-size":"12px"}},{default:$(()=>[...a[53]||(a[53]=[k(" brew install terminal-notifier ",-1)])]),_:1})])]),_:1})):x("",!0),"browser"===zl.value.platforms[e.key].type?(U(),S(D($e),{key:1,type:"info",bordered:!1,style:{"margin-top":"16px"}},{default:$(()=>[k(" 当前权限状态:"+N(Al.value),1)]),_:1})):x("",!0)])):x("",!0)])]),t<js.value.length-1?(U(),S(D(be),{key:0})):x("",!0)],64))),128)),P(D(be)),V("div",qa,[V("div",Va,[P(D(Oe),{strong:""},{default:$(()=>[...a[54]||(a[54]=[k("远程通知渠道",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[55]||(a[55]=[k(" 支持服务端注册的远程通知渠道 ",-1)])]),_:1})]),V("div",Ha,[V("div",Xa,[P(D(Be),{value:Ol.value,"onUpdate:value":a[2]||(a[2]=e=>Ol.value=e),options:Ul.value,size:"small",style:{"max-width":"220px"}},null,8,["value","options"]),P(D(f),{size:"small",secondary:"",type:"primary",onClick:Tl},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(te))]),_:1})]),default:$(()=>[a[56]||(a[56]=k(" 添加渠道 ",-1))]),_:1})]),0===zl.value.remoteNotifications.providers.length?(U(),S(D(Te),{key:0,description:"还没有远程通知渠道",style:{padding:"20px 0"}})):x("",!0),(U(!0),q(T,null,z(zl.value.remoteNotifications.providers,e=>(U(),q("div",{key:e.id,class:"remote-provider-card"},[V("div",Ka,[V("div",Za,[V("div",Ga,N(kl(e.type)),1),V("div",Qa,[V("div",et,[P(D(Oe),{strong:""},{default:$(()=>[k(N(e.name||xl(e.type)),1)]),_:2},1024),P(D(Ne),{size:"tiny",bordered:!1,type:e.enabled?"success":"default"},{default:$(()=>[k(N(e.enabled?"已启用":"未启用"),1)]),_:2},1032,["type"])]),P(D(Oe),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:$(()=>{return[k(N((a=e.type,wl(a)?.description||"")),1)];var a}),_:2},1024)])]),P(D(Pe),{size:"small",align:"center"},{default:$(()=>[P(D(ze),{value:e.enabled,"onUpdate:value":a=>e.enabled=a,size:"small"},null,8,["value","onUpdate:value"]),P(D(f),{size:"small",quaternary:"",circle:"",type:"error",onClick:a=>{return t=e.id,void(zl.value.remoteNotifications.providers=zl.value.remoteNotifications.providers.filter(e=>e.id!==t));var t}},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ce))]),_:1})]),_:1},8,["onClick"])]),_:2},1024)]),V("div",at,[V("div",tt,[a[57]||(a[57]=V("span",{class:"remote-field-label"},"渠道名称",-1)),P(D(Ie),{value:e.name,"onUpdate:value":a=>e.name=a,size:"small",placeholder:"例如:我的飞书"},null,8,["value","onUpdate:value"])]),V("div",lt,[P(Ke,{provider:e,definition:wl(e.type)},null,8,["provider","definition"])])]),V("div",st,[P(D(f),{size:"small",secondary:"",loading:Sl.value===e.id,onClick:a=>async function(e){Sl.value=e.id;try{const a=await fetch("/api/hooks/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e})}),t=await a.json().catch(()=>({}));if(!a.ok)throw new Error(t.error||"测试通知发送失败");Se.success(t.message||"测试通知已发送")}catch(a){Se.error("测试失败:"+a.message)}finally{Sl.value=""}}(e)},{default:$(()=>[...a[58]||(a[58]=[k(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>{return[k(N((a=e.type,wl(a)?.hint||"")),1)];var a}),_:2},1024)])]))),128))])])])]),V("div",nt,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:a[3]||(a[3]=e=>d.value=!1)},{default:$(()=>[...a[59]||(a[59]=[k(" 取消 ",-1)])]),_:1}),P(D(f),{type:"primary",size:"large",loading:Pl.value,disabled:JSON.stringify(zl.value)===JSON.stringify(Cl.value),onClick:Js},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[60]||(a[60]=k(" 保存设置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"notification"===p.value]]),J(V("div",it,[V("div",ot,[V("div",rt,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(se))]),_:1}),V("div",null,[a[62]||(a[62]=V("h3",{class:"panel-title"},"高级设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[61]||(a[61]=[k("端口配置和高级选项",-1)])]),_:1})])])]),V("div",ut,[V("div",dt,[V("div",ct,[V("div",pt,[P(D(Oe),{strong:""},{default:$(()=>[...a[63]||(a[63]=[k("端口配置",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[64]||(a[64]=[k(" 修改后需要重启服务器才能生效 ",-1)])]),_:1})]),V("div",vt,[(U(!0),q(T,null,z(_.value,e=>(U(),q("div",{key:e.key,class:"port-field"},[P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-bottom":"6px"}},{default:$(()=>[k(N(e.label),1)]),_:2},1024),P(D(Ue),{value:b.value[e.key],"onUpdate:value":a=>b.value[e.key]=a,min:1024,max:65535,"show-button":!1,placeholder:String(e.defaultPort)},{prefix:$(()=>[P(D(c),null,{default:$(()=>[P(D(se))]),_:1})]),_:1},8,["value","onUpdate:value","placeholder"])]))),128))])]),P(D(be)),V("div",ft,[V("div",mt,[P(D(Oe),{strong:""},{default:$(()=>[...a[65]||(a[65]=[k("负载均衡",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[66]||(a[66]=[k(" 多渠道负载均衡时的分配策略 ",-1)])]),_:1})]),V("div",yt,[V("div",gt,[V("div",ht,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[67]||(a[67]=[k("多渠道负载会话绑定",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[68]||(a[68]=[k("开启后同一对话始终使用同一渠道,保证上下文连续性",-1)])]),_:1})]),P(D(ze),{value:Fe.value.enableSessionBinding,"onUpdate:value":[a[4]||(a[4]=e=>Fe.value.enableSessionBinding=e),Ds],size:"medium"},null,8,["value"])])])]),P(D(be)),V("div",bt,[V("div",wt,[P(D(Oe),{strong:""},{default:$(()=>[...a[69]||(a[69]=[k("日志和性能",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[70]||(a[70]=[k(" 控制日志显示和数据刷新行为 ",-1)])]),_:1})]),V("div",xt,[V("div",kt,[V("div",_t,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[71]||(a[71]=[k("实时日志保留数量",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[72]||(a[72]=[k("超过此数量将自动清理旧日志",-1)])]),_:1})]),P(D(Ue),{value:Fe.value.maxLogs,"onUpdate:value":a[5]||(a[5]=e=>Fe.value.maxLogs=e),min:50,max:500,step:10,style:{width:"140px"}},{suffix:$(()=>[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[73]||(a[73]=[k("条",-1)])]),_:1})]),_:1},8,["value"])]),V("div",zt,[V("div",Ct,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[74]||(a[74]=[k("统计数据刷新间隔",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[75]||(a[75]=[k("自动刷新今日统计的时间间隔",-1)])]),_:1})]),P(D(Ue),{value:Fe.value.statsInterval,"onUpdate:value":a[6]||(a[6]=e=>Fe.value.statsInterval=e),min:10,max:300,step:5,style:{width:"140px"}},{suffix:$(()=>[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[76]||(a[76]=[k("秒",-1)])]),_:1})]),_:1},8,["value"])]),V("div",Pt,[V("div",St,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[77]||(a[77]=[k("CLI 原生会话日志",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[78]||(a[78]=[k("读取各 CLI 工具自己的会话日志,配置保存后立即生效",-1)])]),_:1})]),P(D(ze),{value:Fe.value.nativeCliLogs.enabled,"onUpdate:value":a[7]||(a[7]=e=>Fe.value.nativeCliLogs.enabled=e),size:"medium"},null,8,["value"])]),V("div",Ot,[V("div",Ut,[P(D(Oe),{depth:"2",style:{"font-size":"13px"}},{default:$(()=>[...a[79]||(a[79]=[k("CLI 原生日志读取间隔",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[80]||(a[80]=[k("轮询原生会话日志的时间间隔",-1)])]),_:1})]),P(D(Ue),{value:Fe.value.nativeCliLogs.intervalSeconds,"onUpdate:value":a[8]||(a[8]=e=>Fe.value.nativeCliLogs.intervalSeconds=e),min:1,max:60,step:1,style:{width:"140px"}},{suffix:$(()=>[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[81]||(a[81]=[k("秒",-1)])]),_:1})]),_:1},8,["value"])])])]),P(D(be)),V("div",jt,[V("div",It,[P(D(Oe),{strong:""},{default:$(()=>[...a[82]||(a[82]=[k("开机自启",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[83]||(a[83]=[k(" 启用此选项后,重启电脑时 coding-tool-x 会自动启动 ",-1)])]),_:1})]),V("div",Nt,[V("div",At,[V("div",Lt,[P(D(Oe),{strong:"",style:{flex:"1"}},{default:$(()=>[k(N(Re.value),1)]),_:1}),ge.value?(U(),S(D(f),{key:1,type:"warning",size:"small",loading:Me.value,onClick:Zs},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(ve))]),_:1})]),default:$(()=>[a[85]||(a[85]=k(" 禁用自启 ",-1))]),_:1},8,["loading"])):(U(),S(D(f),{key:0,type:"primary",size:"small",loading:Me.value,onClick:Ks},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(me))]),_:1})]),default:$(()=>[a[84]||(a[84]=k(" 启用自启 ",-1))]),_:1},8,["loading"]))]),P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[k(N(We.value),1)]),_:1})])])])])]),V("div",$t,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:a[9]||(a[9]=e=>d.value=!1)},{default:$(()=>[...a[86]||(a[86]=[k(" 取消 ",-1)])]),_:1}),P(D(f),{type:"primary",size:"large",loading:C.value,disabled:!Cs.value,onClick:Hs},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[87]||(a[87]=k(" 保存端口配置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"advanced"===p.value]]),J(V("div",Bt,[V("div",Tt,[V("div",Mt,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(de))]),_:1}),V("div",null,[a[89]||(a[89]=V("h3",{class:"panel-title"},"安全设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[88]||(a[88]=[k("设置访问密码,保护面板访问",-1)])]),_:1})])])]),V("div",Et,[V("div",Rt,[V("div",Dt,[V("div",Wt,[P(D(Oe),{strong:""},{default:$(()=>[...a[90]||(a[90]=[k("访问保护",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[91]||(a[91]=[k(" 启用后,重新打开面板时需要先输入访问密码 ",-1)])]),_:1})]),V("div",Yt,[Ml.value.hasPassword?(U(),S(D(Ne),{key:0,type:"success",bordered:!1},{default:$(()=>[...a[92]||(a[92]=[k(" 已启用 ",-1)])]),_:1})):(U(),S(D(Ne),{key:1,type:"warning",bordered:!1},{default:$(()=>[...a[93]||(a[93]=[k(" 未启用 ",-1)])]),_:1}))])]),P(D(be)),V("div",Jt,[V("div",Ft,[P(D(Oe),{strong:""},{default:$(()=>[k(N(Ml.value.hasPassword?"修改密码":"设置密码"),1)]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:$(()=>[...a[94]||(a[94]=[k(" 密码至少 4 位,建议包含数字与字母 ",-1)])]),_:1}),P(D(Oe),{depth:"3",style:{"font-size":"12px","margin-top":"4px"}},{default:$(()=>[a[96]||(a[96]=k(" 忘记密码可在终端执行 ",-1)),P(D(Oe),{code:""},{default:$(()=>[...a[95]||(a[95]=[k("ctx security reset",-1)])]),_:1}),a[97]||(a[97]=k(" 关闭密码 ",-1))]),_:1})]),V("div",qt,[Ml.value.hasPassword?(U(),S(D(Ie),{key:0,value:Dl.value.currentPassword,"onUpdate:value":a[10]||(a[10]=e=>Dl.value.currentPassword=e),type:"password",placeholder:"当前密码","show-password-on":"click"},null,8,["value"])):x("",!0),P(D(Ie),{value:Dl.value.newPassword,"onUpdate:value":a[11]||(a[11]=e=>Dl.value.newPassword=e),type:"password",placeholder:"新密码","show-password-on":"click"},null,8,["value"]),P(D(Ie),{value:Dl.value.confirmPassword,"onUpdate:value":a[12]||(a[12]=e=>Dl.value.confirmPassword=e),type:"password",placeholder:"确认新密码","show-password-on":"click"},null,8,["value"]),Yl.value?(U(),S(D(Oe),{key:1,depth:"3",class:"security-error"},{default:$(()=>[k(N(Yl.value),1)]),_:1})):x("",!0)])])])]),V("div",Vt,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:a[13]||(a[13]=e=>d.value=!1)},{default:$(()=>[...a[98]||(a[98]=[k(" 取消 ",-1)])]),_:1}),P(D(f),{type:"primary",size:"large",loading:Wl.value,disabled:!Jl.value,onClick:Vs},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[99]||(a[99]=k(" 保存密码 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"security"===p.value]]),J(V("div",Ht,[V("div",Xt,[V("div",Kt,[P(D(c),{size:"24",color:"var(--text-secondary)"},{default:$(()=>[P(D(re))]),_:1}),V("div",null,[a[101]||(a[101]=V("h3",{class:"panel-title"},"模型设置",-1)),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[...a[100]||(a[100]=[k("管理默认测速模型、模型上下文窗口和定价信息",-1)])]),_:1}),P(D(Oe),{depth:"3",class:"panel-subtitle"},{default:$(()=>[k(" 价格来源:Models.dev 参考价格(离线快照) · "+N(ql.value.lastUpdated||"日期未知"),1)]),_:1})])])]),V("div",Zt,[P(D(Ce),{show:Vl.value},{default:$(()=>[V("div",Gt,[V("div",Qt,[P(D(Oe),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:$(()=>[...a[102]||(a[102]=[k("默认测速模型",-1)])]),_:1}),V("div",el,[(U(!0),q(T,null,z(ns.value,e=>(U(),q("div",{key:e.key,class:"speed-test-default-row"},[V("div",al,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[k(N(e.label),1)]),_:2},1024)]),P(D(Be),{value:ls.value[e.key],"onUpdate:value":a=>ls.value[e.key]=a,options:bs.value[e.key],placeholder:`选择或输入${e.label}默认测速模型`,disabled:0===(bs.value[e.key]||[]).length,size:"small",filterable:"",tag:""},null,8,["value","onUpdate:value","options","placeholder","disabled"])]))),128))])])]),V("div",tl,[P(D(Ie),{value:Gl.value,"onUpdate:value":a[14]||(a[14]=e=>Gl.value=e),placeholder:"搜索模型 ID...",clearable:"",size:"small",style:{flex:"1","min-width":"0"}},null,8,["value"]),P(D(f),{size:"small",type:"primary",onClick:ds},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(te))]),_:1})]),default:$(()=>[a[103]||(a[103]=k(" 新增 ",-1))]),_:1})]),V("div",ll,[P(D(Ae),{value:Ql.value,"onUpdate:value":a[15]||(a[15]=e=>Ql.value=e),size:"small"},{default:$(()=>[P(D(Ee),{value:"all"},{default:$(()=>[...a[104]||(a[104]=[k("全部",-1)])]),_:1}),P(D(Ee),{value:"claude"},{default:$(()=>[...a[105]||(a[105]=[k("Claude",-1)])]),_:1}),P(D(Ee),{value:"openai"},{default:$(()=>[...a[106]||(a[106]=[k("OpenAI",-1)])]),_:1}),P(D(Ee),{value:"gemini"},{default:$(()=>[...a[107]||(a[107]=[k("Gemini",-1)])]),_:1}),P(D(Ee),{value:"compatible"},{default:$(()=>[...a[108]||(a[108]=[k("OpenCode / OMP",-1)])]),_:1}),P(D(Ee),{value:"overrides"},{default:$(()=>[...a[109]||(a[109]=[k("自定义",-1)])]),_:1})]),_:1},8,["value"])]),0===ys.value.length?(U(),q("div",sl,[P(D(Te),{description:"没有匹配的模型"})])):(U(),q("div",nl,[(U(!0),q(T,null,z(ys.value,e=>(U(),q("div",{key:e,class:M(["model-card",{expanded:is.value.has(e)}])},[V("div",{class:"model-card-header",onClick:a=>(e=>{is.value.has(e)?is.value.delete(e):is.value.add(e),is.value=new Set(is.value)})(e)},[P(D(c),{size:"14",class:"expand-icon"},{default:$(()=>[P(D(ye))]),_:1}),V("span",ol,N(e),1),Kl.value[e]?(U(),S(D(Ne),{key:0,type:"warning",size:"tiny",bordered:!1},{default:$(()=>[...a[110]||(a[110]=[k("自定义",-1)])]),_:1})):x("",!0),V("div",{class:"model-card-actions",onClick:a[16]||(a[16]=R(()=>{},["stop"]))},[Kl.value[e]&&vs(e)?(U(),S(D(f),{key:0,size:"tiny",quaternary:"",type:"warning",onClick:a=>async function(e){try{await o(e),delete Kl.value[e],delete Zl.value[e],await ks(),Se.success(`${e} 已重置为内置默认值`)}catch(a){Se.error("重置失败:"+a.message)}}(e)},{default:$(()=>[...a[111]||(a[111]=[k(" 重置 ",-1)])]),_:1},8,["onClick"])):x("",!0),fs(e)?(U(),S(D(f),{key:1,size:"tiny",quaternary:"",type:"error",onClick:a=>async function(e){try{const a=!!Kl.value[e];a&&(await o(e),delete Kl.value[e]),delete Zl.value[e],fs(e)?delete Xl.value[e]:a&&await ks(),Se.success(`已删除模型:${e}`)}catch(a){Se.error("删除失败:"+a.message)}}(e)},{default:$(()=>[...a[112]||(a[112]=[k(" 删除 ",-1)])]),_:1},8,["onClick"])):x("",!0)])],8,il),is.value.has(e)?(U(),q("div",rl,[V("div",ul,[V("div",dl,[P(D(Oe),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:$(()=>[...a[113]||(a[113]=[k("上下文限制",-1)])]),_:1}),V("div",cl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[114]||(a[114]=[k("Context 窗口 (tokens)",-1)])]),_:1}),P(D(Ue),{value:ws(e,"limit","context"),"onUpdate:value":a=>xs(e,"limit","context",a),min:1e3,step:1e3,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[115]||(a[115]=[k("Max Output (tokens)",-1)])]),_:1}),P(D(Ue),{value:ws(e,"limit","output"),"onUpdate:value":a=>xs(e,"limit","output",a),min:100,step:1e3,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])])])]),V("div",pl,[P(D(Oe),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:$(()=>[...a[116]||(a[116]=[k("定价(USD / 百万 tokens)",-1)])]),_:1}),V("div",vl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[117]||(a[117]=[k("输入价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","input"),"onUpdate:value":a=>xs(e,"pricing","input",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[118]||(a[118]=[k("输出价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","output"),"onUpdate:value":a=>xs(e,"pricing","output",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[119]||(a[119]=[k("缓存写入价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","cacheCreation"),"onUpdate:value":a=>xs(e,"pricing","cacheCreation",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"11px"}},{default:$(()=>[...a[120]||(a[120]=[k("缓存读取价格",-1)])]),_:1}),P(D(Ue),{value:ws(e,"pricing","cacheRead"),"onUpdate:value":a=>xs(e,"pricing","cacheRead",a),min:0,step:.01,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])])])])])])):x("",!0)],2))),128))]))]),_:1},8,["show"])]),V("div",fl,[P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{size:"large",onClick:zs,disabled:0===Object.keys(Kl.value).length},{default:$(()=>[...a[121]||(a[121]=[k(" 重置全部 ",-1)])]),_:1},8,["disabled"]),P(D(f),{type:"primary",size:"large",loading:Hl.value,disabled:!rs.value,onClick:_s},{icon:$(()=>[P(D(c),null,{default:$(()=>[P(D(fe))]),_:1})]),default:$(()=>[a[122]||(a[122]=k(" 保存设置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[B,"model-settings"===p.value]])])]),P(D(he),{show:es.value,"onUpdate:show":a[24]||(a[24]=e=>es.value=e),preset:"card",title:"新增模型设置",style:{width:"560px"},"mask-closable":!1},{default:$(()=>[P(D(Pe),{vertical:"",size:12},{default:$(()=>[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[123]||(a[123]=[k("模型 ID",-1)])]),_:1}),P(D(Ie),{value:as.value.modelId,"onUpdate:value":a[17]||(a[17]=e=>as.value.modelId=e),placeholder:"例如:gpt-4.1-mini",clearable:""},null,8,["value"])]),V("div",ml,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[124]||(a[124]=[k("Context 窗口",-1)])]),_:1}),P(D(Ue),{value:as.value.context,"onUpdate:value":a[18]||(a[18]=e=>as.value.context=e),min:1e3,step:1e3,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[125]||(a[125]=[k("Max Output",-1)])]),_:1}),P(D(Ue),{value:as.value.output,"onUpdate:value":a[19]||(a[19]=e=>as.value.output=e),min:100,step:100,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),V("div",yl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[126]||(a[126]=[k("输入价格",-1)])]),_:1}),P(D(Ue),{value:as.value.inputPrice,"onUpdate:value":a[20]||(a[20]=e=>as.value.inputPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[127]||(a[127]=[k("输出价格",-1)])]),_:1}),P(D(Ue),{value:as.value.outputPrice,"onUpdate:value":a[21]||(a[21]=e=>as.value.outputPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),V("div",gl,[V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[128]||(a[128]=[k("缓存写入价格",-1)])]),_:1}),P(D(Ue),{value:as.value.cacheCreationPrice,"onUpdate:value":a[22]||(a[22]=e=>as.value.cacheCreationPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),V("div",null,[P(D(Oe),{depth:"3",style:{"font-size":"12px"}},{default:$(()=>[...a[129]||(a[129]=[k("缓存读取价格",-1)])]),_:1}),P(D(Ue),{value:as.value.cacheReadPrice,"onUpdate:value":a[23]||(a[23]=e=>as.value.cacheReadPrice=e),min:0,step:.01,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),us.value?(U(),S(D(Oe),{key:0,depth:"3",class:"security-error"},{default:$(()=>[k(N(us.value),1)]),_:1})):x("",!0),P(D(Pe),{justify:"end"},{default:$(()=>[P(D(f),{onClick:cs},{default:$(()=>[...a[130]||(a[130]=[k("取消",-1)])]),_:1}),P(D(f),{type:"primary",disabled:!!us.value,onClick:ps},{default:$(()=>[...a[131]||(a[131]=[k(" 新增 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["show"])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-f0261ba5"]]);export{hl as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{O as r,W as e,b as l,et as s,mt as t,r as o,w as i}from"./vue-vendor-BqZbbXHA.js";import{O as m}from"./light-Cp0t7v32.js";import{t as p}from"./SkillsPanel
|
|
1
|
+
import{t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{O as r,W as e,b as l,et as s,mt as t,r as o,w as i}from"./vue-vendor-BqZbbXHA.js";import{O as m}from"./light-Cp0t7v32.js";import{t as p}from"./SkillsPanel--lLEts9y.js";import{Nt as u}from"./index-BFInlZGI.js";var f={class:"skill-manager"},n=a({__name:"SkillManager",setup(a){const n=o(),{byCapability:d}=u(),v=l(()=>d("skills").map(a=>a.key)),y=l(()=>{const a=Array.isArray(n.query.platform)?n.query.platform[0]:n.query.platform;return v.value.includes(a)?a:""});return(a,l)=>(e(),i("div",f,[r(t(m),{title:"Skills 技能管理",bordered:!1},{default:s(()=>[r(p,{"in-drawer":!1,"hide-back":!0,platform:y.value},null,8,["platform"])]),_:1})]))}},[["__scopeId","data-v-350fb0fd"]]);export{n as default};
|