@loop_ouroboros/mcp-hub-lite 1.2.9 → 1.3.0

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 (137) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/client/assets/{HomeView-CGezWc0j.js → HomeView-Bi2bkUKf.js} +1 -1
  3. package/dist/client/assets/{ResourceDetailView-CDmWGdAK.css → ResourceDetailView-BkTSg91z.css} +1 -1
  4. package/dist/client/assets/ResourceDetailView-DyuSovH9.js +1 -0
  5. package/dist/client/assets/ResourcesView-CU0VbNy5.js +1 -0
  6. package/dist/client/assets/ResourcesView-zgV8Nq7w.css +1 -0
  7. package/dist/client/assets/{ServerDashboard-g5p4VC_-.js → ServerDashboard-BGyyZAti.js} +1 -1
  8. package/dist/client/assets/{ServerDetail-DCQH8HIb.css → ServerDetail-CPNAFBPM.css} +1 -1
  9. package/dist/client/assets/ServerDetail-bcQ8BVXR.js +2 -0
  10. package/dist/client/assets/{ServerListView-DZsy2gaQ.js → ServerListView-yQPVJFHG.js} +1 -1
  11. package/dist/client/assets/{ServerStatusTags.vue_vue_type_script_setup_true_lang-DmGg4uuV.js → ServerStatusTags.vue_vue_type_script_setup_true_lang-C8gQlxGE.js} +1 -1
  12. package/dist/client/assets/{SettingsView-DQSWb9xM.js → SettingsView-B1DxbFP3.js} +1 -1
  13. package/dist/client/assets/ToolCallDialog-BQ9UJZ_-.css +1 -0
  14. package/dist/client/assets/ToolCallDialog-DEapCO06.js +1 -0
  15. package/dist/client/assets/ToolsView-DA0u_bCw.js +1 -0
  16. package/dist/client/assets/ToolsView-cO61nMNr.css +1 -0
  17. package/dist/client/assets/{_baseClone-DsVtZfPm.js → _baseClone-B991Lvrt.js} +1 -1
  18. package/dist/client/assets/{el-form-item-CTsVV8sm.js → el-form-item-DfWq_kSy.js} +1 -1
  19. package/dist/client/assets/{el-input-Bh1VGJTU.js → el-input-5YzZrwir.js} +1 -1
  20. package/dist/client/assets/{el-loading-huOeK9cW.js → el-loading-DE3FcxNH.js} +1 -1
  21. package/dist/client/assets/{el-overlay-CR_KVhLU.js → el-overlay-BTeTueuN.js} +1 -1
  22. package/dist/client/assets/{el-radio-group-BSbtAW4k.js → el-radio-group-Y1E2bxIW.js} +1 -1
  23. package/dist/client/assets/{el-skeleton-item-BSxOLPFM.js → el-skeleton-item-DhgR50Jx.js} +1 -1
  24. package/dist/client/assets/{el-switch-BaQUQWTL.js → el-switch-fF--nMSD.js} +1 -1
  25. package/dist/client/assets/{el-tab-pane-9JxLgdS7.js → el-tab-pane-rvS_KTwP.js} +1 -1
  26. package/dist/client/assets/{el-table-column-Du1l9Ww3.js → el-table-column-B1O8mY47.js} +1 -1
  27. package/dist/client/assets/{index-BNmwPGMT.css → index-Bzz3tYbS.css} +1 -1
  28. package/dist/client/assets/{index-CsZoFRv1.js → index-DkqV9kH4.js} +2 -2
  29. package/dist/client/assets/{omit-Btci9mp3.js → omit-BIIebEYo.js} +1 -1
  30. package/dist/client/assets/{raf-tUu4BwZS.js → raf-Cj-gATZv.js} +1 -1
  31. package/dist/client/index.html +2 -2
  32. package/dist/server/shared/models/constants.d.ts +3 -0
  33. package/dist/server/shared/models/constants.d.ts.map +1 -0
  34. package/dist/server/shared/models/constants.js +2 -0
  35. package/dist/server/shared/models/index.d.ts +1 -0
  36. package/dist/server/shared/models/index.d.ts.map +1 -1
  37. package/dist/server/shared/models/index.js +1 -0
  38. package/dist/server/shared/types/index.d.ts +0 -1
  39. package/dist/server/shared/types/index.d.ts.map +1 -1
  40. package/dist/server/shared/types/index.js +0 -1
  41. package/dist/server/src/api/mcp/debug-response-wrapper.js +1 -1
  42. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  43. package/dist/server/src/api/mcp/gateway.js +23 -41
  44. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  45. package/dist/server/src/api/web/hub-tools.js +11 -0
  46. package/dist/server/src/api/web/mcp-status.js +2 -2
  47. package/dist/server/src/api/web/search.d.ts +2 -16
  48. package/dist/server/src/api/web/search.d.ts.map +1 -1
  49. package/dist/server/src/api/web/search.js +22 -30
  50. package/dist/server/src/api/web/servers.js +1 -1
  51. package/dist/server/src/api/ws/events.js +1 -1
  52. package/dist/server/src/api/ws/ws-handler.js +1 -1
  53. package/dist/server/src/app.js +1 -1
  54. package/dist/server/src/cli/commands/tool-use.d.ts +10 -3
  55. package/dist/server/src/cli/commands/tool-use.d.ts.map +1 -1
  56. package/dist/server/src/cli/commands/tool-use.js +69 -30
  57. package/dist/server/src/config/config-change-logger.js +1 -1
  58. package/dist/server/src/config/config-loader.js +1 -1
  59. package/dist/server/src/config/config-manager.js +1 -1
  60. package/dist/server/src/config/config-migrator.d.ts +4 -48
  61. package/dist/server/src/config/config-migrator.d.ts.map +1 -1
  62. package/dist/server/src/config/config-migrator.js +2 -103
  63. package/dist/server/src/config/config-saver.js +1 -1
  64. package/dist/server/src/config/server-config-manager.js +1 -1
  65. package/dist/server/src/models/system-tools.constants.d.ts +2 -1
  66. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  67. package/dist/server/src/models/system-tools.constants.js +2 -1
  68. package/dist/server/src/pid/manager.js +1 -1
  69. package/dist/server/src/server/dev-server.js +2 -2
  70. package/dist/server/src/server/runner.js +2 -2
  71. package/dist/server/src/server/startup.js +2 -2
  72. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  73. package/dist/server/src/services/connection/connection-manager.js +16 -21
  74. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  75. package/dist/server/src/services/connection/tool-cache.js +10 -8
  76. package/dist/server/src/services/event-bus.service.d.ts +3 -1
  77. package/dist/server/src/services/event-bus.service.d.ts.map +1 -1
  78. package/dist/server/src/services/event-bus.service.js +1 -0
  79. package/dist/server/src/services/gateway/gateway.service.d.ts +1 -0
  80. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  81. package/dist/server/src/services/gateway/gateway.service.js +29 -7
  82. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +1 -2
  83. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  84. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +24 -13
  85. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  86. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +7 -3
  87. package/dist/server/src/services/gateway/tool-list-generator.d.ts +14 -19
  88. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  89. package/dist/server/src/services/gateway/tool-list-generator.js +221 -80
  90. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  91. package/dist/server/src/services/hub-manager.service.js +15 -2
  92. package/dist/server/src/services/hub-tools/instance-selector.js +1 -1
  93. package/dist/server/src/services/hub-tools/resource-generator.d.ts +0 -21
  94. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  95. package/dist/server/src/services/hub-tools/resource-generator.js +15 -15
  96. package/dist/server/src/services/hub-tools/server-selector.js +1 -1
  97. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  98. package/dist/server/src/services/hub-tools.service.js +15 -12
  99. package/dist/server/src/services/log-storage.service.js +1 -1
  100. package/dist/server/src/services/system-tool-handler.js +1 -1
  101. package/dist/server/src/utils/error-handler.js +1 -1
  102. package/dist/server/src/utils/index.d.ts +1 -1
  103. package/dist/server/src/utils/index.d.ts.map +1 -1
  104. package/dist/server/src/utils/index.js +1 -1
  105. package/dist/server/src/utils/json-utils.js +4 -4
  106. package/dist/server/src/utils/log-rotator.d.ts +0 -15
  107. package/dist/server/src/utils/log-rotator.d.ts.map +1 -1
  108. package/dist/server/src/utils/log-rotator.js +0 -18
  109. package/dist/server/src/utils/port-checker.js +1 -1
  110. package/dist/server/src/utils/transports/stdio-transport.js +1 -1
  111. package/dist/server/src/utils/transports/streamable-http-transport.js +1 -1
  112. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  113. package/dist/server/src/utils/transports/transport-factory.js +26 -3
  114. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +1 -1
  115. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +1 -1
  116. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +1 -1
  117. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +1 -1
  118. package/dist/server/tests/integration/gateway/mcp-connection.test.js +1 -1
  119. package/dist/server/tests/types/logger-test-helpers.d.ts +1 -1
  120. package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -1
  121. package/dist/server/tests/unit/config/config-migrator.test.js +45 -105
  122. package/dist/server/tests/unit/config/config-saver.test.js +1 -1
  123. package/dist/server/tests/unit/server/runner.test.js +5 -6
  124. package/dist/server/tests/unit/services/gateway-logging.test.js +1 -1
  125. package/dist/server/tests/unit/services/hub-manager-service.test.js +4 -5
  126. package/dist/server/tests/unit/services/hub-tools.service.test.js +78 -2
  127. package/dist/server/tests/unit/utils/log-rotator.test.js +1 -15
  128. package/dist/server/tests/unit/utils/logger.test.js +1 -1
  129. package/package.json +1 -3
  130. package/dist/client/assets/ResourceDetailView-Bi5UsbFq.js +0 -1
  131. package/dist/client/assets/ResourcesView-B9anSm85.js +0 -1
  132. package/dist/client/assets/ResourcesView-Cc8RHtia.css +0 -1
  133. package/dist/client/assets/ServerDetail-DMoFqWCp.js +0 -2
  134. package/dist/client/assets/ToolCallDialog-BEyRp_J3.js +0 -1
  135. package/dist/client/assets/ToolCallDialog-BhdPX-Kf.css +0 -1
  136. package/dist/client/assets/ToolsView-BU7PKJwt.js +0 -1
  137. package/dist/client/assets/ToolsView-BkrQLjH9.css +0 -1
