coding-tool-x 3.8.7 → 3.8.8

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.
Files changed (133) hide show
  1. package/dist/web/assets/{AgentsDrawer-C7ePByZx.js → AgentsDrawer-DRQuwi0m.js} +1 -1
  2. package/dist/web/assets/Analytics-Cf5KwEdj.js +1 -0
  3. package/dist/web/assets/AssetPathField-DyniM0pF.js +1 -0
  4. package/dist/web/assets/{ChatHistoryDrawer-Ccl4rhdz.js → ChatHistoryDrawer-CrfS0KYV.js} +1 -1
  5. package/dist/web/assets/{CollapseItem-MxG_UD4o.js → CollapseItem-ClMsJuUu.js} +1 -1
  6. package/dist/web/assets/{CommandsDrawer-DWbaxHRZ.js → CommandsDrawer-CzHelf56.js} +1 -1
  7. package/dist/web/assets/ConfigExportDrawer-BEZ8wTby.js +1 -0
  8. package/dist/web/assets/ConfigTemplates-Crg3xWe5.js +1 -0
  9. package/dist/web/assets/{ConfigTemplatesDrawer-CKMFsfEF.js → ConfigTemplatesDrawer-BqM32Im7.js} +1 -1
  10. package/dist/web/assets/{ConfigTemplatesPanel-Cvbnkvpt.js → ConfigTemplatesPanel-lTdutC8H.js} +1 -1
  11. package/dist/web/assets/{Divider-D28g1gwj.js → Divider-DsdbkHrG.js} +1 -1
  12. package/dist/web/assets/{FavoritesDrawer-DA-dR_vP.js → FavoritesDrawer-DDyWUBJR.js} +1 -1
  13. package/dist/web/assets/Forward-DLCL7aMY.js +1 -0
  14. package/dist/web/assets/{GatewayConvertDrawer-402_raGb.js → GatewayConvertDrawer-Rigtt_5J.js} +1 -1
  15. package/dist/web/assets/Home-tCSKmSHV.js +1 -0
  16. package/dist/web/assets/{MarkdownEditor-BvkDECwH.js → MarkdownEditor-BMMUufSc.js} +1 -1
  17. package/dist/web/assets/McpDrawer-CmE-d7VW.js +1 -0
  18. package/dist/web/assets/{McpFormDrawer-DPMnyt5L.js → McpFormDrawer-ByvS18od.js} +1 -1
  19. package/dist/web/assets/{PluginManager-FKVeugr4.js → PluginManager-C4kJlpVX.js} +1 -1
  20. package/dist/web/assets/{PluginsDrawer-MvM1R55d.js → PluginsDrawer-05R4k15x.js} +1 -1
  21. package/dist/web/assets/PluginsPanel-BCoEs7Og.js +1 -0
  22. package/dist/web/assets/PluginsPanel-CzGMK-Ap.css +1 -0
  23. package/dist/web/assets/ProjectList-BJt1OIaI.js +1 -0
  24. package/dist/web/assets/ProjectList-DG3yu8xZ.css +1 -0
  25. package/dist/web/assets/PromptsDrawer-DnwBf_oW.js +1 -0
  26. package/dist/web/assets/RecentSessionsDrawer-B7d-38wH.js +1 -0
  27. package/dist/web/assets/RecentSessionsDrawer-yrAD4p1A.css +1 -0
  28. package/dist/web/assets/SessionCard-BUgjHQwX.js +1 -0
  29. package/dist/web/assets/SessionList-B-bXZRFk.js +1 -0
  30. package/dist/web/assets/SessionList-qG_XpPBJ.css +1 -0
  31. package/dist/web/assets/{SettingsDrawer-lMjttbkD.js → SettingsDrawer-BITzjQLl.js} +1 -1
  32. package/dist/web/assets/SkillManager-D9jkNuRM.js +1 -0
  33. package/dist/web/assets/{SkillsDrawer-DF6JsSyj.js → SkillsDrawer-0Z4IefxC.js} +1 -1
  34. package/dist/web/assets/SkillsPanel-BKIVOj7n.js +1 -0
  35. package/dist/web/assets/{SkillsPanel-B3Nm5j32.css → SkillsPanel-C4ke56nF.css} +1 -1
  36. package/dist/web/assets/{SpeedTestDrawer-BaZkZqPP.js → SpeedTestDrawer-Bx1bYf5i.js} +1 -1
  37. package/dist/web/assets/Upload-CzC4rGI4.js +1 -0
  38. package/dist/web/assets/{WorkspaceDrawer-BFSwZ5yU.js → WorkspaceDrawer-eujtWpoq.js} +1 -1
  39. package/dist/web/assets/{WorkspaceManager-BHL1uYct.js → WorkspaceManager-CQ-8Ej68.js} +1 -1
  40. package/dist/web/assets/{WorkspacePanel-B5PooBtg.js → WorkspacePanel-Cql5qE2R.js} +1 -1
  41. package/dist/web/assets/headers-BqDmkMjy.js +1 -0
  42. package/dist/web/assets/{icons-B2Vg-IOC.js → icons-DmFe4b5j.js} +1 -1
  43. package/dist/web/assets/index-Cmmwj3Fx.js +2 -0
  44. package/dist/web/assets/{index-BohDDAy_.css → index-Cnbe696C.css} +1 -1
  45. package/dist/web/assets/{light-Cp0t7v32.js → light-0eavxNvt.js} +1 -1
  46. package/dist/web/assets/platforms-BmzzwnSw.js +1 -0
  47. package/dist/web/assets/platforms-DWXgmy2w.js +1 -0
  48. package/dist/web/assets/session-visibility-BAmxh3cK.js +1 -0
  49. package/dist/web/assets/sessions-D4yQtfKb.js +1 -0
  50. package/dist/web/assets/sessions-DqlbocLJ.js +1 -0
  51. package/dist/web/assets/use-message-DqCwefG6.js +1 -0
  52. package/dist/web/assets/{useResponsiveDrawer-D-DDpbnI.js → useResponsiveDrawer-DZd5rNk5.js} +1 -1
  53. package/dist/web/index.html +7 -7
  54. package/package.json +1 -1
  55. package/src/commands/search.js +17 -2
  56. package/src/config/paths.js +2 -0
  57. package/src/platforms/driver-registry.js +9 -1
  58. package/src/platforms/drivers/claude/session-history-adapter.js +72 -1
  59. package/src/platforms/drivers/claude/sessions-implementation.js +49 -7
  60. package/src/platforms/drivers/claude/sessions.js +30 -6
  61. package/src/platforms/drivers/codex/parser.js +57 -1
  62. package/src/platforms/drivers/codex/session-history-adapter.js +8 -2
  63. package/src/platforms/drivers/codex/sessions-implementation.js +25 -3
  64. package/src/platforms/drivers/codex/sessions.js +18 -1
  65. package/src/platforms/drivers/dsh/api-operations.js +396 -0
  66. package/src/platforms/drivers/dsh/channels-implementation.js +458 -0
  67. package/src/platforms/drivers/dsh/channels.js +191 -0
  68. package/src/platforms/drivers/dsh/common.js +571 -0
  69. package/src/platforms/drivers/dsh/native-config.js +93 -0
  70. package/src/platforms/drivers/dsh/native-logs.js +116 -0
  71. package/src/platforms/drivers/dsh/plugin-manager.js +117 -0
  72. package/src/platforms/drivers/dsh/projects.js +23 -0
  73. package/src/platforms/drivers/dsh/proxy-implementation.js +260 -0
  74. package/src/platforms/drivers/dsh/proxy.js +23 -0
  75. package/src/platforms/drivers/dsh/resources.js +346 -0
  76. package/src/platforms/drivers/dsh/sessions.js +587 -0
  77. package/src/platforms/drivers/dsh/statistics-implementation.js +238 -0
  78. package/src/platforms/drivers/dsh/statistics.js +24 -0
  79. package/src/platforms/drivers/gemini/session-history-adapter.js +49 -1
  80. package/src/platforms/drivers/gemini/sessions-implementation.js +46 -1
  81. package/src/platforms/drivers/gemini/sessions.js +2 -1
  82. package/src/platforms/drivers/omp/session-history-adapter.js +42 -1
  83. package/src/platforms/drivers/omp/sessions-implementation.js +51 -3
  84. package/src/platforms/drivers/omp/sessions.js +33 -2
  85. package/src/platforms/drivers/opencode/sessions-implementation.js +89 -9
  86. package/src/platforms/drivers/opencode/sessions.js +37 -1
  87. package/src/platforms/manifest-schema.js +43 -3
  88. package/src/platforms/manifests/dsh.json +542 -0
  89. package/src/platforms/path-resolver.js +2 -0
  90. package/src/platforms/platform-path-context.js +12 -2
  91. package/src/platforms/registry.js +16 -1
  92. package/src/platforms/runtime.js +5 -0
  93. package/src/platforms/session-history-adapters.js +1 -0
  94. package/src/server/api/platform-api-config.js +23 -2
  95. package/src/server/api/platform-route-factory.js +9 -2
  96. package/src/server/api/platforms.js +19 -1
  97. package/src/server/api/plugins.js +108 -13
  98. package/src/server/services/config-registry-service.js +10 -1
  99. package/src/server/services/config-templates-service.js +1 -0
  100. package/src/server/services/plugins-service.js +474 -103
  101. package/src/server/services/session-history-index.js +900 -140
  102. package/src/server/services/session-history-worker.js +3 -1
  103. package/src/server/services/skill-service.js +214 -7
  104. package/src/server/services/usage-log-utils.js +1 -0
  105. package/src/server/services/workspace-service.js +39 -10
  106. package/src/shared/driver-factories/api.js +22 -6
  107. package/src/shared/driver-factories/projects.js +8 -0
  108. package/dist/web/assets/Analytics-BVG6ehFv.js +0 -1
  109. package/dist/web/assets/AssetPathField-BZI9NvEr.js +0 -1
  110. package/dist/web/assets/ConfigExportDrawer-DrawKwxE.js +0 -1
  111. package/dist/web/assets/ConfigTemplates-AiRPv2cd.js +0 -1
  112. package/dist/web/assets/Home-CTF8ZWKW.js +0 -1
  113. package/dist/web/assets/McpDrawer-DZGHkuDm.js +0 -1
  114. package/dist/web/assets/PluginsPanel-CKuBs38B.js +0 -1
  115. package/dist/web/assets/PluginsPanel-D6ZqITcR.css +0 -1
  116. package/dist/web/assets/ProjectList-677RLZ8O.css +0 -1
  117. package/dist/web/assets/ProjectList-tsjwjXV1.js +0 -1
  118. package/dist/web/assets/PromptsDrawer-B-X9ci8n.js +0 -1
  119. package/dist/web/assets/RecentSessionsDrawer-CKFsOYDM.css +0 -1
  120. package/dist/web/assets/RecentSessionsDrawer-wLktMF_c.js +0 -1
  121. package/dist/web/assets/SessionCard-DkJPy0TY.js +0 -1
  122. package/dist/web/assets/SessionList-BpYRz1cX.css +0 -1
  123. package/dist/web/assets/SessionList-Gzhh4FOZ.js +0 -1
  124. package/dist/web/assets/SkillManager-CzFxWxx-.js +0 -1
  125. package/dist/web/assets/SkillsPanel--lLEts9y.js +0 -1
  126. package/dist/web/assets/Upload-BEQ-3Kqq.js +0 -1
  127. package/dist/web/assets/headers-cf-QapUq.js +0 -1
  128. package/dist/web/assets/index-BFInlZGI.js +0 -2
  129. package/dist/web/assets/platforms-CBkB45JP.js +0 -1
  130. package/dist/web/assets/platforms-FTpjxAT6.js +0 -1
  131. package/dist/web/assets/sessions-Cmy31slD.js +0 -1
  132. package/dist/web/assets/sessions-yC_oVVh8.js +0 -1
  133. package/dist/web/assets/use-message-DoLM8C1C.js +0 -1
