@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
- package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
- package/dist/client/assets/ServerDetail-BLQ-a4cO.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-BHrsFD5i.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
- package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
- package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
- package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
- package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
- package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
- package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
- package/dist/client/assets/index-ByNBhPAR.js +1 -0
- package/dist/client/assets/index-CTB6oe-9.js +2 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/omit-CUnDT6sS.js +1 -0
- package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
- 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 +362 -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 +1 -57
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +1 -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/session-context.types.d.ts +0 -2
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
- 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.js +2 -2
- 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 +32 -49
- 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/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 -2
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/server.d.ts +57 -0
- package/dist/server/src/cli/commands/server.d.ts.map +1 -0
- package/dist/server/src/cli/commands/server.js +169 -0
- 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 -104
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -99
- 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/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/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 +53 -23
- package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +66 -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 +20 -80
- 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/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 +24 -1
- 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 -39
- 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/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 +4 -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-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +82 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -6
- 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/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/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 +31 -11
- 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/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/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 -320
- 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 +18 -18
- 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/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/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 +3 -1
- package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
- package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
- package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
- package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
- package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
- package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
- package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
- package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
- package/dist/client/assets/el-input-CDnuSKVZ.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-CzMkXyYy.js +0 -1
- package/dist/client/assets/el-select-DvjGddk_.js +0 -1
- package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
- package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/el-tag-npbwux4f.js +0 -1
- package/dist/client/assets/index-CCnAxNF8.js +0 -2
- package/dist/client/assets/index-d1DZeSfz.js +0 -1
- package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
- package/dist/client/assets/vnode-CHomNjgN.js +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
2
|
import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
|
+
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
4
5
|
// Mock MCP SDK
|
|
5
|
-
const mockListTools = vi.fn();
|
|
6
|
+
const mockListTools = vi.fn().mockResolvedValue({ tools: [] });
|
|
6
7
|
vi.mock('@modelcontextprotocol/sdk/client/index.js', () => {
|
|
7
8
|
return {
|
|
8
9
|
Client: class {
|
|
@@ -29,22 +30,23 @@ vi.mock('@utils/transports/transport-factory.js', () => {
|
|
|
29
30
|
describe('MCP Protocol Contract - tools/list (with SDK)', () => {
|
|
30
31
|
const serverName = 'test-sdk-server';
|
|
31
32
|
let serverId;
|
|
33
|
+
let serverIndex;
|
|
32
34
|
beforeEach(async () => {
|
|
33
|
-
// Add to hub manager
|
|
35
|
+
// Add to hub manager (v1.1 format)
|
|
34
36
|
await hubManager.addServer(serverName, {
|
|
35
37
|
command: 'node',
|
|
36
38
|
args: [],
|
|
37
|
-
enabled: true,
|
|
38
39
|
type: 'stdio',
|
|
39
40
|
timeout: 60000,
|
|
40
|
-
|
|
41
|
+
aggregatedTools: []
|
|
41
42
|
});
|
|
42
43
|
// Add server instance
|
|
43
44
|
const instance = await hubManager.addServerInstance(serverName, {});
|
|
44
45
|
serverId = instance.id;
|
|
46
|
+
serverIndex = instance.index ?? 0;
|
|
45
47
|
});
|
|
46
48
|
afterEach(async () => {
|
|
47
|
-
await mcpConnectionManager.disconnect(
|
|
49
|
+
await mcpConnectionManager.disconnect(serverName, serverIndex);
|
|
48
50
|
hubManager.removeServer(serverName);
|
|
49
51
|
});
|
|
50
52
|
it('should return tools with correct MCP schema', async () => {
|
|
@@ -82,18 +84,17 @@ describe('MCP Protocol Contract - tools/list (with SDK)', () => {
|
|
|
82
84
|
if (!serverInfo) {
|
|
83
85
|
throw new Error('Server not found');
|
|
84
86
|
}
|
|
85
|
-
|
|
87
|
+
// Resolve the complete configuration using v1.1 resolveInstanceConfig
|
|
88
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, serverId);
|
|
89
|
+
if (!resolvedConfig) {
|
|
90
|
+
throw new Error('Failed to resolve server configuration');
|
|
91
|
+
}
|
|
92
|
+
await mcpConnectionManager.connect(serverName, serverIndex, {
|
|
93
|
+
...resolvedConfig,
|
|
86
94
|
id: serverId,
|
|
87
|
-
|
|
88
|
-
args: serverInfo.config.args,
|
|
89
|
-
enabled: serverInfo.config.enabled,
|
|
90
|
-
type: serverInfo.config.type,
|
|
91
|
-
timeout: serverInfo.config.timeout,
|
|
92
|
-
allowedTools: serverInfo.config.allowedTools,
|
|
93
|
-
timestamp: serverInfo.instance.timestamp,
|
|
94
|
-
hash: serverInfo.instance.hash
|
|
95
|
+
timestamp: Date.now()
|
|
95
96
|
});
|
|
96
|
-
const tools = mcpConnectionManager.getTools(
|
|
97
|
+
const tools = mcpConnectionManager.getTools(serverName, serverIndex);
|
|
97
98
|
expect(tools).toHaveLength(2);
|
|
98
99
|
// Verify calculator tool
|
|
99
100
|
const calculator = tools.find((t) => t.name === 'calculator');
|
|
@@ -114,19 +115,18 @@ describe('MCP Protocol Contract - tools/list (with SDK)', () => {
|
|
|
114
115
|
if (!serverInfo) {
|
|
115
116
|
throw new Error('Server not found');
|
|
116
117
|
}
|
|
117
|
-
|
|
118
|
+
// Resolve the complete configuration using v1.1 resolveInstanceConfig
|
|
119
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, serverId);
|
|
120
|
+
if (!resolvedConfig) {
|
|
121
|
+
throw new Error('Failed to resolve server configuration');
|
|
122
|
+
}
|
|
123
|
+
await mcpConnectionManager.connect(serverName, serverIndex, {
|
|
124
|
+
...resolvedConfig,
|
|
118
125
|
id: serverId,
|
|
119
|
-
|
|
120
|
-
args: serverInfo.config.args,
|
|
121
|
-
enabled: serverInfo.config.enabled,
|
|
122
|
-
type: serverInfo.config.type,
|
|
123
|
-
timeout: serverInfo.config.timeout,
|
|
124
|
-
allowedTools: serverInfo.config.allowedTools,
|
|
125
|
-
timestamp: serverInfo.instance.timestamp,
|
|
126
|
-
hash: serverInfo.instance.hash
|
|
126
|
+
timestamp: Date.now()
|
|
127
127
|
});
|
|
128
|
-
const tools1 = mcpConnectionManager.getTools(
|
|
129
|
-
const tools2 = mcpConnectionManager.getTools(
|
|
128
|
+
const tools1 = mcpConnectionManager.getTools(serverName, serverIndex);
|
|
129
|
+
const tools2 = mcpConnectionManager.getTools(serverName, serverIndex);
|
|
130
130
|
expect(tools1).toEqual(tools2);
|
|
131
131
|
expect(tools1[0]).toBe(tools2[0]); // Reference equality
|
|
132
132
|
});
|
|
@@ -138,18 +138,17 @@ describe('MCP Protocol Contract - tools/list (with SDK)', () => {
|
|
|
138
138
|
if (!serverInfo) {
|
|
139
139
|
throw new Error('Server not found');
|
|
140
140
|
}
|
|
141
|
-
|
|
141
|
+
// Resolve the complete configuration using v1.1 resolveInstanceConfig
|
|
142
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, serverId);
|
|
143
|
+
if (!resolvedConfig) {
|
|
144
|
+
throw new Error('Failed to resolve server configuration');
|
|
145
|
+
}
|
|
146
|
+
await mcpConnectionManager.connect(serverName, serverIndex, {
|
|
147
|
+
...resolvedConfig,
|
|
142
148
|
id: serverId,
|
|
143
|
-
|
|
144
|
-
args: serverInfo.config.args,
|
|
145
|
-
enabled: serverInfo.config.enabled,
|
|
146
|
-
type: serverInfo.config.type,
|
|
147
|
-
timeout: serverInfo.config.timeout,
|
|
148
|
-
allowedTools: serverInfo.config.allowedTools,
|
|
149
|
-
timestamp: serverInfo.instance.timestamp,
|
|
150
|
-
hash: serverInfo.instance.hash
|
|
149
|
+
timestamp: Date.now()
|
|
151
150
|
});
|
|
152
|
-
const tools = mcpConnectionManager.getTools(
|
|
151
|
+
const tools = mcpConnectionManager.getTools(serverName, serverIndex);
|
|
153
152
|
expect(tools).toHaveLength(0);
|
|
154
153
|
});
|
|
155
154
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
2
|
import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
|
+
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
4
5
|
// Mock MCP SDK Client
|
|
5
6
|
const mockConnect = vi.fn();
|
|
6
7
|
const mockClose = vi.fn();
|
|
@@ -33,28 +34,41 @@ describe('Gateway Fault Tolerance', () => {
|
|
|
33
34
|
beforeEach(async () => {
|
|
34
35
|
// Clear all mocks
|
|
35
36
|
vi.clearAllMocks();
|
|
36
|
-
// Add test server
|
|
37
|
+
// Add test server (v1.1 format)
|
|
37
38
|
await hubManager.addServer('test-server', {
|
|
38
39
|
command: 'node',
|
|
39
40
|
args: [],
|
|
40
|
-
enabled: true,
|
|
41
41
|
type: 'stdio',
|
|
42
42
|
timeout: 60000,
|
|
43
|
-
|
|
43
|
+
aggregatedTools: []
|
|
44
44
|
});
|
|
45
45
|
// Add server instance
|
|
46
|
-
|
|
46
|
+
const instance = (await hubManager.addServerInstance('test-server', {}));
|
|
47
|
+
mockServerInstance = {
|
|
48
|
+
id: instance.id,
|
|
49
|
+
index: instance.index,
|
|
50
|
+
timestamp: instance.timestamp || Date.now()
|
|
51
|
+
};
|
|
47
52
|
});
|
|
48
53
|
it('should handle connection failure gracefully', async () => {
|
|
49
54
|
mockConnect.mockRejectedValueOnce(new Error('Connection failed'));
|
|
50
55
|
// Directly use hubManager.getServerById to get complete server configuration
|
|
51
56
|
const serverInfo = hubManager.getServerById(mockServerInstance.id);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
if (!serverInfo) {
|
|
58
|
+
throw new Error('Server not found');
|
|
59
|
+
}
|
|
60
|
+
// Resolve the complete configuration using v1.1 resolveInstanceConfig
|
|
61
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, mockServerInstance.id);
|
|
62
|
+
if (!resolvedConfig) {
|
|
63
|
+
throw new Error('Failed to resolve server configuration');
|
|
64
|
+
}
|
|
65
|
+
const success = await mcpConnectionManager.connect(serverInfo.name, mockServerInstance.index, {
|
|
66
|
+
...resolvedConfig,
|
|
67
|
+
id: mockServerInstance.id,
|
|
68
|
+
timestamp: Date.now()
|
|
55
69
|
});
|
|
56
70
|
expect(success).toBe(false);
|
|
57
|
-
const status = mcpConnectionManager.getStatus(mockServerInstance.
|
|
71
|
+
const status = mcpConnectionManager.getStatus(serverInfo.name, mockServerInstance.index);
|
|
58
72
|
expect(status?.connected).toBe(false);
|
|
59
73
|
expect(status?.error).toContain('Connection failed');
|
|
60
74
|
});
|
|
@@ -63,46 +77,72 @@ describe('Gateway Fault Tolerance', () => {
|
|
|
63
77
|
mockListTools.mockRejectedValueOnce(new Error('List tools failed'));
|
|
64
78
|
// Directly use hubManager.getServerById to get complete server configuration
|
|
65
79
|
const serverInfo = hubManager.getServerById(mockServerInstance.id);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
80
|
+
if (!serverInfo) {
|
|
81
|
+
throw new Error('Server not found');
|
|
82
|
+
}
|
|
83
|
+
// Resolve the complete configuration using v1.1 resolveInstanceConfig
|
|
84
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, mockServerInstance.id);
|
|
85
|
+
if (!resolvedConfig) {
|
|
86
|
+
throw new Error('Failed to resolve server configuration');
|
|
87
|
+
}
|
|
88
|
+
const success = await mcpConnectionManager.connect(serverInfo.name, mockServerInstance.index, {
|
|
89
|
+
...resolvedConfig,
|
|
90
|
+
id: mockServerInstance.id,
|
|
91
|
+
timestamp: Date.now()
|
|
69
92
|
});
|
|
70
93
|
expect(success).toBe(false);
|
|
71
|
-
const status = mcpConnectionManager.getStatus(mockServerInstance.
|
|
94
|
+
const status = mcpConnectionManager.getStatus(serverInfo.name, mockServerInstance.index);
|
|
72
95
|
expect(status?.connected).toBe(false);
|
|
73
96
|
expect(status?.error).toContain('List tools failed');
|
|
74
97
|
});
|
|
75
98
|
it('should not affect other servers when one fails', async () => {
|
|
76
|
-
// Add second server
|
|
99
|
+
// Add second server (v1.1 format)
|
|
77
100
|
await hubManager.addServer('working-server', {
|
|
78
101
|
command: 'node',
|
|
79
102
|
args: [],
|
|
80
|
-
enabled: true,
|
|
81
103
|
type: 'stdio',
|
|
82
104
|
timeout: 60000,
|
|
83
|
-
|
|
105
|
+
aggregatedTools: []
|
|
84
106
|
});
|
|
85
|
-
const workingInstance = await hubManager.addServerInstance('working-server', {});
|
|
107
|
+
const workingInstance = (await hubManager.addServerInstance('working-server', {}));
|
|
86
108
|
// Simulate first server failure, second server success
|
|
87
109
|
mockConnect
|
|
88
110
|
.mockImplementationOnce(() => Promise.reject(new Error('First server failed')))
|
|
89
111
|
.mockImplementationOnce(() => Promise.resolve());
|
|
90
|
-
mockListTools
|
|
112
|
+
mockListTools
|
|
113
|
+
.mockImplementationOnce(() => Promise.resolve({ tools: [] })) // First server
|
|
114
|
+
.mockImplementationOnce(() => Promise.resolve({ tools: [] })); // Second server
|
|
91
115
|
// Connect first server (should fail)
|
|
92
116
|
const serverInfo1 = hubManager.getServerById(mockServerInstance.id);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
117
|
+
if (!serverInfo1) {
|
|
118
|
+
throw new Error('Server 1 not found');
|
|
119
|
+
}
|
|
120
|
+
const resolvedConfig1 = resolveInstanceConfig(serverInfo1.config, mockServerInstance.id);
|
|
121
|
+
if (!resolvedConfig1) {
|
|
122
|
+
throw new Error('Failed to resolve server 1 configuration');
|
|
123
|
+
}
|
|
124
|
+
await mcpConnectionManager.connect(serverInfo1.name, mockServerInstance.index, {
|
|
125
|
+
...resolvedConfig1,
|
|
126
|
+
id: mockServerInstance.id,
|
|
127
|
+
timestamp: Date.now()
|
|
96
128
|
});
|
|
97
129
|
// Connect second server (should succeed)
|
|
98
130
|
const serverInfo2 = hubManager.getServerById(workingInstance.id);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
131
|
+
if (!serverInfo2) {
|
|
132
|
+
throw new Error('Server 2 not found');
|
|
133
|
+
}
|
|
134
|
+
const resolvedConfig2 = resolveInstanceConfig(serverInfo2.config, workingInstance.id);
|
|
135
|
+
if (!resolvedConfig2) {
|
|
136
|
+
throw new Error('Failed to resolve server 2 configuration');
|
|
137
|
+
}
|
|
138
|
+
const success2 = await mcpConnectionManager.connect(serverInfo2.name, workingInstance.index, {
|
|
139
|
+
...resolvedConfig2,
|
|
140
|
+
id: workingInstance.id,
|
|
141
|
+
timestamp: Date.now()
|
|
102
142
|
});
|
|
103
143
|
expect(success2).toBe(true);
|
|
104
|
-
const status1 = mcpConnectionManager.getStatus(mockServerInstance.
|
|
105
|
-
const status2 = mcpConnectionManager.getStatus(workingInstance.
|
|
144
|
+
const status1 = mcpConnectionManager.getStatus(serverInfo1.name, mockServerInstance.index);
|
|
145
|
+
const status2 = mcpConnectionManager.getStatus(serverInfo2.name, workingInstance.index);
|
|
106
146
|
expect(status1?.connected).toBe(false);
|
|
107
147
|
expect(status2?.connected).toBe(true);
|
|
108
148
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
2
|
import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
|
|
3
3
|
import { hubManager } from '../../../src/services/hub-manager.service.js';
|
|
4
|
-
import {
|
|
4
|
+
import { resolveInstanceConfig } from '../../../src/config/config-migrator.js';
|
|
5
5
|
// Mock MCP SDK Client
|
|
6
6
|
const mockConnect = vi.fn();
|
|
7
7
|
const mockClose = vi.fn();
|
|
@@ -32,118 +32,110 @@ vi.mock('@utils/transports/transport-factory.js', () => {
|
|
|
32
32
|
describe('MCP Connection Integration', () => {
|
|
33
33
|
const serverName = 'test-mcp-server';
|
|
34
34
|
let serverId;
|
|
35
|
+
let serverIndex;
|
|
35
36
|
beforeEach(async () => {
|
|
36
37
|
// Clear all mocks
|
|
37
38
|
vi.clearAllMocks();
|
|
38
|
-
// Add test server
|
|
39
|
+
// Add test server (v1.1 format)
|
|
39
40
|
await hubManager.addServer(serverName, {
|
|
40
41
|
command: 'node',
|
|
41
42
|
args: [],
|
|
42
|
-
enabled: true,
|
|
43
43
|
type: 'stdio',
|
|
44
44
|
timeout: 60000,
|
|
45
|
-
|
|
45
|
+
aggregatedTools: []
|
|
46
46
|
});
|
|
47
47
|
// Add server instance
|
|
48
|
-
const instance = await hubManager.addServerInstance(serverName, {});
|
|
48
|
+
const instance = (await hubManager.addServerInstance(serverName, {}));
|
|
49
49
|
serverId = instance.id;
|
|
50
|
+
serverIndex = instance.index;
|
|
50
51
|
});
|
|
51
52
|
afterEach(async () => {
|
|
52
|
-
await mcpConnectionManager.disconnect(
|
|
53
|
+
await mcpConnectionManager.disconnect(serverName, serverIndex);
|
|
53
54
|
hubManager.removeServer(serverName);
|
|
54
55
|
});
|
|
55
56
|
it('should establish MCP connection successfully', async () => {
|
|
56
57
|
mockConnect.mockResolvedValueOnce(undefined);
|
|
57
58
|
mockListTools.mockResolvedValueOnce({ tools: [] });
|
|
58
59
|
const serverInfo = hubManager.getServerById(serverId);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
if (!serverInfo) {
|
|
61
|
+
throw new Error('Server not found');
|
|
62
|
+
}
|
|
63
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, serverId);
|
|
64
|
+
if (!resolvedConfig) {
|
|
65
|
+
throw new Error('Failed to resolve server configuration');
|
|
66
|
+
}
|
|
67
|
+
const success = await mcpConnectionManager.connect(serverInfo.name, serverIndex, {
|
|
68
|
+
...resolvedConfig,
|
|
69
|
+
id: serverId,
|
|
70
|
+
timestamp: Date.now()
|
|
62
71
|
});
|
|
63
72
|
expect(success).toBe(true);
|
|
64
|
-
const status = mcpConnectionManager.getStatus(
|
|
73
|
+
const status = mcpConnectionManager.getStatus(serverInfo.name, serverIndex);
|
|
65
74
|
expect(status?.connected).toBe(true);
|
|
66
75
|
});
|
|
67
76
|
it('should handle connection errors properly', async () => {
|
|
68
77
|
mockConnect.mockRejectedValueOnce(new Error('Connection refused'));
|
|
69
78
|
const serverInfo = hubManager.getServerById(serverId);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
79
|
+
if (!serverInfo) {
|
|
80
|
+
throw new Error('Server not found');
|
|
81
|
+
}
|
|
82
|
+
const resolvedConfig = resolveInstanceConfig(serverInfo.config, serverId);
|
|
83
|
+
if (!resolvedConfig) {
|
|
84
|
+
throw new Error('Failed to resolve server configuration');
|
|
85
|
+
}
|
|
86
|
+
const success = await mcpConnectionManager.connect(serverInfo.name, serverIndex, {
|
|
87
|
+
...resolvedConfig,
|
|
88
|
+
id: serverId,
|
|
89
|
+
timestamp: Date.now()
|
|
73
90
|
});
|
|
74
91
|
expect(success).toBe(false);
|
|
75
|
-
const status = mcpConnectionManager.getStatus(
|
|
92
|
+
const status = mcpConnectionManager.getStatus(serverInfo.name, serverIndex);
|
|
76
93
|
expect(status?.connected).toBe(false);
|
|
77
94
|
expect(status?.error).toContain('Connection refused');
|
|
78
95
|
});
|
|
79
96
|
it('should support concurrent connections', async () => {
|
|
80
|
-
// Add second server
|
|
97
|
+
// Add second server (v1.1 format)
|
|
81
98
|
const server2Name = 'test-mcp-server-2';
|
|
82
99
|
await hubManager.addServer(server2Name, {
|
|
83
100
|
command: 'node',
|
|
84
101
|
args: [],
|
|
85
|
-
enabled: true,
|
|
86
102
|
type: 'stdio',
|
|
87
103
|
timeout: 60000,
|
|
88
|
-
|
|
104
|
+
aggregatedTools: []
|
|
89
105
|
});
|
|
90
|
-
const instance2 = await hubManager.addServerInstance(server2Name, {});
|
|
106
|
+
const instance2 = (await hubManager.addServerInstance(server2Name, {}));
|
|
91
107
|
mockConnect.mockResolvedValue(undefined);
|
|
92
108
|
mockListTools.mockResolvedValue({ tools: [] });
|
|
93
109
|
const serverInfo1 = hubManager.getServerById(serverId);
|
|
94
110
|
const serverInfo2 = hubManager.getServerById(instance2.id);
|
|
111
|
+
if (!serverInfo1 || !serverInfo2) {
|
|
112
|
+
throw new Error('Server not found');
|
|
113
|
+
}
|
|
114
|
+
const resolvedConfig1 = resolveInstanceConfig(serverInfo1.config, serverId);
|
|
115
|
+
const resolvedConfig2 = resolveInstanceConfig(serverInfo2.config, instance2.id);
|
|
116
|
+
if (!resolvedConfig1 || !resolvedConfig2) {
|
|
117
|
+
throw new Error('Failed to resolve server configuration');
|
|
118
|
+
}
|
|
95
119
|
const [success1, success2] = await Promise.all([
|
|
96
|
-
mcpConnectionManager.connect({
|
|
97
|
-
...
|
|
98
|
-
|
|
120
|
+
mcpConnectionManager.connect(serverInfo1.name, serverIndex, {
|
|
121
|
+
...resolvedConfig1,
|
|
122
|
+
id: serverId,
|
|
123
|
+
timestamp: Date.now()
|
|
99
124
|
}),
|
|
100
|
-
mcpConnectionManager.connect({
|
|
101
|
-
...
|
|
102
|
-
|
|
125
|
+
mcpConnectionManager.connect(serverInfo2.name, instance2.index, {
|
|
126
|
+
...resolvedConfig2,
|
|
127
|
+
id: instance2.id,
|
|
128
|
+
timestamp: Date.now()
|
|
103
129
|
})
|
|
104
130
|
]);
|
|
105
131
|
expect(success1).toBe(true);
|
|
106
132
|
expect(success2).toBe(true);
|
|
107
|
-
const status1 = mcpConnectionManager.getStatus(
|
|
108
|
-
const status2 = mcpConnectionManager.getStatus(instance2.
|
|
133
|
+
const status1 = mcpConnectionManager.getStatus(serverInfo1.name, serverIndex);
|
|
134
|
+
const status2 = mcpConnectionManager.getStatus(serverInfo2.name, instance2.index);
|
|
109
135
|
expect(status1?.connected).toBe(true);
|
|
110
136
|
expect(status2?.connected).toBe(true);
|
|
111
137
|
// Clean up
|
|
112
|
-
await mcpConnectionManager.disconnect(instance2.
|
|
138
|
+
await mcpConnectionManager.disconnect(serverInfo2.name, instance2.index);
|
|
113
139
|
await hubManager.removeServer(server2Name);
|
|
114
140
|
});
|
|
115
|
-
it('should integrate with search service', async () => {
|
|
116
|
-
// Set up mock tool data
|
|
117
|
-
mockConnect.mockResolvedValue(undefined);
|
|
118
|
-
mockListTools.mockResolvedValue({
|
|
119
|
-
tools: [
|
|
120
|
-
{
|
|
121
|
-
name: 'test-tool',
|
|
122
|
-
description: 'A test tool for searching',
|
|
123
|
-
inputSchema: { type: 'object', properties: { query: { type: 'string' } } }
|
|
124
|
-
}
|
|
125
|
-
]
|
|
126
|
-
});
|
|
127
|
-
const searchServerName = 'search-test-server';
|
|
128
|
-
await hubManager.addServer(searchServerName, {
|
|
129
|
-
command: 'node',
|
|
130
|
-
args: [],
|
|
131
|
-
enabled: true,
|
|
132
|
-
type: 'stdio',
|
|
133
|
-
timeout: 60000,
|
|
134
|
-
allowedTools: []
|
|
135
|
-
});
|
|
136
|
-
const searchServerInstance = await hubManager.addServerInstance(searchServerName, {});
|
|
137
|
-
const serverInfo = hubManager.getServerById(searchServerInstance.id);
|
|
138
|
-
await mcpConnectionManager.connect({
|
|
139
|
-
...serverInfo.config,
|
|
140
|
-
...serverInfo.instance
|
|
141
|
-
});
|
|
142
|
-
const results = simpleSearchService.search('test');
|
|
143
|
-
expect(results.length).toBeGreaterThan(0);
|
|
144
|
-
expect(results[0].tool.name).toBe('test-tool');
|
|
145
|
-
// Clean up
|
|
146
|
-
await mcpConnectionManager.disconnect(searchServerInstance.id);
|
|
147
|
-
await hubManager.removeServer(searchServerName);
|
|
148
|
-
});
|
|
149
141
|
});
|
|
@@ -12,7 +12,7 @@ vi.mock('@services/hub-manager.service.js', () => ({
|
|
|
12
12
|
updateServer: vi.fn(),
|
|
13
13
|
removeServer: vi.fn(),
|
|
14
14
|
addServerInstance: vi.fn().mockResolvedValue({}),
|
|
15
|
-
|
|
15
|
+
getServerInstancesByName: vi.fn()
|
|
16
16
|
}
|
|
17
17
|
}));
|
|
18
18
|
describe('Server API Routes', () => {
|
|
@@ -31,12 +31,18 @@ describe('Server API Routes', () => {
|
|
|
31
31
|
{
|
|
32
32
|
name: 'test',
|
|
33
33
|
config: {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
template: {
|
|
35
|
+
type: 'stdio',
|
|
36
|
+
command: 'test',
|
|
37
|
+
args: [],
|
|
38
|
+
env: {},
|
|
39
|
+
headers: {},
|
|
40
|
+
aggregatedTools: [],
|
|
41
|
+
timeout: 30000,
|
|
42
|
+
tags: {}
|
|
43
|
+
},
|
|
44
|
+
instances: [],
|
|
45
|
+
tagDefinitions: []
|
|
40
46
|
}
|
|
41
47
|
}
|
|
42
48
|
];
|
|
@@ -55,18 +61,23 @@ describe('Server API Routes', () => {
|
|
|
55
61
|
command: 'node',
|
|
56
62
|
args: [],
|
|
57
63
|
env: {},
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
headers: {},
|
|
65
|
+
aggregatedTools: []
|
|
60
66
|
}
|
|
61
67
|
};
|
|
62
68
|
const createdServer = {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
template: {
|
|
70
|
+
type: 'stdio',
|
|
71
|
+
command: 'node',
|
|
72
|
+
args: [],
|
|
73
|
+
env: {},
|
|
74
|
+
headers: {},
|
|
75
|
+
aggregatedTools: [],
|
|
76
|
+
timeout: 30000,
|
|
77
|
+
tags: {}
|
|
78
|
+
},
|
|
79
|
+
instances: [],
|
|
80
|
+
tagDefinitions: []
|
|
70
81
|
};
|
|
71
82
|
vi.mocked(hubManager.addServer).mockReturnValue(Promise.resolve(createdServer));
|
|
72
83
|
const response = await app.inject({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temp-run-docling.d.ts","sourceRoot":"","sources":["../../../../tests/temp/temp-run-docling.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { createWriteStream, existsSync, mkdirSync } from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
const LOG_FILE = join(__dirname, '../../docs/temp/uvx-docling.log');
|
|
8
|
+
console.log('Starting docling-mcp-server...');
|
|
9
|
+
console.log(`Logging to: ${LOG_FILE}`);
|
|
10
|
+
// Ensure log directory exists
|
|
11
|
+
const logDir = dirname(LOG_FILE);
|
|
12
|
+
if (!existsSync(logDir)) {
|
|
13
|
+
mkdirSync(logDir, { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
const logStream = createWriteStream(LOG_FILE, { flags: 'a' });
|
|
16
|
+
const child = spawn('uvx', ['--from=docling-mcp', 'docling-mcp-server'], {
|
|
17
|
+
shell: true,
|
|
18
|
+
stdio: ['inherit', 'pipe', 'pipe']
|
|
19
|
+
});
|
|
20
|
+
// Log stdout
|
|
21
|
+
child.stdout?.on('data', (data) => {
|
|
22
|
+
const output = data.toString();
|
|
23
|
+
process.stdout.write(output);
|
|
24
|
+
logStream.write(output);
|
|
25
|
+
});
|
|
26
|
+
// Log stderr
|
|
27
|
+
child.stderr?.on('data', (data) => {
|
|
28
|
+
const output = data.toString();
|
|
29
|
+
process.stderr.write(output);
|
|
30
|
+
logStream.write(output);
|
|
31
|
+
});
|
|
32
|
+
child.on('error', (error) => {
|
|
33
|
+
console.error(`Failed to start process: ${error.message}`);
|
|
34
|
+
logStream.write(`ERROR: ${error.message}\n`);
|
|
35
|
+
logStream.end();
|
|
36
|
+
process.exit(1);
|
|
37
|
+
});
|
|
38
|
+
child.on('exit', (code, signal) => {
|
|
39
|
+
const message = `Process exited with code ${code}, signal ${signal}`;
|
|
40
|
+
console.log(message);
|
|
41
|
+
logStream.write(`${message}\n`);
|
|
42
|
+
logStream.end();
|
|
43
|
+
process.exit(code ?? 0);
|
|
44
|
+
});
|
|
45
|
+
// Handle graceful shutdown
|
|
46
|
+
process.on('SIGINT', () => {
|
|
47
|
+
console.log('\nShutting down...');
|
|
48
|
+
child.kill('SIGINT');
|
|
49
|
+
});
|
|
50
|
+
process.on('SIGTERM', () => {
|
|
51
|
+
console.log('\nShutting down...');
|
|
52
|
+
child.kill('SIGTERM');
|
|
53
|
+
});
|
|
@@ -5,12 +5,11 @@ export interface MockServerConfig {
|
|
|
5
5
|
id: string;
|
|
6
6
|
name: string;
|
|
7
7
|
config: {
|
|
8
|
-
|
|
8
|
+
aggregatedTools?: string[];
|
|
9
9
|
};
|
|
10
10
|
instance: {
|
|
11
11
|
id: string;
|
|
12
12
|
timestamp: number;
|
|
13
|
-
hash: string;
|
|
14
13
|
};
|
|
15
14
|
}
|
|
16
15
|
export interface MockTool {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../../tests/types/test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../../tests/types/test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAGD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader-automatic-migration.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/config/config-loader-automatic-migration.test.ts"],"names":[],"mappings":""}
|