@loop_ouroboros/mcp-hub-lite 1.0.1 → 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.
- package/CHANGELOG.md +47 -0
- package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
- package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
- package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
- package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
- package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
- package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
- package/dist/client/assets/el-input-99gMrutP.js +1 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
- package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
- package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
- package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/index-C2V-ZGji.js +1 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/index-vhkqgpmN.js +2 -0
- package/dist/client/assets/omit-CqPQN3XP.js +1 -0
- package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +363 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +2 -56
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +2 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.d.ts +4 -32
- package/dist/server/shared/types/client.types.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.js +3 -2
- package/dist/server/shared/types/index.d.ts +3 -3
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +3 -3
- package/dist/server/shared/types/session-context.types.d.ts +35 -0
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
- package/dist/server/shared/types/session-context.types.js +5 -0
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +34 -61
- package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
- package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
- package/dist/server/src/api/web/clients.js +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/web/sessions.js +1 -1
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -4
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -102
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -98
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/index.js +1 -1
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/client-tracker.service.d.ts +3 -128
- package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
- package/dist/server/src/services/client-tracker.service.js +4 -200
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +15 -19
- package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +42 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -64
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/search/search-cache.d.ts +0 -19
- package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
- package/dist/server/src/services/search/search-cache.js +0 -24
- package/dist/server/src/services/search/search-core.service.d.ts +5 -5
- package/dist/server/src/services/search/search-core.service.js +11 -11
- package/dist/server/src/services/session/session-manager.d.ts +12 -256
- package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
- package/dist/server/src/services/session/session-manager.js +23 -583
- package/dist/server/src/services/session-tracker.service.d.ts +124 -0
- package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
- package/dist/server/src/services/session-tracker.service.js +176 -0
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +10 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.d.ts +1 -0
- package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.js +2 -1
- package/dist/server/src/utils/logger/log-context.d.ts +1 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +287 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -8
- package/dist/server/src/utils/logger/log-output.d.ts +2 -2
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-output.js +27 -6
- package/dist/server/src/utils/logger/logger.d.ts +13 -0
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/logger.js +42 -7
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/request-context.d.ts +12 -30
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +10 -30
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/tool-args-parser.d.ts +0 -4
- package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
- package/dist/server/src/utils/tool-args-parser.js +0 -7
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +33 -13
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/evaluation/evaluation.test.js +10 -9
- package/dist/server/tests/integration/api/gateway.test.js +24 -39
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/temp/test-stack.d.ts +6 -0
- package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
- package/dist/server/tests/temp/test-stack.js +40 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -334
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +107 -13
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/logger.test.js +101 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/request-context.test.js +9 -28
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +1 -1
- package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
- package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
- package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
- package/dist/client/assets/ServerListView-DralUL71.js +0 -30
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
- package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
- package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
- package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
- package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
- package/dist/client/assets/el-input-CeZiq23m.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-iw_hrrlC.js +0 -1
- package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
- package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
- package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/index-COYaYRbH.js +0 -1
- package/dist/client/assets/index-Cfcvxyee.js +0 -2
- package/dist/client/assets/index-PhuI36Zi.js +0 -1
- package/dist/client/assets/omit-7EL6VJO4.js +0 -1
- package/dist/client/assets/vnode-upjuIlvm.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.
|
|
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.
|
|
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
|
|
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
|
|
100
|
-
const instances = this.
|
|
47
|
+
if (server) {
|
|
48
|
+
const instances = this.getServerInstancesByName(name);
|
|
101
49
|
for (const instance of instances) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
|
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
|
-
|
|
153
|
-
const
|
|
154
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
224
|
-
|
|
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
|
|
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
|
-
|
|
277
|
-
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
374
|
-
const instances = this.getServerInstanceByName(name);
|
|
188
|
+
const instances = this.getServerInstancesByName(name);
|
|
375
189
|
for (const instance of instances) {
|
|
376
|
-
await mcpConnectionManager.disconnect(instance.
|
|
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
|
|
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.
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
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;
|
|
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"}
|