@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.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 (333) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-Bu2joUvW.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  6. package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
  9. package/dist/client/assets/ServerDetail-BKV-M4qT.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-BXgtDyt3.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
  14. package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
  17. package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
  18. package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-Bp9Rjwd7.js} +1 -1
  19. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  20. package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
  21. package/dist/client/assets/el-input-99gMrutP.js +1 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-CIQ5pD5u.js} +1 -1
  24. package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  27. package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
  28. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  29. package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
  30. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  31. package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
  32. package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
  33. package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/index-C2V-ZGji.js +1 -0
  36. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  37. package/dist/client/assets/index-vhkqgpmN.js +2 -0
  38. package/dist/client/assets/{omit-DPsOVNIJ.js → omit-CqPQN3XP.js} +1 -1
  39. package/dist/client/assets/{raf-DY5mgbuB.js → raf-C2wXzaVU.js} +1 -1
  40. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
  41. package/dist/client/index.html +3 -3
  42. package/dist/server/shared/models/resource.model.d.ts +2 -1
  43. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  44. package/dist/server/shared/models/server.model.d.ts +362 -5
  45. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  46. package/dist/server/shared/models/server.model.js +220 -1
  47. package/dist/server/shared/models/session.model.d.ts +1 -57
  48. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  49. package/dist/server/shared/models/session.model.js +1 -55
  50. package/dist/server/shared/models/tool.model.d.ts +4 -2
  51. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  52. package/dist/server/shared/types/session-context.types.d.ts +0 -2
  53. package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
  54. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  55. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  56. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  57. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  58. package/dist/server/src/api/mcp/gateway.js +19 -50
  59. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
  60. package/dist/server/src/api/mcp/session-context-extractor.js +5 -14
  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/status.d.ts.map +1 -1
  81. package/dist/server/src/cli/commands/status.js +41 -30
  82. package/dist/server/src/cli/index.d.ts.map +1 -1
  83. package/dist/server/src/cli/index.js +2 -1
  84. package/dist/server/src/cli/server.d.ts +11 -2
  85. package/dist/server/src/cli/server.d.ts.map +1 -1
  86. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  87. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  88. package/dist/server/src/config/config-change-logger.js +135 -11
  89. package/dist/server/src/config/config-loader.d.ts +6 -5
  90. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  91. package/dist/server/src/config/config-loader.js +54 -16
  92. package/dist/server/src/config/config-manager.d.ts +51 -43
  93. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  94. package/dist/server/src/config/config-manager.js +84 -66
  95. package/dist/server/src/config/config-migrator.d.ts +82 -0
  96. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  97. package/dist/server/src/config/config-migrator.js +348 -0
  98. package/dist/server/src/config/config-saver.d.ts +2 -0
  99. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  100. package/dist/server/src/config/config-saver.js +8 -2
  101. package/dist/server/src/config/config.schema.d.ts +10 -104
  102. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  103. package/dist/server/src/config/config.schema.js +15 -99
  104. package/dist/server/src/config/path-validator.d.ts +27 -0
  105. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  106. package/dist/server/src/config/path-validator.js +53 -0
  107. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  108. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  109. package/dist/server/src/config/server-config-manager.js +222 -66
  110. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  111. package/dist/server/src/config/type-converter.js +3 -2
  112. package/dist/server/src/models/event.model.d.ts +17 -10
  113. package/dist/server/src/models/event.model.d.ts.map +1 -1
  114. package/dist/server/src/models/server.model.d.ts +17 -3
  115. package/dist/server/src/models/server.model.d.ts.map +1 -1
  116. package/dist/server/src/models/server.model.js +2 -1
  117. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  118. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  119. package/dist/server/src/models/system-tools.constants.js +4 -8
  120. package/dist/server/src/pid/manager.d.ts.map +1 -1
  121. package/dist/server/src/pid/manager.js +2 -1
  122. package/dist/server/src/server/dev-server.js +34 -20
  123. package/dist/server/src/server/runner.d.ts.map +1 -1
  124. package/dist/server/src/server/runner.js +41 -26
  125. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  126. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  127. package/dist/server/src/services/connection/connection-manager.js +286 -241
  128. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  129. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  130. package/dist/server/src/services/connection/tool-cache.js +50 -55
  131. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  132. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  133. package/dist/server/src/services/gateway/gateway.service.js +15 -19
  134. package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
  135. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  136. package/dist/server/src/services/gateway/global-transport.js +42 -0
  137. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  138. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  139. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  140. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  141. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  142. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  143. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  144. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +10 -81
  145. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  146. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  147. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  148. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  149. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  150. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  151. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  152. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
  153. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
  154. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  155. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  156. package/dist/server/src/services/gateway/types.d.ts +2 -1
  157. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  158. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  159. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  160. package/dist/server/src/services/hub-manager.service.js +89 -267
  161. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  162. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  163. package/dist/server/src/services/hub-tools/index.js +1 -2
  164. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  165. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  166. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  167. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  168. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  169. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  170. package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
  171. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  172. package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
  173. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  174. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  175. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  176. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  177. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  178. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  179. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  180. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  181. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  182. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  183. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  184. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  185. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  186. package/dist/server/src/services/hub-tools.service.js +185 -110
  187. package/dist/server/src/services/search/search-core.service.d.ts +5 -5
  188. package/dist/server/src/services/search/search-core.service.js +11 -11
  189. package/dist/server/src/services/session/session-manager.d.ts +12 -256
  190. package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
  191. package/dist/server/src/services/session/session-manager.js +23 -585
  192. package/dist/server/src/services/session-tracker.service.d.ts +2 -10
  193. package/dist/server/src/services/session-tracker.service.d.ts.map +1 -1
  194. package/dist/server/src/services/session-tracker.service.js +2 -53
  195. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  196. package/dist/server/src/services/system-tool-handler.js +7 -17
  197. package/dist/server/src/utils/composite-key.d.ts +29 -0
  198. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  199. package/dist/server/src/utils/composite-key.js +39 -0
  200. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  201. package/dist/server/src/utils/error-handler.js +3 -2
  202. package/dist/server/src/utils/index.d.ts +2 -0
  203. package/dist/server/src/utils/index.d.ts.map +1 -1
  204. package/dist/server/src/utils/index.js +2 -0
  205. package/dist/server/src/utils/instance-id.d.ts +22 -0
  206. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  207. package/dist/server/src/utils/instance-id.js +59 -0
  208. package/dist/server/src/utils/json-utils.d.ts +4 -4
  209. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  210. package/dist/server/src/utils/json-utils.js +4 -4
  211. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  212. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  213. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  214. package/dist/server/src/utils/logger/log-formatter.js +82 -5
  215. package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
  216. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  217. package/dist/server/src/utils/logger/log-modules.js +8 -6
  218. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  219. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  220. package/dist/server/src/utils/parameter-validator.js +53 -0
  221. package/dist/server/src/utils/process-tree.d.ts +49 -0
  222. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  223. package/dist/server/src/utils/process-tree.js +285 -0
  224. package/dist/server/src/utils/request-context.d.ts +0 -18
  225. package/dist/server/src/utils/request-context.d.ts.map +1 -1
  226. package/dist/server/src/utils/request-context.js +0 -20
  227. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  228. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  229. package/dist/server/src/utils/sort-utils.js +131 -0
  230. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  231. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  232. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  233. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  234. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  235. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  236. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  237. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  238. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  239. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  240. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  241. package/dist/server/src/utils/transports/transport-factory.js +31 -11
  242. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  243. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  244. package/dist/server/src/utils/version.d.ts +11 -0
  245. package/dist/server/src/utils/version.d.ts.map +1 -0
  246. package/dist/server/src/utils/version.js +57 -0
  247. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  248. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  249. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  250. package/dist/server/tests/evaluation/evaluation.test.js +10 -9
  251. package/dist/server/tests/integration/api/gateway.test.js +2 -2
  252. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  253. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  254. package/dist/server/tests/server.test.js +27 -16
  255. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  256. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  257. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  258. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  259. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  260. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  261. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  262. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  263. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  264. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  265. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  266. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  267. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  268. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  269. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  270. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  271. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  272. package/dist/server/tests/unit/server/runner.test.js +86 -62
  273. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  274. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  275. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  276. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  277. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  278. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  279. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  280. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  281. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  282. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  283. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  284. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
  285. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  286. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  287. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  288. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  289. package/dist/server/tests/unit/utils/config.test.js +88 -186
  290. package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
  291. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  292. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  293. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  294. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  295. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  296. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  297. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  298. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  299. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  300. package/dist/server/tests/unit/utils/request-context.test.js +5 -24
  301. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  302. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  303. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  304. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  305. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  306. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  307. package/package.json +1 -1
  308. package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
  309. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  310. package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
  311. package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
  312. package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
  313. package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
  314. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  315. package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
  316. package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
  317. package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
  318. package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
  319. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  320. package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
  321. package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
  322. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  323. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  324. package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
  325. package/dist/client/assets/el-select-DvjGddk_.js +0 -1
  326. package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
  327. package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
  328. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  329. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  330. package/dist/client/assets/el-tag-npbwux4f.js +0 -1
  331. package/dist/client/assets/index-CCnAxNF8.js +0 -2
  332. package/dist/client/assets/index-d1DZeSfz.js +0 -1
  333. package/dist/client/assets/vnode-CHomNjgN.js +0 -1
