@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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path validation utilities for configuration files.
|
|
3
|
+
* Provides basic path validation to prevent path traversal attacks.
|
|
4
|
+
*/
|
|
5
|
+
import { resolve, normalize } from 'node:path';
|
|
6
|
+
/**
|
|
7
|
+
* Validates that a path is within an allowed directory.
|
|
8
|
+
*
|
|
9
|
+
* @param configPath - The path to validate
|
|
10
|
+
* @param allowedDirs - Array of allowed parent directories
|
|
11
|
+
* @returns true if path is valid, false otherwise
|
|
12
|
+
*/
|
|
13
|
+
export function isValidConfigPath(configPath, allowedDirs) {
|
|
14
|
+
try {
|
|
15
|
+
const normalizedPath = normalize(resolve(configPath));
|
|
16
|
+
for (const allowedDir of allowedDirs) {
|
|
17
|
+
const normalizedAllowedDir = normalize(resolve(allowedDir));
|
|
18
|
+
if (normalizedPath.startsWith(normalizedAllowedDir)) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ensures a path is absolute and normalized.
|
|
30
|
+
*
|
|
31
|
+
* @param configPath - The path to sanitize
|
|
32
|
+
* @returns Normalized absolute path
|
|
33
|
+
*/
|
|
34
|
+
export function sanitizeConfigPath(configPath) {
|
|
35
|
+
return normalize(resolve(configPath));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validates that a filename doesn't contain path traversal characters.
|
|
39
|
+
*
|
|
40
|
+
* @param filename - The filename to validate
|
|
41
|
+
* @returns true if filename is safe, false otherwise
|
|
42
|
+
*/
|
|
43
|
+
export function isSafeFilename(filename) {
|
|
44
|
+
// Block path traversal patterns
|
|
45
|
+
if (filename.includes('..'))
|
|
46
|
+
return false;
|
|
47
|
+
if (filename.includes('/') || filename.includes('\\'))
|
|
48
|
+
return false;
|
|
49
|
+
// Block null bytes
|
|
50
|
+
if (filename.includes('\0'))
|
|
51
|
+
return false;
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
@@ -1,74 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Server configuration management utilities.
|
|
3
|
-
* Handles CRUD operations for server
|
|
2
|
+
* Server configuration management utilities for v1.1 format.
|
|
3
|
+
* Handles CRUD operations for server templates and instances.
|
|
4
4
|
*/
|
|
5
|
-
import type {
|
|
5
|
+
import type { ServerTemplate, ServerInstance, ServerConfig } from './config.schema.js';
|
|
6
6
|
/**
|
|
7
7
|
* Adds multiple server configurations to the system in a single operation.
|
|
8
8
|
*
|
|
9
|
-
* @param servers - Array of server objects containing name and partial configuration
|
|
9
|
+
* @param servers - Array of server objects containing name and partial template configuration
|
|
10
10
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
11
|
-
* @param serverInstances - Current server instances record (will be modified)
|
|
12
11
|
* @returns The updated servers configuration
|
|
13
12
|
*/
|
|
14
13
|
export declare function addServers(servers: Array<{
|
|
15
14
|
name: string;
|
|
16
|
-
config: Partial<
|
|
17
|
-
}>, currentServers: Record<string, ServerConfig
|
|
15
|
+
config: Partial<ServerTemplate>;
|
|
16
|
+
}>, currentServers: Record<string, ServerConfig>): Record<string, ServerConfig>;
|
|
18
17
|
/**
|
|
19
|
-
* Adds a new server configuration to the system.
|
|
18
|
+
* Adds a new server configuration to the system (v1.1 format).
|
|
19
|
+
* Creates a template and a default instance.
|
|
20
20
|
*
|
|
21
21
|
* @param name - The unique name for the server
|
|
22
|
-
* @param config - The server configuration (partial, will be validated)
|
|
22
|
+
* @param config - The server template configuration (partial, will be validated)
|
|
23
23
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
24
|
-
* @
|
|
25
|
-
* @returns The validated and complete server configuration
|
|
24
|
+
* @returns The complete server configuration (v1.1)
|
|
26
25
|
*/
|
|
27
|
-
export declare function addServer(name: string, config: Partial<
|
|
26
|
+
export declare function addServer(name: string, config: Partial<ServerTemplate>, currentServers: Record<string, ServerConfig>): ServerConfig;
|
|
28
27
|
/**
|
|
29
28
|
* Adds a new server instance for the specified server.
|
|
30
29
|
*
|
|
31
30
|
* @param name - The name of the server to add an instance for
|
|
32
31
|
* @param instance - The server instance configuration (partial, will be validated)
|
|
33
|
-
* @param
|
|
32
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
34
33
|
* @returns The validated and complete server instance configuration
|
|
35
34
|
*/
|
|
36
|
-
export declare function addServerInstance(name: string, instance: Partial<
|
|
35
|
+
export declare function addServerInstance(name: string, instance: Partial<ServerInstance>, currentServers: Record<string, ServerConfig>): ServerInstance;
|
|
37
36
|
/**
|
|
38
|
-
*
|
|
37
|
+
* Reassigns server instance indexes to be consecutive (0, 1, 2, ...).
|
|
38
|
+
*
|
|
39
|
+
* @param name - The name of the server to reassign indexes for
|
|
40
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
41
|
+
* @returns True if the server exists and indexes were reassigned
|
|
42
|
+
*/
|
|
43
|
+
export declare function reassignServerInstanceIndexes(name: string, currentServers: Record<string, ServerConfig>): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Updates an existing server configuration (template and/or instance selection strategy).
|
|
39
46
|
*
|
|
40
47
|
* @param name - The name of the server to update
|
|
41
|
-
* @param updates - The partial configuration updates to apply
|
|
48
|
+
* @param updates - The partial server configuration updates to apply (can include template and instanceSelectionStrategy)
|
|
42
49
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
43
|
-
* @returns True if the server was updated
|
|
50
|
+
* @returns True if the server was updated
|
|
44
51
|
*/
|
|
45
|
-
export declare function
|
|
52
|
+
export declare function updateServerTemplate(name: string, updates: Partial<ServerTemplate>, currentServers: Record<string, ServerConfig>): boolean;
|
|
46
53
|
/**
|
|
47
|
-
* Updates an existing server instance configuration
|
|
54
|
+
* Updates an existing server instance configuration.
|
|
48
55
|
*
|
|
49
56
|
* @param name - The name of the server containing the instance to update
|
|
50
|
-
* @param index - The index of the instance to update
|
|
51
|
-
* @param updates - The partial instance
|
|
52
|
-
* @param
|
|
53
|
-
* @returns True if the instance was updated
|
|
57
|
+
* @param index - The index of the instance to update
|
|
58
|
+
* @param updates - The partial instance updates to apply
|
|
59
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
60
|
+
* @returns True if the instance was updated
|
|
54
61
|
*/
|
|
55
|
-
export declare function updateServerInstance(name: string, index: number, updates: Partial<
|
|
62
|
+
export declare function updateServerInstance(name: string, index: number | string, updates: Partial<ServerInstance>, currentServers: Record<string, ServerConfig>): boolean;
|
|
56
63
|
/**
|
|
57
64
|
* Removes a server configuration and all its instances from the system.
|
|
58
65
|
*
|
|
59
66
|
* @param name - The name of the server to remove
|
|
60
67
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
61
|
-
* @
|
|
62
|
-
* @returns True if the server was removed, false if it didn't exist
|
|
68
|
+
* @returns True if the server was removed
|
|
63
69
|
*/
|
|
64
|
-
export declare function removeServer(name: string, currentServers: Record<string, ServerConfig
|
|
70
|
+
export declare function removeServer(name: string, currentServers: Record<string, ServerConfig>): boolean;
|
|
65
71
|
/**
|
|
66
72
|
* Removes a specific server instance from the system.
|
|
67
73
|
*
|
|
68
74
|
* @param name - The name of the server containing the instance to remove
|
|
69
|
-
* @param index - The index of the instance to remove
|
|
70
|
-
* @param
|
|
71
|
-
* @returns True if the instance was removed
|
|
75
|
+
* @param index - The index of the instance to remove
|
|
76
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
77
|
+
* @returns True if the instance was removed
|
|
72
78
|
*/
|
|
73
|
-
export declare function removeServerInstance(name: string, index: number,
|
|
79
|
+
export declare function removeServerInstance(name: string, index: number | string, currentServers: Record<string, ServerConfig>): boolean;
|
|
74
80
|
//# sourceMappingURL=server-config-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config-manager.d.ts","sourceRoot":"","sources":["../../../../src/config/server-config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"server-config-manager.d.ts","sourceRoot":"","sources":["../../../../src/config/server-config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmDvF;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,CAAC,EACjE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CA+B9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,YAAY,CAuCd;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,EACjC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,cAAc,CAahB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,OAAO,CAkBT;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,EAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,OAAO,CAwCT;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,EAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,OAAO,CAiGT;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,OAAO,CAgBhG;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,OAAO,CAeT"}
|
|
@@ -1,118 +1,272 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Server configuration management utilities.
|
|
3
|
-
* Handles CRUD operations for server
|
|
2
|
+
* Server configuration management utilities for v1.1 format.
|
|
3
|
+
* Handles CRUD operations for server templates and instances.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { ServerTemplateSchema, ServerInstanceSchema, ServerConfigSchema } from './config.schema.js';
|
|
6
6
|
import { convertHttpToStreamableHttp } from './type-converter.js';
|
|
7
|
+
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
8
|
+
import { getObjectChanges, logObjectChangesWithTitle } from './config-change-logger.js';
|
|
9
|
+
import { sortServerConfigEnvHeaders } from '../utils/sort-utils.js';
|
|
10
|
+
import { generateInstanceId } from '../utils/instance-id.js';
|
|
7
11
|
/**
|
|
8
|
-
*
|
|
12
|
+
* Creates a default server instance with index assignment.
|
|
9
13
|
*
|
|
10
14
|
* @param serverName - Name of the server
|
|
11
|
-
* @
|
|
15
|
+
* @param existingInstances - Existing instances for index calculation
|
|
16
|
+
* @param partialInstance - Partial instance configuration
|
|
17
|
+
* @returns A complete server instance
|
|
12
18
|
*/
|
|
13
|
-
function
|
|
14
|
-
const
|
|
15
|
-
|
|
19
|
+
function createDefaultInstance(serverName, existingInstances, partialInstance = {}) {
|
|
20
|
+
const instance = {
|
|
21
|
+
...partialInstance
|
|
22
|
+
};
|
|
23
|
+
// Generate content-based ID with deduplication
|
|
24
|
+
if (!instance.id) {
|
|
25
|
+
const baseId = generateInstanceId(serverName, partialInstance);
|
|
26
|
+
let id = baseId;
|
|
27
|
+
let suffix = 2;
|
|
28
|
+
while (existingInstances.some((inst) => inst.id === id)) {
|
|
29
|
+
id = `${baseId}-${suffix}`;
|
|
30
|
+
suffix++;
|
|
31
|
+
}
|
|
32
|
+
instance.id = id;
|
|
33
|
+
}
|
|
34
|
+
// Assign index: max index + 1, or 0 if no existing instances
|
|
35
|
+
if (instance.index === undefined) {
|
|
36
|
+
if (existingInstances.length === 0) {
|
|
37
|
+
instance.index = 0;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const indexes = existingInstances.map((inst) => inst.index ?? 0);
|
|
41
|
+
const maxIndex = Math.max(...indexes);
|
|
42
|
+
instance.index = maxIndex + 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return ServerInstanceSchema.parse(instance);
|
|
16
46
|
}
|
|
17
47
|
/**
|
|
18
48
|
* Adds multiple server configurations to the system in a single operation.
|
|
19
49
|
*
|
|
20
|
-
* @param servers - Array of server objects containing name and partial configuration
|
|
50
|
+
* @param servers - Array of server objects containing name and partial template configuration
|
|
21
51
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
22
|
-
* @param serverInstances - Current server instances record (will be modified)
|
|
23
52
|
* @returns The updated servers configuration
|
|
24
53
|
*/
|
|
25
|
-
export function addServers(servers, currentServers
|
|
54
|
+
export function addServers(servers, currentServers) {
|
|
26
55
|
for (const { name, config } of servers) {
|
|
27
56
|
// Unified type conversion: convert http to streamable-http
|
|
28
57
|
const convertedConfig = convertHttpToStreamableHttp(config);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
58
|
+
let template = ServerTemplateSchema.parse(convertedConfig);
|
|
59
|
+
// Sort env and headers keys for consistency
|
|
60
|
+
template = sortServerConfigEnvHeaders(template);
|
|
61
|
+
// Create default instance
|
|
62
|
+
let defaultInstance = createDefaultInstance(name, []);
|
|
63
|
+
// Sort env and headers keys for consistency
|
|
64
|
+
defaultInstance = sortServerConfigEnvHeaders(defaultInstance);
|
|
65
|
+
// Extract instance selection strategy from config if provided, otherwise default to random
|
|
66
|
+
const { instanceSelectionStrategy = 'random' } = config;
|
|
67
|
+
// Add instance selection strategy to template
|
|
68
|
+
template.instanceSelectionStrategy = instanceSelectionStrategy;
|
|
69
|
+
currentServers[name] = ServerConfigSchema.parse({
|
|
70
|
+
template,
|
|
71
|
+
instances: [defaultInstance]
|
|
72
|
+
});
|
|
32
73
|
}
|
|
33
74
|
// Ensure server configurations are sorted by name
|
|
34
75
|
return Object.fromEntries(Object.entries(currentServers).sort(([a], [b]) => a.localeCompare(b)));
|
|
35
76
|
}
|
|
36
77
|
/**
|
|
37
|
-
* Adds a new server configuration to the system.
|
|
78
|
+
* Adds a new server configuration to the system (v1.1 format).
|
|
79
|
+
* Creates a template and a default instance.
|
|
38
80
|
*
|
|
39
81
|
* @param name - The unique name for the server
|
|
40
|
-
* @param config - The server configuration (partial, will be validated)
|
|
82
|
+
* @param config - The server template configuration (partial, will be validated)
|
|
41
83
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
42
|
-
* @
|
|
43
|
-
* @returns The validated and complete server configuration
|
|
84
|
+
* @returns The complete server configuration (v1.1)
|
|
44
85
|
*/
|
|
45
|
-
export function addServer(name, config, currentServers
|
|
86
|
+
export function addServer(name, config, currentServers) {
|
|
46
87
|
// Unified type conversion: convert http to streamable-http
|
|
47
88
|
const convertedConfig = convertHttpToStreamableHttp(config);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
89
|
+
let template = ServerTemplateSchema.parse(convertedConfig);
|
|
90
|
+
// Sort env and headers keys for consistency
|
|
91
|
+
template = sortServerConfigEnvHeaders(template);
|
|
92
|
+
// Create default instance
|
|
93
|
+
let defaultInstance = createDefaultInstance(name, []);
|
|
94
|
+
// Sort env and headers keys for consistency
|
|
95
|
+
defaultInstance = sortServerConfigEnvHeaders(defaultInstance);
|
|
96
|
+
// Extract instance selection strategy from config if provided, otherwise default to random
|
|
97
|
+
const { instanceSelectionStrategy = 'random' } = config;
|
|
98
|
+
// Add instance selection strategy to template
|
|
99
|
+
template.instanceSelectionStrategy = instanceSelectionStrategy;
|
|
100
|
+
const serverConfig = ServerConfigSchema.parse({
|
|
101
|
+
template,
|
|
102
|
+
instances: [defaultInstance]
|
|
103
|
+
});
|
|
104
|
+
currentServers[name] = serverConfig;
|
|
52
105
|
// Ensure server configurations are sorted by name
|
|
53
106
|
const sortedServers = Object.fromEntries(Object.entries(currentServers).sort(([a], [b]) => a.localeCompare(b)));
|
|
54
107
|
// Update the reference
|
|
55
108
|
Object.keys(currentServers).forEach((key) => delete currentServers[key]);
|
|
56
109
|
Object.assign(currentServers, sortedServers);
|
|
57
|
-
return
|
|
110
|
+
return serverConfig;
|
|
58
111
|
}
|
|
59
112
|
/**
|
|
60
113
|
* Adds a new server instance for the specified server.
|
|
61
114
|
*
|
|
62
115
|
* @param name - The name of the server to add an instance for
|
|
63
116
|
* @param instance - The server instance configuration (partial, will be validated)
|
|
64
|
-
* @param
|
|
117
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
65
118
|
* @returns The validated and complete server instance configuration
|
|
66
119
|
*/
|
|
67
|
-
export function addServerInstance(name, instance,
|
|
68
|
-
if (!
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
120
|
+
export function addServerInstance(name, instance, currentServers) {
|
|
121
|
+
if (!currentServers[name]) {
|
|
122
|
+
throw new Error(`Server not found: ${name}`);
|
|
123
|
+
}
|
|
124
|
+
const existingInstances = currentServers[name].instances || [];
|
|
125
|
+
let newInstance = createDefaultInstance(name, existingInstances, instance);
|
|
126
|
+
// Sort env and headers keys for consistency
|
|
127
|
+
newInstance = sortServerConfigEnvHeaders(newInstance);
|
|
128
|
+
currentServers[name].instances = [...existingInstances, newInstance];
|
|
129
|
+
return newInstance;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Reassigns server instance indexes to be consecutive (0, 1, 2, ...).
|
|
133
|
+
*
|
|
134
|
+
* @param name - The name of the server to reassign indexes for
|
|
135
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
136
|
+
* @returns True if the server exists and indexes were reassigned
|
|
137
|
+
*/
|
|
138
|
+
export function reassignServerInstanceIndexes(name, currentServers) {
|
|
139
|
+
if (!currentServers[name] || currentServers[name].instances.length === 0) {
|
|
140
|
+
return false;
|
|
76
141
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
142
|
+
// Sort instances by their current index
|
|
143
|
+
const sortedInstances = [...currentServers[name].instances].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
|
|
144
|
+
// Reassign indexes to be consecutive starting from 0
|
|
145
|
+
sortedInstances.forEach((instance, newIndex) => {
|
|
146
|
+
instance.index = newIndex;
|
|
147
|
+
});
|
|
148
|
+
// Update the server instances array
|
|
149
|
+
currentServers[name].instances = sortedInstances;
|
|
150
|
+
return true;
|
|
80
151
|
}
|
|
81
152
|
/**
|
|
82
|
-
* Updates an existing server configuration
|
|
153
|
+
* Updates an existing server configuration (template and/or instance selection strategy).
|
|
83
154
|
*
|
|
84
155
|
* @param name - The name of the server to update
|
|
85
|
-
* @param updates - The partial configuration updates to apply
|
|
156
|
+
* @param updates - The partial server configuration updates to apply (can include template and instanceSelectionStrategy)
|
|
86
157
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
87
|
-
* @returns True if the server was updated
|
|
158
|
+
* @returns True if the server was updated
|
|
88
159
|
*/
|
|
89
|
-
export function
|
|
160
|
+
export function updateServerTemplate(name, updates, currentServers) {
|
|
90
161
|
if (currentServers[name]) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
162
|
+
const oldServerConfig = JSON.parse(JSON.stringify(currentServers[name]));
|
|
163
|
+
// Handle template updates
|
|
164
|
+
if (Object.keys(updates).length > 0) {
|
|
165
|
+
// Unified type conversion: convert http to streamable-http
|
|
166
|
+
const convertedUpdates = convertHttpToStreamableHttp(updates);
|
|
167
|
+
currentServers[name].template = {
|
|
168
|
+
...currentServers[name].template,
|
|
169
|
+
...convertedUpdates
|
|
170
|
+
};
|
|
171
|
+
// Sort env and headers keys for consistency
|
|
172
|
+
currentServers[name].template = sortServerConfigEnvHeaders(currentServers[name].template);
|
|
173
|
+
}
|
|
94
174
|
// Ensure server configurations are sorted by name
|
|
95
175
|
const sortedServers = Object.fromEntries(Object.entries(currentServers).sort(([a], [b]) => a.localeCompare(b)));
|
|
96
176
|
// Update the reference
|
|
97
177
|
Object.keys(currentServers).forEach((key) => delete currentServers[key]);
|
|
98
178
|
Object.assign(currentServers, sortedServers);
|
|
179
|
+
// Log template changes
|
|
180
|
+
const changes = getObjectChanges(oldServerConfig, currentServers[name]);
|
|
181
|
+
if (changes.length > 0) {
|
|
182
|
+
const title = `Template updated: ${name}`;
|
|
183
|
+
logObjectChangesWithTitle(title, oldServerConfig, currentServers[name], LOG_MODULES.SERVER_CONFIG_MANAGER);
|
|
184
|
+
}
|
|
99
185
|
return true;
|
|
100
186
|
}
|
|
101
187
|
return false;
|
|
102
188
|
}
|
|
103
189
|
/**
|
|
104
|
-
* Updates an existing server instance configuration
|
|
190
|
+
* Updates an existing server instance configuration.
|
|
105
191
|
*
|
|
106
192
|
* @param name - The name of the server containing the instance to update
|
|
107
|
-
* @param index - The index of the instance to update
|
|
108
|
-
* @param updates - The partial instance
|
|
109
|
-
* @param
|
|
110
|
-
* @returns True if the instance was updated
|
|
193
|
+
* @param index - The index of the instance to update
|
|
194
|
+
* @param updates - The partial instance updates to apply
|
|
195
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
196
|
+
* @returns True if the instance was updated
|
|
111
197
|
*/
|
|
112
|
-
export function updateServerInstance(name, index, updates,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
198
|
+
export function updateServerInstance(name, index, updates, currentServers) {
|
|
199
|
+
const numericIndex = typeof index === 'string' ? parseInt(index, 10) : index;
|
|
200
|
+
logger.debug(`updateServerInstance called: server=${name}, index=${numericIndex}`, LOG_MODULES.SERVER_CONFIG_MANAGER);
|
|
201
|
+
if (currentServers[name]?.instances) {
|
|
202
|
+
const instances = currentServers[name].instances;
|
|
203
|
+
const instanceIndex = instances.findIndex((inst) => inst.index === numericIndex);
|
|
204
|
+
if (instanceIndex !== -1) {
|
|
205
|
+
const originalInstance = JSON.parse(JSON.stringify(instances[instanceIndex]));
|
|
206
|
+
let updatedInstance = {
|
|
207
|
+
...instances[instanceIndex],
|
|
208
|
+
...updates,
|
|
209
|
+
// Explicitly preserve the original index field
|
|
210
|
+
index: originalInstance.index
|
|
211
|
+
};
|
|
212
|
+
// Sort env and headers keys for consistency
|
|
213
|
+
updatedInstance = sortServerConfigEnvHeaders(updatedInstance);
|
|
214
|
+
// Always recalculate ID based on current content
|
|
215
|
+
const newId = generateInstanceId(name, updatedInstance);
|
|
216
|
+
let finalId = newId;
|
|
217
|
+
let suffix = 2;
|
|
218
|
+
while (instances.some((inst, i) => i !== instanceIndex && inst.id === finalId)) {
|
|
219
|
+
finalId = `${newId}-${suffix}`;
|
|
220
|
+
suffix++;
|
|
221
|
+
}
|
|
222
|
+
updatedInstance.id = finalId;
|
|
223
|
+
instances[instanceIndex] = updatedInstance;
|
|
224
|
+
// Log instance changes
|
|
225
|
+
const changes = getObjectChanges(originalInstance, instances[instanceIndex]);
|
|
226
|
+
if (changes.length > 0) {
|
|
227
|
+
const title = originalInstance.displayName
|
|
228
|
+
? `Instance [id=${originalInstance.id}, displayName=${originalInstance.displayName}] updated:`
|
|
229
|
+
: `Instance [id=${originalInstance.id}] updated:`;
|
|
230
|
+
logObjectChangesWithTitle(title, originalInstance, instances[instanceIndex], LOG_MODULES.SERVER_CONFIG_MANAGER);
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
// Fallback: try array index directly
|
|
236
|
+
if (numericIndex >= 0 && numericIndex < instances.length) {
|
|
237
|
+
const originalInstance = JSON.parse(JSON.stringify(instances[numericIndex]));
|
|
238
|
+
let updatedInstance = {
|
|
239
|
+
...instances[numericIndex],
|
|
240
|
+
...updates,
|
|
241
|
+
// Ensure index field is set to the numericIndex when using array index fallback
|
|
242
|
+
index: numericIndex
|
|
243
|
+
};
|
|
244
|
+
// Sort env and headers keys for consistency
|
|
245
|
+
updatedInstance = sortServerConfigEnvHeaders(updatedInstance);
|
|
246
|
+
// Always recalculate ID based on current content
|
|
247
|
+
const newId = generateInstanceId(name, updatedInstance);
|
|
248
|
+
let finalId = newId;
|
|
249
|
+
let suffix = 2;
|
|
250
|
+
while (instances.some((inst, i) => i !== numericIndex && inst.id === finalId)) {
|
|
251
|
+
finalId = `${newId}-${suffix}`;
|
|
252
|
+
suffix++;
|
|
253
|
+
}
|
|
254
|
+
updatedInstance.id = finalId;
|
|
255
|
+
instances[numericIndex] = updatedInstance;
|
|
256
|
+
// Log instance changes
|
|
257
|
+
const changes = getObjectChanges(originalInstance, instances[numericIndex]);
|
|
258
|
+
if (changes.length > 0) {
|
|
259
|
+
const title = originalInstance.displayName
|
|
260
|
+
? `Instance [id=${originalInstance.id}, displayName=${originalInstance.displayName}] updated:`
|
|
261
|
+
: `Instance [id=${originalInstance.id}] updated:`;
|
|
262
|
+
logObjectChangesWithTitle(title, originalInstance, instances[numericIndex], LOG_MODULES.SERVER_CONFIG_MANAGER);
|
|
263
|
+
}
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
logger.debug(`Server ${name} not found or has no instances`, LOG_MODULES.SERVER_CONFIG_MANAGER);
|
|
116
270
|
}
|
|
117
271
|
return false;
|
|
118
272
|
}
|
|
@@ -121,13 +275,11 @@ export function updateServerInstance(name, index, updates, serverInstances) {
|
|
|
121
275
|
*
|
|
122
276
|
* @param name - The name of the server to remove
|
|
123
277
|
* @param currentServers - Current servers configuration object (will be modified)
|
|
124
|
-
* @
|
|
125
|
-
* @returns True if the server was removed, false if it didn't exist
|
|
278
|
+
* @returns True if the server was removed
|
|
126
279
|
*/
|
|
127
|
-
export function removeServer(name, currentServers
|
|
280
|
+
export function removeServer(name, currentServers) {
|
|
128
281
|
if (currentServers[name]) {
|
|
129
282
|
delete currentServers[name];
|
|
130
|
-
delete serverInstances[name];
|
|
131
283
|
// Ensure server configurations are sorted by name
|
|
132
284
|
const sortedServers = Object.fromEntries(Object.entries(currentServers).sort(([a], [b]) => a.localeCompare(b)));
|
|
133
285
|
// Update the reference
|
|
@@ -141,17 +293,21 @@ export function removeServer(name, currentServers, serverInstances) {
|
|
|
141
293
|
* Removes a specific server instance from the system.
|
|
142
294
|
*
|
|
143
295
|
* @param name - The name of the server containing the instance to remove
|
|
144
|
-
* @param index - The index of the instance to remove
|
|
145
|
-
* @param
|
|
146
|
-
* @returns True if the instance was removed
|
|
296
|
+
* @param index - The index of the instance to remove
|
|
297
|
+
* @param currentServers - Current servers configuration object (will be modified)
|
|
298
|
+
* @returns True if the instance was removed
|
|
147
299
|
*/
|
|
148
|
-
export function removeServerInstance(name, index,
|
|
149
|
-
if (
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
300
|
+
export function removeServerInstance(name, index, currentServers) {
|
|
301
|
+
if (currentServers[name]?.instances) {
|
|
302
|
+
const numericIndex = typeof index === 'string' ? parseInt(index, 10) : index;
|
|
303
|
+
const instanceIndex = currentServers[name].instances.findIndex((inst) => inst.index === numericIndex);
|
|
304
|
+
if (instanceIndex !== -1) {
|
|
305
|
+
currentServers[name].instances.splice(instanceIndex, 1);
|
|
306
|
+
if (currentServers[name].instances.length === 0) {
|
|
307
|
+
// Keep the server even if it has no instances
|
|
308
|
+
}
|
|
309
|
+
return true;
|
|
153
310
|
}
|
|
154
|
-
return true;
|
|
155
311
|
}
|
|
156
312
|
return false;
|
|
157
313
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-converter.d.ts","sourceRoot":"","sources":["../../../../src/config/type-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"type-converter.d.ts","sourceRoot":"","sources":["../../../../src/config/type-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CA2BpE"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Type conversion utilities for configuration management.
|
|
3
3
|
* Handles backward compatibility type conversions.
|
|
4
4
|
*/
|
|
5
|
+
import { TransportType } from './config.schema.js';
|
|
5
6
|
/**
|
|
6
7
|
* Unified type conversion method: convert type: 'http' to type: 'streamable-http'
|
|
7
8
|
* Ensure compatibility across all scenarios (loading, adding, updating)
|
|
@@ -20,8 +21,8 @@ export function convertHttpToStreamableHttp(config) {
|
|
|
20
21
|
if (typeof config === 'object' && config !== null) {
|
|
21
22
|
const result = {};
|
|
22
23
|
for (const [key, value] of Object.entries(config)) {
|
|
23
|
-
if (key === 'type' && value ===
|
|
24
|
-
result[key] =
|
|
24
|
+
if (key === 'type' && value === TransportType.HTTP) {
|
|
25
|
+
result[key] = TransportType.STREAMABLE_HTTP;
|
|
25
26
|
}
|
|
26
27
|
else if (typeof value === 'object' && value !== null) {
|
|
27
28
|
result[key] = convertHttpToStreamableHttp(value);
|