@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1

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 (322) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
  6. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
  9. package/dist/client/assets/ServerDetail-BLQ-a4cO.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BHrsFD5i.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
  14. package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
  17. package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
  18. package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
  19. package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
  20. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  21. package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
  24. package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
  27. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  28. package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
  29. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  30. package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
  31. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  32. package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
  33. package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
  36. package/dist/client/assets/index-ByNBhPAR.js +1 -0
  37. package/dist/client/assets/index-CTB6oe-9.js +2 -0
  38. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  39. package/dist/client/assets/omit-CUnDT6sS.js +1 -0
  40. package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
  41. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
  42. package/dist/client/index.html +3 -3
  43. package/dist/server/shared/models/resource.model.d.ts +2 -1
  44. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  45. package/dist/server/shared/models/server.model.d.ts +362 -5
  46. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  47. package/dist/server/shared/models/server.model.js +220 -1
  48. package/dist/server/shared/models/session.model.d.ts +1 -57
  49. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  50. package/dist/server/shared/models/session.model.js +1 -55
  51. package/dist/server/shared/models/tool.model.d.ts +4 -2
  52. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  53. package/dist/server/shared/types/session-context.types.d.ts +0 -2
  54. package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
  55. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  56. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  57. package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
  58. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  59. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  60. package/dist/server/src/api/mcp/gateway.js +32 -49
  61. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  62. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  63. package/dist/server/src/api/web/hub-tools.js +3 -54
  64. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  65. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  66. package/dist/server/src/api/web/mcp-status.js +71 -30
  67. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  68. package/dist/server/src/api/web/resources.js +28 -22
  69. package/dist/server/src/api/web/search.d.ts +2 -16
  70. package/dist/server/src/api/web/search.d.ts.map +1 -1
  71. package/dist/server/src/api/web/search.js +24 -45
  72. package/dist/server/src/api/web/servers.d.ts +3 -3
  73. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  74. package/dist/server/src/api/web/servers.js +70 -25
  75. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  76. package/dist/server/src/api/ws/ws-handler.js +4 -2
  77. package/dist/server/src/app.d.ts.map +1 -1
  78. package/dist/server/src/app.js +0 -2
  79. package/dist/server/src/cli/commands/list.js +2 -2
  80. package/dist/server/src/cli/commands/server.d.ts +57 -0
  81. package/dist/server/src/cli/commands/server.d.ts.map +1 -0
  82. package/dist/server/src/cli/commands/server.js +169 -0
  83. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  84. package/dist/server/src/cli/commands/status.js +41 -30
  85. package/dist/server/src/cli/index.d.ts.map +1 -1
  86. package/dist/server/src/cli/index.js +2 -1
  87. package/dist/server/src/cli/server.d.ts +11 -2
  88. package/dist/server/src/cli/server.d.ts.map +1 -1
  89. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  90. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  91. package/dist/server/src/config/config-change-logger.js +135 -11
  92. package/dist/server/src/config/config-loader.d.ts +6 -5
  93. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  94. package/dist/server/src/config/config-loader.js +54 -16
  95. package/dist/server/src/config/config-manager.d.ts +51 -43
  96. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  97. package/dist/server/src/config/config-manager.js +84 -66
  98. package/dist/server/src/config/config-migrator.d.ts +82 -0
  99. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  100. package/dist/server/src/config/config-migrator.js +348 -0
  101. package/dist/server/src/config/config-saver.d.ts +2 -0
  102. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  103. package/dist/server/src/config/config-saver.js +8 -2
  104. package/dist/server/src/config/config.schema.d.ts +10 -104
  105. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  106. package/dist/server/src/config/config.schema.js +15 -99
  107. package/dist/server/src/config/path-validator.d.ts +27 -0
  108. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  109. package/dist/server/src/config/path-validator.js +53 -0
  110. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  111. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  112. package/dist/server/src/config/server-config-manager.js +222 -66
  113. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  114. package/dist/server/src/config/type-converter.js +3 -2
  115. package/dist/server/src/models/event.model.d.ts +17 -10
  116. package/dist/server/src/models/event.model.d.ts.map +1 -1
  117. package/dist/server/src/models/server.model.d.ts +17 -3
  118. package/dist/server/src/models/server.model.d.ts.map +1 -1
  119. package/dist/server/src/models/server.model.js +2 -1
  120. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  121. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  122. package/dist/server/src/models/system-tools.constants.js +4 -8
  123. package/dist/server/src/pid/manager.d.ts.map +1 -1
  124. package/dist/server/src/pid/manager.js +2 -1
  125. package/dist/server/src/server/dev-server.js +34 -20
  126. package/dist/server/src/server/runner.d.ts.map +1 -1
  127. package/dist/server/src/server/runner.js +41 -26
  128. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  129. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  130. package/dist/server/src/services/connection/connection-manager.js +286 -241
  131. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  132. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  133. package/dist/server/src/services/connection/tool-cache.js +50 -55
  134. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  135. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  136. package/dist/server/src/services/gateway/gateway.service.js +53 -23
  137. package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
  138. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  139. package/dist/server/src/services/gateway/global-transport.js +66 -0
  140. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  141. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  142. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  143. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  144. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  145. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  146. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  147. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
  148. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  149. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  150. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  151. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  152. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  153. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  155. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  156. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  157. package/dist/server/src/services/gateway/types.d.ts +2 -1
  158. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  159. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  160. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  161. package/dist/server/src/services/hub-manager.service.js +89 -267
  162. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  163. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  164. package/dist/server/src/services/hub-tools/index.js +1 -2
  165. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  166. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  167. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  168. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  169. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  170. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  171. package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
  172. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  173. package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
  174. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  175. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  177. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  178. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  180. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  181. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  182. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  183. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  184. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  185. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  186. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  187. package/dist/server/src/services/hub-tools.service.js +185 -110
  188. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  189. package/dist/server/src/services/system-tool-handler.js +7 -17
  190. package/dist/server/src/utils/composite-key.d.ts +29 -0
  191. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  192. package/dist/server/src/utils/composite-key.js +39 -0
  193. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  194. package/dist/server/src/utils/error-handler.js +3 -2
  195. package/dist/server/src/utils/index.d.ts +2 -0
  196. package/dist/server/src/utils/index.d.ts.map +1 -1
  197. package/dist/server/src/utils/index.js +2 -0
  198. package/dist/server/src/utils/instance-id.d.ts +22 -0
  199. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  200. package/dist/server/src/utils/instance-id.js +59 -0
  201. package/dist/server/src/utils/json-utils.d.ts +4 -4
  202. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  203. package/dist/server/src/utils/json-utils.js +4 -4
  204. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  205. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  206. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  207. package/dist/server/src/utils/logger/log-formatter.js +82 -5
  208. package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
  209. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  210. package/dist/server/src/utils/logger/log-modules.js +8 -6
  211. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  212. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  213. package/dist/server/src/utils/parameter-validator.js +53 -0
  214. package/dist/server/src/utils/process-tree.d.ts +49 -0
  215. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  216. package/dist/server/src/utils/process-tree.js +285 -0
  217. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  218. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  219. package/dist/server/src/utils/sort-utils.js +131 -0
  220. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  221. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  222. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  223. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  224. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  225. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  226. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  227. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  228. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  229. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  230. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  231. package/dist/server/src/utils/transports/transport-factory.js +31 -11
  232. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  233. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  234. package/dist/server/src/utils/version.d.ts +11 -0
  235. package/dist/server/src/utils/version.d.ts.map +1 -0
  236. package/dist/server/src/utils/version.js +57 -0
  237. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  238. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  239. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  240. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  241. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  242. package/dist/server/tests/server.test.js +27 -16
  243. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  244. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  245. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  246. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  247. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  248. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  249. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  250. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  251. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  252. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  253. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  254. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  255. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  256. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  257. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  258. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  259. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  260. package/dist/server/tests/unit/server/runner.test.js +86 -62
  261. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  262. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  263. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  264. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  265. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  266. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  267. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  268. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  269. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  270. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  271. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  272. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
  273. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  274. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  275. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  276. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  277. package/dist/server/tests/unit/utils/config.test.js +88 -186
  278. package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
  279. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  280. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  281. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  282. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  283. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  284. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  285. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  286. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  287. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  288. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  289. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  290. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  291. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  292. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  293. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  294. package/package.json +3 -1
  295. package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
  296. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  297. package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
  298. package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
  299. package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
  300. package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
  301. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  302. package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
  303. package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
  304. package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
  305. package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
  306. package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
  307. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  308. package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
  309. package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
  310. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  311. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  312. package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
  313. package/dist/client/assets/el-select-DvjGddk_.js +0 -1
  314. package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
  315. package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
  316. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  317. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  318. package/dist/client/assets/el-tag-npbwux4f.js +0 -1
  319. package/dist/client/assets/index-CCnAxNF8.js +0 -2
  320. package/dist/client/assets/index-d1DZeSfz.js +0 -1
  321. package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
  322. package/dist/client/assets/vnode-CHomNjgN.js +0 -1
