coding-tool-x 3.9.9-261027 → 3.9.9-261105
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/CHANGELOG.md +1 -0
- package/dist/web/assets/AgentsDrawer-DWnAsTH_.js +1 -0
- package/dist/web/assets/Analytics-D_WWRO5h.js +1 -0
- package/dist/web/assets/AssetPathField-CoIuoSZr.js +1 -0
- package/dist/web/assets/ChatHistoryDrawer-B_OnCpxR.js +1 -0
- package/dist/web/assets/CollapseItem-DEV7PQ-o.js +1 -0
- package/dist/web/assets/CommandsDrawer-gG61nb7a.js +1 -0
- package/dist/web/assets/ConfigExportDrawer-BkSzLSuZ.js +1 -0
- package/dist/web/assets/ConfigTemplates-DvEDpIso.js +1 -0
- package/dist/web/assets/ConfigTemplatesDrawer-DMPO4gjt.js +1 -0
- package/dist/web/assets/ConfigTemplatesPanel-BQe31_bq.js +1 -0
- package/dist/web/assets/Divider-CEqaZMTW.js +1 -0
- package/dist/web/assets/DrawerContent-BYlV968f.js +1 -0
- package/dist/web/assets/FavoritesDrawer-Y-MmIIE9.js +1 -0
- package/dist/web/assets/{Forward-DLCL7aMY.js → Forward-kgMPT2RI.js} +1 -1
- package/dist/web/assets/GatewayConvertDrawer-BvYhzJD6.js +1 -0
- package/dist/web/assets/Home-BOwk4kTa.js +1 -0
- package/dist/web/assets/MarkdownEditor-Bf9QKKaV.js +1 -0
- package/dist/web/assets/McpDrawer-B7cwI24B.js +1 -0
- package/dist/web/assets/McpFormDrawer-Djt5CJyE.js +1 -0
- package/dist/web/assets/PluginManager-B4J_hR0V.js +1 -0
- package/dist/web/assets/PluginsDrawer-Ch4x66-E.js +1 -0
- package/dist/web/assets/PluginsPanel-mqXBlKZg.js +1 -0
- package/dist/web/assets/ProjectList-DtmQyoPc.css +1 -0
- package/dist/web/assets/ProjectList-xToRgLVw.js +1 -0
- package/dist/web/assets/PromptsDrawer-VYrlk-F6.js +1 -0
- package/dist/web/assets/RecentSessionsDrawer-DCsgGSBu.js +1 -0
- package/dist/web/assets/SessionCard-C9n9lC_Y.css +1 -0
- package/dist/web/assets/SessionCard-DwzxeSe9.js +1 -0
- package/dist/web/assets/{SessionList-qG_XpPBJ.css → SessionList-CCuKp6ib.css} +1 -1
- package/dist/web/assets/SessionList-GqzUHgOu.js +1 -0
- package/dist/web/assets/SettingsDrawer-Q_aTOBhf.js +1 -0
- package/dist/web/assets/SkillManager-B1B58WKe.js +1 -0
- package/dist/web/assets/SkillsDrawer-Ch1b1hLn.js +1 -0
- package/dist/web/assets/SkillsPanel-B_xxyDpy.js +1 -0
- package/dist/web/assets/{Upload-xqorL26i.js → Upload-B6Kn1TvG.js} +1 -1
- package/dist/web/assets/WorkspaceDrawer-C3w-Z87U.js +1 -0
- package/dist/web/assets/WorkspaceManager-BFzjeEWh.js +1 -0
- package/dist/web/assets/WorkspacePanel-DkrwFSLs.js +1 -0
- package/dist/web/assets/_plugin-vue_export-helper-DyHLuIR4.js +1 -0
- package/dist/web/assets/{client-oU6RT-6I.js → client-B31QOzWk.js} +1 -1
- package/dist/web/assets/{dsh-agent-presets-DjJRVMT6.js → dsh-agent-presets-DopJnuAZ.js} +1 -1
- package/dist/web/assets/headers-nTUGmJee.js +1 -0
- package/dist/web/assets/{icons-B-AzZoeE.js → icons-C6KNTFqo.js} +1 -1
- package/dist/web/assets/index-BXWpib7P.js +2 -0
- package/dist/web/assets/{index-DjIuAtaS.css → index-CvL_fRpL.css} +1 -1
- package/dist/web/assets/light-DeIjG9s_.js +1 -0
- package/dist/web/assets/markdown-xLK9ekFg.js +1 -0
- package/dist/web/assets/platforms-BdTllxKt.js +1 -0
- package/dist/web/assets/{platforms-p9AiybLU.js → platforms-CDltfh5G.js} +1 -1
- package/dist/web/assets/{project-config-CzFKBw_m.js → project-config-C16yaWHF.js} +1 -1
- package/dist/web/assets/rolldown-runtime-DcNxTHDL.js +1 -0
- package/dist/web/assets/sessions-B4RD8wDx.js +1 -0
- package/dist/web/assets/{sessions-DJiJJgvg.js → sessions-Xl0HAvhA.js} +1 -1
- package/dist/web/assets/use-lock-html-scroll-Bu94jdUB.js +1 -0
- package/dist/web/assets/use-message-BYx0IRj1.js +1 -0
- package/dist/web/assets/useResponsiveDrawer-Deh7Xdcj.js +1 -0
- package/dist/web/assets/vendors-CvGw6U_t.js +1 -0
- package/dist/web/assets/vue-vendor-Cr_NLmXY.js +1 -0
- package/dist/web/assets/{workspaces-D2yLnT-B.js → workspaces-Y7hS24p2.js} +1 -1
- package/dist/web/assets/xml-B78loRzO.js +1 -0
- package/dist/web/index.html +13 -12
- package/package.json +3 -3
- package/src/config/model-metadata.json +30 -4
- package/src/platforms/drivers/dsh/api-operations.js +1 -1
- package/src/platforms/drivers/dsh/channels-implementation.js +10 -0
- package/src/platforms/drivers/dsh/channels.js +10 -0
- package/src/platforms/drivers/dsh/proxy-implementation.js +7 -1
- package/src/platforms/drivers/dsh/sessions.js +5 -1
- package/src/platforms/manifest-schema.js +1 -1
- package/src/platforms/manifests/dsh.json +8 -0
- package/src/server/services/model-detector.js +22 -3
- package/dist/web/assets/AgentsDrawer-CKEf8ie1.js +0 -1
- package/dist/web/assets/Analytics-0BCMxQ-o.js +0 -1
- package/dist/web/assets/AssetPathField-pfN6L814.js +0 -1
- package/dist/web/assets/ChatHistoryDrawer-nuUPRqje.js +0 -1
- package/dist/web/assets/CollapseItem-B2SdqQp2.js +0 -1
- package/dist/web/assets/CommandsDrawer-D8m0qLzQ.js +0 -1
- package/dist/web/assets/ConfigExportDrawer-BlCBLdue.js +0 -1
- package/dist/web/assets/ConfigTemplates-CePBARK8.js +0 -1
- package/dist/web/assets/ConfigTemplatesDrawer-DbVY4rD1.js +0 -1
- package/dist/web/assets/ConfigTemplatesPanel-CwYPLEFV.js +0 -1
- package/dist/web/assets/Divider-BLLhMTSt.js +0 -1
- package/dist/web/assets/DrawerContent-ChXgZ1Xm.js +0 -1
- package/dist/web/assets/FavoritesDrawer-BKAKQNqP.js +0 -1
- package/dist/web/assets/GatewayConvertDrawer-D2MFXcqS.js +0 -1
- package/dist/web/assets/Home-BmElvXVZ.js +0 -1
- package/dist/web/assets/MarkdownEditor-buNC2iDj.js +0 -1
- package/dist/web/assets/McpDrawer-NBjAyFU5.js +0 -1
- package/dist/web/assets/McpFormDrawer-BUnW9j4A.js +0 -1
- package/dist/web/assets/PluginManager-BgHpsF5S.js +0 -1
- package/dist/web/assets/PluginsDrawer-CFnmqzV0.js +0 -1
- package/dist/web/assets/PluginsPanel-ClSdnSCu.js +0 -1
- package/dist/web/assets/ProjectList-CjlHEyU1.js +0 -1
- package/dist/web/assets/ProjectList-VbIYSHbH.css +0 -1
- package/dist/web/assets/PromptsDrawer-xeSGgpCd.js +0 -1
- package/dist/web/assets/RecentSessionsDrawer-DELB6-rU.js +0 -1
- package/dist/web/assets/SessionCard-BaH42eOe.js +0 -1
- package/dist/web/assets/SessionCard-aM2NHu6i.css +0 -1
- package/dist/web/assets/SessionList-BGB9GwYE.js +0 -1
- package/dist/web/assets/SettingsDrawer-DdYC8GIa.js +0 -1
- package/dist/web/assets/SkillManager-CF7EiSps.js +0 -1
- package/dist/web/assets/SkillsDrawer-Bc5zA1bk.js +0 -1
- package/dist/web/assets/SkillsPanel-SnzwzqW5.js +0 -1
- package/dist/web/assets/WorkspaceDrawer-DBiEnZ7j.js +0 -1
- package/dist/web/assets/WorkspaceManager-C1dNfoAy.js +0 -1
- package/dist/web/assets/WorkspacePanel-CWNQZjm1.js +0 -1
- package/dist/web/assets/_plugin-vue_export-helper-BeLZJZij.js +0 -1
- package/dist/web/assets/headers-DbowkmZJ.js +0 -1
- package/dist/web/assets/index-BKpL4XdU.js +0 -2
- package/dist/web/assets/light-C2X7hegj.js +0 -1
- package/dist/web/assets/markdown-u082bbtj.js +0 -1
- package/dist/web/assets/platforms-Cq6XDXfy.js +0 -1
- package/dist/web/assets/sessions-DSLpMXCq.js +0 -1
- package/dist/web/assets/use-lock-html-scroll-DXIqmUW4.js +0 -1
- package/dist/web/assets/use-message-DBsCm7FJ.js +0 -1
- package/dist/web/assets/useResponsiveDrawer-CTQPBATk.js +0 -1
- package/dist/web/assets/vendors-D0c_0KLP.js +0 -1
- package/dist/web/assets/vue-vendor-BqZbbXHA.js +0 -1
- package/dist/web/assets/xml-CgY3RMlX.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as a,D as t,G as s,H as n,I as l,K as i,M as o,N as r,O as u,Q as d,S as c,V as p,W as v,Z as m,_t as h,b as f,dt as g,et as y,f as b,g as w,ht as k,i as C,m as x,mt as j,p as P,r as F,st as _,tt as z,w as M,x as I}from"./vue-vendor-Cr_NLmXY.js";import{I as S,L as B,N as $,Qt as O,Tt as N,Yt as T,bn as A,gn as U,gt as R,hn as D,ht as E,i as L,j as q,s as H,t as V,xn as Q,xt as W,yn as J}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{t as K}from"./headers-nTUGmJee.js";import{$ as Z,A as G,H as Y,M as X,O as ee,Q as ae,Tt as te,Y as se,_ as ne,ct as le,dt as ie,et as oe,ft as re,k as ue,ot as de,pt as ce,rt as pe,st as ve,ut as me,vt as he,xt as fe,yt as ge}from"./index-BXWpib7P.js";import{F as ye,S as be,l as we}from"./light-DeIjG9s_.js";import{i as ke,n as Ce,r as xe,t as je}from"./Forward-kgMPT2RI.js";import{d as Pe,k as Fe,t as _e,u as ze,x as Me}from"./use-message-BYx0IRj1.js";import{$ as Ie,At as Se,Ct as Be,U as $e,c as Oe,g as Ne,i as Te,l as Ae,nt as Ue,r as Re}from"./icons-C6KNTFqo.js";import{t as De}from"./sessions-Xl0HAvhA.js";import{c as Ee,f as Le,t as qe}from"./sessions-B4RD8wDx.js";import{i as He}from"./platforms-BdTllxKt.js";import Ve from"./ChatHistoryDrawer-B_OnCpxR.js";import{n as Qe,t as We}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as Je}from"./DrawerContent-BYlV968f.js";import{c as Ke,s as Ze}from"./AssetPathField-CoIuoSZr.js";import{i as Ge,l as Ye,n as Xe,o as ea,r as aa,t as ta}from"./project-config-C16yaWHF.js";import{t as sa}from"./McpFormDrawer-Djt5CJyE.js";import{t as na}from"./SkillsPanel-B_xxyDpy.js";var la={tiny:"mini",small:"tiny",medium:"small",large:"medium",huge:"large"};function ia(e){const a=la[e];if(void 0===a)throw new Error(`${e} has no smaller size.`);return a}var oa=e({name:"More",render:()=>o("svg",{viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},o("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},o("g",{fill:"currentColor","fill-rule":"nonzero"},o("path",{d:"M4,7 C4.55228,7 5,7.44772 5,8 C5,8.55229 4.55228,9 4,9 C3.44772,9 3,8.55229 3,8 C3,7.44772 3.44772,7 4,7 Z M8,7 C8.55229,7 9,7.44772 9,8 C9,8.55229 8.55229,9 8,9 C7.44772,9 7,8.55229 7,8 C7,7.44772 7.44772,7 8,7 Z M12,7 C12.5523,7 13,7.44772 13,8 C13,8.55229 12.5523,9 12,9 C11.4477,9 11,8.55229 11,8 C11,7.44772 11.4477,7 12,7 Z"}))))}),ra=T("n-popselect"),ua=U("popselect-menu","\n box-shadow: var(--n-menu-box-shadow);\n"),da={multiple:Boolean,value:{type:[String,Number,Array],default:null},cancelable:Boolean,options:{type:Array,default:()=>[]},size:{type:String,default:"medium"},scrollable:Boolean,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onMouseenter:Function,onMouseleave:Function,renderLabel:Function,showCheckmark:{type:Boolean,default:void 0},nodeProps:Function,virtualScroll:Boolean,onChange:[Function,Array]},ca=ye(da),pa=e({name:"PopselectPanel",props:da,setup(e){const a=r(ra),{mergedClsPrefixRef:t,inlineThemeDisabled:s}=R(e),n=$("Popselect","-pop-select",ua,oe,a.props,t),i=f(()=>ce(e.options,de("value","children")));function o(a,t){const{onUpdateValue:s,"onUpdate:value":n,onChange:l}=e;s&&N(s,a,t),n&&N(n,a,t),l&&N(l,a,t)}m(g(e,"options"),()=>{l(()=>{a.syncPosition()})});const u=f(()=>{const{self:{menuBoxShadow:e}}=n.value;return{"--n-menu-box-shadow":e}}),d=s?E("select",void 0,u,a.props):void 0;return{mergedTheme:a.mergedThemeRef,mergedClsPrefix:t,treeMate:i,handleToggle:function(t){!function(t){const{value:{getNode:s}}=i;if(e.multiple)if(Array.isArray(e.value)){const a=[],n=[];let l=!0;e.value.forEach(e=>{if(e===t)return void(l=!1);const i=s(e);i&&(a.push(i.key),n.push(i.rawNode))}),l&&(a.push(t),n.push(s(t).rawNode)),o(a,n)}else{const e=s(t);e&&o([t],[e.rawNode])}else if(e.value===t&&e.cancelable)o(null,null);else{const e=s(t);e&&o(t,e.rawNode);const{"onUpdate:show":n,onUpdateShow:l}=a.props;n&&N(n,!1),l&&N(l,!1),a.setShow(!1)}l(()=>{a.syncPosition()})}(t.key)},handleMenuMousedown:function(e){te(e,"action")||te(e,"empty")||te(e,"header")||e.preventDefault()},cssVars:s?void 0:u,themeClass:null==d?void 0:d.themeClass,onRender:null==d?void 0:d.onRender}},render(){var e;return null===(e=this.onRender)||void 0===e||e.call(this),o(ie,{clsPrefix:this.mergedClsPrefix,focusable:!0,nodeProps:this.nodeProps,class:[`${this.mergedClsPrefix}-popselect-menu`,this.themeClass],style:this.cssVars,theme:this.mergedTheme.peers.InternalSelectMenu,themeOverrides:this.mergedTheme.peerOverrides.InternalSelectMenu,multiple:this.multiple,treeMate:this.treeMate,size:this.size,value:this.value,virtualScroll:this.virtualScroll,scrollable:this.scrollable,renderLabel:this.renderLabel,onToggle:this.handleToggle,onMouseenter:this.onMouseenter,onMouseleave:this.onMouseenter,onMousedown:this.handleMenuMousedown,showCheckmark:this.showCheckmark},{header:()=>{var e,a;return(null===(a=(e=this.$slots).header)||void 0===a?void 0:a.call(e))||[]},action:()=>{var e,a;return(null===(a=(e=this.$slots).action)||void 0===a?void 0:a.call(e))||[]},empty:()=>{var e,a;return(null===(a=(e=this.$slots).empty)||void 0===a?void 0:a.call(e))||[]}})}}),va=e({name:"Popselect",props:Object.assign(Object.assign(Object.assign(Object.assign({},$.props),he(Pe,["showArrow","arrow"])),{placement:Object.assign(Object.assign({},Pe.placement),{default:"bottom"}),trigger:{type:String,default:"hover"}}),da),slots:Object,inheritAttrs:!1,__popover__:!0,setup(e){const{mergedClsPrefixRef:a}=R(e),t=$("Popselect","-popselect",void 0,oe,e,a),n=_(null);function l(){var e;null===(e=n.value)||void 0===e||e.syncPosition()}function i(e){var a;null===(a=n.value)||void 0===a||a.setShow(e)}return s(ra,{props:e,mergedThemeRef:t,syncPosition:l,setShow:i}),Object.assign(Object.assign({},{syncPosition:l,setShow:i}),{popoverInstRef:n,mergedTheme:t})},render(){const{mergedTheme:e}=this,a={theme:e.peers.Popover,themeOverrides:e.peerOverrides.Popover,builtinThemeOverrides:{padding:"0"},ref:"popoverInstRef",internalRenderBody:(e,a,t,s,n)=>{const{$attrs:l}=this;return o(pa,Object.assign({},l,{class:[l.class,e],style:[l.style,...t]},Me(this.$props,ca),{ref:fe(a),onMouseenter:ge([s,l.onMouseenter]),onMouseleave:ge([n,l.onMouseleave])}),{header:()=>{var e,a;return null===(a=(e=this.$slots).header)||void 0===a?void 0:a.call(e)},action:()=>{var e,a;return null===(a=(e=this.$slots).action)||void 0===a?void 0:a.call(e)},empty:()=>{var e,a;return null===(a=(e=this.$slots).empty)||void 0===a?void 0:a.call(e)}})}};return o(ze,Object.assign({},he(this.$props,ca),a,{internalDeactivateImmediately:!0}),{trigger:()=>{var e,a;return null===(a=(e=this.$slots).default)||void 0===a?void 0:a.call(e)}})}}),ma="\n background: var(--n-item-color-hover);\n color: var(--n-item-text-color-hover);\n border: var(--n-item-border-hover);\n",ha=[J("button","\n background: var(--n-button-color-hover);\n border: var(--n-button-border-hover);\n color: var(--n-button-icon-color-hover);\n ")],fa=U("pagination","\n display: flex;\n vertical-align: middle;\n font-size: var(--n-item-font-size);\n flex-wrap: nowrap;\n",[U("pagination-prefix","\n display: flex;\n align-items: center;\n margin: var(--n-prefix-margin);\n "),U("pagination-suffix","\n display: flex;\n align-items: center;\n margin: var(--n-suffix-margin);\n "),D("> *:not(:first-child)","\n margin: var(--n-item-margin);\n "),U("select","\n width: var(--n-select-width);\n "),D("&.transition-disabled",[U("pagination-item","transition: none!important;")]),U("pagination-quick-jumper","\n white-space: nowrap;\n display: flex;\n color: var(--n-jumper-text-color);\n transition: color .3s var(--n-bezier);\n align-items: center;\n font-size: var(--n-jumper-font-size);\n ",[U("input","\n margin: var(--n-input-margin);\n width: var(--n-input-width);\n ")]),U("pagination-item","\n position: relative;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: var(--n-item-size);\n height: var(--n-item-size);\n padding: var(--n-item-padding);\n background-color: var(--n-item-color);\n color: var(--n-item-text-color);\n border-radius: var(--n-item-border-radius);\n border: var(--n-item-border);\n fill: var(--n-button-icon-color);\n transition:\n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n fill .3s var(--n-bezier);\n ",[J("button","\n background: var(--n-button-color);\n color: var(--n-button-icon-color);\n border: var(--n-button-border);\n padding: 0;\n ",[U("base-icon","\n font-size: var(--n-button-icon-size);\n ")]),A("disabled",[J("hover",ma,ha),D("&:hover",ma,ha),D("&:active","\n background: var(--n-item-color-pressed);\n color: var(--n-item-text-color-pressed);\n border: var(--n-item-border-pressed);\n ",[J("button","\n background: var(--n-button-color-pressed);\n border: var(--n-button-border-pressed);\n color: var(--n-button-icon-color-pressed);\n ")]),J("active","\n background: var(--n-item-color-active);\n color: var(--n-item-text-color-active);\n border: var(--n-item-border-active);\n ",[D("&:hover","\n background: var(--n-item-color-active-hover);\n ")])]),J("disabled","\n cursor: not-allowed;\n color: var(--n-item-text-color-disabled);\n ",[J("active, button","\n background-color: var(--n-item-color-disabled);\n border: var(--n-item-border-disabled);\n ")])]),J("disabled","\n cursor: not-allowed;\n ",[U("pagination-quick-jumper","\n color: var(--n-jumper-text-color-disabled);\n ")]),J("simple","\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n ",[U("pagination-quick-jumper",[U("input","\n margin: 0;\n ")])])]);function ga(e,a){const t=[];for(let s=e;s<=a;++s)t.push({label:`${s}`,value:s});return t}var ya=e({name:"Pagination",props:Object.assign(Object.assign({},$.props),{simple:Boolean,page:Number,defaultPage:{type:Number,default:1},itemCount:Number,pageCount:Number,defaultPageCount:{type:Number,default:1},showSizePicker:Boolean,pageSize:Number,defaultPageSize:Number,pageSizes:{type:Array,default:()=>[10]},showQuickJumper:Boolean,size:{type:String,default:"medium"},disabled:Boolean,pageSlot:{type:Number,default:9},selectProps:Object,prev:Function,next:Function,goto:Function,prefix:Function,suffix:Function,label:Function,displayOrder:{type:Array,default:["pages","size-picker","quick-jumper"]},to:Fe.propTo,showQuickJumpDropdown:{type:Boolean,default:!0},"onUpdate:page":[Function,Array],onUpdatePage:[Function,Array],"onUpdate:pageSize":[Function,Array],onUpdatePageSize:[Function,Array],onPageSizeChange:[Function,Array],onChange:[Function,Array]}),slots:Object,setup(e){const{mergedComponentPropsRef:a,mergedClsPrefixRef:t,inlineThemeDisabled:s,mergedRtlRef:n}=R(e),i=$("Pagination","-pagination",fa,ae,e,t),{localeRef:o}=B("Pagination"),r=_(null),u=_(e.defaultPage),c=_(function(e){var a;if(!e)return 10;const{defaultPageSize:t}=e;if(void 0!==t)return t;const s=null===(a=e.pageSizes)||void 0===a?void 0:a[0];return"number"==typeof s?s:(null==s?void 0:s.value)||10}(e)),p=O(g(e,"page"),u),v=O(g(e,"pageSize"),c),m=f(()=>{const{itemCount:a}=e;if(void 0!==a)return Math.max(1,Math.ceil(a/v.value));const{pageCount:t}=e;return void 0!==t?Math.max(t,1):1}),h=_("");d(()=>{e.simple,h.value=String(p.value)});const y=_(!1),b=_(!1),w=_(!1),k=_(!1),C=f(()=>function(e,a,t,s){let n=!1,l=!1,i=1,o=a;if(1===a)return{hasFastBackward:!1,hasFastForward:!1,fastForwardTo:o,fastBackwardTo:i,items:[{type:"page",label:1,active:1===e,mayBeFastBackward:!1,mayBeFastForward:!1}]};if(2===a)return{hasFastBackward:!1,hasFastForward:!1,fastForwardTo:o,fastBackwardTo:i,items:[{type:"page",label:1,active:1===e,mayBeFastBackward:!1,mayBeFastForward:!1},{type:"page",label:2,active:2===e,mayBeFastBackward:!0,mayBeFastForward:!1}]};const r=a;let u=e,d=e;const c=(t-5)/2;d+=Math.ceil(c),d=Math.min(Math.max(d,1+t-3),r-2),u-=Math.floor(c),u=Math.max(Math.min(u,r-t+3),3);let p=!1,v=!1;u>3&&(p=!0),d<r-2&&(v=!0);const m=[];m.push({type:"page",label:1,active:1===e,mayBeFastBackward:!1,mayBeFastForward:!1}),p?(n=!0,i=u-1,m.push({type:"fast-backward",active:!1,label:void 0,options:s?ga(2,u-1):null})):r>=2&&m.push({type:"page",label:2,mayBeFastBackward:!0,mayBeFastForward:!1,active:2===e});for(let h=u;h<=d;++h)m.push({type:"page",label:h,mayBeFastBackward:!1,mayBeFastForward:!1,active:e===h});return v?(l=!0,o=d+1,m.push({type:"fast-forward",active:!1,label:void 0,options:s?ga(d+1,r-1):null})):d===r-2&&m[m.length-1].label!==r-1&&m.push({type:"page",mayBeFastForward:!0,mayBeFastBackward:!1,label:r-1,active:e===r-1}),m[m.length-1].label!==r&&m.push({type:"page",mayBeFastForward:!1,mayBeFastBackward:!1,label:r,active:e===r}),{hasFastBackward:n,hasFastForward:l,fastBackwardTo:i,fastForwardTo:o,items:m}}(p.value,m.value,e.pageSlot,e.showQuickJumpDropdown));d(()=>{C.value.hasFastBackward?C.value.hasFastForward||(y.value=!1,w.value=!1):(b.value=!1,k.value=!1)});const x=f(()=>{const a=o.value.selectionSuffix;return e.pageSizes.map(e=>"number"==typeof e?{label:`${e} / ${a}`,value:e}:e)}),j=f(()=>{var t,s;return(null===(s=null===(t=null==a?void 0:a.value)||void 0===t?void 0:t.Pagination)||void 0===s?void 0:s.inputSize)||ia(e.size)}),P=f(()=>{var t,s;return(null===(s=null===(t=null==a?void 0:a.value)||void 0===t?void 0:t.Pagination)||void 0===s?void 0:s.selectSize)||ia(e.size)}),F=f(()=>(p.value-1)*v.value),z=f(()=>{const a=p.value*v.value-1,{itemCount:t}=e;return void 0!==t&&a>t-1?t-1:a}),M=f(()=>{const{itemCount:a}=e;return void 0!==a?a:(e.pageCount||1)*v.value}),I=S("Pagination",n,t);function T(){l(()=>{var e;const{value:a}=r;a&&(a.classList.add("transition-disabled"),null===(e=r.value)||void 0===e||e.offsetWidth,a.classList.remove("transition-disabled"))})}function A(a){if(a===p.value)return;const{"onUpdate:page":t,onUpdatePage:s,onChange:n,simple:l}=e;t&&N(t,a),s&&N(s,a),n&&N(n,a),u.value=a,l&&(h.value=String(a))}d(()=>{p.value,v.value,T()});const U=f(()=>{const{size:a}=e,{self:{buttonBorder:t,buttonBorderHover:s,buttonBorderPressed:n,buttonIconColor:l,buttonIconColorHover:o,buttonIconColorPressed:r,itemTextColor:u,itemTextColorHover:d,itemTextColorPressed:c,itemTextColorActive:p,itemTextColorDisabled:v,itemColor:m,itemColorHover:h,itemColorPressed:f,itemColorActive:g,itemColorActiveHover:y,itemColorDisabled:b,itemBorder:w,itemBorderHover:k,itemBorderPressed:C,itemBorderActive:x,itemBorderDisabled:j,itemBorderRadius:P,jumperTextColor:F,jumperTextColorDisabled:_,buttonColor:z,buttonColorHover:M,buttonColorPressed:I,[Q("itemPadding",a)]:S,[Q("itemMargin",a)]:B,[Q("inputWidth",a)]:$,[Q("selectWidth",a)]:O,[Q("inputMargin",a)]:N,[Q("selectMargin",a)]:T,[Q("jumperFontSize",a)]:A,[Q("prefixMargin",a)]:U,[Q("suffixMargin",a)]:R,[Q("itemSize",a)]:D,[Q("buttonIconSize",a)]:E,[Q("itemFontSize",a)]:L,[`${Q("itemMargin",a)}Rtl`]:q,[`${Q("inputMargin",a)}Rtl`]:H},common:{cubicBezierEaseInOut:V}}=i.value;return{"--n-prefix-margin":U,"--n-suffix-margin":R,"--n-item-font-size":L,"--n-select-width":O,"--n-select-margin":T,"--n-input-width":$,"--n-input-margin":N,"--n-input-margin-rtl":H,"--n-item-size":D,"--n-item-text-color":u,"--n-item-text-color-disabled":v,"--n-item-text-color-hover":d,"--n-item-text-color-active":p,"--n-item-text-color-pressed":c,"--n-item-color":m,"--n-item-color-hover":h,"--n-item-color-disabled":b,"--n-item-color-active":g,"--n-item-color-active-hover":y,"--n-item-color-pressed":f,"--n-item-border":w,"--n-item-border-hover":k,"--n-item-border-disabled":j,"--n-item-border-active":x,"--n-item-border-pressed":C,"--n-item-padding":S,"--n-item-border-radius":P,"--n-bezier":V,"--n-jumper-font-size":A,"--n-jumper-text-color":F,"--n-jumper-text-color-disabled":_,"--n-item-margin":B,"--n-item-margin-rtl":q,"--n-button-icon-size":E,"--n-button-icon-color":l,"--n-button-icon-color-hover":o,"--n-button-icon-color-pressed":r,"--n-button-color-hover":M,"--n-button-color":z,"--n-button-color-pressed":I,"--n-button-border":t,"--n-button-border-hover":s,"--n-button-border-pressed":n}}),D=s?E("pagination",f(()=>{let a="";const{size:t}=e;return a+=t[0],a}),U,e):void 0;return{rtlEnabled:I,mergedClsPrefix:t,locale:o,selfRef:r,mergedPage:p,pageItems:f(()=>C.value.items),mergedItemCount:M,jumperValue:h,pageSizeOptions:x,mergedPageSize:v,inputSize:j,selectSize:P,mergedTheme:i,mergedPageCount:m,startIndex:F,endIndex:z,showFastForwardMenu:w,showFastBackwardMenu:k,fastForwardActive:y,fastBackwardActive:b,handleMenuSelect:e=>{A(e)},handleFastForwardMouseenter:()=>{e.disabled||(y.value=!0,T())},handleFastForwardMouseleave:()=>{e.disabled||(y.value=!1,T())},handleFastBackwardMouseenter:()=>{b.value=!0,T()},handleFastBackwardMouseleave:()=>{b.value=!1,T()},handleJumperInput:function(e){h.value=e.replace(/\D+/g,"")},handleBackwardClick:function(){e.disabled||A(Math.max(p.value-1,1))},handleForwardClick:function(){e.disabled||A(Math.min(p.value+1,m.value))},handlePageItemClick:function(a){if(!e.disabled)switch(a.type){case"page":A(a.label);break;case"fast-backward":e.disabled||A(Math.max(C.value.fastBackwardTo,1));break;case"fast-forward":e.disabled||A(Math.min(C.value.fastForwardTo,m.value))}},handleSizePickerChange:function(a){!function(a){if(a===v.value)return;const{"onUpdate:pageSize":t,onUpdatePageSize:s,onPageSizeChange:n}=e;t&&N(t,a),s&&N(s,a),n&&N(n,a),c.value=a,m.value<p.value&&A(m.value)}(a)},handleQuickJumperChange:function(){!function(){const a=Number.parseInt(h.value);Number.isNaN(a)||(A(Math.max(1,Math.min(a,m.value))),e.simple||(h.value=""))}()},cssVars:s?void 0:U,themeClass:null==D?void 0:D.themeClass,onRender:null==D?void 0:D.onRender}},render(){const{$slots:e,mergedClsPrefix:a,disabled:t,cssVars:s,mergedPage:n,mergedPageCount:l,pageItems:i,showSizePicker:r,showQuickJumper:u,mergedTheme:d,locale:c,inputSize:p,selectSize:v,mergedPageSize:m,pageSizeOptions:h,jumperValue:f,simple:g,prev:y,next:b,prefix:k,suffix:C,label:x,goto:j,handleJumperInput:P,handleSizePickerChange:F,handleBackwardClick:_,handlePageItemClick:z,handleForwardClick:M,handleQuickJumperChange:I,onRender:S}=this;null==S||S();const B=k||e.prefix,$=C||e.suffix,O=y||e.prev,N=b||e.next,T=x||e.label;return o("div",{ref:"selfRef",class:[`${a}-pagination`,this.themeClass,this.rtlEnabled&&`${a}-pagination--rtl`,t&&`${a}-pagination--disabled`,g&&`${a}-pagination--simple`],style:s},B?o("div",{class:`${a}-pagination-prefix`},B({page:n,pageSize:m,pageCount:l,startIndex:this.startIndex,endIndex:this.endIndex,itemCount:this.mergedItemCount})):null,this.displayOrder.map(e=>{switch(e){case"pages":return o(w,null,o("div",{class:[`${a}-pagination-item`,!O&&`${a}-pagination-item--button`,(n<=1||n>l||t)&&`${a}-pagination-item--disabled`],onClick:_},O?O({page:n,pageSize:m,pageCount:l,startIndex:this.startIndex,endIndex:this.endIndex,itemCount:this.mergedItemCount}):o(q,{clsPrefix:a},{default:()=>this.rtlEnabled?o(je,null):o(ke,null)})),g?o(w,null,o("div",{class:`${a}-pagination-quick-jumper`},o(ve,{value:f,onUpdateValue:P,size:p,placeholder:"",disabled:t,theme:d.peers.Input,themeOverrides:d.peerOverrides.Input,onChange:I}))," /"," ",l):i.map((e,s)=>{let n,l,i;const{type:r}=e;switch(r){case"page":const t=e.label;n=T?T({type:"page",node:t,active:e.active}):t;break;case"fast-forward":const s=this.fastForwardActive?o(q,{clsPrefix:a},{default:()=>this.rtlEnabled?o(xe,null):o(Ce,null)}):o(q,{clsPrefix:a},{default:()=>o(oa,null)});n=T?T({type:"fast-forward",node:s,active:this.fastForwardActive||this.showFastForwardMenu}):s,l=this.handleFastForwardMouseenter,i=this.handleFastForwardMouseleave;break;case"fast-backward":const r=this.fastBackwardActive?o(q,{clsPrefix:a},{default:()=>this.rtlEnabled?o(Ce,null):o(xe,null)}):o(q,{clsPrefix:a},{default:()=>o(oa,null)});n=T?T({type:"fast-backward",node:r,active:this.fastBackwardActive||this.showFastBackwardMenu}):r,l=this.handleFastBackwardMouseenter,i=this.handleFastBackwardMouseleave}const u=o("div",{key:s,class:[`${a}-pagination-item`,e.active&&`${a}-pagination-item--active`,"page"!==r&&("fast-backward"===r&&this.showFastBackwardMenu||"fast-forward"===r&&this.showFastForwardMenu)&&`${a}-pagination-item--hover`,t&&`${a}-pagination-item--disabled`,"page"===r&&`${a}-pagination-item--clickable`],onClick:()=>{z(e)},onMouseenter:l,onMouseleave:i},n);if("page"!==r||e.mayBeFastBackward||e.mayBeFastForward){const a="page"===e.type?e.mayBeFastBackward?"fast-backward":"fast-forward":e.type;return"page"===e.type||e.options?o(va,{to:this.to,key:a,disabled:t,trigger:"hover",virtualScroll:!0,style:{width:"60px"},theme:d.peers.Popselect,themeOverrides:d.peerOverrides.Popselect,builtinThemeOverrides:{peers:{InternalSelectMenu:{height:"calc(var(--n-option-height) * 4.6)"}}},nodeProps:()=>({style:{justifyContent:"center"}}),show:"page"!==r&&("fast-backward"===r?this.showFastBackwardMenu:this.showFastForwardMenu),onUpdateShow:e=>{"page"!==r&&(e?"fast-backward"===r?this.showFastBackwardMenu=e:this.showFastForwardMenu=e:(this.showFastBackwardMenu=!1,this.showFastForwardMenu=!1))},options:"page"!==e.type&&e.options?e.options:[],onUpdateValue:this.handleMenuSelect,scrollable:!0,showCheckmark:!1},{default:()=>u}):u}return u}),o("div",{class:[`${a}-pagination-item`,!N&&`${a}-pagination-item--button`,{[`${a}-pagination-item--disabled`]:n<1||n>=l||t}],onClick:M},N?N({page:n,pageSize:m,pageCount:l,itemCount:this.mergedItemCount,startIndex:this.startIndex,endIndex:this.endIndex}):o(q,{clsPrefix:a},{default:()=>this.rtlEnabled?o(ke,null):o(je,null)})));case"size-picker":return!g&&r?o(Z,Object.assign({consistentMenuWidth:!1,placeholder:"",showCheckmark:!1,to:this.to},this.selectProps,{size:v,options:h,value:m,disabled:t,theme:d.peers.Select,themeOverrides:d.peerOverrides.Select,onUpdateValue:F})):null;case"quick-jumper":return!g&&u?o("div",{class:`${a}-pagination-quick-jumper`},j?j():W(this.$slots.goto,()=>[c.goto]),o(ve,{value:f,onUpdateValue:P,size:p,placeholder:"",disabled:t,theme:d.peers.Input,themeOverrides:d.peerOverrides.Input,onChange:I})):null;default:return null}}),$?o("div",{class:`${a}-pagination-suffix`},$({page:n,pageSize:m,pageCount:l,startIndex:this.startIndex,endIndex:this.endIndex,itemCount:this.mergedItemCount})):null)}}),ba={class:"project-instruction-panel"},wa={key:0,class:"unsupported-state"},ka={class:"resource-path"},Ca={__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 n=e,l=s,i=_e(),o=be(),r=_(n.instruction.content||""),d=_(!1),p=_(!1);async function f(){d.value=!0;try{const e=await ea(n.projectPath,n.platform,r.value);r.value=e.content??r.value,l("updated",e),i.success("项目指令已保存")}catch(e){i.error(`保存项目指令失败:${e.message}`)}finally{d.value=!1}}function g(){o.warning({title:"删除项目指令",content:`确定删除 ${n.instruction.path} 吗?`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{p.value=!0;try{const e=await ta(n.projectPath,n.platform);r.value="",l("updated",e),i.success("项目指令已删除")}catch(e){i.error(`删除项目指令失败:${e.message}`)}finally{p.value=!1}}})}return m(()=>n.instruction,e=>{r.value=e?.content||""},{deep:!0}),(s,n)=>(v(),M("div",ba,[e.instruction?.supported?(v(),M(w,{key:1},[I("div",ka,"目标文件:"+h(e.instruction.path),1),u(j(ve),{value:r.value,"onUpdate:value":n[0]||(n[0]=e=>r.value=e),type:"textarea",rows:16,placeholder:"输入项目指令",disabled:d.value},null,8,["value","disabled"]),u(j(Y),{justify:"end",class:"actions"},{default:y(()=>[e.instruction.exists?(v(),c(j(H),{key:0,"data-action":"delete-instruction",type:"error",secondary:"",loading:p.value,onClick:g},{default:y(()=>[...n[1]||(n[1]=[t(" 删除文件 ",-1)])]),_:1},8,["loading"])):a("",!0),u(j(H),{"data-action":"save-instruction",type:"primary",loading:d.value,onClick:f},{default:y(()=>[...n[2]||(n[2]=[t(" 保存 ",-1)])]),_:1},8,["loading"])]),_:1}),u(j(G),{depth:"3",class:"hint"},{default:y(()=>[...n[3]||(n[3]=[t(" 写入项目原生文件;修改后通常需要重新启动对应 CLI。 ",-1)])]),_:1})],64)):(v(),M("div",wa," 当前平台不提供项目指令文件 "))]))}},xa=V(Ca,[["__scopeId","data-v-f2f46409"]]),ja={class:"project-mcp-panel"},Pa={class:"panel-toolbar"},Fa={class:"resource-path"},_a={key:2,class:"server-list"},za={class:"server-info"},Ma={class:"server-title"},Ia={class:"server-spec"},Sa={__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 n=e,l=s,o=_e(),r=be(),d=_(!1),p=_(null),g=_(""),b=_(n.mcp),k=f(()=>b.value||n.mcp||{servers:[]}),C=f(()=>Array.isArray(k.value?.servers)?k.value.servers:[]),x=f(()=>C.value.some(e=>{const a=e.server||{};return Object.keys(a.env||{}).length>0||Object.keys(a.headers||{}).length>0}));function P(e){const a=e.server||{};return"stdio"===a.type?`${a.command||""} ${(a.args||[]).join(" ")}`.trim():a.url||a.type||"MCP"}function F(){p.value=null,d.value=!0}async function z(){d.value=!1,p.value=null,await S(),l("updated")}async function S(){const e=await Ge(n.projectPath,n.platform);b.value=e}return m(()=>n.mcp,e=>{b.value=e},{deep:!0}),m([()=>n.projectPath,()=>n.platform],()=>{n.projectPath&&n.platform&&S().catch(e=>o.error(`加载项目 MCP 失败:${e.message}`))}),(s,m)=>(v(),M("div",ja,[I("div",Pa,[I("span",Fa,"目标文件:"+h(k.value?.path||"当前平台未声明"),1),u(j(H),{size:"small",type:"primary",onClick:F},{default:y(()=>[...m[1]||(m[1]=[t(" 添加 MCP ",-1)])]),_:1})]),x.value?(v(),c(j(le),{key:0,type:"warning",bordered:!1,style:{"margin-bottom":"12px"}},{default:y(()=>[...m[2]||(m[2]=[t(" 项目 MCP 配置中的静态密钥可能随项目进入 Git,请优先使用环境变量引用。 ",-1)])]),_:1})):a("",!0),0===C.value.length?(v(),c(j(re),{key:1,description:"暂无项目 MCP 服务器"})):(v(),M("div",_a,[(v(!0),M(w,null,i(C.value,e=>(v(),M("div",{key:e.id,class:"server-row"},[I("div",za,[I("div",Ma,h(e.id),1),I("div",Ia,h(P(e)),1)]),u(j(Y),{size:"small"},{default:y(()=>[u(j(H),{size:"tiny",loading:g.value===e.id,onClick:a=>async function(e){g.value=e.id;try{const a=await Ye(n.projectPath,n.platform,e.id);a.success?o.success(`${e.id} 连接成功`):o.error(a.message||`${e.id} 连接失败`)}catch(a){o.error(`测试失败:${a.message}`)}finally{g.value=""}}(e)},{default:y(()=>[...m[3]||(m[3]=[t("测试",-1)])]),_:1},8,["loading","onClick"]),u(j(H),{size:"tiny",disabled:e.external,onClick:a=>function(e){p.value={id:e.id,...e},d.value=!0}(e)},{default:y(()=>[...m[4]||(m[4]=[t("编辑",-1)])]),_:1},8,["disabled","onClick"]),u(j(H),{size:"tiny",type:"error",secondary:"",disabled:e.external,onClick:a=>function(e){r.warning({title:"移除项目 MCP",content:`确定从当前项目移除 ${e.id} 吗?用户级配置不会被删除。`,positiveText:"移除",negativeText:"取消",onPositiveClick:async()=>{try{await Xe(n.projectPath,n.platform,e.id),await S(),l("updated"),o.success("项目 MCP 已移除")}catch(a){o.error(`移除失败:${a.message}`)}}})}(e)},{default:y(()=>[...m[5]||(m[5]=[t("移除",-1)])]),_:1},8,["disabled","onClick"])]),_:2},1024)]))),128))])),u(sa,{visible:d.value,"onUpdate:visible":m[0]||(m[0]=e=>d.value=e),"editing-server":p.value,"existing-ids":C.value.map(e=>e.id),scope:"project","project-path":e.projectPath,platform:e.platform,onSaved:z},null,8,["visible","editing-server","existing-ids","project-path","platform"])]))}},Ba=V(Sa,[["__scopeId","data-v-1ebbb765"]]),$a={class:"project-config-content"},Oa={class:"project-config-header"},Na={key:0,class:"unsupported-state"},Ta={key:0,class:"unsupported-state"},Aa=V({__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,n=a,{drawerWidth:l}=We(760),i=f({get:()=>s.show,set:e=>n("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=_(s.platform||"claude"),d=_("instruction"),g=_(null),b=_(!1),w=_(0);async function k(){if(!s.projectPath||!r.value)return;const e=++w.value;b.value=!0;try{const a=await aa(s.projectPath,r.value);if(e!==w.value)return;g.value=a}finally{e===w.value&&(b.value=!1)}}return m(i,e=>{e?(r.value=s.platform||"claude",d.value="instruction",k()):w.value+=1}),m([()=>s.projectPath,()=>s.platform,r],([e,a],t)=>{i.value&&e&&a&&(a===t?.[1]&&e===t?.[0]||k())}),p(()=>{i.value&&k()}),(a,s)=>(v(),c(j(Qe),{show:i.value,"onUpdate:show":s[2]||(s[2]=e=>i.value=e),width:j(l),placement:"right","show-mask":!0},{default:y(()=>[u(j(Je),{title:"项目配置",closable:"","native-scrollbar":!1},{default:y(()=>[I("div",$a,[I("div",Oa,[I("div",null,[s[3]||(s[3]=I("div",{class:"project-config-title"},"当前项目",-1)),u(j(G),{depth:"3",class:"project-path"},{default:y(()=>[t(h(e.projectPath),1)]),_:1})]),u(j(Z),{value:r.value,"onUpdate:value":s[0]||(s[0]=e=>r.value=e),size:"small",options:o,disabled:b.value,style:{width:"130px"}},null,8,["value","disabled"])]),u(j(X),{show:b.value},{default:y(()=>[u(j(Ze),{value:d.value,"onUpdate:value":s[1]||(s[1]=e=>d.value=e),type:"line",animated:""},{default:y(()=>[u(j(Ke),{name:"instruction",tab:"项目指令"},{default:y(()=>[u(xa,{"project-path":e.projectPath,platform:r.value,instruction:g.value?.instruction,onUpdated:k},null,8,["project-path","platform","instruction"])]),_:1}),u(j(Ke),{name:"skills",tab:"Skills"},{default:y(()=>[!1===g.value?.capabilities?.skills?(v(),M("div",Na," 当前平台不提供项目 Skills ")):(v(),c(na,{key:1,platform:r.value,"project-path":e.projectPath,scope:"project","in-drawer":"","drawer-visible":i.value},null,8,["platform","project-path","drawer-visible"]))]),_:1}),u(j(Ke),{name:"mcp",tab:"MCP"},{default:y(()=>[!1===g.value?.capabilities?.mcp?(v(),M("div",Ta," 当前平台不提供项目 MCP ")):(v(),c(Ba,{key:1,"project-path":e.projectPath,platform:r.value,mcp:g.value?.mcp,onUpdated:k},null,8,["project-path","platform","mcp"]))]),_:1})]),_:1},8,["value"])]),_:1},8,["show"])])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-e9a405fe"]]),Ua={class:"session-list-container"},Ra={class:"header"},Da={class:"title-bar"},Ea={class:"title-section"},La={class:"title-with-count"},qa={class:"header-actions"},Ha={key:0,class:"loading-container"},Va={key:1,class:"loading-container compact"},Qa={key:3,class:"sessions-list"},Wa=["onMouseenter","onClick"],Ja={class:"session-left"},Ka={class:"session-icon"},Za={class:"session-info"},Ga={class:"session-header"},Ya={class:"session-title-row"},Xa={class:"session-title"},et={class:"session-meta"},at={class:"session-right"},tt={class:"session-tags-area"},st={key:0,class:"session-actions"},nt={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},lt={class:"search-result-header"},it={class:"search-result-title"},ot="__full__",rt=V({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(e){const s=e,o=C(),r=F(),d=De(),{addFavorite:g,removeFavorite:S,isFavorite:B}=ne(),$=f(()=>He(r)),O=_(s.projectName),N=f(()=>O.value||s.projectName),T=_(""),A=_(null),U=_(!1),R=_(null),D=_(""),E=_(null),q=_([]),V=_(1),Q=_(null),W=_(!1),J=_(!1),ae=_(null),te=_(!1),ie=_(!1),oe=_([]),de=_(!1),ce=_(!1),he=_(null),fe=_(""),ge=_(ot),ye=_(!1),be=_(!1),ke=_([]),Ce=_(!1),xe=_(""),je=_(""),Pe=_(null);function Fe(e){return"string"==typeof e&&(e.startsWith("/")||/^[A-Za-z]:[\\/]/.test(e)||e.startsWith("\\\\"))}const _e=f(()=>{const e=N.value;return d.projects.find(a=>a.name===e)||d.projects.find(e=>e.displayName===s.projectName||e.fullPath===s.projectName||e.path===s.projectName)||null}),ze=f(()=>!0===_e.value?.readOnly||!0===d.currentProjectInfo?.readOnly||q.value.length>0&&q.value.every(e=>!0===e.readOnly));m(ze,e=>{e&&ie.value&&na()});const Me=f(()=>[d.currentProjectInfo?.fullPath,d.currentProjectInfo?.path,_e.value?.fullPath,_e.value?.path].find(Fe)||""),Qe=f(()=>d.currentProjectInfo?.displayName||_e.value?.displayName||s.projectName),We=f(()=>Me.value||d.currentProjectInfo?.fullPath||_e.value?.fullPath||_e.value?.path||N.value),Je=f(()=>new Set(oe.value)),Ke=f(()=>oe.value.length),Ze=f(()=>q.value.length>0&&q.value.every(e=>Je.value.has(e.sessionId))),Ge=f(()=>Ke.value>0&&!Ze.value);async function Ye(){d.projects.length||await d.fetchProjects();const e=d.projects.find(e=>e.name===s.projectName);if(e)return O.value=e.name,e.name;const a=d.projects.find(e=>e.displayName===s.projectName||e.fullPath===s.projectName||e.path===s.projectName);return a?(O.value=a.name,a.name!==s.projectName&&await o.replace({name:"cli-sessions",params:{platform:$.value,projectName:a.name}}),a.name):(O.value=s.projectName,s.projectName)}async function Xe(e={}){const a=await Ye(),t=e.page??V.value,s=e.limit??d.sessionsPagination.limit;await d.fetchSessions(a,{page:t,limit:s,...e})}async function ea(e){V.value=e,await Xe({page:e})}function aa(){o.push({name:"cli-projects",params:{platform:$.value}})}async function ta(){if(T.value){te.value=!0;try{const e=await Le(N.value,T.value,35,$.value);Q.value=e,W.value=!0}catch(e){ue.error("搜索失败: "+e.message)}finally{te.value=!1}}}function sa(){ze.value||(ie.value=!0,E.value=null)}function na(){ie.value=!1,oe.value=[],E.value=null}function la(e){return Je.value.has(e)}function ia(e,a=!la(e)){const t=new Set(oe.value);a?t.add(e):t.delete(e),oe.value=Array.from(t)}function oa(e){oe.value=e?q.value.map(e=>e.sessionId):[]}function ra(e){ie.value?ia(e.sessionId):function(e){xe.value=e.sessionId,je.value=e.alias||"",Ce.value=!0,l(()=>{Pe.value?.open()})}(e)}async function ua(){if(R.value)try{const e=R.value.sessionId;D.value?(await d.setAlias(e,D.value),ue.success("别名设置成功")):(await d.deleteAlias(e),ue.success("别名已删除")),U.value=!1,R.value=null,D.value=""}catch(e){ue.error("操作失败: "+e.message)}}function da(){ce.value=!1,he.value=null,fe.value="",ge.value=ot,ke.value=[],ye.value=!1,be.value=!1}async function ca(){if(!he.value||ze.value||he.value.readOnly)da();else try{be.value=!0,await d.forkSession(he.value.sessionId,{afterUserMessageNumber:ge.value===ot?null:ge.value,alias:fe.value?.trim()||void 0}),ue.success("Fork 成功!"),da()}catch(e){ue.error("Fork 失败: "+e.message)}finally{be.value=!1}}function pa(e){ue.error(e)}function va(e){const a=new Set((e||[]).filter(Boolean));0!==a.size&&(oe.value=oe.value.filter(e=>!a.has(e)),xe.value&&a.has(xe.value)&&(Ce.value=!1,xe.value="",je.value=""))}async function ma(e){const a=q.value.find(a=>a.sessionId===e);if(!ze.value&&!a?.readOnly)try{const{copyResult:a}=await qe(N.value,e,$.value);if("manual"===a?.method)return void ue.warning("自动复制失败,已弹出手动复制框");ue.success("启动命令已复制到剪贴板")}catch(t){ue.error("复制失败: "+t.message)}}function ha(){if(ze.value||oe.value.some(e=>q.value.find(a=>a.sessionId===e)?.readOnly))return;if(0===Ke.value)return void ue.warning("请先选择要删除的会话");const e=[...oe.value];ee.warning({title:"批量删除会话",content:`确定要删除选中的 ${e.length} 个会话吗?此操作不可恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{de.value=!0;try{const a=await d.deleteSessions(e);if(va(a.deletedSessionIds),0===a.failed.length)return ue.success(`已删除 ${a.deletedSessionIds.length} 个会话`),void na();oe.value=a.failed.map(e=>e.sessionId),a.deletedSessionIds.length>0?ue.warning(`已删除 ${a.deletedSessionIds.length} 个会话,${a.failed.length} 个删除失败`):ue.error(`删除失败: ${a.failed[0].error.message}`)}finally{de.value=!1}}})}function fa(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 ga(e,a){if(!a||!e)return e;const t=new RegExp(`(${a})`,"gi");return e.replace(t,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function ba(e,a=80){return e?e.length>a?e.substring(0,a)+"...":e:""}m(()=>d.sessionsWithAlias,e=>{q.value=[...e];const a=new Set(e.map(e=>e.sessionId));oe.value=oe.value.filter(e=>a.has(e)),ie.value&&0===e.length&&na()},{immediate:!0});let wa=0,ka=!1;async function Ca(){if("visible"!==document.visibilityState||ka)return;const e=Date.now();if(!(e-wa<3e4)){ka=!0,wa=e;try{const e=ae.value?.scrollTop||0,a=await Ye();await d.fetchSessions(a,{page:V.value,limit:d.sessionsPagination.limit,force:!0,silent:!0,fresh:!0}),await l(),ae.value&&(ae.value.scrollTop=e)}finally{ka=!1}}}function xa(){"visible"===document.visibilityState&&Ca().catch(()=>{})}function ja(){Ca().catch(()=>{})}function Pa(e){(e.metaKey||e.ctrlKey)&&"k"===String(e.key).toLowerCase()&&(e.preventDefault(),A.value?.querySelector?.("input")?.focus?.())}return m([$,()=>s.projectName],([e])=>{J.value=!1,na(),d.setChannel(e),V.value=1,Xe()},{immediate:!0}),p(()=>{document.addEventListener("visibilitychange",xa),window.addEventListener("focus",ja),document.addEventListener("keydown",Pa)}),n(()=>{document.removeEventListener("visibilitychange",xa),window.removeEventListener("focus",ja),document.removeEventListener("keydown",Pa)}),(e,s)=>(v(),M("div",Ua,[I("div",Ra,[I("div",Da,[u(j(H),{size:"small",onClick:aa,class:"back-button"},{icon:y(()=>[u(j(L),{size:"18"},{default:y(()=>[u(j(Se))]),_:1})]),_:1}),I("div",Ea,[I("div",La,[u(j(K),null,{default:y(()=>[t(h(Qe.value),1)]),_:1}),u(j(G),{depth:"3",class:"session-count"},{default:y(()=>[t("("+h(j(d).sessionsPagination.total)+" 个对话)",1)]),_:1}),u(j(me),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:y(()=>[t(h(fa(j(d).totalSize)),1)]),_:1}),I("div",qa,[ie.value&&!ze.value?(v(),M(w,{key:0},[u(j(pe),{checked:Ze.value,indeterminate:Ge.value,disabled:0===q.value.length||de.value,"onUpdate:checked":oa},{default:y(()=>[...s[14]||(s[14]=[t(" 全选 ",-1)])]),_:1},8,["checked","indeterminate","disabled"]),u(j(G),{depth:"3"},{default:y(()=>[t("已选 "+h(Ke.value)+" 个",1)]),_:1}),u(j(H),{size:"small",type:"error",disabled:0===Ke.value,loading:de.value,onClick:ha},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j(Re))]),_:1})]),default:y(()=>[s[15]||(s[15]=t(" 删除 ",-1))]),_:1},8,["disabled","loading"]),u(j(H),{size:"small",disabled:de.value,onClick:na},{default:y(()=>[...s[16]||(s[16]=[t(" 完成 ",-1)])]),_:1},8,["disabled"])],64)):(v(),M(w,{key:1},[ze.value?a("",!0):(v(),c(j(H),{key:0,size:"small",type:"error",secondary:"",onClick:sa},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j(Re))]),_:1})]),default:y(()=>[s[17]||(s[17]=t(" 管理 ",-1))]),_:1})),u(j(H),{size:"small",type:"primary",secondary:"",disabled:!Me.value,onClick:s[0]||(s[0]=e=>J.value=!0)},{default:y(()=>[...s[18]||(s[18]=[t(" 项目配置 ",-1)])]),_:1},8,["disabled"])],64))])]),u(j(G),{depth:"3",class:"project-path"},{default:y(()=>[t(h(We.value),1)]),_:1})]),I("div",{ref_key:"searchInputContainer",ref:A,class:"search-input-container"},[u(j(ve),{value:T.value,"onUpdate:value":s[1]||(s[1]=e=>T.value=e),placeholder:"搜索会话...(Cmd/Ctrl+K)",clearable:"",class:"search-input",onKeyup:P(ta,["enter"]),disabled:te.value},{prefix:y(()=>[u(j(L),null,{default:y(()=>[u(j(Ne))]),_:1})]),suffix:y(()=>[u(j(H),{text:"",onClick:ta,disabled:!T.value||te.value,loading:te.value},{default:y(()=>[...s[19]||(s[19]=[t(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])],512)])]),I("div",{class:"content",ref_key:"contentEl",ref:ae},[j(d).loading&&0===j(d).sessions.length&&!j(d).sessionsPending?(v(),M("div",Ha,[u(j(X),{size:"large"},{description:y(()=>[...s[20]||(s[20]=[t(" 加载会话列表... ",-1)])]),_:1})])):j(d).sessionsPending?(v(),M("div",Va,[u(j(X),{size:"small"},{description:y(()=>[...s[21]||(s[21]=[t(" 正在生成会话列表... ",-1)])]),_:1})])):j(d).error&&0===j(d).sessions.length?(v(),c(j(le),{key:2,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:y(()=>[t(h(j(d).error),1)]),_:1})):q.value.length>0?(v(),M("div",Qa,[(v(!0),M(w,null,i(q.value,e=>(v(),M("div",{key:e.sessionId},[I("div",{class:k(["session-item",{"session-item-selected":la(e.sessionId),"session-item-selection-mode":ie.value}]),onMouseenter:a=>E.value=e.sessionId,onMouseleave:s[3]||(s[3]=e=>E.value=null),onClick:a=>ra(e)},[!ie.value||e.readOnly||ze.value?a("",!0):(v(),M("div",{key:0,class:"selection-checkbox",onClick:s[2]||(s[2]=x(()=>{},["stop"]))},[u(j(pe),{checked:la(e.sessionId),"onUpdate:checked":a=>ia(e.sessionId,a)},null,8,["checked","onUpdate:checked"])])),I("div",Ja,[I("div",Ka,[u(j(L),{size:"24",color:"#18a058"},{default:y(()=>[u(j(Be))]),_:1})]),I("div",Za,[I("div",Ga,[I("div",Ya,[I("span",Xa,h(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId),1),e.forkedFrom?(v(),c(j(se),{key:0,placement:"top"},{trigger:y(()=>[u(j(me),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j($e))]),_:1})]),default:y(()=>[s[22]||(s[22]=t(" Fork ",-1))]),_:1})]),default:y(()=>[t(" Fork 自: "+h(e.forkedFrom),1)]),_:2},1024)):a("",!0)])]),I("div",et,[u(j(G),{depth:"3"},{default:y(()=>{return[t(h((a=e.mtime,a?new Date(a).toLocaleString("zh-CN"):"")),1)];var a}),_:2},1024),u(j(G),{depth:"3"},{default:y(()=>[...s[23]||(s[23]=[t("•",-1)])]),_:1}),u(j(me),{size:"small",bordered:!1},{default:y(()=>[t(h(fa(e.size)),1)]),_:2},1024)]),e.firstMessage?(v(),c(j(G),{key:0,depth:"3",class:"session-message"},{default:y(()=>[t(h(ba(e.firstMessage,80)),1)]),_:2},1024)):e.gitBranch||e.summary?a("",!0):(v(),c(j(G),{key:1,depth:"3",class:"session-message session-message-empty"},{default:y(()=>[...s[24]||(s[24]=[t(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),I("div",at,[I("div",tt,[e.gitBranch?(v(),c(j(me),{key:0,size:"small",type:"info",bordered:!1},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j($e))]),_:1})]),default:y(()=>[t(" "+h(e.gitBranch),1)]),_:2},1024)):a("",!0)]),ie.value?a("",!0):(v(),M("div",st,[u(j(Y),null,{default:y(()=>[e.readOnly||ze.value?a("",!0):z((v(),c(j(H),{key:0,size:"small",type:"error",onClick:x(a=>function(e){const a=q.value.find(a=>a.sessionId===e);ze.value||a?.readOnly||ee.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await d.deleteSession(e),va([e]),ue.success("会话已删除")}catch(a){ue.error("删除失败: "+a.message)}}})}(e.sessionId),["stop"])},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j(Re))]),_:1})]),default:y(()=>[s[25]||(s[25]=t(" 删除 ",-1))]),_:1},8,["onClick"])),[[b,E.value===e.sessionId]]),u(j(H),{size:"small",onClick:x(a=>function(e){R.value=e,D.value=e.alias||"",U.value=!0}(e),["stop"])},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j(Ue))]),_:1})]),default:y(()=>[s[26]||(s[26]=t(" 别名 ",-1))]),_:1},8,["onClick"]),u(j(H),{size:"small",type:j(B)($.value,N.value,e.sessionId)?"warning":"default",onClick:x(a=>async function(e){const a=$.value,t=B(a,N.value,e.sessionId);try{if(t)await S(a,N.value,e.sessionId),ue.success("已取消收藏");else{const t={sessionId:e.sessionId,projectName:N.value,projectDisplayName:Qe.value,projectFullPath:We.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await g(a,t),ue.success("已添加到收藏")}}catch(s){ue.error("操作失败: "+s.message)}}(e),["stop"])},{icon:y(()=>[u(j(L),null,{default:y(()=>[j(B)($.value,N.value,e.sessionId)?(v(),c(j(Ae),{key:0})):(v(),c(j(Oe),{key:1}))]),_:2},1024)]),default:y(()=>[t(" "+h(j(B)($.value,N.value,e.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"===$.value||e.readOnly?a("",!0):(v(),c(j(H),{key:1,size:"small",onClick:x(a=>async function(e){const a=q.value.find(a=>a.sessionId===e);if(!ze.value&&!a?.readOnly)if("opencode"!==$.value)try{he.value=a||{sessionId:e},fe.value="",ge.value=ot,ke.value=[{label:"完整会话末尾(保留全部消息)",value:ot}],ce.value=!0,ye.value=!0;const t=await Ee(N.value,e,$.value),s=Array.isArray(t?.items)?t.items:[];ke.value=[{label:"完整会话末尾(保留全部消息)",value:ot},...s.map(e=>({label:`保留到第 ${e.userMessageNumber} 条用户消息这一轮 · ${e.preview}`,value:e.userMessageNumber}))]}catch(t){ue.error("加载 Fork 位置失败: "+t.message),da()}finally{ye.value=!1}else ue.warning("OpenCode 当前不支持该 Fork 操作")}(e.sessionId),["stop"])},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j($e))]),_:1})]),default:y(()=>[s[27]||(s[27]=t(" Fork ",-1))]),_:1},8,["onClick"])),e.readOnly?a("",!0):(v(),c(j(H),{key:2,size:"small",type:"primary",onClick:x(a=>ma(e.sessionId),["stop"])},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j(Te))]),_:1})]),default:y(()=>[s[28]||(s[28]=t(" 使用对话 ",-1))]),_:1},8,["onClick"]))]),_:2},1024)]))])],42,Wa)]))),128))])):a("",!0),j(d).sessionsPagination.total>j(d).sessionsPagination.limit?(v(),c(j(ya),{key:4,page:V.value,"onUpdate:page":[s[4]||(s[4]=e=>V.value=e),ea],"page-count":Math.ceil(j(d).sessionsPagination.total/j(d).sessionsPagination.limit),"page-size":j(d).sessionsPagination.limit,"show-quick-jumper":"",class:"list-pagination"},null,8,["page","page-count","page-size"])):a("",!0),j(d).loading||j(d).error||j(d).sessionsPending||0!==q.value.length?a("",!0):(v(),c(j(re),{key:5,description:T.value?"当前页没有匹配的会话":"没有找到会话",style:{"margin-top":"60px"}},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j(Ie))]),_:1})]),_:1},8,["description"]))],512),u(j(we),{show:U.value,"onUpdate:show":s[7]||(s[7]=e=>U.value=e),preset:"dialog",title:"设置别名"},{action:y(()=>[u(j(Y),null,{default:y(()=>[u(j(H),{onClick:s[6]||(s[6]=e=>U.value=!1)},{default:y(()=>[...s[29]||(s[29]=[t("取消",-1)])]),_:1}),u(j(H),{type:"primary",onClick:ua},{default:y(()=>[...s[30]||(s[30]=[t("确定",-1)])]),_:1})]),_:1})]),default:y(()=>[u(j(ve),{value:D.value,"onUpdate:value":s[5]||(s[5]=e=>D.value=e),placeholder:"输入别名(留空删除)",onKeyup:P(ua,["enter"])},null,8,["value"])]),_:1},8,["show"]),u(j(we),{show:ce.value,"onUpdate:show":s[10]||(s[10]=e=>ce.value=e),preset:"dialog",title:"Fork 对话"},{action:y(()=>[u(j(Y),null,{default:y(()=>[u(j(H),{disabled:be.value,onClick:da},{default:y(()=>[...s[32]||(s[32]=[t("取消",-1)])]),_:1},8,["disabled"]),u(j(H),{type:"primary",loading:be.value,onClick:ca},{default:y(()=>[...s[33]||(s[33]=[t(" 确认 Fork ",-1)])]),_:1},8,["loading"])]),_:1})]),default:y(()=>[u(j(Y),{vertical:"",size:14},{default:y(()=>[u(j(G),{depth:"3"},{default:y(()=>[...s[31]||(s[31]=[t(" 可选择保留到第几条用户消息所在轮次;会包含这条消息后 AI 的完整输出。 ",-1)])]),_:1}),u(j(Z),{value:ge.value,"onUpdate:value":s[8]||(s[8]=e=>ge.value=e),options:ke.value,loading:ye.value,clearable:"",placeholder:"选择保留到哪一轮(默认完整会话)"},null,8,["value","options","loading"]),u(j(ve),{value:fe.value,"onUpdate:value":s[9]||(s[9]=e=>fe.value=e),placeholder:"输入新会话别名(可选)",maxlength:"120"},null,8,["value"])]),_:1})]),_:1},8,["show"]),u(j(we),{show:W.value,"onUpdate:show":s[11]||(s[11]=e=>W.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:y(()=>[Q.value?(v(),M("div",nt,[u(j(le),{type:"info",style:{"margin-bottom":"16px"}},{default:y(()=>[t(' 关键词 "'+h(Q.value.keyword)+'" 共找到 '+h(Q.value.totalMatches)+" 处匹配 ",1)]),_:1}),(v(!0),M(w,null,i(Q.value.sessions,e=>(v(),M("div",{key:e.sessionId,class:"search-result-item"},[I("div",lt,[I("div",it,[u(j(G),{strong:""},{default:y(()=>[t(h(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId.substring(0,8)),1)]),_:2},1024),u(j(me),{size:"small",bordered:!1},{default:y(()=>[t(h(e.matchCount)+" 个匹配",1)]),_:2},1024)]),e.readOnly?a("",!0):(v(),c(j(H),{key:0,size:"small",type:"primary",onClick:a=>ma(e.sessionId)},{icon:y(()=>[u(j(L),null,{default:y(()=>[u(j(Te))]),_:1})]),default:y(()=>[s[34]||(s[34]=t(" 使用对话 ",-1))]),_:1},8,["onClick"]))]),(v(!0),M(w,null,i(e.matches,(e,a)=>(v(),M("div",{key:a,class:"search-match"},[u(j(me),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:y(()=>[t(h("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),u(j(G),{depth:"3",class:"search-match-text",innerHTML:ga(e.context,Q.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Q.value.sessions.length?(v(),c(j(re),{key:0,description:"没有找到匹配的内容"})):a("",!0)])):a("",!0)]),_:1},8,["show"]),xe.value?(v(),c(Ve,{key:0,ref_key:"chatHistoryRef",ref:Pe,show:Ce.value,"onUpdate:show":s[12]||(s[12]=e=>Ce.value=e),"project-name":N.value,"session-id":xe.value,"session-alias":je.value,channel:$.value,onError:pa},null,8,["show","project-name","session-id","session-alias","channel"])):a("",!0),u(Aa,{show:J.value,"onUpdate:show":s[13]||(s[13]=e=>J.value=e),"project-path":Me.value,platform:$.value},null,8,["show","project-path","platform"])]))}},[["__scopeId","data-v-846e06b4"]]);export{rt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as a,D as t,I as l,K as s,M as n,O as i,S as o,V as r,W as u,Y as d,Z as c,_t as p,b as v,dt as f,et as m,f as y,g,ht as h,l as b,m as w,mt as x,rt as k,st as _,tt as z,u as C,w as P,x as S}from"./vue-vendor-Cr_NLmXY.js";import{n as U,t as O}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as j}from"./DrawerContent-BYlV968f.js";import{$ as A,A as N,D as I,E as L,H as $,M as B,P as T,St as M,X as E,Z as D,at as R,ct as W,ft as Y,j as J,k as q,rt as F,st as H,ut as V,y as X}from"./index-BXWpib7P.js";import{E as Z,F as K,I as G,Mt as Q,N as ee,P as ae,bt as te,gn as le,gt as se,hn as ne,ht as ie,i as oe,m as re,p as ue,s as de,t as ce,vn as pe,xn as ve,xt as fe,yn as me}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{h as ye}from"./use-message-BYx0IRj1.js";import{t as ge}from"./Divider-CEqaZMTW.js";import{l as he}from"./light-DeIjG9s_.js";import{N as be,Nt as we,P as xe,_ as ke,_t as _e,d as ze,ht as Ce,j as Pe,m as Se,o as Ue,ot as Oe,p as je,r as Ae,t as Ne,vt as Ie,yt as Le}from"./icons-C6KNTFqo.js";import{d as $e,l as Be,o as Te,s as Me,t as Ee,u as De}from"./platforms-BdTllxKt.js";import{t as Re}from"./client-B31QOzWk.js";var We=e({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=_(null),t=_(e.value),s=_(e.value),i=_("up"),o=_(!1),r=v(()=>o.value?`${e.clsPrefix}-base-slot-machine-current-number--${i.value}-scroll`:null),u=v(()=>o.value?`${e.clsPrefix}-base-slot-machine-old-number--${i.value}-scroll`:null);function d(){const a=e.newOriginalNumber,t=e.oldOriginalNumber;void 0!==t&&void 0!==a&&(a>t?p("up"):t>a&&p("down"))}function p(e){i.value=e,o.value=!1,l(()=>{var e;null===(e=a.value)||void 0===e||e.offsetWidth,o.value=!0})}return c(f(e,"value"),(e,a)=>{t.value=a,s.value=e,l(d)}),()=>{const{clsPrefix:l}=e;return n("span",{ref:a,class:`${l}-base-slot-machine-number`},null!==t.value?n("span",{class:[`${l}-base-slot-machine-old-number ${l}-base-slot-machine-old-number--top`,u.value]},t.value):null,n("span",{class:[`${l}-base-slot-machine-current-number`,r.value]},n("span",{ref:"numberWrapper",class:[`${l}-base-slot-machine-current-number__inner`,"number"!=typeof e.value&&`${l}-base-slot-machine-current-number__inner--not-number`]},s.value)),null!==t.value?n("span",{class:[`${l}-base-slot-machine-old-number ${l}-base-slot-machine-old-number--bottom`,u.value]},t.value):null)}}}),{cubicBezierEaseOut:Ye}=K;var Je=ne([ne("@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 "),ne("@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 "),ne("@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 "),ne("@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 "),le("base-slot-machine","\n overflow: hidden;\n white-space: nowrap;\n display: inline-block;\n height: 18px;\n line-height: 18px;\n ",[le("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[ne("&.fade-up-width-expand-transition-leave-active",{transition:`\n opacity ${e} ${Ye},\n max-width ${e} ${Ye},\n transform ${e} ${Ye}\n `}),ne("&.fade-up-width-expand-transition-enter-active",{transition:`\n opacity ${e} ${Ye},\n max-width ${e} ${Ye},\n transform ${e} ${Ye}\n `}),ne("&.fade-up-width-expand-transition-enter-to",{opacity:1,transform:"translateX(0) translateY(0)"}),ne("&.fade-up-width-expand-transition-enter-from",{maxWidth:"0 !important",opacity:0,transform:"translateY(60%)"}),ne("&.fade-up-width-expand-transition-leave-from",{opacity:1,transform:"translateY(0)"}),ne("&.fade-up-width-expand-transition-leave-to",{maxWidth:"0 !important",opacity:0,transform:"translateY(60%)"})]}({duration:".2s"}),re({duration:".2s",delay:"0s"}),le("base-slot-machine-old-number","\n display: inline-block;\n opacity: 0;\n position: absolute;\n left: 0;\n right: 0;\n ",[me("top",{transform:"translateY(-100%)"}),me("bottom",{transform:"translateY(100%)"}),me("down-scroll",{animation:"n-base-slot-machine-fade-down-out .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),me("up-scroll",{animation:"n-base-slot-machine-fade-up-out .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1})]),le("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 ",[me("down-scroll",{animation:"n-base-slot-machine-fade-down-in .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),me("up-scroll",{animation:"n-base-slot-machine-fade-up-in .2s cubic-bezier(0, 0, .2, 1)",animationIterationCount:1}),pe("inner","\n display: inline-block;\n position: absolute;\n right: 0;\n top: 0;\n width: .6em;\n ",[me("not-number","\n right: unset;\n left: 0;\n ")])])])])]),qe=e({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(e){ae("-base-slot-machine",Je,f(e,"clsPrefix"));const a=_(),t=_(),l=v(()=>{if("string"==typeof e.value)return[];if(e.value<1)return[0];const a=[];let t=e.value;for(void 0!==e.max&&(t=Math.min(e.max,t));t>=1;)a.push(t%10),t/=10,t=Math.floor(t);return a.reverse(),a});return c(f(e,"value"),(e,l)=>{"string"==typeof e?(t.value=void 0,a.value=void 0):"string"==typeof l?(t.value=e,a.value=void 0):(t.value=e,a.value=l)}),()=>{const{value:s,clsPrefix:i}=e;return"number"==typeof s?n("span",{class:`${i}-base-slot-machine`},n(C,{name:"fade-up-width-expand-transition",tag:"span"},{default:()=>l.value.map((e,s)=>n(We,{clsPrefix:i,key:l.value.length-s-1,oldOriginalNumber:a.value,newOriginalNumber:t.value,value:e}))}),n(Z,{key:"+",width:!0},{default:()=>void 0!==e.max&&e.max<s?n(We,{clsPrefix:i,value:"+"}):null})):n("span",{class:`${i}-base-slot-machine`},s)}}}),Fe=ne([ne("@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}}),le("badge","\n display: inline-flex;\n position: relative;\n vertical-align: middle;\n font-family: var(--n-font-family);\n ",[me("as-is",[le("badge-sup",{position:"static",transform:"translateX(0)"},[ye({transformOrigin:"left bottom",originalTransform:"translateX(0)"})])]),me("dot",[le("badge-sup","\n height: 8px;\n width: 8px;\n padding: 0;\n min-width: 8px;\n left: 100%;\n bottom: calc(100% - 4px);\n ",[ne("::before","border-radius: 4px;")])]),le("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 ",[ye({transformOrigin:"left bottom",originalTransform:"translateX(-50%)"}),le("base-wave",{zIndex:1,animationDuration:"2s",animationIterationCount:"infinite",animationDelay:"1s",animationTimingFunction:"var(--n-ripple-bezier)",animationName:"badge-wave-spread"}),ne("&::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 ')])])]),He=e({name:"Badge",props:Object.assign(Object.assign({},ee.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:t,inlineThemeDisabled:l,mergedRtlRef:s}=se(e),n=ee("Badge","-badge",Fe,R,e,t),i=_(!1),o=v(()=>e.show&&(e.dot||void 0!==e.value&&!(!e.showZero&&Number(e.value)<=0)||!te(a.value)));r(()=>{o.value&&(i.value=!0)});const u=G("Badge",s,t),d=v(()=>{const{type:a,color:t}=e,{common:{cubicBezierEaseInOut:l,cubicBezierEaseOut:s},self:{[ve("color",a)]:i,fontFamily:o,fontSize:r}}=n.value;return{"--n-font-size":r,"--n-font-family":o,"--n-color":t||i,"--n-ripple-color":t||i,"--n-bezier":l,"--n-ripple-bezier":s}}),c=l?ie("badge",v(()=>{let a="";const{type:t,color:l}=e;return t&&(a+=t[0]),l&&(a+=Q(l)),a}),d,e):void 0,p=v(()=>{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==u?void 0:u.value)?"50%":"-50%"} + ${s}), ${n})`}});return{rtlEnabled:u,mergedClsPrefix:t,appeared:i,showBadge:o,handleAfterEnter:()=>{i.value=!0},handleAfterLeave:()=>{i.value=!1},cssVars:l?void 0:d,themeClass:null==c?void 0:c.themeClass,onRender:null==c?void 0:c.onRender,offsetStyle:p}},render(){var e;const{mergedClsPrefix:a,onRender:t,themeClass:l,$slots:s}=this;null==t||t();const i=null===(e=s.default)||void 0===e?void 0:e.call(s);return n("div",{class:[`${a}-badge`,this.rtlEnabled&&`${a}-badge--rtl`,l,{[`${a}-badge--dot`]:this.dot,[`${a}-badge--as-is`]:!i}],style:this.cssVars},i,n(b,{name:"fade-in-scale-up-transition",onAfterEnter:this.handleAfterEnter,onAfterLeave:this.handleAfterLeave},{default:()=>this.showBadge?n("sup",{class:`${a}-badge-sup`,title:M(this.value),style:this.offsetStyle},fe(s.value,()=>[this.dot?null:n(qe,{clsPrefix:a,appeared:this.appeared,max:this.max,value:this.value})]),this.processing?n(ue,{clsPrefix:a}):null):null}))}}),Ve={class:"remote-provider-fields"},Xe={class:"remote-field-label"},Ze=ce({__name:"RemoteProviderFields",props:{provider:{type:Object,required:!0},definition:{type:Object,default:null}},setup(e){const a=e,t=v(()=>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 n(e){return"secret"===e.type?"password":"text"}return(a,i)=>(u(),P("div",Ve,[(u(!0),P(g,null,s(t.value,a=>z((u(),P("div",{key:a.key,class:h(["remote-field",{"remote-field-wide":!0===a.wide}])},[S("span",Xe,p(a.label),1),"select"===a.type?(u(),o(x(A),{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(),o(x(H),{key:1,value:e.provider.config[a.key],"onUpdate:value":t=>e.provider.config[a.key]=t,size:"small",type:n(a),"show-password-on":"secret"===a.type?"click":void 0,placeholder:a.placeholder},null,8,["value","onUpdate:value","type","show-password-on","placeholder"]))],2)),[[y,l(a)]])),128))]))}},[["__scopeId","data-v-44913e2a"]]);var Ke={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"},Ua={key:0,class:"theme-check"},Oa={class:"theme-text"},ja={key:0,class:"theme-check"},Aa={class:"settings-panel"},Na={class:"panel-header"},Ia={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"},Da={class:"visibility-info"},Ra={key:1,class:"notification-type-section"},Wa={class:"radio-content"},Ya={class:"radio-content"},Ja={class:"radio-content"},qa={style:{"font-size":"13px"}},Fa={class:"setting-item"},Ha={class:"setting-label"},Va={class:"notification-options"},Xa={class:"remote-provider-toolbar"},Za={class:"remote-provider-header"},Ka={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"},Ut={class:"option-field"},Ot={class:"option-label"},jt={class:"setting-item"},At={class:"setting-label"},Nt={style:{"margin-top":"16px"}},It={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"},Dt={class:"setting-group"},Rt={class:"setting-item"},Wt={class:"setting-label"},Yt={class:"security-status"},Jt={class:"setting-item"},qt={class:"setting-label"},Ft={class:"security-form"},Ht={class:"panel-footer"},Vt={class:"settings-panel"},Xt={class:"panel-header"},Zt={class:"panel-title-row"},Kt={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=ce({__name:"SettingsDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(e,{emit:l}){const{drawerWidth:n,isMobile:f}=O(720),b=Ee(),{uiConfig:C}=Te();async function M(e){return(await Re.post("/settings/model-settings",e)).data}async function R(e){return(await Re.delete(`/settings/model-settings/${encodeURIComponent(e)}`)).data}const Z=e,K=l,G=v({get:()=>Z.visible,set:e=>K("update:visible",e)}),Q=_("appearance"),{isDark:ee,toggleTheme:ae}=X(),te=_(!0),le=_(!0),se=_(!1),ne=_({webUI:19999}),ie=_({webUI:19999}),re=v(()=>[{key:"webUI",label:"Web UI",defaultPort:19999},...b.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}))]),ue=_(!1),ce=_([...Me]),pe=_([...Me]),ve=_(!1),fe=_(!1),me=_(!1),ye=v(()=>fe.value?"[v] 已启用":"未启用"),We=v(()=>fe.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 qe=_(Je()),Fe=_(Je()),Ve=_([]),Xe=_([]);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=Ve.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=_(_l()),Cl=_(_l()),Pl=_(!1),Sl=_(""),Ul=_(""),Ol=v(()=>Xe.value.map(e=>({label:e.label||e.type,value:e.type}))),jl=_(""),Al=_("default"),Nl=v(()=>"undefined"!=typeof window&&"undefined"!=typeof Notification&&(!!window.isSecureContext||["localhost","127.0.0.1","::1"].includes(window.location.hostname))),Il=v(()=>Nl.value?"granted"===Al.value?"已授权":"denied"===Al.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"===Al.value?"通过当前打开的 Web 页面显示浏览器原生通知":"denied"===Al.value?"浏览器通知权限已被拒绝,需要先在浏览器中重新授权":"通过当前打开的 Web 页面显示原生通知,保存时会请求权限":"当前页面环境不支持浏览器通知":"dialog"===e?"强制提醒,需要手动点击确认才能关闭":"win32"===jl.value?"轻量提醒,几秒后自动消失,带提示音(Windows 使用系统 Toast 风格提醒)":"轻量提醒,几秒后自动消失,带提示音"}function Bl(){"undefined"!=typeof Notification?Al.value=Notification.permission:Al.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}(Ul.value);e&&zl.value.remoteNotifications.providers.push(e)}const Ml=_({hasPassword:!1}),El=_(!1),Dl=_(!1),Rl=_({currentPassword:"",newPassword:"",confirmPassword:""}),Wl=_(!1),Yl=v(()=>{const e=Rl.value.currentPassword.trim(),a=Rl.value.newPassword,t=Rl.value.confirmPassword;return Ml.value.hasPassword&&!e?"请输入当前密码":a?a.length<4?"新密码至少需要 4 位":t&&a!==t?"两次输入的新密码不一致":"":""}),Jl=v(()=>{const e=Rl.value;return(!Ml.value.hasPassword||Boolean(e.currentPassword.trim()))&&e.newPassword.length>=4&&e.newPassword===e.confirmPassword});let ql=null;const Fl=_({name:"Models.dev",url:"",lastUpdated:""}),Hl=_(!1),Vl=_(!1),Xl=_({}),Zl=_({}),Kl=_({}),Gl=_(""),Ql=_("all"),es=_([]),as=_(!1),ts=_({modelId:"",context:128e3,output:8192,inputPrice:0,outputPrice:0,cacheCreationPrice:0,cacheReadPrice:0}),ls=_(new Set),ss=_({}),ns=_({}),is=v(()=>es.value.length>0?es.value.map(e=>({key:e.key,label:e.label||e.key,models:Array.isArray(e.models)?e.models:[]})):Object.keys(ss.value).map(e=>{const a="function"==typeof b.get?b.get(e):null;return{key:e,label:a?.label||a?.title||e,models:[]}})),os=_(new Set),rs=v(()=>Object.keys(Kl.value).length>0),us=v(()=>rs.value||JSON.stringify(ss.value)!==JSON.stringify(ns.value)),ds=v(()=>{const e=String(ts.value.modelId||"").trim();if(!e)return"请输入模型 ID";const a=Object.keys(Xl.value).find(a=>a.toLowerCase()===e.toLowerCase());return a?`模型已存在:${a}`:!Number.isFinite(ts.value.context)||ts.value.context<=0?"Context 窗口必须为正数":!Number.isFinite(ts.value.output)||ts.value.output<=0?"Max Output 必须为正数":ts.value.inputPrice<0||ts.value.outputPrice<0||ts.value.cacheCreationPrice<0||ts.value.cacheReadPrice<0?"价格不能为负数":""});function cs(){ts.value={modelId:"",context:128e3,output:8192,inputPrice:0,outputPrice:0,cacheCreationPrice:0,cacheReadPrice:0},as.value=!0}function ps(){as.value=!1}function vs(){if(ds.value)return;const e=String(ts.value.modelId||"").trim(),a={limit:{context:ts.value.context,output:ts.value.output},pricing:{input:ts.value.inputPrice,output:ts.value.outputPrice,cacheCreation:ts.value.cacheCreationPrice,cacheRead:ts.value.cacheReadPrice}};Xl.value[e]=a,Kl.value[e]={limit:{...a.limit},pricing:{...a.pricing}},Gl.value=e,as.value=!1,q.success("模型已新增,请点击“保存设置”使其生效")}function fs(e){return ls.value.has(e)}function ms(e){return!fs(e)}const ys={claude:"claude",openai:"codex",gemini:"gemini"},gs=v(()=>{const e=Object.keys(Xl.value),a=Gl.value.trim().toLowerCase(),t=Ql.value,l=ys[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):function(e,a=Xl.value[e]){const t=String(e||"").trim().toLowerCase(),l=function(e={}){return Array.isArray(e?.toolTypes)?[...new Set(e.toolTypes.filter(e=>"string"==typeof e).map(e=>e.trim()).filter(Boolean))]:[]}(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":""}(e,s)===l:"overrides"!==t||!!Zl.value[e]})});const hs=v(()=>{const e=Object.fromEntries(is.value.map(e=>[e.key,[...new Set(e.models)].sort((e,a)=>e.localeCompare(a)).map(e=>({label:e,value:e}))]));for(const a of is.value){const t=String(ss.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 bs(e,a,t){return void 0!==Kl.value[e]?.[a]?.[t]?Kl.value[e][a][t]:Xl.value[e]?.[a]?.[t]??null}function ws(e,a,t,l){if(!Kl.value[e]){const a=Xl.value[e]||{};Kl.value[e]={limit:{...a.limit||{}},pricing:{...a.pricing||{}}}}Kl.value[e][a]||(Kl.value[e][a]={}),Kl.value[e][a][t]=l}async function xs(){Hl.value=!0;try{const e=await async function(){return(await Re.get("/settings/model-settings")).data}(),a=e.metadataSource||{};Fl.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:{},es.value=Array.isArray(e.modelPlatforms)?e.modelPlatforms.filter(e=>e&&"string"==typeof e.key&&e.key.trim()):[];const t=e.overrides??e.modelMetadataOverrides;Zl.value={...t&&"object"==typeof t&&!Array.isArray(t)?t:{}};const l=Array.isArray(e.builtinModelIds)?e.builtinModelIds:Object.keys(Xl.value);ls.value=new Set(l.filter(e=>"string"==typeof e&&e.trim())),ss.value=Object.fromEntries(Object.entries(e.defaultSpeedTestModels||{}).map(([e,a])=>[e,"string"==typeof a?a.trim():""])),function(){const e={...ss.value};let a=!1;for(const t of is.value){const l=hs.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&&(ss.value=e)}(),ns.value={...ss.value},Kl.value={}}catch(e){}finally{Hl.value=!1}}async function ks(){Vl.value=!0;try{const e={...Zl.value};for(const[a,t]of Object.entries(Kl.value)){const l=e[a]||{};e[a]={limit:{...l.limit||{},...t.limit||{}},pricing:{...l.pricing||{},...t.pricing||{}}}}await M({overrides:e,defaultSpeedTestModels:ss.value}),Zl.value=e,ns.value={...ss.value},Kl.value={},await xs(),q.success("模型设置已保存")}catch(e){q.error("保存失败:"+e.message)}finally{Vl.value=!1}}async function _s(){try{await M({overrides:{},defaultSpeedTestModels:ss.value}),Zl.value={},Kl.value={},await xs(),q.success("全部模型设置已重置为内置默认值")}catch(e){q.error("重置失败:"+e.message)}}const zs=v(()=>{const e=Object.keys(ne.value).some(e=>ne.value[e]!==ie.value[e]),a=qe.value.nativeCliLogs.enabled!==Fe.value.nativeCliLogs.enabled||qe.value.nativeCliLogs.intervalSeconds!==Fe.value.nativeCliLogs.intervalSeconds;return e||qe.value.maxLogs!==Fe.value.maxLogs||qe.value.statsInterval!==Fe.value.statsInterval||qe.value.enableSessionBinding!==Fe.value.enableSessionBinding||a}),Cs=v(()=>[{key:"appearance",label:"外观设置",icon:k(Oe)},{key:"notification",label:"通知设置",icon:k(be)},{key:"advanced",label:"高级设置",icon:k(Pe)},{key:"security",label:"安全设置",icon:k(je)},{key:"model-settings",label:"模型设置",icon:k(ze)}]),Ps=v(()=>{const e=Array.isArray(b.all)?b.all:[],a=new Map(e.map(e=>[e.key,e])),t=ce.value.map(e=>a.get(e)).filter(Boolean),l=new Set(t.map(e=>e.key)),s=e.filter(e=>!l.has(e.key));return[...t,...s]});function Ss(e){return String(e||"").trim().toLowerCase()}const Us=v(()=>function(e=Ve.value){const a=new Set((Array.isArray(b.all)?b.all:[]).map(e=>Ss(e.key)).filter(Boolean)),t=new Set(ce.value.map(Ss).filter(Boolean));return e.filter(e=>{const l=Ss(e.key);return!a.has(l)||t.has(l)})}());const Os=v(()=>JSON.stringify(ce.value)!==JSON.stringify(pe.value));function js(e){return ce.value.indexOf(e)}function As(e,a){const t=js(e),l=t+a;if(t<0||l<0||l>=ce.value.length)return;const s=[...ce.value],[n]=s.splice(t,1);s.splice(l,0,n),ce.value=s}function Ns(){ce.value=[...Me]}async function Is(){try{const e=await Be();if(e.success&&e.config){te.value=!1!==e.config.panelVisibility?.showChannels,le.value=!1!==e.config.panelVisibility?.showLogs,se.value=!0===e.config.channelBalance?.showRemaining;const a=Array.isArray(e.config.enabledCliPlatforms)?e.config.enabledCliPlatforms:Me;ce.value=[...a],pe.value=[...a]}}catch(e){}}async function Ls(){ve.value=!0;try{const e=await De({enabledCliPlatforms:[...ce.value]});if(!e.success)throw new Error(e.message||"保存失败");const a=Array.isArray(e.config?.enabledCliPlatforms)?[...e.config.enabledCliPlatforms]:[...ce.value];ce.value=[...a],pe.value=[...a],C.value={...C.value,enabledCliPlatforms:[...a]},window.dispatchEvent(new CustomEvent("enabled-cli-platforms-change",{detail:{enabledCliPlatforms:[...a]}})),q.success("首页 CLI 显示已保存")}catch(e){q.error("保存失败: "+e.message)}finally{ve.value=!1}}async function $s(){try{await $e("panelVisibility","showChannels",te.value),await $e("panelVisibility","showLogs",le.value),await $e("channelBalance","showRemaining",se.value)}catch(e){}}function Bs(e){te.value=e,$s(),window.dispatchEvent(new CustomEvent("panel-visibility-change",{detail:{showChannels:e,showLogs:le.value}}))}function Ts(e){le.value=e,$s(),window.dispatchEvent(new CustomEvent("panel-visibility-change",{detail:{showChannels:te.value,showLogs:e}}))}function Ms(e){se.value=e,$s(),window.dispatchEvent(new CustomEvent("channel-balance-visibility-change",{detail:{showRemaining:e}}))}async function Es(e){try{(await fetch("/api/config/advanced",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ports:ne.value,maxLogs:qe.value.maxLogs,statsInterval:qe.value.statsInterval,enableSessionBinding:e,nativeCliLogs:qe.value.nativeCliLogs})})).ok?(Fe.value=Je(qe.value),q.success(e?"会话绑定已开启":"会话绑定已关闭")):(qe.value.enableSessionBinding=!e,q.error("保存失���"))}catch(a){qe.value.enableSessionBinding=!e,q.error("保存失败: "+a.message)}}function Ds(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 Ve.value=a,Xe.value=t,t.some(e=>e.type===Ul.value)||(Ul.value=t[0]?.type||""),{definitions:a,providerDefinitions:t}}async function Rs(){try{const e=await fetch("/api/hooks");if(e.ok){const a=await e.json(),{definitions:t,providerDefinitions:l}=Ds(a),s=_l(a,t,l);zl.value=s,Cl.value=JSON.parse(JSON.stringify(s)),jl.value=a.platform||"",Bl()}}catch(e){}}async function Ws(){Pl.value=!0;try{const e=new Set(Us.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"===Al.value)return;const e=await Notification.requestPermission();if(Al.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}=Ds(e),s=_l(e,t,l);zl.value=s,Cl.value=JSON.parse(JSON.stringify(s)),jl.value=e.platform||jl.value,q.success("通知设置已保存")}else{const e=await a.json();q.error("保存失败:"+(e.error||"未知错误"))}}catch(e){q.error("保存失败:"+e.message)}finally{Pl.value=!1}}function Ys(){Rl.value={currentPassword:"",newPassword:"",confirmPassword:""}}async function Js(e=!1){return Dl.value&&ql?ql:El.value&&!e?Promise.resolve():(Dl.value=!0,ql=(async()=>{try{const e=await L();e.success&&(Ml.value={hasPassword:Boolean(e.hasPassword)},El.value=!0)}catch(e){}finally{Dl.value=!1,ql=null}})(),ql)}async function qs(){if(!Jl.value)return void q.warning("请完善密码信息");const e=Ml.value.hasPassword;Wl.value=!0;try{const a={newPassword:Rl.value.newPassword};Ml.value.hasPassword&&(a.currentPassword=Rl.value.currentPassword);const t=await I(a);t.success?(Ml.value.hasPassword=!0,El.value=!0,Ys(),q.success(e?"密码已更新":"密码已设置")):q.error(t.error||"保存失败")}catch(a){q.error(a.response?.data?.error||"保存失败")}finally{Wl.value=!1}}async function Fs(){ue.value=!0;try{const e=await fetch("/api/config/advanced",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ports:ne.value,maxLogs:qe.value.maxLogs,statsInterval:qe.value.statsInterval,enableSessionBinding:qe.value.enableSessionBinding,nativeCliLogs:qe.value.nativeCliLogs})});if(e.ok)ie.value={...ne.value},Fe.value=Je(qe.value),window.dispatchEvent(new CustomEvent("advanced-config-change",{detail:{maxLogs:qe.value.maxLogs,statsInterval:qe.value.statsInterval}})),q.success("配置已保存,端口修改需要重启服务器生效;OMP 原生会话日志配置立即生效");else{const a=await e.json();q.error("保存失败:"+(a.error||"未知错误"))}}catch(e){q.error("保存失败:"+e.message)}finally{ue.value=!1}}async function Hs(){try{const e=await async function(){return(await Re.get("/pm2-autostart")).data}();e&&e.success?fe.value=e.data?.enabled||!1:fe.value=!1}catch(e){fe.value=!1}}async function Vs(){me.value=!0;try{const e=await async function(){return(await Re.post("/pm2-autostart",{action:"enable"})).data}();if(e.success)fe.value=!0,q.success("开机自启已启用");else{const a=e.message||"未知错误";a.includes("暂无运行中的进程")||a.includes("请先启动")?q.warning(a):q.error(a)}}catch(e){q.error(e.message||"启用失败:未知错误")}finally{me.value=!1}}async function Xs(){me.value=!0;try{const e=await async function(){return(await Re.post("/pm2-autostart",{action:"disable"})).data}();if(e.success)fe.value=!1,q.success("开机自启已禁用");else{const a=e.message||"未知错误";a.includes("未启用")||a.includes("不存在")?q.warning(a):q.error(a)}}catch(e){q.error(e.message||"禁用失败:未知错误")}finally{me.value=!1}}return r(()=>{"function"==typeof b.load&&b.load(),Is(),Js(),xs(),Z.visible&&Rs()}),c(G,e=>{e?(Is(),async function(){try{"function"==typeof b.load&&await b.load();const e=await fetch("/api/config/advanced");if(e.ok){const a=await e.json(),t={};for(const e of re.value)t[e.key]=a.ports?.[e.key]||e.defaultPort;ne.value=t,ie.value={...ne.value},qe.value=Je({maxLogs:a.maxLogs||100,statsInterval:a.statsInterval||30,enableSessionBinding:!1!==a.enableSessionBinding,nativeCliLogs:a.nativeCliLogs}),Fe.value=Je(qe.value)}}catch(e){}}(),Hs(),Rs(),xs(),Js(!0)):Ys()}),c(Q,(e,a)=>{"security"===e&&Js(),"security"===a&&"security"!==e&&Ys()}),(e,l)=>(u(),o(x(U),{show:G.value,"onUpdate:show":l[25]||(l[25]=e=>G.value=e),width:x(n),placement:"right","show-mask":!0},{default:m(()=>[i(x(j),{"show-header":!1,closable:"","native-scrollbar":!1},{default:m(()=>[S("div",Ke,[S("div",Ge,[S("div",Qe,[i(x(oe),{size:"20",color:"var(--text-secondary)"},{default:m(()=>[i(x(Se))]),_:1}),l[26]||(l[26]=S("span",{class:"sidebar-title"},"设置分类",-1))]),S("div",ea,[(u(!0),P(g,null,s(Cs.value,e=>(u(),P("div",{key:e.key,class:h(["menu-item",{active:Q.value===e.key}]),onClick:a=>Q.value=e.key},[i(x(oe),{size:18,class:"menu-icon"},{default:m(()=>[(u(),o(d(e.icon)))]),_:2},1024),S("span",ta,p(e.label),1),e.badge?(u(),o(x(He),{key:0,value:e.badge,type:e.badgeType||"info","show-zero":!1},null,8,["value","type"])):a("",!0)],10,aa))),128))])]),S("div",la,[z(S("div",sa,[S("div",na,[S("div",ia,[i(x(oe),{size:"24",color:"var(--text-secondary)"},{default:m(()=>[i(x(Oe))]),_:1}),S("div",null,[l[28]||(l[28]=S("h3",{class:"panel-title"},"外观设置",-1)),i(x(N),{depth:"3",class:"panel-subtitle"},{default:m(()=>[...l[27]||(l[27]=[t("自定义界面外观和主题",-1)])]),_:1})])])]),S("div",oa,[S("div",ra,[S("div",ua,[S("div",da,[i(x(N),{strong:""},{default:m(()=>[...l[29]||(l[29]=[t("面板显示",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[30]||(l[30]=[t(" 控制右侧面板中各个区域的显示 ",-1)])]),_:1})]),S("div",ca,[S("div",pa,[S("div",va,[i(x(N),{strong:""},{default:m(()=>[...l[31]||(l[31]=[t("显示渠道列表",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px"}},{default:m(()=>[...l[32]||(l[32]=[t(" 在右侧面板显示 API 渠道管理区域 ",-1)])]),_:1})]),i(x(J),{value:te.value,"onUpdate:value":Bs},null,8,["value"])]),S("div",fa,[S("div",ma,[i(x(N),{strong:""},{default:m(()=>[...l[33]||(l[33]=[t("显示实时日志",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px"}},{default:m(()=>[...l[34]||(l[34]=[t(" 在 Dashboard 显示实时日志区域 ",-1)])]),_:1})]),i(x(J),{value:le.value,"onUpdate:value":Ts},null,8,["value"])]),S("div",ya,[S("div",ga,[i(x(N),{strong:""},{default:m(()=>[...l[35]||(l[35]=[t("显示剩余金额",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px"}},{default:m(()=>[...l[36]||(l[36]=[t(" 在渠道卡片显示可识别 API 网关的余额 ",-1)])]),_:1})]),i(x(J),{value:se.value,"onUpdate:value":Ms},null,8,["value"])])])]),i(x(ge)),S("div",ha,[S("div",ba,[i(x(N),{strong:""},{default:m(()=>[...l[37]||(l[37]=[t("首页 CLI 显示",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[38]||(l[38]=[t(" 从已注册的平台目录中选择并排序首页显示的 CLI ",-1)])]),_:1})]),S("div",wa,[S("div",xa,[(u(!0),P(g,null,s(Ps.value,e=>(u(),P("div",{key:e.key,class:"platform-catalog-item"},[i(x(F),{checked:ce.value.includes(e.key),"onUpdate:checked":a=>function(e,a){const t=ce.value.filter(a=>a!==e);a&&t.push(e),ce.value=t}(e.key,a)},{default:m(()=>[t(p(e.label||e.title||e.key),1)]),_:2},1032,["checked","onUpdate:checked"]),ce.value.includes(e.key)?(u(),P("div",ka,[i(x(de),{text:"",size:"small",disabled:0===js(e.key),"aria-label":"上移",onClick:a=>As(e.key,-1)},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(Ce))]),_:1})]),_:1},8,["disabled","onClick"]),i(x(de),{text:"",size:"small",disabled:js(e.key)===ce.value.length-1,"aria-label":"下移",onClick:a=>As(e.key,1)},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(Ie))]),_:1})]),_:1},8,["disabled","onClick"])])):a("",!0)]))),128))]),S("div",_a,[i(x(de),{size:"small",onClick:Ns},{default:m(()=>[...l[39]||(l[39]=[t("恢复默认显示",-1)])]),_:1}),i(x(de),{type:"primary",size:"small",loading:ve.value,disabled:!Os.value,onClick:Ls},{default:m(()=>[...l[40]||(l[40]=[t(" 保存首页显示 ",-1)])]),_:1},8,["loading","disabled"])])])]),i(x(ge)),S("div",za,[S("div",Ca,[i(x(N),{strong:""},{default:m(()=>[...l[41]||(l[41]=[t("界面主题",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[42]||(l[42]=[t(" 选择你喜欢的界面主题风格 ",-1)])]),_:1})]),S("div",Pa,[S("div",{class:h(["simple-theme-item",{active:!x(ee)}]),onClick:l[0]||(l[0]=e=>x(ee)&&x(ae)())},[i(x(oe),{size:20,class:"theme-icon"},{default:m(()=>[i(x(Ue))]),_:1}),S("div",Sa,[i(x(N),{strong:""},{default:m(()=>[...l[43]||(l[43]=[t("亮色模式",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[44]||(l[44]=[t("经典的浅色主题",-1)])]),_:1})]),x(ee)?a("",!0):(u(),P("div",Ua,[i(x(oe),{size:20,color:"#18a058"},{default:m(()=>[i(x(Le))]),_:1})]))],2),S("div",{class:h(["simple-theme-item",{active:x(ee)}]),onClick:l[1]||(l[1]=e=>!x(ee)&&x(ae)())},[i(x(oe),{size:20,class:"theme-icon"},{default:m(()=>[i(x(xe))]),_:1}),S("div",Oa,[i(x(N),{strong:""},{default:m(()=>[...l[45]||(l[45]=[t("暗色模式",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[46]||(l[46]=[t("护眼的深色主题",-1)])]),_:1})]),x(ee)?(u(),P("div",ja,[i(x(oe),{size:20,color:"#18a058"},{default:m(()=>[i(x(Le))]),_:1})])):a("",!0)],2)])])])])],512),[[y,"appearance"===Q.value]]),z(S("div",Aa,[S("div",Na,[S("div",Ia,[i(x(oe),{size:"24",color:"var(--text-secondary)"},{default:m(()=>[i(x(be))]),_:1}),S("div",null,[l[48]||(l[48]=S("h3",{class:"panel-title"},"通知设置",-1)),i(x(N),{depth:"3",class:"panel-subtitle"},{default:m(()=>[...l[47]||(l[47]=[t("配置任务完成时的系统通知",-1)])]),_:1})])])]),S("div",La,[S("div",$a,[(u(!0),P(g,null,s(Us.value,(e,s)=>(u(),P(g,{key:e.key},[S("div",Ba,[S("div",Ta,[i(x(N),{strong:""},{default:m(()=>[t(p(e.label),1)]),_:2},1024),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[t(p(e.description),1)]),_:2},1024)]),S("div",Ma,[S("div",Ea,[S("div",Da,[i(x(N),{strong:""},{default:m(()=>[...l[49]||(l[49]=[t("启用任务完成通知",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px"}},{default:m(()=>[t(p(e.implementation),1)]),_:2},1024)]),i(x(J),{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(),o(x(W),{key:0,type:"warning",bordered:!1,style:{"margin-top":"16px"}},{default:m(()=>[t(p(e.externalMessage),1)]),_:2},1024)):a("",!0),zl.value.platforms[e.key].enabled?(u(),P("div",Ra,[i(x(N),{depth:"2",style:{"font-size":"13px","margin-bottom":"12px",display:"block"}},{default:m(()=>[...l[50]||(l[50]=[t(" 选择通知方式 ",-1)])]),_:1}),i(x(E),{value:zl.value.platforms[e.key].type,"onUpdate:value":a=>zl.value.platforms[e.key].type=a},{default:m(()=>[i(x($),{vertical:""},{default:m(()=>[i(x(D),{value:"notification"},{default:m(()=>[S("div",Wa,[i(x(N),{strong:""},{default:m(()=>[t(p(Ll("notification")),1)]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:m(()=>[t(p($l("notification")),1)]),_:1})])]),_:1}),i(x(D),{value:"browser",disabled:!Nl.value},{default:m(()=>[S("div",Ya,[i(x(N),{strong:""},{default:m(()=>[t(p(Ll("browser")),1)]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:m(()=>[t(p($l("browser")),1)]),_:1})])]),_:1},8,["disabled"]),i(x(D),{value:"dialog"},{default:m(()=>[S("div",Ja,[i(x(N),{strong:""},{default:m(()=>[t(p(Ll("dialog")),1)]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:m(()=>[t(p($l("dialog")),1)]),_:1})])]),_:1})]),_:1})]),_:1},8,["value","onUpdate:value"]),"claude"===e.key&&"darwin"===jl.value?(u(),o(x(W),{key:0,type:"info",bordered:!1,style:{"margin-top":"16px"},"show-icon":!1},{default:m(()=>[S("div",qa,[i(x(N),{strong:""},{default:m(()=>[...l[51]||(l[51]=[t("[TIP] 更好的通知体验",-1)])]),_:1}),i(x(N),{depth:"3",style:{display:"block","margin-top":"4px","font-size":"12px"}},{default:m(()=>[...l[52]||(l[52]=[t(" 安装 terminal-notifier 后,点击通知可自动打开终端 ",-1)])]),_:1}),i(x(N),{code:"",style:{display:"block","margin-top":"8px","font-size":"12px"}},{default:m(()=>[...l[53]||(l[53]=[t(" brew install terminal-notifier ",-1)])]),_:1})])]),_:1})):a("",!0),"browser"===zl.value.platforms[e.key].type?(u(),o(x(W),{key:1,type:"info",bordered:!1,style:{"margin-top":"16px"}},{default:m(()=>[t(" 当前权限状态:"+p(Il.value),1)]),_:1})):a("",!0)])):a("",!0)])]),s<Us.value.length-1?(u(),o(x(ge),{key:0})):a("",!0)],64))),128)),i(x(ge)),S("div",Fa,[S("div",Ha,[i(x(N),{strong:""},{default:m(()=>[...l[54]||(l[54]=[t("远程通知渠道",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[55]||(l[55]=[t(" 支持服务端注册的远程通知渠道 ",-1)])]),_:1})]),S("div",Va,[S("div",Xa,[i(x(A),{value:Ul.value,"onUpdate:value":l[2]||(l[2]=e=>Ul.value=e),options:Ol.value,size:"small",style:{"max-width":"220px"}},null,8,["value","options"]),i(x(de),{size:"small",secondary:"",type:"primary",onClick:Tl},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(we))]),_:1})]),default:m(()=>[l[56]||(l[56]=t(" 添加渠道 ",-1))]),_:1})]),0===zl.value.remoteNotifications.providers.length?(u(),o(x(Y),{key:0,description:"还没有远程通知渠道",style:{padding:"20px 0"}})):a("",!0),(u(!0),P(g,null,s(zl.value.remoteNotifications.providers,e=>(u(),P("div",{key:e.id,class:"remote-provider-card"},[S("div",Za,[S("div",Ka,[S("div",Ga,p(kl(e.type)),1),S("div",Qa,[S("div",et,[i(x(N),{strong:""},{default:m(()=>[t(p(e.name||xl(e.type)),1)]),_:2},1024),i(x(V),{size:"tiny",bordered:!1,type:e.enabled?"success":"default"},{default:m(()=>[t(p(e.enabled?"已启用":"未启用"),1)]),_:2},1032,["type"])]),i(x(N),{depth:"3",style:{"font-size":"12px",display:"block"}},{default:m(()=>{return[t(p((a=e.type,wl(a)?.description||"")),1)];var a}),_:2},1024)])]),i(x($),{size:"small",align:"center"},{default:m(()=>[i(x(J),{value:e.enabled,"onUpdate:value":a=>e.enabled=a,size:"small"},null,8,["value","onUpdate:value"]),i(x(de),{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:m(()=>[i(x(oe),null,{default:m(()=>[i(x(Ae))]),_:1})]),_:1},8,["onClick"])]),_:2},1024)]),S("div",at,[S("div",tt,[l[57]||(l[57]=S("span",{class:"remote-field-label"},"渠道名称",-1)),i(x(H),{value:e.name,"onUpdate:value":a=>e.name=a,size:"small",placeholder:"例如:我的飞书"},null,8,["value","onUpdate:value"])]),S("div",lt,[i(Ze,{provider:e,definition:wl(e.type)},null,8,["provider","definition"])])]),S("div",st,[i(x(de),{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||"测试通知发送失败");q.success(t.message||"测试通知已发送")}catch(a){q.error("测试失败:"+a.message)}finally{Sl.value=""}}(e)},{default:m(()=>[...l[58]||(l[58]=[t(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>{return[t(p((a=e.type,wl(a)?.hint||"")),1)];var a}),_:2},1024)])]))),128))])])])]),S("div",nt,[i(x($),{justify:"end"},{default:m(()=>[i(x(de),{size:"large",onClick:l[3]||(l[3]=e=>G.value=!1)},{default:m(()=>[...l[59]||(l[59]=[t(" 取消 ",-1)])]),_:1}),i(x(de),{type:"primary",size:"large",loading:Pl.value,disabled:JSON.stringify(zl.value)===JSON.stringify(Cl.value),onClick:Ws},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(ke))]),_:1})]),default:m(()=>[l[60]||(l[60]=t(" 保存设置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[y,"notification"===Q.value]]),z(S("div",it,[S("div",ot,[S("div",rt,[i(x(oe),{size:"24",color:"var(--text-secondary)"},{default:m(()=>[i(x(Pe))]),_:1}),S("div",null,[l[62]||(l[62]=S("h3",{class:"panel-title"},"高级设置",-1)),i(x(N),{depth:"3",class:"panel-subtitle"},{default:m(()=>[...l[61]||(l[61]=[t("端口配置和高级选项",-1)])]),_:1})])])]),S("div",ut,[S("div",dt,[S("div",ct,[S("div",pt,[i(x(N),{strong:""},{default:m(()=>[...l[63]||(l[63]=[t("端口配置",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[64]||(l[64]=[t(" 修改后需要重启服务器才能生效 ",-1)])]),_:1})]),S("div",vt,[(u(!0),P(g,null,s(re.value,e=>(u(),P("div",{key:e.key,class:"port-field"},[i(x(N),{depth:"3",style:{"font-size":"13px","margin-bottom":"6px"}},{default:m(()=>[t(p(e.label),1)]),_:2},1024),i(x(T),{value:ne.value[e.key],"onUpdate:value":a=>ne.value[e.key]=a,min:1024,max:65535,"show-button":!1,placeholder:String(e.defaultPort)},{prefix:m(()=>[i(x(oe),null,{default:m(()=>[i(x(Pe))]),_:1})]),_:1},8,["value","onUpdate:value","placeholder"])]))),128))])]),i(x(ge)),S("div",ft,[S("div",mt,[i(x(N),{strong:""},{default:m(()=>[...l[65]||(l[65]=[t("负载均衡",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[66]||(l[66]=[t(" 多渠道负载均衡时的分配策略 ",-1)])]),_:1})]),S("div",yt,[S("div",gt,[S("div",ht,[i(x(N),{depth:"2",style:{"font-size":"13px"}},{default:m(()=>[...l[67]||(l[67]=[t("多渠道负载会话绑定",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[68]||(l[68]=[t("开启后同一对话始终使用同一渠道,保证上下文连续性",-1)])]),_:1})]),i(x(J),{value:qe.value.enableSessionBinding,"onUpdate:value":[l[4]||(l[4]=e=>qe.value.enableSessionBinding=e),Es],size:"medium"},null,8,["value"])])])]),i(x(ge)),S("div",bt,[S("div",wt,[i(x(N),{strong:""},{default:m(()=>[...l[69]||(l[69]=[t("日志和性能",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[70]||(l[70]=[t(" 控制日志显示和数据刷新行为 ",-1)])]),_:1})]),S("div",xt,[S("div",kt,[S("div",_t,[i(x(N),{depth:"2",style:{"font-size":"13px"}},{default:m(()=>[...l[71]||(l[71]=[t("实时日志保留数量",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[72]||(l[72]=[t("超过此数量将自动清理旧日志",-1)])]),_:1})]),i(x(T),{value:qe.value.maxLogs,"onUpdate:value":l[5]||(l[5]=e=>qe.value.maxLogs=e),min:50,max:500,step:10,style:{width:"140px"}},{suffix:m(()=>[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[73]||(l[73]=[t("条",-1)])]),_:1})]),_:1},8,["value"])]),S("div",zt,[S("div",Ct,[i(x(N),{depth:"2",style:{"font-size":"13px"}},{default:m(()=>[...l[74]||(l[74]=[t("统计数据刷新间隔",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[75]||(l[75]=[t("自动刷新今日统计的时间间隔",-1)])]),_:1})]),i(x(T),{value:qe.value.statsInterval,"onUpdate:value":l[6]||(l[6]=e=>qe.value.statsInterval=e),min:10,max:300,step:5,style:{width:"140px"}},{suffix:m(()=>[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[76]||(l[76]=[t("秒",-1)])]),_:1})]),_:1},8,["value"])]),S("div",Pt,[S("div",St,[i(x(N),{depth:"2",style:{"font-size":"13px"}},{default:m(()=>[...l[77]||(l[77]=[t("CLI 原生会话日志",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[78]||(l[78]=[t("读取各 CLI 工具自己的会话日志,配置保存后立即生效",-1)])]),_:1})]),i(x(J),{value:qe.value.nativeCliLogs.enabled,"onUpdate:value":l[7]||(l[7]=e=>qe.value.nativeCliLogs.enabled=e),size:"medium"},null,8,["value"])]),S("div",Ut,[S("div",Ot,[i(x(N),{depth:"2",style:{"font-size":"13px"}},{default:m(()=>[...l[79]||(l[79]=[t("CLI 原生日志读取间隔",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[80]||(l[80]=[t("轮询原生会话日志的时间间隔",-1)])]),_:1})]),i(x(T),{value:qe.value.nativeCliLogs.intervalSeconds,"onUpdate:value":l[8]||(l[8]=e=>qe.value.nativeCliLogs.intervalSeconds=e),min:1,max:60,step:1,style:{width:"140px"}},{suffix:m(()=>[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[81]||(l[81]=[t("秒",-1)])]),_:1})]),_:1},8,["value"])])])]),i(x(ge)),S("div",jt,[S("div",At,[i(x(N),{strong:""},{default:m(()=>[...l[82]||(l[82]=[t("开机自启",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[83]||(l[83]=[t(" 启用此选项后,重启电脑时 coding-tool-x 会自动启动 ",-1)])]),_:1})]),S("div",Nt,[S("div",It,[S("div",Lt,[i(x(N),{strong:"",style:{flex:"1"}},{default:m(()=>[t(p(ye.value),1)]),_:1}),fe.value?(u(),o(x(de),{key:1,type:"warning",size:"small",loading:me.value,onClick:Xs},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(Ne))]),_:1})]),default:m(()=>[l[85]||(l[85]=t(" 禁用自启 ",-1))]),_:1},8,["loading"])):(u(),o(x(de),{key:0,type:"primary",size:"small",loading:me.value,onClick:Vs},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(Le))]),_:1})]),default:m(()=>[l[84]||(l[84]=t(" 启用自启 ",-1))]),_:1},8,["loading"]))]),i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[t(p(We.value),1)]),_:1})])])])])]),S("div",$t,[i(x($),{justify:"end"},{default:m(()=>[i(x(de),{size:"large",onClick:l[9]||(l[9]=e=>G.value=!1)},{default:m(()=>[...l[86]||(l[86]=[t(" 取消 ",-1)])]),_:1}),i(x(de),{type:"primary",size:"large",loading:ue.value,disabled:!zs.value,onClick:Fs},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(ke))]),_:1})]),default:m(()=>[l[87]||(l[87]=t(" 保存端口配置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[y,"advanced"===Q.value]]),z(S("div",Bt,[S("div",Tt,[S("div",Mt,[i(x(oe),{size:"24",color:"var(--text-secondary)"},{default:m(()=>[i(x(je))]),_:1}),S("div",null,[l[89]||(l[89]=S("h3",{class:"panel-title"},"安全设置",-1)),i(x(N),{depth:"3",class:"panel-subtitle"},{default:m(()=>[...l[88]||(l[88]=[t("设置访问密码,保护面板访问",-1)])]),_:1})])])]),S("div",Et,[S("div",Dt,[S("div",Rt,[S("div",Wt,[i(x(N),{strong:""},{default:m(()=>[...l[90]||(l[90]=[t("访问保护",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[91]||(l[91]=[t(" 启用后,重新打开面板时需要先输入访问密码 ",-1)])]),_:1})]),S("div",Yt,[Ml.value.hasPassword?(u(),o(x(V),{key:0,type:"success",bordered:!1},{default:m(()=>[...l[92]||(l[92]=[t(" 已启用 ",-1)])]),_:1})):(u(),o(x(V),{key:1,type:"warning",bordered:!1},{default:m(()=>[...l[93]||(l[93]=[t(" 未启用 ",-1)])]),_:1}))])]),i(x(ge)),S("div",Jt,[S("div",qt,[i(x(N),{strong:""},{default:m(()=>[t(p(Ml.value.hasPassword?"修改密码":"设置密码"),1)]),_:1}),i(x(N),{depth:"3",style:{"font-size":"13px","margin-top":"4px"}},{default:m(()=>[...l[94]||(l[94]=[t(" 密码至少 4 位,建议包含数字与字母 ",-1)])]),_:1}),i(x(N),{depth:"3",style:{"font-size":"12px","margin-top":"4px"}},{default:m(()=>[l[96]||(l[96]=t(" 忘记密码可在终端执行 ",-1)),i(x(N),{code:""},{default:m(()=>[...l[95]||(l[95]=[t("ctx security reset",-1)])]),_:1}),l[97]||(l[97]=t(" 关闭密码 ",-1))]),_:1})]),S("div",Ft,[Ml.value.hasPassword?(u(),o(x(H),{key:0,value:Rl.value.currentPassword,"onUpdate:value":l[10]||(l[10]=e=>Rl.value.currentPassword=e),type:"password",placeholder:"当前密码","show-password-on":"click"},null,8,["value"])):a("",!0),i(x(H),{value:Rl.value.newPassword,"onUpdate:value":l[11]||(l[11]=e=>Rl.value.newPassword=e),type:"password",placeholder:"新密码","show-password-on":"click"},null,8,["value"]),i(x(H),{value:Rl.value.confirmPassword,"onUpdate:value":l[12]||(l[12]=e=>Rl.value.confirmPassword=e),type:"password",placeholder:"确认新密码","show-password-on":"click"},null,8,["value"]),Yl.value?(u(),o(x(N),{key:1,depth:"3",class:"security-error"},{default:m(()=>[t(p(Yl.value),1)]),_:1})):a("",!0)])])])]),S("div",Ht,[i(x($),{justify:"end"},{default:m(()=>[i(x(de),{size:"large",onClick:l[13]||(l[13]=e=>G.value=!1)},{default:m(()=>[...l[98]||(l[98]=[t(" 取消 ",-1)])]),_:1}),i(x(de),{type:"primary",size:"large",loading:Wl.value,disabled:!Jl.value,onClick:qs},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(ke))]),_:1})]),default:m(()=>[l[99]||(l[99]=t(" 保存密码 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[y,"security"===Q.value]]),z(S("div",Vt,[S("div",Xt,[S("div",Zt,[i(x(oe),{size:"24",color:"var(--text-secondary)"},{default:m(()=>[i(x(ze))]),_:1}),S("div",null,[l[101]||(l[101]=S("h3",{class:"panel-title"},"模型设置",-1)),i(x(N),{depth:"3",class:"panel-subtitle"},{default:m(()=>[...l[100]||(l[100]=[t("管理默认测速模型、模型上下文窗口和定价信息",-1)])]),_:1}),i(x(N),{depth:"3",class:"panel-subtitle"},{default:m(()=>[t(" 价格来源:Models.dev 参考价格(离线快照) · "+p(Fl.value.lastUpdated||"日期未知"),1)]),_:1})])])]),S("div",Kt,[i(x(B),{show:Hl.value},{default:m(()=>[S("div",Gt,[S("div",Qt,[i(x(N),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:m(()=>[...l[102]||(l[102]=[t("默认测速模型",-1)])]),_:1}),S("div",el,[(u(!0),P(g,null,s(is.value,e=>(u(),P("div",{key:e.key,class:"speed-test-default-row"},[S("div",al,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[t(p(e.label),1)]),_:2},1024)]),i(x(A),{value:ss.value[e.key],"onUpdate:value":a=>ss.value[e.key]=a,options:hs.value[e.key],placeholder:`选择或输入${e.label}默认测速模型`,size:"small",filterable:"",tag:""},null,8,["value","onUpdate:value","options","placeholder"])]))),128))])])]),S("div",tl,[i(x(H),{value:Gl.value,"onUpdate:value":l[14]||(l[14]=e=>Gl.value=e),placeholder:"搜索模型 ID...",clearable:"",size:"small",style:{flex:"1","min-width":"0"}},null,8,["value"]),i(x(de),{size:"small",type:"primary",onClick:cs},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(we))]),_:1})]),default:m(()=>[l[103]||(l[103]=t(" 新增 ",-1))]),_:1})]),S("div",ll,[i(x(E),{value:Ql.value,"onUpdate:value":l[15]||(l[15]=e=>Ql.value=e),size:"small"},{default:m(()=>[i(x(D),{value:"all"},{default:m(()=>[...l[104]||(l[104]=[t("全部",-1)])]),_:1}),i(x(D),{value:"claude"},{default:m(()=>[...l[105]||(l[105]=[t("Claude",-1)])]),_:1}),i(x(D),{value:"openai"},{default:m(()=>[...l[106]||(l[106]=[t("OpenAI",-1)])]),_:1}),i(x(D),{value:"gemini"},{default:m(()=>[...l[107]||(l[107]=[t("Gemini",-1)])]),_:1}),i(x(D),{value:"compatible"},{default:m(()=>[...l[108]||(l[108]=[t("OpenCode / OMP",-1)])]),_:1}),i(x(D),{value:"overrides"},{default:m(()=>[...l[109]||(l[109]=[t("自定义",-1)])]),_:1})]),_:1},8,["value"])]),0===gs.value.length?(u(),P("div",sl,[i(x(Y),{description:"没有匹配的模型"})])):(u(),P("div",nl,[(u(!0),P(g,null,s(gs.value,e=>(u(),P("div",{key:e,class:h(["model-card",{expanded:os.value.has(e)}])},[S("div",{class:"model-card-header",onClick:a=>(e=>{os.value.has(e)?os.value.delete(e):os.value.add(e),os.value=new Set(os.value)})(e)},[i(x(oe),{size:"14",class:"expand-icon"},{default:m(()=>[i(x(_e))]),_:1}),S("span",ol,p(e),1),Zl.value[e]?(u(),o(x(V),{key:0,type:"warning",size:"tiny",bordered:!1},{default:m(()=>[...l[110]||(l[110]=[t("自定义",-1)])]),_:1})):a("",!0),S("div",{class:"model-card-actions",onClick:l[16]||(l[16]=w(()=>{},["stop"]))},[Zl.value[e]&&fs(e)?(u(),o(x(de),{key:0,size:"tiny",quaternary:"",type:"warning",onClick:a=>async function(e){try{await R(e),delete Zl.value[e],delete Kl.value[e],await xs(),q.success(`${e} 已重置为内置默认值`)}catch(a){q.error("重置失败:"+a.message)}}(e)},{default:m(()=>[...l[111]||(l[111]=[t(" 重置 ",-1)])]),_:1},8,["onClick"])):a("",!0),ms(e)?(u(),o(x(de),{key:1,size:"tiny",quaternary:"",type:"error",onClick:a=>async function(e){try{const a=!!Zl.value[e];a&&(await R(e),delete Zl.value[e]),delete Kl.value[e],ms(e)?delete Xl.value[e]:a&&await xs(),q.success(`已删除模型:${e}`)}catch(a){q.error("删除失败:"+a.message)}}(e)},{default:m(()=>[...l[112]||(l[112]=[t(" 删除 ",-1)])]),_:1},8,["onClick"])):a("",!0)])],8,il),os.value.has(e)?(u(),P("div",rl,[S("div",ul,[S("div",dl,[i(x(N),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:m(()=>[...l[113]||(l[113]=[t("上下文限制",-1)])]),_:1}),S("div",cl,[S("div",null,[i(x(N),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...l[114]||(l[114]=[t("Context 窗口 (tokens)",-1)])]),_:1}),i(x(T),{value:bs(e,"limit","context"),"onUpdate:value":a=>ws(e,"limit","context",a),min:1e3,step:1e3,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),S("div",null,[i(x(N),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...l[115]||(l[115]=[t("Max Output (tokens)",-1)])]),_:1}),i(x(T),{value:bs(e,"limit","output"),"onUpdate:value":a=>ws(e,"limit","output",a),min:100,step:1e3,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])])])]),S("div",pl,[i(x(N),{strong:"",style:{"font-size":"12px",display:"block","margin-bottom":"8px"}},{default:m(()=>[...l[116]||(l[116]=[t("定价(USD / 百万 tokens)",-1)])]),_:1}),S("div",vl,[S("div",null,[i(x(N),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...l[117]||(l[117]=[t("输入价格",-1)])]),_:1}),i(x(T),{value:bs(e,"pricing","input"),"onUpdate:value":a=>ws(e,"pricing","input",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),S("div",null,[i(x(N),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...l[118]||(l[118]=[t("输出价格",-1)])]),_:1}),i(x(T),{value:bs(e,"pricing","output"),"onUpdate:value":a=>ws(e,"pricing","output",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),S("div",null,[i(x(N),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...l[119]||(l[119]=[t("缓存写入价格",-1)])]),_:1}),i(x(T),{value:bs(e,"pricing","cacheCreation"),"onUpdate:value":a=>ws(e,"pricing","cacheCreation",a),min:0,step:.1,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])]),S("div",null,[i(x(N),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...l[120]||(l[120]=[t("缓存读取价格",-1)])]),_:1}),i(x(T),{value:bs(e,"pricing","cacheRead"),"onUpdate:value":a=>ws(e,"pricing","cacheRead",a),min:0,step:.01,precision:4,size:"small","show-button":!1,style:{width:"100%"}},null,8,["value","onUpdate:value"])])])])])])):a("",!0)],2))),128))]))]),_:1},8,["show"])]),S("div",fl,[i(x($),{justify:"end"},{default:m(()=>[i(x(de),{size:"large",onClick:_s,disabled:0===Object.keys(Zl.value).length},{default:m(()=>[...l[121]||(l[121]=[t(" 重置全部 ",-1)])]),_:1},8,["disabled"]),i(x(de),{type:"primary",size:"large",loading:Vl.value,disabled:!us.value,onClick:ks},{icon:m(()=>[i(x(oe),null,{default:m(()=>[i(x(ke))]),_:1})]),default:m(()=>[l[122]||(l[122]=t(" 保存设置 ",-1))]),_:1},8,["loading","disabled"])]),_:1})])],512),[[y,"model-settings"===Q.value]])])]),i(x(he),{show:as.value,"onUpdate:show":l[24]||(l[24]=e=>as.value=e),preset:"card",title:"新增模型设置",style:{width:"560px"},"mask-closable":!1},{default:m(()=>[i(x($),{vertical:"",size:12},{default:m(()=>[S("div",null,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[123]||(l[123]=[t("模型 ID",-1)])]),_:1}),i(x(H),{value:ts.value.modelId,"onUpdate:value":l[17]||(l[17]=e=>ts.value.modelId=e),placeholder:"例如:gpt-4.1-mini",clearable:""},null,8,["value"])]),S("div",ml,[S("div",null,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[124]||(l[124]=[t("Context 窗口",-1)])]),_:1}),i(x(T),{value:ts.value.context,"onUpdate:value":l[18]||(l[18]=e=>ts.value.context=e),min:1e3,step:1e3,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),S("div",null,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[125]||(l[125]=[t("Max Output",-1)])]),_:1}),i(x(T),{value:ts.value.output,"onUpdate:value":l[19]||(l[19]=e=>ts.value.output=e),min:100,step:100,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),S("div",yl,[S("div",null,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[126]||(l[126]=[t("输入价格",-1)])]),_:1}),i(x(T),{value:ts.value.inputPrice,"onUpdate:value":l[20]||(l[20]=e=>ts.value.inputPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),S("div",null,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[127]||(l[127]=[t("输出价格",-1)])]),_:1}),i(x(T),{value:ts.value.outputPrice,"onUpdate:value":l[21]||(l[21]=e=>ts.value.outputPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),S("div",gl,[S("div",null,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[128]||(l[128]=[t("缓存写入价格",-1)])]),_:1}),i(x(T),{value:ts.value.cacheCreationPrice,"onUpdate:value":l[22]||(l[22]=e=>ts.value.cacheCreationPrice=e),min:0,step:.1,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])]),S("div",null,[i(x(N),{depth:"3",style:{"font-size":"12px"}},{default:m(()=>[...l[129]||(l[129]=[t("缓存读取价格",-1)])]),_:1}),i(x(T),{value:ts.value.cacheReadPrice,"onUpdate:value":l[23]||(l[23]=e=>ts.value.cacheReadPrice=e),min:0,step:.01,precision:4,"show-button":!1,style:{width:"100%"}},null,8,["value"])])]),ds.value?(u(),o(x(N),{key:0,depth:"3",class:"security-error"},{default:m(()=>[t(p(ds.value),1)]),_:1})):a("",!0),i(x($),{justify:"end"},{default:m(()=>[i(x(de),{onClick:ps},{default:m(()=>[...l[130]||(l[130]=[t("取消",-1)])]),_:1}),i(x(de),{type:"primary",disabled:!!ds.value,onClick:vs},{default:m(()=>[...l[131]||(l[131]=[t(" 新增 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["show"])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-1d15d4c9"]]);export{hl as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{O as a,W as r,b as e,et as s,mt as l,r as t,w as o}from"./vue-vendor-Cr_NLmXY.js";import{O as i}from"./light-DeIjG9s_.js";import{t as m}from"./SkillsPanel-B_xxyDpy.js";import{Et as p}from"./index-BXWpib7P.js";import{t as n}from"./_plugin-vue_export-helper-DyHLuIR4.js";var u={class:"skill-manager"},f=n({__name:"SkillManager",setup(n){const f=t(),{byCapability:d}=p(),v=e(()=>d("skills").map(a=>a.key)),y=e(()=>{const a=Array.isArray(f.query.platform)?f.query.platform[0]:f.query.platform;return v.value.includes(a)?a:""});return(e,t)=>(r(),o("div",u,[a(l(i),{title:"Skills 技能管理",bordered:!1},{default:s(()=>[a(m,{"in-drawer":!1,"hide-back":!0,platform:y.value},null,8,["platform"])]),_:1})]))}},[["__scopeId","data-v-350fb0fd"]]);export{f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{O as e,S as a,W as t,b as r,et as s,mt as l,x as o}from"./vue-vendor-Cr_NLmXY.js";import{n as i,t as p}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as d}from"./DrawerContent-BYlV968f.js";import{t as n}from"./SkillsPanel-B_xxyDpy.js";import{t as m}from"./_plugin-vue_export-helper-DyHLuIR4.js";var u=m({__name:"SkillsDrawer",props:{visible:{type:Boolean,default:!1},platform:{type:String,default:""},projectPath:{type:String,default:""}},emits:["update:visible"],setup(m,{emit:u}){const f=m,v=u,{drawerWidth:c}=p(720),h=r({get:()=>f.visible,set:e=>v("update:visible",e)}),w={padding:0,display:"flex",flexDirection:"column",overflow:"hidden"};return(r,p)=>(t(),a(l(i),{show:h.value,"onUpdate:show":p[1]||(p[1]=e=>h.value=e),width:l(c),placement:"right","mask-closable":!0},{default:s(()=>[e(l(d),{closable:"","native-scrollbar":!1,"body-content-style":w},{header:s(()=>[...p[2]||(p[2]=[o("div",{class:"drawer-header"},"技能管理",-1)])]),default:s(()=>[e(n,{"in-drawer":!0,"hide-back":!0,"drawer-visible":h.value,platform:f.platform,"project-path":f.projectPath,onBack:p[0]||(p[0]=e=>h.value=!1)},null,8,["drawer-visible","platform","project-path"])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-a4957f96"]]);export{u as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as a,D as l,K as t,M as s,O as i,S as r,V as o,W as n,Z as u,_t as c,at as d,b as v,et as p,g as f,ht as m,m as y,mt as b,p as h,r as k,st as g,w,x as _}from"./vue-vendor-Cr_NLmXY.js";import{N as j,gn as C,gt as P,hn as S,ht as x,i as z,s as U,t as $}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{$ as L,A as T,Et as O,H as B,I as K,L as G,M as A,a as M,c as E,ct as H,d as I,f as D,ft as R,h as N,i as q,j as F,k as V,l as W,m as J,n as Z,o as Q,p as Y,r as X,s as ee,st as ae,t as le,u as te,ut as se}from"./index-BXWpib7P.js";import{t as ie}from"./use-message-BYx0IRj1.js";import{$ as re,At as oe,G as ne,K as ue,Mt as ce,Nt as de,R as ve,S as pe,U as fe,Y as me,et as ye,g as be,m as he,rt as ke,ut as ge}from"./icons-C6KNTFqo.js";import{a as we,c as _e}from"./project-config-C16yaWHF.js";import{c as je,n as Ce,s as Pe,t as Se}from"./AssetPathField-CoIuoSZr.js";import{O as xe,l as ze,n as Ue}from"./light-DeIjG9s_.js";import{n as $e,t as Le}from"./skill-repo-input-B_fkGlUK.js";import{n as Te,t as Oe}from"./Upload-B6Kn1TvG.js";import{t as Be}from"./MarkdownEditor-Bf9QKKaV.js";import{n as Ke,t as Ge}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as Ae}from"./DrawerContent-BYlV968f.js";import{t as Me}from"./markdown-xLK9ekFg.js";import{t as Ee}from"./clipboard-B46yyoz_.js";import{c as He,i as Ie,t as De}from"./platforms-BdTllxKt.js";var Re=C("p","\n box-sizing: border-box;\n transition: color .3s var(--n-bezier);\n margin: var(--n-margin);\n font-size: var(--n-font-size);\n line-height: var(--n-line-height);\n color: var(--n-text-color);\n",[S("&:first-child","margin-top: 0;"),S("&:last-child","margin-bottom: 0;")]),Ne=e({name:"P",props:Object.assign(Object.assign({},j.props),{depth:[String,Number]}),setup(e){const{mergedClsPrefixRef:a,inlineThemeDisabled:l}=P(e),t=j("Typography","-p",Re,Ue,e,a),s=v(()=>{const{depth:a}=e,l=a||"1",{common:{cubicBezierEaseInOut:s},self:{pFontSize:i,pLineHeight:r,pMargin:o,pTextColor:n,[`pTextColor${l}Depth`]:u}}=t.value;return{"--n-bezier":s,"--n-font-size":i,"--n-line-height":r,"--n-margin":o,"--n-text-color":void 0===a?n:u}}),i=l?x("p",v(()=>`${e.depth||""}`),s,e):void 0;return{mergedClsPrefix:a,cssVars:l?void 0:s,themeClass:null==i?void 0:i.themeClass,onRender:null==i?void 0:i.onRender}},render(){var e;return null===(e=this.onRender)||void 0===e||e.call(this),s("p",{class:[`${this.mergedClsPrefix}-p`,this.themeClass],style:this.cssVars},this.$slots)}});function qe(e={}){return Boolean(e?.isLocal||"local"===e?.source)}function Fe(e={}){return Boolean("local-repo"===e?.source||"local"===e?.repoProvider||e?.repoLocalPath)}function Ve(e={}){return Boolean("gitlab"===e?.repoProvider||e?.repoProjectPath)}function We(e={}){return Boolean("github"===e?.repoProvider||(e?.repoOwner||e?.repoName)&&!Ve(e)&&!Fe(e))}function Je(e={}){return e?.protected||"system-installed"===e?.source?"系统":e?.sourceProvider?`${{native:"OMP 原生","omp-plugins":"OMP 插件",claude:"Claude","claude-plugins":"Claude 插件",agents:"Agents",codex:"Codex",opencode:"OpenCode",github:"GitHub",gitlab:"GitLab","local-repo":"本地仓库",remote:"远端",custom:"自定义","cc-tool":"本地技能"}[e.sourceProvider]||e.sourceProvider} · ${"project"===e.sourceScope?"项目":"全局"}`:"native-installed"===e?.source?"原生":Fe(e)?"本地仓库":qe(e)?"本地技能":Ve(e)?"GitLab":We(e)?"GitHub":""}function Ze(e={}){return qe(e)&&!Fe(e)?"":Fe(e)?e?.repoLocalPath||"":Ve(e)?e?.repoProjectPath||[e?.repoOwner,e?.repoName].filter(Boolean).join("/"):We(e)?[e?.repoOwner,e?.repoName].filter(Boolean).join("/"):""}function Qe(e={}){return qe(e)||Fe(e)?null:e?.readmeUrl||e?.repoUrl||null}function Ye(e={}){return Ve(e)?"GitLab":We(e)?"GitHub":"仓库"}function Xe(e={}){const a=Je(e),l=Ze(e);return a&&l?`${a} · ${l}`:a||"未知来源"}var ea={class:"asset-card-main"},aa={class:"asset-card-top"},la={class:"asset-card-title-stack"},ta={class:"asset-card-title-row"},sa={class:"asset-name"},ia={class:"asset-tags"},ra={key:0,class:"asset-description"},oa={class:"asset-meta"},na={class:"asset-meta-item mono"},ua=["title"],ca=["href"],da=$({__name:"SkillCard",props:{skill:{type:Object,required:!0},toggling:{type:Boolean,default:!1},panelScope:{type:String,default:"user"}},emits:["click","toggle","approve"],setup:e=>(t,s)=>{return n(),w("div",{class:m(["skill-card asset-card",{"is-enabled":e.skill.enabled,"is-protected":e.skill.protected}]),onClick:s[4]||(s[4]=a=>t.$emit("click",e.skill))},[_("div",ea,[_("div",aa,[_("div",la,[_("div",ta,[_("span",{class:m(["asset-status-dot",{active:e.skill.enabled}])},null,2),_("span",sa,c(e.skill.name),1)]),_("div",ia,[e.skill.enabled?(n(),r(b(se),{key:0,type:"success",size:"tiny",bordered:!1},{default:p(()=>[...s[5]||(s[5]=[l("已启用",-1)])]),_:1})):(n(),r(b(se),{key:1,type:"default",size:"tiny",bordered:!1},{default:p(()=>[...s[6]||(s[6]=[l("已关闭",-1)])]),_:1})),e.skill.cached?(n(),r(b(se),{key:2,type:"info",size:"tiny",bordered:!1},{default:p(()=>[...s[7]||(s[7]=[l("已缓存",-1)])]),_:1})):a("",!0),"approved"===e.skill.trust?(n(),r(b(se),{key:3,type:"success",size:"tiny",bordered:!1},{default:p(()=>[...s[8]||(s[8]=[l("已批准",-1)])]),_:1})):a("",!0),"blocked"===e.skill.trust?(n(),r(b(se),{key:4,type:"error",size:"tiny",bordered:!1},{default:p(()=>[...s[9]||(s[9]=[l("已阻止",-1)])]),_:1})):a("",!0),"pending"===e.skill.trust?(n(),r(b(se),{key:5,type:"warning",size:"tiny",bordered:!1},{default:p(()=>[...s[10]||(s[10]=[l("待审批",-1)])]),_:1})):a("",!0),"needs_review"===e.skill.trust?(n(),r(b(se),{key:6,type:"warning",size:"tiny",bordered:!1},{default:p(()=>[...s[11]||(s[11]=[l("需复审",-1)])]),_:1})):a("",!0),e.skill.protected?(n(),r(b(se),{key:7,type:"default",size:"tiny",bordered:!1},{default:p(()=>[...s[12]||(s[12]=[l("受保护",-1)])]),_:1})):a("",!0),"unsupported"===e.skill.projection?.state?(n(),r(b(se),{key:8,type:"warning",size:"tiny",bordered:!1},{default:p(()=>[...s[13]||(s[13]=[l("不支持投影",-1)])]),_:1})):a("",!0),b(Je)(e.skill)?(n(),r(b(se),{key:9,type:"info",size:"tiny",bordered:!1},{default:p(()=>[l(c(b(Je)(e.skill)),1)]),_:1})):a("",!0)])])]),e.skill.description?(n(),w("div",ra,c((o=e.skill.description,u=120,o?.length>u?o.slice(0,u)+"...":o)),1)):a("",!0),_("div",oa,[_("span",na,c(e.skill.directory),1),b(Ze)(e.skill)?(n(),w("span",{key:0,class:"asset-meta-item source-item",title:b(Ze)(e.skill)},c(b(Ze)(e.skill)),9,ua)):a("",!0),b(Qe)(e.skill)?(n(),w("a",{key:1,class:"asset-link",href:b(Qe)(e.skill),target:"_blank",rel:"noopener noreferrer",onClick:s[0]||(s[0]=y(()=>{},["stop"]))},c(b(Ye)(e.skill)),9,ca)):a("",!0)])]),_("div",{class:"asset-card-actions",onClick:s[3]||(s[3]=y(()=>{},["stop"]))},[!["pending","needs_review"].includes(e.skill.trust)||"project"===e.panelScope&&"project"!==e.skill.sourceScope?a("",!0):(n(),r(b(U),{key:0,size:"small",tertiary:"",type:"warning",onClick:s[1]||(s[1]=a=>t.$emit("approve",e.skill))},{default:p(()=>[...s[14]||(s[14]=[l("审批",-1)])]),_:1})),i(b(F),{value:e.skill.enabled,loading:e.toggling,disabled:e.skill.protected||e.skill.readonly||!1===e.skill.managed||!e.skill.cached||"approved"!==e.skill.trust||"unsupported"===e.skill.projection?.state||"project"===e.panelScope&&"project"!==e.skill.sourceScope,"aria-label":`${e.skill.name} 开关`,"onUpdate:value":s[2]||(s[2]=a=>t.$emit("toggle",e.skill,a))},null,8,["value","loading","disabled","aria-label"])])],2);var o,u}},[["__scopeId","data-v-f428a4a6"]]),va={class:"repo-manager"},pa={class:"repo-list"},fa={class:"repo-main"},ma={class:"repo-info"},ya={class:"repo-name-row"},ba={class:"repo-name"},ha={class:"repo-branch"},ka={key:0,class:"repo-auth-hint"},ga={class:"repo-actions"},wa={key:0,class:"empty-hint"},_a={class:"add-repo"},ja={class:"add-form"},Ca={class:"tips"},Pa={class:"recommended"},Sa={class:"recommended-list"},xa=["onClick"],za={class:"rec-info"},Ua={class:"rec-name"},$a={class:"rec-desc"},La={key:0,class:"auth-manager"},Ta={class:"auth-meta"},Oa={class:"auth-meta-row"},Ba={class:"auth-value"},Ka={class:"auth-meta-row"},Ga={class:"auth-value"},Aa={class:"auth-meta-row"},Ma={class:"auth-value"},Ea={class:"auth-actions"},Ha=$({__name:"SkillRepoManager",props:{visible:Boolean,platform:{type:String,default:"claude"}},emits:["update:visible","updated"],setup(e,{emit:s}){const d=e,y=s,k=v({get:()=>d.visible,set:e=>y("update:visible",e)}),j=g([]),C=g(!1),P=g(!1),S=g(!1),x=g(null),$=g(!1),L=g(!1),T=g({token:""}),O=g({input:"",branch:"main"}),B=v(()=>x.value?("gitlab"===x.value.provider?"GitLab":"GitHub")+" 仓库认证":"仓库认证"),K=v(()=>"codex"===d.platform?[{provider:"github",owner:"openai",name:"skills",description:"Codex 官方技能库",branch:"main",directory:"skills/.curated"}]:"opencode"===d.platform?[{provider:"github",owner:"Shakudo-io",name:"opencode-skills",description:"OpenCode 官方技能库(46个技能)",branch:"main",directory:""}]:"gemini"===d.platform?[{provider:"github",owner:"google-gemini",name:"gemini-cli",description:"Gemini 官方技能库",branch:"main",directory:".gemini/skills"}]:[{provider:"github",owner:"anthropics",name:"skills",description:"官方技能库",branch:"main",directory:"skills"},{provider:"github",owner:"ComposioHQ",name:"awesome-claude-skills",description:"社区精选",branch:"master"},{provider:"github",owner:"cexll",name:"myclaude",description:"多智能体工作流",branch:"master"}]);function G(e){const a=e.provider||(e.localPath?"local":e.projectPath?"gitlab":"github"),l=Le(e.directory),t=e.branch||"main";return"local"===a?`local:${e.localPath||""}::${l}`:"gitlab"===a?`gitlab:${e.host||"https://gitlab.com"}::${e.projectPath||""}::${t}::${l}`:`github:${e.host||"https://github.com"}::${e.owner||""}/${e.name||""}::${t}::${l}`}function M(e){return"local"===e.provider?e.localPath||e.name||"本地仓库":"gitlab"===e.provider&&e.projectPath||[e.owner,e.name].filter(Boolean).join("/")}function E(e){const a=[];return"local"===e.provider?a.push("本地仓库"):"gitlab"===e.provider?(a.push("GitLab"),e.host&&a.push(e.host.replace(/^https?:\/\//,""))):a.push("GitHub"),e.branch&&a.push(e.branch),e.directory&&a.push(`目录: ${e.directory}`),a.join(" · ")}function I(e){return"github"===e?.provider||"gitlab"===e?.provider}function D(e){return I(e)?e.hasToken?`仓库 Token: ${e.tokenPreview||"已配置"}`:"gitlab"===e.provider?"未配置仓库 Token,将回退到全局 Token、glab 或 git credential":"未配置仓库 Token,可选配置后优先用于 GitHub API 访问":""}function R(){S.value=!1,x.value=null,T.value.token="",$.value=!1,L.value=!1}const q=v(()=>$e(O.value.input)),W=v(()=>!!q.value);async function J(){C.value=!0;try{const e=await ee(d.platform);e.success&&(j.value=e.repos||[])}catch(e){V.error("加载仓库失败: "+e.message)}finally{C.value=!1}}async function Z(){if(!W.value)return;const e=q.value;P.value=!0;try{const a=await le({...e,branch:O.value.branch||"main",enabled:!0},d.platform);a.success&&(j.value=a.repos,O.value.input="",O.value.branch="main",V.success("仓库已保存,请手动点击“刷新远端”获取 Skill"),y("updated"))}catch(a){V.error("添加失败: "+a.message)}finally{P.value=!1}}async function Q(){const e=x.value,a=T.value.token.trim();if(e&&a){$.value=!0;try{const l=await N(e,{token:a},d.platform);l.success&&(j.value=l.repos||[],V.success("仓库 Token 已保存"),y("updated"),R())}catch(l){V.error("保存 Token 失败: "+l.message)}finally{$.value=!1}}}async function X(){const e=x.value;if(e){L.value=!0;try{const a=await N(e,{clearToken:!0},d.platform);a.success&&(j.value=a.repos||[],V.success("仓库 Token 已清除"),y("updated"),R())}catch(a){V.error("清除 Token 失败: "+a.message)}finally{L.value=!1}}}function ie(e){const a=G(e);return j.value.some(e=>G(e)===a)}function re(){R(),y("update:visible",!1)}return u(()=>d.visible,e=>{e&&J()}),u(()=>d.platform,()=>{d.visible&&J()}),o(()=>{d.visible&&J()}),(e,s)=>(n(),w(f,null,[i(b(ze),{show:k.value,"onUpdate:show":s[2]||(s[2]=e=>k.value=e),preset:"card",title:"技能仓库管理",bordered:!1,closable:!0,style:{width:"480px","max-width":"90vw"},onClose:re},{default:p(()=>[_("div",va,[_("div",pa,[i(b(A),{show:C.value},{default:p(()=>[(n(!0),w(f,null,t(j.value,e=>(n(),w("div",{key:e.id||`${e.owner}/${e.name}/${e.directory||""}`,class:"repo-item"},[_("div",fa,[i(b(F),{value:e.enabled,size:"small","onUpdate:value":a=>async function(e,a){try{const l=await Y(e,a,d.platform);l.success&&(j.value=l.repos,y("updated"))}catch(l){V.error("操作失败: "+l.message)}}(e,a)},null,8,["value","onUpdate:value"]),_("div",ma,[_("div",ya,[_("div",ba,c(M(e)),1),I(e)?(n(),r(b(se),{key:0,size:"tiny",type:e.hasToken?"success":"default",bordered:!1},{default:p(()=>[l(c(e.hasToken?"已配 Token":"未配 Token"),1)]),_:2},1032,["type"])):a("",!0)]),_("div",ha,c(E(e)),1),I(e)?(n(),w("div",ka,c(D(e)),1)):a("",!0)])]),_("div",ga,[I(e)?(n(),r(b(U),{key:0,text:"",type:"primary",size:"tiny",focusable:!1,onClick:a=>function(e){I(e)&&(x.value=e,T.value.token="",S.value=!0)}(e)},{default:p(()=>[...s[5]||(s[5]=[l(" 认证 ",-1)])]),_:1},8,["onClick"])):a("",!0),i(b(U),{text:"",type:"error",size:"tiny",focusable:!1,onClick:a=>async function(e){try{const a=await te(e,d.platform);a.success&&(j.value=a.repos,V.success("仓库已删除"),y("updated"))}catch(a){V.error("删除失败: "+a.message)}}(e)},{default:p(()=>[...s[6]||(s[6]=[l(" 删除 ",-1)])]),_:1},8,["onClick"])])]))),128)),0===j.value.length?(n(),w("div",wa," 暂无仓库,请添加 ")):a("",!0)]),_:1},8,["show"])]),_("div",_a,[s[8]||(s[8]=_("div",{class:"add-title"},"添加仓库",-1)),_("div",ja,[i(b(ae),{value:O.value.input,"onUpdate:value":s[0]||(s[0]=e=>O.value.input=e),placeholder:"GitHub/GitLab 仓库地址,或本地路径",size:"small",class:"repo-input",onKeyup:h(Z,["enter"])},null,8,["value"]),i(b(ae),{value:O.value.branch,"onUpdate:value":s[1]||(s[1]=e=>O.value.branch=e),placeholder:"分支(本地可忽略)",size:"small",class:"branch-input"},null,8,["value"]),i(b(U),{type:"primary",size:"small",disabled:!W.value,loading:P.value,focusable:!1,onClick:Z},{default:p(()=>[...s[7]||(s[7]=[l(" 添加 ",-1)])]),_:1},8,["disabled","loading"])]),s[9]||(s[9]=_("div",{class:"add-hint"}," 支持 `owner/repo`、GitHub/GitLab URL 或 SSH、以及本地路径 ",-1))]),_("div",Ca,[i(b(H),{type:"info",bordered:!1,size:"small"},{default:p(()=>[...s[10]||(s[10]=[l(" 支持 GitHub、GitLab 和本地仓库路径;远程仓库可按仓库单独配置 Token。 ",-1)])]),_:1})]),_("div",Pa,[s[12]||(s[12]=_("div",{class:"recommended-title"},"推荐仓库",-1)),_("div",Sa,[(n(!0),w(f,null,t(K.value,e=>(n(),w("div",{key:e.id||`${e.owner}/${e.name}/${e.directory||""}`,class:m(["recommended-item",{added:ie(e)}]),onClick:a=>!ie(e)&&async function(e){P.value=!0;try{const a=await le({...e,branch:e.branch||"main",directory:e.directory||"",enabled:!0},d.platform);a.success&&(V.success("仓库已保存,请手动点击“刷新远端”获取 Skill"),j.value=a.repos,y("updated"))}catch(a){V.error("添加失败: "+a.message)}finally{P.value=!1}}(e)},[_("div",za,[_("span",Ua,c(M(e)),1),_("span",$a,c(e.description),1)]),ie(e)?(n(),r(b(se),{key:0,size:"tiny",type:"success",bordered:!1},{default:p(()=>[...s[11]||(s[11]=[l(" 已添加 ",-1)])]),_:1})):(n(),r(b(z),{key:1,class:"add-icon"},{default:p(()=>[i(b(de))]),_:1}))],10,xa))),128))])])])]),_:1},8,["show"]),i(b(ze),{show:S.value,"onUpdate:show":s[4]||(s[4]=e=>S.value=e),preset:"card",title:B.value,bordered:!1,style:{width:"460px","max-width":"92vw"},onClose:R},{default:p(()=>[x.value?(n(),w("div",La,[i(b(H),{type:"info",bordered:!1,size:"small"},{default:p(()=>{return[l(c((e=x.value,"gitlab"===e?.provider?"私有 GitLab 仓库建议配置仓库级 Private Token;保存后会优先使用当前仓库 Token,再回退到全局环境变量、glab 和 git credential。":"GitHub 仓库可选配置 Personal Access Token;保存后会优先使用当前仓库 Token,再回退到全局环境变量、gh 和 git credential。")),1)];var e}),_:1}),_("div",Ta,[_("div",Oa,[s[13]||(s[13]=_("span",{class:"auth-label"},"仓库",-1)),_("span",Ba,c(M(x.value)),1)]),_("div",Ka,[s[14]||(s[14]=_("span",{class:"auth-label"},"来源",-1)),_("span",Ga,c("gitlab"===x.value.provider?"GitLab":"GitHub"),1)]),_("div",Aa,[s[15]||(s[15]=_("span",{class:"auth-label"},"当前状态",-1)),_("span",Ma,c(x.value.hasToken?`已配置 ${x.value.tokenPreview||""}`:"未配置仓库 Token"),1)])]),i(b(ae),{value:T.value.token,"onUpdate:value":s[3]||(s[3]=e=>T.value.token=e),type:"password","show-password-on":"click",clearable:"",placeholder:"输入此仓库专属 Token",onKeyup:h(Q,["enter"])},null,8,["value"]),s[19]||(s[19]=_("div",{class:"auth-footnote"}," 仓库 Token 会优先于全局环境变量、CLI 登录和系统 Git 凭据。 ",-1)),_("div",Ea,[i(b(U),{focusable:!1,onClick:R},{default:p(()=>[...s[16]||(s[16]=[l(" 取消 ",-1)])]),_:1}),x.value.hasToken?(n(),r(b(U),{key:0,type:"warning",secondary:"",focusable:!1,loading:L.value,onClick:X},{default:p(()=>[...s[17]||(s[17]=[l(" 清除 Token ",-1)])]),_:1},8,["loading"])):a("",!0),i(b(U),{type:"primary",focusable:!1,disabled:!T.value.token.trim(),loading:$.value,onClick:Q},{default:p(()=>[...s[18]||(s[18]=[l(" 保存 Token ",-1)])]),_:1},8,["disabled","loading"])])])):a("",!0)]),_:1},8,["show","title"])],64))}},[["__scopeId","data-v-059e6be9"]]),Ia={style:{"margin-bottom":"12px"}},Da={class:"file-list"},Ra={class:"file-item"},Na={class:"file-info"},qa={class:"file-path"},Fa={key:1,class:"file-size"},Va={class:"file-actions"},Wa={class:"modal-footer"},Ja=$({__name:"SkillCreateModal",props:{visible:Boolean,platform:{type:String,default:"claude"},scope:{type:String,default:"user"},projectPath:{type:String,default:""}},emits:["update:visible","created"],setup(e,{emit:s}){const o=e,d=v(()=>({...o.projectPath?{cwd:o.projectPath}:{},...o.scope&&"user"!==o.scope?{scope:o.scope}:{}})),y=s,h=v({get:()=>o.visible,set:e=>y("update:visible",e)}),k=g("simple"),j=g(null),C=g({directory:"",name:"",description:"",content:""}),P={directory:[{required:!0,message:"请输入目录名称",trigger:"blur"},{pattern:/^[a-zA-Z0-9_-]+$/,message:"只能包含英文、数字、横杠和下划线",trigger:"blur"}],content:[{required:!0,message:"请输入技能内容",trigger:"blur"}]},S=g(null),x=g({directory:"",files:[]}),$={directory:[{required:!0,message:"请输入目录名称",trigger:"blur"},{pattern:/^[a-zA-Z0-9_-]+$/,message:"只能包含英文、数字、横杠和下划线",trigger:"blur"}]},L=g(!1),O=g(!1),A=g(null),M=g(""),E=g(-1),H=g(!1),I=g(""),D=g(""),R=v(()=>x.value.files.some(e=>"SKILL.md"===e.path));function N(e){const a=e.toLowerCase().substring(e.lastIndexOf("."));return[".md",".txt",".json",".js",".ts",".py",".sh",".yaml",".yml",".toml",".xml",".html",".css"].includes(a)}function q({file:e}){return!0}async function F({file:e,onFinish:a,onError:l}){try{const t=new FileReader;t.onload=l=>{const t=N(e.name);let s=e.name;e.file?.webkitRelativePath&&(s=e.file.webkitRelativePath.split("/").slice(1).join("/")),x.value.files.push({path:s,content:t?l.target.result:btoa(l.target.result),isBase64:!t,size:e.file.size}),a()},t.onerror=l,N(e.name)?t.readAsText(e.file):t.readAsBinaryString(e.file)}catch(t){l()}}function W(){E.value>=0&&(x.value.files[E.value].content=M.value),O.value=!1,A.value=null,M.value="",E.value=-1}function J(){I.value.trim()?x.value.files.some(e=>e.path===I.value)?V.warning("文件已存在"):(x.value.files.push({path:I.value,content:D.value,isBase64:!1,size:new Blob([D.value]).size}),H.value=!1,I.value="",D.value=""):V.warning("请输入文件路径")}function Q(){const e=`---\nname: "${x.value.directory||"我的技能"}"\ndescription: "技能描述"\n---\n\n# 技能指令\n\n在这里编写你的技能内容...\n`;x.value.files.unshift({path:"SKILL.md",content:e,isBase64:!1,size:new Blob([e]).size})}async function Y(){"simple"===k.value?await async function(){try{await(j.value?.validate())}catch(e){return}L.value=!0;try{const e=await Z({name:C.value.name||C.value.directory,directory:C.value.directory,description:C.value.description,content:C.value.content,...d.value},o.platform);e.success?(V.success("技能已缓存,当前为关闭状态,审批后可启用"),y("created"),ee()):V.error(e.message||"创建失败")}catch(e){V.error("创建失败: "+(e.response?.data?.message||e.message))}finally{L.value=!1}}():await async function(){try{await(S.value?.validate())}catch(e){return}if(!R.value)return void V.error("必须包含 SKILL.md 文件");L.value=!0;try{const e=await X({directory:x.value.directory,files:x.value.files.map(e=>({path:e.path,content:e.content,isBase64:e.isBase64})),...d.value},o.platform);e.success?(V.success(`技能已缓存,当前为关闭状态,包含 ${e.fileCount} 个文件`),y("created"),ee()):V.error(e.message||"创建失败")}catch(e){V.error("创建失败: "+(e.response?.data?.message||e.message))}finally{L.value=!1}}()}function ee(){y("update:visible",!1)}return u(()=>o.visible,e=>{e||(k.value="simple",C.value={directory:"",name:"",description:"",content:""},x.value={directory:"",files:[]},A.value=null,M.value="",E.value=-1,I.value="",D.value="")}),(e,s)=>(n(),r(b(ze),{show:h.value,"onUpdate:show":s[14]||(s[14]=e=>h.value=e),preset:"card",title:"创建自定义技能",bordered:!1,closable:!0,style:{width:"680px","max-width":"90vw"},onClose:ee},{footer:p(()=>[_("div",Wa,[i(b(U),{onClick:ee},{default:p(()=>[...s[24]||(s[24]=[l("取消",-1)])]),_:1}),i(b(U),{type:"primary",loading:L.value,onClick:Y},{default:p(()=>[...s[25]||(s[25]=[l(" 创建 ",-1)])]),_:1},8,["loading"])])]),default:p(()=>[i(b(Pe),{value:k.value,"onUpdate:value":s[6]||(s[6]=e=>k.value=e),type:"line",animated:""},{default:p(()=>[i(b(je),{name:"simple",tab:"简单模式"},{default:p(()=>[i(b(G),{ref_key:"simpleFormRef",ref:j,model:C.value,rules:P,"label-placement":"top","label-width":"auto"},{default:p(()=>[i(b(K),{label:"目录名称",path:"directory"},{feedback:p(()=>[...s[15]||(s[15]=[l(" 只能包含英文、数字、横杠和下划线 ",-1)])]),default:p(()=>[i(b(ae),{value:C.value.directory,"onUpdate:value":s[0]||(s[0]=e=>C.value.directory=e),placeholder:"例如: my-custom-skill",maxlength:50},null,8,["value"])]),_:1}),i(b(K),{label:"技能名称",path:"name"},{default:p(()=>[i(b(ae),{value:C.value.name,"onUpdate:value":s[1]||(s[1]=e=>C.value.name=e),placeholder:"显示名称,可以是中文",maxlength:100},null,8,["value"])]),_:1}),i(b(K),{label:"描述",path:"description"},{default:p(()=>[i(b(ae),{value:C.value.description,"onUpdate:value":s[2]||(s[2]=e=>C.value.description=e),type:"textarea",placeholder:"简短描述这个技能的用途",rows:2,maxlength:200},null,8,["value"])]),_:1}),i(b(K),{label:"技能内容 (提示词,支持 Markdown)",path:"content"},{default:p(()=>[i(Be,{modelValue:C.value.content,"onUpdate:modelValue":s[3]||(s[3]=e=>C.value.content=e),rows:10,"min-height":200,placeholder:"输入技能的详细指令内容,支持 Markdown 格式..."},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1}),i(b(je),{name:"advanced",tab:"高级模式 (多文件)"},{default:p(()=>[i(b(G),{ref_key:"advancedFormRef",ref:S,model:x.value,rules:$,"label-placement":"top","label-width":"auto"},{default:p(()=>[i(b(K),{label:"目录名称",path:"directory"},{feedback:p(()=>[...s[16]||(s[16]=[l(" 只能包含英文、数字、横杠和下划线 ",-1)])]),default:p(()=>[i(b(ae),{value:x.value.directory,"onUpdate:value":s[4]||(s[4]=e=>x.value.directory=e),placeholder:"例如: my-custom-skill",maxlength:50},null,8,["value"])]),_:1}),i(b(K),{label:"文件上传"},{default:p(()=>[i(b(Oe),{multiple:"","directory-dnd":"","show-file-list":!1,"custom-request":F,onBeforeUpload:q},{default:p(()=>[i(b(Te),null,{default:p(()=>[_("div",Ia,[i(b(z),{size:"48",depth:3},{default:p(()=>[i(b(ue))]),_:1})]),i(b(T),{style:{"font-size":"16px"}},{default:p(()=>[...s[17]||(s[17]=[l(" 拖放文件或文件夹到此处,或点击选择 ",-1)])]),_:1}),i(b(Ne),{depth:"3",style:{margin:"8px 0 0 0"}},{default:p(()=>[...s[18]||(s[18]=[l(" 必须包含 SKILL.md 文件 ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),x.value.files.length>0?(n(),r(b(K),{key:0,label:"已添加的文件"},{default:p(()=>[_("div",Da,[(n(!0),w(f,null,t(x.value.files,(e,t)=>(n(),r(b(xe),{key:e.path,size:"small",class:m({"skill-md":"SKILL.md"===e.path})},{default:p(()=>{return[_("div",Ra,[_("div",Na,[i(b(z),{size:16,class:"file-icon"},{default:p(()=>[e.isDirectory?(n(),r(b(ne),{key:1})):(n(),r(b(ye),{key:0}))]),_:2},1024),_("span",qa,c(e.path),1),"SKILL.md"===e.path?(n(),r(b(se),{key:0,size:"small",type:"primary"},{default:p(()=>[...s[19]||(s[19]=[l("必需",-1)])]),_:1})):a("",!0),e.size?(n(),w("span",Fa,c((o=e.size,o<1024?o+" B":o<1048576?(o/1024).toFixed(1)+" KB":(o/1048576).toFixed(1)+" MB")),1)):a("",!0)]),_("div",Va,[N(e.path)?(n(),r(b(U),{key:0,size:"small",text:"",onClick:e=>function(e){const a=x.value.files[e];A.value=a,M.value=a.content,E.value=e,O.value=!0}(t)},{default:p(()=>[...s[20]||(s[20]=[l(" 编辑 ",-1)])]),_:1},8,["onClick"])):a("",!0),"SKILL.md"!==e.path?(n(),r(b(U),{key:1,size:"small",text:"",type:"error",onClick:e=>function(e){x.value.files.splice(e,1)}(t)},{default:p(()=>[...s[21]||(s[21]=[l(" 删除 ",-1)])]),_:1},8,["onClick"])):a("",!0)])])];var o}),_:2},1032,["class"]))),128))])]),_:1})):a("",!0),i(b(K),null,{default:p(()=>[i(b(B),null,{default:p(()=>[i(b(U),{onClick:s[5]||(s[5]=e=>H.value=!0)},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(de))]),_:1})]),default:p(()=>[s[22]||(s[22]=l(" 添加文件 ",-1))]),_:1}),R.value?a("",!0):(n(),r(b(U),{key:0,onClick:Q},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(re))]),_:1})]),default:p(()=>[s[23]||(s[23]=l(" 添加 SKILL.md 模板 ",-1))]),_:1}))]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})]),_:1},8,["value"]),i(b(ze),{show:O.value,"onUpdate:show":s[9]||(s[9]=e=>O.value=e),preset:"card",title:"编辑文件",style:{width:"600px","max-width":"90vw"}},{footer:p(()=>[i(b(B),{justify:"end"},{default:p(()=>[i(b(U),{onClick:s[8]||(s[8]=e=>O.value=!1)},{default:p(()=>[...s[26]||(s[26]=[l("取消",-1)])]),_:1}),i(b(U),{type:"primary",onClick:W},{default:p(()=>[...s[27]||(s[27]=[l("保存",-1)])]),_:1})]),_:1})]),default:p(()=>[i(b(K),{label:A.value?.path||"文件内容"},{default:p(()=>[i(b(ae),{value:M.value,"onUpdate:value":s[7]||(s[7]=e=>M.value=e),type:"textarea",rows:15,placeholder:"输入文件内容...",style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["label"])]),_:1},8,["show"]),i(b(ze),{show:H.value,"onUpdate:show":s[13]||(s[13]=e=>H.value=e),preset:"card",title:"添加新文件",style:{width:"600px","max-width":"90vw"}},{footer:p(()=>[i(b(B),{justify:"end"},{default:p(()=>[i(b(U),{onClick:s[12]||(s[12]=e=>H.value=!1)},{default:p(()=>[...s[29]||(s[29]=[l("取消",-1)])]),_:1}),i(b(U),{type:"primary",onClick:J},{default:p(()=>[...s[30]||(s[30]=[l("添加",-1)])]),_:1})]),_:1})]),default:p(()=>[i(b(G),{"label-placement":"top"},{default:p(()=>[i(b(K),{label:"文件路径"},{feedback:p(()=>[...s[28]||(s[28]=[l(" 可以包含子目录,如 scripts/helper.sh ",-1)])]),default:p(()=>[i(b(ae),{value:I.value,"onUpdate:value":s[10]||(s[10]=e=>I.value=e),placeholder:"例如: scripts/helper.sh 或 README.md"},null,8,["value"])]),_:1}),i(b(K),{label:"文件内容"},{default:p(()=>[i(b(ae),{value:D.value,"onUpdate:value":s[11]||(s[11]=e=>D.value=e),type:"textarea",rows:10,placeholder:"输入文件内容...",style:{"font-family":"monospace"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["show"])]),_:1},8,["show"]))}},[["__scopeId","data-v-d5c75ec8"]]),Za={class:"asset-detail-drawer-header"},Qa={class:"asset-detail-identity"},Ya={class:"asset-detail-heading"},Xa={class:"asset-detail-name"},el={class:"asset-detail-meta"},al={key:3,class:"asset-detail-subtle"},ll={class:"asset-detail-body"},tl={key:0,class:"asset-detail-loading"},sl={key:1,class:"asset-detail-error"},il={class:"asset-detail-container"},rl={class:"asset-detail-info-section"},ol={class:"asset-detail-description"},nl={key:0,class:"asset-detail-info-section"},ul={class:"asset-detail-box"},cl=["href"],dl={key:1},vl={class:"asset-detail-info-section"},pl={class:"asset-detail-actions"},fl=["innerHTML"],ml={key:1,class:"asset-detail-empty"},yl={__name:"SkillDetailDrawer",props:{visible:{type:Boolean,default:!1},skill:{type:Object,default:null},platform:{type:String,default:"claude"},scope:{type:String,default:"user"},projectPath:{type:String,default:""}},emits:["update:visible","updated"],setup(e,{emit:t}){const{drawerWidth:s}=Ge(600),o=e,d=t,f=v({get:()=>o.visible,set:e=>d("update:visible",e)}),m=g(!1),y=g(""),h=g(null),k=g(!1),j=g(0),C={height:"100%",minHeight:0,overflow:"hidden"};function P(e){const a=String(e);if("undefined"==typeof document)return a.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"").replace(/\son[a-z]+\s*=\s*(['"])[\s\S]*?\1/gi,"").replace(/\s(?:href|src)\s*=\s*(['"])\s*(?:javascript|vbscript|data):[\s\S]*?\1/gi,"");const l=new Set(["a","abbr","b","blockquote","br","code","del","div","em","h1","h2","h3","h4","h5","h6","hr","i","img","input","li","ol","p","pre","span","strong","sub","sup","table","tbody","td","tfoot","th","thead","tr","ul"]),t=new Set(["alt","checked","class","disabled","href","id","rel","src","target","title","type"]),s=(e,a)=>{const l=String(e||"").trim();return!(!l.startsWith("#")&&!l.startsWith("/"))||(!("a"!==a||!/^mailto:/i.test(l))||/^https?:\/\//i.test(l))},i=document.createElement("template");return i.innerHTML=a,i.content.querySelectorAll("*").forEach(e=>{const a=e.tagName.toLowerCase();if(l.has(a))for(const l of[...e.attributes]){const i=l.name.toLowerCase();t.has(i)&&!/^on/i.test(i)?"href"!==i&&"src"!==i||s(l.value,a)||e.removeAttribute(l.name):e.removeAttribute(l.name)}else e.remove()}),i.innerHTML}const S=v(()=>{if(!h.value?.content)return"";try{return P(Me(h.value.content,{breaks:!0,gfm:!0}))}catch{return P(h.value.content)}}),x=v(()=>h.value?Ze(h.value):""),$=v(()=>h.value?Qe(h.value):""),L=v(()=>h.value?Ye(h.value):""),T=v(()=>h.value?.installPath||h.value?.path||h.value?.fullPath||""),O=v(()=>({...o.projectPath?{cwd:o.projectPath}:{},...o.scope&&"user"!==o.scope?{scope:o.scope}:{}}));async function B(){if(!o.skill?.directory)return;const e=++j.value;m.value=!0,y.value="";try{const l=await M(o.skill.directory,o.platform,(a=o.skill,{id:a.repoId,provider:a.repoProvider,host:a.repoHost,owner:a.repoOwner,name:a.repoName,branch:a.repoBranch||"main",directory:a.repoDirectory||"",projectPath:a.repoProjectPath,localPath:a.repoLocalPath,repoUrl:a.repoUrl}),o.skill.fullDirectory||null,O.value);if(e!==j.value)return;l.success?h.value={...o.skill,...l,source:l.source||o.skill?.source,repoProvider:l.repoProvider||o.skill?.repoProvider,repoOwner:l.repoOwner||o.skill?.repoOwner,repoName:l.repoName||o.skill?.repoName,repoProjectPath:l.repoProjectPath||o.skill?.repoProjectPath,repoLocalPath:l.repoLocalPath||o.skill?.repoLocalPath,repoUrl:l.repoUrl||o.skill?.repoUrl}:y.value=l.message||"加载失败"}catch(l){if(e!==j.value)return;y.value=l.response?.data?.message||l.message||"加载失败"}finally{e===j.value&&(m.value=!1)}var a}async function K(){if(!k.value&&h.value&&h.value.controlKey&&!h.value.protected&&!h.value.readonly&&!1!==h.value.managed&&"approved"===h.value.trust&&"unsupported"!==h.value.projection?.state&&h.value.cached&&("project"!==o.scope||"project"===h.value.sourceScope)){k.value=!0;try{const e="project"===o.scope?await _e(o.projectPath,o.platform,h.value.controlKey,!h.value.enabled):await D(h.value.controlKey,!h.value.enabled,o.platform,O.value);if("needs_approval"===e.status)return void V.warning("该技能需要先审批");if("unsupported"===e.status)return void V.error("当前平台不支持安全投影");if("conflict"===e.status)return void V.warning("目标 Skill 目录已被其他来源占用");if("projection_failed"===e.status)return void V.error(e.lastError||"Skill 投影失败");h.value.enabled=e.enabled,h.value.projection=e.projection||h.value.projection,V.success(e.enabled?"技能已启用":"技能已关闭"),d("updated")}catch(e){V.error("切换失败: "+(e.response?.data?.message||e.message))}finally{k.value=!1}}}async function G(){if(h.value?.controlKey&&["pending","needs_review"].includes(h.value.trust)){k.value=!0;try{const e=await I(h.value.controlKey,"approved",o.platform,O.value);h.value.trust=e.trust,V.success("技能已批准,当前仍保持关闭"),d("updated")}catch(e){V.error("审批失败: "+(e.response?.data?.message||e.message))}finally{k.value=!1}}}async function E(){if(h.value?.content)try{if("manual"===(await Ee(h.value.content))?.method)return void V.warning("自动复制失败,已弹出手动复制框");V.success("已复制到剪贴板")}catch{V.error("复制失败")}}return u(()=>[o.visible,o.skill],([e,a])=>{e&&a?B():(j.value+=1,m.value=!1,h.value=null,y.value="")}),(t,o)=>(n(),r(b(Ke),{show:f.value,"onUpdate:show":o[0]||(o[0]=e=>f.value=e),width:b(s),placement:"right","show-mask":!0},{default:p(()=>[i(b(Ae),{closable:"","native-scrollbar":!1,"body-content-style":C},{header:p(()=>[_("div",Za,[_("div",Qa,[i(b(z),{size:20,class:"asset-detail-icon"},{default:p(()=>[i(b(me))]),_:1}),_("div",Ya,[_("span",Xa,c(h.value?.name||e.skill?.name||"技能详情"),1),_("div",el,[h.value?.enabled?(n(),r(b(se),{key:0,type:"success",size:"tiny",bordered:!1},{default:p(()=>[...o[1]||(o[1]=[l("已启用",-1)])]),_:1})):(n(),r(b(se),{key:1,type:"default",size:"tiny",bordered:!1},{default:p(()=>[...o[2]||(o[2]=[l("已关闭",-1)])]),_:1})),h.value?.protected?(n(),r(b(se),{key:2,type:"default",size:"tiny",bordered:!1},{default:p(()=>[...o[3]||(o[3]=[l("受保护",-1)])]),_:1})):a("",!0),h.value?(n(),w("span",al,c(b(Xe)(h.value)),1)):a("",!0)])])])])]),default:p(()=>[_("div",ll,[m.value?(n(),w("div",tl,[i(b(A),{size:"medium"}),o[4]||(o[4]=_("p",null,"加载技能详情中...",-1))])):y.value?(n(),w("div",sl,[i(b(z),{size:44,class:"asset-detail-error-icon"},{default:p(()=>[i(b(ce))]),_:1}),_("p",null,c(y.value),1),i(b(U),{size:"small",onClick:B},{default:p(()=>[...o[5]||(o[5]=[l("重试",-1)])]),_:1})])):h.value?(n(),r(b(Pe),{key:2,type:"line",animated:"",class:"asset-detail-tabs"},{default:p(()=>[i(b(je),{name:"overview",tab:"概览"},{default:p(()=>[_("div",il,[_("div",rl,[o[6]||(o[6]=_("h3",{class:"asset-detail-section-title"},"描述",-1)),_("p",ol,c(h.value.description||"暂无描述"),1)]),i(Se,{path:T.value},null,8,["path"]),x.value||$.value?(n(),w("div",nl,[o[7]||(o[7]=_("h3",{class:"asset-detail-section-title"},"来源",-1)),_("div",ul,[i(b(z),{size:16},{default:p(()=>[i(b(fe))]),_:1}),$.value?(n(),w("a",{key:0,class:"asset-detail-link",href:$.value,target:"_blank",rel:"noopener noreferrer"},c(L.value),9,cl)):(n(),w("code",dl,c(x.value),1))])])):a("",!0),_("div",vl,[o[12]||(o[12]=_("h3",{class:"asset-detail-section-title"},"操作",-1)),_("div",pl,[!h.value.controlKey||"approved"!==h.value.trust||!h.value.cached||h.value.protected||"unsupported"===h.value.projection?.state||"project"===e.scope&&"project"!==h.value.sourceScope?h.value.controlKey&&["pending","needs_review"].includes(h.value.trust)&&("project"!==e.scope||"project"===h.value.sourceScope)?(n(),r(b(U),{key:1,tertiary:"",type:"warning",size:"small",loading:k.value,onClick:G},{default:p(()=>[...o[8]||(o[8]=[l(" 审批 ",-1)])]),_:1},8,["loading"])):h.value.protected?(n(),r(b(U),{key:2,tertiary:"",size:"small",disabled:""},{default:p(()=>[...o[9]||(o[9]=[l(" 受保护 ",-1)])]),_:1})):"unsupported"===h.value.projection?.state?(n(),r(b(U),{key:3,tertiary:"",size:"small",disabled:""},{default:p(()=>[...o[10]||(o[10]=[l(" 不支持投影 ",-1)])]),_:1})):["pending","needs_review"].includes(h.value.trust)?(n(),r(b(U),{key:4,tertiary:"",size:"small",disabled:""},{default:p(()=>[l(c("needs_review"===h.value.trust?"需复审":"待审批"),1)]),_:1})):a("",!0):(n(),r(b(U),{key:0,type:"primary",size:"small",loading:k.value,onClick:K},{default:p(()=>[l(c(h.value.enabled?"关闭此技能":"启用此技能"),1)]),_:1},8,["loading"])),i(b(U),{text:"",size:"small",disabled:!h.value.content,onClick:E},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(ke))]),_:1})]),default:p(()=>[o[11]||(o[11]=l(" 复制内容 ",-1))]),_:1},8,["disabled"])])])])]),_:1}),i(b(je),{name:"content",tab:"内容"},{default:p(()=>[h.value.content?(n(),w("div",{key:0,class:"asset-detail-content",innerHTML:S.value},null,8,fl)):(n(),w("div",ml,[i(b(z),{size:44,class:"asset-detail-empty-icon"},{default:p(()=>[i(b(re))]),_:1}),o[13]||(o[13]=_("p",null,"暂无技能内容",-1))]))]),_:1})]),_:1})):a("",!0)])]),_:1})]),_:1},8,["show","width"]))}},bl=["enableCodexUser","enableClaudeUser","enablePiUser","enablePiProject"];function hl(e){if(null===e||"object"!=typeof e)return!1;const a=Object.getPrototypeOf(e);return a===Object.prototype||null===a}function kl(e){if(!hl(e)||!0!==e.success)throw new Error("响应未明确标记成功");if(!hl(e.settings)||!bl.every(a=>"boolean"==typeof e.settings[a]))throw new Error("响应 settings 必须包含四个布尔字段");return Object.fromEntries(bl.map(a=>[a,e.settings[a]]))}function gl(e){return"omp"===e}async function wl(e,a){return function(e,a){const l=kl(e);if(!bl.every(e=>l[e]===a[e]))throw new Error("响应 settings 与提交值不一致");return l}(await a(e),e)}var _l={key:1,class:"scan-settings"},jl={class:"setting-copy"},Cl=["id"],Pl={class:"setting-description"},Sl={class:"modal-actions"},xl=$({__name:"OmpSkillSettingsModal",props:{visible:Boolean,operationToken:{type:Number,default:0}},emits:["update:visible","saved"],setup(e,{emit:a}){const s=e,o=a,m=ie(),y=g(!1),h=g(!1),k=g(""),j=bl,C=d(Object.fromEntries(j.map(e=>[e,!0])));let P=0,S=0;const x=[{key:"enableCodexUser",label:"Codex 用户",description:"扫描 Codex 用户技能目录"},{key:"enableClaudeUser",label:"Claude 用户与插件",description:"扫描 Claude 用户目录和插件技能"},{key:"enablePiUser",label:"OMP 用户与插件",description:"扫描 OMP 用户目录和插件技能"},{key:"enablePiProject",label:"当前项目 .omp/skills",description:"扫描当前项目的 OMP 技能目录"}],z=v({get:()=>s.visible,set:e=>{h.value||o("update:visible",e)}});function $(e){try{if(e instanceof Error)return e.message;if("string"==typeof e)return e;if(null==e)return"未知错误";if("object"==typeof e&&"string"==typeof e.message)return e.message}catch{}try{const a=JSON.stringify(e);if("string"==typeof a)return a}catch{}try{return String(e)}catch{return"未知错误"}}async function L(){const e=++P;y.value=!0,k.value="";try{const a=kl(await q());if(e!==P||!s.visible)return;Object.assign(C,a)}catch(a){if(e!==P||!s.visible)return;k.value=`加载技能扫描设置失败: ${$(a)}`,m.error(k.value)}finally{e===P&&(y.value=!1)}}async function T(){if(y.value||h.value||k.value)return;const e=++S,a=s.operationToken,l=Object.fromEntries(j.map(e=>[e,C[e]]));h.value=!0;try{const t=await wl(l,J);if(e!==S||a!==s.operationToken||!s.visible)return;o("saved",t,a)}catch(t){if(e!==S||a!==s.operationToken||!s.visible)return;m.error(`保存技能扫描设置失败: ${$(t)}`)}finally{e===S&&a===s.operationToken&&s.visible&&(h.value=!1)}}return u(()=>s.visible,e=>{e?L():(P+=1,S+=1,h.value=!1,y.value=!1,k.value="")},{immediate:!0}),(e,a)=>(n(),r(b(ze),{show:z.value,"onUpdate:show":a[1]||(a[1]=e=>z.value=e),preset:"card",title:"技能扫描设置",bordered:!1,closable:!h.value,"mask-closable":!h.value,"close-on-esc":!h.value,style:{width:"420px","max-width":"92vw"}},{footer:p(()=>[_("div",Sl,[i(b(U),{disabled:h.value,onClick:a[0]||(a[0]=e=>z.value=!1)},{default:p(()=>[...a[4]||(a[4]=[l("取消",-1)])]),_:1},8,["disabled"]),i(b(U),{type:"primary",loading:h.value,disabled:y.value||h.value||!!k.value,onClick:T},{default:p(()=>[...a[5]||(a[5]=[l(" 保存 ",-1)])]),_:1},8,["loading","disabled"])])]),default:p(()=>[i(b(A),{show:y.value},{default:p(()=>[k.value?(n(),r(b(H),{key:0,type:"error","show-icon":!0},{action:p(()=>[i(b(U),{size:"small",disabled:y.value||h.value,onClick:L},{default:p(()=>[...a[2]||(a[2]=[l("重试",-1)])]),_:1},8,["disabled"])]),default:p(()=>[l(c(k.value)+" ",1)]),_:1})):(n(),w("div",_l,[a[3]||(a[3]=_("div",{class:"section-title"},"扫描来源",-1)),(n(),w(f,null,t(x,e=>_("div",{key:e.key,class:"setting-row"},[_("div",jl,[_("div",{id:`${e.key}-label`,class:"setting-label"},c(e.label),9,Cl),_("div",Pl,c(e.description),1)]),i(b(F),{value:C[e.key],"onUpdate:value":a=>C[e.key]=a,disabled:y.value||h.value,"aria-labelledby":`${e.key}-label`},null,8,["value","onUpdate:value","disabled","aria-labelledby"])])),64))]))]),_:1},8,["show"])]),_:1},8,["show","closable","mask-closable","close-on-esc"]))}},[["__scopeId","data-v-c6883975"]]),zl={key:0,class:"asset-panel-header"},Ul={class:"asset-title-group"},$l={class:"asset-heading"},Ll={class:"asset-title-row"},Tl={class:"asset-platform-pill"},Ol={key:0,class:"asset-action-row"},Bl={key:1,class:"asset-drawer-toolbar"},Kl={key:0,class:"asset-action-row"},Gl={class:"asset-summary"},Al={class:"asset-summary-item"},Ml={class:"asset-summary-value"},El={class:"asset-summary-item"},Hl={class:"asset-summary-value"},Il={class:"asset-summary-item"},Dl={class:"asset-summary-value"},Rl={class:"asset-filter-bar"},Nl={class:"asset-panel-content"},ql={key:0,class:"asset-empty"},Fl={class:"asset-list"},Vl={key:2,class:"asset-footer"},Wl={key:3,class:"asset-refresh-status"},Jl={key:0},Zl={key:1},Ql=$({__name:"SkillsPanel",props:{inDrawer:{type:Boolean,default:!1},hideBack:{type:Boolean,default:!1},drawerVisible:{type:Boolean,default:!1},platform:{type:String,default:""},projectPath:{type:String,default:""},scope:{type:String,default:"user"}},emits:["back","updated"],setup(e){const s=e,d=k(),y=De(),h=ie(),j=g(!1),C=g([]),P=g(""),S=g("all"),x=g(!1),$=g(!1),T=g(!1),B=g(!1),K=g(0),G=g(null),M=g({}),H=g(!1),N=g(null),q=g(!1),F=g(0),V=g(0),{byCapability:J}=O(),Z=v(()=>J("skills").map(e=>e.key)),Y=v(()=>Z.value.includes(ne.value)),X=v(()=>y.get(ne.value)||He(ne.value)),ee=v(()=>X.value?.resourceActions?.skills||{}),le=v(()=>!1!==ee.value.create),te=v(()=>!1!==ee.value.repositories),se=v(()=>!1!==ee.value.import),re=v(()=>!1!==ee.value.refresh),ne=v(()=>String(s.platform||Ie(d)||"claude").trim().toLowerCase()),ue=v(()=>({...s.projectPath?{cwd:s.projectPath}:{},...s.scope&&"user"!==s.scope?{scope:s.scope}:{}})),ce=v(()=>gl(ne.value)),ye=v(()=>{const e=y.get(ne.value)||He(ne.value);return e.label||e.title||"Claude Code"}),ke=[{label:"全部",value:"all"},{label:"已启用",value:"enabled"},{label:"已关闭",value:"disabled"},{label:"待审批 / 需复审",value:"pending"}],je=v(()=>C.value.filter(e=>e.enabled).length),Pe=v(()=>({never_fetched:"从未刷新",queued:"排队中",running:"刷新中",succeeded:"已完成",partial:"部分成功",failed:"失败",interrupted:"已中断",idle:"已完成"}[N.value?.status||N.value?.state]||"")),Se=v(()=>C.value.filter(e=>["pending","needs_review"].includes(e.trust)).length),xe=v(()=>{let e=C.value;if("enabled"===S.value?e=e.filter(e=>e.enabled):"disabled"===S.value?e=e.filter(e=>!e.enabled):"pending"===S.value&&(e=e.filter(e=>["pending","needs_review"].includes(e.trust))),P.value.trim()){const a=P.value.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(a)||e.description?.toLowerCase().includes(a))}return[...e].sort((e,a)=>e.enabled===a.enabled?0:e.enabled?-1:1)}),ze=v(()=>P.value?"没有匹配的技能":"enabled"===S.value?"暂无已启用的技能":"disabled"===S.value?"暂无已关闭的技能":"pending"===S.value?"暂无待审批的技能":Y.value?le.value||te.value||re.value?"暂无可用技能,请配置仓库源":`${ye.value} 当前没有可管理的技能`:`${ye.value} 暂未提供 Skills 能力`);async function Ue({notifyError:e=!0}={}){const a=++F.value,l=ne.value;if(!Y.value)return C.value=[],j.value=!1,!1;j.value=!0;try{const e="project"===s.scope?await we(s.projectPath,l):await E(l,ue.value),t="project"===s.scope?[...Array.isArray(e?.project)?e.project:[],...Array.isArray(e?.inherited)?e.inherited:[]]:function(e){if(!hl(e))throw new Error("技能列表响应必须是普通对象");if(!0!==e.success)throw new Error("string"==typeof e.message&&e.message?e.message:"技能列表响应未明确标记成功");if(!Array.isArray(e.skills))throw new Error("技能列表响应 skills 必须是数组");return e.skills}(e);return a===F.value&&l===ne.value&&(C.value=t,N.value=e.refresh||null,!0)}catch(t){return a!==F.value||l!==ne.value||e&&h.error("加载技能失败: "+(t?.message||String(t))),!1}finally{a===F.value&&l===ne.value&&(j.value=!1)}}async function $e(){if(Y.value&&se.value&&"claude"===ne.value){q.value=!0;try{const e=await Ce("skills");e.success?(h.success(`成功导入 ${e.imported} 个技能`),await Ue()):h.error(e.message||"导入失败")}catch(e){h.error("导入失败: "+e.message)}finally{q.value=!1}}}async function Le(e,a){if(!Y.value)return;if(!e.controlKey||e.protected||e.readonly||!1===e.managed||"project"===s.scope&&"project"!==e.sourceScope)return;if(a&&"approved"!==e.trust)return void h.warning("blocked"===e.trust?"该技能已被阻止":"该技能需要先审批");if("unsupported"===e.projection?.state)return void h.error("当前平台不支持安全投影,无法切换该项目技能");if(a&&!e.cached)return void h.warning("该技能尚无完整缓存,请先手动刷新远端");const l=e.controlKey;M.value[l]=!0;try{const t="project"===s.scope?await _e(s.projectPath,ne.value,l,a):await D(l,a,ne.value,ue.value);if("needs_approval"===t.status)return void h.warning("该技能需要先审批");if("blocked"===t.status)return void h.error("该技能已被阻止");if("unsupported"===t.status)return void h.error("当前平台不支持安全投影");if("conflict"===t.status)return void h.warning("目标 Skill 目录已被其他来源占用");if("projection_failed"===t.status)return void h.error(t.lastError||"Skill 投影失败");const i=C.value.find(e=>e.controlKey===l);i&&(i.enabled=t.enabled,i.installed=t.enabled,i.projection=t.projection||i.projection),h.success(a?`技能 "${e.name}" 已启用`:`技能 "${e.name}" 已关闭`)}catch(t){h.error("切换失败: "+(t.response?.data?.message||t.message))}finally{delete M.value[l]}}async function Te(e){if(!Y.value)return;if(!e.controlKey||!["pending","needs_review"].includes(e.trust))return;if("project"===s.scope&&"project"!==e.sourceScope)return;const a=e.controlKey;M.value[a]=!0;try{const l=await I(a,"approved",ne.value,ue.value),t=C.value.find(e=>e.controlKey===a);t&&(t.trust=l.trust),h.success(`技能 "${e.name}" 已批准,当前仍保持关闭`)}catch(l){h.error("审批失败: "+(l.response?.data?.message||l.message))}finally{delete M.value[a]}}async function Oe(){if(!Y.value||!re.value||H.value)return;const e=V.value,a=JSON.stringify({platform:ne.value,scope:s.scope||"user",projectPath:s.projectPath||""}),l=()=>e===V.value&&a===JSON.stringify({platform:ne.value,scope:s.scope||"user",projectPath:s.projectPath||""});H.value=!0;try{const e=ne.value,a=await W(e,ue.value);if(!l())return;N.value=a.task||null;let t=a.task;for(;t&&["queued","running"].includes(t.status);){await new Promise(e=>setTimeout(e,250));const e=await Q(t.id,{...ue.value,platform:ne.value});if(!l())return;t=e.task,N.value=t}if(!l())return;"failed"===t?.status?h.error(t.error||"远端刷新失败"):"partial"===t?.status?h.warning("远端刷新部分成功"):h.success("远端 Skill 刷新完成"),await Ue()}catch(t){l()&&h.error("刷新失败: "+(t.response?.data?.message||t.message))}finally{l()&&(H.value=!1)}}function Be(){ce.value&&(K.value+=1,B.value=!0)}async function Ke(e,a){if("omp"!==ne.value||!B.value||a!==K.value)return;const l=ne.value;B.value=!1;const t=await async function(e,a){return e(),a({notifyError:!1})}(()=>{},Ue);l===ne.value&&a===K.value&&(t?h.success("技能扫描设置已保存"):h.error("设置已保存,但技能列表刷新失败"))}function Ge(e){G.value=e,T.value=!0}return o(()=>{s.inDrawer&&!s.drawerVisible||Ue()}),u(()=>s.drawerVisible,e=>{e&&Ue()}),u([()=>ne.value,()=>s.scope,()=>s.projectPath],([e])=>{V.value+=1,H.value=!1,N.value=null,K.value+=1,gl(e)||(B.value=!1),Ue()}),(o,u)=>(n(),w("div",{class:m(["skills-panel asset-panel",{"in-drawer":e.inDrawer}])},[e.inDrawer?a("",!0):(n(),w("div",zl,[_("div",Ul,[e.hideBack?a("",!0):(n(),r(b(U),{key:0,text:"",onClick:u[0]||(u[0]=e=>o.$emit("back")),class:"back-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(oe))]),_:1})]),_:1})),_("div",$l,[_("div",Ll,[u[12]||(u[12]=_("span",{class:"asset-title"},"技能管理",-1)),_("span",Tl,c(ye.value),1)]),u[13]||(u[13]=_("div",{class:"asset-subtitle"},"缓存并控制当前平台可用的技能",-1))])]),Y.value?(n(),w("div",Ol,[le.value?(n(),r(b(U),{key:0,text:"",focusable:!1,onClick:u[1]||(u[1]=e=>$.value=!0),class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(de))]),_:1})]),default:p(()=>[u[14]||(u[14]=l(" 创建 ",-1))]),_:1})):a("",!0),te.value?(n(),r(b(U),{key:1,text:"",focusable:!1,onClick:u[2]||(u[2]=e=>x.value=!0),class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(fe))]),_:1})]),default:p(()=>[u[15]||(u[15]=l(" 仓库 ",-1))]),_:1})):a("",!0),se.value?(n(),r(b(U),{key:2,text:"",focusable:!1,onClick:$e,loading:q.value,disabled:"claude"!==ne.value,class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(ge))]),_:1})]),default:p(()=>[u[16]||(u[16]=l(" 导入 ",-1))]),_:1},8,["loading","disabled"])):a("",!0),ce.value?(n(),r(b(U),{key:3,text:"","aria-label":"OMP 技能设置",onClick:Be,class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(he))]),_:1})]),default:p(()=>[u[17]||(u[17]=l(" 设置 ",-1))]),_:1})):a("",!0),re.value?(n(),r(b(U),{key:4,text:"",focusable:!1,onClick:Oe,loading:H.value||j.value,class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(pe))]),_:1})]),default:p(()=>[u[18]||(u[18]=l(" 刷新远端 ",-1))]),_:1},8,["loading"])):a("",!0)])):a("",!0)])),e.inDrawer?(n(),w("div",Bl,[Y.value?(n(),w("div",Kl,[le.value?(n(),r(b(U),{key:0,text:"",focusable:!1,onClick:u[3]||(u[3]=e=>$.value=!0),class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(de))]),_:1})]),default:p(()=>[u[19]||(u[19]=l(" 创建 ",-1))]),_:1})):a("",!0),te.value?(n(),r(b(U),{key:1,text:"",focusable:!1,onClick:u[4]||(u[4]=e=>x.value=!0),class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(fe))]),_:1})]),default:p(()=>[u[20]||(u[20]=l(" 仓库 ",-1))]),_:1})):a("",!0),se.value?(n(),r(b(U),{key:2,text:"",focusable:!1,onClick:$e,loading:q.value,disabled:"claude"!==ne.value,class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(ge))]),_:1})]),default:p(()=>[u[21]||(u[21]=l(" 导入 ",-1))]),_:1},8,["loading","disabled"])):a("",!0),ce.value?(n(),r(b(U),{key:3,text:"","aria-label":"OMP 技能设置",onClick:Be,class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(he))]),_:1})]),default:p(()=>[u[22]||(u[22]=l(" 设置 ",-1))]),_:1})):a("",!0),re.value?(n(),r(b(U),{key:4,text:"",focusable:!1,onClick:Oe,loading:H.value||j.value,class:"action-btn"},{icon:p(()=>[i(b(z),null,{default:p(()=>[i(b(pe))]),_:1})]),default:p(()=>[u[23]||(u[23]=l(" 刷新远端 ",-1))]),_:1},8,["loading"])):a("",!0)])):a("",!0)])):a("",!0),_("div",Gl,[_("span",Al,[u[24]||(u[24]=_("span",{class:"asset-summary-label"},"全部",-1)),_("span",Ml,c(C.value.length),1)]),_("span",El,[u[25]||(u[25]=_("span",{class:"asset-summary-label"},"已启用",-1)),_("span",Hl,c(je.value),1)]),_("span",Il,[u[26]||(u[26]=_("span",{class:"asset-summary-label"},"待审批",-1)),_("span",Dl,c(Se.value),1)])]),_("div",Rl,[i(b(ae),{value:P.value,"onUpdate:value":u[5]||(u[5]=e=>P.value=e),placeholder:"搜索技能名称或描述",clearable:"",size:"small",class:"asset-search"},{prefix:p(()=>[i(b(z),null,{default:p(()=>[i(b(be))]),_:1})]),_:1},8,["value"]),i(b(L),{value:S.value,"onUpdate:value":u[6]||(u[6]=e=>S.value=e),options:ke,size:"small",class:"asset-filter"},null,8,["value"])]),_("div",Nl,[i(b(A),{show:j.value},{default:p(()=>[0!==xe.value.length||j.value?a("",!0):(n(),w("div",ql,[i(b(R),{description:ze.value},{icon:p(()=>[i(b(z),{size:"48",color:"var(--text-quaternary)"},{default:p(()=>[i(b(me))]),_:1})]),extra:p(()=>[Y.value&&te.value&&0===C.value.length?(n(),r(b(U),{key:0,size:"small",onClick:u[7]||(u[7]=e=>x.value=!0)},{default:p(()=>[...u[27]||(u[27]=[l("配置仓库源",-1)])]),_:1})):a("",!0)]),_:1},8,["description"])])),_("div",Fl,[(n(!0),w(f,null,t(xe.value,e=>(n(),r(da,{key:e.controlKey||e.key,skill:e,toggling:!!M.value[e.controlKey||e.key],"panel-scope":s.scope,onClick:Ge,onToggle:Le,onApprove:Te},null,8,["skill","toggling","panel-scope"]))),128))])]),_:1},8,["show"])]),re.value?(n(),w("div",Vl,[i(b(z),{size:"14",class:"asset-info-icon"},{default:p(()=>[i(b(ve))]),_:1}),_("span",null,"开关变更后需重启 "+c(ye.value)+" 生效;远端刷新只在手动点击后执行",1)])):a("",!0),Pe.value?(n(),w("div",Wl,[l(" 刷新任务:"+c(Pe.value)+" ",1),void 0!==N.value?.fetchedSkills?(n(),w("span",Jl," · 已处理 "+c(N.value.fetchedSkills)+" 个 Skill",1)):a("",!0),N.value?.failedRepos?.length?(n(),w("span",Zl," · 失败仓库 "+c(N.value.failedRepos.length),1)):a("",!0)])):a("",!0),i(Ha,{visible:x.value,"onUpdate:visible":u[8]||(u[8]=e=>x.value=e),platform:ne.value,onUpdated:Ue},null,8,["visible","platform"]),i(Ja,{visible:$.value,"onUpdate:visible":u[9]||(u[9]=e=>$.value=e),platform:ne.value,scope:s.scope,"project-path":s.projectPath,onCreated:Ue},null,8,["visible","platform","scope","project-path"]),i(yl,{visible:T.value,"onUpdate:visible":u[10]||(u[10]=e=>T.value=e),skill:G.value,platform:ne.value,scope:s.scope,"project-path":s.projectPath,onUpdated:Ue},null,8,["visible","skill","platform","scope","project-path"]),i(xl,{visible:B.value,"onUpdate:visible":u[11]||(u[11]=e=>B.value=e),"operation-token":K.value,onSaved:Ke},null,8,["visible","operation-token"])],2))}},[["__scopeId","data-v-efda7d55"]]);export{Ql as t};
|