@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
|
@@ -2,10 +2,12 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
|
2
2
|
// Define mocks first
|
|
3
3
|
const mocks = vi.hoisted(() => {
|
|
4
4
|
const mockToolCache = new Map();
|
|
5
|
+
const mockListRoots = vi.fn();
|
|
5
6
|
return {
|
|
6
7
|
setRequestHandler: vi.fn(),
|
|
7
8
|
setNotificationHandler: vi.fn(),
|
|
8
9
|
request: vi.fn(),
|
|
10
|
+
listRoots: mockListRoots,
|
|
9
11
|
connect: vi.fn(),
|
|
10
12
|
getAllTools: vi.fn(),
|
|
11
13
|
callTool: vi.fn(),
|
|
@@ -19,21 +21,28 @@ const mocks = vi.hoisted(() => {
|
|
|
19
21
|
listServers: vi.fn(),
|
|
20
22
|
findServers: vi.fn(),
|
|
21
23
|
getSystemTools: vi.fn().mockReturnValue([]),
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
updateSessionRoots: vi.fn(),
|
|
25
|
+
updateSession: vi.fn(),
|
|
26
|
+
getSession: vi.fn().mockReturnValue({
|
|
27
|
+
sessionId: 'test-session',
|
|
28
|
+
capabilities: { roots: { list: true } }
|
|
29
|
+
}),
|
|
30
|
+
getSessionContext: vi.fn().mockReturnValue({ sessionId: 'test-session' }),
|
|
24
31
|
mockToolCache
|
|
25
32
|
};
|
|
26
33
|
});
|
|
27
34
|
// Mock dependencies
|
|
28
|
-
vi.mock('@services/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
vi.mock('@services/session-tracker.service.js', () => ({
|
|
36
|
+
sessionTrackerService: {
|
|
37
|
+
updateSessionRoots: mocks.updateSessionRoots,
|
|
38
|
+
updateSession: mocks.updateSession,
|
|
39
|
+
getSession: mocks.getSession,
|
|
40
|
+
getSessions: vi.fn().mockReturnValue([])
|
|
32
41
|
}
|
|
33
42
|
}));
|
|
34
43
|
vi.mock('@utils/request-context.js', () => ({
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
getSessionContext: mocks.getSessionContext,
|
|
45
|
+
getSessionCwd: vi.fn()
|
|
37
46
|
}));
|
|
38
47
|
vi.mock('@utils/logger.js', () => ({
|
|
39
48
|
logger: {
|
|
@@ -53,7 +62,9 @@ vi.mock('@services/mcp-connection-manager.js', () => ({
|
|
|
53
62
|
callTool: mocks.callTool,
|
|
54
63
|
toolCache: mocks.mockToolCache,
|
|
55
64
|
// Add method to access the mock toolCache
|
|
56
|
-
getToolCache: () => mocks.mockToolCache
|
|
65
|
+
getToolCache: () => mocks.mockToolCache,
|
|
66
|
+
// Add getToolCacheEntries method for backward compatibility
|
|
67
|
+
getToolCacheEntries: () => Array.from(mocks.mockToolCache.entries())
|
|
57
68
|
}
|
|
58
69
|
}));
|
|
59
70
|
vi.mock('@services/hub-manager.service.js', () => ({
|
|
@@ -81,7 +92,8 @@ vi.mock('@modelcontextprotocol/sdk/server/mcp.js', () => {
|
|
|
81
92
|
server = {
|
|
82
93
|
setRequestHandler: mocks.setRequestHandler,
|
|
83
94
|
setNotificationHandler: mocks.setNotificationHandler,
|
|
84
|
-
request: mocks.request
|
|
95
|
+
request: mocks.request,
|
|
96
|
+
listRoots: mocks.listRoots
|
|
85
97
|
};
|
|
86
98
|
connect = mocks.connect;
|
|
87
99
|
}
|
|
@@ -115,7 +127,7 @@ describe('GatewayService', () => {
|
|
|
115
127
|
vi.mocked(mocks.getServerById).mockReturnValue({
|
|
116
128
|
name: 'Test Server',
|
|
117
129
|
id: 'server1',
|
|
118
|
-
config: {
|
|
130
|
+
config: { template: { aggregatedTools: ['testTool'] } },
|
|
119
131
|
instance: { id: 'server1', timestamp: Date.now(), hash: 'abc123' }
|
|
120
132
|
});
|
|
121
133
|
// Populate toolCache for the test
|
|
@@ -158,7 +170,7 @@ describe('GatewayService', () => {
|
|
|
158
170
|
vi.mocked(mocks.getServerById).mockReturnValue({
|
|
159
171
|
name: 'Test Server',
|
|
160
172
|
id: 'server1',
|
|
161
|
-
config: {
|
|
173
|
+
config: { template: { aggregatedTools: ['testTool'] } },
|
|
162
174
|
instance: { id: 'server1', timestamp: Date.now(), hash: 'abc123' }
|
|
163
175
|
});
|
|
164
176
|
// Find list tools handler to populate tool map
|
|
@@ -265,33 +277,6 @@ describe('GatewayService', () => {
|
|
|
265
277
|
expect(result.tools).toHaveLength(9);
|
|
266
278
|
expect(result.tools.some((t) => t.name === 'list_servers')).toBe(true);
|
|
267
279
|
});
|
|
268
|
-
// it('should fetch roots on initialized notification', async () => {
|
|
269
|
-
// // Find initialized notification handler
|
|
270
|
-
// let initializedHandler: Function | undefined;
|
|
271
|
-
// for (const call of mocks.setNotificationHandler.mock.calls) {
|
|
272
|
-
// const schemaStr = JSON.stringify(call[0]);
|
|
273
|
-
// if (schemaStr.includes('"notifications/initialized"')) {
|
|
274
|
-
// initializedHandler = call[1];
|
|
275
|
-
// break;
|
|
276
|
-
// }
|
|
277
|
-
// }
|
|
278
|
-
// expect(initializedHandler).toBeDefined();
|
|
279
|
-
//
|
|
280
|
-
// // Mock server.request returning roots
|
|
281
|
-
// vi.mocked(mocks.request).mockResolvedValue({ roots: [{ uri: 'file:///test/path' }] });
|
|
282
|
-
//
|
|
283
|
-
// // Call the handler
|
|
284
|
-
// await initializedHandler!();
|
|
285
|
-
//
|
|
286
|
-
// // Verify request was made
|
|
287
|
-
// expect(mocks.request).toHaveBeenCalledWith(
|
|
288
|
-
// expect.objectContaining({ method: 'roots/list' }),
|
|
289
|
-
// expect.anything()
|
|
290
|
-
// );
|
|
291
|
-
//
|
|
292
|
-
// // Verify client tracker was updated
|
|
293
|
-
// expect(mocks.updateClientRoots).toHaveBeenCalledWith('test-session', [{ uri: 'file:///test/path' }]);
|
|
294
|
-
// });
|
|
295
280
|
it('should call system tools', async () => {
|
|
296
281
|
// Find call tool handler
|
|
297
282
|
let callToolHandler;
|
|
@@ -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
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-stack.d.ts","sourceRoot":"","sources":["../../../../tests/temp/test-stack.ts"],"names":[],"mappings":";AAMA,QAAA,MAAM,GAAG,OAAc,CAAC;AAKxB,QAAA,MAAM,yBAAyB,qDAA0B,CAAC;AAE1D,QAAA,MAAM,IAAI,OAAc,CAAC;AACzB,QAAA,MAAM,KAAK,EAA4B,MAAM,CAAC,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
console.log('=== Testing Stack Trace ===');
|
|
4
|
+
// Test 1: Default Error stack
|
|
5
|
+
console.log('\nTest 1: Default Error stack');
|
|
6
|
+
const err = new Error();
|
|
7
|
+
console.log('Stack:', err.stack);
|
|
8
|
+
// Test 2: prepareStackTrace
|
|
9
|
+
console.log('\nTest 2: Using prepareStackTrace');
|
|
10
|
+
const originalPrepareStackTrace = Error.prepareStackTrace;
|
|
11
|
+
Error.prepareStackTrace = (_err, stack) => stack;
|
|
12
|
+
const err2 = new Error();
|
|
13
|
+
const stack = err2.stack;
|
|
14
|
+
console.log('Stack frames count:', stack.length);
|
|
15
|
+
stack.forEach((frame, i) => {
|
|
16
|
+
console.log(`Frame ${i}:`);
|
|
17
|
+
console.log(` getFileName():`, frame.getFileName());
|
|
18
|
+
console.log(` getLineNumber():`, frame.getLineNumber());
|
|
19
|
+
console.log(` getColumnNumber():`, frame.getColumnNumber());
|
|
20
|
+
console.log(` getFunctionName():`, frame.getFunctionName());
|
|
21
|
+
console.log(` getMethodName():`, frame.getMethodName());
|
|
22
|
+
console.log(` isNative():`, frame.isNative());
|
|
23
|
+
console.log(` isEval():`, frame.isEval());
|
|
24
|
+
});
|
|
25
|
+
Error.prepareStackTrace = originalPrepareStackTrace;
|
|
26
|
+
// Test 3: Our current implementation
|
|
27
|
+
console.log('\nTest 3: Testing our current implementation');
|
|
28
|
+
import('./src/utils/logger/log-formatter.js').then(module => {
|
|
29
|
+
console.log('isTsxMode():', module.isTsxMode?.() ?? 'not exported');
|
|
30
|
+
const callerInfo = module.getCallerInfo?.(0);
|
|
31
|
+
console.log('getCallerInfo(0):', callerInfo);
|
|
32
|
+
const callerInfo2 = module.getCallerInfo?.(1);
|
|
33
|
+
console.log('getCallerInfo(1):', callerInfo2);
|
|
34
|
+
const callerInfo3 = module.getCallerInfo?.(2);
|
|
35
|
+
console.log('getCallerInfo(2):', callerInfo3);
|
|
36
|
+
const callerInfo4 = module.getCallerInfo?.(3);
|
|
37
|
+
console.log('getCallerInfo(3):', callerInfo4);
|
|
38
|
+
const callerInfo5 = module.getCallerInfo?.(4);
|
|
39
|
+
console.log('getCallerInfo(4):', callerInfo5);
|
|
40
|
+
});
|
|
@@ -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":""}
|