@@ -29,9 +29,6 @@ describe('ConfigManager', () => {
29
29
  configManager = new ConfigManager(tempConfigPath);
30
30
  });
31
31
  afterEach(() => {
32
- // Force garbage collection to ensure config manager instance is destroyed
33
- // Since tests need to frequently create and destroy instances, don't set to null here
34
- // Instead, let each test case create a new instance
35
32
  // Restore original environment variables
36
33
  process.env = { ...originalEnv };
37
34
  // Clean up temporary directory with retry mechanism to prevent permission issues
@@ -65,14 +62,14 @@ describe('ConfigManager', () => {
65
62
  const config = configManager.getConfig();
66
63
  // Verify default configuration
67
64
  expect(config).toBeDefined();
68
- expect(config.version).toBe('1.0.0');
65
+ expect(config.version).toBe('1.1.0');
69
66
  expect(config.system.host).toBe('localhost');
70
67
  expect(config.system.port).toBe(7788);
71
68
  expect(config.servers).toEqual({});
72
69
  });
73
70
  it('should load existing config file', () => {
74
71
  const testConfig = {
75
- version: '1.0.0',
72
+ version: '1.1.0',
76
73
  system: {
77
74
  host: 'test-host',
78
75
  port: 8080,
@@ -80,10 +77,10 @@ describe('ConfigManager', () => {
80
77
  theme: 'light',
81
78
  logging: {
82
79
  level: 'debug',
83
- rotation: {
84
- enabled: true,
85
- maxAge: '30d'
86
- }
80
+ rotationAge: '30d',
81
+ jsonPretty: true,
82
+ mcpCommDebug: false,
83
+ apiDebug: false
87
84
  }
88
85
  },
89
86
  security: {
@@ -92,23 +89,28 @@ describe('ConfigManager', () => {
92
89
  connectionTimeout: 15000,
93
90
  idleConnectionTimeout: 60000,
94
91
  sessionTimeout: 30 * 60 * 1000,
92
+ sessionFlushInterval: 900000,
95
93
  maxConnections: 20
96
94
  },
97
95
  servers: {
98
96
  'test-server': {
99
- command: 'test-command',
100
- args: ['arg1', 'arg2'],
101
- enabled: true,
102
- type: 'stdio',
103
- timeout: 30000
104
- }
105
- },
106
- observability: {
107
- tracing: {
108
- enabled: true,
109
- exporter: 'otlp',
110
- endpoint: 'http://test:4318/v1/traces',
111
- sampleRate: 0.5
97
+ template: {
98
+ command: 'test-command',
99
+ args: ['arg1', 'arg2'],
100
+ type: 'stdio',
101
+ timeout: 30000,
102
+ aggregatedTools: [],
103
+ tags: {}
104
+ },
105
+ instances: [
106
+ {
107
+ id: 'test-server-1',
108
+ enabled: true,
109
+ args: [],
110
+ tags: {}
111
+ }
112
+ ],
113
+ tagDefinitions: []
112
114
  }
113
115
  }
114
116
  };
@@ -120,7 +122,7 @@ describe('ConfigManager', () => {
120
122
  expect(config.system.host).toBe('test-host');
121
123
  expect(config.system.port).toBe(8080);
122
124
  expect(config.servers['test-server']).toBeDefined();
123
- expect(config.servers['test-server'].command).toBe('test-command');
125
+ expect(config.servers['test-server'].template.command).toBe('test-command');
124
126
  });
125
127
  it('should handle invalid config file gracefully', () => {
126
128
  // Write invalid JSON
@@ -128,20 +130,15 @@ describe('ConfigManager', () => {
128
130
  configManager = new ConfigManager(tempConfigPath);
129
131
  const config = configManager.getConfig();
130
132
  // Should fall back to default configuration
131
- expect(config.version).toBe('1.0.0');
133
+ expect(config.version).toBe('1.1.0');
132
134
  expect(config.system.host).toBe('localhost');
133
135
  });
134
136
  });
135
137
  describe('Configuration Saving', () => {
136
- it('should save config to file', () => {
137
- console.log('[TEST] Starting "should save config to file" test');
138
- console.log('[TEST] tempConfigPath:', tempConfigPath);
138
+ it('should save config to file', async () => {
139
139
  configManager = new ConfigManager(tempConfigPath);
140
- // Log initial configuration
141
- const initialConfig = configManager.getConfig();
142
- console.log('[TEST] Initial config:', JSON.stringify(initialConfig));
143
140
  // Modify configuration
144
- configManager.updateConfig({
141
+ await configManager.updateConfig({
145
142
  system: {
146
143
  host: 'new-host',
147
144
  port: 9090,
@@ -152,24 +149,18 @@ describe('ConfigManager', () => {
152
149
  rotationAge: '7d',
153
150
  jsonPretty: true,
154
151
  mcpCommDebug: false,
155
- sessionDebug: false
152
+ apiDebug: false
156
153
  }
157
154
  }
158
155
  });
159
- // Log in-memory configuration
160
- const memoryConfig = configManager.getConfig();
161
- console.log('[TEST] Memory config after update:', JSON.stringify(memoryConfig));
162
156
  // Verify file was created and contains correct content
163
157
  expect(fs.existsSync(tempConfigPath)).toBe(true);
164
158
  const savedContent = fs.readFileSync(tempConfigPath, 'utf-8');
165
- console.log('[TEST] File content:', savedContent);
166
159
  const savedConfig = JSON.parse(savedContent);
167
- console.log('[TEST] Parsed config from file:', JSON.stringify(savedConfig));
168
160
  expect(savedConfig.system.host).toBe('new-host');
169
161
  expect(savedConfig.system.port).toBe(9090);
170
- console.log('[TEST] Test passed');
171
162
  });
172
- it('should create config directory if it does not exist', () => {
163
+ it('should create config directory if it does not exist', async () => {
173
164
  const testRunId = `non-existent-dir-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`;
174
165
  const nonExistentPath = path.join(os.tmpdir(), testRunId, '.mcp-hub.json');
175
166
  // Ensure directory doesn't exist
@@ -191,7 +182,7 @@ describe('ConfigManager', () => {
191
182
  }
192
183
  configManager = new ConfigManager(nonExistentPath);
193
184
  // Modify configuration to trigger save
194
- configManager.updateConfig({
185
+ await configManager.updateConfig({
195
186
  system: {
196
187
  host: 'test-host',
197
188
  port: 7788,
@@ -202,7 +193,7 @@ describe('ConfigManager', () => {
202
193
  rotationAge: '7d',
203
194
  jsonPretty: true,
204
195
  mcpCommDebug: false,
205
- sessionDebug: false
196
+ apiDebug: false
206
197
  }
207
198
  }
208
199
  });
@@ -244,7 +235,7 @@ describe('ConfigManager', () => {
244
235
  rotationAge: '7d',
245
236
  jsonPretty: true,
246
237
  mcpCommDebug: false,
247
- sessionDebug: false
238
+ apiDebug: false
248
239
  }
249
240
  }
250
241
  };
@@ -259,72 +250,67 @@ describe('ConfigManager', () => {
259
250
  configManager = new ConfigManager(tempConfigPath);
260
251
  });
261
252
  it('should add a new server', async () => {
262
- const serverConfig = {
253
+ const serverTemplate = {
263
254
  command: 'test-command',
264
255
  args: ['arg1'],
265
- enabled: true,
266
256
  type: 'stdio'
267
257
  };
268
- await configManager.addServer('test-server', serverConfig);
258
+ await configManager.addServer('test-server', serverTemplate);
269
259
  const servers = configManager.getServers();
270
260
  expect(servers).toHaveLength(1);
271
261
  expect(servers[0].name).toBe('test-server');
272
- expect(servers[0].config.command).toBe('test-command');
262
+ expect(servers[0].config.template.command).toBe('test-command');
263
+ expect(servers[0].config.instances).toHaveLength(1);
273
264
  });
274
265
  it('should validate server config when adding', async () => {
275
266
  const invalidServerConfig = {
276
267
  command: 'test-command',
277
- type: 'invalid-type' // Invalid type
268
+ type: 'invalid-type'
278
269
  };
279
270
  await expect(configManager.addServer('test-server', invalidServerConfig)).rejects.toThrow();
280
271
  });
281
- it('should get server by name', () => {
272
+ it('should get server by name', async () => {
282
273
  const serverConfig = {
283
274
  command: 'test-command',
284
- enabled: true,
285
275
  type: 'stdio'
286
276
  };
287
- configManager.addServer('test-server', serverConfig);
277
+ await configManager.addServer('test-server', serverConfig);
288
278
  const server = configManager.getServerByName('test-server');
289
279
  expect(server).toBeDefined();
290
- expect(server?.command).toBe('test-command');
280
+ expect(server?.template.command).toBe('test-command');
291
281
  const nonExistentServer = configManager.getServerByName('non-existent');
292
282
  expect(nonExistentServer).toBeUndefined();
293
283
  });
294
284
  it('should update existing server', async () => {
295
285
  const initialConfig = {
296
286
  command: 'initial-command',
297
- enabled: true,
298
287
  type: 'stdio'
299
288
  };
300
289
  await configManager.addServer('test-server', initialConfig);
301
290
  const updates = {
302
- command: 'updated-command',
303
- enabled: false
291
+ command: 'updated-command'
304
292
  };
305
293
  await configManager.updateServer('test-server', updates);
306
294
  const updatedServer = configManager.getServerByName('test-server');
307
- expect(updatedServer?.command).toBe('updated-command');
308
- expect(updatedServer?.enabled).toBe(false);
295
+ expect(updatedServer?.template.command).toBe('updated-command');
309
296
  });
310
297
  it('should not update non-existent server', async () => {
311
- await configManager.updateServer('non-existent', { enabled: false });
312
- const server = configManager.getServerByName('non-existent');
313
- expect(server).toBeUndefined();
298
+ const result = await configManager.updateServer('non-existent', { command: 'test' });
299
+ expect(result).toBeNull();
314
300
  });
315
301
  it('should remove server', async () => {
316
302
  await configManager.addServer('test-server', {
317
303
  command: 'test-command',
318
- enabled: true,
319
304
  type: 'stdio'
320
305
  });
321
- await configManager.removeServer('test-server');
306
+ const result = await configManager.removeServer('test-server');
307
+ expect(result).toBe(true);
322
308
  const server = configManager.getServerByName('test-server');
323
309
  expect(server).toBeUndefined();
324
310
  });
325
311
  it('should not remove non-existent server', async () => {
326
- await configManager.removeServer('non-existent');
327
- // Should not throw an exception
312
+ const result = await configManager.removeServer('non-existent');
313
+ expect(result).toBe(false);
328
314
  });
329
315
  });
330
316
  describe('Server Instance Management', () => {
@@ -335,125 +321,71 @@ describe('ConfigManager', () => {
335
321
  // Add server first
336
322
  await configManager.addServer('test-server', {
337
323
  command: 'test-command',
338
- enabled: true,
339
324
  type: 'stdio'
340
325
  });
341
326
  const instanceConfig = {
342
- pid: 12345
327
+ enabled: false
343
328
  };
344
329
  const instance = await configManager.addServerInstance('test-server', instanceConfig);
345
- expect(instance.id).toBeDefined();
346
- expect(instance.pid).toBe(12345);
347
- expect(instance.timestamp).toBeDefined();
348
- expect(instance.hash).toBeDefined();
330
+ expect(instance.id).toMatch(/^test-server-[0-9a-f]{8}(-[0-9]+)?$/);
331
+ expect(instance.enabled).toBe(false);
349
332
  });
350
333
  it('should add server instance with provided ID', async () => {
351
334
  await configManager.addServer('test-server', {
352
335
  command: 'test-command',
353
- enabled: true,
354
336
  type: 'stdio'
355
337
  });
356
338
  const instanceConfig = {
357
339
  id: 'custom-id',
358
- timestamp: 1234567890,
359
- hash: 'custom-hash',
360
- pid: 12345
340
+ enabled: true,
341
+ args: ['--verbose'],
342
+ tags: { env: 'test' }
361
343
  };
362
344
  const instance = await configManager.addServerInstance('test-server', instanceConfig);
363
345
  expect(instance.id).toBe('custom-id');
364
- expect(instance.timestamp).toBe(1234567890);
365
- expect(instance.hash).toBe('custom-hash');
366
- expect(instance.pid).toBe(12345);
367
- });
368
- it('should validate server instance config', async () => {
369
- await configManager.addServer('test-server', {
370
- command: 'test-command',
371
- enabled: true,
372
- type: 'stdio'
373
- });
374
- const invalidInstance = {
375
- id: 'test-id',
376
- timestamp: 'invalid-timestamp' // Should be a number
377
- };
378
- await expect(configManager.addServerInstance('test-server', invalidInstance)).rejects.toThrow();
346
+ expect(instance.enabled).toBe(true);
347
+ expect(instance.args).toEqual(['--verbose']);
348
+ expect(instance.tags).toEqual({ env: 'test' });
379
349
  });
380
- it('should get server instances by name', () => {
381
- const instances = configManager.getServerInstanceByName('non-existent');
350
+ it('should get server instances by name', async () => {
351
+ const instances = configManager.getServerInstancesByName('non-existent');
382
352
  expect(instances).toHaveLength(0);
383
353
  // Add server and instance
384
- configManager.addServer('test-server', {
385
- command: 'test-command',
386
- enabled: true,
387
- type: 'stdio'
388
- });
389
- configManager.addServerInstance('test-server', { pid: 12345 });
390
- const testInstances = configManager.getServerInstanceByName('test-server');
391
- expect(testInstances).toHaveLength(1);
392
- });
393
- it('should get all server instances', () => {
394
- const allInstances = configManager.getServerInstances();
395
- expect(Object.keys(allInstances)).toHaveLength(0);
396
- // Add server and instance
397
- configManager.addServer('server1', {
398
- command: 'cmd1',
399
- enabled: true,
400
- type: 'stdio'
401
- });
402
- configManager.addServer('server2', {
403
- command: 'cmd2',
404
- enabled: true,
405
- type: 'stdio'
406
- });
407
- configManager.addServerInstance('server1', { pid: 12345 });
408
- configManager.addServerInstance('server2', { pid: 67890 });
409
- const allInstancesAfter = configManager.getServerInstances();
410
- expect(Object.keys(allInstancesAfter)).toHaveLength(2);
411
- expect(allInstancesAfter.server1).toHaveLength(1);
412
- expect(allInstancesAfter.server2).toHaveLength(1);
413
- });
414
- it('should get server by instance ID', async () => {
415
354
  await configManager.addServer('test-server', {
416
355
  command: 'test-command',
417
- enabled: true,
418
356
  type: 'stdio'
419
357
  });
420
- await configManager.addServerInstance('test-server', {
421
- id: 'test-instance-id',
422
- timestamp: Date.now(),
423
- hash: 'test-hash',
424
- pid: 12345
425
- });
426
- const result = configManager.getServerById('test-instance-id');
427
- expect(result).toBeDefined();
428
- expect(result?.name).toBe('test-server');
429
- expect(result?.instance.id).toBe('test-instance-id');
430
- expect(result?.config.command).toBe('test-command');
431
- const nonExistent = configManager.getServerById('non-existent');
432
- expect(nonExistent).toBeUndefined();
358
+ await configManager.addServerInstance('test-server', { enabled: true });
359
+ const testInstances = configManager.getServerInstancesByName('test-server');
360
+ expect(testInstances).toHaveLength(2); // Default instance + new one
433
361
  });
434
362
  it('should update server instance', async () => {
435
363
  await configManager.addServer('test-server', {
436
364
  command: 'test-command',
437
- enabled: true,
438
365
  type: 'stdio'
439
366
  });
440
- await configManager.addServerInstance('test-server', { pid: 12345 });
441
- await configManager.updateServerInstance('test-server', 0, { pid: 54321 });
442
- const instances = configManager.getServerInstanceByName('test-server');
443
- expect(instances[0].pid).toBe(54321);
367
+ const instances = configManager.getServerInstancesByName('test-server');
368
+ const index = instances[0].index ?? 0;
369
+ const result = await configManager.updateServerInstance('test-server', index, {
370
+ enabled: false
371
+ });
372
+ expect(result).toBe(true);
373
+ const updatedInstances = configManager.getServerInstancesByName('test-server');
374
+ expect(updatedInstances[0].enabled).toBe(false);
444
375
  });
445
376
  it('should remove server instance', async () => {
446
377
  await configManager.addServer('test-server', {
447
378
  command: 'test-command',
448
- enabled: true,
449
379
  type: 'stdio'
450
380
  });
451
- await configManager.addServerInstance('test-server', { pid: 12345 });
452
- await configManager.addServerInstance('test-server', { pid: 67890 });
453
- await configManager.removeServerInstance('test-server', 0);
454
- const instances = configManager.getServerInstanceByName('test-server');
455
- expect(instances).toHaveLength(1);
456
- expect(instances[0].pid).toBe(67890);
381
+ await configManager.addServerInstance('test-server', { id: 'instance-1', enabled: true });
382
+ await configManager.addServerInstance('test-server', { id: 'instance-2', enabled: true });
383
+ let instances = configManager.getServerInstancesByName('test-server');
384
+ expect(instances).toHaveLength(3); // Default + 2 added
385
+ const result = await configManager.removeServerInstance('test-server', 0);
386
+ expect(result).toBe(true);
387
+ instances = configManager.getServerInstancesByName('test-server');
388
+ expect(instances).toHaveLength(2);
457
389
  });
458
390
  });
459
391
  describe('Configuration Updates and Change Logging', () => {
@@ -472,7 +404,7 @@ describe('ConfigManager', () => {
472
404
  rotationAge: '7d',
473
405
  jsonPretty: true,
474
406
  mcpCommDebug: false,
475
- sessionDebug: false
407
+ apiDebug: false
476
408
  }
477
409
  },
478
410
  security: {
@@ -491,30 +423,6 @@ describe('ConfigManager', () => {
491
423
  expect(config.system.port).toBe(9090);
492
424
  expect(config.security.maxConcurrentConnections).toBe(100);
493
425
  });
494
- it('should log configuration changes', async () => {
495
- // Mock logger
496
- const loggerInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
497
- await configManager.updateConfig({
498
- system: {
499
- host: 'new-host',
500
- port: 7788,
501
- language: 'zh',
502
- theme: 'system',
503
- logging: {
504
- level: 'info',
505
- rotationAge: '7d',
506
- jsonPretty: true,
507
- mcpCommDebug: false,
508
- sessionDebug: false
509
- }
510
- }
511
- });
512
- // Verify logger is called (note: actual logging happens in logger module)
513
- // Since logger is an external dependency, we primarily verify the configuration update itself
514
- const config = configManager.getConfig();
515
- expect(config.system.host).toBe('new-host');
516
- loggerInfoSpy.mockRestore();
517
- });
518
426
  it('should handle partial config updates', async () => {
519
427
  // Initial configuration
520
428
  const initialConfig = configManager.getConfig();
@@ -549,13 +457,13 @@ describe('ConfigManager', () => {
549
457
  rotationAge: '7d',
550
458
  jsonPretty: true,
551
459
  mcpCommDebug: false,
552
- sessionDebug: false
460
+ apiDebug: false
553
461
  }
554
462
  }
555
463
  });
556
464
  // Directly modify file content
557
465
  const fileConfig = {
558
- version: '1.0.0',
466
+ version: '1.1.0',
559
467
  system: {
560
468
  host: 'file-host',
561
469
  port: 7788,
@@ -566,7 +474,7 @@ describe('ConfigManager', () => {
566
474
  rotationAge: '7d',
567
475
  jsonPretty: true,
568
476
  mcpCommDebug: false,
569
- sessionDebug: false
477
+ apiDebug: false
570
478
  }
571
479
  },
572
480
  security: {
@@ -575,17 +483,11 @@ describe('ConfigManager', () => {
575
483
  connectionTimeout: 30000,
576
484
  idleConnectionTimeout: 300000,
577
485
  sessionTimeout: 30 * 60 * 1000,
486
+ sessionFlushInterval: 900000,
578
487
  maxConnections: 50
579
488
  },
580
489
  servers: {},
581
- observability: {
582
- tracing: {
583
- enabled: false,
584
- exporter: 'console',
585
- endpoint: 'http://localhost:4318/v1/traces',
586
- sampleRate: 1.0
587
- }
588
- }
490
+ tagDefinitions: []
589
491
  };
590
492
  fs.writeFileSync(tempConfigPath, JSON.stringify(fileConfig, null, 2));
591
493
  // Synchronize configuration
@@ -601,11 +503,11 @@ describe('ConfigManager', () => {
601
503
  fs.mkdirSync(tempDir, { recursive: true });
602
504
  const testTempConfigPath = path.join(tempDir, '.mcp-hub.json');
603
505
  // Write initial configuration
604
- fs.writeFileSync(testTempConfigPath, JSON.stringify({ version: '1.0.0' }));
506
+ fs.writeFileSync(testTempConfigPath, JSON.stringify({ version: '1.1.0' }));
605
507
  configManager = new ConfigManager(testTempConfigPath);
606
508
  const config = configManager.getConfig();
607
509
  expect(config).toBeDefined();
608
- expect(config.version).toBe('1.0.0');
510
+ expect(config.version).toBe('1.1.0');
609
511
  // Clean up, add retry mechanism
610
512
  let retries = 3;
611
513
  while (retries > 0) {
@@ -627,7 +529,7 @@ describe('ConfigManager', () => {
627
529
  configManager = new ConfigManager(tempConfigPath);
628
530
  const config = configManager.getConfig();
629
531
  // Should fill in default values
630
- expect(config.version).toBe('1.0.0');
532
+ expect(config.version).toBe('1.1.0');
631
533
  expect(config.system.host).toBe('localhost');
632
534
  });
633
535
  });