@@ -1 +0,0 @@
1
- import{Ct as t,D as e,Dt as n,Lt as a,N as r,Pt as o,Qt as i,Tt as s,Xt as l,Yt as d,bn as b,dn as c,dt as p,gn as f,gt as u,hn as v,ht as g,i as h,it as x,j as m,ln as y,s as w,st as $,vn as C,xn as z,yn as R}from"./_plugin-vue_export-helper-BeLZJZij.js";import{A as S,C as T,D as P,F as W,G as j,I as _,M as L,N as A,O as k,Q as B,V as E,W as N,Z as O,_t as H,b as D,dt as F,et as I,f as V,g as M,m as X,mt as U,st as q,tt as G,u as Y,w as Q,x as Z,y as J}from"./vue-vendor-BqZbbXHA.js";import{n as K}from"./client-UDwXBP9i.js";import{at as tt,tt as et}from"./icons-B2Vg-IOC.js";import{h as nt,y as at}from"./use-message-DoLM8C1C.js";import{$ as rt,At as ot,N as it,O as st,Tt as lt,W as dt,k as bt,vt as ct,wt as pt,yt as ft}from"./index-BFInlZGI.js";import{t as ut}from"./clipboard-B46yyoz_.js";var vt=pt(".v-x-scroll",{overflow:"auto",scrollbarWidth:"none"},[pt("&::-webkit-scrollbar",{width:0,height:0})]),gt=S({name:"XScroll",props:{disabled:Boolean,onScroll:Function},setup(){const t=q(null);const e=a();return vt.mount({id:"vueuc/x-scroll",head:!0,anchorMetaName:lt,ssr:e}),Object.assign({selfRef:t,handleWheel:function(t){t.currentTarget.offsetWidth<t.currentTarget.scrollWidth&&0!==t.deltaY&&(t.currentTarget.scrollLeft+=t.deltaY+t.deltaX,t.preventDefault())}},{scrollTo(...e){var n;null===(n=t.value)||void 0===n||n.scrollTo(...e)}})},render(){return L("div",{ref:"selfRef",onScroll:this.onScroll,onWheel:this.disabled?void 0:this.handleWheel,class:"v-x-scroll"},this.$slots)}}),ht=/\s/;var xt=/^\s+/;function mt(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&ht.test(t.charAt(e)););return e}(t)+1).replace(xt,""):t}var yt=/^[-+]0x[0-9a-f]+$/i,wt=/^0b[01]+$/i,$t=/^0o[0-7]+$/i,Ct=parseInt;function zt(t){if("number"==typeof t)return t;if($(t))return NaN;if(x(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=x(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=mt(t);var n=wt.test(t);return n||$t.test(t)?Ct(t.slice(2),n?2:8):yt.test(t)?NaN:+t}var Rt=function(){return p.Date.now()},St=Math.max,Tt=Math.min;function Pt(t,e,n){var a,r,o,i,s,l,d=0,b=!1,c=!1,p=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function f(e){var n=a,o=r;return a=r=void 0,d=e,i=t.apply(o,n)}function u(t){var n=t-l;return void 0===l||n>=e||n<0||c&&t-d>=o}function v(){var t=Rt();if(u(t))return g(t);s=setTimeout(v,function(t){var n=e-(t-l);return c?Tt(n,o-(t-d)):n}(t))}function g(t){return s=void 0,p&&a?f(t):(a=r=void 0,i)}function h(){var t=Rt(),n=u(t);if(a=arguments,r=this,l=t,n){if(void 0===s)return function(t){return d=t,s=setTimeout(v,e),b?f(t):i}(l);if(c)return clearTimeout(s),s=setTimeout(v,e),f(l)}return void 0===s&&(s=setTimeout(v,e)),i}return e=zt(e)||0,x(n)&&(b=!!n.leading,o=(c="maxWait"in n)?St(zt(n.maxWait)||0,e):o,p="trailing"in n?!!n.trailing:p),h.cancel=function(){void 0!==s&&clearTimeout(s),d=0,a=l=r=s=void 0},h.flush=function(){return void 0===s?i:g(Rt())},h}var Wt=d("n-tabs"),jt={tab:[String,Number,Object,Function],name:{type:[String,Number],required:!0},disabled:Boolean,displayDirective:{type:String,default:"if"},closable:{type:Boolean,default:void 0},tabProps:Object,label:[String,Number,Object,Function]},_t=S({__TAB_PANE__:!0,name:"TabPane",alias:["TabPanel"],props:jt,slots:Object,setup(t){const e=A(Wt,null);return e||n("tab-pane","`n-tab-pane` must be placed inside `n-tabs`."),{style:e.paneStyleRef,class:e.paneClassRef,mergedClsPrefix:e.mergedClsPrefixRef}},render(){return L("div",{class:[`${this.mergedClsPrefix}-tab-pane`,this.class],style:this.style},this.$slots)}}),Lt=S({__TAB__:!0,inheritAttrs:!1,name:"Tab",props:Object.assign({internalLeftPadded:Boolean,internalAddable:Boolean,internalCreatedByPane:Boolean},ft(jt,["displayDirective"])),setup(t){const{mergedClsPrefixRef:e,valueRef:n,typeRef:a,closableRef:r,tabStyleRef:o,addTabStyleRef:i,tabClassRef:s,addTabClassRef:l,tabChangeIdRef:d,onBeforeLeaveRef:b,triggerRef:c,handleAdd:p,activateTab:f,handleClose:u}=A(Wt);return{trigger:c,mergedClosable:D(()=>{if(t.internalAddable)return!1;const{closable:e}=t;return void 0===e?r.value:e}),style:o,addStyle:i,tabClass:s,addTabClass:l,clsPrefix:e,value:n,type:a,handleClose(e){e.stopPropagation(),t.disabled||u(t.name)},activateTab(){if(t.disabled)return;if(t.internalAddable)return void p();const{name:e}=t,a=++d.id;if(e!==n.value){const{value:r}=b;r?Promise.resolve(r(t.name,n.value)).then(t=>{t&&d.id===a&&f(e)}):f(e)}}}},render(){const{internalAddable:t,clsPrefix:n,name:a,disabled:r,label:o,tab:i,value:s,mergedClosable:l,trigger:d,$slots:{default:b}}=this,c=null!=o?o:i;return L("div",{class:`${n}-tabs-tab-wrapper`},this.internalLeftPadded?L("div",{class:`${n}-tabs-tab-pad`}):null,L("div",Object.assign({key:a,"data-name":a,"data-disabled":!!r||void 0},W({class:[`${n}-tabs-tab`,s===a&&`${n}-tabs-tab--active`,r&&`${n}-tabs-tab--disabled`,l&&`${n}-tabs-tab--closable`,t&&`${n}-tabs-tab--addable`,t?this.addTabClass:this.tabClass],onClick:"click"===d?this.activateTab:void 0,onMouseenter:"hover"===d?this.activateTab:void 0,style:t?this.addStyle:this.style},this.internalCreatedByPane?this.tabProps||{}:this.$attrs)),L("span",{class:`${n}-tabs-tab__label`},t?L(M,null,L("div",{class:`${n}-tabs-tab__height-placeholder`}," "),L(m,{clsPrefix:n},{default:()=>L(ct,null)})):b?b():"object"==typeof c?c:nt(null!=c?c:a)),l&&"card"===this.type?L(e,{clsPrefix:n,class:`${n}-tabs-tab__close`,onClick:this.handleClose,disabled:r}):null))}}),At=f("tabs","\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n transition:\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n",[R("segment-type",[f("tabs-rail",[v("&.transition-disabled",[f("tabs-capsule","\n transition: none;\n ")])])]),R("top",[f("tab-pane","\n padding: var(--n-pane-padding-top) var(--n-pane-padding-right) var(--n-pane-padding-bottom) var(--n-pane-padding-left);\n ")]),R("left",[f("tab-pane","\n padding: var(--n-pane-padding-right) var(--n-pane-padding-bottom) var(--n-pane-padding-left) var(--n-pane-padding-top);\n ")]),R("left, right","\n flex-direction: row;\n ",[f("tabs-bar","\n width: 2px;\n right: 0;\n transition:\n top .2s var(--n-bezier),\n max-height .2s var(--n-bezier),\n background-color .3s var(--n-bezier);\n "),f("tabs-tab","\n padding: var(--n-tab-padding-vertical); \n ")]),R("right","\n flex-direction: row-reverse;\n ",[f("tab-pane","\n padding: var(--n-pane-padding-left) var(--n-pane-padding-top) var(--n-pane-padding-right) var(--n-pane-padding-bottom);\n "),f("tabs-bar","\n left: 0;\n ")]),R("bottom","\n flex-direction: column-reverse;\n justify-content: flex-end;\n ",[f("tab-pane","\n padding: var(--n-pane-padding-bottom) var(--n-pane-padding-right) var(--n-pane-padding-top) var(--n-pane-padding-left);\n "),f("tabs-bar","\n top: 0;\n ")]),f("tabs-rail","\n position: relative;\n padding: 3px;\n border-radius: var(--n-tab-border-radius);\n width: 100%;\n background-color: var(--n-color-segment);\n transition: background-color .3s var(--n-bezier);\n display: flex;\n align-items: center;\n ",[f("tabs-capsule","\n border-radius: var(--n-tab-border-radius);\n position: absolute;\n pointer-events: none;\n background-color: var(--n-tab-color-segment);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .08);\n transition: transform 0.3s var(--n-bezier);\n "),f("tabs-tab-wrapper","\n flex-basis: 0;\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n ",[f("tabs-tab","\n overflow: hidden;\n border-radius: var(--n-tab-border-radius);\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n ",[R("active","\n font-weight: var(--n-font-weight-strong);\n color: var(--n-tab-text-color-active);\n "),v("&:hover","\n color: var(--n-tab-text-color-hover);\n ")])])]),R("flex",[f("tabs-nav","\n width: 100%;\n position: relative;\n ",[f("tabs-wrapper","\n width: 100%;\n ",[f("tabs-tab","\n margin-right: 0;\n ")])])]),f("tabs-nav","\n box-sizing: border-box;\n line-height: 1.5;\n display: flex;\n transition: border-color .3s var(--n-bezier);\n ",[C("prefix, suffix","\n display: flex;\n align-items: center;\n "),C("prefix","padding-right: 16px;"),C("suffix","padding-left: 16px;")]),R("top, bottom",[v(">",[f("tabs-nav",[f("tabs-nav-scroll-wrapper",[v("&::before","\n top: 0;\n bottom: 0;\n left: 0;\n width: 20px;\n "),v("&::after","\n top: 0;\n bottom: 0;\n right: 0;\n width: 20px;\n "),R("shadow-start",[v("&::before","\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, .12);\n ")]),R("shadow-end",[v("&::after","\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, .12);\n ")])])])])]),R("left, right",[f("tabs-nav-scroll-content","\n flex-direction: column;\n "),v(">",[f("tabs-nav",[f("tabs-nav-scroll-wrapper",[v("&::before","\n top: 0;\n left: 0;\n right: 0;\n height: 20px;\n "),v("&::after","\n bottom: 0;\n left: 0;\n right: 0;\n height: 20px;\n "),R("shadow-start",[v("&::before","\n box-shadow: inset 0 10px 8px -8px rgba(0, 0, 0, .12);\n ")]),R("shadow-end",[v("&::after","\n box-shadow: inset 0 -10px 8px -8px rgba(0, 0, 0, .12);\n ")])])])])]),f("tabs-nav-scroll-wrapper","\n flex: 1;\n position: relative;\n overflow: hidden;\n ",[f("tabs-nav-y-scroll","\n height: 100%;\n width: 100%;\n overflow-y: auto; \n scrollbar-width: none;\n ",[v("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb","\n width: 0;\n height: 0;\n display: none;\n ")]),v("&::before, &::after",'\n transition: box-shadow .3s var(--n-bezier);\n pointer-events: none;\n content: "";\n position: absolute;\n z-index: 1;\n ')]),f("tabs-nav-scroll-content","\n display: flex;\n position: relative;\n min-width: 100%;\n min-height: 100%;\n width: fit-content;\n box-sizing: border-box;\n "),f("tabs-wrapper","\n display: inline-flex;\n flex-wrap: nowrap;\n position: relative;\n "),f("tabs-tab-wrapper","\n display: flex;\n flex-wrap: nowrap;\n flex-shrink: 0;\n flex-grow: 0;\n "),f("tabs-tab","\n cursor: pointer;\n white-space: nowrap;\n flex-wrap: nowrap;\n display: inline-flex;\n align-items: center;\n color: var(--n-tab-text-color);\n font-size: var(--n-tab-font-size);\n background-clip: padding-box;\n padding: var(--n-tab-padding);\n transition:\n box-shadow .3s var(--n-bezier),\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n ",[R("disabled",{cursor:"not-allowed"}),C("close","\n margin-left: 6px;\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n "),C("label","\n display: flex;\n align-items: center;\n z-index: 1;\n ")]),f("tabs-bar","\n position: absolute;\n bottom: 0;\n height: 2px;\n border-radius: 1px;\n background-color: var(--n-bar-color);\n transition:\n left .2s var(--n-bezier),\n max-width .2s var(--n-bezier),\n opacity .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n ",[v("&.transition-disabled","\n transition: none;\n "),R("disabled","\n background-color: var(--n-tab-text-color-disabled)\n ")]),f("tabs-pane-wrapper","\n position: relative;\n overflow: hidden;\n transition: max-height .2s var(--n-bezier);\n "),f("tab-pane","\n color: var(--n-pane-text-color);\n width: 100%;\n transition:\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n opacity .2s var(--n-bezier);\n left: 0;\n right: 0;\n top: 0;\n ",[v("&.next-transition-leave-active, &.prev-transition-leave-active, &.next-transition-enter-active, &.prev-transition-enter-active","\n transition:\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n transform .2s var(--n-bezier),\n opacity .2s var(--n-bezier);\n "),v("&.next-transition-leave-active, &.prev-transition-leave-active","\n position: absolute;\n "),v("&.next-transition-enter-from, &.prev-transition-leave-to","\n transform: translateX(32px);\n opacity: 0;\n "),v("&.next-transition-leave-to, &.prev-transition-enter-from","\n transform: translateX(-32px);\n opacity: 0;\n "),v("&.next-transition-leave-from, &.next-transition-enter-to, &.prev-transition-leave-from, &.prev-transition-enter-to","\n transform: translateX(0);\n opacity: 1;\n ")]),f("tabs-tab-pad","\n box-sizing: border-box;\n width: var(--n-tab-gap);\n flex-grow: 0;\n flex-shrink: 0;\n "),R("line-type, bar-type",[f("tabs-tab","\n font-weight: var(--n-tab-font-weight);\n box-sizing: border-box;\n vertical-align: bottom;\n ",[v("&:hover",{color:"var(--n-tab-text-color-hover)"}),R("active","\n color: var(--n-tab-text-color-active);\n font-weight: var(--n-tab-font-weight-active);\n "),R("disabled",{color:"var(--n-tab-text-color-disabled)"})])]),f("tabs-nav",[R("line-type",[R("top",[C("prefix, suffix","\n border-bottom: 1px solid var(--n-tab-border-color);\n "),f("tabs-nav-scroll-content","\n border-bottom: 1px solid var(--n-tab-border-color);\n "),f("tabs-bar","\n bottom: -1px;\n ")]),R("left",[C("prefix, suffix","\n border-right: 1px solid var(--n-tab-border-color);\n "),f("tabs-nav-scroll-content","\n border-right: 1px solid var(--n-tab-border-color);\n "),f("tabs-bar","\n right: -1px;\n ")]),R("right",[C("prefix, suffix","\n border-left: 1px solid var(--n-tab-border-color);\n "),f("tabs-nav-scroll-content","\n border-left: 1px solid var(--n-tab-border-color);\n "),f("tabs-bar","\n left: -1px;\n ")]),R("bottom",[C("prefix, suffix","\n border-top: 1px solid var(--n-tab-border-color);\n "),f("tabs-nav-scroll-content","\n border-top: 1px solid var(--n-tab-border-color);\n "),f("tabs-bar","\n top: -1px;\n ")]),C("prefix, suffix","\n transition: border-color .3s var(--n-bezier);\n "),f("tabs-nav-scroll-content","\n transition: border-color .3s var(--n-bezier);\n "),f("tabs-bar","\n border-radius: 0;\n ")]),R("card-type",[C("prefix, suffix","\n transition: border-color .3s var(--n-bezier);\n "),f("tabs-pad","\n flex-grow: 1;\n transition: border-color .3s var(--n-bezier);\n "),f("tabs-tab-pad","\n transition: border-color .3s var(--n-bezier);\n "),f("tabs-tab","\n font-weight: var(--n-tab-font-weight);\n border: 1px solid var(--n-tab-border-color);\n background-color: var(--n-tab-color);\n box-sizing: border-box;\n position: relative;\n vertical-align: bottom;\n display: flex;\n justify-content: space-between;\n font-size: var(--n-tab-font-size);\n color: var(--n-tab-text-color);\n ",[R("addable","\n padding-left: 8px;\n padding-right: 8px;\n font-size: 16px;\n justify-content: center;\n ",[C("height-placeholder","\n width: 0;\n font-size: var(--n-tab-font-size);\n "),b("disabled",[v("&:hover","\n color: var(--n-tab-text-color-hover);\n ")])]),R("closable","padding-right: 8px;"),R("active","\n background-color: #0000;\n font-weight: var(--n-tab-font-weight-active);\n color: var(--n-tab-text-color-active);\n "),R("disabled","color: var(--n-tab-text-color-disabled);")])]),R("left, right","\n flex-direction: column; \n ",[C("prefix, suffix","\n padding: var(--n-tab-padding-vertical);\n "),f("tabs-wrapper","\n flex-direction: column;\n "),f("tabs-tab-wrapper","\n flex-direction: column;\n ",[f("tabs-tab-pad","\n height: var(--n-tab-gap-vertical);\n width: 100%;\n ")])]),R("top",[R("card-type",[f("tabs-scroll-padding","border-bottom: 1px solid var(--n-tab-border-color);"),C("prefix, suffix","\n border-bottom: 1px solid var(--n-tab-border-color);\n "),f("tabs-tab","\n border-top-left-radius: var(--n-tab-border-radius);\n border-top-right-radius: var(--n-tab-border-radius);\n ",[R("active","\n border-bottom: 1px solid #0000;\n ")]),f("tabs-tab-pad","\n border-bottom: 1px solid var(--n-tab-border-color);\n "),f("tabs-pad","\n border-bottom: 1px solid var(--n-tab-border-color);\n ")])]),R("left",[R("card-type",[f("tabs-scroll-padding","border-right: 1px solid var(--n-tab-border-color);"),C("prefix, suffix","\n border-right: 1px solid var(--n-tab-border-color);\n "),f("tabs-tab","\n border-top-left-radius: var(--n-tab-border-radius);\n border-bottom-left-radius: var(--n-tab-border-radius);\n ",[R("active","\n border-right: 1px solid #0000;\n ")]),f("tabs-tab-pad","\n border-right: 1px solid var(--n-tab-border-color);\n "),f("tabs-pad","\n border-right: 1px solid var(--n-tab-border-color);\n ")])]),R("right",[R("card-type",[f("tabs-scroll-padding","border-left: 1px solid var(--n-tab-border-color);"),C("prefix, suffix","\n border-left: 1px solid var(--n-tab-border-color);\n "),f("tabs-tab","\n border-top-right-radius: var(--n-tab-border-radius);\n border-bottom-right-radius: var(--n-tab-border-radius);\n ",[R("active","\n border-left: 1px solid #0000;\n ")]),f("tabs-tab-pad","\n border-left: 1px solid var(--n-tab-border-color);\n "),f("tabs-pad","\n border-left: 1px solid var(--n-tab-border-color);\n ")])]),R("bottom",[R("card-type",[f("tabs-scroll-padding","border-top: 1px solid var(--n-tab-border-color);"),C("prefix, suffix","\n border-top: 1px solid var(--n-tab-border-color);\n "),f("tabs-tab","\n border-bottom-left-radius: var(--n-tab-border-radius);\n border-bottom-right-radius: var(--n-tab-border-radius);\n ",[R("active","\n border-top: 1px solid #0000;\n ")]),f("tabs-tab-pad","\n border-top: 1px solid var(--n-tab-border-color);\n "),f("tabs-pad","\n border-top: 1px solid var(--n-tab-border-color);\n ")])])])]),kt=function(t,e,n){var a=!0,r=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return x(n)&&(a="leading"in n?!!n.leading:a,r="trailing"in n?!!n.trailing:r),Pt(t,e,{leading:a,maxWait:e,trailing:r})},Bt=S({name:"Tabs",props:Object.assign(Object.assign({},r.props),{value:[String,Number],defaultValue:[String,Number],trigger:{type:String,default:"click"},type:{type:String,default:"bar"},closable:Boolean,justifyContent:String,size:{type:String,default:"medium"},placement:{type:String,default:"top"},tabStyle:[String,Object],tabClass:String,addTabStyle:[String,Object],addTabClass:String,barWidth:Number,paneClass:String,paneStyle:[String,Object],paneWrapperClass:String,paneWrapperStyle:[String,Object],addable:[Boolean,Object],tabsPadding:{type:Number,default:0},animated:Boolean,onBeforeLeave:Function,onAdd:Function,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onClose:[Function,Array],labelSize:String,activeName:[String,Number],onActiveNameChange:[Function,Array]}),slots:Object,setup(t,{slots:e}){var n,a,o,d;const{mergedClsPrefixRef:b,inlineThemeDisabled:p}=u(t),f=r("Tabs","-tabs",At,dt,t,b),v=q(null),h=q(null),x=q(null),m=q(null),w=q(null),$=q(null),C=q(!0),R=q(!0),S=l(t,["labelSize","size"]),T=l(t,["activeName","value"]),P=q(null!==(a=null!==(n=T.value)&&void 0!==n?n:t.defaultValue)&&void 0!==a?a:e.default?null===(d=null===(o=at(e.default())[0])||void 0===o?void 0:o.props)||void 0===d?void 0:d.name:null),W=i(T,P),L={id:0},A=D(()=>{if(t.justifyContent&&"card"!==t.type)return{display:"flex",justifyContent:t.justifyContent}});function k(){var t;const{value:e}=W;return null===e?null:null===(t=v.value)||void 0===t?void 0:t.querySelector(`[data-name="${e}"]`)}function N(t){const{value:e}=h;if(e)for(const n of t)e.style[n]=""}function H(){if("card"===t.type)return;const e=k();e?function(e){if("card"===t.type)return;const{value:n}=h;if(!n)return;const a="0"===n.style.opacity;if(e){const r=`${b.value}-tabs-bar--disabled`,{barWidth:o,placement:i}=t;if("true"===e.dataset.disabled?n.classList.add(r):n.classList.remove(r),["top","bottom"].includes(i)){if(N(["top","maxHeight","height"]),"number"==typeof o&&e.offsetWidth>=o){const t=Math.floor((e.offsetWidth-o)/2)+e.offsetLeft;n.style.left=`${t}px`,n.style.maxWidth=`${o}px`}else n.style.left=`${e.offsetLeft}px`,n.style.maxWidth=`${e.offsetWidth}px`;n.style.width="8192px",a&&(n.style.transition="none"),n.offsetWidth,a&&(n.style.transition="",n.style.opacity="1")}else{if(N(["left","maxWidth","width"]),"number"==typeof o&&e.offsetHeight>=o){const t=Math.floor((e.offsetHeight-o)/2)+e.offsetTop;n.style.top=`${t}px`,n.style.maxHeight=`${o}px`}else n.style.top=`${e.offsetTop}px`,n.style.maxHeight=`${e.offsetHeight}px`;n.style.height="8192px",a&&(n.style.transition="none"),n.offsetHeight,a&&(n.style.transition="",n.style.opacity="1")}}}(e):function(){if("card"===t.type)return;const{value:e}=h;e&&(e.style.opacity="0")}()}function I(){var t;const e=null===(t=w.value)||void 0===t?void 0:t.$el;if(!e)return;const n=k();if(!n)return;const{scrollLeft:a,offsetWidth:r}=e,{offsetLeft:o,offsetWidth:i}=n;a>o?e.scrollTo({top:0,left:o,behavior:"smooth"}):o+i>a+r&&e.scrollTo({top:0,left:o+i-r,behavior:"smooth"})}O(W,()=>{L.id=0,H(),I()});const V=q(null);let M=0,X=null;const U={value:[]},G=q("next");let Y=!0;function Q(){const{value:t}=h;if(!t)return;Y||(Y=!1);const e="transition-disabled";t.classList.add(e),H(),t.classList.remove(e)}const Z=q(null);function J({transitionDisabled:t}){const e=v.value;if(!e)return;t&&e.classList.add("transition-disabled");const n=k();n&&Z.value&&(Z.value.style.width=`${n.offsetWidth}px`,Z.value.style.height=`${n.offsetHeight}px`,Z.value.style.transform=`translateX(${n.offsetLeft-y(getComputedStyle(e).paddingLeft)}px)`,t&&Z.value.offsetWidth),t&&e.classList.remove("transition-disabled")}O([W],()=>{"segment"===t.type&&_(()=>{J({transitionDisabled:!1})})}),E(()=>{"segment"===t.type&&J({transitionDisabled:!0})});let K=0;const tt=kt(function(e){var n,a;if(0===e.contentRect.width&&0===e.contentRect.height)return;if(K===e.contentRect.width)return;K=e.contentRect.width;const{type:r}=t;if("line"!==r&&"bar"!==r||(Y||(null===(n=t.justifyContent)||void 0===n?void 0:n.startsWith("space")))&&Q(),"segment"!==r){const{placement:e}=t;rt(("top"===e||"bottom"===e?null===(a=w.value)||void 0===a?void 0:a.$el:$.value)||null)}},64);O([()=>t.justifyContent,()=>t.size],()=>{_(()=>{const{type:e}=t;"line"!==e&&"bar"!==e||Q()})});const et=q(!1);const nt=kt(function(e){var n;const{target:a,contentRect:{width:r,height:o}}=e,i=a.parentElement.parentElement.offsetWidth,s=a.parentElement.parentElement.offsetHeight,{placement:l}=t;if(et.value){const{value:t}=m;if(!t)return;"top"===l||"bottom"===l?i-r>t.$el.offsetWidth&&(et.value=!1):s-o>t.$el.offsetHeight&&(et.value=!1)}else"top"===l||"bottom"===l?i<r&&(et.value=!0):s<o&&(et.value=!0);rt((null===(n=w.value)||void 0===n?void 0:n.$el)||null)},64);function rt(e){if(!e)return;const{placement:n}=t;if("top"===n||"bottom"===n){const{scrollLeft:t,scrollWidth:n,offsetWidth:a}=e;C.value=t<=0,R.value=t+a>=n}else{const{scrollTop:t,scrollHeight:n,offsetHeight:a}=e;C.value=t<=0,R.value=t+a>=n}}const it=kt(t=>{rt(t.target)},64);j(Wt,{triggerRef:F(t,"trigger"),tabStyleRef:F(t,"tabStyle"),tabClassRef:F(t,"tabClass"),addTabStyleRef:F(t,"addTabStyle"),addTabClassRef:F(t,"addTabClass"),paneClassRef:F(t,"paneClass"),paneStyleRef:F(t,"paneStyle"),mergedClsPrefixRef:b,typeRef:F(t,"type"),closableRef:F(t,"closable"),valueRef:W,tabChangeIdRef:L,onBeforeLeaveRef:F(t,"onBeforeLeave"),activateTab:function(e){const n=W.value;let a="next";for(const t of U.value){if(t===n)break;if(t===e){a="prev";break}}G.value=a,function(e){const{onActiveNameChange:n,onUpdateValue:a,"onUpdate:value":r}=t;n&&s(n,e);a&&s(a,e);r&&s(r,e);P.value=e}(e)},handleClose:function(e){const{onClose:n}=t;n&&s(n,e)},handleAdd:function(){const{onAdd:e}=t;e&&e(),_(()=>{const t=k(),{value:e}=w;t&&e&&e.scrollTo({left:t.offsetLeft,top:0,behavior:"smooth"})})}}),ot(()=>{H(),I()}),B(()=>{const{value:t}=x;if(!t)return;const{value:e}=b,n=`${e}-tabs-nav-scroll-wrapper--shadow-start`,a=`${e}-tabs-nav-scroll-wrapper--shadow-end`;C.value?t.classList.remove(n):t.classList.add(n),R.value?t.classList.remove(a):t.classList.add(a)});const st={syncBarPosition:()=>{H()}},lt=D(()=>{const{value:e}=S,{type:n}=t,a=`${e}${{card:"Card",bar:"Bar",line:"Line",segment:"Segment"}[n]}`,{self:{barColor:r,closeIconColor:o,closeIconColorHover:i,closeIconColorPressed:s,tabColor:l,tabBorderColor:d,paneTextColor:b,tabFontWeight:p,tabBorderRadius:u,tabFontWeightActive:v,colorSegment:g,fontWeightStrong:h,tabColorSegment:x,closeSize:m,closeIconSize:y,closeColorHover:w,closeColorPressed:$,closeBorderRadius:C,[z("panePadding",e)]:R,[z("tabPadding",a)]:T,[z("tabPaddingVertical",a)]:P,[z("tabGap",a)]:W,[z("tabGap",`${a}Vertical`)]:j,[z("tabTextColor",n)]:_,[z("tabTextColorActive",n)]:L,[z("tabTextColorHover",n)]:A,[z("tabTextColorDisabled",n)]:k,[z("tabFontSize",e)]:B},common:{cubicBezierEaseInOut:E}}=f.value;return{"--n-bezier":E,"--n-color-segment":g,"--n-bar-color":r,"--n-tab-font-size":B,"--n-tab-text-color":_,"--n-tab-text-color-active":L,"--n-tab-text-color-disabled":k,"--n-tab-text-color-hover":A,"--n-pane-text-color":b,"--n-tab-border-color":d,"--n-tab-border-radius":u,"--n-close-size":m,"--n-close-icon-size":y,"--n-close-color-hover":w,"--n-close-color-pressed":$,"--n-close-border-radius":C,"--n-close-icon-color":o,"--n-close-icon-color-hover":i,"--n-close-icon-color-pressed":s,"--n-tab-color":l,"--n-tab-font-weight":p,"--n-tab-font-weight-active":v,"--n-tab-padding":T,"--n-tab-padding-vertical":P,"--n-tab-gap":W,"--n-tab-gap-vertical":j,"--n-pane-padding-left":c(R,"left"),"--n-pane-padding-right":c(R,"right"),"--n-pane-padding-top":c(R,"top"),"--n-pane-padding-bottom":c(R,"bottom"),"--n-font-weight-strong":h,"--n-tab-color-segment":x}}),bt=p?g("tabs",D(()=>`${S.value[0]}${t.type[0]}`),lt,t):void 0;return Object.assign({mergedClsPrefix:b,mergedValue:W,renderedNames:new Set,segmentCapsuleElRef:Z,tabsPaneWrapperRef:V,tabsElRef:v,barElRef:h,addTabInstRef:m,xScrollInstRef:w,scrollWrapperElRef:x,addTabFixed:et,tabWrapperStyle:A,handleNavResize:tt,mergedSize:S,handleScroll:it,handleTabsResize:nt,cssVars:p?void 0:lt,themeClass:null==bt?void 0:bt.themeClass,animationDirection:G,renderNameListRef:U,yScrollElRef:$,handleSegmentResize:()=>{J({transitionDisabled:!0})},onAnimationBeforeLeave:function(t){const e=V.value;if(e){M=t.getBoundingClientRect().height;const n=`${M}px`,a=()=>{e.style.height=n,e.style.maxHeight=n};X?(a(),X(),X=null):X=a}},onAnimationEnter:function(t){const e=V.value;if(e){const n=t.getBoundingClientRect().height,a=()=>{document.body.offsetHeight,e.style.maxHeight=`${n}px`,e.style.height=`${Math.max(M,n)}px`};X?(X(),X=null,a()):X=a}},onAnimationAfterEnter:function(){const e=V.value;if(e){e.style.maxHeight="",e.style.height="";const{paneWrapperStyle:n}=t;if("string"==typeof n)e.style.cssText=n;else if(n){const{maxHeight:t,height:a}=n;void 0!==t&&(e.style.maxHeight=t),void 0!==a&&(e.style.height=a)}}},onRender:null==bt?void 0:bt.onRender},st)},render(){const{mergedClsPrefix:e,type:n,placement:a,addTabFixed:r,addable:i,mergedSize:s,renderNameListRef:l,onRender:d,paneWrapperClass:b,paneWrapperStyle:c,$slots:{default:p,prefix:f,suffix:u}}=this;null==d||d();const v=p?at(p()).filter(t=>!0===t.type.__TAB_PANE__):[],g=p?at(p()).filter(t=>!0===t.type.__TAB__):[],h=!g.length,x="card"===n,m="segment"===n,y=!x&&!m&&this.justifyContent;l.value=[];const w=()=>{const t=L("div",{style:this.tabWrapperStyle,class:`${e}-tabs-wrapper`},y?null:L("div",{class:`${e}-tabs-scroll-padding`,style:"top"===a||"bottom"===a?{width:`${this.tabsPadding}px`}:{height:`${this.tabsPadding}px`}}),h?v.map((t,e)=>(l.value.push(t.props.name),Ht(L(Lt,Object.assign({},t.props,{internalCreatedByPane:!0,internalLeftPadded:0!==e&&(!y||"center"===y||"start"===y||"end"===y)}),t.children?{default:t.children.tab}:void 0)))):g.map((t,e)=>(l.value.push(t.props.name),Ht(0===e||y?t:Ot(t)))),!r&&i&&x?Nt(i,0!==(h?v.length:g.length)):null,y?null:L("div",{class:`${e}-tabs-scroll-padding`,style:{width:`${this.tabsPadding}px`}}));return L("div",{ref:"tabsElRef",class:`${e}-tabs-nav-scroll-content`},x&&i?L(o,{onResize:this.handleTabsResize},{default:()=>t}):t,x?L("div",{class:`${e}-tabs-pad`}):null,x?null:L("div",{ref:"barElRef",class:`${e}-tabs-bar`}))},$=m?"top":a;return L("div",{class:[`${e}-tabs`,this.themeClass,`${e}-tabs--${n}-type`,`${e}-tabs--${s}-size`,y&&`${e}-tabs--flex`,`${e}-tabs--${$}`],style:this.cssVars},L("div",{class:[`${e}-tabs-nav--${n}-type`,`${e}-tabs-nav--${$}`,`${e}-tabs-nav`]},t(f,t=>t&&L("div",{class:`${e}-tabs-nav__prefix`},t)),m?L(o,{onResize:this.handleSegmentResize},{default:()=>L("div",{class:`${e}-tabs-rail`,ref:"tabsElRef"},L("div",{class:`${e}-tabs-capsule`,ref:"segmentCapsuleElRef"},L("div",{class:`${e}-tabs-wrapper`},L("div",{class:`${e}-tabs-tab`}))),h?v.map((t,e)=>(l.value.push(t.props.name),L(Lt,Object.assign({},t.props,{internalCreatedByPane:!0,internalLeftPadded:0!==e}),t.children?{default:t.children.tab}:void 0))):g.map((t,e)=>(l.value.push(t.props.name),0===e?t:Ot(t))))}):L(o,{onResize:this.handleNavResize},{default:()=>L("div",{class:`${e}-tabs-nav-scroll-wrapper`,ref:"scrollWrapperElRef"},["top","bottom"].includes($)?L(gt,{ref:"xScrollInstRef",onScroll:this.handleScroll},{default:w}):L("div",{class:`${e}-tabs-nav-y-scroll`,onScroll:this.handleScroll,ref:"yScrollElRef"},w()))}),r&&i&&x?Nt(i,!0):null,t(u,t=>t&&L("div",{class:`${e}-tabs-nav__suffix`},t))),h&&(!this.animated||"top"!==$&&"bottom"!==$?Et(v,this.mergedValue,this.renderedNames):L("div",{ref:"tabsPaneWrapperRef",style:c,class:[`${e}-tabs-pane-wrapper`,b]},Et(v,this.mergedValue,this.renderedNames,this.onAnimationBeforeLeave,this.onAnimationEnter,this.onAnimationAfterEnter,this.animationDirection))))}});function Et(t,e,n,a,r,o,i){const s=[];return t.forEach(t=>{const{name:a,displayDirective:r,"display-directive":o}=t.props,i=t=>r===t||o===t,l=e===a;if(void 0!==t.key&&(t.key=a),l||i("show")||i("show:lazy")&&n.has(a)){n.has(a)||n.add(a);const e=!i("if");s.push(e?G(t,[[V,l]]):t)}}),i?L(Y,{name:`${i}-transition`,onBeforeLeave:a,onEnter:r,onAfterEnter:o},{default:()=>s}):s}function Nt(t,e){return L(Lt,{ref:"addTabInstRef",key:"__addable",name:"__addable",internalCreatedByPane:!0,internalAddable:!0,internalLeftPadded:e,disabled:"object"==typeof t&&t.disabled})}function Ot(t){const e=J(t);return e.props?e.props.internalLeftPadded=!0:e.props={internalLeftPadded:!0},e}function Ht(t){return Array.isArray(t.dynamicProps)?t.dynamicProps.includes("internalLeftPadded")||t.dynamicProps.push("internalLeftPadded"):t.dynamicProps=["internalLeftPadded"],t}function Dt(t,e={}){const n=e.platform||"",a=e.projectPath||"",r=st(`config-registry:${t}`,n,e.scope||"",a);return bt(r,e=>K.get(`/config-registry/${t}`,{signal:e}).then(t=>t.data),`config-registry:${t}`,`config-registry:${t}:${n}`)}async function Ft(t){return(await K.post(`/config-registry/${t}/import`)).data}async function It(t,e,n){const a=encodeURIComponent(e);return(await K.put(`/config-registry/${t}/${a}/toggle`,{enabled:n})).data}async function Vt(t,e,n,a){const r=encodeURIComponent(e);return(await K.put(`/config-registry/${t}/${r}/platform/${n}`,{enabled:a})).data}async function Mt(t){return(await K.post(`/config-registry/${t}/sync`)).data}var Xt={key:0,class:"asset-detail-info-section"},Ut={class:"asset-detail-section-title"},qt={class:"asset-detail-box asset-detail-path-box"},Gt={class:"asset-detail-path-text"},Yt={__name:"AssetPathField",props:{path:{type:String,default:""},title:{type:String,default:"路径"}},setup(t){const e=t,n=D(()=>String(e.path||"").trim());async function a(){if(n.value)try{if("manual"===(await ut(n.value))?.method)return void it.warning("自动复制失败,已弹出手动复制框");it.success("已复制路径")}catch{it.error("复制路径失败")}}return(e,r)=>n.value?(N(),Q("div",Xt,[Z("h3",Ut,H(t.title),1),Z("div",qt,[k(U(h),{size:16,class:"asset-detail-path-icon"},{default:I(()=>[k(U(et))]),_:1}),Z("code",Gt,H(n.value),1),k(U(rt),{trigger:"hover"},{trigger:I(()=>[k(U(w),{circle:"",quaternary:"",size:"tiny",class:"asset-detail-path-copy","aria-label":"复制路径",onClick:X(a,["stop"])},{icon:I(()=>[k(U(h),null,{default:I(()=>[k(U(tt))]),_:1})]),_:1})]),default:I(()=>[r[0]||(r[0]=P(" 复制路径 ",-1))]),_:1})])])):T("",!0)}};export{It as a,_t as c,Mt as i,Ft as n,Vt as o,Dt as r,Bt as s,Yt as t};
@@ -1 +0,0 @@
1
- import{i as e,s as a,t}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as s,D as l,O as i,S as n,W as o,_t as r,b as u,et as c,mt as d,st as p,w as f,x as v}from"./vue-vendor-BqZbbXHA.js";import{n as m}from"./client-UDwXBP9i.js";import{dt as w,et as h,ft as g}from"./icons-B2Vg-IOC.js";import{t as y}from"./Upload-BEQ-3Kqq.js";import{t as _}from"./Divider-D28g1gwj.js";import{n as x,t as z}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as b}from"./DrawerContent-ChXgZ1Xm.js";import{K as j,N as C,P as k,at as U}from"./index-BFInlZGI.js";var D={class:"drawer-header"},I={class:"export-import-container"},O={class:"section"},S={class:"section-header"},L={class:"section"},P={class:"section-header"},R={key:0,class:"import-preview"},T={class:"preview-stats"},Z={class:"stat-item"},B={class:"stat-item"},N={class:"stat-item"},W=t({__name:"ConfigExportDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(t,{emit:W}){const $=t,E=W,{drawerWidth:J}=z(520,480),q=u({get:()=>$.visible,set:e=>E("update:visible",e)}),A=p(!1),K=p(!1),F=p(null),G=p(null),H=p(null),M=p(null),Q=p(!1);async function V(){A.value=!0;try{const e=await async function(e="zip"){return(await m.get(`/config-export?format=${e}`,{responseType:"blob"})).data}("zip"),a=window.URL.createObjectURL(e),t=document.createElement("a");t.href=a,t.download=`ctx-config-${(new Date).toISOString().split("T")[0]}.zip`,document.body.appendChild(t),t.click(),document.body.removeChild(t),window.URL.revokeObjectURL(a),C.success("配置导出成功")}catch(e){C.error("导出失败: "+e.message)}finally{A.value=!1}}async function X({file:e}){try{if(F.value=null,G.value=null,H.value=null,M.value=null,(e.file.name||"").toLowerCase().endsWith(".zip")){const a=await async function(e){const a=await e.arrayBuffer();return(await m.post("/config-export/preview-zip",a,{headers:{"Content-Type":"application/zip"}})).data}(e.file);return void(a.success?(F.value=a.data,H.value=e.file,G.value=null,M.value="zip",C.success("ZIP 配置解析成功")):C.error("ZIP 配置格式错误: "+a.message))}const a=await e.file.text(),t=JSON.parse(a),s=await async function(e){return(await m.post("/config-export/preview",{data:e})).data}(t);s.success?(F.value=s.data,G.value=t,H.value=null,M.value="json",C.success("配置文件解析成功")):C.error("配置文件格式错误: "+s.message)}catch(a){C.error("文件解析失败: "+a.message)}}async function Y(){if(G.value||H.value){K.value=!0;try{const e="zip"===M.value?await async function(e,a=!1){const t=await e.arrayBuffer();return(await m.post(`/config-export/import-zip?overwrite=${a}`,t,{headers:{"Content-Type":"application/zip"}})).data}(H.value,Q.value):await async function(e,a=!1){return(await m.post("/config-export/import",{data:e,overwrite:a})).data}(G.value,Q.value);e.success?(C.success("配置导入成功: "+e.message),ee()):C.error("配置导入失败: "+e.message)}catch(e){C.error("导入失败: "+e.message)}finally{K.value=!1}}}function ee(){F.value=null,G.value=null,H.value=null,M.value=null,Q.value=!1}return(t,u)=>(o(),n(d(x),{show:q.value,"onUpdate:show":u[1]||(u[1]=e=>q.value=e),width:d(J),placement:"right","mask-closable":!0},{default:c(()=>[i(d(b),{closable:"","native-scrollbar":!1},{header:c(()=>[v("div",D,[i(d(e),{size:20,color:"#18a058"},{default:c(()=>[i(d(g))]),_:1}),u[2]||(u[2]=v("span",null,"配置导出/导入",-1))])]),default:c(()=>[v("div",I,[v("div",O,[v("div",S,[i(d(k),{strong:""},{default:c(()=>[...u[3]||(u[3]=[l("导出配置",-1)])]),_:1}),i(d(k),{depth:"3",style:{"font-size":"12px"}},{default:c(()=>[...u[4]||(u[4]=[l(" 导出多平台配置为 ZIP(含渠道、Agents/Skills/Commands、原生配置等) ",-1)])]),_:1})]),i(d(a),{type:"primary",loading:A.value,onClick:V},{icon:c(()=>[i(d(e),null,{default:c(()=>[i(d(h))]),_:1})]),default:c(()=>[u[5]||(u[5]=l(" 导出配置 ",-1))]),_:1},8,["loading"])]),i(d(_)),v("div",L,[v("div",P,[i(d(k),{strong:""},{default:c(()=>[...u[6]||(u[6]=[l("导入配置",-1)])]),_:1}),i(d(k),{depth:"3",style:{"font-size":"12px"}},{default:c(()=>[...u[7]||(u[7]=[l(" 从 JSON 或 ZIP 文件导入配置(支持覆盖已有配置) ",-1)])]),_:1})]),i(d(y),{"custom-request":X,"show-file-list":!1,accept:".json,.zip"},{default:c(()=>[i(d(a),null,{icon:c(()=>[i(d(e),null,{default:c(()=>[i(d(w))]),_:1})]),default:c(()=>[u[8]||(u[8]=l(" 选择配置文件 ",-1))]),_:1})]),_:1}),F.value?(o(),f("div",R,[i(d(k),{strong:"",style:{"font-size":"14px"}},{default:c(()=>[...u[9]||(u[9]=[l("导入预览",-1)])]),_:1}),v("div",T,[v("div",Z,[i(d(k),{depth:"3"},{default:c(()=>[...u[10]||(u[10]=[l("配置模板:",-1)])]),_:1}),i(d(k),null,{default:c(()=>[l(r(F.value.counts.configTemplates),1)]),_:1})]),v("div",B,[i(d(k),{depth:"3"},{default:c(()=>[...u[11]||(u[11]=[l("渠道总数:",-1)])]),_:1}),i(d(k),null,{default:c(()=>[l(r(F.value.counts.channels),1)]),_:1})]),v("div",N,[i(d(k),{depth:"3"},{default:c(()=>[...u[12]||(u[12]=[l("插件:",-1)])]),_:1}),i(d(k),null,{default:c(()=>[l(r(F.value.counts.plugins||0),1)]),_:1})])]),i(d(U),{checked:Q.value,"onUpdate:checked":u[0]||(u[0]=e=>Q.value=e),style:{"margin-top":"12px"}},{default:c(()=>[...u[13]||(u[13]=[l(" 覆盖已有配置 ",-1)])]),_:1},8,["checked"]),i(d(j),{style:{"margin-top":"16px"}},{default:c(()=>[i(d(a),{type:"primary",loading:K.value,onClick:Y},{default:c(()=>[...u[14]||(u[14]=[l(" 确认导入 ",-1)])]),_:1},8,["loading"]),i(d(a),{onClick:ee},{default:c(()=>[...u[15]||(u[15]=[l("取消",-1)])]),_:1})]),_:1})])):s("",!0)])])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-d8c9eada"]]);export{W as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./_plugin-vue_export-helper-BeLZJZij.js";import{O as a,W as t,et as s,mt as r,w as o}from"./vue-vendor-BqZbbXHA.js";import{O as p}from"./light-Cp0t7v32.js";import{t as i}from"./ConfigTemplatesPanel-Cvbnkvpt.js";var m={class:"config-templates-page"},l=e({__name:"ConfigTemplates",setup:e=>(e,l)=>(t(),o("div",m,[a(r(p),{title:"配置模版管理",bordered:!1},{default:s(()=>[a(i,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-a6c39fe5"]]);export{l as default};
@@ -1 +0,0 @@
1
- import{i as e,s as a,t as l}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as s,D as n,H as t,I as c,J as o,K as i,O as r,S as u,V as d,W as v,Y as p,Z as h,_t as y,b as g,et as m,g as f,gt as k,ht as T,i as b,m as w,mt as $,st as _,w as x,x as C}from"./vue-vendor-BqZbbXHA.js";import{t as z}from"./vendors-D0c_0KLP.js";import{a as S,c as q,t as j,u as M}from"./platforms-CBkB45JP.js";import{A as L,At as I,Ct as E,D,R as A,T as F,Z as N,a as O,b as P,mt as U,n as J,q as V,r as R,xt as K,y as H,z as Z}from"./icons-B2Vg-IOC.js";import{t as W}from"./use-message-DoLM8C1C.js";import{$ as Y,D as B,F as G,Nt as Q,P as X,dt as ee,ft as ae,g as le,v as se}from"./index-BFInlZGI.js";import{t as ne}from"./RecentSessionsDrawer-wLktMF_c.js";var te={class:"channel-column"},ce={class:"drag-handle",title:"拖拽排序"},oe={class:"header-icon"},ie={class:"channel-title"},re={key:0,class:"claude-extra-area"},ue={key:0,class:"channel-content"},de={key:0,class:"card"},ve={class:"card-header"},pe={class:"card-title"},he={key:0,class:"runtime-badge"},ye={class:"card-body",style:{padding:"6px 10px"}},ge={class:"proxy-info-row"},me={class:"proxy-status"},fe={key:0,class:"proxy-port"},ke={class:"channel-name"},Te={class:"channel-quick-panel"},be={class:"panel-title"},we={key:0,class:"no-channels"},$e={key:1,class:"channel-quick-list"},_e={class:"channel-quick-info"},xe={class:"channel-quick-name"},Ce={key:0,class:"channel-switching-tip"},ze={class:"channel-metrics"},Se={class:"metric-item"},qe={class:"metric-value"},je={class:"metric-item"},Me={class:"metric-value"},Le={class:"metric-item"},Ie={class:"metric-value"},Ee={class:"metric-item"},De={class:"card"},Ae={class:"card-header compact"},Fe={class:"card-body",style:{padding:"8px 10px"}},Ne={class:"quick-access-list"},Oe={class:"access-icon"},Pe={class:"access-content"},Ue={class:"access-value"},Je={class:"access-icon"},Ve={class:"access-content"},Re={class:"access-value"},Ke={class:"access-icon"},He={class:"access-content"},Ze={class:"access-goto"},We={class:"card-header compact"},Ye={class:"card-body",style:{padding:"8px 10px"}},Be={class:"stats-inline stats-3col"},Ge={class:"stat-inline-item stat-requests"},Qe={class:"stat-info"},Xe={class:"stat-inline-item stat-input"},ea={class:"stat-info"},aa={class:"stat-inline-item stat-output"},la={class:"stat-info"},sa={key:3,class:"card logs-card"},na={class:"card-header compact"},ta={class:"card-body logs-card-body"},ca={class:"logs-table-wrapper"},oa={key:0,class:"empty-logs"},ia=["title"],ra={key:0,class:"action-content"},ua={class:"action-msg"},da={class:"action-time"},va={key:1,class:"action-content"},pa={class:"action-msg error-msg"},ha={class:"action-time error-time"},ya={class:"locked-content"},ga={class:"lock-icon"},ma="channelLocks",fa=l({__name:"ChannelColumn",props:{channelType:{type:String,required:!0}},setup(l){const z=l,S=b(),Q=j(),fa=W(),{getProxyState:ka,getChannels:Ta,getSchedulerState:ba,startProxy:wa,stopProxy:$a,getLogs:_a,clearLogsForSource:xa,loadChannels:Ca,logLimit:za,statsInterval:Sa}=se(),{dashboardData:qa,isLoading:ja,loadDashboard:Ma,scheduleRefresh:La}=le(),Ia=g(()=>Q.get(z.channelType)||{key:z.channelType,label:z.channelType,title:z.channelType,icon:O,color:"#64748b",capabilities:{},resourceTypes:{}}),Ea=g(()=>Ia.value.title||Ia.value.label||z.channelType),Da=g(()=>Ia.value.icon||O),Aa=g(()=>Ia.value.color||"#64748b"),Fa=g(()=>Ia.value.label||Ia.value.title||z.channelType),Na=g(()=>ka(z.channelType)?.value||{}),Oa=_({projects:0,sessions:0}),Pa=_({requests:0,tokens:0,cost:0}),Ua=_({requests:0,tokens:0,cost:0}),Ja={requests:0,tokens:0,cost:3},Va={requests:null,tokens:null,cost:null},Ra=_({requests:!1,tokens:!1,cost:!1}),Ka=g(()=>qa.value?.todayStats?.[z.channelType]?.byModel||{});function Ha(e,a,l,s=600){Va[e]&&cancelAnimationFrame(Va[e]),Ra.value[e]=!0;const n=Date.now(),t=()=>{const c=Date.now()-n,o=Math.min(c/s,1),i=1-Math.pow(1-o,2),r=a+(l-a)*i,u=Ja[e]??0,d=Math.pow(10,u),v=u>0?Math.round(r*d)/d:Math.round(r);Ua.value[e]=v,o<1?Va[e]=requestAnimationFrame(t):Ra.value[e]=!1};Va[e]=requestAnimationFrame(t)}const Za=_(!1);function Wa(e){try{const a=localStorage.getItem(ma),l=a?JSON.parse(a):{};l[z.channelType]=e,localStorage.setItem(ma,JSON.stringify(l))}catch(a){}}const Ya=_(function(){try{const e=localStorage.getItem(ma);if(e)return JSON.parse(e)[z.channelType]||!1}catch(e){}return!1}());async function Ba(){Ya.value=!Ya.value,Wa(Ya.value);try{if(await M("channelLocks",z.channelType,Ya.value),qa.value){const e=qa.value.uiConfig||{},a={...e.channelLocks||{}};a[z.channelType]=Ya.value,qa.value={...qa.value,uiConfig:{...e,channelLocks:a}}}}catch(e){}}const Ga=_(!0);function Qa(e){e.detail&&void 0!==e.detail.showLogs&&(Ga.value=e.detail.showLogs)}const Xa=_(Date.now()),el=g(()=>{if(!Na.value.running)return"";const e=Na.value.startTime;if(!e)return"";const a=Xa.value-e;if(a<=0)return"";const l=Math.floor(a/1e3),s=Math.floor(l/3600),n=Math.floor(l%3600/60),t=l%60;let c="已运行 ";return s>0&&(c+=`${s}小时`),n>0&&(c+=`${n}分`),(t>0||0===s&&0===n)&&(c+=`${t}秒`),c}),al=_(null),ll=g(()=>za.value),sl=g(()=>fl()?(_a(z.channelType)?.value||[]).slice(0,ll.value):[]);let nl=null,tl=null,cl=null,ol=!1,il=null;const rl=g(()=>{const e=Ta(z.channelType)?.value||[];return[...e.filter(e=>!1!==e.enabled),...e.filter(e=>!1===e.enabled)]});function ul(e){const a=ba(z.channelType);if(!a?.channels)return 0;const l=a.channels.find(a=>a.id===e);return l?l.inflight:0}const dl=g(()=>{const e=rl.value.filter(e=>!1!==e.enabled).length;return Na.value.running?`${e}个渠道动态切换中`:rl.value.length>0?`${e}个渠道已启用`:"无渠道"}),vl=g(()=>qa.value?.todayStats?.[z.channelType]?.byChannel||{});function pl(e){return vl.value[e]||{requests:0,tokens:0,cost:0}}function hl(e,a){return e?.usageMissing?"--":e?.tokens?.[a]||0}function yl(e){return Q.hasCapability(z.channelType,e)}function gl(e){return yl(e)||!0===Ia.value.resourceTypes?.[e]}const ml=g(()=>["skills","commands","agents","plugins"].some(gl));function fl(){return yl("nativeLogs")}function kl(e){if(!e||"action"===e.type||"error"===e.status)return"";const a=[];return e.model&&a.push(`模型: ${e.model}`),e.originalModel&&e.originalModel!==e.model&&a.push(`重定向: ${e.originalModel} -> ${e.model}`),e.usageMissing&&a.push("上游响应未返回 usage,当前无法计算 token。"),a.join("\n")}async function Tl(e){if(!yl("proxy"))return void fa.warning(`${Ea.value} 暂未接入动态代理`);const a=ka(z.channelType);if(a){a.value.loading=!0;try{let l;l=e?await wa(z.channelType):await $a(z.channelType,{refreshChannelsDrawer:!0}),!1!==l.success?"omp"===z.channelType?fa.success(e?"OMP 动态切换已启用":"OMP 已切换为单渠道直连模式"):fa.success(e?`${Ea.value} 代理已启动`:`${Ea.value} 代理已停止`):(fa.error(l.error||"操作失败"),a.value.running=!e)}catch(l){fa.error(l.response?.data?.error||l.message||"操作失败"),a.value.running=!e}finally{a.value.loading=!1}}}function bl(){yl("projects")?S.push({name:"cli-projects",params:{platform:z.channelType}}):fa.info(`${Ea.value} 当前仅作为首页显示项`)}function wl(){yl("projects")?S.push({name:"cli-projects",params:{platform:z.channelType}}):fa.info(`${Ea.value} 当前仅作为首页显示项`)}function $l(){yl("sessions")?Za.value=!0:fa.info(`${Ea.value} 当前没有托管会话列表`)}h(sl,e=>{const a=e[0]?.id||null;a&&a!==nl?(nl=a,il&&clearTimeout(il),il=setTimeout(()=>{La({fresh:!0}).then(()=>ql()).catch(()=>{})},5e3),(!al.value||al.value.scrollTop<20)&&c(()=>{al.value&&(al.value.scrollTop=0)})):nl=a}),h(()=>Pa.value.requests,e=>{Ha("requests",Ua.value.requests,e,600)}),h(()=>Pa.value.tokens,e=>{Ha("tokens",Ua.value.tokens,e,600)}),h(()=>Pa.value.cost,e=>{Ha("cost",Ua.value.cost,e,600)}),h(()=>z.channelType,()=>{nl=sl.value[0]?.id||null}),h(()=>qa.value?.counts?.[z.channelType],()=>{Sl()}),h(()=>qa.value?.todayStats?.[z.channelType],()=>{ql()},{deep:!0}),h(Sa,()=>{ol&&function(){tl&&(clearInterval(tl),tl=null);const e=Sa.value||30,a=Math.max(1e3*e,1e4);tl=setInterval(()=>{La({fresh:!0}).then(()=>ql()).catch(()=>{})},a)}()});const _l=_({});function xl(e){return!!_l.value[e]}function Cl(e,a){e&&(_l.value={..._l.value,[e]:!!a})}async function zl(e,a){if(!e)return;const l=`${z.channelType}ChannelCollapse`;let s={};try{const e=l?localStorage.getItem(l):null;s=e?JSON.parse(e):{}}catch(n){s={}}a?delete s[e]:s[e]=!0;try{l&&localStorage.setItem(l,JSON.stringify(s))}catch(n){}try{await M("channelCollapse",z.channelType,s)}catch(n){}}function Sl(){const e=qa.value?.counts?.[z.channelType];Oa.value.projects=e?.projectCount||0,Oa.value.sessions=e?.sessionCount||0}async function ql(){if(qa.value&&qa.value.todayStats){const e=qa.value.todayStats[z.channelType];e&&(Pa.value.requests=e.requests||0,Pa.value.tokens=e.tokens||0,Pa.value.cost=e.cost||0)}Sl()}function jl(){xa(z.channelType)}function Ml(e){e?.currentTarget?.blur?.()}function Ll(e){window.dispatchEvent(new CustomEvent("open-skills-drawer",{detail:{platform:z.channelType}})),Ml(e)}function Il(e){window.dispatchEvent(new CustomEvent("open-commands-drawer",{detail:{platform:z.channelType}})),Ml(e)}function El(e){if(!gl("agents"))return fa.info(`${Ea.value} 的 Agent 能力通过插件/扩展提供`),void Ml(e);window.dispatchEvent(new CustomEvent("open-agents-drawer",{detail:{platform:z.channelType}})),Ml(e)}return d(async()=>{await Ma().then(()=>ql()),async function(){try{if(qa.value&&qa.value.uiConfig)Ga.value=!1!==qa.value.uiConfig.panelVisibility?.showLogs;else{const e=await q();e.success&&e.config&&(Ga.value=!1!==e.config.panelVisibility?.showLogs)}}catch(e){}}(),async function(){try{let e=!1;if(qa.value&&qa.value.uiConfig)e=qa.value.uiConfig.channelLocks?.[z.channelType]||!1;else{const a=await q();a.success&&a.config&&(e=a.config.channelLocks?.[z.channelType]||!1)}Ya.value=e,Wa(e)}catch(e){}}(),window.addEventListener("panel-visibility-change",Qa),Ua.value={...Pa.value},ol=!0,cl=setInterval(()=>{Xa.value=Date.now()},1e3)}),t(()=>{ol=!1,tl&&clearInterval(tl),cl&&clearInterval(cl),il&&clearTimeout(il),window.removeEventListener("panel-visibility-change",Qa),Object.values(Va).forEach(e=>{e&&cancelAnimationFrame(e)})}),(t,c)=>{const d=o("n-collapse");return v(),x("div",te,[C("div",{class:T(["channel-header",l.channelType]),style:k({"--platform-color":Aa.value})},[C("div",ce,[r($(e),{size:16},{default:m(()=>[r($(P))]),_:1})]),C("div",oe,[r($(e),{size:20},{default:m(()=>[(v(),u(p(Da.value)))]),_:1})]),C("h2",ie,y(Ea.value),1),ml.value?(v(),x("div",re,[gl("skills")?(v(),u($(Y),{key:0,trigger:"hover"},{trigger:m(()=>[r($(a),{text:"",class:"config-shortcut-button",onClick:Ll,title:"Skills 技能管理"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[r($(N))]),_:1})]),_:1})]),default:m(()=>[c[2]||(c[2]=n(" Skills 技能管理 ",-1))]),_:1})):s("",!0),gl("commands")?(v(),u($(Y),{key:1,trigger:"hover"},{trigger:m(()=>[r($(a),{text:"",class:"config-shortcut-button",onClick:Il,title:"Commands 命令管理"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[r($(O))]),_:1})]),_:1})]),default:m(()=>[c[3]||(c[3]=n(" Commands 命令管理 ",-1))]),_:1})):s("",!0),gl("agents")?(v(),u($(Y),{key:2,trigger:"hover"},{trigger:m(()=>[r($(a),{text:"",class:"config-shortcut-button",onClick:El,title:"Agents 代理管理"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[r($(L))]),_:1})]),_:1})]),default:m(()=>[c[4]||(c[4]=n(" Agents 代理管理 ",-1))]),_:1})):s("",!0)])):s("",!0),r($(a),{text:"",class:"lock-button",onClick:Ba,title:Ya.value?"解锁此列":"锁定此列"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[Ya.value?(v(),u($(Z),{key:0})):(v(),u($(A),{key:1}))]),_:1})]),_:1},8,["title"])],6),Ya.value?s("",!0):(v(),x("div",ue,[yl("proxy")?(v(),x("div",de,[C("div",ve,[r($(e),{size:16},{default:m(()=>[r($(D))]),_:1}),C("h3",pe,y("omp"===l.channelType?"动态切换":"代理控制"),1),Na.value.running&&el.value?(v(),x("span",he,y(el.value),1)):s("",!0),r($(G),{value:Na.value.running,"onUpdate:value":[c[0]||(c[0]=e=>Na.value.running=e),Tl],loading:Na.value.loading,size:"small",style:{"margin-left":"auto"}},null,8,["value","loading"])]),C("div",ye,[C("div",ge,[C("div",me,[C("div",{class:T(["status-dot",{active:Na.value.running}])},null,2),r($(X),{type:Na.value.running?"success":"default",style:{"font-size":"12px"}},{default:m(()=>[n(y(Na.value.running?"运行中":"已停止"),1)]),_:1},8,["type"]),"omp"!==l.channelType?(v(),x("span",fe,"端口: "+y(Na.value.port),1)):s("",!0)]),yl("channels")?(v(),u($(ae),{key:0,trigger:"click",placement:"bottom",width:320,class:"channel-popover"},{trigger:m(()=>[r($(a),{text:"",size:"tiny",class:"channel-status"},{default:m(()=>[C("span",ke,y(dl.value),1)]),_:1})]),default:m(()=>[C("div",Te,[C("div",be,[c[6]||(c[6]=C("span",null,"渠道快捷管理",-1)),r($(X),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...c[5]||(c[5]=[n("点击开关切换状态",-1)])]),_:1})]),0===rl.value.length?(v(),x("div",we,[r($(X),{depth:"3"},{default:m(()=>[...c[7]||(c[7]=[n("暂无配置渠道",-1)])]),_:1})])):(v(),x("div",$e,[(v(!0),x(f,null,i(rl.value,e=>{return v(),x("div",{key:e.id,class:T(["channel-quick-item",{disabled:!1===e.enabled}])},[C("div",_e,[C("span",xe,y(e.name),1),"frozen"===e.health?.status?(v(),u($(ee),{key:0,size:"tiny",type:"error",bordered:!1},{default:m(()=>[...c[8]||(c[8]=[n(" 冻结 ",-1)])]),_:1})):s("",!0),r($(G),{size:"small",value:!1!==e.enabled,"onUpdate:value":a=>async function(e,a){if(e&&!xl(e.id)){Cl(e.id,!0);try{await B(z.channelType,e.id,{enabled:a}),await zl(e.id,a),fa.success(a?`渠道「${e.name}」已启用`:`渠道「${e.name}」已停用`),await Ca({force:!0,keys:[z.channelType]}),window.dispatchEvent(new CustomEvent("channel-management-refresh",{detail:{channel:z.channelType}}))}catch(l){fa.error("操作失败: "+l.message)}finally{Cl(e.id,!1)}}}(e,a),loading:xl(e.id),disabled:xl(e.id),style:{"margin-left":"auto"}},null,8,["value","onUpdate:value","loading","disabled"])]),xl(e.id)?(v(),x("div",Ce," 正在切换渠道状态... ")):s("",!0),C("div",ze,[C("span",Se,[c[9]||(c[9]=C("span",{class:"metric-label"},"请求",-1)),C("span",qe,y(pl(e.id).requests),1)]),C("span",je,[c[10]||(c[10]=C("span",{class:"metric-label"},"Tokens",-1)),C("span",Me,y((a=pl(e.id).tokens,a>=1e6?(a/1e6).toFixed(1)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString())),1)]),C("span",Le,[c[11]||(c[11]=C("span",{class:"metric-label"},"权重",-1)),C("span",Ie,y(e.weight||1),1)]),C("span",Ee,[c[12]||(c[12]=C("span",{class:"metric-label"},"并发",-1)),C("span",{class:T(["metric-value",{active:ul(e.id)>0}])},y(ul(e.id))+y(e.maxConcurrency?`/${e.maxConcurrency}`:""),3)])])],2);var a}),128))]))])]),_:1})):s("",!0)])])])):s("",!0),C("div",De,[C("div",Ae,[r($(e),{size:14},{default:m(()=>[r($(H))]),_:1}),c[13]||(c[13]=C("h3",{class:"card-title"},"快速访问",-1))]),C("div",Fe,[C("div",Ne,[C("div",{class:T(["access-card access-card-projects",{clickable:yl("projects"),disabled:!yl("projects")}]),onClick:bl},[C("div",Oe,[r($(e),{size:16},{default:m(()=>[r($(V))]),_:1})]),C("div",Pe,[c[14]||(c[14]=C("span",{class:"access-label"},"项目",-1)),C("span",Ue,y(Oa.value.projects),1)])],2),C("div",{class:T(["access-card access-card-sessions",{clickable:yl("sessions"),disabled:!yl("sessions")}]),onClick:$l},[C("div",Je,[r($(e),{size:16},{default:m(()=>[r($(E))]),_:1})]),C("div",Ve,[c[15]||(c[15]=C("span",{class:"access-label"},"最新对话",-1)),C("span",Re,y(Oa.value.sessions),1)])],2),C("div",{class:T(["access-card access-card-goto",{clickable:yl("projects"),disabled:!yl("projects")}]),onClick:wl},[C("div",Ke,[r($(e),{size:16},{default:m(()=>[r($(I))]),_:1})]),C("div",He,[c[16]||(c[16]=C("span",{class:"access-label"},"前往",-1)),C("span",Ze,y(Fa.value),1)])],2)])])]),yl("statistics")?(v(),x("div",{key:1,class:T(["card stats-card",`stats-card-${l.channelType}`])},[C("div",We,[r($(e),{size:14},{default:m(()=>[r($(J))]),_:1}),c[17]||(c[17]=C("h3",{class:"card-title"},"今日数据",-1))]),C("div",Ye,[C("div",Be,[C("div",Ge,[c[19]||(c[19]=C("div",{class:"stat-icon-dot requests"},null,-1)),C("div",Qe,[c[18]||(c[18]=C("span",{class:"stat-label"},"请求",-1)),C("span",{class:T(["stat-value",{animating:Ra.value.requests}])},y(Ua.value.requests),3)])]),C("div",Xe,[c[21]||(c[21]=C("div",{class:"stat-icon-dot tokens"},null,-1)),C("div",ea,[c[20]||(c[20]=C("span",{class:"stat-label"},"总 Tokens",-1)),C("span",{class:T(["stat-value",{animating:Ra.value.tokens}])},y((g=Ua.value.tokens,g>=1e6?(g/1e6).toFixed(1)+"M":g>=1e3?(g/1e3).toFixed(1)+"K":g.toString())),3)])]),C("div",aa,[c[23]||(c[23]=C("div",{class:"stat-icon-dot cost"},null,-1)),C("div",la,[c[22]||(c[22]=C("span",{class:"stat-label"},"成本 / USD",-1)),C("span",{class:T(["stat-value",{animating:Ra.value.cost}])},y((h=Ua.value.cost,!h||Number.isNaN(h)?"$0":"$"+Number(h).toFixed(3))),3)])])])])],2)):s("",!0),yl("statistics")&&Object.keys(Ka.value).length>0?(v(),x("div",{key:2,class:T(["card chart-card",`chart-card-${l.channelType}`])},[r(d,{"default-expanded-names":[],accordion:""})],2)):s("",!0),Ga.value&&fl()?(v(),x("div",sa,[C("div",na,[r($(e),{size:14},{default:m(()=>[r($(F))]),_:1}),c[24]||(c[24]=C("h3",{class:"card-title"},"实时日志",-1)),r($(a),{text:"",size:"tiny",onClick:w(jl,["stop"]),style:{"margin-left":"auto"},title:"清空日志"},{icon:m(()=>[r($(e),{size:14},{default:m(()=>[r($(R))]),_:1})]),_:1})]),C("div",ta,[C("div",ca,[C("div",{class:T(["logs-table-header",`logs-header-${l.channelType}`])},[C("div",{class:T(["log-col col-channel",`col-channel-${l.channelType}`])},"渠道",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"请求",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"回复",2),"claude"===l.channelType?(v(),x(f,{key:0},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"写入",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"命中",2)],64)):"codex"===l.channelType?(v(),x(f,{key:1},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"推理",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"缓存",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)],64)):"gemini"===l.channelType?(v(),x(f,{key:2},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"缓存",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)],64)):"opencode"===l.channelType||"omp"===l.channelType?(v(),x(f,{key:3},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"推理",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"缓存",2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)],64)):(v(),x("div",{key:4,class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)),C("div",{class:T(["log-col col-time",`col-time-${l.channelType}`])},"时间",2)],2),C("div",{class:"logs-container",ref_key:"logsContainer",ref:al},[0===sl.value.length?(v(),x("div",oa,[r($(e),{size:32,depth:"3",style:{"margin-bottom":"8px"}},{default:m(()=>[r($(F))]),_:1}),r($(X),{depth:"3",style:{"font-size":"12px","font-weight":"500"}},{default:m(()=>[...c[25]||(c[25]=[n("暂无实时日志",-1)])]),_:1}),r($(X),{depth:"3",style:{"font-size":"11px","margin-top":"4px"}},{default:m(()=>[n(y("omp"===l.channelType?"ctx 将持续读取 OMP 原生会话日志":"开启代理后将显示请求记录"),1)]),_:1})])):s("",!0),(v(!0),x(f,null,i(sl.value,a=>(v(),x("div",{key:a.id,class:T(["log-row",{"action-row":"action"===a.type,"error-row":"error"===a.status,"new-log":a.isNew}]),title:kl(a)},["action"===a.type?(v(),x("div",ra,[r($(e),{size:12,color:"#18a058"},{default:m(()=>[r($(K))]),_:1}),C("span",ua,y(a.message),1),C("span",da,y(a.time),1)])):"error"===a.status?(v(),x("div",va,[r($(e),{size:12,color:"#d03050"},{default:m(()=>[r($(U))]),_:1}),C("span",pa,y(a.channel)+": "+y(a.error||a.message||"请求失败"),1),C("span",ha,y(a.time),1)])):(v(),x(f,{key:2},[C("div",{class:T(["log-col col-channel",`col-channel-${l.channelType}`])},[r($(ee),{size:"tiny",type:"success"},{default:m(()=>[n(y(a.channel),1)]),_:2},1024)],2),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"input")),3),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"output")),3),"claude"===l.channelType?(v(),x(f,{key:0},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cacheCreation")),3),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cacheRead")),3)],64)):"codex"===l.channelType?(v(),x(f,{key:1},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"reasoning")),3),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cached")),3),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)],64)):"gemini"===l.channelType?(v(),x(f,{key:2},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cached")),3),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)],64)):"opencode"===l.channelType||"omp"===l.channelType?(v(),x(f,{key:3},[C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"reasoning")),3),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cached")),3),C("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)],64)):(v(),x("div",{key:4,class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)),C("div",{class:T(["log-col col-time",`col-time-${l.channelType}`])},y(a.time),3)],64))],10,ia))),128))],512)])])])):s("",!0)])),Ya.value?(v(),x("div",{key:1,class:T(["locked-overlay",`locked-${l.channelType}`])},[C("div",ya,[C("div",ga,[r($(e),{size:48},{default:m(()=>[r($(Z))]),_:1})]),c[27]||(c[27]=C("h3",{class:"locked-title"},"该渠道已锁定",-1)),r($(X),{depth:"3",class:"locked-hint"},{default:m(()=>[...c[26]||(c[26]=[n(" 点击上方按钮解锁以查看内容 ",-1)])]),_:1})])],2)):s("",!0),yl("sessions")?(v(),u(ne,{key:2,visible:Za.value,"onUpdate:visible":c[1]||(c[1]=e=>Za.value=e),channel:l.channelType},null,8,["visible","channel"])):s("",!0)]);var h,g}}},[["__scopeId","data-v-a1598dde"]]),ka={class:"dashboard-container"},Ta=l({__name:"Home",setup(e){const{uiConfig:a,updateConfig:l,loadUIConfig:s}=S(),n=j(),{enabledKeys:c}=Q({platformStore:n,configRef:a}),o=_([]);function i(e=c.value){o.value=e.map(e=>({type:e}))}async function p(){const e=o.value.map(e=>e.type);i(e),await l("enabledCliPlatforms",e)}function h(e){const l=e?.detail?.enabledCliPlatforms;Array.isArray(l)&&(a.value={...a.value,enabledCliPlatforms:[...l]}),i()}return d(async()=>{window.addEventListener("enabled-cli-platforms-change",h),await Promise.all([s(),n.load()]),i()}),t(()=>{window.removeEventListener("enabled-cli-platforms-change",h)}),(e,a)=>(v(),x("div",ka,[r($(z),{modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=e=>o.value=e),class:"dashboard-grid","item-key":"type",animation:200,handle:".drag-handle",onEnd:p},{item:m(({element:e})=>[(v(),u(fa,{"channel-type":e.type,key:e.type},null,8,["channel-type"]))]),_:1},8,["modelValue"])]))}},[["__scopeId","data-v-5858e14d"]]);export{Ta as default};
@@ -1 +0,0 @@
1
- import{i as e,s as a,t}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as s,D as l,J as r,K as n,O as i,S as o,W as u,Z as c,_t as d,at as v,b as p,et as f,g as m,ht as y,m as h,mt as g,st as k,w as b,x as w}from"./vue-vendor-BqZbbXHA.js";import{s as _}from"./client-UDwXBP9i.js";import{O as C,S as j,Z as x,at as S,et as $,it as D,lt as O,o as z,r as M,tt as U}from"./icons-B2Vg-IOC.js";import{l as P}from"./light-Cp0t7v32.js";import{a as N,c as J,i as A,l as R,n as q,o as L,r as T,s as B,t as E}from"./McpFormDrawer-DPMnyt5L.js";import{n as W,t as F}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as I}from"./DrawerContent-ChXgZ1Xm.js";import{$ as Z,F as K,I as Q,M as G,N as H,Nt as V,Q as X,at as Y,ct as ee,dt as ae}from"./index-BFInlZGI.js";import{t as te}from"./clipboard-B46yyoz_.js";function se(e,a,t="操作失败",s=""){const l=function(e,a="操作失败"){return String(function(e){return e?"string"==typeof e?e:e.message||e.error||e.result?.message||e.result?.error||e.response?.data?.message||e.response?.data?.error||e.response?.data?.result?.message||e.response?.data?.result?.error||e.data?.message||e.data?.error||"":""}(e)||"").trim()||a}(a,t),r=function(e){return e?.hint||e?.data?.hint||e?.result?.hint||e?.result?.data?.hint||e?.response?.data?.hint||e?.response?.data?.result?.hint||e?.response?.data?.result?.data?.hint||null}(a),n=l.split(/\r?\n/).map(e=>e.trim()).filter(Boolean),i=[r?.title,...Array.isArray(r?.details)?r.details:[]].map(e=>String(e||"").trim()).filter(Boolean).filter(e=>!n.includes(e)),o=[...n,...i],u=o[0]||t,c=o.slice(1),d=s?`${s}${u}`:u;return e.error(d,{duration:c.length>0?8e3:5e3}),c.length>0&&e.warning(c.join("\n"),{duration:12e3,closable:!0}),l}var le={class:"drawer-header"},re={class:"header-title"},ne={class:"header-actions"},ie={class:"mcp-container"},oe={class:"stats-bar"},ue={class:"stats-text"},ce={class:"server-list"},de={key:0,class:"empty-state"},ve=["onClick","onDragstart","onDragover","onDrop"],pe={class:"card-header"},fe={class:"card-title"},me={class:"server-name"},ye={class:"card-actions"},he={key:0,class:"card-desc"},ge={key:1,class:"card-tags"},ke={class:"card-apps"},be={class:"app-label"},we={class:"paste-modal-content"},_e={key:0,class:"parse-error"},Ce={class:"paste-modal-footer"},je={class:"batch-modal-content"},xe={class:"batch-actions"},Se={class:"batch-selected"},$e={class:"batch-list"},De={class:"batch-item-info"},Oe={class:"batch-item-header"},ze={class:"batch-item-name"},Me={class:"batch-item-detail"},Ue={key:0},Pe={key:1,class:"batch-args"},Ne={class:"batch-modal-footer"},Je={class:"export-modal-content"},Ae={class:"export-info"},Re={class:"export-modal-footer"},qe=t({__name:"McpDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(t,{emit:qe}){const{drawerWidth:Le}=F(720),Te=t,Be=qe,Ee=p({get:()=>Te.visible,set:e=>Be("update:visible",e)}),We=k(!1),Fe=k({}),Ie=k(!1),Ze=k(null),Ke=v({}),Qe=k(null),Ge=k(null),He=k(!1),Ve=k(""),Xe=k(""),Ye=k(!1),ea=k(!1),aa=k([]),ta=k([]),sa=k(!1),la=k(!1),ra=k({format:"",content:"",filename:""}),na=k(!1),ia=k(null),oa=p(()=>Object.values(Fe.value).sort((e,a)=>void 0!==e.order&&void 0!==a.order?e.order-a.order:void 0!==e.order?-1:void 0!==a.order?1:(a.updatedAt||0)-(e.updatedAt||0))),ua=p(()=>oa.value.length),ca=p(()=>Object.keys(Fe.value)),{byCapability:da}=V(),va=p(()=>da("mcp")),pa=p(()=>{const e=oa.value;return Object.fromEntries(va.value.map(a=>[a.key,e.filter(e=>!0===e.apps?.[a.key]).length]))}),fa=p({get:()=>{const e=aa.value.filter(e=>!ka(e.id)).map(e=>e.id);return e.length>0&&e.every(e=>ta.value.includes(e))},set:()=>{}}),ma=p(()=>va.value.map(e=>({label:`同步 ${e.label||e.title||e.key} 已有配置`,key:e.key}))),ya=p(()=>[{label:"导出为 JSON (通用)",key:"json"},...va.value.filter(e=>_(e.key)).map(e=>({label:`导出为 ${e.label||e.title||e.key} 格式`,key:e.key}))]);function ha(e){return"online"===e.status?`在线 - ${ga(e.lastChecked)}`:"error"===e.status?`异常 - ${ga(e.lastChecked)}`:"testing"===e.status?"测试中...":"未测试"}function ga(e){return e?new Date(e).toLocaleString("zh-CN",{hour:"2-digit",minute:"2-digit"}):""}function ka(e){return ca.value.includes(e)}async function ba(){We.value=!0;try{const e=await A();e.success&&(Fe.value=e.servers)}catch(e){H.error("加载 MCP 服务器失败")}finally{We.value=!1}}async function wa(e){try{const a=await N(e);a.success&&(H.success(a.message),await ba())}catch(a){H.error("同步失败")}}async function _a(e){try{const a=await T(e);a.success&&(ra.value={format:a.format,content:a.content,filename:a.filename},la.value=!0)}catch(a){H.error("导出失败")}}async function Ca(){try{if("manual"===(await te(ra.value.content))?.method)return void H.warning("自动复制失败,已弹出手动复制框");H.success("已复制到剪贴板")}catch{H.error("复制失败")}}function ja(){const e=new Blob([ra.value.content],{type:"text/plain"}),a=URL.createObjectURL(e),t=document.createElement("a");t.href=a,t.download=ra.value.filename,t.click(),URL.revokeObjectURL(a),H.success("下载成功")}function xa(){Qe.value=null}function Sa(){Ze.value=null,Ie.value=!0}function $a(){ba()}function Da(){Xe.value="",Ye.value=!0;try{let t,s=Ve.value.trim();if(!s)return Xe.value="请输入配置内容",void(Ye.value=!1);s.startsWith("{")||s.startsWith("[")||(s=s.replace(/^[\s,]+/,""),s=s.replace(/[\s,]+$/,""),s=`{${s}}`);try{t=JSON.parse(s)}catch(e){let l=s.replace(/\}\s*"/g,'}, "');try{t=JSON.parse(l)}catch(a){return Xe.value="JSON 格式错误:"+e.message,void(Ye.value=!1)}}const l=[];let r=null;if(t.mcpServers&&"object"==typeof t.mcpServers)r=t.mcpServers;else if(t.mcp_servers&&"object"==typeof t.mcp_servers)r=t.mcp_servers;else if(t.command||t.url)r={"new-server":t};else{if(!Object.keys(t).some(e=>{const a=t[e];return a&&"object"==typeof a&&(a.command||a.url||a.args)}))return Xe.value="未找到有效的 MCP 服务器配置,请检查 JSON 格式",void(Ye.value=!1);r=t}for(const[e,a]of Object.entries(r)){if(!a||"object"!=typeof a)continue;if(!a.command&&!a.url&&!a.args)continue;const t={id:e,name:e,apps:Object.fromEntries(va.value.map((e,a)=>[e.key,0===a])),server:{type:a.type||"stdio"}};a.command&&(t.server.command=a.command,a.args&&(t.server.args=Array.isArray(a.args)?a.args:[a.args]),a.env&&"object"==typeof a.env&&(t.server.env=a.env)),a.url&&(t.server.type=a.type||"streamable_http",t.server.url=a.url,a.headers&&"object"==typeof a.headers&&(t.server.headers=a.headers)),l.push(t)}if(0===l.length)return Xe.value="未找到有效的 MCP 服务器配置",void(Ye.value=!1);1!==l.length||ka(l[0].id)?(aa.value=l,ta.value=l.filter(e=>!ka(e.id)).map(e=>e.id),ea.value=!0,He.value=!1):(Ze.value=l[0],Ie.value=!0,He.value=!1,Ve.value="")}catch(t){Xe.value="解析失败:"+t.message}finally{Ye.value=!1}}function Oa(e){ta.value=e?aa.value.filter(e=>!ka(e.id)).map(e=>e.id):[]}async function za(){if(0===ta.value.length)return;sa.value=!0;let e=0,a=0;try{for(const s of ta.value){const l=aa.value.find(e=>e.id===s);if(l)try{await L(l),e++}catch(t){a++}}e>0?(H.success(`成功导入 ${e} 个服务器${a>0?`,${a} 个失败`:""}`),await ba()):H.error("导入失败"),ea.value=!1,Ve.value="",aa.value=[],ta.value=[]}catch(t){H.error("批量导入失败")}finally{sa.value=!1}}return c(()=>Te.visible,e=>{e&&ba()},{immediate:!0}),c(He,e=>{e||(Xe.value="")}),(t,c)=>{const v=r("McpServerDetailDrawer");return u(),b(m,null,[i(g(W),{show:Ee.value,"onUpdate:show":c[2]||(c[2]=e=>Ee.value=e),width:g(Le),placement:"right","show-mask":!0},{default:f(()=>[i(g(I),{title:"MCP 服务器管理",closable:"","native-scrollbar":!1},{header:f(()=>[w("div",le,[w("div",re,[i(g(e),{size:20,class:"header-icon"},{default:f(()=>[i(g(x))]),_:1}),c[13]||(c[13]=w("span",null,"MCP 服务器管理",-1))]),w("div",ne,[i(g(X),{trigger:"click",options:ya.value,onSelect:_a},{default:f(()=>[i(g(a),{size:"small",quaternary:""},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g($))]),_:1})]),default:f(()=>[c[14]||(c[14]=l(" 导出 ",-1))]),_:1})]),_:1},8,["options"]),i(g(a),{size:"small",type:"primary",ghost:"",onClick:c[0]||(c[0]=e=>He.value=!0)},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g(O))]),_:1})]),default:f(()=>[c[15]||(c[15]=l(" 粘贴解析 ",-1))]),_:1}),i(g(a),{size:"small",type:"primary",onClick:Sa},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g(U))]),_:1})]),default:f(()=>[c[16]||(c[16]=l(" 添加 ",-1))]),_:1})])])]),default:f(()=>[w("div",ie,[w("div",oe,[w("span",ue,[l(" 共 "+d(ua.value)+" 个服务器 ",1),(u(!0),b(m,null,n(va.value,e=>(u(),b(m,{key:e.key},[l(" · "+d(e.label||e.title||e.key)+": "+d(pa.value[e.key]||0),1)],64))),128))]),i(g(X),{trigger:"click",options:ma.value,onSelect:wa},{default:f(()=>[i(g(a),{size:"tiny",quaternary:""},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g(z))]),_:1})]),default:f(()=>[c[17]||(c[17]=l(" 同步 ",-1))]),_:1})]),_:1},8,["options"])]),w("div",ce,[i(g(Q),{show:We.value},{default:f(()=>[0!==oa.value.length||We.value?(u(),b("div",{key:1,class:"server-cards",ref_key:"serverCardsRef",ref:Ge},[(u(!0),b(m,null,n(oa.value,(t,r)=>(u(),b("div",{key:t.id,class:y(["server-card",{dragging:Qe.value===r}]),draggable:"true",onClick:e=>function(e){ia.value=e,na.value=!0}(t),onDragstart:e=>function(e,a){Qe.value=a,e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",a)}(e,r),onDragend:xa,onDragover:e=>{return(a=e).preventDefault(),void(a.dataTransfer.dropEffect="move");var a},onDrop:e=>async function(e,a){e.preventDefault();const t=Qe.value;if(null===t||t===a)return void(Qe.value=null);const s=[...oa.value],[l]=s.splice(t,1);s.splice(a,0,l);const r=s.map(e=>e.id);try{await R(r),await ba()}catch(n){H.error("排序保存失败")}Qe.value=null}(e,r)},[w("div",pe,[w("div",fe,[i(g(e),{class:"drag-handle",size:14},{default:f(()=>[i(g(j))]),_:1}),w("span",me,d(t.name||t.id),1),t.server?.type?(u(),o(g(ae),{key:0,size:"tiny",bordered:!1,type:"info"},{default:f(()=>[l(d(t.server.type),1)]),_:2},1024)):s("",!0),t.status?(u(),o(g(Z),{key:1},{trigger:f(()=>[w("span",{class:y(["status-dot",{online:"online"===t.status,error:"error"===t.status,testing:"testing"===t.status}])},null,2)]),default:f(()=>[l(" "+d(ha(t)),1)]),_:2},1024)):s("",!0)]),w("div",ye,[i(g(Z),null,{trigger:f(()=>[i(g(a),{quaternary:"",size:"tiny",loading:Ke[t.id],onClick:h(e=>async function(e){Ke[e.id]=!0,Fe.value[e.id].status="testing";try{const a=await B(e.id);if(a.success){const t=a.result;Fe.value[e.id].status=t.success?"online":"error",Fe.value[e.id].lastChecked=Date.now(),t.success?H.success(`${e.name||e.id}: ${t.message} (${t.duration}ms)`):se(H,t,"测试失败",`${e.name||e.id}: `)}}catch(a){Fe.value[e.id].status="error",se(H,a,"测试失败",`${e.name||e.id}: `)}finally{Ke[e.id]=!1}}(t),["stop"])},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g(C))]),_:1})]),_:1},8,["loading","onClick"])]),default:f(()=>[c[20]||(c[20]=l(" 测试连接 ",-1))]),_:2},1024),i(g(a),{quaternary:"",size:"tiny",onClick:h(e=>function(e){Ze.value=e,Ie.value=!0}(t),["stop"])},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g(D))]),_:1})]),_:1},8,["onClick"]),i(g(a),{quaternary:"",size:"tiny",onClick:h(e=>function(e){G.warning({title:"删除确认",content:`确定要删除 MCP 服务器 "${e.name||e.id}" 吗?此操作将从所有平台配置中移除该服务器。`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{try{(await q(e.id)).success&&(delete Fe.value[e.id],H.success("删除成功"))}catch(a){H.error("删除失败")}}})}(t),["stop"])},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g(M))]),_:1})]),_:1},8,["onClick"])])]),t.description?(u(),b("p",he,d(t.description),1)):s("",!0),t.tags?.length?(u(),b("div",ge,[(u(!0),b(m,null,n(t.tags.slice(0,3),e=>(u(),o(g(ae),{key:e,size:"tiny",bordered:!1},{default:f(()=>[l(d(e),1)]),_:2},1024))),128))])):s("",!0),w("div",ke,[(u(!0),b(m,null,n(va.value,e=>(u(),b("label",{key:e.key,class:"app-toggle",onClick:c[1]||(c[1]=h(()=>{},["stop"]))},[i(g(K),{size:"small",value:!0===t.apps?.[e.key],"onUpdate:value":a=>async function(e,a,t){try{const s=await J(e,a,t);s.success&&(Fe.value[e]=s.server,H.success(`已${t?"启用":"禁用"} ${a}`))}catch(s){H.error("操作失败")}}(t.id,e.key,a)},null,8,["value","onUpdate:value"]),w("span",be,d(e.label||e.title||e.key),1)]))),128))])],42,ve))),128))],512)):(u(),b("div",de,[i(g(e),{size:48,class:"empty-icon"},{default:f(()=>[i(g(x))]),_:1}),c[18]||(c[18]=w("p",{class:"empty-title"},"暂无 MCP 服务器",-1)),c[19]||(c[19]=w("p",{class:"empty-desc"},'点击上方"添加"按钮添加 MCP 服务器,或"粘贴解析"快速导入',-1))]))]),_:1},8,["show"])])])]),_:1})]),_:1},8,["show","width"]),i(E,{visible:Ie.value,"onUpdate:visible":c[3]||(c[3]=e=>Ie.value=e),"editing-server":Ze.value,"existing-ids":ca.value,platforms:va.value,onSaved:$a},null,8,["visible","editing-server","existing-ids","platforms"]),i(g(P),{show:He.value,"onUpdate:show":c[6]||(c[6]=e=>He.value=e),preset:"card",title:"粘贴 MCP 配置",style:{width:"600px","max-width":"90vw"}},{footer:f(()=>[w("div",Ce,[i(g(a),{onClick:c[5]||(c[5]=e=>He.value=!1)},{default:f(()=>[...c[23]||(c[23]=[l("取消",-1)])]),_:1}),i(g(a),{type:"primary",onClick:Da,loading:Ye.value},{default:f(()=>[...c[24]||(c[24]=[l(" 解析配置 ",-1)])]),_:1},8,["loading"])])]),default:f(()=>[w("div",we,[c[21]||(c[21]=w("p",{class:"paste-hint"}," 粘贴 JSON 格式的 MCP 配置,支持单个或批量导入。格式示例: ",-1)),c[22]||(c[22]=w("pre",{class:"paste-example"},'{\n "mcpServers": {\n "服务器名称": {\n "type": "streamable_http",\n "url": "https://example.com/mcp"\n }\n }\n}',-1)),i(g(ee),{value:Ve.value,"onUpdate:value":c[4]||(c[4]=e=>Ve.value=e),type:"textarea",placeholder:"在此粘贴 JSON 配置...",rows:8,status:Xe.value?"error":void 0},null,8,["value","status"]),Xe.value?(u(),b("p",_e,d(Xe.value),1)):s("",!0)])]),_:1},8,["show"]),i(g(P),{show:ea.value,"onUpdate:show":c[9]||(c[9]=e=>ea.value=e),preset:"card",title:"选择要导入的 MCP 服务器",style:{width:"650px","max-width":"90vw"}},{footer:f(()=>[w("div",Ne,[i(g(a),{onClick:c[8]||(c[8]=e=>ea.value=!1)},{default:f(()=>[...c[26]||(c[26]=[l("取消",-1)])]),_:1}),i(g(a),{type:"primary",disabled:0===ta.value.length,loading:sa.value,onClick:za},{default:f(()=>[l(" 导入选中 ("+d(ta.value.length)+") ",1)]),_:1},8,["disabled","loading"])])]),default:f(()=>[w("div",je,[w("div",xe,[i(g(Y),{checked:fa.value,"onUpdate:checked":[c[7]||(c[7]=e=>fa.value=e),Oa]},{default:f(()=>[l(" 全选 ("+d(aa.value.length)+") ",1)]),_:1},8,["checked"]),w("span",Se,"已选择 "+d(ta.value.length)+" 个",1)]),w("div",$e,[(u(!0),b(m,null,n(aa.value,e=>(u(),b("div",{key:e.id,class:y(["batch-item",{selected:ta.value.includes(e.id),exists:ka(e.id)}])},[i(g(Y),{checked:ta.value.includes(e.id),disabled:ka(e.id),"onUpdate:checked":a=>function(e,a){if(a)ta.value.includes(e)||ta.value.push(e);else{const a=ta.value.indexOf(e);a>-1&&ta.value.splice(a,1)}}(e.id,a)},null,8,["checked","disabled","onUpdate:checked"]),w("div",De,[w("div",Oe,[w("span",ze,d(e.id),1),ka(e.id)?(u(),o(g(ae),{key:0,size:"tiny",type:"warning"},{default:f(()=>[...c[25]||(c[25]=[l("已存在",-1)])]),_:1})):s("",!0),e.server?.type?(u(),o(g(ae),{key:1,size:"tiny",bordered:!1,type:"info"},{default:f(()=>[l(d(e.server.type),1)]),_:2},1024)):s("",!0)]),w("div",Me,[e.server?.command?(u(),b("span",Ue,d(e.server.command),1)):s("",!0),e.server?.args?.length?(u(),b("span",Pe,d(e.server.args.slice(0,3).join(" "))+d(e.server.args.length>3?"...":""),1)):s("",!0)])])],2))),128))])])]),_:1},8,["show"]),i(g(P),{show:la.value,"onUpdate:show":c[11]||(c[11]=e=>la.value=e),preset:"card",title:"导出 MCP 配置",style:{width:"650px","max-width":"90vw"}},{footer:f(()=>[w("div",Re,[i(g(a),{onClick:c[10]||(c[10]=e=>la.value=!1)},{default:f(()=>[...c[27]||(c[27]=[l("关闭",-1)])]),_:1}),i(g(a),{onClick:Ca},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g(S))]),_:1})]),default:f(()=>[c[28]||(c[28]=l(" 复制 ",-1))]),_:1}),i(g(a),{type:"primary",onClick:ja},{icon:f(()=>[i(g(e),null,{default:f(()=>[i(g($))]),_:1})]),default:f(()=>[c[29]||(c[29]=l(" 下载 ",-1))]),_:1})])]),default:f(()=>[w("div",Je,[w("div",Ae,[w("span",null,"格式: "+d(ra.value.format),1),w("span",null,"文件名: "+d(ra.value.filename),1)]),i(g(ee),{value:ra.value.content,type:"textarea",readonly:"",rows:12,class:"export-content"},null,8,["value"])])]),_:1},8,["show"]),i(v,{visible:na.value,"onUpdate:visible":c[12]||(c[12]=e=>na.value=e),server:ia.value},null,8,["visible","server"])],64)}}},[["__scopeId","data-v-0b241016"]]);export{qe as default};
@@ -1 +0,0 @@
1
- import{i as e,s as a,t as l}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as t,D as s,K as n,O as i,S as r,V as o,W as u,Z as c,_t as p,b as d,et as v,g as m,ht as y,m as f,mt as g,p as h,r as k,st as b,w,x as P}from"./vue-vendor-BqZbbXHA.js";import{n as _}from"./client-UDwXBP9i.js";import{r as j,s as U,t as C}from"./platforms-CBkB45JP.js";import{A as $,B as L,Ft as T,G as I,L as z,Mt as x,Z as O,_ as S,ft as B,o as H,tt as A,w as G}from"./icons-B2Vg-IOC.js";import{t as R}from"./use-message-DoLM8C1C.js";import{l as M}from"./light-Cp0t7v32.js";import{c as D,n as N,s as K,t as E}from"./AssetPathField-BZI9NvEr.js";import{n as q,t as V}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as F}from"./DrawerContent-ChXgZ1Xm.js";import{F as Q,I as W,N as Z,Nt as J,O as X,ct as Y,dt as ee,k as ae,lt as le,nt as te,pt as se}from"./index-BFInlZGI.js";import{t as ne}from"./markdown-u082bbtj.js";import{n as ie,t as re}from"./skill-repo-input-B_fkGlUK.js";function oe(e={},a={}){return{...e,...a.cwd?{cwd:a.cwd}:{},...a.scope?{scope:a.scope}:{}}}async function ue(e,a,l="claude",t="",s={},n={}){const i=oe({platform:l},s);return t?(i.source=t,Object.assign(i,{pluginId:n.pluginId||t,name:n.name,pluginKind:n.pluginKind,marketplace:n.marketplace,installSource:n.installSource,version:n.version,description:n.description,resourceTypes:n.resourceTypes})):(i.directory=e,i.repo=a),(await _.post("/plugins/install",i)).data}async function ce(e,a="claude",l={}){return(await _.post("/plugins/repos",oe({...e,platform:a},l))).data}async function pe(e,a={},l="claude"){return(await _.put("/plugins/repos/auth",{id:e.id||"",owner:e.owner||"",name:e.name||"",token:a.token||"",clearToken:!!a.clearToken,platform:l})).data}async function de(e="claude",a={}){return(await _.post("/plugins/repos/sync",oe({platform:e},a))).data}var ve={class:"asset-card-main"},me={class:"asset-card-top"},ye={class:"asset-card-title-stack"},fe={class:"asset-card-title-row"},ge={class:"asset-name"},he={class:"asset-tags"},ke={key:0,class:"asset-description"},be={class:"asset-meta"},we={class:"asset-meta-item mono"},Pe=["href"],_e={__name:"PluginCard",props:{plugin:{type:Object,required:!0},readonly:{type:Boolean,default:!1},canInstall:{type:Boolean,default:!0},canUninstall:{type:Boolean,default:!0},installing:{type:Boolean,default:!1},uninstalling:{type:Boolean,default:!1}},emits:["click","install","uninstall"],setup(e){function l(e){return!!(e?.installSource||e?.repoOwner||e?.repoProjectPath||e?.repoLocalPath)}return(n,i)=>{return u(),w("div",{class:y(["plugin-card asset-card",{"is-installed":e.plugin.installed,"is-disabled":e.readonly}]),onClick:i[4]||(i[4]=a=>n.$emit("click",e.plugin))},[P("div",ve,[P("div",me,[P("div",ye,[P("div",fe,[P("span",{class:y(["asset-status-dot",{active:e.plugin.installed}])},null,2),P("span",ge,p(e.plugin.name),1)]),P("div",he,[e.plugin.installed?(u(),r(g(ee),{key:0,type:"success",size:"tiny",bordered:!1},{default:v(()=>[...i[5]||(i[5]=[s("已安装",-1)])]),_:1})):t("",!0),e.readonly?(u(),r(g(ee),{key:1,type:"default",size:"tiny",bordered:!1},{default:v(()=>[...i[6]||(i[6]=[s("只读",-1)])]),_:1})):t("",!0),e.plugin.scope?(u(),r(g(ee),{key:2,type:"info",size:"tiny",bordered:!1},{default:v(()=>[s(p("project"===e.plugin.scope?"项目":"全局"),1)]),_:1})):t("",!0),"extension"===e.plugin.pluginKind?(u(),r(g(ee),{key:3,type:"default",size:"tiny",bordered:!1},{default:v(()=>[...i[7]||(i[7]=[s("扩展",-1)])]),_:1})):t("",!0),"skill-bundle"===e.plugin.pluginKind?(u(),r(g(ee),{key:4,type:"warning",size:"tiny",bordered:!1},{default:v(()=>[...i[8]||(i[8]=[s("技能包插件",-1)])]),_:1})):t("",!0),"gitlab"===e.plugin.repoProvider?(u(),r(g(ee),{key:5,type:"info",size:"tiny",bordered:!1},{default:v(()=>[...i[9]||(i[9]=[s("GitLab",-1)])]),_:1})):"local"===e.plugin.repoProvider?(u(),r(g(ee),{key:6,type:"info",size:"tiny",bordered:!1},{default:v(()=>[...i[10]||(i[10]=[s("本地",-1)])]),_:1})):e.plugin.repoOwner?(u(),r(g(ee),{key:7,type:"info",size:"tiny",bordered:!1},{default:v(()=>[s(p(e.plugin.repoOwner),1)]),_:1})):t("",!0)])])]),e.plugin.description?(u(),w("div",ke,p((c=e.plugin.description,d=120,c?.length>d?c.slice(0,d)+"...":c)),1)):t("",!0),P("div",be,[P("span",we,p(e.plugin.directory),1),e.plugin.readmeUrl?(u(),w("a",{key:0,class:"asset-link",href:e.plugin.readmeUrl,target:"_blank",onClick:i[0]||(i[0]=f(()=>{},["stop"]))},p((o=e.plugin,"gitlab"===o?.repoProvider?"GitLab":"local"===o?.repoProvider?"本地":"GitHub")),9,Pe)):t("",!0)])]),e.readonly?t("",!0):(u(),w("div",{key:0,class:"asset-card-actions",onClick:i[3]||(i[3]=f(()=>{},["stop"]))},[e.plugin.installed&&e.canUninstall?(u(),r(g(a),{key:0,size:"small",tertiary:"",type:"error",loading:e.uninstalling,focusable:!1,onClick:i[1]||(i[1]=a=>n.$emit("uninstall",e.plugin))},{default:v(()=>[...i[11]||(i[11]=[s("卸载",-1)])]),_:1},8,["loading"])):e.canInstall?(u(),r(g(a),{key:1,size:"small",type:"primary",loading:e.installing,disabled:!l(e.plugin),focusable:!1,onClick:i[2]||(i[2]=a=>n.$emit("install",e.plugin))},{default:v(()=>[...i[12]||(i[12]=[s("安装",-1)])]),_:1},8,["loading","disabled"])):t("",!0)]))],2);var o,c,d}}},je={class:"repo-manager"},Ue={class:"repo-list"},Ce={class:"repo-main"},$e={class:"repo-info"},Le={class:"repo-name-row"},Te={class:"repo-name"},Ie={class:"repo-branch"},ze={key:0,class:"repo-auth-hint"},xe={class:"repo-actions"},Oe={key:0,class:"empty-hint"},Se={class:"add-repo"},Be={class:"add-title"},He={class:"add-form"},Ae={class:"add-hint"},Ge={class:"tips"},Re={key:0,class:"recommended"},Me={class:"recommended-list"},De=["onClick"],Ne={class:"rec-info"},Ke={class:"rec-name"},Ee={class:"rec-desc"},qe={key:0,class:"auth-manager"},Ve={class:"auth-meta"},Fe={class:"auth-meta-row"},Qe={class:"auth-value"},We={class:"auth-meta-row"},Ze={class:"auth-value"},Je={class:"auth-meta-row"},Xe={class:"auth-value"},Ye={class:"auth-actions"},ea=l({__name:"PluginRepoManager",props:{visible:Boolean,platform:{type:String,default:"claude"},projectPath:{type:String,default:""},capabilities:{type:Object,default:()=>({})}},emits:["update:visible","updated"],setup(l,{emit:f}){const k=l,j=f,U=d({get:()=>k.visible,set:e=>j("update:visible",e)}),C=b([]),$=b(!1),L=b(!1),I=b(!1),z=b(!1),x=b(null),O=b(!1),S=b(!1),B=b({token:""}),A=b({input:"",branch:"main"}),G=d(()=>"native-marketplace"===k.capabilities.repositoryMode),R=d(()=>({...k.projectPath?{cwd:k.projectPath}:{}})),D=d(()=>x.value?("gitlab"===x.value.provider?"GitLab":"GitHub")+" 仓库认证":"仓库认证"),N=d(()=>"opencode"===k.platform?[{owner:"Tommertom",name:"opencode-plugin-marketplace",url:"https://github.com/Tommertom/opencode-plugin-marketplace",description:"OpenCode 插件市场",branch:"main"},{owner:"avifenesh",name:"awesome-slash",url:"https://github.com/avifenesh/awesome-slash",description:"Awesome Slash 命令集",branch:"main"},{owner:"NeoLabHQ",name:"context-engineering-kit",url:"https://github.com/NeoLabHQ/context-engineering-kit",description:"上下文工程工具包",branch:"master"},{owner:"awesome-opencode",name:"awesome-opencode",url:"https://github.com/awesome-opencode/awesome-opencode",description:"OpenCode 生态聚合",branch:"main"},{owner:"sst",name:"opencode",url:"https://github.com/sst/opencode",description:"OpenCode 官方仓库",branch:"dev"}]:"codex"===k.platform||"omp"===k.platform?[]:[{owner:"anthropics",name:"claude-plugins-official",url:"https://github.com/anthropics/claude-plugins-official",description:"官方插件库",branch:"main"}]),K=d(()=>G.value?Boolean(A.value.input.trim()):!!ie(A.value.input.trim()));function E(e){const a=e.provider||(e.localPath?"local":e.projectPath?"gitlab":"github"),l=e.branch||"main",t=re(e.directory);return"local"===a?`local:${e.localPath||""}::${t}`:"gitlab"===a?`gitlab:${e.host||"https://gitlab.com"}::${e.projectPath||""}::${l}::${t}`:`github:${e.host||"https://github.com"}::${e.owner||""}/${e.name||""}::${l}::${t}`}function q(e){return"omp-marketplace"===e.provider?e.label||e.name||e.id:"local"===e.provider?e.localPath||e.name||"本地仓库":"gitlab"===e.provider&&e.projectPath||[e.owner,e.name].filter(Boolean).join("/")}function V(e){if("omp-marketplace"===e.provider)return e.sourceUri||e.source||"";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 F(e){return"github"===e?.provider||"gitlab"===e?.provider}function J(e){return F(e)?e.hasToken?`仓库 Token: ${e.tokenPreview||"已配置"}`:"gitlab"===e.provider?"未配置仓库 Token,将回退到全局 Token、glab 或 git credential":"未配置仓库 Token,可选配置后优先用于 GitHub API 访问":""}function X(){z.value=!1,x.value=null,B.value.token="",O.value=!1,S.value=!1}async function ae(){$.value=!0;try{const e=await async function(e="claude",a={}){return(await _.get("/plugins/repos",{params:oe({platform:e},a)})).data}(k.platform,R.value);e.success&&(C.value=e.repos||[])}catch(e){Z.error("加载仓库失败: "+e.message)}finally{$.value=!1}}async function te(){I.value=!0;try{const e=await de(k.platform,R.value);e.success&&(Array.isArray(e.repos)&&(C.value=e.repos),Z.success("仓库同步成功"),j("updated"))}catch(e){Z.error("同步失败: "+e.message)}finally{I.value=!1}}async function se(){if(!K.value)return;const e=G.value?{source:A.value.input.trim()}:ie(A.value.input.trim());L.value=!0;try{const a=await ce({...e,branch:A.value.branch||"main",enabled:!0},k.platform,R.value);a.success&&(C.value=a.repos,A.value.input="",A.value.branch="main",Z.success("仓库添加成功"),j("updated"))}catch(a){Z.error("添加失败: "+a.message)}finally{L.value=!1}}async function ne(e){try{const a=await async function(e,a="claude",l={}){return(await _.delete("/plugins/repos",{params:oe({platform:a,id:e.id||"",owner:e.owner||"",name:e.name||""},l)})).data}(e,k.platform,R.value);a.success&&(C.value=a.repos,Z.success("仓库已删除"),j("updated"))}catch(a){Z.error("删除失败: "+a.message)}}async function ue(e,a){try{const l=await async function(e,a,l="claude"){return(await _.put("/plugins/repos/toggle",{id:e.id||"",owner:e.owner||"",name:e.name||"",enabled:a,platform:l})).data}(e,a,k.platform);l.success&&(C.value=l.repos,j("updated"))}catch(l){Z.error("操作失败: "+l.message)}}async function ve(){const e=x.value,a=B.value.token.trim();if(e&&a){O.value=!0;try{const l=await pe(e,{token:a},k.platform);l.success&&(C.value=l.repos||[],Z.success("仓库 Token 已保存"),j("updated"),X())}catch(l){Z.error("保存 Token 失败: "+l.message)}finally{O.value=!1}}}async function me(){const e=x.value;if(e){S.value=!0;try{const a=await pe(e,{clearToken:!0},k.platform);a.success&&(C.value=a.repos||[],Z.success("仓库 Token 已清除"),j("updated"),X())}catch(a){Z.error("清除 Token 失败: "+a.message)}finally{S.value=!1}}}function ye(e){const a=E(e);return C.value.some(e=>E(e)===a)}function fe(){X(),j("update:visible",!1)}return c(()=>k.visible,e=>{e&&ae()}),c(()=>k.platform,()=>{k.visible&&ae()}),o(()=>{k.visible&&ae()}),(o,c)=>(u(),w(m,null,[i(g(M),{show:U.value,"onUpdate:show":c[2]||(c[2]=e=>U.value=e),preset:"card",title:G.value?"OMP Marketplace 管理":"插件仓库管理",bordered:!1,closable:!0,style:{width:"480px","max-width":"90vw"},onClose:fe},{"header-extra":v(()=>[i(g(a),{type:"primary",size:"small",loading:I.value,focusable:!1,onClick:te},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(H))]),_:1})]),default:v(()=>[s(" "+p(G.value?"刷新":"同步"),1)]),_:1},8,["loading"])]),default:v(()=>[P("div",je,[P("div",Ue,[i(g(W),{show:$.value},{default:v(()=>[(u(!0),w(m,null,n(C.value,e=>(u(),w("div",{key:e.id||`${e.owner}/${e.name}/${e.localPath||""}`,class:"repo-item"},[P("div",Ce,[!1!==l.capabilities.repositoryToggle?(u(),r(g(Q),{key:0,value:e.enabled,size:"small","onUpdate:value":a=>ue(e,a)},null,8,["value","onUpdate:value"])):t("",!0),P("div",$e,[P("div",Le,[P("div",Te,p(q(e)),1),!1!==l.capabilities.repositoryAuth&&F(e)?(u(),r(g(ee),{key:0,size:"tiny",type:e.hasToken?"success":"default",bordered:!1},{default:v(()=>[s(p(e.hasToken?"已配 Token":"未配 Token"),1)]),_:2},1032,["type"])):t("",!0)]),P("div",Ie,p(V(e)),1),!1!==l.capabilities.repositoryAuth&&F(e)?(u(),w("div",ze,p(J(e)),1)):t("",!0)])]),P("div",xe,[!1!==l.capabilities.repositoryAuth&&F(e)?(u(),r(g(a),{key:0,text:"",type:"primary",size:"tiny",focusable:!1,onClick:a=>function(e){F(e)&&(x.value=e,B.value.token="",z.value=!0)}(e)},{default:v(()=>[...c[5]||(c[5]=[s(" 认证 ",-1)])]),_:1},8,["onClick"])):t("",!0),i(g(a),{text:"",type:"error",size:"tiny",focusable:!1,onClick:a=>ne(e)},{default:v(()=>[...c[6]||(c[6]=[s(" 删除 ",-1)])]),_:1},8,["onClick"])])]))),128)),0===C.value.length?(u(),w("div",Oe," 暂无仓库,请添加 ")):t("",!0)]),_:1},8,["show"])]),P("div",Se,[P("div",Be,p(G.value?"添加 Marketplace source":"添加仓库"),1),P("div",He,[i(g(Y),{value:A.value.input,"onUpdate:value":c[0]||(c[0]=e=>A.value.input=e),placeholder:G.value?"Marketplace source(owner/repo、URL 或本地路径)":"GitHub/GitLab 仓库地址,或本地路径",size:"small",class:"repo-input",onKeyup:h(se,["enter"])},null,8,["value","placeholder"]),G.value?t("",!0):(u(),r(g(Y),{key:0,value:A.value.branch,"onUpdate:value":c[1]||(c[1]=e=>A.value.branch=e),placeholder:"分支",size:"small",class:"branch-input"},null,8,["value"])),i(g(a),{type:"primary",size:"small",disabled:!K.value,loading:L.value,focusable:!1,onClick:se},{default:v(()=>[...c[7]||(c[7]=[s(" 添加 ",-1)])]),_:1},8,["disabled","loading"])]),P("div",Ae,p(G.value?"source 将原样传递给 omp plugin marketplace add":"支持 `owner/repo`、GitHub/GitLab URL 或 SSH、以及本地路径"),1)]),P("div",Ge,[i(g(le),{type:"info",bordered:!1,size:"small"},{default:v(()=>[s(p(G.value?"OMP Marketplace 由原生 CLI 管理;不支持单独启停、branch 或仓库 Token。":"支持 GitHub、GitLab 和本地仓库路径;远程仓库可按仓库单独配置 Token。"),1)]),_:1})]),N.value.length>0?(u(),w("div",Re,[c[9]||(c[9]=P("div",{class:"recommended-title"},"推荐仓库",-1)),P("div",Me,[(u(!0),w(m,null,n(N.value,a=>(u(),w("div",{key:a.url||`${a.owner}/${a.name}`,class:y(["recommended-item",{added:ye(a)}]),onClick:e=>!ye(a)&&async function(e){L.value=!0;try{const a=await ce({owner:e.owner,name:e.name,url:e.url,branch:e.branch,enabled:!0},k.platform);a.success&&(C.value=a.repos,Z.success("仓库添加成功"),j("updated"))}catch(a){Z.error("添加失败: "+a.message)}finally{L.value=!1}}(a)},[P("div",Ne,[P("span",Ke,p(a.owner)+"/"+p(a.name),1),P("span",Ee,p(a.description),1)]),ye(a)?(u(),r(g(ee),{key:0,size:"tiny",type:"success",bordered:!1},{default:v(()=>[...c[8]||(c[8]=[s(" 已添加 ",-1)])]),_:1})):(u(),r(g(e),{key:1,class:"add-icon"},{default:v(()=>[i(g(T))]),_:1}))],10,De))),128))])])):t("",!0)])]),_:1},8,["show","title"]),i(g(M),{show:z.value,"onUpdate:show":c[4]||(c[4]=e=>z.value=e),preset:"card",title:D.value,bordered:!1,style:{width:"460px","max-width":"92vw"},onClose:X},{default:v(()=>[x.value?(u(),w("div",qe,[i(g(le),{type:"info",bordered:!1,size:"small"},{default:v(()=>{return[s(p((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}),P("div",Ve,[P("div",Fe,[c[10]||(c[10]=P("span",{class:"auth-label"},"仓库",-1)),P("span",Qe,p(q(x.value)),1)]),P("div",We,[c[11]||(c[11]=P("span",{class:"auth-label"},"来源",-1)),P("span",Ze,p("gitlab"===x.value.provider?"GitLab":"GitHub"),1)]),P("div",Je,[c[12]||(c[12]=P("span",{class:"auth-label"},"当前状态",-1)),P("span",Xe,p(x.value.hasToken?`已配置 ${x.value.tokenPreview||""}`:"未配置仓库 Token"),1)])]),i(g(Y),{value:B.value.token,"onUpdate:value":c[3]||(c[3]=e=>B.value.token=e),type:"password","show-password-on":"click",clearable:"",placeholder:"输入此仓库专属 Token",onKeyup:h(ve,["enter"])},null,8,["value"]),c[16]||(c[16]=P("div",{class:"auth-footnote"}," 仓库 Token 会优先于全局环境变量、CLI 登录和系统 Git 凭据。 ",-1)),P("div",Ye,[i(g(a),{focusable:!1,onClick:X},{default:v(()=>[...c[13]||(c[13]=[s(" 取消 ",-1)])]),_:1}),x.value.hasToken?(u(),r(g(a),{key:0,type:"warning",secondary:"",focusable:!1,loading:S.value,onClick:me},{default:v(()=>[...c[14]||(c[14]=[s(" 清除 Token ",-1)])]),_:1},8,["loading"])):t("",!0),i(g(a),{type:"primary",focusable:!1,disabled:!B.value.token.trim(),loading:O.value,onClick:ve},{default:v(()=>[...c[15]||(c[15]=[s(" 保存 Token ",-1)])]),_:1},8,["disabled","loading"])])])):t("",!0)]),_:1},8,["show","title"])],64))}},[["__scopeId","data-v-cf7e92d6"]]),aa={class:"asset-detail-drawer-header"},la={class:"asset-detail-identity"},ta={class:"asset-detail-heading"},sa={class:"asset-detail-name"},na={class:"asset-detail-meta"},ia={key:2,class:"asset-detail-subtle"},ra={class:"asset-detail-body"},oa={class:"asset-detail-container"},ua={class:"asset-detail-info-section"},ca={class:"asset-detail-description"},pa={key:0,class:"asset-detail-info-section"},da={class:"asset-detail-list"},va={class:"asset-detail-value mono"},ma={key:1,class:"asset-detail-info-section"},ya={class:"asset-detail-box"},fa=["href"],ga={key:1},ha={class:"asset-detail-container"},ka={key:0,class:"asset-detail-loading"},ba=["innerHTML"],wa={key:2,class:"asset-detail-empty"},Pa={__name:"PluginDetailDrawer",props:{visible:{type:Boolean,default:!1},plugin:{type:Object,default:null},platform:{type:String,default:"claude"}},emits:["update:visible"],setup(a,{emit:l}){ne.setOptions({breaks:!0,gfm:!0});const{drawerWidth:o}=V(600),y=a,f=l,h=d({get:()=>y.visible,set:e=>f("update:visible",e)}),k=b(""),j=b(!1),U=b(0),C=d(()=>/^(https?:)?\/\//.test(y.plugin?.repoUrl||y.plugin?.gitUrl||"")),L=d(()=>y.plugin?.installPath||y.plugin?.fullPath||y.plugin?.path||y.plugin?.directory||""),T=d(()=>Array.isArray(y.plugin?.skillPaths)?y.plugin.skillPaths:[]),I={height:"100%",minHeight:0,overflow:"hidden"};c(()=>[y.visible,y.plugin,y.platform],async([e,a,l])=>{const t=++U.value;if(!e||!a)return j.value=!1,void(k.value="");j.value=!0;try{const e={repoId:a.repoId,repoProvider:a.repoProvider,repoHost:a.repoHost,repoOwner:a.repoOwner,repoName:a.repoName,repoBranch:a.repoBranch,directory:a.directory,source:a.source,repoUrl:a.repoUrl,repoProjectPath:a.repoProjectPath,repoLocalPath:a.repoLocalPath,installPath:a.installPath},s=await function(e,a={},l="claude",t={}){const s=a.scope||t.scope||"",n=a.repoLocalPath||a.repoProjectPath||a.repoUrl||a.directory||e,i=X(`plugin-readme:${e}`,l,s,n),r=new URLSearchParams;return l&&r.append("platform",l),a.repoId&&r.append("repoId",a.repoId),a.repoProvider&&r.append("repoProvider",a.repoProvider),a.repoHost&&r.append("repoHost",a.repoHost),a.repoOwner&&r.append("repoOwner",a.repoOwner),a.repoName&&r.append("repoName",a.repoName),a.repoBranch&&r.append("repoBranch",a.repoBranch),a.directory&&r.append("directory",a.directory),a.source&&r.append("source",a.source),a.repoUrl&&r.append("repoUrl",a.repoUrl),a.repoProjectPath&&r.append("repoProjectPath",a.repoProjectPath),a.repoLocalPath&&r.append("repoLocalPath",a.repoLocalPath),a.installPath&&r.append("installPath",a.installPath),ae(i,a=>_.get(`/plugins/${encodeURIComponent(e)}/readme?${r.toString()}`,{signal:a}).then(e=>e.data),`plugin-readme:${e}`,`plugin-readme:${l}`)}(a.name,e,l);if(t!==U.value)return;k.value=s.readme||""}catch(s){if(t!==U.value)return;k.value=""}finally{t===U.value&&(j.value=!1)}});const x=d(()=>k.value?ne(k.value):"");return(l,c)=>(u(),r(g(q),{show:h.value,"onUpdate:show":c[0]||(c[0]=e=>h.value=e),width:g(o),placement:"right","show-mask":!0},{default:v(()=>[i(g(F),{closable:"","native-scrollbar":!1,"body-content-style":I},{header:v(()=>[P("div",aa,[P("div",la,[i(g(e),{size:20,class:"asset-detail-icon"},{default:v(()=>[i(g(O))]),_:1}),P("div",ta,[P("span",sa,p(a.plugin?.name||"插件详情"),1),P("div",na,[a.plugin?.version?(u(),r(g(ee),{key:0,size:"tiny",bordered:!1,type:"info"},{default:v(()=>[s(" v"+p(a.plugin.version),1)]),_:1})):t("",!0),"skill-bundle"===a.plugin?.pluginKind?(u(),r(g(ee),{key:1,size:"tiny",bordered:!1,type:"warning"},{default:v(()=>[...c[1]||(c[1]=[s(" 技能包插件 ",-1)])]),_:1})):t("",!0),a.plugin?.author?(u(),w("span",ia,[i(g(e),{size:12},{default:v(()=>[i(g($))]),_:1}),s(" "+p(a.plugin.author),1)])):t("",!0)])])])])]),default:v(()=>[P("div",ra,[i(g(K),{type:"line",animated:"",class:"asset-detail-tabs"},{default:v(()=>[i(g(D),{name:"overview",tab:"概览"},{default:v(()=>[P("div",oa,[P("div",ua,[c[2]||(c[2]=P("h3",{class:"asset-detail-section-title"},"描述",-1)),P("p",ca,p(a.plugin?.description||"暂无描述"),1)]),T.value.length>0?(u(),w("div",pa,[c[3]||(c[3]=P("h3",{class:"asset-detail-section-title"},"包含技能",-1)),P("div",da,[(u(!0),w(m,null,n(T.value,e=>(u(),w("div",{key:e,class:"asset-detail-row"},[P("span",va,p(e),1)]))),128))])])):t("",!0),a.plugin?.repoUrl||a.plugin?.gitUrl||a.plugin?.repoLocalPath?(u(),w("div",ma,[c[4]||(c[4]=P("h3",{class:"asset-detail-section-title"},"仓库地址",-1)),P("div",ya,[i(g(e),{size:16},{default:v(()=>[i(g(z))]),_:1}),C.value?(u(),w("a",{key:0,class:"asset-detail-link",href:a.plugin.repoUrl||a.plugin.gitUrl,target:"_blank",rel:"noopener noreferrer"},p(a.plugin.repoUrl||a.plugin.gitUrl),9,fa)):(u(),w("span",ga,p(a.plugin.repoLocalPath),1))])])):t("",!0),i(E,{path:L.value},null,8,["path"])])]),_:1}),i(g(D),{name:"readme",tab:"README"},{default:v(()=>[P("div",ha,[j.value?(u(),w("div",ka,[i(g(W),{size:"medium"}),c[5]||(c[5]=P("p",null,"加载 README 中...",-1))])):k.value?(u(),w("div",{key:1,class:"asset-detail-content",innerHTML:x.value},null,8,ba)):(u(),w("div",wa,[i(g(e),{size:44,class:"asset-detail-empty-icon"},{default:v(()=>[i(g(A))]),_:1}),c[6]||(c[6]=P("p",null,"暂无 README 文档",-1))]))])]),_:1})]),_:1})])]),_:1})]),_:1},8,["show","width"]))}},_a={key:0,class:"asset-panel-header"},ja={class:"asset-title-group"},Ua={class:"asset-heading"},Ca={class:"asset-title-row"},$a={class:"asset-platform-pill"},La={key:0,class:"asset-action-row"},Ta={key:1,class:"asset-drawer-toolbar"},Ia={key:0,class:"asset-action-row"},za={class:"asset-summary"},xa={class:"asset-summary-item"},Oa={class:"asset-summary-value"},Sa={class:"asset-summary-item"},Ba={class:"asset-summary-value"},Ha={class:"asset-summary-item"},Aa={class:"asset-summary-value"},Ga={class:"asset-filter-bar"},Ra={class:"asset-panel-content"},Ma={key:0,class:"asset-empty"},Da={key:1,class:"asset-list"},Na={key:2,class:"asset-footer"},Ka=l({__name:"PluginsPanel",props:{inDrawer:{type:Boolean,default:!1},hideBack:{type:Boolean,default:!1},drawerVisible:{type:Boolean,default:!1},platform:{type:String,default:""},projectPath:{type:String,default:""}},emits:["back","updated"],setup(l){const f=l,h=k(),$=C(),T=R(),z=b(!1),H=b([]),A=b(""),M=b("all"),D=b(!1),K=b(!1),E=b(null),q=b({}),V=b({}),F=b(!1),Q=b(0),Z=b({supportsPlugins:!0,repositories:!0,market:!0,install:!0,uninstall:!0,import:!0,syncRepos:!0}),{byCapability:ee}=J(),le=d(()=>ee("plugins").map(e=>e.key)),ne=d(()=>le.value.includes(ie.value));const ie=d(()=>String(f.platform||(Array.isArray(h.query.platform)?h.query.platform[0]:h.query.platform)||j(h)||"").trim().toLowerCase()),re=d(()=>{const e=$.get(ie.value)||U(ie.value);return e.label||e.title||"Claude Code"}),ce=[{label:"全部",value:"all"},{label:"已安装",value:"installed"},{label:"未安装",value:"uninstalled"}],pe=d(()=>H.value.filter(e=>e.installed).length);function ve(e=null){return{...f.projectPath?{cwd:f.projectPath}:{},...e?.scope?{scope:e.scope}:{scope:f.projectPath?"project":"user"}}}const me=d(()=>{let e=H.value;if("installed"===M.value?e=e.filter(e=>e.installed):"uninstalled"===M.value&&(e=e.filter(e=>!e.installed)),A.value.trim()){const a=A.value.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(a)||e.description?.toLowerCase().includes(a))}return[...e].sort((e,a)=>e.installed===a.installed?0:e.installed?-1:1)}),ye=d(()=>A.value?"没有匹配的插件":"installed"===M.value?"暂无已安装的插件":"uninstalled"===M.value?"所有插件都已安装":!1===Z.value.supportsPlugins?Z.value.disabledReason||`${re.value} 暂未提供插件管理能力`:"暂无可用插件,请配置仓库源");async function fe(e,a){try{const l=await async function(e="claude",a={}){const l=X("plugin-capabilities",e,a.scope||"",a.cwd||"");return ae(l,a=>_.get("/plugins/capabilities",{params:{platform:e},signal:a}).then(e=>e.data),"plugin-capabilities",`plugin-capabilities:${e}`)}(e);if(a!==Q.value||e!==ie.value)return!1;if(l.success&&l.capabilities)return Z.value={supportsPlugins:!0,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,...l.capabilities},!0}catch{if(a!==Q.value||e!==ie.value)return!1}return a===Q.value&&e===ie.value&&(Z.value={supportsPlugins:le.value.includes(e),repositories:le.value.includes(e),market:le.value.includes(e),install:le.value.includes(e),uninstall:le.value.includes(e),import:"claude"===e,syncRepos:"claude"===e},!0)}async function ge(e=!1){const a=++Q.value,l=ie.value;if(!ne.value)return H.value=[],Z.value={supportsPlugins:!1,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,disabledReason:`${re.value} 暂未提供插件管理能力`},void(z.value=!1);z.value=!0;try{if(!(await fe(l,a)))return;if(a!==Q.value||l!==ie.value)return;if(!1===Z.value.supportsPlugins)return void(H.value=[]);if(e&&Z.value.syncRepos&&(await de(l,ve()).catch(()=>{}),a!==Q.value||l!==ie.value))return;const t=await async function(e="claude",a={}){const l=X("plugins",e,a.scope||"",a.cwd||"");return ae(l,l=>_.get("/plugins",{params:oe({platform:e},a),signal:l}).then(e=>e.data),"plugins",`plugins:${e}`)}(l,{...f.projectPath?{cwd:f.projectPath}:{}});if(a!==Q.value||l!==ie.value)return;const s=t.success?t.plugins:[];let n=[];const i=(e,a)=>{const l={};for(const n of a)l[n.pluginId||n.id||n.name]=n;const t=e.map(e=>{const a=e.pluginId||e.id||e.name,t=l[a]||{};return{...t,...e,installed:!0,key:e.key||`installed-${a}-${e.scope||"user"}`,description:e.description||t.description||"",repoProvider:e.repoProvider||t.repoProvider||"",repoHost:e.repoHost||t.repoHost||"",repoOwner:e.repoOwner||t.repoOwner||"",repoName:e.repoName||t.repoName||"",repoBranch:e.repoBranch||t.repoBranch||"main",repoProjectPath:e.repoProjectPath||t.repoProjectPath||"",repoLocalPath:e.repoLocalPath||t.repoLocalPath||"",repoId:e.repoId||t.repoId||"",repoUrl:e.repoUrl||t.repoUrl||"",marketplace:e.marketplace||t.marketplace||"",installSource:e.installSource||t.installSource||"",readmeUrl:e.readmeUrl||t.readmeUrl||"",containsSkills:Boolean(e.containsSkills||t.containsSkills),skillPaths:Array.isArray(e.skillPaths)?e.skillPaths:Array.isArray(t.skillPaths)?t.skillPaths:[],pluginKind:e.pluginKind||t.pluginKind||(e.containsSkills||t.containsSkills?"skill-bundle":"plugin"),strict:Object.prototype.hasOwnProperty.call(e,"strict")?e.strict:t.strict,directory:e.directory||t.directory||e.installPath||""}}),s=new Set(e.map(e=>e.pluginId||e.id||e.name));return[...t,...a.filter(e=>!s.has(e.pluginId||e.id||e.name)).map(e=>({...e,installed:!1,key:e.key||`market-${e.pluginId||e.id||e.name}`}))]};H.value=i(s,n),Z.value.market&&async function(e="claude",a=!1,l={}){const t=X("plugins-market",e,l.scope||"",l.cwd||"");return ae(t,t=>_.get("/plugins/market",{params:oe({platform:e,refresh:a?"1":""},l),signal:t}).then(e=>e.data),"plugins-market",`plugins-market:${e}`)}(l,e,{...f.projectPath?{cwd:f.projectPath}:{}}).catch(()=>({success:!0,plugins:[]})).then(e=>{a===Q.value&&l===ie.value&&(n=e.success?e.plugins:[],H.value=i(s,n))})}catch(t){a===Q.value&&l===ie.value&&T.error("加载插件失败: "+t.message)}finally{a===Q.value&&(z.value=!1)}}async function he(){if(ne.value&&"claude"===ie.value){F.value=!0;try{const e=await N("plugins");e.success?(T.success(`成功导入 ${e.imported} 个插件`),await ge(!0)):T.error(e.message||"导入失败")}catch(e){T.error("导入失败: "+e.message)}finally{F.value=!1}}}async function ke(e){if(ne.value&&Z.value.install&&!e.readonly){if(!(e.installSource||e.repoOwner||e.repoProjectPath||e.repoLocalPath))return T.error("缺少可安装来源");q.value[e.key]=!0;try{const a=e.installSource?await ue("",null,ie.value,e.pluginId||e.installSource,ve(e),e):await ue(e.directory,{id:e.repoId,provider:e.repoProvider,host:e.repoHost,owner:e.repoOwner,name:e.repoName,branch:e.repoBranch||"main",projectPath:e.repoProjectPath,localPath:e.repoLocalPath,repoUrl:e.repoUrl,marketplace:e.marketplace},ie.value,"",ve(e),e);if(a.success){T.success(`插件 "${e.name}" 安装成功`);const a=H.value.findIndex(a=>a.key===e.key);-1!==a&&(H.value[a]={...H.value[a],installed:!0,key:`installed-${e.pluginId||e.id||e.name}-${e.scope||ve(e).scope}`})}else T.error(a.message||"安装失败")}catch(a){T.error("安装失败: "+a.message)}finally{delete q.value[e.key]}}}async function be(e){if(ne.value&&Z.value.uninstall&&!e.readonly){V.value[e.key]=!0;try{const a=await async function(e,a="claude",l={}){return(await _.delete(`/plugins/${encodeURIComponent(e)}`,{params:oe({platform:a,pluginId:e},l)})).data}(e.pluginId||e.id||e.name,ie.value,ve(e));if(a.success){T.success(`插件 "${e.name}" 已卸载`);const a=H.value.findIndex(a=>a.key===e.key);-1!==a&&(H.value[a]={...H.value[a],installed:!1,key:`market-${e.pluginId||e.id||e.name}`})}else T.error(a.message||a.error||"卸载失败")}catch(a){T.error("卸载失败: "+a.message)}finally{delete V.value[e.key]}}}function we(e){E.value=e,K.value=!0}return o(()=>{f.inDrawer&&!f.drawerVisible||ge()}),c(()=>f.drawerVisible,e=>{e&&ge()}),c(()=>ie.value,()=>{ge()}),(o,c)=>(u(),w("div",{class:y(["plugins-panel asset-panel",{"in-drawer":l.inDrawer}])},[l.inDrawer?t("",!0):(u(),w("div",_a,[P("div",ja,[l.hideBack?t("",!0):(u(),r(g(a),{key:0,text:"",onClick:c[0]||(c[0]=e=>o.$emit("back")),class:"back-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(x))]),_:1})]),_:1})),P("div",Ua,[P("div",Ca,[c[10]||(c[10]=P("span",{class:"asset-title"},"插件管理",-1)),P("span",$a,p(re.value),1)]),c[11]||(c[11]=P("div",{class:"asset-subtitle"},"管理平台插件、仓库源和市场安装状态",-1))])]),le.value.includes(ie.value)?(u(),w("div",La,[Z.value.repositories?(u(),r(g(a),{key:0,text:"",focusable:!1,onClick:c[1]||(c[1]=e=>D.value=!0),class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(I))]),_:1})]),default:v(()=>[c[12]||(c[12]=s(" 仓库 ",-1))]),_:1})):t("",!0),Z.value.import?(u(),r(g(a),{key:1,text:"",focusable:!1,onClick:he,loading:F.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(B))]),_:1})]),default:v(()=>[c[13]||(c[13]=s(" 导入 ",-1))]),_:1},8,["loading"])):t("",!0),i(g(a),{text:"",focusable:!1,onClick:c[2]||(c[2]=e=>ge(!0)),loading:z.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(G))]),_:1})]),default:v(()=>[c[14]||(c[14]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])),l.inDrawer?(u(),w("div",Ta,[le.value.includes(ie.value)?(u(),w("div",Ia,[Z.value.repositories?(u(),r(g(a),{key:0,text:"",focusable:!1,onClick:c[3]||(c[3]=e=>D.value=!0),class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(I))]),_:1})]),default:v(()=>[c[15]||(c[15]=s(" 仓库 ",-1))]),_:1})):t("",!0),Z.value.import?(u(),r(g(a),{key:1,text:"",focusable:!1,onClick:he,loading:F.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(B))]),_:1})]),default:v(()=>[c[16]||(c[16]=s(" 导入 ",-1))]),_:1},8,["loading"])):t("",!0),i(g(a),{text:"",focusable:!1,onClick:c[4]||(c[4]=e=>ge(!0)),loading:z.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(G))]),_:1})]),default:v(()=>[c[17]||(c[17]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])):t("",!0),P("div",za,[P("span",xa,[c[18]||(c[18]=P("span",{class:"asset-summary-label"},"全部",-1)),P("span",Oa,p(H.value.length),1)]),P("span",Sa,[c[19]||(c[19]=P("span",{class:"asset-summary-label"},"已安装",-1)),P("span",Ba,p(pe.value),1)]),P("span",Ha,[c[20]||(c[20]=P("span",{class:"asset-summary-label"},"可安装",-1)),P("span",Aa,p(H.value.length-pe.value),1)])]),P("div",Ga,[i(g(Y),{value:A.value,"onUpdate:value":c[5]||(c[5]=e=>A.value=e),placeholder:"搜索插件名称或描述",clearable:"",size:"small",class:"asset-search"},{prefix:v(()=>[i(g(e),null,{default:v(()=>[i(g(S))]),_:1})]),_:1},8,["value"]),i(g(te),{value:M.value,"onUpdate:value":c[6]||(c[6]=e=>M.value=e),options:ce,size:"small",class:"asset-filter"},null,8,["value"])]),P("div",Ra,[i(g(W),{show:z.value},{default:v(()=>[0!==me.value.length||z.value?(u(),w("div",Da,[(u(!0),w(m,null,n(me.value,e=>(u(),r(_e,{key:e.key,plugin:e,readonly:e.readonly||!Z.value.install&&!Z.value.uninstall,"can-install":Z.value.install,"can-uninstall":Z.value.uninstall,installing:!!q.value[e.key],uninstalling:!!V.value[e.key],onInstall:ke,onUninstall:be,onClick:we},null,8,["plugin","readonly","can-install","can-uninstall","installing","uninstalling"]))),128))])):(u(),w("div",Ma,[i(g(se),{description:ye.value},{icon:v(()=>[i(g(e),{size:"48",color:"var(--text-quaternary)"},{default:v(()=>[i(g(O))]),_:1})]),extra:v(()=>[le.value.includes(ie.value)&&0===H.value.length&&Z.value.repositories?(u(),r(g(a),{key:0,size:"small",onClick:c[7]||(c[7]=e=>D.value=!0)},{default:v(()=>[...c[21]||(c[21]=[s("配置仓库源",-1)])]),_:1})):t("",!0)]),_:1},8,["description"])]))]),_:1},8,["show"])]),le.value.includes(ie.value)&&(Z.value.install||Z.value.uninstall)?(u(),w("div",Na,[i(g(e),{size:"14",class:"asset-info-icon"},{default:v(()=>[i(g(L))]),_:1}),P("span",null,"安装/卸载后需重启 "+p(re.value)+" 生效",1)])):t("",!0),Z.value.repositories?(u(),r(ea,{key:3,visible:D.value,"onUpdate:visible":c[8]||(c[8]=e=>D.value=e),platform:ie.value,"project-path":f.projectPath,capabilities:Z.value,onUpdated:ge},null,8,["visible","platform","project-path","capabilities"])):t("",!0),i(Pa,{visible:K.value,"onUpdate:visible":c[9]||(c[9]=e=>K.value=e),plugin:E.value,platform:ie.value,onUpdated:ge},null,8,["visible","plugin","platform"])],2))}},[["__scopeId","data-v-be781058"]]);export{Ka as t};
@@ -1 +0,0 @@
1
- .repo-manager[data-v-cf7e92d6]{flex-direction:column;gap:16px;display:flex}.repo-list[data-v-cf7e92d6]{flex-direction:column;gap:8px;display:flex}.repo-item[data-v-cf7e92d6]{background:var(--bg-tertiary);border-radius:6px;justify-content:space-between;align-items:flex-start;padding:10px 12px;display:flex}.repo-main[data-v-cf7e92d6]{align-items:flex-start;gap:10px;display:flex}.repo-info[data-v-cf7e92d6]{flex-direction:column;gap:4px;display:flex}.repo-name-row[data-v-cf7e92d6]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.repo-name[data-v-cf7e92d6]{color:var(--text-primary);font-size:13px;font-weight:500}.repo-branch[data-v-cf7e92d6],.repo-auth-hint[data-v-cf7e92d6]{color:var(--text-tertiary);font-size:11px}.repo-actions[data-v-cf7e92d6]{flex-shrink:0;align-items:center;gap:8px;padding-left:12px;display:flex}.empty-hint[data-v-cf7e92d6]{text-align:center;color:var(--text-tertiary);padding:20px;font-size:13px}.add-repo[data-v-cf7e92d6]{border-top:1px solid var(--border-primary);padding-top:8px}.add-title[data-v-cf7e92d6]{color:var(--text-primary);margin-bottom:10px;font-size:13px;font-weight:500}.add-form[data-v-cf7e92d6]{gap:8px;display:flex}.repo-input[data-v-cf7e92d6]{flex:1}.branch-input[data-v-cf7e92d6]{width:80px}.add-hint[data-v-cf7e92d6]{color:var(--text-tertiary);margin-top:6px;font-size:11px}.tips[data-v-cf7e92d6]{padding-top:8px}.recommended[data-v-cf7e92d6]{border-top:1px solid var(--border-primary);padding-top:12px}.recommended-title[data-v-cf7e92d6]{color:var(--text-primary);align-items:center;gap:6px;margin-bottom:10px;font-size:13px;font-weight:500;display:flex}.recommended-title[data-v-cf7e92d6]:before{content:"";background:#18a058;border-radius:2px;width:3px;height:14px}.recommended-list[data-v-cf7e92d6]{flex-direction:column;gap:6px;display:flex}.recommended-item[data-v-cf7e92d6]{background:var(--bg-tertiary);cursor:pointer;border-radius:5px;justify-content:space-between;align-items:center;padding:8px 10px;transition:all .15s;display:flex}.recommended-item[data-v-cf7e92d6]:not(.added):hover{background:var(--bg-secondary);box-shadow:0 2px 8px #18a0581a}.recommended-item.added[data-v-cf7e92d6]{cursor:default;opacity:.6;background:var(--bg-secondary)}.rec-info[data-v-cf7e92d6]{flex-direction:column;gap:2px;display:flex}.rec-name[data-v-cf7e92d6]{color:var(--text-primary);font-size:12px;font-weight:500}.rec-desc[data-v-cf7e92d6]{color:var(--text-tertiary);font-size:11px}.add-icon[data-v-cf7e92d6]{color:#18a058}.auth-manager[data-v-cf7e92d6]{flex-direction:column;gap:14px;display:flex}.auth-meta[data-v-cf7e92d6]{background:var(--bg-tertiary);border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.auth-meta-row[data-v-cf7e92d6]{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.auth-label[data-v-cf7e92d6]{color:var(--text-tertiary);font-size:12px}.auth-value[data-v-cf7e92d6]{color:var(--text-primary);text-align:right;word-break:break-all;font-size:12px}.auth-footnote[data-v-cf7e92d6]{color:var(--text-tertiary);font-size:11px}.auth-actions[data-v-cf7e92d6]{justify-content:flex-end;gap:8px;display:flex}.back-btn[data-v-be781058]{padding:4px}.action-btn[data-v-be781058]{padding:4px 8px}
@@ -1 +0,0 @@
1
- .project-card[data-v-3a18e66d]{cursor:pointer;border:1px solid var(--border-primary);background:var(--bg-primary);border-radius:8px;padding:12px 14px;transition:all .25s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;box-shadow:0 1px 3px #0000000a}.project-card[data-v-3a18e66d]:before{content:"";opacity:0;background:linear-gradient(#18a058,#18a05866);width:3px;height:100%;transition:opacity .25s;position:absolute;top:0;left:0}.project-card[data-v-3a18e66d]:hover{border-color:#18a05866;transform:translateY(-3px);box-shadow:0 8px 20px #18a0581f,0 2px 6px #0000000f}.project-card[data-v-3a18e66d]:hover:before{opacity:1}.card-content[data-v-3a18e66d]{flex-direction:column;gap:6px;display:flex}.header-row[data-v-3a18e66d]{align-items:center;gap:8px;display:flex}.project-name[data-v-3a18e66d]{text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary);letter-spacing:-.2px;flex:1;font-size:14px;font-weight:600;overflow:hidden}.delete-btn[data-v-3a18e66d]{opacity:.7;transition:opacity .2s;padding:2px!important}.delete-btn[data-v-3a18e66d]:hover{opacity:1}.project-path[data-v-3a18e66d]{text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.3;display:block;overflow:hidden}.stats-row[data-v-3a18e66d]{border-top:1px dashed var(--border-primary);justify-content:space-between;align-items:center;margin-top:4px;padding-top:8px;display:flex}.stats-row[data-v-3a18e66d] .n-tag{border-radius:4px;height:18px;padding:0 6px;font-size:11px;font-weight:600}.last-used[data-v-3a18e66d]{font-size:11px;font-weight:500}.project-list-container[data-v-8e29bffb]{box-sizing:border-box;flex-direction:column;width:100%;height:100%;display:flex}.header[data-v-8e29bffb]{background:var(--gradient-bg);border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:space-between;align-items:flex-start;gap:24px;padding:24px 24px 20px;display:flex;position:relative}.header[data-v-8e29bffb]:after{content:"";background:linear-gradient(90deg,#0000,#18a0581a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.header-text[data-v-8e29bffb]{flex:1}.header-text[data-v-8e29bffb] .n-h2{background:linear-gradient(135deg,#1f2937 0%,#374151 100%);-webkit-text-fill-color:transparent;letter-spacing:-.5px;-webkit-background-clip:text;background-clip:text;font-size:26px;font-weight:700}[data-theme=dark] .header-text[data-v-8e29bffb] .n-h2{background:linear-gradient(135deg,#f9fafb 0%,#d1d5db 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.search-input[data-v-8e29bffb]{flex-shrink:0;width:320px}.search-input[data-v-8e29bffb] .n-input{background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:10px;transition:all .2s}.search-input[data-v-8e29bffb] .n-input:hover{border-color:var(--border-secondary);box-shadow:var(--shadow-sm)}.search-input[data-v-8e29bffb] .n-input:focus-within{border-color:#18a058;box-shadow:0 0 0 3px #18a0581a}.content[data-v-8e29bffb]{background:var(--gradient-bg);flex:1;padding:20px 24px 24px;overflow-y:auto}.loading-container[data-v-8e29bffb]{justify-content:center;align-items:center;min-height:400px;display:flex}.loading-container.compact[data-v-8e29bffb]{min-height:180px}.projects-grid[data-v-8e29bffb]{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;display:grid}.ghost[data-v-8e29bffb]{opacity:.4}.chosen[data-v-8e29bffb]{transform:scale(1.05);cursor:move!important;box-shadow:0 8px 24px #0003!important}.drag[data-v-8e29bffb]{opacity:.8;transform:rotate(2deg);box-shadow:0 12px 32px #00000040!important}.search-hint[data-v-8e29bffb]{border:1px solid var(--border-primary);z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:.8;background:#ffffffe6;border-radius:8px;padding:10px 14px;transition:all .2s;position:fixed;bottom:24px;left:24px;box-shadow:0 4px 12px #00000014}[data-theme=dark] .search-hint[data-v-8e29bffb]{background:#1e293bf2;border:1px solid #47556999;box-shadow:0 4px 16px #0006}.search-hint[data-v-8e29bffb]:hover{opacity:1;transform:translateY(-2px);box-shadow:0 6px 16px #0000001f}[data-theme=dark] .search-hint[data-v-8e29bffb]:hover{box-shadow:0 6px 20px #00000080}.search-hint kbd[data-v-8e29bffb]{color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-secondary);box-shadow:0 2px 0 var(--border-primary), 0 1px 3px #0000001a;border-radius:4px;padding:4px 8px;font-family:SF Mono,Monaco,monospace;font-size:12px;font-weight:600;line-height:1.4;display:inline-block}[data-theme=dark] .search-hint kbd[data-v-8e29bffb]{color:#e2e8f0;background:#33415599;border:1px solid #475569cc;box-shadow:0 2px #1e293bcc,0 1px 4px #0006}.search-result-item[data-v-8e29bffb]{border:1px solid var(--border-primary);background:var(--bg-elevated);border-radius:6px;margin-bottom:16px;padding:12px}.search-result-header[data-v-8e29bffb]{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.search-result-title[data-v-8e29bffb]{align-items:center;gap:8px;display:flex}.search-match[data-v-8e29bffb]{background:var(--bg-secondary);border-radius:4px;align-items:flex-start;gap:8px;margin-top:6px;padding:6px;display:flex}.search-match-text[data-v-8e29bffb]{flex:1;line-height:1.6}
@@ -1 +0,0 @@
1
- import{i as e,s as a,t}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as s,D as l,H as o,I as n,K as r,O as i,S as c,V as u,W as d,Z as p,_t as m,b as v,et as f,f as h,g as y,gt as g,i as j,m as _,mt as k,p as w,r as x,st as b,tt as C,w as z,x as P}from"./vue-vendor-BqZbbXHA.js";import{t as $}from"./vendors-D0c_0KLP.js";import{r as I,t as L}from"./platforms-CBkB45JP.js";import{Ft as M,J as D,_ as N,a as K,r as E}from"./icons-B2Vg-IOC.js";import{l as T}from"./light-Cp0t7v32.js";import{t as U}from"./headers-cf-QapUq.js";import{I as V,K as H,M as O,N as R,P as S,ct as q,dt as A,lt as F,pt as J}from"./index-BFInlZGI.js";import{t as W}from"./clipboard-B46yyoz_.js";import{p as Z,t as B}from"./sessions-Cmy31slD.js";import{t as G}from"./sessions-yC_oVVh8.js";var Q={class:"card-content"},X={class:"header-row"},Y={class:"project-name"},ee={class:"stats-row"},ae=t({__name:"ProjectCard",props:{project:{type:Object,required:!0}},emits:["click","delete"],setup(t,{emit:o}){const n=t,r=o,u=b(!1);function p(){r("click")}function y(){r("delete",n.project)}const g=v(()=>n.project?.displayName||n.project?.name||""),j=v(()=>n.project?.path||n.project?.fullPath||n.project?.name||""),w=v(()=>n.project?.sessionCount||0),x=v(()=>n.project?.lastUsed),$=v(()=>{const e=["#18a058","#2080f0","#f0a020","#d03050","#9333ea","#06b6d4"];return e[(n.project?.name||"").split("").reduce((e,a)=>e+a.charCodeAt(0),0)%e.length]});function I(e){if(!e)return"";const a=new Date(e),t=new Date-a;return t<6e4?"刚刚":t<36e5?`${Math.floor(t/6e4)}分钟前`:t<864e5?`${Math.floor(t/36e5)}小时前`:t<6048e5?`${Math.floor(t/864e5)}天前`:a.toLocaleDateString("zh-CN")}return(t,o)=>(d(),z("div",{class:"project-card",onClick:p,onMouseenter:o[0]||(o[0]=e=>u.value=!0),onMouseleave:o[1]||(o[1]=e=>u.value=!1)},[P("div",Q,[P("div",X,[i(k(e),{size:"18",color:$.value},{default:f(()=>[i(k(D))]),_:1},8,["color"]),P("span",Y,m(g.value),1),C(i(k(a),{text:"",type:"error",size:"tiny",class:"delete-btn",onClick:_(y,["stop"])},{icon:f(()=>[i(k(e),{size:"14"},{default:f(()=>[i(k(E))]),_:1})]),_:1},512),[[h,u.value]])]),i(k(S),{depth:"3",class:"project-path"},{default:f(()=>[l(m(j.value),1)]),_:1}),P("div",ee,[i(k(A),{size:"tiny",bordered:!1,type:"success"},{default:f(()=>[l(m(w.value)+" 会话 ",1)]),_:1}),x.value?(d(),c(k(S),{key:0,depth:"3",class:"last-used"},{default:f(()=>[l(m(I(x.value)),1)]),_:1})):s("",!0)])])],32))}},[["__scopeId","data-v-3a18e66d"]]),te={class:"project-list-container"},se={class:"header"},le={class:"header-text"},oe={key:0,class:"loading-container"},ne={key:1,class:"loading-container compact"},re={key:4,class:"projects-grid"},ie={class:"search-hint"},ce={style:{"margin-bottom":"16px"}},ue={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},de={class:"search-result-header"},pe={class:"search-result-title"},me=t({__name:"ProjectList",setup(t){const h=j(),_=x(),C=G(),E=L(),Q=v(()=>I(_)),X=b(""),Y=b([]),ee=b(null),me=b(!1),ve=b(""),fe=b(null),he=b(!1),ye=b(null),ge=v(()=>{const e=X.value.toLowerCase();return Y.value.filter(a=>{const t=(a.displayName||"").toLowerCase(),s=(a.fullPath||"").toLowerCase();return t.includes(e)||s.includes(e)})});function je(e){h.push({name:"cli-sessions",params:{platform:Q.value,projectName:e}})}async function _e(){const e=Y.value.map(e=>e.name);await C.saveProjectOrder(e)}function ke(e){const a=e.fullPath||e.name,t=e.sessionCount||0;O.warning({title:"删除项目",content:`确定要删除项目 "${a}" 吗?\n\n当前项目包含 ${t} 个会话,删除后所有会话数据将无法恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await C.deleteProject(e.name),R.success("项目已删除")}catch(a){R.error("删除失败: "+a.message)}}})}async function we(){try{const a=(e=Q.value,E.get(e)?.command||e);if("manual"===(await W(a))?.method)return void R.warning("自动复制失败,已弹出手动复制框");R.success("基础启动命令已复制到剪贴板")}catch(a){R.error("复制失败: "+a.message)}var e}async function xe(){if(ve.value){he.value=!0;try{const e=await Z(ve.value,35,Q.value);fe.value=e}catch(e){R.error("搜索失败: "+e.message)}finally{he.value=!1}}}function be(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 Ce(e){(e.metaKey||e.ctrlKey)&&"k"===e.key&&(e.preventDefault(),me.value=!0,n(()=>{ye.value?.focus()}))}return p(()=>C.projects,e=>{Y.value=[...e]}),p(me,e=>{e||(ve.value="",fe.value=null)}),p(Q,e=>{C.setChannel(e),C.fetchProjects()},{immediate:!0}),u(()=>{document.addEventListener("keydown",Ce)}),o(()=>{document.removeEventListener("keydown",Ce)}),(t,o)=>(d(),z("div",te,[P("div",se,[P("div",le,[i(k(U),{style:{margin:"0"}},{default:f(()=>[...o[4]||(o[4]=[l("我的项目",-1)])]),_:1}),i(k(S),{depth:"3"},{default:f(()=>[...o[5]||(o[5]=[l("选择一个项目查看会话,拖拽可调整顺序",-1)])]),_:1})]),i(k(H),null,{default:f(()=>[i(k(a),{type:"primary",size:"medium",onClick:we},{icon:f(()=>[i(k(e),null,{default:f(()=>[i(k(M))]),_:1})]),default:f(()=>[o[6]||(o[6]=l(" 新建项目 ",-1))]),_:1}),i(k(q),{value:X.value,"onUpdate:value":o[0]||(o[0]=e=>X.value=e),placeholder:"搜索项目...",clearable:"",class:"search-input"},{prefix:f(()=>[i(k(e),null,{default:f(()=>[i(k(N))]),_:1})]),_:1},8,["value"])]),_:1})]),P("div",{class:"content",ref_key:"contentEl",ref:ee},[k(C).loading&&0===k(C).projects.length&&!k(C).projectsPending?(d(),z("div",oe,[i(k(V),{size:"large"},{description:f(()=>[...o[7]||(o[7]=[l(" 加载项目列表... ",-1)])]),_:1})])):k(C).projectsPending?(d(),z("div",ne,[i(k(V),{size:"small"},{description:f(()=>[...o[8]||(o[8]=[l(" 正在生成项目列表... ",-1)])]),_:1})])):k(C).error&&0===k(C).projects.length?(d(),c(k(F),{key:2,type:"error",title:"加载失败",style:{"margin-top":"20px"}},{default:f(()=>[l(m(k(C).error),1)]),_:1})):!X.value&&Y.value.length>0?(d(),c(k($),{key:3,modelValue:Y.value,"onUpdate:modelValue":o[1]||(o[1]=e=>Y.value=e),"item-key":"name",class:"projects-grid","ghost-class":"ghost","chosen-class":"chosen","drag-class":"drag",animation:"200",onEnd:_e},{item:f(({element:e})=>[i(ae,{project:e,onClick:a=>je(e.name),onDelete:ke},null,8,["project","onClick"])]),_:1},8,["modelValue"])):X.value&&ge.value.length>0?(d(),z("div",re,[(d(!0),z(y,null,r(ge.value,e=>(d(),c(ae,{key:e.name,project:e,onClick:a=>je(e.name),onDelete:ke},null,8,["project","onClick"]))),128))])):s("",!0),k(C).loading||k(C).error||k(C).projectsPending||!(!X.value&&0===k(C).projects.length||X.value&&0===ge.value.length)?s("",!0):(d(),c(k(J),{key:5,description:X.value?"没有匹配的项目":"没有找到项目",style:{"margin-top":"60px"}},{icon:f(()=>[i(k(e),null,{default:f(()=>[i(k(D))]),_:1})]),_:1},8,["description"]))],512),P("div",ie,[i(k(S),{depth:"3",style:{"font-size":"12px"}},{default:f(()=>[...o[9]||(o[9]=[P("kbd",null,"Cmd",-1),l(" / ",-1),P("kbd",null,"Ctrl",-1),l(" + ",-1),P("kbd",null,"K",-1),l(" 全局搜索 ",-1)])]),_:1})]),i(k(T),{show:me.value,"onUpdate:show":o[3]||(o[3]=e=>me.value=e),preset:"card",title:"全局搜索",style:g([{width:"800px","max-width":"90vw"},{marginTop:"80px"}])},{default:f(()=>[P("div",ce,[i(k(q),{ref_key:"globalSearchInputRef",ref:ye,value:ve.value,"onUpdate:value":o[2]||(o[2]=e=>ve.value=e),placeholder:"搜索所有项目的对话内容...",clearable:"",onKeyup:w(xe,["enter"]),disabled:he.value},{prefix:f(()=>[i(k(e),null,{default:f(()=>[i(k(N))]),_:1})]),suffix:f(()=>[i(k(a),{text:"",onClick:xe,disabled:!ve.value||he.value,loading:he.value},{default:f(()=>[...o[10]||(o[10]=[l(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])]),fe.value?(d(),z("div",ue,[i(k(F),{type:"info",style:{"margin-bottom":"16px"}},{default:f(()=>[l(' 关键词 "'+m(fe.value.keyword)+'" 共找到 '+m(fe.value.totalMatches)+" 处匹配 ",1)]),_:1}),(d(!0),z(y,null,r(fe.value.sessions,t=>(d(),z("div",{key:`${t.projectName}-${t.sessionId}`,class:"search-result-item"},[P("div",de,[P("div",pe,[i(k(S),{strong:"",style:{"font-size":"15px","font-weight":"700"}},{default:f(()=>[l(m(t.projectDisplayName),1)]),_:2},1024),i(k(S),{depth:"2",style:{margin:"0 8px"}},{default:f(()=>[...o[11]||(o[11]=[l("·",-1)])]),_:1}),i(k(S),{strong:""},{default:f(()=>[l(m(t.alias?`${t.alias} (${t.sessionId.substring(0,8)})`:t.sessionId.substring(0,8)),1)]),_:2},1024),i(k(A),{size:"small",bordered:!1},{default:f(()=>[l(m(t.matchCount)+" 个匹配",1)]),_:2},1024)]),i(k(a),{size:"small",type:"primary",onClick:e=>async function(e,a){try{const{copyResult:t}=await B(e,a,Q.value);"manual"===t?.method?R.warning("自动复制失败,已弹出手动复制框"):R.success("启动命令已复制到剪贴板"),me.value=!1}catch(t){R.error("复制失败: "+t.message)}}(t.projectName,t.sessionId)},{icon:f(()=>[i(k(e),null,{default:f(()=>[i(k(K))]),_:1})]),default:f(()=>[o[12]||(o[12]=l(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(d(!0),z(y,null,r(t.matches,(e,a)=>(d(),z("div",{key:a,class:"search-match"},[i(k(A),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:f(()=>[l(m("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),i(k(S),{depth:"3",class:"search-match-text",innerHTML:be(e.context,fe.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===fe.value.sessions.length?(d(),c(k(J),{key:0,description:"没有找到匹配的内容"})):s("",!0)])):s("",!0)]),_:1},8,["show"])]))}},[["__scopeId","data-v-8e29bffb"]]);export{me as default};
@@ -1 +0,0 @@
1
- import{i as e,s as a,t as s}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as t,D as l,K as i,O as n,S as r,W as c,Z as u,_t as o,at as d,b as p,et as v,g as m,ht as f,mt as y,st as g,w as b,x as h}from"./vue-vendor-BqZbbXHA.js";import{n as k}from"./client-UDwXBP9i.js";import{B as _,C as w,Ft as z,Nt as P,et as C,it as x,lt as j,pt as B,r as I,tt as D,xt as U}from"./icons-B2Vg-IOC.js";import{n as $,t as O}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as q}from"./DrawerContent-ChXgZ1Xm.js";import{$ as A,F as T,I as E,M as F,N as L,Nt as M,Q as N,ct as S,dt as V}from"./index-BFInlZGI.js";import{t as W}from"./MarkdownEditor-BvkDECwH.js";var Z={class:"form-header"},K={class:"form-container"},Q={class:"form-section"},R={class:"section-title"},G={class:"form-item"},H={key:0,class:"form-error"},J={class:"form-item"},X={class:"form-item"},Y={class:"form-section"},ee={class:"section-title"},ae={class:"apps-toggles"},se={class:"app-name"},te={key:0,class:"platform-empty"},le={class:"form-section content-section"},ie={class:"section-title"},ne={class:"form-footer"},re=s({__name:"PromptsFormDrawer",props:{visible:{type:Boolean,default:!1},editingPreset:{type:Object,default:null},existingIds:{type:Array,default:()=>[]},platforms:{type:Array,default:()=>[]}},emits:["update:visible","saved"],setup(s,{emit:f}){const{drawerWidth:w}=O(600),z=s,C=f,x=p({get:()=>z.visible,set:e=>C("update:visible",e)}),B=p(()=>!!z.editingPreset),{byCapability:I}=M(),U=p(()=>z.platforms.length>0?z.platforms:I("prompts"));function A(){return Object.fromEntries(U.value.map(e=>[e.key,!0]))}const E=g(!1),F=g(""),N=d({id:"",name:"",description:"",content:"",apps:{}});async function V(){if(N.id.trim()?/^[a-zA-Z0-9_-]+$/.test(N.id)?!B.value&&z.existingIds.includes(N.id)?(F.value="该 ID 已被使用",0):(F.value="",1):(F.value="ID 只能包含字母、数字、下划线和连字符",0):(F.value="预设 ID 不能为空",0))if(N.name.trim()){E.value=!0;try{const e={id:N.id.trim(),name:N.name.trim(),description:N.description.trim(),content:N.content,apps:B.value?{...N.apps}:Object.fromEntries(U.value.map(e=>[e.key,!0===N.apps[e.key]]))};z.editingPreset?.isBuiltin&&(e.isBuiltin=!0),(await async function(e){return(await k.post("/prompts/presets",e)).data}(e)).success&&(L.success(B.value?"保存成功":"创建成功"),C("saved"),x.value=!1)}catch(e){L.error("保存失败: "+e.message)}finally{E.value=!1}}else L.error("预设名称不能为空")}function re(){x.value=!1}return u(()=>z.visible,e=>{e&&(z.editingPreset?(N.id=z.editingPreset.id||"",N.name=z.editingPreset.name||"",N.description=z.editingPreset.description||"",N.content=z.editingPreset.content||"",N.apps=z.editingPreset.apps?{...z.editingPreset.apps}:A()):(N.id="",N.name="",N.description="",N.content="",N.apps=A()),F.value="")}),(u,d)=>(c(),r(y($),{show:x.value,"onUpdate:show":d[4]||(d[4]=e=>x.value=e),width:y(w),placement:"right","show-mask":!0},{default:v(()=>[n(y(q),{closable:"","native-scrollbar":!1},{header:v(()=>[h("div",Z,[n(y(e),{size:18,class:"header-icon"},{default:v(()=>[n(y(D))]),_:1}),h("span",null,o(B.value?"编辑预设":"新建预设"),1)])]),footer:v(()=>[h("div",ne,[n(y(a),{onClick:re},{default:v(()=>[...d[12]||(d[12]=[l("取消",-1)])]),_:1}),n(y(a),{type:"primary",onClick:V,loading:E.value},{default:v(()=>[l(o(B.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:v(()=>[h("div",K,[h("div",Q,[h("div",R,[n(y(e),{size:16},{default:v(()=>[n(y(_))]),_:1}),d[5]||(d[5]=h("span",null,"基本信息",-1))]),h("div",G,[d[6]||(d[6]=h("label",{class:"form-label"},[l("预设 ID "),h("span",{class:"required"},"*")],-1)),n(y(S),{value:N.id,"onUpdate:value":d[0]||(d[0]=e=>N.id=e),placeholder:"唯一标识符,如 my-preset",disabled:B.value&&s.editingPreset?.isBuiltin},null,8,["value","disabled"]),F.value?(c(),b("p",H,o(F.value),1)):t("",!0)]),h("div",J,[d[7]||(d[7]=h("label",{class:"form-label"},[l("名称 "),h("span",{class:"required"},"*")],-1)),n(y(S),{value:N.name,"onUpdate:value":d[1]||(d[1]=e=>N.name=e),placeholder:"预设名称"},null,8,["value"])]),h("div",X,[d[8]||(d[8]=h("label",{class:"form-label"},"描述",-1)),n(y(S),{value:N.description,"onUpdate:value":d[2]||(d[2]=e=>N.description=e),placeholder:"简短描述这个预设的用途"},null,8,["value"])])]),h("div",Y,[h("div",ee,[n(y(e),{size:16},{default:v(()=>[n(y(P))]),_:1}),d[9]||(d[9]=h("span",null,"生效范围",-1))]),h("div",ae,[(c(!0),b(m,null,i(U.value,e=>(c(),b("label",{key:e.key,class:"app-toggle"},[n(y(T),{value:N.apps[e.key],"onUpdate:value":a=>N.apps[e.key]=a},null,8,["value","onUpdate:value"]),h("span",se,o(e.promptLabel||e.label||e.title||e.key),1)]))),128)),0===U.value.length?(c(),b("span",te," 当前没有可用的 Prompt 平台 ")):t("",!0)])]),h("div",le,[h("div",ie,[n(y(e),{size:16},{default:v(()=>[n(y(j))]),_:1}),d[10]||(d[10]=h("span",null,"提示词内容",-1)),d[11]||(d[11]=h("span",{class:"content-hint"},"支持 Markdown 格式",-1))]),n(W,{modelValue:N.content,"onUpdate:modelValue":d[3]||(d[3]=e=>N.content=e),rows:16,"min-height":300,placeholder:"# 系统提示词\n\n在这里编写你的系统提示词..."},null,8,["modelValue"])])])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-1e68a77e"]]),ce={class:"drawer-header"},ue={class:"header-title"},oe={class:"prompts-container"},de={class:"status-card"},pe={class:"status-info"},ve={class:"status-text"},me={class:"status-value"},fe={class:"status-actions"},ye={class:"stats-bar"},ge={class:"stats-text"},be={class:"preset-list"},he={key:0,class:"empty-state"},ke={key:1,class:"preset-cards"},_e={class:"card-header"},we={class:"card-title"},ze={class:"preset-name"},Pe={class:"card-actions"},Ce={key:0,class:"card-desc"},xe={class:"card-apps"},je={class:"card-preview"},Be={class:"preview-content"},Ie=s({__name:"PromptsDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(s,{emit:d}){const{drawerWidth:_}=O(720),P=s,j=d,T=p({get:()=>P.visible,set:e=>j("update:visible",e)}),S=g(!1),W=g({}),Z=g(null),K=g(!1),Q=g(null),R=g(null),G=g(!1),{byCapability:H}=M(),J=p(()=>H("prompts")),X=p(()=>{const e=Object.values(W.value),a=e.filter(e=>!e.isBuiltin),s=e.filter(e=>e.isBuiltin);return a.sort((e,a)=>e.id===Z.value?-1:a.id===Z.value?1:(a.updatedAt||0)-(e.updatedAt||0)),[...a,...s]}),Y=p(()=>X.value.length),ee=p(()=>Object.keys(W.value)),ae=p(()=>Z.value?W.value[Z.value]:null),se=p(()=>{const e=X.value;return{builtin:e.filter(e=>e.isBuiltin).length,custom:e.filter(e=>!e.isBuiltin).length}}),te=p(()=>J.value.map(e=>({label:`从 ${e.promptLabel||e.label||e.title||e.key} 导入`,key:e.key})));function le(e){if(!e)return"";let a=e.split("\n").slice(0,4).join("\n");return e.split("\n").length>4&&(a+="\n..."),a.substring(0,200)}async function ie(){S.value=!0;try{const e=await async function(){return(await k.get("/prompts/presets")).data}();e.success&&(W.value=e.presets,Z.value=e.activePresetId)}catch(e){L.error("加载预设失败")}finally{S.value=!1}}async function ne(e){R.value=e.id;try{(await async function(e){return(await k.post(`/prompts/presets/${e}/activate`)).data}(e.id)).success&&(Z.value=e.id,L.success(`已激活预设 "${e.name}"`))}catch(a){L.error("激活失败: "+a.message)}finally{R.value=null}}async function Ie(){F.warning({title:"移除提示词",content:"确定要移除当前激活的提示词吗?这将删除各平台的提示词文件。",positiveText:"移除",negativeText:"取消",onPositiveClick:async()=>{G.value=!0;try{(await async function(){return(await k.post("/prompts/deactivate")).data}()).success&&(Z.value=null,L.success("已移除提示词"))}catch(e){L.error("移除失败: "+e.message)}finally{G.value=!1}}})}function De(e){F.warning({title:"删除确认",content:`确定要删除预设 "${e.name}" 吗?此操作不可恢复。`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{try{(await async function(e){return(await k.delete(`/prompts/presets/${e}`)).data}(e.id)).success&&(delete W.value[e.id],L.success("删除成功"))}catch(a){L.error("删除失败: "+a.message)}}})}async function Ue(e){try{const a=await async function(e,a){return(await k.post(`/prompts/import/${e}`,{name:a})).data}(e);a.success&&(W.value[a.preset.id]=a.preset,L.success(a.message))}catch(a){L.error("导入失败: "+a.message)}}function $e(){Q.value=null,K.value=!0}function Oe(){ie()}return u(()=>P.visible,e=>{e&&ie()},{immediate:!0}),(s,u)=>(c(),b(m,null,[n(y($),{show:T.value,"onUpdate:show":u[0]||(u[0]=e=>T.value=e),width:y(_),placement:"right","show-mask":!0},{default:v(()=>[n(y(q),{title:"Prompts 管理",closable:"","native-scrollbar":!1},{header:v(()=>[h("div",ce,[h("div",ue,[n(y(e),{size:20,class:"header-icon"},{default:v(()=>[n(y(D))]),_:1}),u[2]||(u[2]=h("span",null,"Prompts 管理",-1))])])]),default:v(()=>[h("div",oe,[h("div",de,[h("div",pe,[ae.value?(c(),b(m,{key:0},[n(y(e),{class:"status-icon active",size:18},{default:v(()=>[n(y(U))]),_:1}),h("div",ve,[u[3]||(u[3]=h("span",{class:"status-label"},"当前激活:",-1)),h("span",me,o(ae.value.name),1)])],64)):(c(),b(m,{key:1},[n(y(e),{class:"status-icon inactive",size:18},{default:v(()=>[n(y(w))]),_:1}),u[4]||(u[4]=h("div",{class:"status-text"},[h("span",{class:"status-label"},"未激活任何提示词")],-1))],64))]),h("div",fe,[n(y(N),{trigger:"click",options:te.value,onSelect:Ue},{default:v(()=>[n(y(a),{size:"small",tertiary:"",class:"action-btn"},{icon:v(()=>[n(y(e),{size:14},{default:v(()=>[n(y(C))]),_:1})]),default:v(()=>[u[5]||(u[5]=l(" 导入 ",-1))]),_:1})]),_:1},8,["options"]),n(y(a),{size:"small",tertiary:"",type:"primary",class:"action-btn",onClick:$e},{icon:v(()=>[n(y(e),{size:14},{default:v(()=>[n(y(z))]),_:1})]),default:v(()=>[u[6]||(u[6]=l(" 新建 ",-1))]),_:1}),ae.value?(c(),r(y(A),{key:0,trigger:"hover"},{trigger:v(()=>[n(y(a),{size:"small",quaternary:"",class:"action-btn remove-btn",onClick:Ie,loading:G.value},{icon:v(()=>[n(y(e),{size:16},{default:v(()=>[n(y(B))]),_:1})]),default:v(()=>[u[7]||(u[7]=l(" 移除 ",-1))]),_:1},8,["loading"])]),default:v(()=>[u[8]||(u[8]=l(" 删除各平台的提示词文件 ",-1))]),_:1})):t("",!0)])]),h("div",ye,[h("span",ge,[l(" 共 "+o(Y.value)+" 个预设 ",1),Y.value>0?(c(),b(m,{key:0},[l(" · 自定义: "+o(se.value.custom)+" · 内置模板: "+o(se.value.builtin),1)],64)):t("",!0)])]),h("div",be,[n(y(E),{show:S.value},{default:v(()=>[0!==X.value.length||S.value?(c(),b("div",ke,[(c(!0),b(m,null,i(X.value,s=>(c(),b("div",{key:s.id,class:f(["preset-card",{active:s.id===Z.value}])},[h("div",_e,[h("div",we,[s.id===Z.value?(c(),r(y(e),{key:0,class:"active-icon",size:16},{default:v(()=>[n(y(U))]),_:1})):t("",!0),h("span",ze,o(s.name),1),s.isBuiltin?(c(),r(y(V),{key:1,size:"tiny",bordered:!1,type:"info"},{default:v(()=>[...u[11]||(u[11]=[l("模板",-1)])]),_:1})):t("",!0),s.isImported?(c(),r(y(V),{key:2,size:"tiny",bordered:!1,type:"warning"},{default:v(()=>[...u[12]||(u[12]=[l("已导入",-1)])]),_:1})):t("",!0)]),h("div",Pe,[s.id!==Z.value?(c(),r(y(a),{key:0,size:"tiny",type:"primary",onClick:e=>ne(s),loading:R.value===s.id},{default:v(()=>[...u[13]||(u[13]=[l(" 激活 ",-1)])]),_:1},8,["onClick","loading"])):t("",!0),n(y(a),{quaternary:"",size:"tiny",onClick:e=>function(e){Q.value=e,K.value=!0}(s)},{icon:v(()=>[n(y(e),null,{default:v(()=>[n(y(x))]),_:1})]),_:1},8,["onClick"]),s.isBuiltin?t("",!0):(c(),r(y(a),{key:1,quaternary:"",size:"tiny",onClick:e=>De(s)},{icon:v(()=>[n(y(e),null,{default:v(()=>[n(y(I))]),_:1})]),_:1},8,["onClick"]))])]),s.description?(c(),b("p",Ce,o(s.description),1)):t("",!0),h("div",xe,[u[14]||(u[14]=h("span",{class:"apps-label"},"生效范围:",-1)),(c(!0),b(m,null,i(J.value,e=>(c(),r(y(V),{key:e.key,type:s.apps?.[e.key]?"success":"default",size:"tiny",bordered:!1},{default:v(()=>[l(o(e.promptLabel||e.label||e.title||e.key),1)]),_:2},1032,["type"]))),128))]),h("div",je,[h("pre",Be,o(le(s.content)),1)])],2))),128))])):(c(),b("div",he,[n(y(e),{size:48,class:"empty-icon"},{default:v(()=>[n(y(D))]),_:1}),u[9]||(u[9]=h("p",{class:"empty-title"},"暂无预设",-1)),u[10]||(u[10]=h("p",{class:"empty-desc"},'点击上方"新建"按钮创建系统提示词预设',-1))]))]),_:1},8,["show"])])])]),_:1})]),_:1},8,["show","width"]),n(re,{visible:K.value,"onUpdate:visible":u[1]||(u[1]=e=>K.value=e),"editing-preset":Q.value,"existing-ids":ee.value,platforms:J.value,onSaved:Oe},null,8,["visible","editing-preset","existing-ids","platforms"])],64))}},[["__scopeId","data-v-61810a34"]]);export{Ie as default};
@@ -1 +0,0 @@
1
- .loading-container[data-v-57a5527b]{justify-content:center;align-items:center;min-height:200px;display:flex}.sessions-list[data-v-57a5527b]{flex-direction:column;gap:0;display:flex}
@@ -1 +0,0 @@
1
- import{Dn as e,i as s,t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{D as t,K as n,M as i,O as o,S as l,W as r,Z as c,b as u,et as d,g as m,mt as p,st as h,w as v}from"./vue-vendor-BqZbbXHA.js";import{Ct as f}from"./icons-B2Vg-IOC.js";import{n as w,t as y}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as g}from"./DrawerContent-ChXgZ1Xm.js";import{I as j,M as _,N as x,ct as b,pt as k}from"./index-BFInlZGI.js";import{m as C,n as I,o as D,t as S}from"./sessions-Cmy31slD.js";import{t as M}from"./SessionCard-DkJPy0TY.js";var N=e({default:()=>R}),O={key:0,class:"loading-container"},P={key:1,class:"sessions-list"},R=a({__name:"RecentSessionsDrawer",props:{visible:{type:Boolean,default:!1},channel:{type:String,default:"claude"}},emits:["update:visible"],setup(e,{emit:a}){const{drawerWidth:N}=y(720),R=e,z=a,K=h(!1),T=h([]),U=h(!1),W=u(()=>R.channel);async function A(){U.value=!0;try{const e=await D(10,R.channel);T.value=e.sessions}catch(e){x.error("加载失败: "+e.message)}finally{U.value=!1}}async function B(e){const s=e.alias||"";let a=s;const t=await new Promise(e=>{const t=_.create({title:"设置别名",content:()=>i(b,{defaultValue:s,placeholder:"请输入会话别名","onUpdate:value":e=>{a=e},onKeyup:s=>{"Enter"===s.key&&(t.destroy(),e(a.trim()))}}),positiveText:"确定",negativeText:"取消",onPositiveClick:()=>{e(a.trim())},onNegativeClick:()=>{e(null)}})});if(null!==t)try{t?(await C(e.sessionId,t),x.success("别名设置成功")):(await I(e.sessionId),x.success("别名已删除")),await A()}catch(n){x.error("操作失败: "+n.message)}}async function E(e){try{const{copyResult:s}=await S(e.projectName,e.sessionId,R.channel);if("manual"===s?.method)return void x.warning("自动复制失败,已弹出手动复制框");x.success("启动命令已复制到剪贴板")}catch(s){x.error("复制失败: "+s.message)}}return c(()=>R.visible,e=>{K.value=e,e&&A()},{immediate:!0}),c(K,e=>{z("update:visible",e)}),c(()=>R.channel,()=>{K.value&&A()}),(e,a)=>(r(),l(p(w),{show:K.value,"onUpdate:show":a[0]||(a[0]=e=>K.value=e),width:p(N),placement:"right","show-close":!0},{default:d(()=>[o(p(g),{title:"claude"===R.channel?"Claude 最新对话":"codex"===R.channel?"Codex 最新对话":"gemini"===R.channel?"Gemini 最新对话":"opencode"===R.channel?"OpenCode 最新对话":"omp"===R.channel?"OMP 最新对话":"最新对话","native-scrollbar":!1,closable:""},{default:d(()=>[U.value?(r(),v("div",O,[o(p(j),{size:"medium"},{description:d(()=>[...a[1]||(a[1]=[t("加载中...",-1)])]),_:1})])):T.value.length>0?(r(),v("div",P,[(r(!0),v(m,null,n(T.value,e=>(r(),l(M,{key:e.sessionId,session:e,channel:W.value,"show-project":!0,"hide-fork":!0,"hide-delete":!0,onSetAlias:B,onLaunch:E},null,8,["session","channel"]))),128))])):(r(),l(p(k),{key:2,description:"暂无最近使用的会话",style:{"margin-top":"60px"}},{icon:d(()=>[o(p(s),{size:"48"},{default:d(()=>[o(p(f))]),_:1})]),_:1}))]),_:1},8,["title"])]),_:1},8,["show","width"]))}},[["__scopeId","data-v-57a5527b"]]);export{N as n,R as t};
@@ -1 +0,0 @@
1
- import{i as s,s as e,t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as o,D as t,O as i,S as l,W as n,_t as r,b as d,et as u,mt as c,q as f,st as p,w as m,x as h}from"./vue-vendor-BqZbbXHA.js";import{E as _,G as y,Ot as k,Tt as v,a as g,nt as M,r as j}from"./icons-B2Vg-IOC.js";import{$ as z,dt as $}from"./index-BFInlZGI.js";var B={class:"session-left"},w={class:"session-icon"},F={class:"session-info"},b={class:"session-header"},D={class:"session-title-row"},x={class:"session-title"},C={class:"session-meta"},P={class:"meta-item"},S={key:0,class:"session-message"},I={key:1,class:"session-path"},N={class:"session-actions"},O=a({__name:"SessionCard",props:{session:{type:Object,required:!0},channel:{type:String,default:"claude"},showProject:{type:Boolean,default:!1},hideFork:{type:Boolean,default:!1},hideDelete:{type:Boolean,default:!1}},emits:["set-alias","launch","fork","delete"],setup(a,{emit:O}){const q=a,G=p(!1),E=d(()=>q.session.alias?`${q.session.alias} (${q.session.sessionId.substring(0,8)})`:q.session.sessionId);function K(s){const e=new Date(s),a=new Date-e,o=Math.floor(a/6e4),t=Math.floor(a/36e5),i=Math.floor(a/864e5);return o<1?"刚刚":o<60?`${o}分钟前`:t<24?`${t}小时前`:i<7?`${i}天前`:e.toLocaleDateString("zh-CN")}function L(s){if(!s)return"0 B";const e=Math.floor(Math.log(s)/Math.log(1024));return Math.round(s/Math.pow(1024,e)*100)/100+" "+["B","KB","MB","GB"][e]}return(d,p)=>(n(),m("div",{class:"session-item",onMouseenter:p[4]||(p[4]=s=>G.value=!0),onMouseleave:p[5]||(p[5]=s=>G.value=!1)},[h("div",B,[h("div",w,[i(c(s),{size:"24",color:"#18a058"},{default:u(()=>[i(c(v))]),_:1})]),h("div",F,[h("div",b,[h("div",D,[a.showProject&&a.session.projectDisplayName?(n(),l(c($),{key:0,size:"small",type:"info",bordered:!1,style:{"margin-right":"8px"}},{default:u(()=>[t(r(a.session.projectDisplayName),1)]),_:1})):o("",!0),h("span",x,r(E.value),1),a.session.forkedFrom?(n(),l(c(z),{key:1,placement:"top"},{trigger:u(()=>[i(c($),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(y))]),_:1})]),default:u(()=>[p[6]||(p[6]=t(" Fork ",-1))]),_:1})]),default:u(()=>[h("span",null,"Fork 自 "+r(a.session.forkedFrom),1)]),_:1})):o("",!0)]),h("div",C,[h("span",P,[i(c(s),{size:"14"},{default:u(()=>[i(c(k))]),_:1}),t(" "+r(K(a.session.mtime)),1)]),i(c($),{size:"small",bordered:!1,type:"info"},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(M))]),_:1})]),default:u(()=>[t(" "+r(L(a.session.size)),1)]),_:1}),a.session.gitBranch?(n(),l(c($),{key:0,size:"small",bordered:!1,type:"success"},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(y))]),_:1})]),default:u(()=>[t(" "+r(a.session.gitBranch),1)]),_:1})):o("",!0)])]),a.session.firstMessage?(n(),m("div",S,r(a.session.firstMessage),1)):o("",!0),a.showProject&&a.session.projectFullPath?(n(),m("div",I," 路径: "+r(a.session.projectFullPath),1)):o("",!0)])]),h("div",N,[i(c(e),{size:"small",onClick:p[0]||(p[0]=s=>d.$emit("set-alias",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(_))]),_:1})]),default:u(()=>[p[7]||(p[7]=t(" 别名 ",-1))]),_:1}),i(c(e),{type:"primary",size:"small",onClick:p[1]||(p[1]=s=>d.$emit("launch",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(g))]),_:1})]),default:u(()=>[p[8]||(p[8]=t(" 使用对话 ",-1))]),_:1}),a.hideFork?o("",!0):(n(),l(c(e),{key:0,size:"small",onClick:p[2]||(p[2]=s=>d.$emit("fork",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(y))]),_:1})]),default:u(()=>[p[9]||(p[9]=t(" Fork ",-1))]),_:1})),a.hideDelete?o("",!0):(n(),l(c(e),{key:1,size:"small",type:"error",onClick:p[3]||(p[3]=s=>d.$emit("delete",a.session))},{icon:u(()=>[i(c(s),null,{default:u(()=>[i(c(j))]),_:1})]),_:1})),f(d.$slots,"actions-extra",{},void 0,!0)])],32))}},[["__scopeId","data-v-32d1b310"]]);export{O as t};
@@ -1 +0,0 @@
1
- .project-instruction-panel[data-v-f2f46409]{flex-direction:column;gap:12px;display:flex}.resource-path[data-v-f2f46409]{color:var(--text-tertiary);font-family:monospace;font-size:12px}.actions[data-v-f2f46409]{margin-top:4px}.hint[data-v-f2f46409]{font-size:11px}.unsupported-state[data-v-f2f46409]{color:var(--text-tertiary);text-align:center;padding:28px 12px}.project-mcp-panel[data-v-1ebbb765]{flex-direction:column;min-height:220px;display:flex}.panel-toolbar[data-v-1ebbb765]{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.resource-path[data-v-1ebbb765]{color:var(--text-tertiary);font-family:monospace;font-size:11px}.server-list[data-v-1ebbb765]{flex-direction:column;gap:8px;display:flex}.server-row[data-v-1ebbb765]{border:1px solid var(--border-primary);border-radius:6px;align-items:center;gap:12px;padding:10px;display:flex}.server-info[data-v-1ebbb765]{flex:1;min-width:0}.server-title[data-v-1ebbb765]{color:var(--text-primary);font-size:13px;font-weight:600}.server-spec[data-v-1ebbb765]{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;margin-top:3px;font-family:monospace;font-size:11px;overflow:hidden}.project-config-content[data-v-e9a405fe]{padding:2px 0 12px}.project-config-header[data-v-e9a405fe]{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.project-config-title[data-v-e9a405fe]{color:var(--text-primary);margin-bottom:4px;font-size:14px;font-weight:600}.project-path[data-v-e9a405fe]{text-overflow:ellipsis;white-space:nowrap;max-width:520px;font-family:monospace;font-size:11px;display:block;overflow:hidden}.unsupported-state[data-v-e9a405fe]{color:var(--text-tertiary);text-align:center;padding:36px 12px}.session-list-container[data-v-ab6739c9]{box-sizing:border-box;flex-direction:column;width:100%;height:100%;display:flex}.header[data-v-ab6739c9]{background:var(--bg-primary);border-bottom:1px solid var(--border-primary);flex-shrink:0;padding:24px 24px 16px}.content[data-v-ab6739c9]{flex:1;padding:16px 24px 24px;overflow:hidden auto}.sessions-list[data-v-ab6739c9]{position:relative;overflow:hidden}.back-button[data-v-ab6739c9]{flex-shrink:0;margin-right:12px}.title-bar[data-v-ab6739c9]{align-items:center;gap:16px;display:flex}.title-section[data-v-ab6739c9]{flex:1;min-width:0}.title-with-count[data-v-ab6739c9]{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:2px;display:flex}.title-section h2[data-v-ab6739c9]{margin:0;font-size:20px}.session-count[data-v-ab6739c9]{color:#666;font-size:14px}.total-size-tag[data-v-ab6739c9]{margin-left:8px}.project-path[data-v-ab6739c9]{color:#666;margin-bottom:2px;font-size:13px;display:block}.header-actions[data-v-ab6739c9]{align-items:center;gap:12px;margin-left:4px;display:flex}.search-input[data-v-ab6739c9]{flex-shrink:0;width:320px}.loading-container[data-v-ab6739c9]{justify-content:center;align-items:center;min-height:400px;display:flex}.loading-container.compact[data-v-ab6739c9]{min-height:180px}.session-item[data-v-ab6739c9]{background:var(--bg-primary);border:1px solid var(--border-primary);cursor:pointer;border-radius:8px;align-items:center;gap:12px;margin-bottom:8px;padding:16px;transition:all .2s;display:flex}.session-item[data-v-ab6739c9]:hover{border-color:#18a058;box-shadow:0 2px 8px #18a0581a}.session-item-selection-mode[data-v-ab6739c9]{cursor:default}.session-item-selected[data-v-ab6739c9]{background:#18a0580a;border-color:#18a058;box-shadow:0 0 0 2px #18a0581f}.drag-handle[data-v-ab6739c9]{cursor:move;opacity:.4;flex-shrink:0;justify-content:center;align-items:center;width:24px;height:24px;padding:4px;transition:all .2s;display:flex}.session-item:hover .drag-handle[data-v-ab6739c9]{opacity:1;background-color:#18a0581a;border-radius:4px}.selection-checkbox[data-v-ab6739c9]{justify-content:center;align-items:center;width:24px;min-width:24px;display:flex}.session-left[data-v-ab6739c9]{flex:1;align-items:center;gap:16px;min-width:0;display:flex}.session-icon[data-v-ab6739c9]{flex-shrink:0}.session-info[data-v-ab6739c9]{flex:1;min-width:0}.session-header[data-v-ab6739c9]{align-items:center;margin-bottom:6px;display:flex}.session-title-row[data-v-ab6739c9]{align-items:center;gap:8px;display:flex}.session-title[data-v-ab6739c9]{text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;min-width:0;font-size:15px;font-weight:600;overflow:hidden}.session-meta[data-v-ab6739c9]{align-items:center;gap:8px;margin-bottom:6px;font-size:13px;display:flex}.session-message[data-v-ab6739c9]{text-overflow:ellipsis;white-space:nowrap;max-width:600px;font-size:13px;display:block;overflow:hidden}.session-message-empty[data-v-ab6739c9]{opacity:.5;font-style:italic}.session-right[data-v-ab6739c9]{flex-direction:column;flex-shrink:0;justify-content:flex-start;align-items:flex-end;gap:12px;min-width:280px;display:flex}.session-tags-area[data-v-ab6739c9]{justify-content:flex-end;align-items:flex-start;min-height:24px;display:flex}.session-actions[data-v-ab6739c9]{align-items:center;margin-top:auto;display:flex}.ghost[data-v-ab6739c9]{opacity:.4}.chosen[data-v-ab6739c9]{box-shadow:0 4px 16px #00000026}.search-result-item[data-v-ab6739c9]{border:1px solid var(--border-primary);background:var(--bg-elevated);border-radius:6px;margin-bottom:16px;padding:12px}.search-result-header[data-v-ab6739c9]{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.search-result-title[data-v-ab6739c9]{align-items:center;gap:8px;display:flex}.search-match[data-v-ab6739c9]{background:var(--bg-secondary);border-radius:4px;align-items:flex-start;gap:8px;margin-top:6px;padding:6px;display:flex}.search-match-text[data-v-ab6739c9]{flex:1;line-height:1.6}
@@ -1 +0,0 @@
1
- import{i as e,s as a,t as s}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as l,D as t,F as i,H as n,I as o,K as r,O as u,S as c,V as d,W as v,Z as p,_t as f,b as m,et as h,f as y,g,ht as k,i as _,m as w,mt as j,p as b,r as C,st as P,tt as I,w as x,x as z}from"./vue-vendor-BqZbbXHA.js";import{t as S}from"./vendors-D0c_0KLP.js";import{r as M}from"./platforms-CBkB45JP.js";import{G as N,Mt as $,Tt as F,_ as U,a as B,it as L,l as T,r as A,tt as O,u as D,x as E}from"./icons-B2Vg-IOC.js";import{t as q}from"./use-message-DoLM8C1C.js";import{S as H,l as K}from"./light-Cp0t7v32.js";import{c as W,s as R}from"./AssetPathField-BZI9NvEr.js";import{t as V}from"./McpFormDrawer-DPMnyt5L.js";import{n as G,t as Z}from"./useResponsiveDrawer-D-DDpbnI.js";import{t as J}from"./DrawerContent-ChXgZ1Xm.js";import{t as Q}from"./headers-cf-QapUq.js";import{t as X}from"./SkillsPanel--lLEts9y.js";import{$ as Y,I as ee,K as ae,M as se,N as le,P as te,_ as ie,at as ne,ct as oe,dt as re,lt as ue,nt as ce,pt as de}from"./index-BFInlZGI.js";import{c as ve,f as pe,t as fe}from"./sessions-Cmy31slD.js";import me from"./ChatHistoryDrawer-Ccl4rhdz.js";import{t as he}from"./sessions-yC_oVVh8.js";import{i as ye,l as ge,n as ke,o as _e,r as we,t as je}from"./project-config-B2baPzYL.js";var be={class:"project-instruction-panel"},Ce={key:0,class:"unsupported-state"},Pe={class:"resource-path"},Ie={__name:"ProjectInstructionPanel",props:{projectPath:{type:String,required:!0},platform:{type:String,required:!0},instruction:{type:Object,default:()=>({supported:!1,path:null,exists:!1,content:""})}},emits:["updated"],setup(e,{emit:s}){const i=e,n=s,o=q(),r=H(),d=P(i.instruction.content||""),m=P(!1),y=P(!1);async function k(){m.value=!0;try{const e=await _e(i.projectPath,i.platform,d.value);d.value=e.content??d.value,n("updated",e),o.success("项目指令已保存")}catch(e){o.error(`保存项目指令失败:${e.message}`)}finally{m.value=!1}}function _(){r.warning({title:"删除项目指令",content:`确定删除 ${i.instruction.path} 吗?`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{y.value=!0;try{const e=await je(i.projectPath,i.platform);d.value="",n("updated",e),o.success("项目指令已删除")}catch(e){o.error(`删除项目指令失败:${e.message}`)}finally{y.value=!1}}})}return p(()=>i.instruction,e=>{d.value=e?.content||""},{deep:!0}),(s,i)=>(v(),x("div",be,[e.instruction?.supported?(v(),x(g,{key:1},[z("div",Pe,"目标文件:"+f(e.instruction.path),1),u(j(oe),{value:d.value,"onUpdate:value":i[0]||(i[0]=e=>d.value=e),type:"textarea",rows:16,placeholder:"输入项目指令",disabled:m.value},null,8,["value","disabled"]),u(j(ae),{justify:"end",class:"actions"},{default:h(()=>[e.instruction.exists?(v(),c(j(a),{key:0,"data-action":"delete-instruction",type:"error",secondary:"",loading:y.value,onClick:_},{default:h(()=>[...i[1]||(i[1]=[t(" 删除文件 ",-1)])]),_:1},8,["loading"])):l("",!0),u(j(a),{"data-action":"save-instruction",type:"primary",loading:m.value,onClick:k},{default:h(()=>[...i[2]||(i[2]=[t(" 保存 ",-1)])]),_:1},8,["loading"])]),_:1}),u(j(te),{depth:"3",class:"hint"},{default:h(()=>[...i[3]||(i[3]=[t(" 写入项目原生文件;修改后通常需要重新启动对应 CLI。 ",-1)])]),_:1})],64)):(v(),x("div",Ce," 当前平台不提供项目指令文件 "))]))}},xe=s(Ie,[["__scopeId","data-v-f2f46409"]]),ze={class:"project-mcp-panel"},Se={class:"panel-toolbar"},Me={class:"resource-path"},Ne={key:2,class:"server-list"},$e={class:"server-info"},Fe={class:"server-title"},Ue={class:"server-spec"},Be={__name:"ProjectMcpPanel",props:{projectPath:{type:String,required:!0},platform:{type:String,required:!0},mcp:{type:Object,default:()=>({supported:!0,servers:[]})}},emits:["updated"],setup(e,{emit:s}){const i=e,n=s,o=q(),d=H(),y=P(!1),k=P(null),_=P(""),w=P(i.mcp),b=m(()=>w.value||i.mcp||{servers:[]}),C=m(()=>Array.isArray(b.value?.servers)?b.value.servers:[]),I=m(()=>C.value.some(e=>{const a=e.server||{};return Object.keys(a.env||{}).length>0||Object.keys(a.headers||{}).length>0}));function S(e){const a=e.server||{};return"stdio"===a.type?`${a.command||""} ${(a.args||[]).join(" ")}`.trim():a.url||a.type||"MCP"}function M(){k.value=null,y.value=!0}async function N(){y.value=!1,k.value=null,await $(),n("updated")}async function $(){const e=await ye(i.projectPath,i.platform);w.value=e}return p(()=>i.mcp,e=>{w.value=e},{deep:!0}),p([()=>i.projectPath,()=>i.platform],()=>{i.projectPath&&i.platform&&$().catch(e=>o.error(`加载项目 MCP 失败:${e.message}`))}),(s,p)=>(v(),x("div",ze,[z("div",Se,[z("span",Me,"目标文件:"+f(b.value?.path||"当前平台未声明"),1),u(j(a),{size:"small",type:"primary",onClick:M},{default:h(()=>[...p[1]||(p[1]=[t(" 添加 MCP ",-1)])]),_:1})]),I.value?(v(),c(j(ue),{key:0,type:"warning",bordered:!1,style:{"margin-bottom":"12px"}},{default:h(()=>[...p[2]||(p[2]=[t(" 项目 MCP 配置中的静态密钥可能随项目进入 Git,请优先使用环境变量引用。 ",-1)])]),_:1})):l("",!0),0===C.value.length?(v(),c(j(de),{key:1,description:"暂无项目 MCP 服务器"})):(v(),x("div",Ne,[(v(!0),x(g,null,r(C.value,e=>(v(),x("div",{key:e.id,class:"server-row"},[z("div",$e,[z("div",Fe,f(e.id),1),z("div",Ue,f(S(e)),1)]),u(j(ae),{size:"small"},{default:h(()=>[u(j(a),{size:"tiny",loading:_.value===e.id,onClick:a=>async function(e){_.value=e.id;try{const a=await ge(i.projectPath,i.platform,e.id);a.success?o.success(`${e.id} 连接成功`):o.error(a.message||`${e.id} 连接失败`)}catch(a){o.error(`测试失败:${a.message}`)}finally{_.value=""}}(e)},{default:h(()=>[...p[3]||(p[3]=[t("测试",-1)])]),_:1},8,["loading","onClick"]),u(j(a),{size:"tiny",disabled:e.external,onClick:a=>function(e){k.value={id:e.id,...e},y.value=!0}(e)},{default:h(()=>[...p[4]||(p[4]=[t("编辑",-1)])]),_:1},8,["disabled","onClick"]),u(j(a),{size:"tiny",type:"error",secondary:"",disabled:e.external,onClick:a=>function(e){d.warning({title:"移除项目 MCP",content:`确定从当前项目移除 ${e.id} 吗?用户级配置不会被删除。`,positiveText:"移除",negativeText:"取消",onPositiveClick:async()=>{try{await ke(i.projectPath,i.platform,e.id),await $(),n("updated"),o.success("项目 MCP 已移除")}catch(a){o.error(`移除失败:${a.message}`)}}})}(e)},{default:h(()=>[...p[5]||(p[5]=[t("移除",-1)])]),_:1},8,["disabled","onClick"])]),_:2},1024)]))),128))])),u(V,{visible:y.value,"onUpdate:visible":p[0]||(p[0]=e=>y.value=e),"editing-server":k.value,"existing-ids":C.value.map(e=>e.id),scope:"project","project-path":e.projectPath,platform:e.platform,onSaved:N},null,8,["visible","editing-server","existing-ids","project-path","platform"])]))}},Le=s(Be,[["__scopeId","data-v-1ebbb765"]]),Te={class:"project-config-content"},Ae={class:"project-config-header"},Oe={key:0,class:"unsupported-state"},De={key:0,class:"unsupported-state"},Ee=s({__name:"ProjectConfigDrawer",props:{show:{type:Boolean,default:!1},projectPath:{type:String,default:""},platform:{type:String,default:"claude"}},emits:["update:show"],setup(e,{emit:a}){const s=e,l=a,{drawerWidth:i}=Z(760),n=m({get:()=>s.show,set:e=>l("update:show",e)}),o=[{label:"Claude",value:"claude"},{label:"Codex",value:"codex"},{label:"Gemini",value:"gemini"},{label:"OpenCode",value:"opencode"},{label:"OMP",value:"omp"}],r=P(s.platform||"claude"),y=P("instruction"),g=P(null),k=P(!1),_=P(0);async function w(){if(!s.projectPath||!r.value)return;const e=++_.value;k.value=!0;try{const a=await we(s.projectPath,r.value);if(e!==_.value)return;g.value=a}finally{e===_.value&&(k.value=!1)}}return p(n,e=>{e?(r.value=s.platform||"claude",y.value="instruction",w()):_.value+=1}),p([()=>s.projectPath,()=>s.platform,r],([e,a],s)=>{n.value&&e&&a&&(a===s?.[1]&&e===s?.[0]||w())}),d(()=>{n.value&&w()}),(a,s)=>(v(),c(j(G),{show:n.value,"onUpdate:show":s[2]||(s[2]=e=>n.value=e),width:j(i),placement:"right","show-mask":!0},{default:h(()=>[u(j(J),{title:"项目配置",closable:"","native-scrollbar":!1},{default:h(()=>[z("div",Te,[z("div",Ae,[z("div",null,[s[3]||(s[3]=z("div",{class:"project-config-title"},"当前项目",-1)),u(j(te),{depth:"3",class:"project-path"},{default:h(()=>[t(f(e.projectPath),1)]),_:1})]),u(j(ce),{value:r.value,"onUpdate:value":s[0]||(s[0]=e=>r.value=e),size:"small",options:o,disabled:k.value,style:{width:"130px"}},null,8,["value","disabled"])]),u(j(ee),{show:k.value},{default:h(()=>[u(j(R),{value:y.value,"onUpdate:value":s[1]||(s[1]=e=>y.value=e),type:"line",animated:""},{default:h(()=>[u(j(W),{name:"instruction",tab:"项目指令"},{default:h(()=>[u(xe,{"project-path":e.projectPath,platform:r.value,instruction:g.value?.instruction,onUpdated:w},null,8,["project-path","platform","instruction"])]),_:1}),u(j(W),{name:"skills",tab:"Skills"},{default:h(()=>[!1===g.value?.capabilities?.skills?(v(),x("div",Oe," 当前平台不提供项目 Skills ")):(v(),c(X,{key:1,platform:r.value,"project-path":e.projectPath,scope:"project","in-drawer":"","drawer-visible":n.value},null,8,["platform","project-path","drawer-visible"]))]),_:1}),u(j(W),{name:"mcp",tab:"MCP"},{default:h(()=>[!1===g.value?.capabilities?.mcp?(v(),x("div",De," 当前平台不提供项目 MCP ")):(v(),c(Le,{key:1,"project-path":e.projectPath,platform:r.value,mcp:g.value?.mcp,onUpdated:w},null,8,["project-path","platform","mcp"]))]),_:1})]),_:1},8,["value"])]),_:1},8,["show"])])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-e9a405fe"]]),qe={class:"session-list-container"},He={class:"header"},Ke={class:"title-bar"},We={class:"title-section"},Re={class:"title-with-count"},Ve={class:"header-actions"},Ge={key:0,class:"loading-container"},Ze={key:1,class:"loading-container compact"},Je=["onMouseenter","onClick"],Qe={key:0,class:"drag-handle"},Xe={class:"session-left"},Ye={class:"session-icon"},ea={class:"session-info"},aa={class:"session-header"},sa={class:"session-title-row"},la={class:"session-title"},ta={class:"session-meta"},ia={class:"session-right"},na={class:"session-tags-area"},oa={key:0,class:"session-actions"},ra={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},ua={class:"search-result-header"},ca={class:"search-result-title"},da="__full__",va=s({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(s){const q=s,H=_(),W=C(),R=he(),{addFavorite:V,removeFavorite:G,isFavorite:Z}=ie(),J=m(()=>M(W)),X=P(q.projectName),ye=m(()=>X.value||q.projectName),ge=P(""),ke=P(!1),_e=P(null),we=P(""),je=P(null),be=P([]),Ce=P(null),Pe=P(!1),Ie=P(!1),xe=P(null),ze=P(!1),Se=P(!1),Me=P([]),Ne=P(!1),$e=P(!1),Fe=P(null),Ue=P(""),Be=P(da),Le=P(!1),Te=P(!1),Ae=P([]),Oe=P(!1),De=P(""),va=P(""),pa=P(null),fa={group:{name:`${J.value}-sessions`,pull:!1,put:!1},forceFallback:!0,fallbackOnBody:!1,fallbackTolerance:4,scroll:!0};function ma(e){return"string"==typeof e&&(e.startsWith("/")||/^[A-Za-z]:[\\/]/.test(e)||e.startsWith("\\\\"))}const ha=m(()=>{const e=ye.value;return R.projects.find(a=>a.name===e)||R.projects.find(e=>e.displayName===q.projectName||e.fullPath===q.projectName||e.path===q.projectName)||null}),ya=m(()=>[R.currentProjectInfo?.fullPath,R.currentProjectInfo?.path,ha.value?.fullPath,ha.value?.path].find(ma)||""),ga=m(()=>R.currentProjectInfo?.displayName||ha.value?.displayName||q.projectName),ka=m(()=>ya.value||R.currentProjectInfo?.fullPath||ha.value?.fullPath||ha.value?.path||ye.value),_a=m(()=>new Set(Me.value)),wa=m(()=>Me.value.length),ja=m(()=>be.value.length>0&&be.value.every(e=>_a.value.has(e.sessionId))),ba=m(()=>wa.value>0&&!ja.value);async function Ca(){R.projects.length||await R.fetchProjects();const e=R.projects.find(e=>e.name===q.projectName);if(e)return X.value=e.name,e.name;const a=R.projects.find(e=>e.displayName===q.projectName||e.fullPath===q.projectName||e.path===q.projectName);return a?(X.value=a.name,a.name!==q.projectName&&await H.replace({name:"cli-sessions",params:{platform:J.value,projectName:a.name}}),a.name):(X.value=q.projectName,q.projectName)}p(()=>R.sessionsWithAlias,e=>{be.value=[...e];const a=new Set(e.map(e=>e.sessionId));Me.value=Me.value.filter(e=>a.has(e)),Se.value&&0===e.length&&Ma()},{immediate:!0});const Pa=m(()=>{if(!ge.value)return be.value;const e=ge.value.toLowerCase();return be.value.filter(a=>a.sessionId.toLowerCase().includes(e)||a.alias&&a.alias.toLowerCase().includes(e)||a.firstMessage&&a.firstMessage.toLowerCase().includes(e)||a.gitBranch&&a.gitBranch.toLowerCase().includes(e))});function Ia(){H.push({name:"cli-projects",params:{platform:J.value}})}async function xa(){if(ge.value){ze.value=!0;try{const e=await pe(ye.value,ge.value,35,J.value);Ce.value=e,Pe.value=!0}catch(e){le.error("搜索失败: "+e.message)}finally{ze.value=!1}}}async function za(){const e=be.value.map(e=>e.sessionId);await R.saveSessionOrder(e)}function Sa(){Se.value=!0,je.value=null}function Ma(){Se.value=!1,Me.value=[],je.value=null}function Na(e){return _a.value.has(e)}function $a(e,a=!Na(e)){const s=new Set(Me.value);a?s.add(e):s.delete(e),Me.value=Array.from(s)}function Fa(e){Me.value=e?be.value.map(e=>e.sessionId):[]}function Ua(e){Se.value?$a(e.sessionId):function(e){De.value=e.sessionId,va.value=e.alias||"",Oe.value=!0,o(()=>{pa.value?.open()})}(e)}async function Ba(){if(_e.value)try{const e=_e.value.sessionId;we.value?(await R.setAlias(e,we.value),le.success("别名设置成功")):(await R.deleteAlias(e),le.success("别名已删除")),ke.value=!1,_e.value=null,we.value=""}catch(e){le.error("操作失败: "+e.message)}}function La(){$e.value=!1,Fe.value=null,Ue.value="",Be.value=da,Ae.value=[],Le.value=!1,Te.value=!1}async function Ta(){if(Fe.value)try{Te.value=!0,await R.forkSession(Fe.value.sessionId,{afterUserMessageNumber:Be.value===da?null:Be.value,alias:Ue.value?.trim()||void 0}),le.success("Fork 成功!"),La()}catch(e){le.error("Fork 失败: "+e.message)}finally{Te.value=!1}}function Aa(e){le.error(e)}function Oa(e){const a=new Set((e||[]).filter(Boolean));0!==a.size&&(Me.value=Me.value.filter(e=>!a.has(e)),De.value&&a.has(De.value)&&(Oe.value=!1,De.value="",va.value=""))}async function Da(e){try{const{copyResult:a}=await fe(ye.value,e,J.value);if("manual"===a?.method)return void le.warning("自动复制失败,已弹出手动复制框");le.success("启动命令已复制到剪贴板")}catch(a){le.error("复制失败: "+a.message)}}function Ea(){if(0===wa.value)return void le.warning("请先选择要删除的会话");const e=[...Me.value];se.warning({title:"批量删除会话",content:`确定要删除选中的 ${e.length} 个会话吗?此操作不可恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{Ne.value=!0;try{const a=await R.deleteSessions(e);if(Oa(a.deletedSessionIds),0===a.failed.length)return le.success(`已删除 ${a.deletedSessionIds.length} 个会话`),void Ma();Me.value=a.failed.map(e=>e.sessionId),a.deletedSessionIds.length>0?le.warning(`已删除 ${a.deletedSessionIds.length} 个会话,${a.failed.length} 个删除失败`):le.error(`删除失败: ${a.failed[0].error.message}`)}finally{Ne.value=!1}}})}function qa(e){if(!e)return"0 B";const a=1024;return e<a?e+" B":e<a*a?(e/a).toFixed(1)+" KB":(e/a/a).toFixed(1)+" MB"}function Ha(e,a){if(!a||!e)return e;const s=new RegExp(`(${a})`,"gi");return e.replace(s,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function Ka(e,a=80){return e?e.length>a?e.substring(0,a)+"...":e:""}let Wa=0,Ra=!1;async function Va(){if("visible"!==document.visibilityState||Ra)return;const e=Date.now();if(!(e-Wa<3e4)){Ra=!0,Wa=e;try{const e=xe.value?.scrollTop||0,a=await Ca();await R.fetchSessions(a,{force:!0,silent:!0,fresh:!0}),await o(),xe.value&&(xe.value.scrollTop=e)}finally{Ra=!1}}}function Ga(){"visible"===document.visibilityState&&Va().catch(()=>{})}function Za(){Va().catch(()=>{})}return p([J,()=>q.projectName],([e])=>{Ie.value=!1,Ma(),R.setChannel(e),async function(e={}){const a=await Ca();await R.fetchSessions(a,e)}()},{immediate:!0}),d(()=>{document.addEventListener("visibilitychange",Ga),window.addEventListener("focus",Za)}),n(()=>{document.removeEventListener("visibilitychange",Ga),window.removeEventListener("focus",Za)}),(s,n)=>(v(),x("div",qe,[z("div",He,[z("div",Ke,[u(j(a),{size:"small",onClick:Ia,class:"back-button"},{icon:h(()=>[u(j(e),{size:"18"},{default:h(()=>[u(j($))]),_:1})]),_:1}),z("div",We,[z("div",Re,[u(j(Q),null,{default:h(()=>[t(f(ga.value),1)]),_:1}),u(j(te),{depth:"3",class:"session-count"},{default:h(()=>[t("("+f(j(R).sessions.length)+" 个对话)",1)]),_:1}),u(j(re),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:h(()=>[t(f(qa(j(R).totalSize)),1)]),_:1}),z("div",Ve,[Se.value?(v(),x(g,{key:0},[u(j(ne),{checked:ja.value,indeterminate:ba.value,disabled:0===be.value.length||Ne.value,"onUpdate:checked":Fa},{default:h(()=>[...n[14]||(n[14]=[t(" 全选 ",-1)])]),_:1},8,["checked","indeterminate","disabled"]),u(j(te),{depth:"3"},{default:h(()=>[t("已选 "+f(wa.value)+" 个",1)]),_:1}),u(j(a),{size:"small",type:"error",disabled:0===wa.value,loading:Ne.value,onClick:Ea},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[15]||(n[15]=t(" 删除 ",-1))]),_:1},8,["disabled","loading"]),u(j(a),{size:"small",disabled:Ne.value,onClick:Ma},{default:h(()=>[...n[16]||(n[16]=[t(" 完成 ",-1)])]),_:1},8,["disabled"])],64)):(v(),x(g,{key:1},[u(j(a),{size:"small",type:"error",secondary:"",onClick:Sa},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[17]||(n[17]=t(" 管理 ",-1))]),_:1}),u(j(a),{size:"small",type:"primary",secondary:"",disabled:!ya.value,onClick:n[0]||(n[0]=e=>Ie.value=!0)},{default:h(()=>[...n[18]||(n[18]=[t(" 项目配置 ",-1)])]),_:1},8,["disabled"])],64))])]),u(j(te),{depth:"3",class:"project-path"},{default:h(()=>[t(f(ka.value),1)]),_:1})]),u(j(oe),{value:ge.value,"onUpdate:value":n[1]||(n[1]=e=>ge.value=e),placeholder:"搜索会话...",clearable:"",class:"search-input",onKeyup:b(xa,["enter"]),disabled:ze.value},{prefix:h(()=>[u(j(e),null,{default:h(()=>[u(j(U))]),_:1})]),suffix:h(()=>[u(j(a),{text:"",onClick:xa,disabled:!ge.value||ze.value,loading:ze.value},{default:h(()=>[...n[19]||(n[19]=[t(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])])]),z("div",{class:"content",ref_key:"contentEl",ref:xe},[j(R).loading&&0===j(R).sessions.length&&!j(R).sessionsPending?(v(),x("div",Ge,[u(j(ee),{size:"large"},{description:h(()=>[...n[20]||(n[20]=[t(" 加载会话列表... ",-1)])]),_:1})])):j(R).sessionsPending?(v(),x("div",Ze,[u(j(ee),{size:"small"},{description:h(()=>[...n[21]||(n[21]=[t(" 正在生成会话列表... ",-1)])]),_:1})])):j(R).error&&0===j(R).sessions.length?(v(),c(j(ue),{key:2,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:h(()=>[t(f(j(R).error),1)]),_:1})):Pa.value.length>0?(v(),c(j(S),i({key:3,modelValue:be.value,"onUpdate:modelValue":n[4]||(n[4]=e=>be.value=e),"item-key":"sessionId",class:"sessions-list",handle:".drag-handle",disabled:Se.value||Ne.value},fa,{"ghost-class":"ghost","chosen-class":"chosen",animation:"200",onEnd:za}),{item:h(({element:s})=>[z("div",{class:k(["session-item",{"session-item-selected":Na(s.sessionId),"session-item-selection-mode":Se.value}]),onMouseenter:e=>je.value=s.sessionId,onMouseleave:n[3]||(n[3]=e=>je.value=null),onClick:e=>Ua(s)},[Se.value?(v(),x("div",{key:1,class:"selection-checkbox",onClick:n[2]||(n[2]=w(()=>{},["stop"]))},[u(j(ne),{checked:Na(s.sessionId),"onUpdate:checked":e=>$a(s.sessionId,e)},null,8,["checked","onUpdate:checked"])])):(v(),x("div",Qe,[u(j(e),{size:"16",color:"#999"},{default:h(()=>[u(j(E))]),_:1})])),z("div",Xe,[z("div",Ye,[u(j(e),{size:"24",color:"#18a058"},{default:h(()=>[u(j(F))]),_:1})]),z("div",ea,[z("div",aa,[z("div",sa,[z("span",la,f(s.alias?`${s.alias} (${s.sessionId.substring(0,8)})`:s.sessionId),1),s.forkedFrom?(v(),c(j(Y),{key:0,placement:"top"},{trigger:h(()=>[u(j(re),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[n[22]||(n[22]=t(" Fork ",-1))]),_:1})]),default:h(()=>[t(" Fork 自: "+f(s.forkedFrom),1)]),_:2},1024)):l("",!0)])]),z("div",ta,[u(j(te),{depth:"3"},{default:h(()=>{return[t(f((e=s.mtime,e?new Date(e).toLocaleString("zh-CN"):"")),1)];var e}),_:2},1024),u(j(te),{depth:"3"},{default:h(()=>[...n[23]||(n[23]=[t("•",-1)])]),_:1}),u(j(re),{size:"small",bordered:!1},{default:h(()=>[t(f(qa(s.size)),1)]),_:2},1024)]),s.firstMessage?(v(),c(j(te),{key:0,depth:"3",class:"session-message"},{default:h(()=>[t(f(Ka(s.firstMessage,80)),1)]),_:2},1024)):s.gitBranch||s.summary?l("",!0):(v(),c(j(te),{key:1,depth:"3",class:"session-message session-message-empty"},{default:h(()=>[...n[24]||(n[24]=[t(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),z("div",ia,[z("div",na,[s.gitBranch?(v(),c(j(re),{key:0,size:"small",type:"info",bordered:!1},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[t(" "+f(s.gitBranch),1)]),_:2},1024)):l("",!0)]),Se.value?l("",!0):(v(),x("div",oa,[u(j(ae),null,{default:h(()=>[I(u(j(a),{size:"small",type:"error",onClick:w(e=>{return a=s.sessionId,void se.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await R.deleteSession(a),Oa([a]),le.success("会话已删除")}catch(e){le.error("删除失败: "+e.message)}}});var a},["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(A))]),_:1})]),default:h(()=>[n[25]||(n[25]=t(" 删除 ",-1))]),_:1},8,["onClick"]),[[y,je.value===s.sessionId]]),u(j(a),{size:"small",onClick:w(e=>function(e){_e.value=e,we.value=e.alias||"",ke.value=!0}(s),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(L))]),_:1})]),default:h(()=>[n[26]||(n[26]=t(" 别名 ",-1))]),_:1},8,["onClick"]),u(j(a),{size:"small",type:j(Z)(J.value,ye.value,s.sessionId)?"warning":"default",onClick:w(e=>async function(e){const a=J.value,s=Z(a,ye.value,e.sessionId);try{if(s)await G(a,ye.value,e.sessionId),le.success("已取消收藏");else{const s={sessionId:e.sessionId,projectName:ye.value,projectDisplayName:ga.value,projectFullPath:ka.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await V(a,s),le.success("已添加到收藏")}}catch(l){le.error("操作失败: "+l.message)}}(s),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[j(Z)(J.value,ye.value,s.sessionId)?(v(),c(j(D),{key:0})):(v(),c(j(T),{key:1}))]),_:2},1024)]),default:h(()=>[t(" "+f(j(Z)(J.value,ye.value,s.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"!==J.value?(v(),c(j(a),{key:0,size:"small",onClick:w(e=>async function(e){if("opencode"!==J.value)try{const a=be.value.find(a=>a.sessionId===e);Fe.value=a||{sessionId:e},Ue.value="",Be.value=da,Ae.value=[{label:"完整会话末尾(保留全部消息)",value:da}],$e.value=!0,Le.value=!0;const s=await ve(ye.value,e,J.value),l=Array.isArray(s?.items)?s.items:[];Ae.value=[{label:"完整会话末尾(保留全部消息)",value:da},...l.map(e=>({label:`保留到第 ${e.userMessageNumber} 条用户消息这一轮 · ${e.preview}`,value:e.userMessageNumber}))]}catch(a){le.error("加载 Fork 位置失败: "+a.message),La()}finally{Le.value=!1}else le.warning("OpenCode 当前不支持该 Fork 操作")}(s.sessionId),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(N))]),_:1})]),default:h(()=>[n[27]||(n[27]=t(" Fork ",-1))]),_:1},8,["onClick"])):l("",!0),u(j(a),{size:"small",type:"primary",onClick:w(e=>Da(s.sessionId),["stop"])},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(B))]),_:1})]),default:h(()=>[n[28]||(n[28]=t(" 使用对话 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]))])],42,Je)]),_:1},16,["modelValue","disabled"])):(v(),c(j(de),{key:4,description:"没有找到会话",style:{"margin-top":"60px"}},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(O))]),_:1})]),_:1}))],512),u(j(K),{show:ke.value,"onUpdate:show":n[7]||(n[7]=e=>ke.value=e),preset:"dialog",title:"设置别名"},{action:h(()=>[u(j(ae),null,{default:h(()=>[u(j(a),{onClick:n[6]||(n[6]=e=>ke.value=!1)},{default:h(()=>[...n[29]||(n[29]=[t("取消",-1)])]),_:1}),u(j(a),{type:"primary",onClick:Ba},{default:h(()=>[...n[30]||(n[30]=[t("确定",-1)])]),_:1})]),_:1})]),default:h(()=>[u(j(oe),{value:we.value,"onUpdate:value":n[5]||(n[5]=e=>we.value=e),placeholder:"输入别名(留空删除)",onKeyup:b(Ba,["enter"])},null,8,["value"])]),_:1},8,["show"]),u(j(K),{show:$e.value,"onUpdate:show":n[10]||(n[10]=e=>$e.value=e),preset:"dialog",title:"Fork 对话"},{action:h(()=>[u(j(ae),null,{default:h(()=>[u(j(a),{disabled:Te.value,onClick:La},{default:h(()=>[...n[32]||(n[32]=[t("取消",-1)])]),_:1},8,["disabled"]),u(j(a),{type:"primary",loading:Te.value,onClick:Ta},{default:h(()=>[...n[33]||(n[33]=[t(" 确认 Fork ",-1)])]),_:1},8,["loading"])]),_:1})]),default:h(()=>[u(j(ae),{vertical:"",size:14},{default:h(()=>[u(j(te),{depth:"3"},{default:h(()=>[...n[31]||(n[31]=[t(" 可选择保留到第几条用户消息所在轮次;会包含这条消息后 AI 的完整输出。 ",-1)])]),_:1}),u(j(ce),{value:Be.value,"onUpdate:value":n[8]||(n[8]=e=>Be.value=e),options:Ae.value,loading:Le.value,clearable:"",placeholder:"选择保留到哪一轮(默认完整会话)"},null,8,["value","options","loading"]),u(j(oe),{value:Ue.value,"onUpdate:value":n[9]||(n[9]=e=>Ue.value=e),placeholder:"输入新会话别名(可选)",maxlength:"120"},null,8,["value"])]),_:1})]),_:1},8,["show"]),u(j(K),{show:Pe.value,"onUpdate:show":n[11]||(n[11]=e=>Pe.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:h(()=>[Ce.value?(v(),x("div",ra,[u(j(ue),{type:"info",style:{"margin-bottom":"16px"}},{default:h(()=>[t(' 关键词 "'+f(Ce.value.keyword)+'" 共找到 '+f(Ce.value.totalMatches)+" 处匹配 ",1)]),_:1}),(v(!0),x(g,null,r(Ce.value.sessions,s=>(v(),x("div",{key:s.sessionId,class:"search-result-item"},[z("div",ua,[z("div",ca,[u(j(te),{strong:""},{default:h(()=>[t(f(s.alias?`${s.alias} (${s.sessionId.substring(0,8)})`:s.sessionId.substring(0,8)),1)]),_:2},1024),u(j(re),{size:"small",bordered:!1},{default:h(()=>[t(f(s.matchCount)+" 个匹配",1)]),_:2},1024)]),u(j(a),{size:"small",type:"primary",onClick:e=>Da(s.sessionId)},{icon:h(()=>[u(j(e),null,{default:h(()=>[u(j(B))]),_:1})]),default:h(()=>[n[34]||(n[34]=t(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(v(!0),x(g,null,r(s.matches,(e,a)=>(v(),x("div",{key:a,class:"search-match"},[u(j(re),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:h(()=>[t(f("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),u(j(te),{depth:"3",class:"search-match-text",innerHTML:Ha(e.context,Ce.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Ce.value.sessions.length?(v(),c(j(de),{key:0,description:"没有找到匹配的内容"})):l("",!0)])):l("",!0)]),_:1},8,["show"]),De.value?(v(),c(me,{key:0,ref_key:"chatHistoryRef",ref:pa,show:Oe.value,"onUpdate:show":n[12]||(n[12]=e=>Oe.value=e),"project-name":ye.value,"session-id":De.value,"session-alias":va.value,channel:J.value,onError:Aa},null,8,["show","project-name","session-id","session-alias","channel"])):l("",!0),u(Ee,{show:Ie.value,"onUpdate:show":n[13]||(n[13]=e=>Ie.value=e),"project-path":ya.value,platform:J.value},null,8,["show","project-path","platform"])]))}},[["__scopeId","data-v-ab6739c9"]]);export{va as default};
@@ -1 +0,0 @@
1
- import{t as a}from"./_plugin-vue_export-helper-BeLZJZij.js";import{O as r,W as e,b as l,et as s,mt as t,r as o,w as i}from"./vue-vendor-BqZbbXHA.js";import{O as m}from"./light-Cp0t7v32.js";import{t as p}from"./SkillsPanel--lLEts9y.js";import{Nt as u}from"./index-BFInlZGI.js";var f={class:"skill-manager"},n=a({__name:"SkillManager",setup(a){const n=o(),{byCapability:d}=u(),v=l(()=>d("skills").map(a=>a.key)),y=l(()=>{const a=Array.isArray(n.query.platform)?n.query.platform[0]:n.query.platform;return v.value.includes(a)?a:""});return(a,l)=>(e(),i("div",f,[r(t(m),{title:"Skills 技能管理",bordered:!1},{default:s(()=>[r(p,{"in-drawer":!1,"hide-back":!0,platform:y.value},null,8,["platform"])]),_:1})]))}},[["__scopeId","data-v-350fb0fd"]]);export{n as default};