@@ -1,4 +1,5 @@
1
1
  import { configManager } from '../config/config-manager.js';
2
+ import { resolveInstanceConfig } from '../config/config-migrator.js';
2
3
  import { logger, LOG_MODULES } from '../utils/logger.js';
3
4
  import { mcpConnectionManager } from './mcp-connection-manager.js';
4
5
  import { eventBus, EventTypes } from './event-bus.service.js';
@@ -7,19 +8,7 @@ import { eventBus, EventTypes } from './event-bus.service.js';
7
8
  *
8
9
  * This service provides a comprehensive interface for CRUD operations on MCP servers,
9
10
  * including batch operations for performance optimization, instance management, and
10
- * event-driven communication with other system components. It serves as the primary
11
- * entry point for server management operations in the MCP Hub Lite system.
12
- *
13
- * The service integrates with the configuration manager for persistence and the
14
- * MCP connection manager for automatic connection handling, while publishing
15
- * events to notify other components of state changes.
16
- *
17
- * @example
18
- * ```typescript
19
- * const hubManager = new HubManagerService();
20
- * await hubManager.addServer('my-server', { type: 'stdio', command: 'npx my-mcp' });
21
- * await hubManager.removeServer('my-server');
22
- * ```
11
+ * event-driven communication with other system components.
23
12
  */
