@loop_ouroboros/mcp-hub-lite 1.0.2 → 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 +32 -0
- package/dist/client/assets/{HomeView-7rMg9C6t.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-5q1b0P3O.js → _baseClone-Bp9Rjwd7.js} +1 -1
- 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-H85n3BUC.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-DPsOVNIJ.js → omit-CqPQN3XP.js} +1 -1
- package/dist/client/assets/{raf-DY5mgbuB.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 +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/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 +19 -50
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
- package/dist/server/src/api/mcp/session-context-extractor.js +5 -14
- 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/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 +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 +10 -81
- 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 +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/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 -585
- package/dist/server/src/services/session-tracker.service.d.ts +2 -10
- package/dist/server/src/services/session-tracker.service.d.ts.map +1 -1
- package/dist/server/src/services/session-tracker.service.js +2 -53
- 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/request-context.d.ts +0 -18
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +0 -20
- 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/evaluation/evaluation.test.js +10 -9
- package/dist/server/tests/integration/api/gateway.test.js +2 -2
- 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/request-context.test.js +5 -24
- 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-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/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/vnode-CHomNjgN.js +0 -1
|
@@ -84,8 +84,8 @@ export const listCommand = new Command('list')
|
|
|
84
84
|
Name: server.name,
|
|
85
85
|
// Now need to display server instance information
|
|
86
86
|
Instances: server.instances?.length || 0,
|
|
87
|
-
Type: server.config.type,
|
|
88
|
-
Enabled: server.config.enabled
|
|
87
|
+
Type: server.config.template.type,
|
|
88
|
+
Enabled: server.config.instances.some((i) => i.enabled !== false)
|
|
89
89
|
})));
|
|
90
90
|
}
|
|
91
91
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,aAAa,SAYtB,CAAC"}
|
|
@@ -82,38 +82,49 @@ function printFormattedStatus(status) {
|
|
|
82
82
|
console.log(`📡 Web UI: ${cyan}${webUiUrl}${reset}`);
|
|
83
83
|
console.log(`🔗 MCP Endpoint: ${cyan}${mcpEndpoint}${reset}`);
|
|
84
84
|
console.log(`📄 PID File: ${dim}${formatPath(status.pidFilePath)}${reset}`);
|
|
85
|
-
// MCP Servers section
|
|
85
|
+
// MCP Servers section - split into connected and disconnected
|
|
86
86
|
if (status.mcpServers && status.mcpServers.length > 0) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
console.log(`${dim}${'─'.repeat(maxNameLen + maxTypeLen + maxStatusLen + 20)}${reset}`);
|
|
104
|
-
for (const server of status.mcpServers) {
|
|
105
|
-
const name = (server.name || '').padEnd(maxNameLen);
|
|
106
|
-
const type = (server.type || '').padEnd(maxTypeLen);
|
|
107
|
-
const statusText = server.connected
|
|
108
|
-
? `${green}Connected${reset}`.padEnd(maxStatusLen + 9)
|
|
109
|
-
: `${red}Disconnected${reset}`.padEnd(maxStatusLen + 9);
|
|
110
|
-
const tools = server.toolsCount.toString().padStart(5);
|
|
111
|
-
const resources = server.resourcesCount.toString().padStart(9);
|
|
112
|
-
console.log(`${name} ${type} ${statusText} ${tools} ${resources}`);
|
|
113
|
-
if (server.error) {
|
|
114
|
-
console.log(` ${red}Error: ${server.error}${reset}`);
|
|
87
|
+
const connectedServers = status.mcpServers.filter((s) => s.connected);
|
|
88
|
+
const disconnectedServers = status.mcpServers.filter((s) => !s.connected);
|
|
89
|
+
// Function to display a server list
|
|
90
|
+
const displayServerList = (servers, title, titleColor) => {
|
|
91
|
+
if (servers.length === 0)
|
|
92
|
+
return;
|
|
93
|
+
console.log('');
|
|
94
|
+
console.log(`${titleColor}${title}${reset}`);
|
|
95
|
+
console.log(`${dim}${'═'.repeat(title.length)}${reset}`);
|
|
96
|
+
// Calculate column widths
|
|
97
|
+
let maxNameLen = 'Server Name'.length;
|
|
98
|
+
let maxTypeLen = 'Type'.length;
|
|
99
|
+
const maxStatusLen = 'Disconnected'.length;
|
|
100
|
+
for (const server of servers) {
|
|
101
|
+
maxNameLen = Math.max(maxNameLen, (server.name || '').length);
|
|
102
|
+
maxTypeLen = Math.max(maxTypeLen, (server.type || '').length);
|
|
115
103
|
}
|
|
116
|
-
|
|
104
|
+
// Simple table without complex borders
|
|
105
|
+
const headerName = 'Server Name'.padEnd(maxNameLen);
|
|
106
|
+
const headerType = 'Type'.padEnd(maxTypeLen);
|
|
107
|
+
const headerStatus = 'Status'.padEnd(maxStatusLen);
|
|
108
|
+
console.log(`${cyan}${headerName} ${headerType} ${headerStatus} Tools Resources${reset}`);
|
|
109
|
+
console.log(`${dim}${'─'.repeat(maxNameLen + maxTypeLen + maxStatusLen + 20)}${reset}`);
|
|
110
|
+
for (const server of servers) {
|
|
111
|
+
const name = (server.name || '').padEnd(maxNameLen);
|
|
112
|
+
const type = (server.type || '').padEnd(maxTypeLen);
|
|
113
|
+
const statusText = server.connected
|
|
114
|
+
? `${green}Connected${reset}`.padEnd(maxStatusLen + 9)
|
|
115
|
+
: `${red}Disconnected${reset}`.padEnd(maxStatusLen + 9);
|
|
116
|
+
const tools = server.toolsCount.toString().padStart(5);
|
|
117
|
+
const resources = server.resourcesCount.toString().padStart(9);
|
|
118
|
+
console.log(`${name} ${type} ${statusText} ${tools} ${resources}`);
|
|
119
|
+
if (server.error) {
|
|
120
|
+
console.log(` ${red}Error: ${server.error}${reset}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
// Display connected servers first
|
|
125
|
+
displayServerList(connectedServers, 'MCP Servers (Connected):', green);
|
|
126
|
+
// Then display disconnected servers
|
|
127
|
+
displayServerList(disconnectedServers, 'MCP Servers (Disconnected):', red);
|
|
117
128
|
}
|
|
118
129
|
// MCP Client Configuration
|
|
119
130
|
console.log('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAiBnC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import { argv } from 'node:process';
|
|
8
8
|
import { pathToFileURL } from 'node:url';
|
|
9
|
+
import { getAppVersion } from '../utils/version.js';
|
|
9
10
|
import { startCommand } from './commands/start.js';
|
|
10
11
|
import { stopCommand } from './commands/stop.js';
|
|
11
12
|
import { statusCommand } from './commands/status.js';
|
|
@@ -71,7 +72,7 @@ export function createCli() {
|
|
|
71
72
|
program
|
|
72
73
|
.name('mcp-hub-lite')
|
|
73
74
|
.description('Lightweight MCP Gateway for managing MCP servers')
|
|
74
|
-
.version(
|
|
75
|
+
.version(process.env.npm_package_version ?? getAppVersion(), '-v, --version');
|
|
75
76
|
// Register all core commands
|
|
76
77
|
program.addCommand(startCommand);
|
|
77
78
|
program.addCommand(stopCommand);
|
|
@@ -159,10 +159,19 @@ export declare function restartServer(options: ServerOptions): Promise<void>;
|
|
|
159
159
|
export declare function listServers(): Promise<{
|
|
160
160
|
instances: {
|
|
161
161
|
id: string;
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
enabled: boolean;
|
|
163
|
+
args: string[];
|
|
164
|
+
env: Record<string, string>;
|
|
165
|
+
headers: Record<string, string>;
|
|
166
|
+
tags: Record<string, string>;
|
|
167
|
+
index?: number | undefined;
|
|
168
|
+
displayName?: string | undefined;
|
|
169
|
+
timestamp?: number | undefined;
|
|
164
170
|
pid?: number | undefined;
|
|
165
171
|
startTime?: number | undefined;
|
|
172
|
+
proxy?: {
|
|
173
|
+
url: string;
|
|
174
|
+
} | undefined;
|
|
166
175
|
}[];
|
|
167
176
|
name: string;
|
|
168
177
|
config: import("../config/config-manager.js").ServerConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/cli/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,iBAO5C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0CjF;AAgED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/cli/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,iBAO5C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0CjF;AAgED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW;;;;;;;;;;;;;;;;;;;KAUhC"}
|
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
* Handles comparison and logging of configuration changes.
|
|
4
4
|
*/
|
|
5
5
|
import type { SystemConfig } from './config.schema.js';
|
|
6
|
+
/**
|
|
7
|
+
* Gets the changes between two objects.
|
|
8
|
+
*
|
|
9
|
+
* This function performs a deep comparison of two objects
|
|
10
|
+
* and returns all changes at the field level.
|
|
11
|
+
*
|
|
12
|
+
* @param oldObj - The original object
|
|
13
|
+
* @param newObj - The new object
|
|
14
|
+
* @returns An array of change strings
|
|
15
|
+
*/
|
|
16
|
+
export declare function getObjectChanges(oldObj: unknown, newObj: unknown): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Logs object changes with a custom title.
|
|
19
|
+
*
|
|
20
|
+
* @param title - The title to display before the changes
|
|
21
|
+
* @param oldObj - The original object
|
|
22
|
+
* @param newObj - The new object
|
|
23
|
+
* @param logModule - The log module to use
|
|
24
|
+
*/
|
|
25
|
+
export declare function logObjectChangesWithTitle(title: string, oldObj: unknown, newObj: unknown, logModule?: {
|
|
26
|
+
module: string;
|
|
27
|
+
}): void;
|
|
6
28
|
/**
|
|
7
29
|
* Logs the differences between two system configurations.
|
|
8
30
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-change-logger.d.ts","sourceRoot":"","sources":["../../../../src/config/config-change-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"config-change-logger.d.ts","sourceRoot":"","sources":["../../../../src/config/config-change-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgGvD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAwC3E;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,OAAO,EACf,SAAS,GAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAA+B,GACzD,IAAI,CAON;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAOvF"}
|
|
@@ -4,15 +4,102 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Sensitive KEY patterns (case-insensitive).
|
|
8
|
+
* Fields whose key contains any of these patterns will have their values masked.
|
|
9
|
+
*/
|
|
10
|
+
const SENSITIVE_KEY_PATTERNS = [
|
|
11
|
+
'token',
|
|
12
|
+
'key',
|
|
13
|
+
'authorization',
|
|
14
|
+
'secret',
|
|
15
|
+
'password',
|
|
16
|
+
'credential'
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Sensitive VALUE patterns.
|
|
20
|
+
* String values containing any of these patterns will be masked.
|
|
21
|
+
*/
|
|
22
|
+
const SENSITIVE_VALUE_PATTERNS = ['Bearer', 'sk-', 'sk_', 'api_key', 'apikey'];
|
|
23
|
+
/**
|
|
24
|
+
* Checks if a key looks sensitive based on its name.
|
|
8
25
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
26
|
+
* @param key - The key to check
|
|
27
|
+
* @returns True if the key is sensitive
|
|
28
|
+
*/
|
|
29
|
+
function isSensitiveKey(key) {
|
|
30
|
+
const lowerKey = key.toLowerCase();
|
|
31
|
+
return SENSITIVE_KEY_PATTERNS.some((pattern) => lowerKey.includes(pattern));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Checks if a value looks sensitive based on its content.
|
|
11
35
|
*
|
|
12
|
-
* @param
|
|
13
|
-
* @
|
|
36
|
+
* @param value - The value to check
|
|
37
|
+
* @returns True if the value is sensitive
|
|
14
38
|
*/
|
|
15
|
-
|
|
39
|
+
function isSensitiveValue(value) {
|
|
40
|
+
return SENSITIVE_VALUE_PATTERNS.some((pattern) => value.includes(pattern));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Masks a sensitive value while preserving partial visibility.
|
|
44
|
+
* - For values with length < 8: preserves first and last character
|
|
45
|
+
* - For values with length >= 8: preserves first 4 and last 4 characters
|
|
46
|
+
*
|
|
47
|
+
* @param value - The value to mask
|
|
48
|
+
* @returns The masked value
|
|
49
|
+
*/
|
|
50
|
+
function maskSensitiveValue(value) {
|
|
51
|
+
if (value.length < 8) {
|
|
52
|
+
return value[0] + '****' + value[value.length - 1];
|
|
53
|
+
}
|
|
54
|
+
return value.substring(0, 4) + '********' + value.substring(value.length - 4);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Normalizes a URL string by removing trailing slashes.
|
|
58
|
+
*
|
|
59
|
+
* @param url - The URL to normalize
|
|
60
|
+
* @returns Normalized URL
|
|
61
|
+
*/
|
|
62
|
+
function normalizeUrl(url) {
|
|
63
|
+
return url.replace(/\/+$/, '');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Checks if a path looks like a URL field.
|
|
67
|
+
*
|
|
68
|
+
* @param path - The field path to check
|
|
69
|
+
* @returns True if the path looks like a URL field
|
|
70
|
+
*/
|
|
71
|
+
function isUrlField(path) {
|
|
72
|
+
const urlPatterns = [/\.url$/, /^url$/, /\.proxy\.url$/];
|
|
73
|
+
return urlPatterns.some((pattern) => pattern.test(path));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Compares two values with URL normalization support.
|
|
77
|
+
*
|
|
78
|
+
* @param val1 - First value
|
|
79
|
+
* @param val2 - Second value
|
|
80
|
+
* @param path - The field path for context
|
|
81
|
+
* @returns True if values are considered equal
|
|
82
|
+
*/
|
|
83
|
+
function areValuesEqual(val1, val2, path) {
|
|
84
|
+
// Special handling for URL fields
|
|
85
|
+
if (isUrlField(path)) {
|
|
86
|
+
if (typeof val1 === 'string' && typeof val2 === 'string') {
|
|
87
|
+
return normalizeUrl(val1) === normalizeUrl(val2);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return JSON.stringify(val1) === JSON.stringify(val2);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets the changes between two objects.
|
|
94
|
+
*
|
|
95
|
+
* This function performs a deep comparison of two objects
|
|
96
|
+
* and returns all changes at the field level.
|
|
97
|
+
*
|
|
98
|
+
* @param oldObj - The original object
|
|
99
|
+
* @param newObj - The new object
|
|
100
|
+
* @returns An array of change strings
|
|
101
|
+
*/
|
|
102
|
+
export function getObjectChanges(oldObj, newObj) {
|
|
16
103
|
const changes = [];
|
|
17
104
|
const compare = (obj1, obj2, path) => {
|
|
18
105
|
const allKeys = new Set([...Object.keys(obj1 || {}), ...Object.keys(obj2 || {})]);
|
|
@@ -20,7 +107,7 @@ export function logConfigChanges(oldConfig, newConfig) {
|
|
|
20
107
|
const currentPath = path ? `${path}.${key}` : key;
|
|
21
108
|
const val1 = obj1 && typeof obj1 === 'object' ? obj1[key] : undefined;
|
|
22
109
|
const val2 = obj2 && typeof obj2 === 'object' ? obj2[key] : undefined;
|
|
23
|
-
if (
|
|
110
|
+
if (areValuesEqual(val1, val2, currentPath))
|
|
24
111
|
continue;
|
|
25
112
|
if (typeof val1 === 'object' &&
|
|
26
113
|
val1 !== null &&
|
|
@@ -31,13 +118,50 @@ export function logConfigChanges(oldConfig, newConfig) {
|
|
|
31
118
|
compare(val1, val2, currentPath);
|
|
32
119
|
}
|
|
33
120
|
else {
|
|
34
|
-
const formatVal = (v) =>
|
|
35
|
-
|
|
121
|
+
const formatVal = (key, v) => {
|
|
122
|
+
if (v === undefined)
|
|
123
|
+
return 'undefined';
|
|
124
|
+
const str = JSON.stringify(v);
|
|
125
|
+
if (typeof v === 'string' && (isSensitiveKey(key) || isSensitiveValue(v))) {
|
|
126
|
+
return `"${maskSensitiveValue(v)}"`;
|
|
127
|
+
}
|
|
128
|
+
return str;
|
|
129
|
+
};
|
|
130
|
+
changes.push(`${currentPath} = ${formatVal(key, val1)} -> ${formatVal(key, val2)}`);
|
|
36
131
|
}
|
|
37
132
|
}
|
|
38
133
|
};
|
|
39
|
-
compare(
|
|
134
|
+
compare(oldObj, newObj, '');
|
|
135
|
+
return changes;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Logs object changes with a custom title.
|
|
139
|
+
*
|
|
140
|
+
* @param title - The title to display before the changes
|
|
141
|
+
* @param oldObj - The original object
|
|
142
|
+
* @param newObj - The new object
|
|
143
|
+
* @param logModule - The log module to use
|
|
144
|
+
*/
|
|
145
|
+
export function logObjectChangesWithTitle(title, oldObj, newObj, logModule = LOG_MODULES.CONFIG_CHANGES) {
|
|
146
|
+
const changes = getObjectChanges(oldObj, newObj);
|
|
147
|
+
if (changes.length > 0) {
|
|
148
|
+
const message = `${title}\n${changes.join('\n')}`;
|
|
149
|
+
logger.info(message, logModule);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Logs the differences between two system configurations.
|
|
154
|
+
*
|
|
155
|
+
* This function performs a deep comparison of two configuration objects
|
|
156
|
+
* and logs all changes at the field level for audit purposes.
|
|
157
|
+
*
|
|
158
|
+
* @param oldConfig - The original configuration
|
|
159
|
+
* @param newConfig - The new configuration
|
|
160
|
+
*/
|
|
161
|
+
export function logConfigChanges(oldConfig, newConfig) {
|
|
162
|
+
const changes = getObjectChanges(oldConfig, newConfig);
|
|
40
163
|
if (changes.length > 0) {
|
|
41
|
-
|
|
164
|
+
const message = `System Config Changes:\n${changes.join('\n')}`;
|
|
165
|
+
logger.info(message, LOG_MODULES.CONFIG_CHANGES);
|
|
42
166
|
}
|
|
43
167
|
}
|
|
@@ -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
|
}
|