@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
- package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
- package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
- package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
- package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
- package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
- package/dist/client/assets/el-input-99gMrutP.js +1 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
- package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
- package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
- package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/index-C2V-ZGji.js +1 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/index-vhkqgpmN.js +2 -0
- package/dist/client/assets/omit-CqPQN3XP.js +1 -0
- package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +363 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +2 -56
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +2 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.d.ts +4 -32
- package/dist/server/shared/types/client.types.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.js +3 -2
- package/dist/server/shared/types/index.d.ts +3 -3
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +3 -3
- package/dist/server/shared/types/session-context.types.d.ts +35 -0
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
- package/dist/server/shared/types/session-context.types.js +5 -0
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +34 -61
- package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
- package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
- package/dist/server/src/api/web/clients.js +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/web/sessions.js +1 -1
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -4
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -102
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -98
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/index.js +1 -1
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/client-tracker.service.d.ts +3 -128
- package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
- package/dist/server/src/services/client-tracker.service.js +4 -200
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +15 -19
- package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +42 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -64
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/search/search-cache.d.ts +0 -19
- package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
- package/dist/server/src/services/search/search-cache.js +0 -24
- package/dist/server/src/services/search/search-core.service.d.ts +5 -5
- package/dist/server/src/services/search/search-core.service.js +11 -11
- package/dist/server/src/services/session/session-manager.d.ts +12 -256
- package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
- package/dist/server/src/services/session/session-manager.js +23 -583
- package/dist/server/src/services/session-tracker.service.d.ts +124 -0
- package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
- package/dist/server/src/services/session-tracker.service.js +176 -0
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +10 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.d.ts +1 -0
- package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.js +2 -1
- package/dist/server/src/utils/logger/log-context.d.ts +1 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +287 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -8
- package/dist/server/src/utils/logger/log-output.d.ts +2 -2
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-output.js +27 -6
- package/dist/server/src/utils/logger/logger.d.ts +13 -0
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/logger.js +42 -7
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/request-context.d.ts +12 -30
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +10 -30
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/tool-args-parser.d.ts +0 -4
- package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
- package/dist/server/src/utils/tool-args-parser.js +0 -7
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +33 -13
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/evaluation/evaluation.test.js +10 -9
- package/dist/server/tests/integration/api/gateway.test.js +24 -39
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/temp/test-stack.d.ts +6 -0
- package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
- package/dist/server/tests/temp/test-stack.js +40 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -334
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +107 -13
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/logger.test.js +101 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/request-context.test.js +9 -28
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +1 -1
- package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
- package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
- package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
- package/dist/client/assets/ServerListView-DralUL71.js +0 -30
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
- package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
- package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
- package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
- package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
- package/dist/client/assets/el-input-CeZiq23m.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-iw_hrrlC.js +0 -1
- package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
- package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
- package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/index-COYaYRbH.js +0 -1
- package/dist/client/assets/index-Cfcvxyee.js +0 -2
- package/dist/client/assets/index-PhuI36Zi.js +0 -1
- package/dist/client/assets/omit-7EL6VJO4.js +0 -1
- package/dist/client/assets/vnode-upjuIlvm.js +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Configuration loading utilities.
|
|
2
|
+
* Configuration loading utilities (v1.1 only).
|
|
3
3
|
* Handles loading and parsing configuration from files with validation.
|
|
4
|
+
* Supports automatic migration from v1.0 to v1.1.
|
|
4
5
|
*/
|
|
5
6
|
import type { SystemConfig } from './config.schema.js';
|
|
6
7
|
/**
|
|
@@ -9,14 +10,14 @@ import type { SystemConfig } from './config.schema.js';
|
|
|
9
10
|
* This function handles the complete configuration loading process:
|
|
10
11
|
* - Checks if the config file exists at the specified path
|
|
11
12
|
* - Reads and parses the JSON configuration
|
|
13
|
+
* - Detects legacy v1.0 configuration and auto-migrates to v1.1
|
|
12
14
|
* - Performs type conversion for compatibility (e.g., 'http' to 'streamable-http')
|
|
13
15
|
* - Validates the configuration using Zod schema
|
|
14
16
|
* - Handles validation failures gracefully by falling back to default configuration
|
|
15
17
|
*
|
|
16
|
-
* If the config file doesn't exist or fails to load, a default configuration is returned.
|
|
17
|
-
*
|
|
18
18
|
* @param configPath - Path to the configuration file
|
|
19
|
-
* @
|
|
19
|
+
* @param autoMigrate - Whether to automatically migrate v1.0 to v1.1 (default: true)
|
|
20
|
+
* @returns The loaded and validated system configuration (v1.1 format)
|
|
20
21
|
*/
|
|
21
|
-
export declare function loadConfig(configPath: string): SystemConfig;
|
|
22
|
+
export declare function loadConfig(configPath: string, autoMigrate?: boolean): SystemConfig;
|
|
22
23
|
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../../src/config/config-loader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../../src/config/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,YAAY,CAoGxF"}
|
|
@@ -1,66 +1,104 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Configuration loading utilities.
|
|
2
|
+
* Configuration loading utilities (v1.1 only).
|
|
3
3
|
* Handles loading and parsing configuration from files with validation.
|
|
4
|
+
* Supports automatic migration from v1.0 to v1.1.
|
|
4
5
|
*/
|
|
5
6
|
import * as fs from 'fs';
|
|
6
7
|
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
7
|
-
import { SystemConfigSchema } from './config.schema.js';
|
|
8
|
+
import { SystemConfigSchema, isLegacyV1Config } from './config.schema.js';
|
|
9
|
+
import { migrateConfig } from './config-migrator.js';
|
|
8
10
|
import { convertHttpToStreamableHttp } from './type-converter.js';
|
|
11
|
+
import { reassignServerInstanceIndexes } from './server-config-manager.js';
|
|
9
12
|
/**
|
|
10
13
|
* Loads configuration from the specified file path.
|
|
11
14
|
*
|
|
12
15
|
* This function handles the complete configuration loading process:
|
|
13
16
|
* - Checks if the config file exists at the specified path
|
|
14
17
|
* - Reads and parses the JSON configuration
|
|
18
|
+
* - Detects legacy v1.0 configuration and auto-migrates to v1.1
|
|
15
19
|
* - Performs type conversion for compatibility (e.g., 'http' to 'streamable-http')
|
|
16
20
|
* - Validates the configuration using Zod schema
|
|
17
21
|
* - Handles validation failures gracefully by falling back to default configuration
|
|
18
22
|
*
|
|
19
|
-
* If the config file doesn't exist or fails to load, a default configuration is returned.
|
|
20
|
-
*
|
|
21
23
|
* @param configPath - Path to the configuration file
|
|
22
|
-
* @
|
|
24
|
+
* @param autoMigrate - Whether to automatically migrate v1.0 to v1.1 (default: true)
|
|
25
|
+
* @returns The loaded and validated system configuration (v1.1 format)
|
|
23
26
|
*/
|
|
24
|
-
export function loadConfig(configPath) {
|
|
27
|
+
export function loadConfig(configPath, autoMigrate = true) {
|
|
25
28
|
try {
|
|
26
29
|
if (fs.existsSync(configPath)) {
|
|
27
30
|
logger.info(`Loading configuration from: ${configPath}`, LOG_MODULES.CONFIG_MANAGER);
|
|
28
31
|
const content = fs.readFileSync(configPath, 'utf-8');
|
|
29
32
|
let config = JSON.parse(content);
|
|
33
|
+
// Check if automatic migration is enabled and config is legacy v1.0
|
|
34
|
+
if (autoMigrate && isLegacyV1Config(config)) {
|
|
35
|
+
logger.info('Detected legacy v1.0 configuration, starting automatic migration to v1.1', LOG_MODULES.CONFIG_MANAGER);
|
|
36
|
+
const migrationResult = migrateConfig(configPath, {
|
|
37
|
+
dryRun: false,
|
|
38
|
+
createBackup: true,
|
|
39
|
+
validateAfterMigration: true
|
|
40
|
+
});
|
|
41
|
+
if (migrationResult.success && migrationResult.migratedConfig) {
|
|
42
|
+
logger.info('Configuration successfully migrated to v1.1', LOG_MODULES.CONFIG_MANAGER);
|
|
43
|
+
if (migrationResult.backupPath) {
|
|
44
|
+
logger.info(`Backup created at: ${migrationResult.backupPath}`, LOG_MODULES.CONFIG_MANAGER);
|
|
45
|
+
}
|
|
46
|
+
config = migrationResult.migratedConfig;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
logger.warn(`Migration failed, continuing with default config: ${migrationResult.error}`, LOG_MODULES.CONFIG_MANAGER);
|
|
50
|
+
return SystemConfigSchema.parse({});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
30
53
|
// Unified type conversion: convert http to streamable-http
|
|
31
54
|
config = convertHttpToStreamableHttp(config);
|
|
32
|
-
//
|
|
55
|
+
// Handle backward compatibility for instanceSelectionStrategy in root level
|
|
56
|
+
if (config.servers) {
|
|
57
|
+
for (const [serverName, serverConfig] of Object.entries(config.servers)) {
|
|
58
|
+
if (serverConfig &&
|
|
59
|
+
typeof serverConfig === 'object' &&
|
|
60
|
+
'instanceSelectionStrategy' in serverConfig &&
|
|
61
|
+
serverConfig.instanceSelectionStrategy !== undefined) {
|
|
62
|
+
const legacyConfig = serverConfig;
|
|
63
|
+
const strategy = legacyConfig.instanceSelectionStrategy;
|
|
64
|
+
if (typeof strategy === 'string') {
|
|
65
|
+
legacyConfig.template.instanceSelectionStrategy = strategy;
|
|
66
|
+
}
|
|
67
|
+
delete legacyConfig.instanceSelectionStrategy;
|
|
68
|
+
logger.debug(`Migrated instanceSelectionStrategy for server ${serverName} to template`, LOG_MODULES.CONFIG_LOADER);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Validate and return configuration
|
|
33
73
|
try {
|
|
34
|
-
// Use safeParse to validate configuration
|
|
35
74
|
const parsed = SystemConfigSchema.safeParse(config);
|
|
36
75
|
if (parsed.success) {
|
|
37
|
-
// Ensure server configurations are sorted by name
|
|
38
76
|
const configWithSortedServers = {
|
|
39
77
|
...parsed.data,
|
|
40
78
|
servers: Object.fromEntries(Object.entries(parsed.data.servers).sort(([a], [b]) => a.localeCompare(b)))
|
|
41
79
|
};
|
|
80
|
+
// Ensure all server instances have proper indexes
|
|
81
|
+
for (const serverName of Object.keys(configWithSortedServers.servers)) {
|
|
82
|
+
reassignServerInstanceIndexes(serverName, configWithSortedServers.servers);
|
|
83
|
+
}
|
|
42
84
|
return configWithSortedServers;
|
|
43
85
|
}
|
|
44
86
|
else {
|
|
45
|
-
|
|
46
|
-
logger.error(`Config validation failed: ${parsed.error}`);
|
|
87
|
+
logger.error(`Config validation failed: ${parsed.error}`, LOG_MODULES.CONFIG_LOADER);
|
|
47
88
|
return SystemConfigSchema.parse({});
|
|
48
89
|
}
|
|
49
90
|
}
|
|
50
91
|
catch (e) {
|
|
51
|
-
logger.error(`Failed to parse config: ${e}
|
|
52
|
-
// On parsing failure, use default configuration
|
|
92
|
+
logger.error(`Failed to parse config: ${e}`, LOG_MODULES.CONFIG_LOADER);
|
|
53
93
|
return SystemConfigSchema.parse({});
|
|
54
94
|
}
|
|
55
95
|
}
|
|
56
96
|
else {
|
|
57
|
-
// When config file doesn't exist, create default config in memory only
|
|
58
97
|
return SystemConfigSchema.parse({});
|
|
59
98
|
}
|
|
60
99
|
}
|
|
61
100
|
catch (error) {
|
|
62
|
-
logger.error(`Failed to load config: ${error}
|
|
63
|
-
// On config file load failure, use default configuration
|
|
101
|
+
logger.error(`Failed to load config: ${error}`, LOG_MODULES.CONFIG_LOADER);
|
|
64
102
|
return SystemConfigSchema.parse({});
|
|
65
103
|
}
|
|
66
104
|
}
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
* // Get the config manager instance
|
|
17
17
|
* const configManager = getConfigManager();
|
|
18
18
|
*
|
|
19
|
-
* // Get all servers
|
|
19
|
+
* // Get all servers (v1.1 format)
|
|
20
20
|
* const servers = configManager.getServers();
|
|
21
21
|
*
|
|
22
|
-
* // Add a new server
|
|
22
|
+
* // Add a new server with template and default instance
|
|
23
23
|
* await configManager.addServer('my-server', {
|
|
24
24
|
* type: 'stdio',
|
|
25
25
|
* command: 'npx my-mcp-server',
|
|
@@ -27,15 +27,13 @@
|
|
|
27
27
|
* });
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
|
-
import { SystemConfigSchema,
|
|
31
|
-
import type {
|
|
32
|
-
export { ServerConfig, SystemConfig,
|
|
30
|
+
import { SystemConfigSchema, ServerInstanceSchema, ServerConfigSchema } from './config.schema.js';
|
|
31
|
+
import type { SystemConfig, ServerTemplate, ServerInstance, ServerConfig } from './config.schema.js';
|
|
32
|
+
export { ServerConfig, SystemConfig, ServerInstance, ServerTemplate, SystemConfigSchema, ServerConfigSchema, ServerInstanceSchema };
|
|
33
33
|
export declare class ConfigManager {
|
|
34
34
|
private configPath;
|
|
35
35
|
private config;
|
|
36
|
-
private serverInstances;
|
|
37
36
|
constructor(configPath?: string);
|
|
38
|
-
private initServerInstances;
|
|
39
37
|
/**
|
|
40
38
|
* Retrieves the current system configuration.
|
|
41
39
|
*
|
|
@@ -43,7 +41,7 @@ export declare class ConfigManager {
|
|
|
43
41
|
*/
|
|
44
42
|
getConfig(): SystemConfig;
|
|
45
43
|
/**
|
|
46
|
-
* Retrieves all configured servers with their configurations.
|
|
44
|
+
* Retrieves all configured servers with their configurations (v1.1 format).
|
|
47
45
|
*
|
|
48
46
|
* @param sortByName - Whether to sort servers by name
|
|
49
47
|
* @returns Array of server objects with name and config
|
|
@@ -53,53 +51,45 @@ export declare class ConfigManager {
|
|
|
53
51
|
config: ServerConfig;
|
|
54
52
|
}>;
|
|
55
53
|
/**
|
|
56
|
-
* Retrieves a server configuration by name.
|
|
54
|
+
* Retrieves a server configuration by name (v1.1 format).
|
|
57
55
|
*
|
|
58
56
|
* @param name - The name of the server to retrieve
|
|
59
|
-
* @returns The server configuration or undefined if not found
|
|
57
|
+
* @returns The server configuration (v1.1) or undefined if not found
|
|
60
58
|
*/
|
|
61
59
|
getServerByName(name: string): ServerConfig | undefined;
|
|
62
|
-
/**
|
|
63
|
-
* Retrieves all server instances grouped by server name.
|
|
64
|
-
*
|
|
65
|
-
* @returns Server instances grouped by server name
|
|
66
|
-
*/
|
|
67
|
-
getServerInstances(): Record<string, ServerInstanceConfig[]>;
|
|
68
60
|
/**
|
|
69
61
|
* Retrieves all server instances for a specific server by name.
|
|
70
62
|
*
|
|
71
63
|
* @param name - The name of the server to retrieve instances for
|
|
72
64
|
* @returns Array of server instances, or empty array if none exist
|
|
73
65
|
*/
|
|
74
|
-
|
|
66
|
+
getServerInstancesByName(name: string): ServerInstance[];
|
|
75
67
|
/**
|
|
76
|
-
* Retrieves server
|
|
68
|
+
* Retrieves a specific server instance by index.
|
|
77
69
|
*
|
|
78
|
-
* @param
|
|
79
|
-
* @
|
|
70
|
+
* @param name - The name of the server
|
|
71
|
+
* @param index - The index of the instance
|
|
72
|
+
* @returns The server instance or undefined if not found
|
|
80
73
|
*/
|
|
81
|
-
|
|
82
|
-
name: string;
|
|
83
|
-
config: ServerConfig;
|
|
84
|
-
instance: ServerInstanceConfig;
|
|
85
|
-
} | undefined;
|
|
74
|
+
getServerInstanceByIndex(name: string, index: number): ServerInstance | undefined;
|
|
86
75
|
/**
|
|
87
76
|
* Adds multiple server configurations to the system in a single operation.
|
|
88
77
|
*
|
|
89
|
-
* @param servers - Array of server objects containing name and partial configuration
|
|
78
|
+
* @param servers - Array of server objects containing name and partial template configuration
|
|
90
79
|
*/
|
|
91
80
|
addServers(servers: Array<{
|
|
92
81
|
name: string;
|
|
93
|
-
config: Partial<
|
|
82
|
+
config: Partial<ServerTemplate>;
|
|
94
83
|
}>): Promise<void>;
|
|
95
84
|
/**
|
|
96
|
-
* Adds a new server configuration to the system.
|
|
85
|
+
* Adds a new server configuration to the system (v1.1 format).
|
|
86
|
+
* Creates a template and a default instance.
|
|
97
87
|
*
|
|
98
88
|
* @param name - The unique name for the server
|
|
99
|
-
* @param config - The server configuration
|
|
100
|
-
* @returns The
|
|
89
|
+
* @param config - The server template configuration
|
|
90
|
+
* @returns The complete server configuration (v1.1)
|
|
101
91
|
*/
|
|
102
|
-
addServer(name: string, config: Partial<
|
|
92
|
+
addServer(name: string, config: Partial<ServerTemplate>): Promise<ServerConfig>;
|
|
103
93
|
/**
|
|
104
94
|
* Adds a new server instance for the specified server.
|
|
105
95
|
*
|
|
@@ -107,36 +97,54 @@ export declare class ConfigManager {
|
|
|
107
97
|
* @param instance - The server instance configuration
|
|
108
98
|
* @returns The validated and complete server instance configuration
|
|
109
99
|
*/
|
|
110
|
-
addServerInstance(name: string, instance: Partial<
|
|
100
|
+
addServerInstance(name: string, instance: Partial<ServerInstance>): Promise<ServerInstance>;
|
|
101
|
+
/**
|
|
102
|
+
* Updates an existing server template configuration.
|
|
103
|
+
*
|
|
104
|
+
* @param name - The name of the server to update
|
|
105
|
+
* @param updates - The partial template updates to apply
|
|
106
|
+
* @returns The updated server configuration or null if not found
|
|
107
|
+
*/
|
|
108
|
+
updateServer(name: string, updates: Partial<ServerTemplate>): Promise<ServerConfig | null>;
|
|
111
109
|
/**
|
|
112
|
-
* Updates an existing server configuration
|
|
110
|
+
* Updates an existing server configuration.
|
|
113
111
|
*
|
|
114
112
|
* @param name - The name of the server to update
|
|
115
|
-
* @param updates - The partial
|
|
113
|
+
* @param updates - The partial server template updates to apply
|
|
114
|
+
* @returns The updated server configuration or null if not found
|
|
116
115
|
*/
|
|
117
|
-
|
|
116
|
+
updateServerConfig(name: string, updates: Partial<ServerTemplate>): Promise<ServerConfig | null>;
|
|
118
117
|
/**
|
|
119
|
-
* Updates an existing server instance configuration
|
|
118
|
+
* Updates an existing server instance configuration.
|
|
120
119
|
*
|
|
121
120
|
* @param name - The name of the server containing the instance to update
|
|
122
|
-
* @param index - The index of the instance to update
|
|
123
|
-
* @param updates - The partial instance
|
|
121
|
+
* @param index - The index of the instance to update
|
|
122
|
+
* @param updates - The partial instance updates to apply
|
|
123
|
+
* @returns True if the instance was updated
|
|
124
124
|
*/
|
|
125
|
-
updateServerInstance(name: string, index: number, updates: Partial<
|
|
125
|
+
updateServerInstance(name: string, index: number, updates: Partial<ServerInstance>): Promise<boolean>;
|
|
126
126
|
/**
|
|
127
127
|
* Removes a server configuration and all its instances from the system.
|
|
128
128
|
*
|
|
129
129
|
* @param name - The name of the server to remove
|
|
130
|
-
* @returns True if the server was removed
|
|
130
|
+
* @returns True if the server was removed
|
|
131
131
|
*/
|
|
132
|
-
removeServer(name: string): Promise<
|
|
132
|
+
removeServer(name: string): Promise<boolean>;
|
|
133
133
|
/**
|
|
134
134
|
* Removes a specific server instance from the system.
|
|
135
135
|
*
|
|
136
136
|
* @param name - The name of the server containing the instance to remove
|
|
137
|
-
* @param index - The index of the instance to remove
|
|
137
|
+
* @param index - The index of the instance to remove
|
|
138
|
+
* @returns True if the instance was removed
|
|
139
|
+
*/
|
|
140
|
+
removeServerInstance(name: string, index: number): Promise<boolean>;
|
|
141
|
+
/**
|
|
142
|
+
* Reassigns server instance indexes to be consecutive (0, 1, 2, ...).
|
|
143
|
+
*
|
|
144
|
+
* @param name - The name of the server to reassign indexes for
|
|
145
|
+
* @returns True if the server exists and indexes were reassigned
|
|
138
146
|
*/
|
|
139
|
-
|
|
147
|
+
reassignInstanceIndexes(name: string): Promise<boolean>;
|
|
140
148
|
/**
|
|
141
149
|
* Updates the entire system configuration with the provided partial configuration.
|
|
142
150
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,YAAY,EACb,MAAM,oBAAoB,CAAC;AAiB5B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACrB,CAAC;AAEF,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAgB;gBAElB,UAAU,CAAC,EAAE,MAAM;IAS/B;;;;OAIG;IACI,SAAS,IAAI,YAAY;IAIhC;;;;;OAKG;IACI,UAAU,CAAC,UAAU,GAAE,OAAe,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC;IAW7F;;;;;OAKG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;;;;OAKG;IACI,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAI/D;;;;;;OAMG;IACI,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKxF;;;;OAIG;IACU,UAAU,CACrB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;OAOG;IACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAM5F;;;;;;OAMG;IACU,iBAAiB,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC;IAM1B;;;;;;OAMG;IACU,YAAY,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQ/B;;;;;;OAMG;IACU,kBAAkB,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQ/B;;;;;;;OAOG;IACU,oBAAoB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC;IAQnB;;;;;OAKG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzD;;;;;;OAMG;IACU,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhF;;;;;OAKG;IACU,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQpE;;;;OAIG;IACU,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1E,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGzC;AAKD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAchD;AAGD,eAAO,MAAM,aAAa,eAAqB,CAAC"}
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
* // Get the config manager instance
|
|
17
17
|
* const configManager = getConfigManager();
|
|
18
18
|
*
|
|
19
|
-
* // Get all servers
|
|
19
|
+
* // Get all servers (v1.1 format)
|
|
20
20
|
* const servers = configManager.getServers();
|
|
21
21
|
*
|
|
22
|
-
* // Add a new server
|
|
22
|
+
* // Add a new server with template and default instance
|
|
23
23
|
* await configManager.addServer('my-server', {
|
|
24
24
|
* type: 'stdio',
|
|
25
25
|
* command: 'npx my-mcp-server',
|
|
@@ -30,38 +30,24 @@
|
|
|
30
30
|
import path from 'path';
|
|
31
31
|
import os from 'os';
|
|
32
32
|
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
33
|
-
import { SystemConfigSchema,
|
|
33
|
+
import { SystemConfigSchema, ServerInstanceSchema, ServerConfigSchema } from './config.schema.js';
|
|
34
34
|
import { loadConfig } from './config-loader.js';
|
|
35
35
|
import { saveConfig } from './config-saver.js';
|
|
36
|
-
import { convertHttpToStreamableHttp } from './type-converter.js';
|
|
37
36
|
import { logConfigChanges } from './config-change-logger.js';
|
|
38
|
-
import {
|
|
37
|
+
import { convertHttpToStreamableHttp } from './type-converter.js';
|
|
38
|
+
import { addServers, addServer, addServerInstance, updateServerTemplate, updateServerInstance, removeServer, removeServerInstance, reassignServerInstanceIndexes } from './server-config-manager.js';
|
|
39
39
|
// Re-export types for external use
|
|
40
|
-
export { SystemConfigSchema, ServerConfigSchema,
|
|
40
|
+
export { SystemConfigSchema, ServerConfigSchema, ServerInstanceSchema };
|
|
41
41
|
export class ConfigManager {
|
|
42
42
|
configPath;
|
|
43
43
|
config;
|
|
44
|
-
serverInstances = {};
|
|
45
44
|
constructor(configPath) {
|
|
46
45
|
this.configPath =
|
|
47
46
|
configPath ||
|
|
48
47
|
process.env.MCP_HUB_CONFIG_PATH ||
|
|
49
48
|
path.join(os.homedir(), '.mcp-hub-lite', 'config', '.mcp-hub.json');
|
|
50
49
|
logger.info(`Using config file: ${this.configPath}`, LOG_MODULES.CONFIG_MANAGER);
|
|
51
|
-
this.config = loadConfig(this.configPath);
|
|
52
|
-
this.initServerInstances();
|
|
53
|
-
}
|
|
54
|
-
initServerInstances() {
|
|
55
|
-
// Init server instances
|
|
56
|
-
if (this.config && this.config.servers && typeof this.config.servers === 'object') {
|
|
57
|
-
Object.keys(this.config.servers).forEach((name) => {
|
|
58
|
-
if (!this.serverInstances[name])
|
|
59
|
-
this.serverInstances[name] = [];
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
else if (!this.config) {
|
|
63
|
-
this.config = SystemConfigSchema.parse({});
|
|
64
|
-
}
|
|
50
|
+
this.config = loadConfig(this.configPath, true);
|
|
65
51
|
}
|
|
66
52
|
/**
|
|
67
53
|
* Retrieves the current system configuration.
|
|
@@ -72,7 +58,7 @@ export class ConfigManager {
|
|
|
72
58
|
return { ...this.config };
|
|
73
59
|
}
|
|
74
60
|
/**
|
|
75
|
-
* Retrieves all configured servers with their configurations.
|
|
61
|
+
* Retrieves all configured servers with their configurations (v1.1 format).
|
|
76
62
|
*
|
|
77
63
|
* @param sortByName - Whether to sort servers by name
|
|
78
64
|
* @returns Array of server objects with name and config
|
|
@@ -88,64 +74,53 @@ export class ConfigManager {
|
|
|
88
74
|
return servers;
|
|
89
75
|
}
|
|
90
76
|
/**
|
|
91
|
-
* Retrieves a server configuration by name.
|
|
77
|
+
* Retrieves a server configuration by name (v1.1 format).
|
|
92
78
|
*
|
|
93
79
|
* @param name - The name of the server to retrieve
|
|
94
|
-
* @returns The server configuration or undefined if not found
|
|
80
|
+
* @returns The server configuration (v1.1) or undefined if not found
|
|
95
81
|
*/
|
|
96
82
|
getServerByName(name) {
|
|
97
83
|
return this.config.servers?.[name];
|
|
98
84
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Retrieves all server instances grouped by server name.
|
|
101
|
-
*
|
|
102
|
-
* @returns Server instances grouped by server name
|
|
103
|
-
*/
|
|
104
|
-
getServerInstances() {
|
|
105
|
-
return { ...this.serverInstances };
|
|
106
|
-
}
|
|
107
85
|
/**
|
|
108
86
|
* Retrieves all server instances for a specific server by name.
|
|
109
87
|
*
|
|
110
88
|
* @param name - The name of the server to retrieve instances for
|
|
111
89
|
* @returns Array of server instances, or empty array if none exist
|
|
112
90
|
*/
|
|
113
|
-
|
|
114
|
-
return this.
|
|
91
|
+
getServerInstancesByName(name) {
|
|
92
|
+
return this.config.servers?.[name]?.instances || [];
|
|
115
93
|
}
|
|
116
94
|
/**
|
|
117
|
-
* Retrieves server
|
|
95
|
+
* Retrieves a specific server instance by index.
|
|
118
96
|
*
|
|
119
|
-
* @param
|
|
120
|
-
* @
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return { name: serverName, config: this.config.servers[serverName], instance };
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return undefined;
|
|
97
|
+
* @param name - The name of the server
|
|
98
|
+
* @param index - The index of the instance
|
|
99
|
+
* @returns The server instance or undefined if not found
|
|
100
|
+
*/
|
|
101
|
+
getServerInstanceByIndex(name, index) {
|
|
102
|
+
const instances = this.getServerInstancesByName(name);
|
|
103
|
+
return instances[index];
|
|
130
104
|
}
|
|
131
105
|
/**
|
|
132
106
|
* Adds multiple server configurations to the system in a single operation.
|
|
133
107
|
*
|
|
134
|
-
* @param servers - Array of server objects containing name and partial configuration
|
|
108
|
+
* @param servers - Array of server objects containing name and partial template configuration
|
|
135
109
|
*/
|
|
136
110
|
async addServers(servers) {
|
|
137
|
-
this.config.servers = addServers(servers, this.config.servers
|
|
111
|
+
this.config.servers = addServers(servers, this.config.servers);
|
|
138
112
|
this.persistConfig();
|
|
139
113
|
}
|
|
140
114
|
/**
|
|
141
|
-
* Adds a new server configuration to the system.
|
|
115
|
+
* Adds a new server configuration to the system (v1.1 format).
|
|
116
|
+
* Creates a template and a default instance.
|
|
142
117
|
*
|
|
143
118
|
* @param name - The unique name for the server
|
|
144
|
-
* @param config - The server configuration
|
|
145
|
-
* @returns The
|
|
119
|
+
* @param config - The server template configuration
|
|
120
|
+
* @returns The complete server configuration (v1.1)
|
|
146
121
|
*/
|
|
147
122
|
async addServer(name, config) {
|
|
148
|
-
const validated = addServer(name, config, this.config.servers
|
|
123
|
+
const validated = addServer(name, config, this.config.servers);
|
|
149
124
|
this.persistConfig();
|
|
150
125
|
return validated;
|
|
151
126
|
}
|
|
@@ -157,48 +132,92 @@ export class ConfigManager {
|
|
|
157
132
|
* @returns The validated and complete server instance configuration
|
|
158
133
|
*/
|
|
159
134
|
async addServerInstance(name, instance) {
|
|
160
|
-
|
|
135
|
+
const newInstance = addServerInstance(name, instance, this.config.servers);
|
|
136
|
+
this.persistConfig();
|
|
137
|
+
return newInstance;
|
|
161
138
|
}
|
|
162
139
|
/**
|
|
163
|
-
* Updates an existing server configuration
|
|
140
|
+
* Updates an existing server template configuration.
|
|
164
141
|
*
|
|
165
142
|
* @param name - The name of the server to update
|
|
166
|
-
* @param updates - The partial
|
|
143
|
+
* @param updates - The partial template updates to apply
|
|
144
|
+
* @returns The updated server configuration or null if not found
|
|
167
145
|
*/
|
|
168
146
|
async updateServer(name, updates) {
|
|
169
|
-
if (
|
|
147
|
+
if (updateServerTemplate(name, updates, this.config.servers)) {
|
|
148
|
+
this.persistConfig();
|
|
149
|
+
return this.config.servers[name] || null;
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Updates an existing server configuration.
|
|
155
|
+
*
|
|
156
|
+
* @param name - The name of the server to update
|
|
157
|
+
* @param updates - The partial server template updates to apply
|
|
158
|
+
* @returns The updated server configuration or null if not found
|
|
159
|
+
*/
|
|
160
|
+
async updateServerConfig(name, updates) {
|
|
161
|
+
if (updateServerTemplate(name, updates, this.config.servers)) {
|
|
170
162
|
this.persistConfig();
|
|
163
|
+
return this.config.servers[name] || null;
|
|
171
164
|
}
|
|
165
|
+
return null;
|
|
172
166
|
}
|
|
173
167
|
/**
|
|
174
|
-
* Updates an existing server instance configuration
|
|
168
|
+
* Updates an existing server instance configuration.
|
|
175
169
|
*
|
|
176
170
|
* @param name - The name of the server containing the instance to update
|
|
177
|
-
* @param index - The index of the instance to update
|
|
178
|
-
* @param updates - The partial instance
|
|
171
|
+
* @param index - The index of the instance to update
|
|
172
|
+
* @param updates - The partial instance updates to apply
|
|
173
|
+
* @returns True if the instance was updated
|
|
179
174
|
*/
|
|
180
175
|
async updateServerInstance(name, index, updates) {
|
|
181
|
-
updateServerInstance(name, index, updates, this.
|
|
176
|
+
const result = updateServerInstance(name, index, updates, this.config.servers);
|
|
177
|
+
if (result) {
|
|
178
|
+
this.persistConfig();
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
182
181
|
}
|
|
183
182
|
/**
|
|
184
183
|
* Removes a server configuration and all its instances from the system.
|
|
185
184
|
*
|
|
186
185
|
* @param name - The name of the server to remove
|
|
187
|
-
* @returns True if the server was removed
|
|
186
|
+
* @returns True if the server was removed
|
|
188
187
|
*/
|
|
189
188
|
async removeServer(name) {
|
|
190
|
-
if (removeServer(name, this.config.servers
|
|
189
|
+
if (removeServer(name, this.config.servers)) {
|
|
191
190
|
this.persistConfig();
|
|
191
|
+
return true;
|
|
192
192
|
}
|
|
193
|
+
return false;
|
|
193
194
|
}
|
|
194
195
|
/**
|
|
195
196
|
* Removes a specific server instance from the system.
|
|
196
197
|
*
|
|
197
198
|
* @param name - The name of the server containing the instance to remove
|
|
198
|
-
* @param index - The index of the instance to remove
|
|
199
|
+
* @param index - The index of the instance to remove
|
|
200
|
+
* @returns True if the instance was removed
|
|
199
201
|
*/
|
|
200
202
|
async removeServerInstance(name, index) {
|
|
201
|
-
removeServerInstance(name, index, this.
|
|
203
|
+
if (removeServerInstance(name, index, this.config.servers)) {
|
|
204
|
+
this.persistConfig();
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Reassigns server instance indexes to be consecutive (0, 1, 2, ...).
|
|
211
|
+
*
|
|
212
|
+
* @param name - The name of the server to reassign indexes for
|
|
213
|
+
* @returns True if the server exists and indexes were reassigned
|
|
214
|
+
*/
|
|
215
|
+
async reassignInstanceIndexes(name) {
|
|
216
|
+
if (reassignServerInstanceIndexes(name, this.config.servers)) {
|
|
217
|
+
this.persistConfig();
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
202
221
|
}
|
|
203
222
|
/**
|
|
204
223
|
* Updates the entire system configuration with the provided partial configuration.
|
|
@@ -219,8 +238,7 @@ export class ConfigManager {
|
|
|
219
238
|
* Synchronizes the in-memory configuration with the on-disk configuration file.
|
|
220
239
|
*/
|
|
221
240
|
async syncConfig() {
|
|
222
|
-
this.config = loadConfig(this.configPath);
|
|
223
|
-
this.initServerInstances();
|
|
241
|
+
this.config = loadConfig(this.configPath, true);
|
|
224
242
|
}
|
|
225
243
|
}
|
|
226
244
|
// Lazy initialization of configManager to avoid creating instance during module import
|