@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
- package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
- package/dist/client/assets/ServerDetail-BLQ-a4cO.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BHrsFD5i.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
- package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
- package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
- package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
- package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
- package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
- package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
- package/dist/client/assets/index-ByNBhPAR.js +1 -0
- package/dist/client/assets/index-CTB6oe-9.js +2 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/omit-CUnDT6sS.js +1 -0
- package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +362 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +1 -57
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +1 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/session-context.types.d.ts +0 -2
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +32 -49
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -2
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/server.d.ts +57 -0
- package/dist/server/src/cli/commands/server.d.ts.map +1 -0
- package/dist/server/src/cli/commands/server.js +169 -0
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -104
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -99
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +53 -23
- package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +66 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +4 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +82 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -6
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +31 -11
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +3 -1
- package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
- package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
- package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
- package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
- package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
- package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
- package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
- package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
- package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
- package/dist/client/assets/el-select-DvjGddk_.js +0 -1
- package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
- package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/el-tag-npbwux4f.js +0 -1
- package/dist/client/assets/index-CCnAxNF8.js +0 -2
- package/dist/client/assets/index-d1DZeSfz.js +0 -1
- package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
- package/dist/client/assets/vnode-CHomNjgN.js +0 -1
|
@@ -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);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* CLI command for dynamic MCP server tool operations via API.
|
|
4
|
+
*
|
|
5
|
+
* This command provides a simplified CLI interface for interacting with MCP server tools,
|
|
6
|
+
* supporting four actions: list-servers, list-tools, get-tool, and call-tool. It wraps
|
|
7
|
+
* the HTTP API endpoints and requires the MCP Hub Lite server to be running.
|
|
8
|
+
*
|
|
9
|
+
* ## Command Format
|
|
10
|
+
*
|
|
11
|
+
* ```
|
|
12
|
+
* npm run server <serverName> <action> [toolName] [--args <json>] [--tags <json>]
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* ## Supported Actions
|
|
16
|
+
*
|
|
17
|
+
* - `list-servers` - List all connected MCP servers
|
|
18
|
+
* - `list-tools` - List all tools from the specified server
|
|
19
|
+
* - `get-tool <toolName>` - Get complete schema for a specific tool
|
|
20
|
+
* - `call-tool <toolName>` - Call a tool on the specified server
|
|
21
|
+
*
|
|
22
|
+
* ## Options
|
|
23
|
+
*
|
|
24
|
+
* - `--args <json>` - JSON string of tool arguments (for call-tool action)
|
|
25
|
+
* - `--tags <json>` - JSON object of instance selection tags (call-tool only, for multi-instance servers)
|
|
26
|
+
*
|
|
27
|
+
* ## Usage Examples
|
|
28
|
+
*
|
|
29
|
+
* ```bash
|
|
30
|
+
* # List all connected servers
|
|
31
|
+
* npm run server mcp-hub-lite list-servers
|
|
32
|
+
*
|
|
33
|
+
* # List all tools from a specific server
|
|
34
|
+
* npm run server mcp-hub-lite list-tools
|
|
35
|
+
*
|
|
36
|
+
* # Get tool schema
|
|
37
|
+
* npm run server mcp-hub-lite get-tool list_tools
|
|
38
|
+
*
|
|
39
|
+
* # Call a tool with arguments
|
|
40
|
+
* npm run server mcp-hub-lite call-tool list_tools --args '{"serverName":"mcp-hub-lite"}'
|
|
41
|
+
*
|
|
42
|
+
* # Call a tool with tags for multi-instance selection
|
|
43
|
+
* npm run server baidu-search call-tool search --args '{"query":"天气"}' --tags '{"env":"prod"}'
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* ## Error Handling
|
|
47
|
+
*
|
|
48
|
+
* - Exits with code 1 if the server is not running
|
|
49
|
+
* - Exits with code 1 if action is unknown
|
|
50
|
+
* - Exits with code 1 if toolName is required but not provided
|
|
51
|
+
* - Exits with code 1 if JSON parsing fails for --args or --tags
|
|
52
|
+
* - Exits with code 1 if the underlying API call fails
|
|
53
|
+
*
|
|
54
|
+
* @returns {Command} The configured server command instance for registration with Commander.js
|
|
55
|
+
*/
|
|
56
|
+
export declare const serverCommand: Command;
|
|
57
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,aAAa,SAkItB,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { getServerStatus } from '../server.js';
|
|
3
|
+
/**
|
|
4
|
+
* CLI command for dynamic MCP server tool operations via API.
|
|
5
|
+
*
|
|
6
|
+
* This command provides a simplified CLI interface for interacting with MCP server tools,
|
|
7
|
+
* supporting four actions: list-servers, list-tools, get-tool, and call-tool. It wraps
|
|
8
|
+
* the HTTP API endpoints and requires the MCP Hub Lite server to be running.
|
|
9
|
+
*
|
|
10
|
+
* ## Command Format
|
|
11
|
+
*
|
|
12
|
+
* ```
|
|
13
|
+
* npm run server <serverName> <action> [toolName] [--args <json>] [--tags <json>]
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* ## Supported Actions
|
|
17
|
+
*
|
|
18
|
+
* - `list-servers` - List all connected MCP servers
|
|
19
|
+
* - `list-tools` - List all tools from the specified server
|
|
20
|
+
* - `get-tool <toolName>` - Get complete schema for a specific tool
|
|
21
|
+
* - `call-tool <toolName>` - Call a tool on the specified server
|
|
22
|
+
*
|
|
23
|
+
* ## Options
|
|
24
|
+
*
|
|
25
|
+
* - `--args <json>` - JSON string of tool arguments (for call-tool action)
|
|
26
|
+
* - `--tags <json>` - JSON object of instance selection tags (call-tool only, for multi-instance servers)
|
|
27
|
+
*
|
|
28
|
+
* ## Usage Examples
|
|
29
|
+
*
|
|
30
|
+
* ```bash
|
|
31
|
+
* # List all connected servers
|
|
32
|
+
* npm run server mcp-hub-lite list-servers
|
|
33
|
+
*
|
|
34
|
+
* # List all tools from a specific server
|
|
35
|
+
* npm run server mcp-hub-lite list-tools
|
|
36
|
+
*
|
|
37
|
+
* # Get tool schema
|
|
38
|
+
* npm run server mcp-hub-lite get-tool list_tools
|
|
39
|
+
*
|
|
40
|
+
* # Call a tool with arguments
|
|
41
|
+
* npm run server mcp-hub-lite call-tool list_tools --args '{"serverName":"mcp-hub-lite"}'
|
|
42
|
+
*
|
|
43
|
+
* # Call a tool with tags for multi-instance selection
|
|
44
|
+
* npm run server baidu-search call-tool search --args '{"query":"天气"}' --tags '{"env":"prod"}'
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* ## Error Handling
|
|
48
|
+
*
|
|
49
|
+
* - Exits with code 1 if the server is not running
|
|
50
|
+
* - Exits with code 1 if action is unknown
|
|
51
|
+
* - Exits with code 1 if toolName is required but not provided
|
|
52
|
+
* - Exits with code 1 if JSON parsing fails for --args or --tags
|
|
53
|
+
* - Exits with code 1 if the underlying API call fails
|
|
54
|
+
*
|
|
55
|
+
* @returns {Command} The configured server command instance for registration with Commander.js
|
|
56
|
+
*/
|
|
57
|
+
export const serverCommand = new Command('server')
|
|
58
|
+
.description('Manage MCP server tools via API (list-servers, list-tools, get-tool, call-tool)')
|
|
59
|
+
.argument('<serverName>', 'Server name to target (use "mcp-hub-lite" for system tools)')
|
|
60
|
+
.argument('<action>', 'Action: list-servers, list-tools, get-tool, call-tool')
|
|
61
|
+
.argument('[toolName]', 'Tool name (required for get-tool and call-tool actions)')
|
|
62
|
+
.option('--args <json>', 'JSON string of tool arguments (call-tool only)')
|
|
63
|
+
.option('--tags <json>', 'JSON object of instance selection tags (call-tool only, for multi-instance servers)')
|
|
64
|
+
.action(async (serverName, action, toolName, options) => {
|
|
65
|
+
try {
|
|
66
|
+
// Check if server is running and get connection info
|
|
67
|
+
const status = await getServerStatus();
|
|
68
|
+
if (!status.running) {
|
|
69
|
+
console.error('Error: MCP Hub Lite server is not running.');
|
|
70
|
+
console.error('Start the server with: mcp-hub-lite start');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
const baseUrl = `http://${status.host}:${status.port}`;
|
|
74
|
+
switch (action) {
|
|
75
|
+
case 'list-servers': {
|
|
76
|
+
const response = await fetch(`${baseUrl}/web/hub-tools/servers`, {
|
|
77
|
+
headers: { Accept: 'application/json' }
|
|
78
|
+
});
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
throw new Error(`API error: ${response.status} ${response.statusText}`);
|
|
81
|
+
}
|
|
82
|
+
const result = await response.json();
|
|
83
|
+
console.log(JSON.stringify(result, null, 2));
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case 'list-tools': {
|
|
87
|
+
const tagsParam = options.tags ? `?tags=${encodeURIComponent(options.tags)}` : '';
|
|
88
|
+
const response = await fetch(`${baseUrl}/web/hub-tools/servers/${serverName}/tools${tagsParam}`, {
|
|
89
|
+
headers: { Accept: 'application/json' }
|
|
90
|
+
});
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
const error = await response.json().catch(() => ({ message: response.statusText }));
|
|
93
|
+
throw new Error(error.message || `API error: ${response.status}`);
|
|
94
|
+
}
|
|
95
|
+
const result = await response.json();
|
|
96
|
+
console.log(JSON.stringify(result, null, 2));
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case 'get-tool': {
|
|
100
|
+
if (!toolName) {
|
|
101
|
+
console.error('Error: toolName is required for get-tool action');
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
const tagsParam = options.tags ? `?tags=${encodeURIComponent(options.tags)}` : '';
|
|
105
|
+
const response = await fetch(`${baseUrl}/web/hub-tools/servers/${serverName}/tools/${toolName}${tagsParam}`, { headers: { Accept: 'application/json' } });
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
const error = await response.json().catch(() => ({ message: response.statusText }));
|
|
108
|
+
throw new Error(error.message || `API error: ${response.status}`);
|
|
109
|
+
}
|
|
110
|
+
const result = await response.json();
|
|
111
|
+
console.log(JSON.stringify(result, null, 2));
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case 'call-tool': {
|
|
115
|
+
if (!toolName) {
|
|
116
|
+
console.error('Error: toolName is required for call-tool action');
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
// Parse tool arguments
|
|
120
|
+
let toolArgs = {};
|
|
121
|
+
if (options.args) {
|
|
122
|
+
try {
|
|
123
|
+
toolArgs = JSON.parse(options.args);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
console.error('Error: Invalid JSON in --args option');
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Parse tags for instance selection (call-tool only)
|
|
131
|
+
let requestOptions;
|
|
132
|
+
if (options.tags) {
|
|
133
|
+
try {
|
|
134
|
+
requestOptions = { tags: JSON.parse(options.tags) };
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
console.error('Error: Invalid JSON in --tags option');
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const response = await fetch(`${baseUrl}/web/hub-tools/servers/${serverName}/tools/${toolName}/call`, {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
headers: {
|
|
144
|
+
'Content-Type': 'application/json',
|
|
145
|
+
Accept: 'application/json'
|
|
146
|
+
},
|
|
147
|
+
body: JSON.stringify({ toolArgs, requestOptions })
|
|
148
|
+
});
|
|
149
|
+
if (!response.ok) {
|
|
150
|
+
const error = await response.json().catch(() => ({ message: response.statusText }));
|
|
151
|
+
throw new Error(error.message || `API error: ${response.status}`);
|
|
152
|
+
}
|
|
153
|
+
const result = await response.json();
|
|
154
|
+
console.log(JSON.stringify(result, null, 2));
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
default: {
|
|
158
|
+
console.error(`Unknown action: ${action}`);
|
|
159
|
+
console.error('Valid actions: list-servers, list-tools, get-tool, call-tool');
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
process.exit(0);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
@@ -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"}
|