@@ -1,2 +0,0 @@
1
- import{q as Xe,x as ft,y as pt,_ as gt,T as yt,b as Se,z as ht,j as de,A as bt,B as Ze,C as Ye,D as Ke,F as _t,G as et,H as $t,I as Ct,v as ot,r as Pe,n as wt,k as ie,p as ve,J as kt,K as xt,E as I,L as St,M as Vt,N as It,O as Tt,P as Dt,Q as Et,u as Fe,a as Ut,R as Bt,s as tt,S as At,t as Rt,o as zt}from"./index-CsZoFRv1.js";import{E as Nt,a as jt}from"./el-tab-pane-9JxLgdS7.js";import{n as he,a2 as Ce,x as u,y as L,G as v,H as ze,O as s,C as n,J as G,I as ke,K as at,A as $,U as we,V as M,$ as o,aj as be,v as Ot,L as Ne,a0 as D,M as Mt,t as ue,c as J,r as O,Q as Pt,ak as je,h as K,j as Ft,F as Lt,al as Ht,p as Oe,a as Le,a7 as rt,a8 as it,l as lt,d as ut,aa as me,u as h,P as X,ai as Y,Z as Jt,ac as qt,ab as He,am as Wt,k as Ae}from"./vue-vendor-Dwcr0jep.js";import{E as Ve,a as Je}from"./el-input-Bh1VGJTU.js";import{_ as Gt,a as ct}from"./ServerStatusTags.vue_vue_type_script_setup_true_lang-DmGg4uuV.js";import{c as Qt,u as Xt,d as Zt,e as Yt,a as qe,b as We,E as Ge}from"./el-overlay-CR_KVhLU.js";import{i as Kt,E as dt,a as mt}from"./el-switch-BaQUQWTL.js";import{E as ea,a as ta}from"./el-radio-group-BSbtAW4k.js";import{_ as Ie}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{E as aa,a as la,b as na}from"./el-table-column-Du1l9Ww3.js";import{T as sa}from"./ToolCallDialog-BEyRp_J3.js";import"./raf-tUu4BwZS.js";import"./event-BB_Ol6Sd.js";import"./omit-Btci9mp3.js";import"./_baseClone-DsVtZfPm.js";const Me="_trap-focus-children",ye=[],nt=e=>{if(ye.length===0)return;const m=ft(e),l=ye[ye.length-1][Me];if(l.length>0&&m===pt.tab){if(l.length===1){e.preventDefault(),document.activeElement!==l[0]&&l[0].focus();return}const c=e.shiftKey,t=e.target===l[0],y=e.target===l[l.length-1];t&&c&&(e.preventDefault(),l[l.length-1].focus()),y&&!c&&(e.preventDefault(),l[0].focus())}},oa={beforeMount(e){e[Me]=Xe(e),ye.push(e),ye.length<=1&&document.addEventListener("keydown",nt)},updated(e){he(()=>{e[Me]=Xe(e)})},unmounted(){ye.shift(),ye.length===0&&document.removeEventListener("keydown",nt)}},ra=ue({name:"ElMessageBox",directives:{TrapFocus:oa},components:{ElButton:de,ElFocusTrap:ht,ElInput:Ve,ElOverlay:Qt,ElIcon:Se,...yt},inheritAttrs:!1,props:{buttonSize:{type:String,validator:Kt},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:Boolean,container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:m}){const{locale:l,zIndex:c,ns:t,size:y}=bt("message-box",J(()=>e.buttonSize)),{t:i}=l,{nextZIndex:V}=c,R=O(!1),_=Pt({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",closeIcon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:"",inputValidator:void 0,inputErrorMessage:"",message:"",modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:je(Ze),cancelButtonLoadingIcon:je(Ze),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:V()}),a=J(()=>{const E=_.type;return{[t.bm("icon",E)]:E&&Ye[E]}}),f=Ke(),A=Ke(),k=J(()=>{const E=_.type;return _.icon||E&&Ye[E]||""}),C=J(()=>!!_.message),b=O(),P=O(),B=O(),ee=O(),le=O(),se=J(()=>_.confirmButtonClass);K(()=>_.inputValue,async E=>{await he(),e.boxType==="prompt"&&E&&q()},{immediate:!0}),K(()=>R.value,E=>{var W,te;E&&(e.boxType!=="prompt"&&(_.autofocus?B.value=(te=(W=le.value)==null?void 0:W.$el)!=null?te:b.value:B.value=b.value),_.zIndex=V()),e.boxType==="prompt"&&(E?he().then(()=>{var pe;ee.value&&ee.value.$el&&(_.autofocus?B.value=(pe=oe())!=null?pe:b.value:B.value=b.value)}):(_.editorErrorMessage="",_.validateError=!1))});const ce=J(()=>e.draggable),j=J(()=>e.overflow),{isDragging:g}=Xt(b,P,ce,j);Ft(async()=>{await he(),e.closeOnHashChange&&window.addEventListener("hashchange",z)}),Lt(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",z)});function z(){R.value&&(R.value=!1,he(()=>{_.action&&m("action",_.action)}))}const d=()=>{e.closeOnClickModal&&S(_.distinguishCancelAndClose?"close":"cancel")},w=Yt(d),F=E=>{if(_.inputType!=="textarea")return E.preventDefault(),S("confirm")},S=E=>{var W;e.boxType==="prompt"&&E==="confirm"&&!q()||(_.action=E,_.beforeClose?(W=_.beforeClose)==null||W.call(_,E,_,z):z())},q=()=>{if(e.boxType==="prompt"){const E=_.inputPattern;if(E&&!E.test(_.inputValue||""))return _.editorErrorMessage=_.inputErrorMessage||i("el.messagebox.error"),_.validateError=!0,!1;const W=_.inputValidator;if(Oe(W)){const te=W(_.inputValue);if(te===!1)return _.editorErrorMessage=_.inputErrorMessage||i("el.messagebox.error"),_.validateError=!0,!1;if(Le(te))return _.editorErrorMessage=te,_.validateError=!0,!1}}return _.editorErrorMessage="",_.validateError=!1,!0},oe=()=>{var E,W;const te=(E=ee.value)==null?void 0:E.$refs;return(W=te?.input)!=null?W:te?.textarea},re=()=>{S("close")},H=()=>{e.closeOnPressEscape&&re()};return e.lockScroll&&Zt(R,{ns:t}),{...Ht(_),ns:t,overlayEvent:w,visible:R,hasMessage:C,typeClass:a,contentId:f,inputId:A,btnSize:y,iconComponent:k,confirmButtonClasses:se,rootRef:b,focusStartRef:B,headerRef:P,inputRef:ee,isDragging:g,confirmRef:le,doClose:z,handleClose:re,onCloseRequested:H,handleWrapperClick:d,handleInputEnter:F,handleAction:S,t:i}}}),ia=["aria-label","aria-describedby"],ua=["aria-label"],ca=["id"];function da(e,m,l,c,t,y){const i=Ce("el-icon"),V=Ce("el-input"),R=Ce("el-button"),_=Ce("el-focus-trap"),a=Ce("el-overlay");return u(),L(Mt,{name:"fade-in-linear",onAfterLeave:m[11]||(m[11]=f=>e.$emit("vanish")),persisted:""},{default:v(()=>[ze(s(a,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:v(()=>[n("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:G(`${e.ns.namespace.value}-overlay-message-box`),onClick:m[8]||(m[8]=(...f)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...f)),onMousedown:m[9]||(m[9]=(...f)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...f)),onMouseup:m[10]||(m[10]=(...f)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...f))},[s(_,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:v(()=>[n("div",{ref:"rootRef",class:G([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),e.ns.is("dragging",e.isDragging),{[e.ns.m("center")]:e.center}]),style:at(e.customStyle),tabindex:"-1",onClick:m[7]||(m[7]=ke(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(u(),$("div",{key:0,ref:"headerRef",class:G([e.ns.e("header"),{"show-close":e.showClose}])},[n("div",{class:G(e.ns.e("title"))},[e.iconComponent&&e.center?(u(),L(i,{key:0,class:G([e.ns.e("status"),e.typeClass])},{default:v(()=>[(u(),L(we(e.iconComponent)))]),_:1},8,["class"])):M("v-if",!0),n("span",null,o(e.title),1)],2),e.showClose?(u(),$("button",{key:0,type:"button",class:G(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:m[0]||(m[0]=f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:m[1]||(m[1]=be(ke(f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[s(i,{class:G(e.ns.e("close"))},{default:v(()=>[(u(),L(we(e.closeIcon||"close")))]),_:1},8,["class"])],42,ua)):M("v-if",!0)],2)):M("v-if",!0),n("div",{id:e.contentId,class:G(e.ns.e("content"))},[n("div",{class:G(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(u(),L(i,{key:0,class:G([e.ns.e("status"),e.typeClass])},{default:v(()=>[(u(),L(we(e.iconComponent)))]),_:1},8,["class"])):M("v-if",!0),e.hasMessage?(u(),$("div",{key:1,class:G(e.ns.e("message"))},[Ot(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(u(),L(we(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(u(),L(we(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0,textContent:o(e.message)},null,8,["for","textContent"]))])],2)):M("v-if",!0)],2),ze(n("div",{class:G(e.ns.e("input"))},[s(V,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":m[2]||(m[2]=f=>e.inputValue=f),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:G({invalid:e.validateError}),onKeydown:be(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),n("div",{class:G(e.ns.e("errormsg")),style:at({visibility:e.editorErrorMessage?"visible":"hidden"})},o(e.editorErrorMessage),7)],2),[[Ne,e.showInput]])],10,ca),n("div",{class:G(e.ns.e("btns"))},[e.showCancelButton?(u(),L(R,{key:0,loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:G([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:m[3]||(m[3]=f=>e.handleAction("cancel")),onKeydown:m[4]||(m[4]=be(ke(f=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:v(()=>[D(o(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["loading","loading-icon","class","round","size"])):M("v-if",!0),ze(s(R,{ref:"confirmRef",type:"primary",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:G([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:m[5]||(m[5]=f=>e.handleAction("confirm")),onKeydown:m[6]||(m[6]=be(ke(f=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:v(()=>[D(o(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["loading","loading-icon","class","round","disabled","size"]),[[Ne,e.showConfirmButton]])],2)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,ia)]),_:3},8,["z-index","overlay-class","mask"]),[[Ne,e.visible]])]),_:3})}var ma=gt(ra,[["render",da],["__file","/home/runner/work/element-plus/element-plus/packages/components/message-box/src/index.vue"]]);const xe=new Map,va=e=>{let m=document.body;return e.appendTo&&(Le(e.appendTo)&&(m=document.querySelector(e.appendTo)),et(e.appendTo)&&(m=e.appendTo),et(m)||(m=document.body)),m},fa=(e,m,l=null)=>{const c=s(ma,e,Oe(e.message)||rt(e.message)?{default:Oe(e.message)?e.message:()=>e.message}:null);return c.appContext=l,it(c,m),va(e).appendChild(m.firstElementChild),c.component},pa=()=>document.createElement("div"),ga=(e,m)=>{const l=pa();e.onVanish=()=>{it(null,l),xe.delete(t)},e.onAction=y=>{const i=xe.get(t);let V;e.showInput?V={value:t.inputValue,action:y}:V=y,e.callback?e.callback(V,c.proxy):y==="cancel"||y==="close"?e.distinguishCancelAndClose&&y!=="cancel"?i.reject("close"):i.reject("cancel"):i.resolve(V)};const c=fa(e,l,m),t=c.proxy;for(const y in e)lt(e,y)&&!lt(t.$props,y)&&(y==="closeIcon"&&ut(e[y])?t[y]=je(e[y]):t[y]=e[y]);return t.visible=!0,t};function _e(e,m=null){if(!_t)return Promise.reject();let l;return Le(e)||rt(e)?e={message:e}:l=e.callback,new Promise((c,t)=>{const y=ga(e,m??_e._context);xe.set(y,{options:e,callback:l,resolve:c,reject:t})})}const ya=["alert","confirm","prompt"],ha={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};ya.forEach(e=>{_e[e]=ba(e)});function ba(e){return(m,l,c,t)=>{let y="";return ut(l)?(c=l,y=""):$t(l)?y="":y=l,_e(Object.assign({title:y,message:m,type:"",...ha[e]},c,{boxType:e}),t)}}_e.close=()=>{xe.forEach((e,m)=>{m.doClose()}),xe.clear()};_e._context=null;const ge=_e;ge.install=e=>{ge._context=e._context,e.config.globalProperties.$msgbox=ge,e.config.globalProperties.$messageBox=ge,e.config.globalProperties.$alert=ge.alert,e.config.globalProperties.$confirm=ge.confirm,e.config.globalProperties.$prompt=ge.prompt};const vt=ge,_a={class:"flex items-center justify-between shrink-0"},$a={class:"flex items-center gap-4"},Ca={class:"flex flex-col items-start gap-2"},wa={class:"flex items-center gap-2"},ka={class:"text-2xl font-bold text-gray-900 dark:text-white"},xa={class:"flex gap-2"},Sa=ue({__name:"ServerDetailHeader",props:{server:{}},emits:["back","delete","restart-all","start-all","stop-all"],setup(e,{emit:m}){const l=e,c=m;me();const t=J(()=>l.server.rawV11Config?.instances?.length?l.server.rawV11Config.instances.length:l.server.instances?.length?l.server.instances.length:1),y=J(()=>t.value),i=J(()=>l.server.instances?.length?l.server.instances.filter(k=>k.status==="online").length:l.server.status==="online"?1:0),V=J(()=>l.server.instances?.length?l.server.instances.filter(k=>k.status!=="online").length:t.value>1?t.value-i.value:l.server.status!=="online"?1:0);function R(){c("back")}function _(){c("delete")}function a(){c("restart-all")}function f(){c("start-all")}function A(){c("stop-all")}return(k,C)=>{const b=de,P=Je;return u(),$("div",_a,[n("div",$a,[s(b,{icon:h(Ct),plain:"",onClick:R,class:"shrink-0"},{default:v(()=>[D(o(k.$t("action.back")),1)]),_:1},8,["icon"]),n("div",Ca,[n("div",wa,[n("h2",ka,o(e.server.name),1),e.server.version?(u(),L(P,{key:0,size:"small",class:"ml-2"},{default:v(()=>[D(o(e.server.version),1)]),_:1})):M("",!0)]),s(Gt,{server:e.server},null,8,["server"])])]),n("div",xa,[V.value>0?(u(),L(b,{key:0,type:"success",icon:h(ot),onClick:f},{default:v(()=>[D(o(k.$t("action.startAll"))+" ("+o(V.value)+") ",1)]),_:1},8,["icon"])):M("",!0),i.value>0?(u(),L(b,{key:1,type:"primary",icon:h(Pe),onClick:a},{default:v(()=>[D(o(k.$t("action.restartAll"))+" ("+o(y.value)+") ",1)]),_:1},8,["icon"])):M("",!0),i.value>0?(u(),L(b,{key:2,type:"warning",icon:h(wt),onClick:A},{default:v(()=>[D(o(k.$t("action.stopAll"))+" ("+o(i.value)+") ",1)]),_:1},8,["icon"])):M("",!0),s(b,{type:"danger",icon:h(ie),onClick:_},{default:v(()=>[D(o(k.$t("action.deleteServer")),1)]),_:1},8,["icon"])])])}}}),Va={class:"config-template-form h-full flex flex-col min-h-0"},Ia={class:"space-y-4 flex-1 overflow-y-auto min-h-0"},Ta={class:"px-4"},Da={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},Ea={key:0,class:"px-4"},Ua={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},Ba={key:1,class:"px-4"},Aa={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},Ra={key:2,class:"px-4"},za={class:"flex items-center justify-between mb-2"},Na={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},ja={key:0,class:"space-y-2"},Oa={class:"px-4"},Ma={class:"flex items-center justify-between mb-2"},Pa={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},Fa={key:0,class:"space-y-2"},La={key:3,class:"px-4"},Ha={class:"flex items-center justify-between mb-2"},Ja={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},qa={key:0,class:"space-y-2"},Wa={class:"px-4"},Ga={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},Qa={class:"px-4"},Xa={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},Za={key:4,class:"px-4"},Ya={class:"flex items-center justify-between mb-2"},Ka={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},el={key:0,class:"flex gap-2 items-start"},tl={class:"px-4"},al={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},ll={class:"flex gap-2 pt-4 pb-4 border-t border-gray-200 dark:border-gray-700 px-4"},nl=ue({__name:"ConfigTemplateForm",props:{config:{}},emits:["update:template","save","edit-json"],setup(e,{emit:m}){const l=e,c=m;me();const t=O({...l.config,template:{...l.config.template,instanceSelectionStrategy:l.config.template.instanceSelectionStrategy||"random"}});let y=0,i=0;const V=O({}),R=O({});K(()=>l.config,g=>{t.value={...g,template:{...g.template,instanceSelectionStrategy:g.template.instanceSelectionStrategy||"random"}},a(),f()},{immediate:!0});const _=J({get:()=>t.value?.template?.timeout?t.value.template.timeout/1e3:60,set:g=>{t.value&&(t.value.template.timeout=g*1e3)}});function a(){t.value?.template?.env&&(V.value={},Object.keys(t.value.template.env).forEach(g=>{V.value[g]=`env-${y++}`}))}function f(){t.value?.template?.headers&&(R.value={},Object.keys(t.value.template.headers).forEach(g=>{R.value[g]=`header-${i++}`}))}function A(){t.value.template.args||(t.value.template.args=[]),t.value.template.args.push(""),c("update:template",{...t.value.template})}function k(g){t.value.template.args?.splice(g,1),c("update:template",{...t.value.template})}function C(){t.value.template.env||(t.value.template.env={});const g=`NEW_VAR_${Object.keys(t.value.template.env).length}`;t.value.template.env[g]="",V.value[g]=`env-${y++}`,c("update:template",{...t.value.template})}function b(g){delete t.value.template.env[g],delete V.value[g],c("update:template",{...t.value.template})}function P(g,z){if(g===z)return;const d=t.value.template.env[g]||"",w=V.value[g]||`env-${y++}`;delete t.value.template.env[g],delete V.value[g],t.value.template.env[z]=d,V.value[z]=w,c("update:template",{...t.value.template})}function B(){t.value.template.headers||(t.value.template.headers={});const g=`NEW_HEADER_${Object.keys(t.value.template.headers).length}`;t.value.template.headers[g]="",R.value[g]=`header-${i++}`,c("update:template",{...t.value.template})}function ee(g){delete t.value.template.headers[g],delete R.value[g],c("update:template",{...t.value.template})}function le(g,z){if(g===z)return;const d=t.value.template.headers[g]||"",w=R.value[g]||`header-${i++}`;delete t.value.template.headers[g],delete R.value[g],t.value.template.headers[z]=d,R.value[z]=w,c("update:template",{...t.value.template})}function se(){t.value.template.proxy?t.value.template.proxy=void 0:t.value.template.proxy={url:""},c("update:template",{...t.value.template})}function ce(){const g={command:t.value.template.command,args:t.value.template.args,env:t.value.template.env,headers:t.value.template.headers,type:t.value.template.type,timeout:t.value.template.timeout,url:t.value.template.url,aggregatedTools:t.value.template.aggregatedTools,description:t.value.template.description,proxy:t.value.template.proxy,instanceSelectionStrategy:t.value.template.instanceSelectionStrategy};c("update:template",g),c("save")}function j(){c("edit-json")}return(g,z)=>{const d=ta,w=ea,F=Ve,S=de,q=dt,oe=We,re=qe;return u(),$("div",Va,[n("div",Ia,[n("div",Ta,[n("label",Da,o(g.$t("serverDetail.config.transport")),1),s(w,{modelValue:t.value.template.type,"onUpdate:modelValue":z[0]||(z[0]=H=>t.value.template.type=H),class:"flex gap-4"},{default:v(()=>[s(d,{value:"stdio"},{default:v(()=>[D(o(g.$t("serverDetail.config.transportStdio")),1)]),_:1}),s(d,{value:"sse"},{default:v(()=>[D(o(g.$t("serverDetail.config.transportSse")),1)]),_:1}),s(d,{value:"streamable-http"},{default:v(()=>[D(o(g.$t("serverDetail.config.transportHttp")),1)]),_:1})]),_:1},8,["modelValue"])]),t.value.template.type==="stdio"?(u(),$("div",Ea,[n("label",Ua,o(g.$t("serverDetail.config.executable")),1),s(F,{modelValue:t.value.template.command,"onUpdate:modelValue":z[1]||(z[1]=H=>t.value.template.command=H)},null,8,["modelValue"])])):(u(),$("div",Ba,[n("label",Aa,o(g.$t("serverDetail.config.url")),1),s(F,{modelValue:t.value.template.url,"onUpdate:modelValue":z[2]||(z[2]=H=>t.value.template.url=H)},null,8,["modelValue"])])),t.value.template.type==="stdio"?(u(),$("div",Ra,[n("div",za,[n("label",Na,o(g.$t("serverDetail.config.args")),1),s(S,{size:"small",icon:h(ve),onClick:A},{default:v(()=>[D(o(g.$t("serverDetail.config.addArg")),1)]),_:1},8,["icon"])]),t.value.template.args&&t.value.template.args.length>0?(u(),$("div",ja,[(u(!0),$(X,null,Y(t.value.template.args,(H,E)=>(u(),$("div",{key:E,class:"flex gap-2 px-4"},[s(F,{modelValue:t.value.template.args[E],"onUpdate:modelValue":W=>t.value.template.args[E]=W,class:"flex-1"},null,8,["modelValue","onUpdate:modelValue"]),s(S,{size:"small",type:"danger",icon:h(ie),onClick:W=>k(E)},null,8,["icon","onClick"])]))),128))])):M("",!0)])):M("",!0),n("div",Oa,[n("div",Ma,[n("label",Pa,o(g.$t("serverDetail.config.env")),1),s(S,{size:"small",icon:h(ve),onClick:C},{default:v(()=>[D(o(g.$t("serverDetail.config.addEnv")),1)]),_:1},8,["icon"])]),t.value.template.env&&Object.keys(t.value.template.env).length>0?(u(),$("div",Fa,[(u(!0),$(X,null,Y(t.value.template.env,(H,E)=>(u(),$("div",{key:V.value[E],class:"flex gap-2 items-start px-4",style:{display:"flex",gap:"0.5rem",width:"100%"}},[s(F,{"model-value":E,style:{width:"30%","min-width":"150px"},placeholder:g.$t("addServer.keyPlaceholder"),"onUpdate:modelValue":W=>P(E,W)},null,8,["model-value","placeholder","onUpdate:modelValue"]),s(F,{modelValue:t.value.template.env[E],"onUpdate:modelValue":W=>t.value.template.env[E]=W,style:{flex:"1"},placeholder:g.$t("addServer.valuePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),s(S,{size:"small",type:"danger",icon:h(ie),onClick:W=>b(E)},null,8,["icon","onClick"])]))),128))])):M("",!0)]),t.value.template.type!=="stdio"?(u(),$("div",La,[n("div",Ha,[n("label",Ja,o(g.$t("serverDetail.config.headers")),1),s(S,{size:"small",icon:h(ve),onClick:B},{default:v(()=>[D(o(g.$t("serverDetail.config.addHeader")),1)]),_:1},8,["icon"])]),t.value.template.headers&&Object.keys(t.value.template.headers).length>0?(u(),$("div",qa,[(u(!0),$(X,null,Y(t.value.template.headers,(H,E)=>(u(),$("div",{key:R.value[E],class:"flex gap-2 items-start px-4",style:{display:"flex",gap:"0.5rem",width:"100%"}},[s(F,{"model-value":E,style:{width:"30%","min-width":"150px"},placeholder:g.$t("addServer.keyPlaceholder"),"onUpdate:modelValue":W=>le(E,W)},null,8,["model-value","placeholder","onUpdate:modelValue"]),s(F,{modelValue:t.value.template.headers[E],"onUpdate:modelValue":W=>t.value.template.headers[E]=W,style:{flex:"1"},placeholder:g.$t("addServer.valuePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),s(S,{size:"small",type:"danger",icon:h(ie),onClick:W=>ee(E)},null,8,["icon","onClick"])]))),128))])):M("",!0)])):M("",!0),n("div",Wa,[n("label",Ga,o(g.$t("serverDetail.config.timeout")),1),s(q,{modelValue:_.value,"onUpdate:modelValue":z[3]||(z[3]=H=>_.value=H),min:1,max:3600},null,8,["modelValue"])]),n("div",Qa,[n("label",Xa,o(g.$t("common.description")),1),s(F,{modelValue:t.value.template.description,"onUpdate:modelValue":z[4]||(z[4]=H=>t.value.template.description=H),type:"textarea",rows:3,placeholder:g.$t("serverDetail.config.descriptionPlaceholder")},null,8,["modelValue","placeholder"])]),t.value.template.type!=="stdio"?(u(),$("div",Za,[n("div",Ya,[n("label",Ka,o(g.$t("serverDetail.config.proxy")),1),t.value.template.proxy?(u(),L(S,{key:1,size:"small",type:"danger",icon:h(ie),onClick:se},{default:v(()=>[D(o(g.$t("serverDetail.config.removeProxy")),1)]),_:1},8,["icon"])):(u(),L(S,{key:0,size:"small",icon:h(ve),onClick:se},{default:v(()=>[D(o(g.$t("serverDetail.config.addProxy")),1)]),_:1},8,["icon"]))]),t.value.template.proxy?(u(),$("div",el,[s(F,{modelValue:t.value.template.proxy.url,"onUpdate:modelValue":z[5]||(z[5]=H=>t.value.template.proxy.url=H),placeholder:g.$t("serverDetail.config.proxyPlaceholder")},null,8,["modelValue","placeholder"])])):M("",!0)])):M("",!0),n("div",tl,[n("label",al,o(g.$t("serverDetail.config.instanceSelectionStrategy")),1),s(re,{modelValue:t.value.template.instanceSelectionStrategy,"onUpdate:modelValue":z[6]||(z[6]=H=>t.value.template.instanceSelectionStrategy=H),placeholder:g.$t("serverDetail.config.strategyRandom")+"(默认)"},{default:v(()=>[s(oe,{value:"random",label:g.$t("serverDetail.config.strategyRandom")},null,8,["label"]),s(oe,{value:"round-robin",label:g.$t("serverDetail.config.strategyRoundRobin")},null,8,["label"]),s(oe,{value:"tag-match-unique",label:g.$t("serverDetail.config.strategyTagMatchUnique")},null,8,["label"])]),_:1},8,["modelValue","placeholder"])]),n("div",ll,[s(S,{type:"primary",onClick:ce},{default:v(()=>[D(o(g.$t("serverDetail.config.save")),1)]),_:1}),s(S,{onClick:j},{default:v(()=>[D(o(g.$t("serverDetail.config.editByJson")),1)]),_:1})])])])}}}),sl=Ie(nl,[["__scopeId","data-v-d857c695"]]),ol={class:"h-full flex flex-col"},rl={class:"flex items-center justify-between gap-2 mb-2 shrink-0"},il={class:"flex items-center gap-2"},ul=ue({__name:"LogViewer",props:{logs:{},autoScroll:{type:Boolean,default:!0}},emits:["update:autoScroll","clear","copy"],setup(e,{emit:m}){const l=e,c=m;me();const t=O(null),y=O(l.autoScroll);K(()=>l.autoScroll,a=>{y.value=a}),K(()=>l.logs.length,()=>{y.value&&he(()=>{t.value&&(t.value.scrollTop=t.value.scrollHeight)})});function i(a){const f=!!a;y.value=f,c("update:autoScroll",f)}function V(){c("clear")}function R(){c("copy")}function _(a){switch(a){case"debug":return"text-gray-400";case"info":return"text-blue-400";case"warn":return"text-yellow-400";case"error":return"text-red-400";default:return"text-gray-300"}}return(a,f)=>{const A=aa,k=de;return u(),$("div",ol,[n("div",rl,[n("div",il,[s(A,{modelValue:y.value,"onUpdate:modelValue":[f[0]||(f[0]=C=>y.value=C),i],label:a.$t("serverDetail.logs.autoScroll"),class:"text-gray-600 dark:text-gray-400"},null,8,["modelValue","label"]),s(k,{size:"small",icon:h(ie),plain:"",onClick:V},{default:v(()=>[D(o(a.$t("serverDetail.logs.clear")),1)]),_:1},8,["icon"]),s(k,{size:"small",icon:h(kt),plain:"",onClick:R},{default:v(()=>[D(o(a.$t("common.copy")),1)]),_:1},8,["icon"])])]),n("div",{class:"bg-gray-900 dark:bg-black p-4 rounded-lg font-mono text-sm flex-1 min-h-0 overflow-y-auto text-gray-300",ref_key:"logsContainer",ref:t},[(u(!0),$(X,null,Y(e.logs,(C,b)=>(u(),$("div",{key:b,class:"mb-1 break-words"},[n("span",{class:G(_(C.level))},o(h(ct)(C.timestamp))+" ["+o(C.level.toUpperCase())+"] "+o(C.message),3)]))),128))],512)])}}}),cl={class:"h-full flex flex-col"},dl={class:"flex h-full gap-4"},ml={class:"w-1/3 border-r border-gray-200 dark:border-gray-700 pr-4 overflow-y-auto"},vl={class:"flex items-center justify-between mb-3"},fl={class:"font-bold"},pl={class:"flex items-center gap-2"},gl={key:0,class:"space-y-2"},yl=["onClick"],hl={class:"min-w-0 flex-1 mr-2"},bl={class:"font-medium truncate"},_l={key:1,class:"text-gray-500 text-sm italic"},$l={class:"flex-1 min-h-0 overflow-y-auto px-4 flex flex-col"},Cl={class:"flex justify-between items-center mb-4 shrink-0"},wl={class:"font-bold"},kl={key:0},xl={class:"mb-4 text-gray-600 dark:text-gray-300"},Sl={class:"font-medium mb-2"},Vl={class:"bg-gray-50 dark:bg-[#0f172a] p-4 rounded-lg overflow-x-auto text-sm font-mono border border-gray-200 dark:border-gray-700"},Il={key:1,class:"flex-1 flex items-center justify-center text-gray-400"},Tl=ue({__name:"ToolsTab",props:{tools:{},allowedTools:{default:null}},emits:["select-tool","update-tool-visibility","call-tool","batch-toggle-all"],setup(e,{emit:m}){const l=e,c=m;me();const t=O(null);function y(f){t.value=f,c("select-tool",f)}function i(f){return l.allowedTools===void 0||l.allowedTools===null||l.allowedTools.length===0?!1:Array.isArray(l.allowedTools)?l.allowedTools.includes(f):!1}function V(f,A){c("update-tool-visibility",f,A)}function R(){c("batch-toggle-all",!0)}function _(){c("batch-toggle-all",!1)}function a(){t.value&&c("call-tool",t.value)}return(f,A)=>{const k=de,C=mt;return u(),$("div",cl,[n("div",dl,[n("div",ml,[n("div",vl,[n("h3",fl,o(f.$t("serverDetail.tools.available")),1),n("div",pl,[s(k,{size:"small",onClick:R},{default:v(()=>[D(o(f.$t("serverDetail.tools.selectAll")),1)]),_:1}),s(k,{size:"small",onClick:_},{default:v(()=>[D(o(f.$t("serverDetail.tools.deselectAll")),1)]),_:1})])]),e.tools&&e.tools.length>0?(u(),$("div",gl,[(u(!0),$(X,null,Y(e.tools,b=>(u(),$("div",{key:b.name,class:G(["p-3 rounded-lg cursor-pointer transition-colors flex items-center justify-between group",t.value?.name===b.name?"bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-800":"hover:bg-gray-100 dark:hover:bg-gray-800 border border-transparent"]),onClick:P=>y(b)},[n("div",hl,[n("div",bl,o(b.name),1)]),s(C,{"model-value":i(b.name),"onUpdate:modelValue":P=>V(b.name,!!P),class:"mr-4","active-text":f.$t("serverDetail.tools.aggregated")},null,8,["model-value","onUpdate:modelValue","active-text"])],10,yl))),128))])):(u(),$("div",_l,o(f.$t("serverDetail.tools.none")),1))]),n("div",$l,[n("div",Cl,[n("h3",wl,o(f.$t("serverDetail.tools.details"))+": "+o(t.value?.name||""),1),t.value?(u(),L(k,{key:0,type:"primary",size:"small",onClick:a},{default:v(()=>[D(o(f.$t("serverDetail.tools.call")),1)]),_:1})):M("",!0)]),t.value?(u(),$("div",kl,[n("p",xl,o(t.value.description),1),n("h4",Sl,o(f.$t("serverDetail.tools.schema")),1),n("pre",Vl,o(JSON.stringify(t.value.inputSchema,null,2)),1)])):(u(),$("div",Il,o(f.$t("serverDetail.tools.selectHint")),1))])])])}}}),Dl={class:"h-full overflow-y-auto"},El={class:"flex items-center gap-2"},Ul={class:"font-medium"},Bl={key:0,class:"text-center py-8 text-gray-500"},Al=ue({__name:"ResourcesTab",props:{resources:{}},emits:["view-resource"],setup(e,{emit:m}){const l=m;me();function c(t){l("view-resource",t)}return(t,y)=>{const i=Se,V=na,R=de,_=la;return u(),$("div",Dl,[s(_,{data:e.resources||[],style:{width:"100%"},class:"custom-table"},{default:v(()=>[s(V,{prop:"name",label:t.$t("common.name"),width:"200"},{default:v(({row:a})=>[n("div",El,[s(i,null,{default:v(()=>[s(h(xt))]),_:1}),n("span",Ul,o(a.name),1)])]),_:1},8,["label"]),s(V,{prop:"uri",label:t.$t("common.uri"),"min-width":"300"},null,8,["label"]),s(V,{prop:"mimeType",label:t.$t("common.mimeType"),width:"150"},null,8,["label"]),s(V,{label:"",width:"100",align:"right"},{default:v(({row:a})=>[s(R,{size:"small",plain:"",onClick:f=>c(a)},{default:v(()=>[D(o(t.$t("action.view")),1)]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]),!e.resources||e.resources.length===0?(u(),$("div",Bl,o(t.$t("serverDetail.resources.none")),1)):M("",!0)])}}}),Rl={class:"dialog-footer"},zl=ue({__name:"JsonConfigEditor",props:{modelValue:{type:Boolean},config:{},serverName:{}},emits:["update:modelValue","save"],setup(e,{emit:m}){const l=e,c=m,{t}=me(),y=O(""),i=J({get:()=>l.modelValue,set:f=>c("update:modelValue",f)}),V=J(()=>t("serverDetail.editJsonTitle")||"Edit JSON Config");K(()=>l.modelValue,f=>{f&&R()});function R(){const f={env:l.config.env||{},enabled:l.config.enabled,description:l.config.description};l.config.headers&&Object.keys(l.config.headers).length>0&&(f.headers=l.config.headers),l.config.timeout&&(f.timeout=l.config.timeout),l.config.type==="stdio"?(f.command=l.config.command,f.args=l.config.args||[]):f.url=l.config.url;const A={mcpServers:{[l.serverName]:f}};y.value=JSON.stringify(A,null,2)}function _(){i.value=!1}function a(){try{const f=JSON.parse(y.value);if(!f.mcpServers)throw new Error("Missing mcpServers key");const A=Object.keys(f.mcpServers);if(A.length===0)throw new Error("No server config found");const k=A[0]||"",C=f.mcpServers[k],b={...l.config};C.command?(b.type="stdio",b.command=C.command,b.args=C.args||[],delete b.url):C.url&&(b.type=C.type==="sse"?"sse":"streamable-http",b.url=C.url,delete b.command,delete b.args),C.env&&(b.env=C.env),C.headers&&(b.headers=C.headers),C.timeout!==void 0&&(b.timeout=C.timeout),C.enabled!==void 0&&(b.enabled=C.enabled),C.description!==void 0&&(b.description=C.description),c("save",b),i.value=!1,I.success(t("action.configSaved"))}catch(f){f instanceof Error?I.error("Invalid JSON: "+f.message):I.error("Invalid JSON: "+String(f))}}return(f,A)=>{const k=Ve,C=de,b=Ge;return u(),L(b,{modelValue:i.value,"onUpdate:modelValue":A[1]||(A[1]=P=>i.value=P),title:V.value,width:"600px"},{footer:v(()=>[n("span",Rl,[s(C,{onClick:_},{default:v(()=>[D(o(f.$t("action.cancel")),1)]),_:1}),s(C,{type:"primary",onClick:a},{default:v(()=>[D(o(f.$t("action.save")),1)]),_:1})])]),default:v(()=>[s(k,{modelValue:y.value,"onUpdate:modelValue":A[0]||(A[0]=P=>y.value=P),type:"textarea",rows:15,"font-family":"monospace"},null,8,["modelValue"])]),_:1},8,["modelValue","title"])}}}),Nl={class:"dialog-footer"},st=ue({__name:"InstanceSelectDialog",props:{modelValue:{type:Boolean},instances:{},title:{default:""}},emits:["update:modelValue","confirm"],setup(e,{emit:m}){const l=e,c=m,{t}=me(),y=O(null),i=J({get:()=>l.modelValue,set:f=>c("update:modelValue",f)}),V=J(()=>l.title||t("serverDetail.selectInstanceTitle")||"Select Instance");function R(f){return`#${f.index??0} [${f.displayName||t("serverDetail.instances.unnamed")}]`}function _(){i.value=!1,y.value=null}function a(){y.value!==null&&(c("confirm",y.value),i.value=!1,y.value=null)}return(f,A)=>{const k=We,C=qe,b=de,P=Ge;return u(),L(P,{modelValue:i.value,"onUpdate:modelValue":A[1]||(A[1]=B=>i.value=B),title:V.value,width:"500px"},{footer:v(()=>[n("span",Nl,[s(b,{onClick:_},{default:v(()=>[D(o(f.$t("action.cancel")),1)]),_:1}),s(b,{type:"primary",onClick:a,disabled:y.value===null},{default:v(()=>[D(o(f.$t("action.confirm")),1)]),_:1},8,["disabled"])])]),default:v(()=>[s(C,{modelValue:y.value,"onUpdate:modelValue":A[0]||(A[0]=B=>y.value=B),placeholder:f.$t("serverDetail.selectInstancePlaceholder"),class:"w-full"},{default:v(()=>[(u(!0),$(X,null,Y(e.instances,B=>(u(),L(k,{key:B.index??0,label:R(B),value:B.index??0},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["modelValue","title"])}}}),jl={class:"instance-card-list"},Ol={class:"mb-4 flex justify-between items-center"},Ml={class:"text-lg font-semibold text-gray-900 dark:text-white"},Pl={key:0,class:"mb-4"},Fl={class:"flex items-center justify-between"},Ll={class:"flex items-center gap-3"},Hl={class:"flex items-center gap-2"},Jl={class:"font-mono text-sm text-purple-600 dark:text-purple-400"},ql={class:"flex flex-col gap-3 mb-4"},Wl=["onClick"],Gl={class:"flex items-center justify-between"},Ql={class:"flex items-center gap-3"},Xl={class:"flex items-center gap-2"},Zl={class:"font-mono text-sm text-gray-500 dark:text-gray-400"},Yl={class:"font-medium text-gray-900 dark:text-white"},Kl={key:1,class:"px-2 py-0.5 rounded-full text-xs bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},en=ue({__name:"InstanceCardList",props:{instances:{},selectedIndex:{},serverName:{},showTemplateNode:{type:Boolean,default:!0},templateSelected:{type:Boolean,default:!1}},emits:["select","select-template","add","update-display-name","delete","reassign-indexes"],setup(e,{emit:m}){const l=e,c=m,t=O(!1),y=O(null),i=O(""),V=O(),R=J(()=>[...l.instances].sort((j,g)=>(j.index??0)-(g.index??0)));function _(j){return j.status||"offline"}function a(){return l.templateSelected?"border-purple-500 bg-purple-50 dark:bg-purple-900/20 shadow-md":"border-purple-200 dark:border-purple-800 hover:border-purple-300 dark:hover:border-purple-700 hover:shadow-sm bg-white dark:bg-gray-800"}function f(j){return l.selectedIndex===j?"border-blue-500 bg-blue-50 dark:bg-blue-900/20 shadow-md":"border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 hover:shadow-sm"}function A(j){switch(j){case"online":return"bg-green-500";case"error":return"bg-red-500";case"starting":case"stopping":return"bg-yellow-500";default:return"bg-gray-400"}}function k(j){switch(j){case"online":return"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400";case"error":return"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400";case"starting":case"stopping":return"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400";default:return"bg-gray-100 text-gray-600 dark:bg-gray-800 dark:text-gray-400"}}function C(){c("select-template")}function b(j){c("select",j)}function P(){c("add")}function B(j){t.value=!0,y.value=j.index??null,i.value=j.displayName||"",setTimeout(()=>{V.value?.focus()},100)}function ee(j){const g=i.value.trim();c("update-display-name",j,g),le()}function le(){t.value=!1,y.value=null,i.value=""}function se(j){c("delete",j)}function ce(){c("reassign-indexes")}return(j,g)=>{const z=de,d=Je,w=Ve,F=St;return u(),$("div",jl,[n("div",Ol,[n("h3",Ml,o(j.$t("serverDetail.instances.title")),1),s(z,{size:"small",icon:h(Pe),plain:"",onClick:ce},{default:v(()=>[D(o(j.$t("serverDetail.instances.reassignIndexes")),1)]),_:1},8,["icon"])]),e.showTemplateNode?(u(),$("div",Pl,[n("div",{class:G(["template-card p-4 rounded-lg border transition-all duration-200 cursor-pointer",a()]),onClick:C},[n("div",Fl,[n("div",Ll,[g[2]||(g[2]=n("div",{class:"w-3 h-3 rounded-full bg-purple-500"},null,-1)),n("div",Hl,[n("span",Jl,o(j.$t("common.template")),1),s(d,{size:"small",type:"info"},{default:v(()=>[D(o(j.$t("serverDetail.instances.templateTag")),1)]),_:1})])])])],2)])):M("",!0),n("div",ql,[(u(!0),$(X,null,Y(R.value,S=>(u(),$("div",{key:S.index??0,class:G(["instance-card p-4 rounded-lg border transition-all duration-200 cursor-pointer",f(S.index??0)]),onClick:q=>b(S.index??0)},[n("div",Gl,[n("div",Ql,[n("div",{class:G(["w-3 h-3 rounded-full",A(_(S))])},null,2),n("div",Xl,[!t.value||y.value!==S.index?(u(),$(X,{key:0},[n("span",Zl," #"+o(S.index??0),1),n("span",Yl," ["+o(S.displayName||j.$t("serverDetail.instances.unnamed"))+"] ",1)],64)):(u(),L(w,{key:1,modelValue:i.value,"onUpdate:modelValue":g[0]||(g[0]=q=>i.value=q),size:"small",onKeyup:[be(q=>ee(S.index??0),["enter"]),be(le,["escape"])],ref_for:!0,ref_key:"displayNameInputRef",ref:V,onBlur:q=>ee(S.index??0),class:"max-w-xs"},null,8,["modelValue","onKeyup","onBlur"]))]),S.pid&&_(S)==="online"?M("",!0):(u(),$("div",{key:0,class:G(["px-2 py-0.5 rounded-full text-xs",k(_(S))])},o(j.$t(`serverDetail.status.${_(S)}`)),3)),S.transportType==="stdio"&&S.pid&&_(S)==="online"?(u(),$("div",Kl," PID: "+o(S.pid),1)):M("",!0)]),n("div",{class:"flex items-center gap-2",onClick:g[1]||(g[1]=ke(()=>{},["stop"]))},[!t.value||y.value!==S.index?(u(),$(X,{key:0},[s(F,{content:j.$t("serverDetail.instances.editDisplayName")||"Edit display name",placement:"top"},{default:v(()=>[s(z,{icon:h(Vt),circle:"",plain:"",size:"small",onClick:q=>B(S)},null,8,["icon","onClick"])]),_:2},1032,["content"]),s(z,{icon:h(ie),circle:"",plain:"",size:"small",type:"danger",onClick:q=>se(S.index??0)},null,8,["icon","onClick"])],64)):M("",!0)])])],10,Wl))),128))]),s(z,{icon:h(ve),class:"w-full",onClick:P},{default:v(()=>[D(o(j.$t("serverDetail.instances.add")),1)]),_:1},8,["icon"])])}}}),tn=Ie(en,[["__scopeId","data-v-24e76b86"]]),an={class:"preview-content"},ln={class:"action-bar flex justify-end mb-4"},nn={class:"config-display"},sn={class:"config-json"},on=ue({__name:"MergedConfigPreviewDialog",props:{modelValue:{type:Boolean},mergedConfig:{}},emits:["update:modelValue"],setup(e){const m=e,{t:l}=me(),c=J(()=>JSON.stringify(m.mergedConfig,null,2));async function t(){try{await navigator.clipboard.writeText(c.value),I.success(l("action.copiedToClipboard"))}catch{I.error(l("action.copyFailed"))}}return(y,i)=>{const V=Se,R=de,_=Ge;return u(),L(_,{"model-value":e.modelValue,"onUpdate:modelValue":i[0]||(i[0]=a=>y.$emit("update:modelValue",a)),title:y.$t("serverDetail.instanceConfig.mergedPreview"),width:"70%","destroy-on-close":"",class:"merged-config-dialog"},{default:v(()=>[n("div",an,[n("div",ln,[s(R,{type:"primary",onClick:t},{default:v(()=>[s(V,null,{default:v(()=>[s(h(It))]),_:1}),D(" "+o(y.$t("common.copy")),1)]),_:1})]),n("div",nn,[n("pre",sn,o(c.value),1)])])]),_:1},8,["model-value","title"])}}}),rn=Ie(on,[["__scopeId","data-v-84fcda8e"]]),un={class:"instance-config h-full flex flex-col min-h-0"},cn={class:"header-bar flex justify-between items-center mb-4 px-4 flex-shrink-0"},dn={class:"flex items-center gap-4"},mn={class:"text-lg font-semibold text-gray-900 dark:text-white"},vn={class:"flex gap-2"},fn={class:"config-form space-y-4 flex-1 overflow-y-auto min-h-0 pb-4"},pn={class:"px-4"},gn={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},yn={class:"flex items-center gap-2"},hn={class:"text-xs text-gray-500 dark:text-gray-400"},bn={class:"px-4"},_n={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},$n={class:"flex gap-2 items-start"},Cn={class:"text-xs text-gray-500 dark:text-gray-400 pt-2 whitespace-nowrap"},wn={key:0,class:"px-4"},kn={class:"flex items-center justify-between mb-2"},xn={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},Sn={key:0,class:"space-y-2 mb-3"},Vn={class:"text-xs text-gray-500 dark:text-gray-400 pt-2 whitespace-nowrap"},In={key:1,class:"space-y-2"},Tn={class:"px-4"},Dn={class:"flex items-center justify-between mb-2"},En={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},Un={key:0,class:"space-y-2 mb-3"},Bn={class:"text-xs text-gray-500 dark:text-gray-400 pt-2 whitespace-nowrap"},An={key:1,class:"space-y-2"},Rn={key:1,class:"px-4"},zn={class:"flex items-center justify-between mb-2"},Nn={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},jn={key:0,class:"space-y-2 mb-3"},On={class:"text-xs text-gray-500 dark:text-gray-400 pt-2 whitespace-nowrap"},Mn={key:1,class:"space-y-2"},Pn={class:"px-4"},Fn={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},Ln={class:"flex gap-2 items-center"},Hn={class:"text-xs text-gray-500 dark:text-gray-400"},Jn={class:"px-4"},qn={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},Wn={class:"flex gap-2 items-start"},Gn={class:"text-xs text-gray-500 dark:text-gray-400 pt-2 whitespace-nowrap"},Qn={key:2,class:"px-4"},Xn={class:"flex items-center justify-between mb-2"},Zn={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},Yn={key:0,class:"space-y-2 mb-3"},Kn={class:"flex gap-2 items-start"},es={class:"text-xs text-gray-500 dark:text-gray-400 pt-2 whitespace-nowrap"},ts={key:1,class:"flex gap-2 items-start"},as={class:"px-4"},ls={class:"flex items-center justify-between mb-2"},ns={class:"block text-sm font-bold text-gray-700 dark:text-gray-300"},ss={key:0,class:"text-center py-4 text-gray-500"},os={key:1,class:"space-y-2"},rs={class:"text-xs text-gray-500 ml-2"},is={class:"px-4"},us={class:"block text-sm font-bold text-gray-700 dark:text-gray-300 mb-2"},cs={class:"flex gap-2 items-center"},ds={class:"flex gap-2 pt-4 pb-4 border-t border-gray-200 dark:border-gray-700 px-4"},ms=ue({__name:"InstanceConfig",props:{templateConfig:{},instanceConfig:{},serverName:{},instanceStatus:{default:"offline"},systemTagDefinitions:{}},emits:["update","start-instance","stop-instance","restart-instance","view-logs"],setup(e,{emit:m}){const l=e,c=m,{t}=me();function y(){c("start-instance")}function i(){c("stop-instance")}function V(){c("restart-instance")}function R(){c("view-logs")}const _=O(!1),a=O({enabled:!0,...l.instanceConfig});let f=0,A=0,k=0;const C=O({}),b=O({}),P=O({}),B=O({}),ee=J(()=>l.templateConfig.args&&l.templateConfig.args.length>0),le=J(()=>l.templateConfig.env&&Object.keys(l.templateConfig.env).length>0),se=J(()=>l.templateConfig.headers&&Object.keys(l.templateConfig.headers).length>0);K(()=>l.instanceConfig,r=>{a.value={...r},C.value={},r.env&&Object.keys(r.env).forEach(T=>{C.value[T]=`env-${f++}`}),b.value={},r.headers&&Object.keys(r.headers).forEach(T=>{b.value[T]=`header-${A++}`}),P.value={},B.value={},r.tags&&Object.keys(r.tags).forEach(T=>{P.value[T]=`tag-${k++}`,l.systemTagDefinitions.some(ae=>ae.key===T)?B.value[T]=T:(B.value[T]=T,console.warn(`未定义的标签键: ${T}`))})},{immediate:!0});const ce=J(()=>{const r={...l.templateConfig};return a.value.args&&a.value.args.length>0&&(r.args=[...l.templateConfig.args||[],...a.value.args]),a.value.env&&Object.keys(a.value.env).length>0&&(r.env={...l.templateConfig.env||{},...a.value.env}),a.value.headers&&Object.keys(a.value.headers).length>0&&(r.headers={...l.templateConfig.headers||{},...a.value.headers}),a.value.proxy&&(r.proxy=a.value.proxy),a.value.tags&&Object.keys(a.value.tags).length>0&&(r.tags=a.value.tags),a.value.displayName&&(r.displayName=a.value.displayName),a.value.enabled!==void 0&&(r.enabled=a.value.enabled),r});function j(r){switch(r){case"stdio":return t("serverDetail.config.transportStdio");case"sse":return t("serverDetail.config.transportSse");case"streamable-http":return t("serverDetail.config.transportHttp");default:return r}}function g(){c("update",a.value)}function z(){a.value.proxy?a.value.proxy=void 0:a.value.proxy={url:""}}function d(){a.value.args||(a.value.args=[]),a.value.args.push("")}function w(r){a.value.args&&a.value.args.splice(r,1)}function F(){a.value.env||(a.value.env={});const r=`NEW_ENV_${Date.now()}`;a.value.env[r]="",C.value[r]=`env-${f++}`}function S(r){a.value.env&&(delete a.value.env[r],delete C.value[r])}function q(r,T){if(!a.value.env||!r||!T||r===T)return;const N=a.value.env[r]??"",ae=C.value[r]||`env-${f++}`;delete a.value.env[r],delete C.value[r],a.value.env[T]=N,C.value[T]=ae}function oe(){a.value.headers||(a.value.headers={});const r=`X-New-Header-${Date.now()}`;a.value.headers[r]="",b.value[r]=`header-${A++}`}function re(r){a.value.headers&&(delete a.value.headers[r],delete b.value[r])}function H(r,T){if(!a.value.headers||!r||!T||r===T)return;const N=a.value.headers[r]??"",ae=b.value[r]||`header-${A++}`;delete a.value.headers[r],delete b.value[r],a.value.headers[T]=N,b.value[T]=ae}function E(){if(a.value.tags||(a.value.tags={}),l.systemTagDefinitions.length>0){const r=l.systemTagDefinitions[0];if(r){const T=r.key;let N=T,ae=1;for(;a.value.tags&&Object.prototype.hasOwnProperty.call(a.value.tags,N);)N=`${T}-${ae}`,ae++;a.value.tags[N]="",P.value[N]=`tag-${k++}`,B.value[N]=T}}else{I.warning("请先在设置中定义标签");const r=`new-tag-${Date.now()}`;a.value.tags[r]="",P.value[r]=`tag-${k++}`,B.value[r]=r}}function W(r){a.value.tags&&(delete a.value.tags[r],delete P.value[r],delete B.value[r])}function te(r,T){if(!a.value.tags||!T)return;const N=a.value.tags[r]??"",ae=P.value[r]||`tag-${k++}`;delete a.value.tags[r],delete P.value[r],delete B.value[r],a.value.tags[T]=N,P.value[T]=ae,B.value[T]=T}function pe(r){const T=l.systemTagDefinitions.find(N=>N.key===r);return T?T.type:null}function Te(r){const T=l.systemTagDefinitions.find(N=>N.key===r);return T?.type==="enum"?T.values||[]:[]}function $e(r){return l.systemTagDefinitions.find(N=>N.key===r)?.description||"输入标签值"}function Re(){window.location.hash="#/settings/tags"}return(r,T)=>{const N=de,ae=Se,fe=Je,Z=Ve,De=dt,Ee=We,Ue=qe,Be=mt;return u(),$("div",un,[n("div",cn,[n("div",dn,[n("h3",mn,o(r.$t("serverDetail.instanceConfig.title")),1),n("div",vn,[s(N,{icon:h(Pe),plain:"",onClick:V},{default:v(()=>[D(o(r.$t("action.restart")),1)]),_:1},8,["icon"]),e.instanceStatus==="error"?(u(),L(N,{key:0,type:"danger",plain:"",icon:h(Tt),onClick:R},{default:v(()=>[D(o(r.$t("action.viewLogs")),1)]),_:1},8,["icon"])):e.instanceStatus==="online"?(u(),L(N,{key:1,type:"warning",plain:"",icon:h(Dt),onClick:i},{default:v(()=>[D(o(r.$t("action.stop")),1)]),_:1},8,["icon"])):(u(),L(N,{key:2,type:"success",icon:h(ot),onClick:y},{default:v(()=>[D(o(r.$t("action.start")),1)]),_:1},8,["icon"]))])]),s(N,{onClick:T[0]||(T[0]=U=>_.value=!0)},{default:v(()=>[s(ae,null,{default:v(()=>[s(h(Et))]),_:1}),D(" "+o(r.$t("serverDetail.instanceConfig.viewMerged")),1)]),_:1})]),n("div",fn,[n("div",pn,[n("label",gn,o(r.$t("serverDetail.config.transport")),1),n("div",yn,[s(fe,{size:"small",type:"info"},{default:v(()=>[D(o(j(e.templateConfig.type)),1)]),_:1}),n("span",hn,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)])]),n("div",bn,[n("label",_n,o(e.templateConfig.type==="stdio"?r.$t("serverDetail.config.executable"):r.$t("serverDetail.config.url")),1),n("div",$n,[s(Z,{"model-value":e.templateConfig.type==="stdio"?e.templateConfig.command:e.templateConfig.url,disabled:"",class:"flex-1"},null,8,["model-value"]),n("span",Cn,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)])]),e.templateConfig.type==="stdio"?(u(),$("div",wn,[n("div",kn,[n("label",xn,o(r.$t("serverDetail.config.args")),1),s(N,{size:"small",icon:h(ve),onClick:d},{default:v(()=>[D(o(r.$t("serverDetail.config.addArg")),1)]),_:1},8,["icon"])]),ee.value?(u(),$("div",Sn,[(u(!0),$(X,null,Y(e.templateConfig.args,(U,p)=>(u(),$("div",{key:`template-arg-${p}`,class:"flex gap-2 items-start"},[s(Z,{"model-value":U,disabled:"",class:"flex-1"},null,8,["model-value"]),n("span",Vn,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)]))),128))])):M("",!0),a.value.args&&a.value.args.length>0?(u(),$("div",In,[(u(!0),$(X,null,Y(a.value.args,(U,p)=>(u(),$("div",{key:`instance-arg-${p}`,class:"flex gap-2 items-start"},[s(Z,{modelValue:a.value.args[p],"onUpdate:modelValue":x=>a.value.args[p]=x,class:"flex-1"},null,8,["modelValue","onUpdate:modelValue"]),s(N,{size:"small",type:"danger",icon:h(ie),onClick:x=>w(p)},null,8,["icon","onClick"]),s(fe,{size:"small",type:"success"},{default:v(()=>[D(o(r.$t("common.instance")),1)]),_:1})]))),128))])):M("",!0)])):M("",!0),n("div",Tn,[n("div",Dn,[n("label",En,o(r.$t("serverDetail.config.env")),1),s(N,{size:"small",icon:h(ve),onClick:F},{default:v(()=>[D(o(r.$t("serverDetail.config.addEnv")),1)]),_:1},8,["icon"])]),le.value?(u(),$("div",Un,[(u(!0),$(X,null,Y(e.templateConfig.env,(U,p)=>(u(),$("div",{key:`template-env-${p}`,class:"flex gap-2 items-start",style:{display:"flex",gap:"0.5rem",width:"100%"}},[s(Z,{"model-value":p,disabled:"",style:{width:"30%","min-width":"150px"}},null,8,["model-value"]),s(Z,{"model-value":e.templateConfig.env[p],disabled:"",style:{flex:"1"}},null,8,["model-value"]),n("span",Bn,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)]))),128))])):M("",!0),a.value.env&&Object.keys(a.value.env).length>0?(u(),$("div",An,[(u(!0),$(X,null,Y(a.value.env,(U,p)=>(u(),$("div",{key:C.value[p],class:"flex gap-2 items-start",style:{display:"flex",gap:"0.5rem",width:"100%"}},[s(Z,{"model-value":p,style:{width:"30%","min-width":"150px"},placeholder:r.$t("addServer.keyPlaceholder"),"onUpdate:modelValue":x=>q(p,x)},null,8,["model-value","placeholder","onUpdate:modelValue"]),s(Z,{modelValue:a.value.env[p],"onUpdate:modelValue":x=>a.value.env[p]=x,style:{flex:"1"},placeholder:r.$t("addServer.valuePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),s(N,{size:"small",type:"danger",icon:h(ie),onClick:x=>S(p)},null,8,["icon","onClick"]),s(fe,{size:"small",type:"success"},{default:v(()=>[D(o(r.$t("common.instance")),1)]),_:1})]))),128))])):M("",!0)]),e.templateConfig.type!=="stdio"?(u(),$("div",Rn,[n("div",zn,[n("label",Nn,o(r.$t("serverDetail.config.headers")),1),s(N,{size:"small",icon:h(ve),onClick:oe},{default:v(()=>[D(o(r.$t("serverDetail.config.addHeader")),1)]),_:1},8,["icon"])]),se.value?(u(),$("div",jn,[(u(!0),$(X,null,Y(e.templateConfig.headers,(U,p)=>(u(),$("div",{key:`template-header-${p}`,class:"flex gap-2 items-start",style:{display:"flex",gap:"0.5rem",width:"100%"}},[s(Z,{"model-value":p,disabled:"",style:{width:"30%","min-width":"150px"}},null,8,["model-value"]),s(Z,{"model-value":e.templateConfig.headers[p],disabled:"",style:{flex:"1"}},null,8,["model-value"]),n("span",On,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)]))),128))])):M("",!0),a.value.headers&&Object.keys(a.value.headers).length>0?(u(),$("div",Mn,[(u(!0),$(X,null,Y(a.value.headers,(U,p)=>(u(),$("div",{key:b.value[p],class:"flex gap-2 items-start",style:{display:"flex",gap:"0.5rem",width:"100%"}},[s(Z,{"model-value":p,style:{width:"30%","min-width":"150px"},placeholder:r.$t("addServer.keyPlaceholder"),"onUpdate:modelValue":x=>H(p,x)},null,8,["model-value","placeholder","onUpdate:modelValue"]),s(Z,{modelValue:a.value.headers[p],"onUpdate:modelValue":x=>a.value.headers[p]=x,style:{flex:"1"},placeholder:r.$t("addServer.valuePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),s(N,{size:"small",type:"danger",icon:h(ie),onClick:x=>re(p)},null,8,["icon","onClick"]),s(fe,{size:"small",type:"success"},{default:v(()=>[D(o(r.$t("common.instance")),1)]),_:1})]))),128))])):M("",!0)])):M("",!0),n("div",Pn,[n("label",Fn,o(r.$t("serverDetail.config.timeout")),1),n("div",Ln,[s(De,{"model-value":e.templateConfig.timeout?e.templateConfig.timeout/1e3:60,disabled:"",min:1,max:3600},null,8,["model-value"]),n("span",Hn,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)])]),n("div",Jn,[n("label",qn,o(r.$t("common.description")),1),n("div",Wn,[s(Z,{"model-value":e.templateConfig.description,type:"textarea",rows:3,disabled:"",class:"flex-1"},null,8,["model-value"]),n("span",Gn,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)])]),e.templateConfig.type!=="stdio"?(u(),$("div",Qn,[n("div",Xn,[n("label",Zn,o(r.$t("serverDetail.config.proxy")),1),a.value.proxy?(u(),L(N,{key:1,size:"small",type:"danger",icon:h(ie),onClick:z},{default:v(()=>[D(o(r.$t("serverDetail.config.removeProxy")),1)]),_:1},8,["icon"])):(u(),L(N,{key:0,size:"small",icon:h(ve),onClick:z},{default:v(()=>[D(o(r.$t("serverDetail.config.addProxy")),1)]),_:1},8,["icon"]))]),e.templateConfig.proxy&&!a.value.proxy?(u(),$("div",Yn,[n("div",Kn,[s(Z,{"model-value":e.templateConfig.proxy.url,disabled:""},null,8,["model-value"]),n("span",es,o(r.$t("serverDetail.instanceConfig.fromTemplate")),1)])])):M("",!0),a.value.proxy?(u(),$("div",ts,[s(Z,{modelValue:a.value.proxy.url,"onUpdate:modelValue":T[1]||(T[1]=U=>a.value.proxy.url=U),placeholder:r.$t("serverDetail.config.proxyPlaceholder")},null,8,["modelValue","placeholder"]),s(fe,{size:"small",type:"success"},{default:v(()=>[D(o(r.$t("common.instance")),1)]),_:1})])):M("",!0)])):M("",!0),n("div",as,[n("div",ls,[n("label",ns,o(r.$t("serverDetail.config.tags")),1),s(N,{size:"small",icon:h(ve),onClick:E},{default:v(()=>[D(o(r.$t("common.addTag")),1)]),_:1},8,["icon"])]),e.systemTagDefinitions.length===0?(u(),$("div",ss,[T[5]||(T[5]=n("p",null,"暂无标签定义",-1)),s(N,{size:"small",type:"primary",onClick:Re},{default:v(()=>[...T[4]||(T[4]=[D(" 前往标签设置 ",-1)])]),_:1})])):a.value.tags&&Object.keys(a.value.tags).length>0?(u(),$("div",os,[(u(!0),$(X,null,Y(a.value.tags,(U,p)=>(u(),$("div",{key:P.value[p],class:"flex gap-2 items-start",style:{display:"flex",gap:"0.5rem",width:"100%"}},[s(Ue,{modelValue:B.value[p],"onUpdate:modelValue":x=>B.value[p]=x,style:{width:"30%","min-width":"150px"},filterable:"",placeholder:"选择标签键",onChange:x=>te(p,x)},{default:v(()=>[(u(!0),$(X,null,Y(e.systemTagDefinitions,x=>(u(),L(Ee,{key:x.key,label:x.key,value:x.key},{default:v(()=>[n("span",null,o(x.key),1),n("span",rs,o(x.type),1)]),_:2},1032,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","onChange"]),B.value[p]&&pe(B.value[p])==="enum"?(u(),L(Ue,{key:0,modelValue:a.value.tags[p],"onUpdate:modelValue":x=>a.value.tags[p]=x,style:{flex:"1"},filterable:"",placeholder:"选择标签值"},{default:v(()=>[(u(!0),$(X,null,Y(Te(B.value[p]),x=>(u(),L(Ee,{key:x,label:x,value:x},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])):B.value[p]&&pe(B.value[p])==="boolean"?(u(),L(Be,{key:1,modelValue:a.value.tags[p],"onUpdate:modelValue":x=>a.value.tags[p]=x,"active-value":"true","inactive-value":"false"},null,8,["modelValue","onUpdate:modelValue"])):B.value[p]&&pe(B.value[p])==="number"?(u(),L(De,{key:2,"model-value":a.value.tags[p]!==void 0&&a.value.tags[p]!==""?Number(a.value.tags[p]):void 0,"onUpdate:modelValue":x=>a.value.tags[p]=x!=null?String(x):"",style:{flex:"1"},placeholder:"输入数字值"},null,8,["model-value","onUpdate:modelValue"])):(u(),L(Z,{key:3,modelValue:a.value.tags[p],"onUpdate:modelValue":x=>a.value.tags[p]=x,style:{flex:"1"},placeholder:B.value[p]?$e(B.value[p]):"输入标签值"},null,8,["modelValue","onUpdate:modelValue","placeholder"])),s(N,{size:"small",type:"danger",icon:h(ie),onClick:x=>W(p)},null,8,["icon","onClick"]),s(fe,{size:"small",type:"success"},{default:v(()=>[D(o(r.$t("common.instance")),1)]),_:1})]))),128))])):M("",!0)]),n("div",is,[n("label",us,o(r.$t("serverDetail.config.autoStart")),1),n("div",cs,[s(Be,{modelValue:a.value.enabled,"onUpdate:modelValue":T[2]||(T[2]=U=>a.value.enabled=U)},null,8,["modelValue"]),s(fe,{size:"small",type:"success"},{default:v(()=>[D(o(r.$t("common.instance")),1)]),_:1})])]),n("div",ds,[s(N,{type:"primary",onClick:g},{default:v(()=>[D(o(r.$t("serverDetail.config.save")),1)]),_:1})])]),s(rn,{modelValue:_.value,"onUpdate:modelValue":T[3]||(T[3]=U=>_.value=U),"merged-config":ce.value},null,8,["modelValue","merged-config"])])}}}),vs=Ie(ms,[["__scopeId","data-v-e7b48052"]]);function fs(e){const m=He(),l=qt(),c=Fe(),t=O("config"),y=O(null),i=O("config");function V(){const k=l.name;return k==="server-detail-tools"?"tools":k==="server-detail-resources"?"resources":"config"}function R(k){if(!e.value?.name)return;const C=k,b=C==="tools"?"server-detail-tools":C==="resources"?"server-detail-resources":"server-detail-config";m.push({name:b,params:{name:e.value.name}})}function _(){y.value=null}function a(k){y.value=k}function f(){l.query.selection==="template"?y.value=null:l.query.instanceIndex!==void 0?y.value=parseInt(l.query.instanceIndex,10):y.value=null}function A(){l.query.instanceTab==="logs"?i.value="logs":i.value="config"}return Jt(()=>{const k=l.params.name;if(k){const C=c.servers.find(b=>b.name===k);C&&c.selectServer(C.id)}t.value=V(),f(),A()}),K(()=>l.params.name,k=>{if(k){const C=c.servers.find(b=>b.name===k);C&&c.selectServer(C.id)}}),K(()=>l.name,()=>{t.value=V(),f(),A()}),K(i,k=>{if(!e.value?.name)return;const C={...l.query},b={};for(const[P,B]of Object.entries(C))B!=null&&(b[P]=B);k==="config"?delete b.instanceTab:b.instanceTab=k,m.replace({name:l.name,params:l.params,query:b})}),K(()=>c.servers.length,()=>{const k=l.params.name;if(k&&!c.selectedServer){const C=c.servers.find(b=>b.name===k);C&&c.selectServer(C.id)}f(),A()}),K(()=>e.value?.id,(k,C)=>{k&&k!==C&&(t.value=V())},{immediate:!0}),K(y,k=>{if(!e.value?.name)return;const C={...l.query},b={};for(const[P,B]of Object.entries(C))B!=null&&(b[P]=B);k===null?(b.selection="template",delete b.instanceIndex):(b.instanceIndex=String(k),delete b.selection),m.replace({name:l.name,params:l.params,query:b})}),{activeTopTab:t,selectedInstanceIndex:y,activeInstanceTab:i,getTabFromRoute:V,navigateToTab:R,handleSelectTemplate:_,handleSelectInstance:a}}function ps(e,m){const l=Fe(),{t:c}=me(),t=J(()=>(console.log("[useServerInstances] Computing allServers, store.servers:",l.servers),l.servers.filter(d=>d.name===e.value?.name))),y=J(()=>(console.log("[useServerInstances] Computing serverInstances"),e.value?.rawV11Config?.instances?e.value.rawV11Config.instances.map((d,w)=>{const S=t.value.find(H=>H.instances?.some(E=>E.id===d.id))?.instances?.find(H=>H.id===d.id);let q="offline",oe;const re=e.value?.rawV11Config?.template?.type;return S?.status?(q=S.status,oe=S.pid??void 0):q="offline",{id:d.id,timestamp:d.timestamp??Date.now(),index:d.index??w,displayName:d.displayName,status:q,pid:oe,transportType:re}}):(console.log("[useServerInstances] No instances found in rawV11Config"),[]))),i=J(()=>m.value===null?null:y.value.find(d=>d.index===m.value)||null),V=J(()=>{const d=i.value;if(!d||!e.value?.rawV11Config?.instances)return{args:[],env:{},headers:{},tags:{},enabled:!0};let w;return d.index!==void 0&&(w=e.value.rawV11Config.instances.find(F=>F.index===d.index)),w||(w=e.value.rawV11Config.instances.find(F=>F.id===d.id)),w?{args:w.args??[],env:w.env??{},headers:w.headers??{},tags:w.tags??{},displayName:w.displayName,enabled:w.enabled!==void 0?w.enabled:!0}:{args:[],env:{},headers:{},tags:{},displayName:d.displayName,enabled:!0}}),R=J(()=>e.value?.rawV11Config?.template?e.value.rawV11Config.template:{type:"stdio",args:[],env:{},headers:{},timeout:6e4,aggregatedTools:[]});function _(){return m.value===null?"offline":y.value.find(w=>w.index===m.value)?.status||"offline"}function a(){return m.value===null?null:y.value.find(w=>w.index===m.value)?.id||null}async function f(d){try{console.log("[startServerInstance] Starting instance:",d),l.updateServerStatus(d,"starting"),await l.startServer(d),I.success(c("action.started"))}catch(w){console.error("[startServerInstance] Error:",w),w instanceof Error?I.error(w.message):I.error(String(w))}}async function A(){const d=a();if(!d){I.warning(c("serverDetail.noInstanceSelected"));return}await f(d)}async function k(d){try{console.log("[stopServerInstance] Stopping instance:",d),await l.stopServer(d),I.success(c("action.stopped"))}catch(w){console.error("[stopServerInstance] Error:",w),w instanceof Error?I.error(w.message):I.error(String(w))}}async function C(){const d=a();if(!d){I.warning(c("serverDetail.noInstanceSelected"));return}await k(d)}async function b(d){try{console.log("[restartServerInstance] Restarting instance:",d),l.updateServerStatus(d,"starting");const w=y.value.find(F=>F.id===d);w&&w.status==="online"&&await l.stopServer(d),await l.startServer(d),I.success(c("action.restarted"))}catch(w){console.error("[restartServerInstance] Error:",w),w instanceof Error?I.error(w.message):I.error(String(w))}}async function P(){const d=a();if(!d){I.warning(c("serverDetail.noInstanceSelected"));return}await b(d)}async function B(){if(e.value?.name)try{await l.startAllServerInstances(e.value.name),I.success(c("action.started"))}catch(d){d instanceof Error?I.error(d.message):I.error(String(d))}}async function ee(){if(e.value?.name)try{await l.stopAllServerInstances(e.value.name),I.success(c("action.stopped"))}catch(d){d instanceof Error?I.error(d.message):I.error(String(d))}}async function le(){if(e.value?.name)try{await l.restartAllServerInstances(e.value.name),I.success(c("action.restarted"))}catch(d){d instanceof Error?I.error(d.message):I.error(String(d))}}async function se(){if(e.value?.name)try{const d=`temp-${Date.now()}`,w=e.value.rawV11Config?.instances||[],F=w.length>0?Math.max(...w.map(q=>q.index??0)):-1,S={id:d,timestamp:Date.now(),index:F+1,enabled:!0,args:[],env:{},headers:{},tags:{}};e.value.rawV11Config&&(e.value.rawV11Config.instances||(e.value.rawV11Config.instances=[]),e.value.rawV11Config.instances.push(S)),await l.addServerInstance(e.value.name),I.success(c("action.instanceAdded"))}catch(d){d instanceof Error?I.error(d.message):I.error(String(d))}}async function ce(d,w){if(e.value?.name)try{const S=e.value.rawV11Config?.instances?.find(q=>q.index===d);S&&(S.displayName=w),await l.updateServerInstance(e.value.name,d,{displayName:w}),I.success(c("action.displayNameUpdated"))}catch(F){F instanceof Error?I.error(F.message):I.error(String(F))}}async function j(d){if(e.value?.name)try{await vt.confirm(c("serverDetail.deleteInstanceConfirm"),c("action.delete"),{confirmButtonText:c("action.delete"),cancelButtonText:c("action.cancel"),type:"warning"});const w=e.value.rawV11Config?.instances;if(w){const F=w.findIndex(S=>S.index===d);F!==-1&&w.splice(F,1)}m.value===d&&(m.value=null),await l.removeServerInstance(e.value.name,d),I.success(c("action.instanceDeleted"))}catch(w){w!=="cancel"&&(w instanceof Error?I.error(w.message||"Failed to delete instance"):I.error(String(w)||"Failed to delete instance"))}}async function g(){if(e.value?.name)try{await l.reassignInstanceIndexes(e.value.name),I.success(c("action.indexesReassigned"))}catch(d){d instanceof Error?I.error(d.message):I.error(String(d))}}async function z(d){if(!(!e.value?.name||m.value===null))try{const w=m.value,S=e.value.rawV11Config?.instances?.find(q=>q.index===w);S&&(d.args!==void 0&&(S.args=d.args),d.env!==void 0&&(S.env=d.env),d.headers!==void 0&&(S.headers=d.headers),d.tags!==void 0&&(S.tags=d.tags),d.proxy!==void 0&&(S.proxy=d.proxy),d.displayName!==void 0&&(S.displayName=d.displayName),d.enabled!==void 0&&(S.enabled=d.enabled)),await l.updateServerInstance(e.value.name,w,d),I.success(c("action.configSaved"))}catch(w){w instanceof Error?I.error(w.message):I.error(String(w))}}return{serverInstances:y,selectedInstance:i,selectedInstanceConfig:V,templateConfigForInstance:R,allServers:t,getSelectedInstanceStatus:_,getSelectedInstanceServerId:a,startSelectedInstance:A,stopSelectedInstance:C,restartSelectedInstance:P,startAllInstances:B,stopAllInstances:ee,restartAllInstances:le,handleAddInstance:se,handleUpdateDisplayName:ce,handleDeleteInstance:j,handleReassignIndexes:g,handleUpdateInstanceConfig:z}}function gs(e){const m=He(),l=O(null),c=O(!1),t=O(!1),y=O(null),i=O(!1),V=O(null),R=O(null);function _(A){e.value&&m.push({name:"resource-detail",params:{name:e.value.name},query:{uri:A.uri,name:A.name,mimeType:A.mimeType}})}function a(A){y.value=A,t.value=!1,c.value=!0}function f(A){const k=V.value;k&&_(k),V.value=null,i.value=!1,R.value=null}return K(V,A=>{A!==null&&(i.value=!0,V.value=null)}),{showInstanceSelectForTool:t,selectedInstanceForTool:y,showCallDialog:c,pendingTool:l,showInstanceSelectForResourceDialog:i,showInstanceSelectForResource:V,selectedInstanceForResource:R,callToolWithInstance:a,viewResourceWithInstance:f}}const ys={key:0,class:"server-detail py-6 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto w-full h-full flex flex-col overflow-hidden transition-colors duration-300"},hs={class:"custom-tabs-label"},bs={class:"flex h-full gap-4 mt-4"},_s={class:"w-1/3 border-r border-gray-200 dark:border-gray-700 pr-4 overflow-y-auto"},$s={class:"flex-1 min-h-0 overflow-y-auto pl-4 pr-4"},Cs={key:0,class:"h-full flex flex-col min-h-0"},ws={class:"flex-1 min-h-0 overflow-hidden"},ks={key:1,class:"h-full flex flex-col min-h-0"},xs={class:"flex-1 min-h-0 overflow-hidden"},Ss={class:"custom-tabs-label"},Vs={class:"flex-1 min-h-0 overflow-hidden"},Is={class:"custom-tabs-label"},Ts={key:2,class:"flex-1 flex items-center justify-center text-gray-400"},Ds={class:"custom-tabs-label"},Es={class:"custom-tabs-label"},Us={key:1,class:"h-full flex items-center justify-center text-gray-400"},Bs=ue({__name:"ServerDetail",setup(e){const m=Fe();Ut();const l=Bt(),{config:c}=Wt(l),{t}=me(),y=He(),i=J(()=>m.selectedServer),V=J(()=>c.value?.tagDefinitions||[]),{activeTopTab:R,selectedInstanceIndex:_,activeInstanceTab:a,navigateToTab:f,handleSelectTemplate:A,handleSelectInstance:k}=fs(i),{serverInstances:C,selectedInstanceConfig:b,templateConfigForInstance:P,getSelectedInstanceStatus:B,startSelectedInstance:ee,stopSelectedInstance:le,restartSelectedInstance:se,startAllInstances:ce,stopAllInstances:j,restartAllInstances:g,handleAddInstance:z,handleUpdateDisplayName:d,handleDeleteInstance:w,handleReassignIndexes:F,handleUpdateInstanceConfig:S}=ps(i,_),{showInstanceSelectForTool:q,selectedInstanceForTool:oe,showCallDialog:re,pendingTool:H,showInstanceSelectForResourceDialog:E,showInstanceSelectForResource:W,callToolWithInstance:te,viewResourceWithInstance:pe}=gs(i),Te=O(!0),$e=O(!1),Re=O(null);K([R,()=>i.value?.name],async([U,p])=>{p&&(U==="tools"?await m.fetchTools(p):U==="resources"&&await m.fetchResources(p))},{immediate:!0}),K([a,()=>i.value?.name,_],([U,p,x])=>{p&&U==="logs"&&m.fetchLogs(p,x??0)});function r(){m.selectedServerId=null,y.push({name:"servers"})}const T=async()=>{if(i.value)try{await vt.confirm(t("serverDetail.deleteConfirm"),t("action.delete"),{confirmButtonText:t("action.delete"),cancelButtonText:t("action.cancel"),type:"warning"}),await m.deleteServer(i.value.id),I.success(t("action.serverDeleted")),m.selectedServerId=null,y.push({name:"servers"})}catch(U){U!=="cancel"&&(U instanceof Error?I.error(U.message||"Failed to delete server"):I.error(String(U)||"Failed to delete server"))}},N=async(U,p)=>{if(!i.value)return;let x=i.value.config.aggregatedTools;x==null&&(i.value.tools?x=i.value.tools.map(ne=>ne.name):x=[]),p?x.includes(U)||(x=[...x,U]):x=x.filter(ne=>ne!==U),i.value.config.aggregatedTools=x;try{await m.updateServer(i.value.id,{config:i.value.config}),I.success(t("action.configSaved"))}catch(ne){ne instanceof Error?I.error(ne.message):I.error(String(ne))}},ae=async U=>{if(!i.value)return;const p=U&&i.value.tools?i.value.tools.map(x=>x.name):[];i.value.config.aggregatedTools=p;try{await m.updateServer(i.value.id,{config:i.value.config}),I.success(t("action.configSaved"))}catch(x){x instanceof Error?I.error(x.message):I.error(String(x))}},fe=async()=>{if(i.value)try{await m.updateServer(i.value.id,{config:i.value.rawV11Config?.template}),I.success(t("action.configSaved"))}catch(U){U instanceof Error?I.error(U.message):I.error(String(U))}},Z=U=>{i.value?.rawV11Config&&(i.value.rawV11Config.template=U)},De=()=>{$e.value=!0},Ee=async U=>{i.value&&(i.value.rawV11Config&&(i.value.rawV11Config.template={...i.value.rawV11Config.template,...U}),await m.updateServer(i.value.id,{config:i.value.rawV11Config?.template}))},Ue=async()=>{i.value&&(await m.clearLogs(i.value.id),I.success(t("action.logsCleared")))},Be=()=>{if(i.value){const U=i.value.logs.map(p=>`${ct(p.timestamp)} [${p.level.toUpperCase()}] ${p.message}`).join(`
2
- `);navigator.clipboard.writeText(U),I.success(t("action.logsCopied"))}};return(U,p)=>{const x=Se,ne=jt,Qe=Nt;return i.value?(u(),$("div",ys,[s(Sa,{server:i.value,onBack:r,onDelete:T,onRestartAll:h(g),onStartAll:h(ce),onStopAll:h(j)},null,8,["server","onRestartAll","onStartAll","onStopAll"]),s(Qe,{"model-value":h(R),onTabChange:p[6]||(p[6]=Q=>h(f)(String(Q))),class:"flex-1 flex flex-col overflow-hidden custom-tabs"},{default:v(()=>[s(ne,{name:"config",class:"h-full flex flex-col"},{label:v(()=>[n("span",hs,[s(x,null,{default:v(()=>[s(h(tt))]),_:1}),n("span",null,o(U.$t("common.config"))+" ("+o(h(C).length)+")",1)])]),default:v(()=>[n("div",bs,[n("div",_s,[s(tn,{instances:h(C),"selected-index":h(_),"server-name":i.value.name,"show-template-node":!0,"template-selected":h(_)===null,onSelect:h(k),onSelectTemplate:h(A),onAdd:h(z),onUpdateDisplayName:h(d),onDelete:h(w),onReassignIndexes:h(F)},null,8,["instances","selected-index","server-name","template-selected","onSelect","onSelectTemplate","onAdd","onUpdateDisplayName","onDelete","onReassignIndexes"])]),n("div",$s,[h(_)===null?(u(),$("div",Cs,[n("div",ws,[s(sl,{config:i.value.rawV11Config||{template:{type:"stdio",args:[],env:{},headers:{},timeout:6e4,aggregatedTools:[],instanceSelectionStrategy:"random"},instances:[],tagDefinitions:[]},"onUpdate:template":Z,onSave:fe,onEditJson:De},null,8,["config"])])])):h(_)!==null?(u(),$("div",ks,[n("div",xs,[s(Qe,{modelValue:h(a),"onUpdate:modelValue":p[2]||(p[2]=Q=>Ae(a)?a.value=Q:null),class:"instance-detail-tabs h-full flex flex-col"},{default:v(()=>[s(ne,{name:"config",class:"h-full flex flex-col min-h-0"},{label:v(()=>[n("span",Ss,[s(x,null,{default:v(()=>[s(h(tt))]),_:1}),n("span",null,o(U.$t("common.config")),1)])]),default:v(()=>[n("div",Vs,[s(vs,{"template-config":h(P),"instance-config":h(b),"server-name":i.value.name,"instance-status":h(B)(),"system-tag-definitions":V.value,onUpdate:h(S),onStartInstance:h(ee),onStopInstance:h(le),onRestartInstance:h(se),onViewLogs:p[0]||(p[0]=Q=>a.value="logs")},null,8,["template-config","instance-config","server-name","instance-status","system-tag-definitions","onUpdate","onStartInstance","onStopInstance","onRestartInstance"])])]),_:1}),s(ne,{name:"logs",class:"h-full flex flex-col"},{label:v(()=>[n("span",Is,[s(x,null,{default:v(()=>[s(h(At))]),_:1}),n("span",null,o(U.$t("common.logs")),1)])]),default:v(()=>[s(ul,{logs:i.value.logs,"auto-scroll":Te.value,"onUpdate:autoScroll":p[1]||(p[1]=Q=>Te.value=Q),onClear:Ue,onCopy:Be},null,8,["logs","auto-scroll"])]),_:1})]),_:1},8,["modelValue"])])])):(u(),$("div",Ts,o(U.$t("serverDetail.noSelection")),1))])])]),_:1}),s(ne,{name:"tools",class:"h-full flex flex-col"},{label:v(()=>[n("span",Ds,[s(x,null,{default:v(()=>[s(h(Rt))]),_:1}),n("span",null,o(U.$t("common.tools"))+" ("+o(i.value.toolsCount||0)+")",1)])]),default:v(()=>[s(Tl,{tools:i.value.tools||[],"allowed-tools":i.value.config.aggregatedTools,onSelectTool:p[3]||(p[3]=Q=>Re.value=Q),onUpdateToolVisibility:N,onBatchToggleAll:ae,onCallTool:p[4]||(p[4]=Q=>{q.value=!0,H.value=Q})},null,8,["tools","allowed-tools"])]),_:1}),s(ne,{name:"resources",class:"h-full flex flex-col"},{label:v(()=>[n("span",Es,[s(x,null,{default:v(()=>[s(h(zt))]),_:1}),n("span",null,o(U.$t("common.resources"))+" ("+o(i.value.resourcesCount||0)+")",1)])]),default:v(()=>[s(Al,{resources:i.value.resources,onViewResource:p[5]||(p[5]=Q=>{W.value=Q})},null,8,["resources"])]),_:1})]),_:1},8,["model-value"]),s(zl,{modelValue:$e.value,"onUpdate:modelValue":p[7]||(p[7]=Q=>$e.value=Q),config:i.value.config,"server-name":i.value.name,onSave:Ee},null,8,["modelValue","config","server-name"]),s(st,{modelValue:h(q),"onUpdate:modelValue":p[8]||(p[8]=Q=>Ae(q)?q.value=Q:null),instances:h(C),title:U.$t("serverDetail.selectInstanceForTool"),onConfirm:h(te)},null,8,["modelValue","instances","title","onConfirm"]),s(st,{modelValue:h(E),"onUpdate:modelValue":p[9]||(p[9]=Q=>Ae(E)?E.value=Q:null),instances:h(C),title:U.$t("serverDetail.selectInstanceForResource"),onConfirm:h(pe)},null,8,["modelValue","instances","title","onConfirm"]),h(H)&&h(oe)!==null?(u(),L(sa,{key:0,modelValue:h(re),"onUpdate:modelValue":p[10]||(p[10]=Q=>Ae(re)?re.value=Q:null),"server-name":i.value.name,"tool-name":h(H).name,description:h(H).description,"input-schema":h(H).inputSchema},null,8,["modelValue","server-name","tool-name","description","input-schema"])):M("",!0)])):(u(),$("div",Us,o(U.$t("serverDetail.noServerSelected")),1))}}}),Qs=Ie(Bs,[["__scopeId","data-v-8eb29e78"]]);export{Qs as default};
@@ -1 +0,0 @@
1
- import{j as H,E as k,l as V,a0 as M}from"./index-CsZoFRv1.js";import{E as P,b as R,a as K}from"./el-overlay-CR_KVhLU.js";import{E as Q}from"./el-input-Bh1VGJTU.js";import{t as W,aa as X,c as O,r as v,h as j,y as I,u as s,G as y,C as r,A as m,$ as n,V as w,O as _,P as Y,ai as Z,a0 as C,x as i}from"./vue-vendor-Dwcr0jep.js";import{_ as ee}from"./_plugin-vue_export-helper-DlAUqK2U.js";const te={class:"flex flex-col h-[60vh]"},le={key:0,class:"mb-4 text-gray-600 dark:text-gray-400 bg-gray-50 dark:bg-gray-800/50 p-3 rounded-lg border border-gray-100 dark:border-gray-700/50 max-h-32 overflow-y-auto"},ae={key:1,class:"mb-4 flex items-center"},oe={class:"font-medium text-gray-700 dark:text-gray-300 mr-2 whitespace-nowrap"},se={class:"flex-1 flex gap-4 min-h-0"},re={class:"flex-1 flex flex-col min-w-0"},ne={class:"flex justify-between items-center mb-2"},ie={class:"font-medium text-gray-700 dark:text-gray-300"},ce={class:"flex-1 flex flex-col min-w-0 border-l border-gray-200 dark:border-gray-700 pl-4"},ue={class:"flex justify-between items-center mb-2"},de={class:"font-medium text-gray-700 dark:text-gray-300"},me={class:"flex-1 overflow-auto bg-gray-50 dark:bg-[#0f172a] rounded-lg border border-gray-200 dark:border-gray-700 p-4 font-mono text-sm"},pe={key:0,class:"whitespace-pre-wrap break-words text-gray-600 dark:text-gray-400"},fe={key:1,class:"whitespace-pre-wrap break-words text-green-600 dark:text-green-400"},ge={key:2,class:"whitespace-pre-wrap break-words text-red-600 dark:text-red-400"},ve={key:3,class:"whitespace-pre-wrap break-words text-gray-600 dark:text-gray-400"},ye={class:"flex justify-between items-center"},he={class:"text-xs text-gray-500"},xe={key:0},_e={class:"flex gap-2"},be=W({__name:"ToolCallDialog",props:{modelValue:{type:Boolean},serverName:{},toolName:{},description:{},inputSchema:{}},emits:["update:modelValue"],setup(h,{emit:$}){const{t:l}=X(),a=h,A=$,N=O({get:()=>a.modelValue,set:e=>A("update:modelValue",e)}),x=v("{}"),p=v(null),c=v(null),b=v(!1),f=v(!1),S=v([]),g=v(null),J=O(()=>a.inputSchema?JSON.stringify(a.inputSchema,null,2):"{}"),E=async()=>{if(a.serverName)try{const e=await V.get(`/web/server-instances/${a.serverName}`),t=Array.isArray(e)?e:[];S.value=t,t.length>0&&(g.value=t[0].id)}catch(e){console.error("Failed to fetch server instances:",e),S.value=[],g.value=null}};j(()=>a.serverName,()=>{E()}),j(()=>a.modelValue,e=>{if(e){const t=B(a.inputSchema);x.value=JSON.stringify(t,null,2),p.value=null,c.value=null,E()}},{immediate:!0});function B(e){if(!e||!e.properties)return{};const t={};for(const[d,D]of Object.entries(e.properties)){const o=D;o.default!==void 0?t[d]=o.default:o.type==="string"?t[d]="":o.type==="number"||o.type==="integer"?t[d]=0:o.type==="boolean"?t[d]=!1:o.type==="array"?t[d]=[]:o.type==="object"?t[d]={}:t[d]=null}return t}function T(){try{const e=JSON.parse(x.value);x.value=JSON.stringify(e,null,2)}catch{k.warning(l("toolCallDialog.invalidJson"))}}function z(){f.value=!f.value}function F(e){return`${e.id}`}function U(){console.log("Selected instance:",g.value)}async function L(){try{let e;try{e=JSON.parse(x.value)}catch{k.error(l("toolCallDialog.invalidJsonArguments"));return}b.value=!0,p.value=null,c.value=null,f.value=!1;let t;a.serverName&&a.serverName!=="mcp-hub-lite"?t=await V.post(`/web/hub-tools/servers/${a.serverName}/tools/${a.toolName}/call`,{toolArgs:e,requestOptions:g.value?{sessionId:g.value}:void 0}):t=await V.post(`/web/hub-tools/system/${a.toolName}/call`,{toolArgs:e}),p.value=JSON.stringify(t,null,2),k.success(l("toolCallDialog.executionSuccessful"))}catch(e){console.error("Tool execution failed:",e),e instanceof Error?c.value=e.message||String(e):c.value=String(e),e instanceof M&&e.data?c.value=typeof e.data=="string"?e.data:JSON.stringify(e.data,null,2):typeof e=="object"&&e!==null&&"response"in e&&e.response?.data&&(c.value=JSON.stringify(e.response.data,null,2)),k.error(l("toolCallDialog.executionFailed"))}finally{b.value=!1}}return(e,t)=>{const d=R,D=K,o=H,q=Q,G=P;return i(),I(G,{modelValue:N.value,"onUpdate:modelValue":t[3]||(t[3]=u=>N.value=u),title:s(l)("toolCallDialog.title",{toolName:h.toolName}),width:"800px",class:"tool-call-dialog","destroy-on-close":""},{footer:y(()=>[r("div",ye,[r("div",he,[b.value?(i(),m("span",xe,n(s(l)("toolCallDialog.executing")),1)):w("",!0)]),r("div",_e,[_(o,{onClick:t[2]||(t[2]=u=>N.value=!1)},{default:y(()=>[C(n(s(l)("action.cancel")),1)]),_:1}),_(o,{type:"primary",loading:b.value,onClick:L},{default:y(()=>[C(n(s(l)("toolCallDialog.execute")),1)]),_:1},8,["loading"])])])]),default:y(()=>[r("div",te,[h.description?(i(),m("div",le,n(h.description),1)):w("",!0),h.serverName&&h.serverName!=="mcp-hub-lite"?(i(),m("div",ae,[r("span",oe,n(s(l)("toolCallDialog.instance")),1),_(D,{modelValue:g.value,"onUpdate:modelValue":t[0]||(t[0]=u=>g.value=u),placeholder:s(l)("toolCallDialog.selectInstance"),size:"small",class:"flex-1",onChange:U},{default:y(()=>[(i(!0),m(Y,null,Z(S.value,u=>(i(),I(d,{key:u.id,label:F(u),value:u.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])])):w("",!0),r("div",se,[r("div",re,[r("div",ne,[r("span",ie,n(s(l)("toolCallDialog.arguments")),1),_(o,{link:"",type:"primary",size:"small",onClick:T},{default:y(()=>[C(n(s(l)("toolCallDialog.formatJson")),1)]),_:1})]),_(q,{modelValue:x.value,"onUpdate:modelValue":t[1]||(t[1]=u=>x.value=u),type:"textarea",class:"flex-1 font-mono custom-textarea","input-style":{height:"100%",fontFamily:"monospace"},placeholder:'{"key": "value"}',resize:"none",maxlength:"1000000","show-word-limit":""},null,8,["modelValue"])]),r("div",ce,[r("div",ue,[r("span",de,n(f.value?s(l)("toolCallDialog.inputSchema"):p.value||c.value?s(l)("toolCallDialog.response"):s(l)("toolCallDialog.inputSchema")),1),p.value||c.value||f.value?(i(),I(o,{key:0,link:"",type:"info",size:"small",onClick:z},{default:y(()=>[C(n(f.value?s(l)("toolCallDialog.showResponse"):s(l)("toolCallDialog.showInputSchema")),1)]),_:1})):w("",!0)]),r("div",me,[f.value?(i(),m("pre",pe,n(J.value),1)):p.value?(i(),m("pre",fe,n(p.value),1)):c.value?(i(),m("pre",ge,n(c.value),1)):(i(),m("pre",ve,n(J.value),1))])])])])]),_:1},8,["modelValue","title"])}}}),De=ee(be,[["__scopeId","data-v-b0cc0171"]]);export{De as T};
@@ -1 +0,0 @@
1
- .custom-textarea[data-v-b0cc0171] .el-textarea__inner{height:100%}
@@ -1 +0,0 @@
1
- import{u as H,U as J,b as M,l as U,j as Q,V as W,W as j,s as X,X as K}from"./index-CsZoFRv1.js";import{a as Y}from"./el-skeleton-item-BSxOLPFM.js";import{E as Z}from"./el-input-Bh1VGJTU.js";import{t as P,A as i,C as s,J as E,$ as n,V as R,x as a,aa as ee,r as u,c as te,j as se,O as l,G as y,u as g,a0 as z,H as F,L,P as T,ai as V,y as S}from"./vue-vendor-Dwcr0jep.js";import{T as oe}from"./ToolCallDialog-BEyRp_J3.js";import{_ as ae}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./event-BB_Ol6Sd.js";import"./el-overlay-CR_KVhLU.js";const le={class:"min-w-0 mb-3"},ne={class:"flex items-center gap-2 mb-2"},re=["title"],ie=["title"],O=P({__name:"ToolCard",props:{title:{},description:{},tagName:{},tagClass:{}},emits:["call"],setup(c){return(f,v)=>(a(),i("div",{class:"bg-white dark:bg-[#1e293b] border border-gray-200 dark:border-gray-700 rounded-lg p-4 flex flex-col justify-between shadow-sm hover:shadow-md transition-shadow h-full cursor-pointer",onClick:v[0]||(v[0]=_=>f.$emit("call"))},[s("div",le,[s("div",ne,[c.tagName?(a(),i("span",{key:0,class:E(["shrink-0 px-2 py-0.5 rounded-full text-xs font-medium whitespace-nowrap",c.tagClass||"bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300"])},n(c.tagName),3)):R("",!0),s("span",{class:"font-bold text-gray-900 dark:text-gray-100 font-mono text-base break-all",title:c.title},n(c.title),9,re)]),s("p",{class:"text-sm text-gray-600 dark:text-gray-400 line-clamp-2",title:c.description},n(c.description||f.$t("tools.noDescription")),9,ie)])]))}}),ce={class:"tools-view py-6 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto w-full h-full flex flex-col overflow-hidden bg-gray-50 dark:bg-[#0f172a] transition-colors duration-300"},de={class:"mb-6 shrink-0"},me={class:"text-2xl font-semibold text-gray-900 dark:text-white mb-4"},ue={class:"relative"},ve={class:"flex-1 overflow-y-auto custom-scrollbar space-y-8 pr-2"},pe={class:"text-lg font-bold text-gray-900 dark:text-white"},ge={class:"text-sm font-normal text-gray-500 ml-2"},fe={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-8 transition-all duration-300"},he={class:"flex items-center gap-2 mb-4"},xe={class:"text-lg font-bold text-gray-900 dark:text-white"},ye={class:"text-sm font-normal text-gray-500 ml-2"},_e={key:0,class:"space-y-4"},be={key:1,class:"text-center py-8 text-gray-500"},ke={key:2,class:"space-y-6"},we=["onClick"],Ce={class:"text-xs bg-gray-100 dark:bg-gray-800 px-2 py-0.5 rounded-full"},Ne={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 transition-all duration-300"},$e=P({__name:"ToolsView",setup(c){const{t:f}=ee(),v=u(""),_=u(!1),D=u([]),k=H(),w=u([]),C=u(!1),p=u(null),h=u(new Set),b=u(!1);function q(e){h.value.has(e)?h.value.delete(e):h.value.add(e)}async function A(){try{const e=await U.get("/web/hub-tools/system");w.value=e.map(t=>({...t,serverName:"mcp-hub-lite"})).sort((t,d)=>t.name.localeCompare(d.name))}catch(e){console.error("Failed to fetch system tools:",e)}}function I(e){p.value={...e,serverName:e.serverName},C.value=!0}async function B(){_.value=!0;try{const e=await U.get(`/web/search?q=${encodeURIComponent(v.value)}`);D.value=(e.results||[]).map(t=>({tool:{name:t.name,description:t.description,serverName:t.serverName},score:0}))}catch(e){console.error("Failed to fetch tools:",e)}finally{_.value=!1}}function G(){B()}const N=te(()=>{const e={};return D.value.forEach(t=>{if(!t?.tool)return;const x=k.servers.find($=>$.name===t.tool.serverName)?.status==="online"?f("tools.online"):f("tools.offline"),r=t.tool.serverName?`${t.tool.serverName} (${x})`:"Unknown";e[r]||(e[r]=[]),e[r].push(t)}),Object.entries(e).map(([t,d])=>({serverName:t,tools:d.sort((x,r)=>x.tool.name.localeCompare(r.tool.name))})).sort((t,d)=>t.serverName.localeCompare(d.serverName))});return se(()=>{A(),B(),k.servers.length===0&&k.fetchServers()}),(e,t)=>{const d=Q,x=Z,r=M,$=Y;return a(),i("div",ce,[s("div",de,[s("h2",me,n(e.$t("tools.title")),1),s("div",ue,[l(x,{modelValue:v.value,"onUpdate:modelValue":t[0]||(t[0]=o=>v.value=o),placeholder:e.$t("tools.searchPlaceholder"),class:"w-full",size:"large","prefix-icon":g(J),onInput:G},{append:y(()=>[l(d,{icon:g(W)},null,8,["icon"])]),_:1},8,["modelValue","placeholder","prefix-icon"])])]),s("div",ve,[s("section",null,[s("div",{class:"flex items-center gap-2 mb-4 cursor-pointer select-none hover:text-gray-700 dark:hover:text-gray-200 transition-colors",onClick:t[1]||(t[1]=o=>b.value=!b.value)},[l(r,{class:E(["transition-transform duration-200",{"-rotate-90":b.value}])},{default:y(()=>[l(g(j))]),_:1},8,["class"]),l(r,{class:"text-gray-900 dark:text-white",size:20},{default:y(()=>[l(g(X))]),_:1}),s("h3",pe,[z(n(e.$t("tools.systemTools"))+" ",1),s("span",ge,"("+n(w.value.length)+")",1)])]),F(s("div",fe,[(a(!0),i(T,null,V(w.value,o=>(a(),S(O,{key:o.name,title:o.name,description:o.description,"tag-name":e.$t("tools.systemTag"),"tag-class":"bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300",onCall:m=>I(o)},null,8,["title","description","tag-name","onCall"]))),128))],512),[[L,!b.value]])]),s("section",null,[s("div",he,[l(r,{class:"text-gray-900 dark:text-white",size:20},{default:y(()=>[l(g(K))]),_:1}),s("h3",xe,[z(n(e.$t("tools.aggregatedTools"))+" ",1),s("span",ye,"("+n(N.value.reduce((o,m)=>o+m.tools.length,0))+")",1)])]),_.value?(a(),i("div",_e,[l($,{animated:"",count:3})])):N.value.length===0?(a(),i("div",be,n(e.$t("tools.noToolsFound")),1)):(a(),i("div",ke,[(a(!0),i(T,null,V(N.value,o=>(a(),i("div",{key:o.serverName,class:"space-y-3"},[s("div",{class:"flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-gray-400 px-1 cursor-pointer select-none hover:text-gray-700 dark:hover:text-gray-200 transition-colors",onClick:m=>q(o.serverName)},[l(r,{class:E(["transition-transform duration-200",{"-rotate-90":h.value.has(o.serverName)}])},{default:y(()=>[l(g(j))]),_:1},8,["class"]),s("span",null,n(o.serverName),1),s("span",Ce,n(o.tools.length),1)],8,we),F(s("div",Ne,[(a(!0),i(T,null,V(o.tools,m=>(a(),S(O,{key:m.tool.name,title:m.tool.name,description:m.tool.description,onCall:Te=>I(m.tool)},null,8,["title","description","onCall"]))),128))],512),[[L,!h.value.has(o.serverName)]])]))),128))]))])]),p.value?(a(),S(oe,{key:0,modelValue:C.value,"onUpdate:modelValue":t[2]||(t[2]=o=>C.value=o),"server-name":p.value.serverName,"tool-name":p.value.name,description:p.value.description,"input-schema":p.value.inputSchema},null,8,["modelValue","server-name","tool-name","description","input-schema"])):R("",!0)])}}}),ze=ae($e,[["__scopeId","data-v-647104c9"]]);export{ze as default};
@@ -1 +0,0 @@
1
- .custom-scrollbar[data-v-647104c9]::-webkit-scrollbar{width:6px}.custom-scrollbar[data-v-647104c9]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar[data-v-647104c9]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.dark .custom-scrollbar[data-v-647104c9]::-webkit-scrollbar-thumb{background:#475569}