24
13
  export class HubManagerService {
25
14
  configManager;
@@ -28,25 +17,9 @@ export class HubManagerService {
28
17
  }
29
18
  /**
30
19
  * Adds multiple server configurations in a single batch operation without auto-starting.
31
- *
32
- * This method optimizes performance for bulk server addition by batching configuration
33
- * updates and saving the configuration only once at the end. It publishes SERVER_ADDED
34
- * events for each newly added server to notify other system components.
35
- *
36
- * @param {Array<{ name: string; config: Partial<ServerConfig> }>} servers - Array of server configurations to add
37
- * @returns {Promise<void>} Resolves when all servers are added and configuration is saved
38
- *
39
- * @example
40
- * ```typescript
41
- * await hubManager.addServersWithoutAutoStart([
42
- * { name: 'server1', config: { type: 'stdio', command: 'npx server1' } },
43
- * { name: 'server2', config: { type: 'http', url: 'http://localhost:8080' } }
44
- * ]);
45
- * ```
46
20
  */
47
21
  async addServersWithoutAutoStart(servers) {
48
22
  await this.configManager.addServers(servers);
49
- // Publish SERVER_ADDED event for all newly added servers
50
23
  for (const { name } of servers) {
51
24
  const serverConfig = this.getServerByName(name);
52
25
  if (serverConfig) {
@@ -56,228 +29,121 @@ export class HubManagerService {
56
29
  }
57
30
  /**
58
31
  * Creates server instances for multiple servers without automatically connecting them.
59
- *
60
- * This method iterates through the provided server names and creates a new instance
61
- * for each server using the configuration manager. It publishes SERVER_INSTANCE_ADDED
62
- * events for each created instance to notify other system components.
63
- *
64
- * @param {string[]} serverNames - Array of server names to create instances for
65
- * @returns {Promise<void>} Resolves when all instances are created
66
- *
67
- * @example
68
- * ```typescript
69
- * await hubManager.addServerInstancesWithoutConnect(['server1', 'server2']);
70
- * ```
71
32
  */
72
33
  async addServerInstancesWithoutConnect(serverNames) {
73
34
  for (const name of serverNames) {
74
35
  await this.configManager.addServerInstance(name, {});
75
- const instances = this.getServerInstanceByName(name);
36
+ const instances = this.getServerInstancesByName(name);
76
37
  const lastInstance = instances[instances.length - 1];
77
38
  eventBus.publish(EventTypes.SERVER_INSTANCE_ADDED, { name, instance: lastInstance });
78
39
  }
79
40
  }
80
41
  /**
81
- * Concurrently connects to multiple server instances using Promise.all for efficiency.
82
- *
83
- * This method iterates through the provided server names, retrieves their configurations
84
- * and instances, and attempts to connect to each instance concurrently. It only attempts
85
- * to connect to servers that are enabled in their configuration. Errors during connection
86
- * are logged but don't prevent other connections from proceeding.
87
- *
88
- * @param {string[]} serverNames - Array of server names to connect instances for
89
- * @returns {Promise<void>} Resolves when all connection attempts complete
90
- *
91
- * @example
92
- * ```typescript
93
- * await hubManager.connectServerInstances(['server1', 'server2']);
94
- * ```
42
+ * Concurrently connects to multiple server instances.
95
43
  */
96
44
  async connectServerInstances(serverNames) {
97
45
  const connectPromises = serverNames.map(async (name) => {
98
46
  const server = this.getServerByName(name);
99
- if (server && server.enabled !== false) {
100
- const instances = this.getServerInstanceByName(name);
47
+ if (server) {
48
+ const instances = this.getServerInstancesByName(name);
101
49
  for (const instance of instances) {
102
- try {
103
- await mcpConnectionManager.connect({ ...server, ...instance });
104
- }
105
- catch (error) {
106
- logger.error(`Failed to connect server instance for ${name}:`, error, LOG_MODULES.HUB_MANAGER);
50
+ if (instance.enabled !== false) {
51
+ const resolvedConfig = this.getResolvedServerConfig(name, instance.id);
52
+ if (resolvedConfig) {
53
+ try {
54
+ await mcpConnectionManager.connect(name, instance.index ?? 0, {
55
+ ...resolvedConfig,
56
+ id: instance.id
57
+ });
58
+ }
59
+ catch (error) {
60
+ logger.error(`Failed to connect server instance for ${name}:`, error, LOG_MODULES.HUB_MANAGER);
61
+ }
62
+ }
107
63
  }
108
64
  }
109
65
  }
110
66
  });
111
- // Execute concurrently using Promise.all
112
67
  await Promise.all(connectPromises);
113
68
  }
114
69
  /**
115
- * Retrieves all configured servers with their names and configurations.
116
- *
117
- * This method delegates to the configuration manager to return a complete list of
118
- * all servers that have been configured in the system, including their full
119
- * configuration objects.
120
- *
121
- * @returns {Array<{ name: string; config: ServerConfig }>} Array of all configured servers
122
- *
123
- * @example
124
- * ```typescript
125
- * const servers = hubManager.getAllServers();
126
- * console.log(`Total servers: ${servers.length}`);
127
- * ```
70
+ * Retrieves all configured servers.
128
71
  */
129
72
  getAllServers() {
130
73
  return this.configManager.getServers();
131
74
  }
132
75
  /**
133
76
  * Retrieves a server configuration and instance by its unique instance ID.
134
- *
135
- * This method performs an O(n) search across all servers and their instances to find
136
- * the matching instance ID. It returns a composite object containing the server name,
137
- * full configuration, and specific instance configuration.
138
- *
139
- * @param {string} id - Unique instance ID to search for
140
- * @returns {{ name: string; config: ServerConfig; instance: ServerInstanceConfig } | undefined}
141
- * Composite server/instance object or undefined if not found
142
- *
143
- * @example
144
- * ```typescript
145
- * const serverInfo = hubManager.getServerById('instance-123');
146
- * if (serverInfo) {
147
- * console.log(`Found server: ${serverInfo.name}`);
148
- * }
149
- * ```
150
77
  */
151
78
  getServerById(id) {
152
- // Iterate through all servers and instances to find matching id
153
- const serverInstances = this.configManager.getServerInstances();
154
- for (const [serverName, instances] of Object.entries(serverInstances)) {
155
- const instance = instances.find((inst) => inst.id === id);
79
+ const servers = this.configManager.getServers();
80
+ for (const server of servers) {
81
+ const instance = server.config.instances.find((inst) => inst.id === id);
156
82
  if (instance) {
157
- const serverConfig = this.configManager.getServerByName(serverName);
158
- if (serverConfig) {
159
- return {
160
- name: serverName,
161
- config: serverConfig,
162
- instance
163
- };
164
- }
83
+ return {
84
+ name: server.name,
85
+ config: server.config,
86
+ instance
87
+ };
165
88
  }
166
89
  }
167
90
  return undefined;
168
91
  }
169
92
  /**
170
- * Retrieves a server configuration by its name.
171
- *
172
- * This method delegates to the configuration manager to return the full configuration
173
- * for a server with the specified name, or undefined if no such server exists.
174
- *
175
- * @param {string} name - Server name to look up
176
- * @returns {ServerConfig | undefined} Full server configuration or undefined if not found
177
- *
178
- * @example
179
- * ```typescript
180
- * const config = hubManager.getServerByName('my-server');
181
- * if (config) {
182
- * console.log(`Server type: ${config.type}`);
183
- * }
184
- * ```
93
+ * Retrieves a server configuration by name.
185
94
  */
186
95
  getServerByName(name) {
187
96
  return this.configManager.getServerByName(name);
188
97
  }
98
+ /**
99
+ * Retrieves all instances for a specific server by name.
100
+ */
101
+ getServerInstancesByName(name) {
102
+ return this.configManager.getServerInstancesByName(name);
103
+ }
189
104
  /**
190
105
  * Retrieves all server instances grouped by server name.
191
- *
192
- * This method returns a record mapping server names to arrays of their instance configurations,
193
- * providing a complete view of all server instances in the system.
194
- *
195
- * @returns {Record<string, ServerInstanceConfig[]>} Object mapping server names to instance arrays
196
- *
197
- * @example
198
- * ```typescript
199
- * const instances = hubManager.getServerInstances();
200
- * Object.entries(instances).forEach(([name, instances]) => {
201
- * console.log(`${name} has ${instances.length} instances`);
202
- * });
203
- * ```
204
106
  */
205
107
  getServerInstances() {
206
- return this.configManager.getServerInstances();
108
+ const servers = this.getAllServers();
109
+ const instances = {};
110
+ for (const server of servers) {
111
+ instances[server.name] = server.config.instances || [];
112
+ }
113
+ return instances;
207
114
  }
208
115
  /**
209
- * Retrieves all instances for a specific server by name.
210
- *
211
- * This method returns an array of all instance configurations for the specified server,
212
- * or an empty array if the server doesn't exist or has no instances.
213
- *
214
- * @param {string} name - Server name to get instances for
215
- * @returns {ServerInstanceConfig[]} Array of instance configurations for the server
216
- *
217
- * @example
218
- * ```typescript
219
- * const instances = hubManager.getServerInstanceByName('my-server');
220
- * console.log(`Server has ${instances.length} instances`);
221
- * ```
116
+ * Gets the resolved server configuration by merging template and instance.
222
117
  */
223
- getServerInstanceByName(name) {
224
- return this.configManager.getServerInstanceByName(name);
118
+ getResolvedServerConfig(name, instanceId) {
119
+ const serverConfig = this.getServerByName(name);
120
+ if (!serverConfig) {
121
+ return null;
122
+ }
123
+ return resolveInstanceConfig(serverConfig, instanceId);
225
124
  }
226
125
  /**
227
126
  * Adds a new server configuration to the system.
228
- *
229
- * This method creates a new server with the specified name and configuration,
230
- * logs the addition, and publishes a SERVER_ADDED event to notify other system components.
231
- * The method returns the complete server configuration after validation and normalization.
232
- *
233
- * @param {string} name - Unique name for the new server
234
- * @param {Partial<ServerConfig>} config - Partial server configuration to merge with defaults
235
- * @returns {Promise<ServerConfig>} Complete server configuration after creation
236
- *
237
- * @example
238
- * ```typescript
239
- * const config = await hubManager.addServer('my-server', {
240
- * type: 'stdio',
241
- * command: 'npx my-mcp-server'
242
- * });
243
- * console.log('Server added successfully');
244
- * ```
245
127
  */
246
128
  async addServer(name, config) {
247
129
  const newServer = await this.configManager.addServer(name, config);
248
130
  logger.info(`Server added: [${name}]`, LOG_MODULES.HUB_MANAGER);
249
- // Publish server added event
250
131
  eventBus.publish(EventTypes.SERVER_ADDED, { name, config: newServer });
251
132
  return newServer;
252
133
  }
253
134
  /**
254
- * Adds a new instance to an existing server and optionally connects to it.
255
- *
256
- * This method creates a new instance for the specified server, and if the server is enabled,
257
- * automatically attempts to connect to the new instance. It publishes a SERVER_INSTANCE_ADDED
258
- * event to notify other system components and returns the complete instance configuration.
259
- *
260
- * @param {string} name - Name of the existing server to add an instance to
261
- * @param {Partial<ServerInstanceConfig>} instance - Partial instance configuration to merge with defaults
262
- * @returns {Promise<ServerInstanceConfig>} Complete instance configuration after creation
263
- * @throws {Error} If the server doesn't exist or connection fails (logged but not thrown)
264
- *
265
- * @example
266
- * ```typescript
267
- * const instance = await hubManager.addServerInstance('my-server', {
268
- * cwd: '/path/to/working/directory'
269
- * });
270
- * console.log('Server instance added successfully');
271
- * ```
135
+ * Adds a new instance to an existing server.
272
136
  */
273
137
  async addServerInstance(name, instance) {
274
138
  const newInstance = await this.configManager.addServerInstance(name, instance);
275
139
  logger.info(`Server instance added for server: [${name}]`, LOG_MODULES.HUB_MANAGER);
276
- // If server config is enabled, attempt to connect
277
- const server = this.getServerByName(name);
278
- if (server && server.enabled !== false) {
140
+ const resolvedConfig = this.getResolvedServerConfig(name, newInstance.id);
141
+ if (resolvedConfig && resolvedConfig.enabled !== false) {
279
142
  try {
280
- await mcpConnectionManager.connect({ ...server, ...newInstance });
143
+ await mcpConnectionManager.connect(name, newInstance.index ?? 0, {
144
+ ...resolvedConfig,
145
+ id: newInstance.id
146
+ });
281
147
  }
282
148
  catch (error) {
283
149
  logger.error(`Failed to auto-connect server instance for ${name}:`, error, LOG_MODULES.HUB_MANAGER);
@@ -287,25 +153,7 @@ export class HubManagerService {
287
153
  return newInstance;
288
154
  }
289
155
  /**
290
- * Updates an existing server configuration with new values.
291
- *
292
- * This method validates that the server exists before applying updates, logs the operation,
293
- * and publishes a SERVER_UPDATED event to notify other system components. It returns the
294
- * updated server configuration or null if the server doesn't exist.
295
- *
296
- * @param {string} name - Name of the server to update
297
- * @param {Partial<ServerConfig>} updates - Partial configuration updates to apply
298
- * @returns {Promise<ServerConfig | null>} Updated server configuration or null if not found
299
- *
300
- * @example
301
- * ```typescript
302
- * const updated = await hubManager.updateServer('my-server', {
303
- * enabled: false
304
- * });
305
- * if (updated) {
306
- * console.log('Server updated successfully');
307
- * }
308
- * ```
156
+ * Updates an existing server template configuration.
309
157
  */
310
158
  async updateServer(name, updates) {
311
159
  const existing = this.getServerByName(name);
@@ -322,25 +170,7 @@ export class HubManagerService {
322
170
  return updatedServer;
323
171
  }
324
172
  /**
325
- * Updates a specific server instance at the given index.
326
- *
327
- * This method applies updates to the server instance at the specified index within the
328
- * server's instance array, logs the operation, and publishes a SERVER_INSTANCE_UPDATED
329
- * event to notify other system components.
330
- *
331
- * @param {string} name - Name of the server containing the instance to update
332
- * @param {number} index - Index of the instance within the server's instance array
333
- * @param {Partial<ServerInstanceConfig>} updates - Partial instance configuration updates to apply
334
- * @returns {Promise<void>} Resolves when the update is complete
335
- * @throws {Error} If the server or instance index doesn't exist
336
- *
337
- * @example
338
- * ```typescript
339
- * await hubManager.updateServerInstance('my-server', 0, {
340
- * cwd: '/new/working/directory'
341
- * });
342
- * console.log('Server instance updated successfully');
343
- * ```
173
+ * Updates a specific server instance.
344
174
  */
345
175
  async updateServerInstance(name, index, updates) {
346
176
  await this.configManager.updateServerInstance(name, index, updates);
@@ -348,32 +178,16 @@ export class HubManagerService {
348
178
  eventBus.publish(EventTypes.SERVER_INSTANCE_UPDATED, { name, index, updates });
349
179
  }
350
180
  /**
351
- * Removes a server and all its instances from the system.
352
- *
353
- * This method performs a graceful shutdown by first disconnecting all instances of the server,
354
- * then removing the server configuration from the system. It publishes a SERVER_DELETED event
355
- * to notify other system components and returns true if the server existed and was removed.
356
- *
357
- * @param {string} name - Name of the server to remove
358
- * @returns {Promise<boolean>} True if server existed and was removed, false if not found
359
- *
360
- * @example
361
- * ```typescript
362
- * const removed = await hubManager.removeServer('my-server');
363
- * if (removed) {
364
- * console.log('Server removed successfully');
365
- * }
366
- * ```
181
+ * Removes a server and all its instances.
367
182
  */
368
183
  async removeServer(name) {
369
184
  const existing = this.getServerByName(name);
370
185
  if (!existing) {
371
186
  return false;
372
187
  }
373
- // Disconnect all instances of this server
374
- const instances = this.getServerInstanceByName(name);
188
+ const instances = this.getServerInstancesByName(name);
375
189
  for (const instance of instances) {
376
- await mcpConnectionManager.disconnect(instance.id).catch(() => { });
190
+ await mcpConnectionManager.disconnect(name, instance.index ?? 0).catch(() => { });
377
191
  }
378
192
  await this.configManager.removeServer(name);
379
193
  logger.info(`Server removed: ${name}`, LOG_MODULES.HUB_MANAGER);
@@ -381,33 +195,41 @@ export class HubManagerService {
381
195
  return true;
382
196
  }
383
197
  /**
384
- * Removes a specific server instance at the given index.
385
- *
386
- * This method performs a graceful shutdown by first disconnecting the specified instance,
387
- * then removing it from the server's instance array. It publishes a SERVER_INSTANCE_DELETED
388
- * event to notify other system components and logs the operation.
389
- *
390
- * @param {string} name - Name of the server containing the instance to remove
391
- * @param {number} index - Index of the instance within the server's instance array
392
- * @returns {Promise<void>} Resolves when the instance is removed
393
- * @throws {Error} If the server doesn't exist or the index is out of bounds
394
- *
395
- * @example
396
- * ```typescript
397
- * await hubManager.removeServerInstance('my-server', 0);
398
- * console.log('Server instance removed successfully');
399
- * ```
198
+ * Removes a specific server instance.
400
199
  */
401
200
  async removeServerInstance(name, index) {
402
- const instances = this.getServerInstanceByName(name);
403
- if (index >= 0 && index < instances.length) {
404
- const instance = instances[index];
405
- // Disconnect this instance
406
- await mcpConnectionManager.disconnect(instance.id).catch(() => { });
201
+ const instances = this.getServerInstancesByName(name);
202
+ const instance = instances.find((inst) => inst.index === index);
203
+ if (instance) {
204
+ await mcpConnectionManager.disconnect(name, instance.index ?? 0).catch(() => { });
407
205
  }
408
206
  await this.configManager.removeServerInstance(name, index);
409
207
  logger.info(`Server instance removed for server: [${name}] at index: ${index}`, LOG_MODULES.HUB_MANAGER);
410
208
  eventBus.publish(EventTypes.SERVER_INSTANCE_DELETED, { name, index });
411
209
  }
210
+ /**
211
+ * Reassigns server instance indexes.
212
+ */
213
+ async reassignInstanceIndexes(name) {
214
+ return this.configManager.reassignInstanceIndexes(name);
215
+ }
216
+ /**
217
+ * Updates the instance selection strategy for a server.
218
+ */
219
+ async updateServerInstanceSelectionStrategy(name, strategy) {
220
+ const existing = this.getServerByName(name);
221
+ if (!existing) {
222
+ logger.warn(`Attempted to update instance selection strategy for non-existent server: ${name}`, LOG_MODULES.HUB_MANAGER);
223
+ return null;
224
+ }
225
+ // Update strategy in template instead of server-level configuration
226
+ await this.configManager.updateServer(name, { instanceSelectionStrategy: strategy });
227
+ logger.info(`Server instance selection strategy updated: ${name} -> ${strategy}`, LOG_MODULES.HUB_MANAGER);
228
+ const updatedServer = this.getServerByName(name) || null;
229
+ if (updatedServer) {
230
+ eventBus.publish(EventTypes.SERVER_UPDATED, { name, config: updatedServer });
231
+ }
232
+ return updatedServer;
233
+ }
412
234
  }
413
235
  export const hubManager = new HubManagerService();
@@ -1,10 +1,8 @@
1
1
  export { HubToolsService, hubToolsService } from '../hub-tools.service.js';
2
2
  export type { RequestOptions, ServerInstanceInfo, ValidServer } from './types.js';
3
- export { hasValidId, selectBestInstance } from './server-selector.js';
3
+ export { hasValidId, selectBestInstance, getServerDescription } from './server-selector.js';
4
4
  export { getSystemTools } from './system-tool-definitions.js';
5
5
  export type { ToolAnnotations, SystemToolDefinition } from './system-tool-definitions.js';
6
- export { findServers, findToolsInServer, findTools } from './tool-search.js';
7
- export type { SearchOptions } from './tool-search.js';
8
6
  export { generateDynamicResources, readResource } from './resource-generator.js';
9
7
  export type { ServerMetadata } from './resource-generator.js';
10
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/hub-tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG3E,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/hub-tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG3E,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,6 +1,5 @@
1
1
  // Re-export the original service for backward compatibility
2
2
  export { HubToolsService, hubToolsService } from '../hub-tools.service.js';
3
- export { hasValidId, selectBestInstance } from './server-selector.js';
3
+ export { hasValidId, selectBestInstance, getServerDescription } from './server-selector.js';
4
4
  export { getSystemTools } from './system-tool-definitions.js';
5
- export { findServers, findToolsInServer, findTools } from './tool-search.js';
6
5
  export { generateDynamicResources, readResource } from './resource-generator.js';
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Instance Matcher Service
3
+ * Provides intelligent instance selection based on tags and connection status.
4
+ */
5
+ /**
6
+ * Minimal instance interface for matching - works with any instance type that has an id.
7
+ */
8
+ export interface MatchableInstance {
9
+ id: string;
10
+ enabled?: boolean;
11
+ tags?: Record<string, string>;
12
+ [key: string]: unknown;
13
+ }
14
+ /**
15
+ * Extended service instance with connection status for matching.
16
+ */
17
+ export interface InstanceWithStatus extends MatchableInstance {
18
+ connected?: boolean;
19
+ }
20
+ /**
21
+ * Calculates the match score between an instance and requested tags.
22
+ *
23
+ * The score ranges from 0.0 (no match) to 1.0 (perfect match).
24
+ * Calculated as the ratio of matching tags to total requested tags.
25
+ *
26
+ * @param instance - The service instance to evaluate
27
+ * @param requestedTags - The tags to match against
28
+ * @returns Match score between 0.0 and 1.0
29
+ */
30
+ export declare function calculateMatchScore(instance: MatchableInstance, requestedTags: Record<string, string> | undefined): number;
31
+ /**
32
+ * Filters instances to only include enabled ones.
33
+ *
34
+ * @param instances - Array of instances to filter
35
+ * @returns Array of enabled instances
36
+ */
37
+ export declare function filterEnabledInstances<T extends MatchableInstance>(instances: T[]): T[];
38
+ /**
39
+ * Sorts instances by connection status (connected first).
40
+ *
41
+ * Preserves the original order within each status group.
42
+ *
43
+ * @param instances - Array of instances with connection status
44
+ * @returns Sorted array with connected instances first
45
+ */
46
+ export declare function sortByConnectionStatus<T extends InstanceWithStatus>(instances: T[]): T[];
47
+ /**
48
+ * Selects the best matching instance based on tags and connection status.
49
+ *
50
+ * Selection priority:
51
+ * 1. Only consider enabled instances
52
+ * 2. Prioritize connected instances over disconnected ones (ALWAYS prefer connected if available)
53
+ * 3. Among connected instances, select the one with highest tag match score
54
+ * 4. Among disconnected instances, select the one with highest tag match score
55
+ * 5. Only return undefined if NO connected instances AND tags requested but no match
56
+ *
57
+ * @param instances - Array of instances to choose from
58
+ * @param requestedTags - Optional tags to match
59
+ * @returns The best matching instance, or undefined if no suitable instance found
60
+ */
61
+ export declare function selectBestMatch<T extends InstanceWithStatus>(instances: T[], requestedTags: Record<string, string> | undefined): T | undefined;
62
+ //# sourceMappingURL=instance-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-matcher.d.ts","sourceRoot":"","sources":["../../../../../src/services/hub-tools/instance-matcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAChD,MAAM,CAsBR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEvF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAaxF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAC1D,SAAS,EAAE,CAAC,EAAE,EACd,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAChD,CAAC,GAAG,SAAS,CAiCf"}