@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
- package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
- package/dist/client/assets/ServerDetail-BLQ-a4cO.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BHrsFD5i.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
- package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
- package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
- package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
- package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
- package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
- package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
- package/dist/client/assets/index-ByNBhPAR.js +1 -0
- package/dist/client/assets/index-CTB6oe-9.js +2 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/omit-CUnDT6sS.js +1 -0
- package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +362 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +1 -57
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +1 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/session-context.types.d.ts +0 -2
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +32 -49
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -2
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/server.d.ts +57 -0
- package/dist/server/src/cli/commands/server.d.ts.map +1 -0
- package/dist/server/src/cli/commands/server.js +169 -0
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -104
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -99
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +53 -23
- package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +66 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +4 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +82 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -6
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +31 -11
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +3 -1
- package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
- package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
- package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
- package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
- package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
- package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
- package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
- package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
- package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
- package/dist/client/assets/el-select-DvjGddk_.js +0 -1
- package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
- package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/el-tag-npbwux4f.js +0 -1
- package/dist/client/assets/index-CCnAxNF8.js +0 -2
- package/dist/client/assets/index-d1DZeSfz.js +0 -1
- package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
- package/dist/client/assets/vnode-CHomNjgN.js +0 -1
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
4
|
+
import { generateInstanceId } from '../utils/instance-id.js';
|
|
5
|
+
import { isLegacyV1Config, SystemConfigSchema } from './config.schema.js';
|
|
6
|
+
import { reassignServerInstanceIndexes } from './server-config-manager.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default migration options
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_OPTIONS = {
|
|
11
|
+
dryRun: false,
|
|
12
|
+
createBackup: true,
|
|
13
|
+
validateAfterMigration: true
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Generates a timestamp for backup files
|
|
17
|
+
*/
|
|
18
|
+
function generateTimestamp() {
|
|
19
|
+
const now = new Date();
|
|
20
|
+
return now.toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates a backup of the configuration file
|
|
24
|
+
*/
|
|
25
|
+
function createBackup(configPath) {
|
|
26
|
+
try {
|
|
27
|
+
if (!existsSync(configPath)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const timestamp = generateTimestamp();
|
|
31
|
+
const backupDir = dirname(configPath);
|
|
32
|
+
const backupPath = join(backupDir, `.mcp-hub.json.backup.${timestamp}`);
|
|
33
|
+
const content = readFileSync(configPath, 'utf8');
|
|
34
|
+
writeFileSync(backupPath, content, 'utf8');
|
|
35
|
+
return backupPath;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
logger.warn('Failed to create backup:', LOG_MODULES.CONFIG_MANAGER, error);
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Converts a legacy v1.0 ServerConfig to a v1.1 ServerTemplate
|
|
44
|
+
*/
|
|
45
|
+
function convertToServerTemplate(v1Config) {
|
|
46
|
+
return {
|
|
47
|
+
command: v1Config.command,
|
|
48
|
+
args: v1Config.args || [],
|
|
49
|
+
env: v1Config.env || {},
|
|
50
|
+
headers: v1Config.headers || {},
|
|
51
|
+
type: v1Config.type || 'stdio',
|
|
52
|
+
timeout: v1Config.timeout || 60000,
|
|
53
|
+
url: v1Config.url,
|
|
54
|
+
aggregatedTools: v1Config.allowedTools || [],
|
|
55
|
+
description: v1Config.description
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Converts a legacy v1.0 ServerConfig to a v1.1 ServerInstance
|
|
60
|
+
*/
|
|
61
|
+
function convertToServerInstance(v1Config, serverName) {
|
|
62
|
+
// Only keep the differences from template (args should be empty since template has full args)
|
|
63
|
+
const instanceConfig = {
|
|
64
|
+
args: [],
|
|
65
|
+
env: v1Config.env || {},
|
|
66
|
+
headers: v1Config.headers || {},
|
|
67
|
+
tags: v1Config.tags || {}
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
id: generateInstanceId(serverName, instanceConfig),
|
|
71
|
+
index: 0, // Set initial index for migrated instances
|
|
72
|
+
enabled: v1Config.enabled !== false,
|
|
73
|
+
args: [], // In v1.1, instance args are just the append part
|
|
74
|
+
env: v1Config.env || {},
|
|
75
|
+
headers: v1Config.headers || {},
|
|
76
|
+
tags: v1Config.tags || {}
|
|
77
|
+
// command and description are removed from instance
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Converts a legacy v1.0 SystemConfig to a v1.1 SystemConfig
|
|
82
|
+
*/
|
|
83
|
+
function migrateV1ToV1_1(v1Config) {
|
|
84
|
+
const warnings = [];
|
|
85
|
+
const servers = {};
|
|
86
|
+
// Convert each v1 server to a v1.1 server
|
|
87
|
+
for (const [serverName, serverConfig] of Object.entries(v1Config.servers || {})) {
|
|
88
|
+
const template = convertToServerTemplate(serverConfig);
|
|
89
|
+
const instance = convertToServerInstance(serverConfig, serverName);
|
|
90
|
+
servers[serverName] = {
|
|
91
|
+
template,
|
|
92
|
+
instances: [instance],
|
|
93
|
+
tagDefinitions: []
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Ensure all server instances have proper indexes
|
|
97
|
+
for (const serverName of Object.keys(servers)) {
|
|
98
|
+
reassignServerInstanceIndexes(serverName, servers);
|
|
99
|
+
}
|
|
100
|
+
const v1_1Config = {
|
|
101
|
+
version: '1.1.0',
|
|
102
|
+
system: v1Config.system,
|
|
103
|
+
security: v1Config.security,
|
|
104
|
+
servers,
|
|
105
|
+
tagDefinitions: []
|
|
106
|
+
};
|
|
107
|
+
return { config: v1_1Config, warnings };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Validates a configuration against the schema
|
|
111
|
+
*/
|
|
112
|
+
function validateConfig(config) {
|
|
113
|
+
try {
|
|
114
|
+
SystemConfigSchema.parse(config);
|
|
115
|
+
return { valid: true };
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return {
|
|
119
|
+
valid: false,
|
|
120
|
+
errors: error instanceof Error ? error.message : String(error)
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Loads and parses a configuration file
|
|
126
|
+
*/
|
|
127
|
+
function loadConfigFile(configPath) {
|
|
128
|
+
if (!existsSync(configPath)) {
|
|
129
|
+
throw new Error(`Configuration file not found: ${configPath}`);
|
|
130
|
+
}
|
|
131
|
+
const content = readFileSync(configPath, 'utf8');
|
|
132
|
+
try {
|
|
133
|
+
return JSON.parse(content);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw new Error(`Failed to parse configuration file: ${error instanceof Error ? error.message : String(error)}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Saves a configuration file
|
|
141
|
+
*/
|
|
142
|
+
function saveConfigFile(configPath, config) {
|
|
143
|
+
const dir = dirname(configPath);
|
|
144
|
+
if (!existsSync(dir)) {
|
|
145
|
+
mkdirSync(dir, { recursive: true });
|
|
146
|
+
}
|
|
147
|
+
const content = JSON.stringify(config, null, 2);
|
|
148
|
+
writeFileSync(configPath, content, 'utf8');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Main migration function that migrates a configuration from v1.0 to v1.1
|
|
152
|
+
*
|
|
153
|
+
* @param configPath Path to the configuration file
|
|
154
|
+
* @param options Migration options
|
|
155
|
+
* @returns Migration result with backup path and migrated config
|
|
156
|
+
*/
|
|
157
|
+
export function migrateConfig(configPath, options = {}) {
|
|
158
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
159
|
+
const result = {
|
|
160
|
+
success: false,
|
|
161
|
+
warnings: []
|
|
162
|
+
};
|
|
163
|
+
try {
|
|
164
|
+
// Load and validate source config
|
|
165
|
+
const sourceConfig = loadConfigFile(configPath);
|
|
166
|
+
// Check if already v1.1
|
|
167
|
+
if (!isLegacyV1Config(sourceConfig)) {
|
|
168
|
+
result.success = true;
|
|
169
|
+
result.warnings.push('Configuration is already in v1.1 format');
|
|
170
|
+
result.migratedConfig = sourceConfig;
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
// Create backup if requested
|
|
174
|
+
let backupPath = null;
|
|
175
|
+
if (opts.createBackup) {
|
|
176
|
+
backupPath = createBackup(configPath);
|
|
177
|
+
if (backupPath) {
|
|
178
|
+
result.backupPath = backupPath;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
result.warnings.push('Failed to create backup file');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Perform migration
|
|
185
|
+
const v1Config = sourceConfig;
|
|
186
|
+
const { config: migratedConfig, warnings } = migrateV1ToV1_1(v1Config);
|
|
187
|
+
result.warnings.push(...warnings);
|
|
188
|
+
// Validate migrated config
|
|
189
|
+
if (opts.validateAfterMigration) {
|
|
190
|
+
const validation = validateConfig(migratedConfig);
|
|
191
|
+
if (!validation.valid) {
|
|
192
|
+
result.error = `Migrated configuration validation failed: ${validation.errors}`;
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Save if not dry run
|
|
197
|
+
if (!opts.dryRun) {
|
|
198
|
+
saveConfigFile(configPath, migratedConfig);
|
|
199
|
+
}
|
|
200
|
+
result.success = true;
|
|
201
|
+
result.migratedConfig = migratedConfig;
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
result.error = error instanceof Error ? error.message : String(error);
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Performs a dry run of the migration without modifying files
|
|
211
|
+
*
|
|
212
|
+
* @param configPath Path to the configuration file
|
|
213
|
+
* @returns Migration result with what would happen
|
|
214
|
+
*/
|
|
215
|
+
export function dryRunMigration(configPath) {
|
|
216
|
+
return migrateConfig(configPath, {
|
|
217
|
+
dryRun: true,
|
|
218
|
+
createBackup: false,
|
|
219
|
+
validateAfterMigration: true
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Rolls back a migration using a backup file
|
|
224
|
+
*
|
|
225
|
+
* @param configPath Path to the current configuration file
|
|
226
|
+
* @param backupPath Path to the backup file
|
|
227
|
+
* @returns Success status and any error message
|
|
228
|
+
*/
|
|
229
|
+
export function rollbackMigration(configPath, backupPath) {
|
|
230
|
+
try {
|
|
231
|
+
if (!existsSync(backupPath)) {
|
|
232
|
+
return {
|
|
233
|
+
success: false,
|
|
234
|
+
error: `Backup file not found: ${backupPath}`
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
const backupContent = readFileSync(backupPath, 'utf8');
|
|
238
|
+
const dir = dirname(configPath);
|
|
239
|
+
if (!existsSync(dir)) {
|
|
240
|
+
mkdirSync(dir, { recursive: true });
|
|
241
|
+
}
|
|
242
|
+
writeFileSync(configPath, backupContent, 'utf8');
|
|
243
|
+
return { success: true };
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
return {
|
|
247
|
+
success: false,
|
|
248
|
+
error: error instanceof Error ? error.message : String(error)
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Checks the migration status of a configuration file
|
|
254
|
+
*
|
|
255
|
+
* @param configPath Path to the configuration file
|
|
256
|
+
* @returns Status information
|
|
257
|
+
*/
|
|
258
|
+
export function checkMigrationStatus(configPath) {
|
|
259
|
+
if (!existsSync(configPath)) {
|
|
260
|
+
return {
|
|
261
|
+
exists: false,
|
|
262
|
+
version: 'unknown',
|
|
263
|
+
canMigrate: false,
|
|
264
|
+
message: 'Configuration file does not exist'
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
try {
|
|
268
|
+
const config = loadConfigFile(configPath);
|
|
269
|
+
if (!isLegacyV1Config(config)) {
|
|
270
|
+
return {
|
|
271
|
+
exists: true,
|
|
272
|
+
version: 'v1.1',
|
|
273
|
+
canMigrate: false,
|
|
274
|
+
message: 'Configuration is already in v1.1 format'
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
exists: true,
|
|
279
|
+
version: 'v1',
|
|
280
|
+
canMigrate: true,
|
|
281
|
+
message: 'Configuration is in v1.0 format and can be migrated'
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
return {
|
|
286
|
+
exists: true,
|
|
287
|
+
version: 'unknown',
|
|
288
|
+
canMigrate: false,
|
|
289
|
+
message: `Error reading configuration: ${error instanceof Error ? error.message : String(error)}`
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// ====== v1.1 Configuration Helpers ======
|
|
294
|
+
/**
|
|
295
|
+
* Resolves a server instance configuration by merging template and instance overrides
|
|
296
|
+
*
|
|
297
|
+
* @param serverConfig The server configuration with template and instances
|
|
298
|
+
* @param instanceId Optional instance ID (uses first enabled instance if not provided)
|
|
299
|
+
* @returns The resolved server configuration
|
|
300
|
+
*/
|
|
301
|
+
export function resolveInstanceConfig(serverConfig, instanceId) {
|
|
302
|
+
const { template, instances } = serverConfig;
|
|
303
|
+
// Find the target instance
|
|
304
|
+
let targetInstance;
|
|
305
|
+
if (instanceId) {
|
|
306
|
+
targetInstance = instances.find((inst) => inst.id === instanceId);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
// Use first enabled instance
|
|
310
|
+
targetInstance = instances.find((inst) => inst.enabled !== false);
|
|
311
|
+
}
|
|
312
|
+
if (!targetInstance) {
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
// Merge template with instance overrides
|
|
316
|
+
return {
|
|
317
|
+
command: template.command,
|
|
318
|
+
args: [...(template.args || []), ...(targetInstance.args || [])],
|
|
319
|
+
env: { ...template.env, ...targetInstance.env },
|
|
320
|
+
headers: { ...template.headers, ...targetInstance.headers },
|
|
321
|
+
proxy: targetInstance.proxy || template.proxy,
|
|
322
|
+
type: template.type,
|
|
323
|
+
timeout: template.timeout,
|
|
324
|
+
url: template.url,
|
|
325
|
+
aggregatedTools: template.aggregatedTools,
|
|
326
|
+
tags: targetInstance.tags,
|
|
327
|
+
enabled: targetInstance.enabled !== false,
|
|
328
|
+
description: template.description
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Gets all enabled instances for a server
|
|
333
|
+
*
|
|
334
|
+
* @param serverConfig The server configuration
|
|
335
|
+
* @returns Array of enabled instances with resolved configs
|
|
336
|
+
*/
|
|
337
|
+
export function getEnabledInstances(serverConfig) {
|
|
338
|
+
const result = [];
|
|
339
|
+
for (const instance of serverConfig.instances) {
|
|
340
|
+
if (instance.enabled !== false) {
|
|
341
|
+
const resolved = resolveInstanceConfig(serverConfig, instance.id);
|
|
342
|
+
if (resolved) {
|
|
343
|
+
result.push({ instance, resolved });
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return result;
|
|
348
|
+
}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* creating the directory structure if it doesn't exist. Errors during the save
|
|
10
10
|
* operation are silently ignored to prevent crashes during normal operation.
|
|
11
11
|
*
|
|
12
|
+
* All empty values and empty objects are preserved as-is in the output.
|
|
13
|
+
*
|
|
12
14
|
* @param configPath - Path to save the configuration file
|
|
13
15
|
* @param config - The configuration object to save
|
|
14
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-saver.d.ts","sourceRoot":"","sources":["../../../../src/config/config-saver.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"config-saver.d.ts","sourceRoot":"","sources":["../../../../src/config/config-saver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAYpE"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import path from 'path';
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
import { LOG_MODULES } from '../utils/logger/log-modules.js';
|
|
7
9
|
/**
|
|
8
10
|
* Saves the configuration to disk at the specified path.
|
|
9
11
|
*
|
|
@@ -11,18 +13,22 @@ import path from 'path';
|
|
|
11
13
|
* creating the directory structure if it doesn't exist. Errors during the save
|
|
12
14
|
* operation are silently ignored to prevent crashes during normal operation.
|
|
13
15
|
*
|
|
16
|
+
* All empty values and empty objects are preserved as-is in the output.
|
|
17
|
+
*
|
|
14
18
|
* @param configPath - Path to save the configuration file
|
|
15
19
|
* @param config - The configuration object to save
|
|
16
20
|
*/
|
|
17
21
|
export function saveConfig(configPath, config) {
|
|
18
22
|
try {
|
|
23
|
+
logger.debug(`Saving configuration to: ${configPath}`, LOG_MODULES.CONFIG_SAVER);
|
|
19
24
|
const dir = path.dirname(configPath);
|
|
20
25
|
if (!fs.existsSync(dir)) {
|
|
21
26
|
fs.mkdirSync(dir, { recursive: true });
|
|
22
27
|
}
|
|
23
28
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
29
|
+
logger.debug(`Configuration saved successfully`, LOG_MODULES.CONFIG_SAVER);
|
|
24
30
|
}
|
|
25
|
-
catch {
|
|
26
|
-
|
|
31
|
+
catch (error) {
|
|
32
|
+
logger.error(`Failed to save configuration:`, error, LOG_MODULES.CONFIG_SAVER);
|
|
27
33
|
}
|
|
28
34
|
}
|
|
@@ -1,110 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { LogLevel } from '../../shared/types/common.types.js';
|
|
1
|
+
import { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema, type SystemConfig, type ServerConfig, type ServerTemplate, type ServerInstance, type ServerInstanceUpdate, type TagDefinition, type ServerInstanceConfig, type ServerRuntimeConfig } from '../../shared/models/server.model.js';
|
|
3
2
|
/**
|
|
4
3
|
* MCP Server Configuration Schema
|
|
5
|
-
* Simplified
|
|
4
|
+
* Simplified v1.1 only - No v1.0 compatibility
|
|
5
|
+
*
|
|
6
|
+
* Note: All core schemas are now defined in @shared-models/server.model.ts
|
|
7
|
+
* This file re-exports them for backward compatibility and retains
|
|
8
|
+
* TransportType constants and legacy helper functions.
|
|
6
9
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
10
|
-
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
11
|
-
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
12
|
-
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
-
tags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
14
|
-
type: z.ZodDefault<z.ZodEnum<{
|
|
15
|
-
stdio: "stdio";
|
|
16
|
-
sse: "sse";
|
|
17
|
-
"streamable-http": "streamable-http";
|
|
18
|
-
http: "http";
|
|
19
|
-
}>>;
|
|
20
|
-
timeout: z.ZodDefault<z.ZodNumber>;
|
|
21
|
-
url: z.ZodOptional<z.ZodString>;
|
|
22
|
-
allowedTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
23
|
-
description: z.ZodOptional<z.ZodString>;
|
|
24
|
-
}, z.core.$strip>;
|
|
25
|
-
export declare const ServerInstanceConfigSchema: z.ZodObject<{
|
|
26
|
-
id: z.ZodString;
|
|
27
|
-
timestamp: z.ZodNumber;
|
|
28
|
-
hash: z.ZodString;
|
|
29
|
-
pid: z.ZodOptional<z.ZodNumber>;
|
|
30
|
-
startTime: z.ZodOptional<z.ZodNumber>;
|
|
31
|
-
}, z.core.$strip>;
|
|
10
|
+
export { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema };
|
|
11
|
+
export type { SystemConfig, ServerConfig, ServerTemplate, ServerInstance, ServerInstanceUpdate, TagDefinition, ServerInstanceConfig, ServerRuntimeConfig };
|
|
32
12
|
/**
|
|
33
|
-
*
|
|
13
|
+
* Simplified type guard - only check for legacy v1.0 format for migration
|
|
34
14
|
*/
|
|
35
|
-
export declare
|
|
36
|
-
level: z.ZodDefault<z.ZodCustom<LogLevel, LogLevel>>;
|
|
37
|
-
rotationAge: z.ZodDefault<z.ZodString>;
|
|
38
|
-
jsonPretty: z.ZodDefault<z.ZodBoolean>;
|
|
39
|
-
mcpCommDebug: z.ZodDefault<z.ZodBoolean>;
|
|
40
|
-
sessionDebug: z.ZodDefault<z.ZodBoolean>;
|
|
41
|
-
}, z.core.$strip>>;
|
|
42
|
-
/**
|
|
43
|
-
* Security Configuration Schema
|
|
44
|
-
*/
|
|
45
|
-
export declare const SecurityConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
46
|
-
allowedNetworks: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
47
|
-
maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
|
|
48
|
-
connectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
49
|
-
idleConnectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
50
|
-
sessionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
51
|
-
sessionFlushInterval: z.ZodDefault<z.ZodNumber>;
|
|
52
|
-
maxConnections: z.ZodDefault<z.ZodNumber>;
|
|
53
|
-
}, z.core.$strip>>;
|
|
54
|
-
/**
|
|
55
|
-
* System Configuration Schema
|
|
56
|
-
*/
|
|
57
|
-
export declare const SystemConfigSchema: z.ZodObject<{
|
|
58
|
-
version: z.ZodDefault<z.ZodString>;
|
|
59
|
-
system: z.ZodDefault<z.ZodObject<{
|
|
60
|
-
host: z.ZodDefault<z.ZodString>;
|
|
61
|
-
port: z.ZodDefault<z.ZodNumber>;
|
|
62
|
-
language: z.ZodDefault<z.ZodEnum<{
|
|
63
|
-
zh: "zh";
|
|
64
|
-
en: "en";
|
|
65
|
-
}>>;
|
|
66
|
-
theme: z.ZodDefault<z.ZodEnum<{
|
|
67
|
-
light: "light";
|
|
68
|
-
dark: "dark";
|
|
69
|
-
system: "system";
|
|
70
|
-
}>>;
|
|
71
|
-
logging: z.ZodDefault<z.ZodObject<{
|
|
72
|
-
level: z.ZodDefault<z.ZodCustom<LogLevel, LogLevel>>;
|
|
73
|
-
rotationAge: z.ZodDefault<z.ZodString>;
|
|
74
|
-
jsonPretty: z.ZodDefault<z.ZodBoolean>;
|
|
75
|
-
mcpCommDebug: z.ZodDefault<z.ZodBoolean>;
|
|
76
|
-
sessionDebug: z.ZodDefault<z.ZodBoolean>;
|
|
77
|
-
}, z.core.$strip>>;
|
|
78
|
-
}, z.core.$strip>>;
|
|
79
|
-
security: z.ZodDefault<z.ZodObject<{
|
|
80
|
-
allowedNetworks: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
81
|
-
maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
|
|
82
|
-
connectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
83
|
-
idleConnectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
84
|
-
sessionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
85
|
-
sessionFlushInterval: z.ZodDefault<z.ZodNumber>;
|
|
86
|
-
maxConnections: z.ZodDefault<z.ZodNumber>;
|
|
87
|
-
}, z.core.$strip>>;
|
|
88
|
-
servers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
89
|
-
command: z.ZodOptional<z.ZodString>;
|
|
90
|
-
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
91
|
-
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
92
|
-
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
93
|
-
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
94
|
-
tags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
95
|
-
type: z.ZodDefault<z.ZodEnum<{
|
|
96
|
-
stdio: "stdio";
|
|
97
|
-
sse: "sse";
|
|
98
|
-
"streamable-http": "streamable-http";
|
|
99
|
-
http: "http";
|
|
100
|
-
}>>;
|
|
101
|
-
timeout: z.ZodDefault<z.ZodNumber>;
|
|
102
|
-
url: z.ZodOptional<z.ZodString>;
|
|
103
|
-
allowedTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
104
|
-
description: z.ZodOptional<z.ZodString>;
|
|
105
|
-
}, z.core.$strip>>>;
|
|
106
|
-
}, z.core.$strip>;
|
|
107
|
-
export type SystemConfig = z.infer<typeof SystemConfigSchema>;
|
|
108
|
-
export type ServerConfig = z.infer<typeof ServerConfigSchema>;
|
|
109
|
-
export type ServerInstanceConfig = z.infer<typeof ServerInstanceConfigSchema>;
|
|
15
|
+
export declare function isLegacyV1Config(config: unknown): boolean;
|
|
110
16
|
//# sourceMappingURL=config.schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAExC;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC3B,CAAC;AAEF,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACpB,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAIzD"}
|
|
@@ -1,104 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema } from '../../shared/models/server.model.js';
|
|
2
2
|
/**
|
|
3
3
|
* MCP Server Configuration Schema
|
|
4
|
-
* Simplified
|
|
4
|
+
* Simplified v1.1 only - No v1.0 compatibility
|
|
5
|
+
*
|
|
6
|
+
* Note: All core schemas are now defined in @shared-models/server.model.ts
|
|
7
|
+
* This file re-exports them for backward compatibility and retains
|
|
8
|
+
* TransportType constants and legacy helper functions.
|
|
5
9
|
*/
|
|
6
|
-
//
|
|
7
|
-
export
|
|
8
|
-
command: z.string().optional(),
|
|
9
|
-
args: z.array(z.string()).default([]),
|
|
10
|
-
env: z.record(z.string(), z.string()).optional(),
|
|
11
|
-
headers: z.record(z.string(), z.string()).optional(),
|
|
12
|
-
enabled: z.boolean().default(true),
|
|
13
|
-
tags: z.record(z.string(), z.string()).optional(),
|
|
14
|
-
type: z.enum(['stdio', 'sse', 'streamable-http', 'http']).default('stdio'),
|
|
15
|
-
timeout: z.number().default(60000),
|
|
16
|
-
url: z.string().optional(),
|
|
17
|
-
allowedTools: z.array(z.string()).default([]),
|
|
18
|
-
description: z.string().optional()
|
|
19
|
-
});
|
|
20
|
-
// Server instance schema (each instance contains id, timestamp, hash)
|
|
21
|
-
export const ServerInstanceConfigSchema = z.object({
|
|
22
|
-
id: z.string(),
|
|
23
|
-
timestamp: z.number(), // Startup time
|
|
24
|
-
hash: z.string(),
|
|
25
|
-
pid: z.number().optional(), // Process ID
|
|
26
|
-
startTime: z.number().optional() // Startup time (same as timestamp, for compatibility)
|
|
27
|
-
});
|
|
10
|
+
// Re-export shared types for backward compatibility
|
|
11
|
+
export { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema };
|
|
28
12
|
/**
|
|
29
|
-
*
|
|
13
|
+
* Simplified type guard - only check for legacy v1.0 format for migration
|
|
30
14
|
*/
|
|
31
|
-
export
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
sessionDebug: z.boolean().default(false) // Enable session debug logging
|
|
38
|
-
})
|
|
39
|
-
.default({
|
|
40
|
-
level: 'info',
|
|
41
|
-
rotationAge: '7d',
|
|
42
|
-
jsonPretty: true,
|
|
43
|
-
mcpCommDebug: false,
|
|
44
|
-
sessionDebug: false
|
|
45
|
-
});
|
|
46
|
-
/**
|
|
47
|
-
* Security Configuration Schema
|
|
48
|
-
*/
|
|
49
|
-
export const SecurityConfigSchema = z
|
|
50
|
-
.object({
|
|
51
|
-
allowedNetworks: z
|
|
52
|
-
.array(z.string())
|
|
53
|
-
.default(['127.0.0.1', '192.168.0.0/16', '10.0.0.0/8', '172.16.0.0/12']),
|
|
54
|
-
maxConcurrentConnections: z.number().min(1).max(1000).default(50),
|
|
55
|
-
connectionTimeout: z.number().min(1000).default(30000),
|
|
56
|
-
idleConnectionTimeout: z.number().min(30000).default(300000),
|
|
57
|
-
sessionTimeout: z
|
|
58
|
-
.number()
|
|
59
|
-
.min(60000)
|
|
60
|
-
.default(30 * 60 * 1000), // Default 30 minutes, min 1 minute
|
|
61
|
-
sessionFlushInterval: z
|
|
62
|
-
.number()
|
|
63
|
-
.min(1000)
|
|
64
|
-
.default(15 * 60 * 1000), // Default 15 minutes, min 1 second
|
|
65
|
-
maxConnections: z.number().min(1).max(1000).default(50)
|
|
66
|
-
})
|
|
67
|
-
.default({
|
|
68
|
-
allowedNetworks: ['127.0.0.1', '192.168.0.0/16', '10.0.0.0/8', '172.16.0.0/12'],
|
|
69
|
-
maxConcurrentConnections: 50,
|
|
70
|
-
connectionTimeout: 30000,
|
|
71
|
-
idleConnectionTimeout: 300000,
|
|
72
|
-
sessionTimeout: 30 * 60 * 1000,
|
|
73
|
-
sessionFlushInterval: 15 * 60 * 1000,
|
|
74
|
-
maxConnections: 50
|
|
75
|
-
});
|
|
76
|
-
/**
|
|
77
|
-
* System Configuration Schema
|
|
78
|
-
*/
|
|
79
|
-
export const SystemConfigSchema = z.object({
|
|
80
|
-
version: z.string().default('1.0.0'),
|
|
81
|
-
system: z
|
|
82
|
-
.object({
|
|
83
|
-
host: z.string().default('localhost'),
|
|
84
|
-
port: z.number().default(7788),
|
|
85
|
-
language: z.enum(['zh', 'en']).default('zh'),
|
|
86
|
-
theme: z.enum(['light', 'dark', 'system']).default('system'),
|
|
87
|
-
logging: LoggingConfigSchema
|
|
88
|
-
})
|
|
89
|
-
.default({
|
|
90
|
-
host: 'localhost',
|
|
91
|
-
port: 7788,
|
|
92
|
-
language: 'zh',
|
|
93
|
-
theme: 'system',
|
|
94
|
-
logging: {
|
|
95
|
-
level: 'info',
|
|
96
|
-
rotationAge: '7d',
|
|
97
|
-
jsonPretty: true,
|
|
98
|
-
mcpCommDebug: false,
|
|
99
|
-
sessionDebug: false
|
|
100
|
-
}
|
|
101
|
-
}),
|
|
102
|
-
security: SecurityConfigSchema,
|
|
103
|
-
servers: z.record(z.string(), ServerConfigSchema).default({})
|
|
104
|
-
});
|
|
15
|
+
export function isLegacyV1Config(config) {
|
|
16
|
+
if (typeof config !== 'object' || config === null)
|
|
17
|
+
return false;
|
|
18
|
+
const c = config;
|
|
19
|
+
return c.version !== '1.1.0';
|
|
20
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path validation utilities for configuration files.
|
|
3
|
+
* Provides basic path validation to prevent path traversal attacks.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Validates that a path is within an allowed directory.
|
|
7
|
+
*
|
|
8
|
+
* @param configPath - The path to validate
|
|
9
|
+
* @param allowedDirs - Array of allowed parent directories
|
|
10
|
+
* @returns true if path is valid, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
export declare function isValidConfigPath(configPath: string, allowedDirs: string[]): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Ensures a path is absolute and normalized.
|
|
15
|
+
*
|
|
16
|
+
* @param configPath - The path to sanitize
|
|
17
|
+
* @returns Normalized absolute path
|
|
18
|
+
*/
|
|
19
|
+
export declare function sanitizeConfigPath(configPath: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Validates that a filename doesn't contain path traversal characters.
|
|
22
|
+
*
|
|
23
|
+
* @param filename - The filename to validate
|
|
24
|
+
* @returns true if filename is safe, false otherwise
|
|
25
|
+
*/
|
|
26
|
+
export declare function isSafeFilename(filename: string): boolean;
|
|
27
|
+
//# sourceMappingURL=path-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-validator.d.ts","sourceRoot":"","sources":["../../../../src/config/path-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAepF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASxD"}
|