@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
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
2
2
|
import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
3
|
+
import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
|
|
3
4
|
import type { LogStorageService } from '../../services/log-storage.service.js';
|
|
4
|
-
|
|
5
|
-
command: string;
|
|
6
|
-
args?: string[];
|
|
7
|
-
env?: NodeJS.ProcessEnv;
|
|
8
|
-
stderr?: 'inherit' | 'pipe' | 'ignore';
|
|
9
|
-
cwd?: string;
|
|
10
|
-
}
|
|
5
|
+
import { PassThrough } from 'stream';
|
|
11
6
|
export interface StdioTransportOptions {
|
|
12
|
-
|
|
7
|
+
compositeKey?: string;
|
|
13
8
|
logStorage?: LogStorageService;
|
|
14
9
|
}
|
|
15
10
|
/**
|
|
16
11
|
* A transport implementation for communicating with MCP (Model Context Protocol) servers
|
|
17
|
-
* via standard input/output streams. This transport
|
|
18
|
-
*
|
|
12
|
+
* via standard input/output streams. This transport wraps the official SDK's StdioClientTransport
|
|
13
|
+
* and provides consistent logging and integration with the MCP Hub Lite system.
|
|
19
14
|
*
|
|
20
15
|
* The StdioTransport handles:
|
|
21
16
|
* - Cross-platform process spawning (including Windows batch file compatibility)
|
|
@@ -30,19 +25,11 @@ export interface StdioTransportOptions {
|
|
|
30
25
|
* @implements {Transport}
|
|
31
26
|
*/
|
|
32
27
|
export declare class StdioTransport implements Transport {
|
|
33
|
-
private
|
|
34
|
-
private _readBuffer;
|
|
35
|
-
private _stderrStream;
|
|
36
|
-
private _serverParams;
|
|
28
|
+
private _transport;
|
|
37
29
|
private _serverName?;
|
|
38
|
-
private
|
|
30
|
+
private _compositeKey?;
|
|
39
31
|
private _logStorage?;
|
|
40
|
-
|
|
41
|
-
* Gets the process ID of the spawned child process.
|
|
42
|
-
*
|
|
43
|
-
* @returns {number | undefined} The PID of the child process, or undefined if not started
|
|
44
|
-
*/
|
|
45
|
-
get pid(): number | undefined;
|
|
32
|
+
private _stderrStream;
|
|
46
33
|
onclose?: () => void;
|
|
47
34
|
onerror?: (error: Error) => void;
|
|
48
35
|
onmessage?: (message: JSONRPCMessage) => void;
|
|
@@ -59,11 +46,11 @@ export declare class StdioTransport implements Transport {
|
|
|
59
46
|
/**
|
|
60
47
|
* Starts the transport by spawning the child process and establishing communication channels.
|
|
61
48
|
*
|
|
62
|
-
* This method
|
|
63
|
-
* -
|
|
64
|
-
* -
|
|
65
|
-
* -
|
|
66
|
-
* -
|
|
49
|
+
* This method delegates to the SDK's StdioClientTransport.start() method which handles:
|
|
50
|
+
* - Platform-specific process spawning (including Windows batch file compatibility)
|
|
51
|
+
* - Proper stdio configuration
|
|
52
|
+
* - Event listeners for process lifecycle events
|
|
53
|
+
* - Data flow for stdout and stderr handling
|
|
67
54
|
*
|
|
68
55
|
* @returns {Promise<void>} Resolves when the child process is successfully spawned
|
|
69
56
|
* @throws {Error} If the transport is already started
|
|
@@ -72,36 +59,23 @@ export declare class StdioTransport implements Transport {
|
|
|
72
59
|
/**
|
|
73
60
|
* Gets the stderr stream for the child process.
|
|
74
61
|
*
|
|
75
|
-
* Returns
|
|
76
|
-
* the actual stderr stream from the child process, or null if no stderr is available.
|
|
62
|
+
* Returns our PassThrough stream that captures stderr data.
|
|
77
63
|
*
|
|
78
|
-
* @returns {PassThrough |
|
|
64
|
+
* @returns {PassThrough | null} The stderr stream or null
|
|
79
65
|
*/
|
|
80
|
-
get stderr():
|
|
66
|
+
get stderr(): PassThrough | null;
|
|
81
67
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* This method continuously reads complete JSON-RPC messages from the buffer
|
|
85
|
-
* and dispatches them to the onmessage callback. It handles partial messages
|
|
86
|
-
* by leaving incomplete data in the buffer for future processing.
|
|
87
|
-
*
|
|
88
|
-
* The method uses a while loop to process all available complete messages
|
|
89
|
-
* in a single call, ensuring efficient message handling without blocking.
|
|
68
|
+
* Gets the process ID of the spawned child process.
|
|
90
69
|
*
|
|
91
|
-
* @
|
|
70
|
+
* @returns {number | undefined} The PID of the child process, or undefined if not started
|
|
92
71
|
*/
|
|
93
|
-
|
|
72
|
+
get pid(): number | undefined;
|
|
94
73
|
/**
|
|
95
74
|
* Closes the transport by gracefully terminating the child process.
|
|
96
75
|
*
|
|
97
|
-
* This method
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* 3. Forces termination with SIGKILL if the process doesn't exit
|
|
101
|
-
* 4. Cleans up internal state and resolves the promise
|
|
102
|
-
*
|
|
103
|
-
* The method ensures proper cleanup of the read buffer and handles
|
|
104
|
-
* any errors that occur during the shutdown process.
|
|
76
|
+
* This method delegates to the SDK's StdioClientTransport.close() method which handles:
|
|
77
|
+
* - Graceful shutdown sequence with SIGTERM/SIGKILL
|
|
78
|
+
* - Proper cleanup of internal state
|
|
105
79
|
*
|
|
106
80
|
* @returns {Promise<void>} Resolves when the transport is fully closed
|
|
107
81
|
*/
|
|
@@ -109,13 +83,10 @@ export declare class StdioTransport implements Transport {
|
|
|
109
83
|
/**
|
|
110
84
|
* Sends a JSON-RPC message to the child process via stdin.
|
|
111
85
|
*
|
|
112
|
-
* This method
|
|
113
|
-
* and writes it to the child process's stdin stream. It validates that
|
|
114
|
-
* the transport is connected before attempting to send the message.
|
|
86
|
+
* This method delegates to the SDK's StdioClientTransport.send() method.
|
|
115
87
|
*
|
|
116
88
|
* @param {JSONRPCMessage} message - The JSON-RPC message to send
|
|
117
89
|
* @returns {Promise<void>} Resolves when the message is written to stdin
|
|
118
|
-
* @throws {Error} If the transport is not connected (no active child process)
|
|
119
90
|
*/
|
|
120
91
|
send(message: JSONRPCMessage): Promise<void>;
|
|
121
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/stdio-transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/stdio-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,aAAa,CAA4B;IAE1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;;;;OAMG;gBACS,MAAM,EAAE,qBAAqB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAiB/F;;;;;;;;;;;OAWG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B;;;;;;OAMG;IACH,IAAI,MAAM,uBAET;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED;;;;;;;;OAQG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnD"}
|
|
@@ -1,37 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { PassThrough } from 'stream';
|
|
1
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
3
2
|
import { logger } from '../logger.js';
|
|
4
|
-
|
|
5
|
-
class ReadBuffer {
|
|
6
|
-
_buffer;
|
|
7
|
-
append(chunk) {
|
|
8
|
-
this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
|
|
9
|
-
}
|
|
10
|
-
readMessage() {
|
|
11
|
-
if (!this._buffer) {
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
const index = this._buffer.indexOf('\n');
|
|
15
|
-
if (index === -1) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
const line = this._buffer.toString('utf8', 0, index).replace(/\r$/, '');
|
|
19
|
-
this._buffer = this._buffer.subarray(index + 1);
|
|
20
|
-
try {
|
|
21
|
-
return JSON.parse(line);
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
clear() {
|
|
28
|
-
this._buffer = undefined;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
3
|
+
import { PassThrough } from 'stream';
|
|
31
4
|
/**
|
|
32
5
|
* A transport implementation for communicating with MCP (Model Context Protocol) servers
|
|
33
|
-
* via standard input/output streams. This transport
|
|
34
|
-
*
|
|
6
|
+
* via standard input/output streams. This transport wraps the official SDK's StdioClientTransport
|
|
7
|
+
* and provides consistent logging and integration with the MCP Hub Lite system.
|
|
35
8
|
*
|
|
36
9
|
* The StdioTransport handles:
|
|
37
10
|
* - Cross-platform process spawning (including Windows batch file compatibility)
|
|
@@ -46,21 +19,11 @@ class ReadBuffer {
|
|
|
46
19
|
* @implements {Transport}
|
|
47
20
|
*/
|
|
48
21
|
export class StdioTransport {
|
|
49
|
-
|
|
50
|
-
_readBuffer = new ReadBuffer();
|
|
51
|
-
_stderrStream = null;
|
|
52
|
-
_serverParams;
|
|
22
|
+
_transport;
|
|
53
23
|
_serverName;
|
|
54
|
-
|
|
24
|
+
_compositeKey;
|
|
55
25
|
_logStorage;
|
|
56
|
-
|
|
57
|
-
* Gets the process ID of the spawned child process.
|
|
58
|
-
*
|
|
59
|
-
* @returns {number | undefined} The PID of the child process, or undefined if not started
|
|
60
|
-
*/
|
|
61
|
-
get pid() {
|
|
62
|
-
return this._process?.pid;
|
|
63
|
-
}
|
|
26
|
+
_stderrStream = null;
|
|
64
27
|
onclose;
|
|
65
28
|
onerror;
|
|
66
29
|
onmessage;
|
|
@@ -74,251 +37,107 @@ export class StdioTransport {
|
|
|
74
37
|
* @param {StdioTransportOptions} [options] - Additional options for the transport
|
|
75
38
|
*/
|
|
76
39
|
constructor(server, serverName, options) {
|
|
77
|
-
|
|
40
|
+
// Convert our server parameters to match SDK format
|
|
41
|
+
const sdkParams = {
|
|
42
|
+
command: server.command,
|
|
43
|
+
args: server.args,
|
|
44
|
+
env: server.env,
|
|
45
|
+
stderr: 'pipe', // Always use pipe for stderr to enable logging
|
|
46
|
+
cwd: server.cwd
|
|
47
|
+
};
|
|
48
|
+
this._transport = new StdioClientTransport(sdkParams);
|
|
78
49
|
this._serverName = serverName;
|
|
79
|
-
this.
|
|
50
|
+
this._compositeKey = options?.compositeKey;
|
|
80
51
|
this._logStorage = options?.logStorage;
|
|
81
|
-
|
|
82
|
-
this._stderrStream = new PassThrough();
|
|
83
|
-
}
|
|
52
|
+
this._stderrStream = new PassThrough();
|
|
84
53
|
}
|
|
85
54
|
/**
|
|
86
55
|
* Starts the transport by spawning the child process and establishing communication channels.
|
|
87
56
|
*
|
|
88
|
-
* This method
|
|
89
|
-
* -
|
|
90
|
-
* -
|
|
91
|
-
* -
|
|
92
|
-
* -
|
|
57
|
+
* This method delegates to the SDK's StdioClientTransport.start() method which handles:
|
|
58
|
+
* - Platform-specific process spawning (including Windows batch file compatibility)
|
|
59
|
+
* - Proper stdio configuration
|
|
60
|
+
* - Event listeners for process lifecycle events
|
|
61
|
+
* - Data flow for stdout and stderr handling
|
|
93
62
|
*
|
|
94
63
|
* @returns {Promise<void>} Resolves when the child process is successfully spawned
|
|
95
64
|
* @throws {Error} If the transport is already started
|
|
96
65
|
*/
|
|
97
66
|
async start() {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
env: { ...process.env, ...this._serverParams.env },
|
|
117
|
-
stdio: [
|
|
118
|
-
'pipe',
|
|
119
|
-
'pipe',
|
|
120
|
-
this._serverParams.stderr === 'pipe' ? 'pipe' : this._serverParams.stderr || 'inherit'
|
|
121
|
-
],
|
|
122
|
-
shell: false,
|
|
123
|
-
windowsHide: true, // Force hide window on Windows
|
|
124
|
-
cwd: this._serverParams.cwd
|
|
125
|
-
});
|
|
126
|
-
this._process.on('error', (error) => {
|
|
127
|
-
reject(error);
|
|
128
|
-
this.onerror?.(error);
|
|
129
|
-
});
|
|
130
|
-
this._process.on('spawn', () => {
|
|
131
|
-
resolve();
|
|
132
|
-
});
|
|
133
|
-
this._process.on('close', () => {
|
|
134
|
-
this._process = undefined;
|
|
135
|
-
this.onclose?.();
|
|
136
|
-
});
|
|
137
|
-
this._process.stdin?.on('error', (error) => {
|
|
138
|
-
this.onerror?.(error);
|
|
139
|
-
});
|
|
140
|
-
this._process.stdout?.on('data', (chunk) => {
|
|
141
|
-
const dataStr = chunk.toString('utf8');
|
|
142
|
-
// Forward raw stdout data
|
|
143
|
-
this.onstdout?.(dataStr);
|
|
144
|
-
// Don't log raw JSON-RPC communication to avoid log noise
|
|
145
|
-
// Only need to view raw communication during development debugging
|
|
146
|
-
// Parse JSON-RPC messages
|
|
147
|
-
this._readBuffer.append(chunk);
|
|
148
|
-
this.processReadBuffer();
|
|
149
|
-
});
|
|
150
|
-
this._process.stdout?.on('error', (error) => {
|
|
151
|
-
this.onerror?.(error);
|
|
152
|
-
});
|
|
153
|
-
/**
|
|
154
|
-
* Handles stderr data with common processing logic.
|
|
155
|
-
*
|
|
156
|
-
* @param chunk - The stderr data chunk
|
|
157
|
-
* @param writeToStream - Whether to write data to the PassThrough stream
|
|
158
|
-
*/
|
|
159
|
-
const handleStderrData = (chunk, writeToStream = false) => {
|
|
160
|
-
const dataStr = chunk.toString('utf8');
|
|
67
|
+
// Set up event handlers before starting
|
|
68
|
+
this._transport.onmessage = (message) => {
|
|
69
|
+
this.onmessage?.(message);
|
|
70
|
+
};
|
|
71
|
+
this._transport.onerror = (error) => {
|
|
72
|
+
this.onerror?.(error);
|
|
73
|
+
};
|
|
74
|
+
this._transport.onclose = () => {
|
|
75
|
+
this.onclose?.();
|
|
76
|
+
};
|
|
77
|
+
// Start the underlying transport
|
|
78
|
+
await this._transport.start();
|
|
79
|
+
// Handle stderr data by listening to the transport's stderr stream
|
|
80
|
+
if (this._transport.stderr) {
|
|
81
|
+
this._transport.stderr.on('data', (chunk) => {
|
|
82
|
+
const dataStr = chunk.toString('utf8').trim();
|
|
83
|
+
if (!dataStr)
|
|
84
|
+
return;
|
|
161
85
|
// Forward raw stderr data
|
|
162
86
|
this.onstderr?.(dataStr);
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
// Error level keywords
|
|
169
|
-
if (lowerData.includes('error') ||
|
|
170
|
-
lowerData.includes('err') ||
|
|
171
|
-
lowerData.includes('exception') ||
|
|
172
|
-
lowerData.includes('fatal') ||
|
|
173
|
-
lowerData.includes('critical')) {
|
|
174
|
-
logLevel = 'error';
|
|
175
|
-
}
|
|
176
|
-
// Warn level keywords
|
|
177
|
-
else if (lowerData.includes('warn') ||
|
|
178
|
-
lowerData.includes('wrn') ||
|
|
179
|
-
lowerData.includes('warning') ||
|
|
180
|
-
lowerData.includes('deprecation') ||
|
|
181
|
-
lowerData.includes('deprecated')) {
|
|
182
|
-
logLevel = 'warn';
|
|
87
|
+
// Log stderr output (per MCP spec, stderr is not necessarily errors)
|
|
88
|
+
const serverIdentifier = this._compositeKey || this._serverName || 'Unknown Server';
|
|
89
|
+
logger.serverLog('info', serverIdentifier, dataStr, { pid: this.pid });
|
|
90
|
+
if (this._logStorage && this._compositeKey) {
|
|
91
|
+
this._logStorage.append(this._compositeKey, 'info', dataStr);
|
|
183
92
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
93
|
+
// Also write to our PassThrough stream for compatibility
|
|
94
|
+
// Guard against write after end during close() race condition
|
|
95
|
+
if (this._stderrStream && !this._stderrStream.writableEnded) {
|
|
96
|
+
this._stderrStream.write(chunk);
|
|
188
97
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
pid: this._process?.pid
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
// Store in logStorage for frontend display if available
|
|
195
|
-
if (this._logStorage && this._serverId) {
|
|
196
|
-
this._logStorage.append(this._serverId, logLevel, `[${this._serverName || 'Unknown Server'}] [STDERR] ${trimmedData}`);
|
|
197
|
-
}
|
|
198
|
-
// Optionally write to PassThrough stream if configured
|
|
199
|
-
if (writeToStream) {
|
|
200
|
-
this._stderrStream?.write(chunk);
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
if (this._stderrStream && this._process.stderr) {
|
|
204
|
-
this._process.stderr.on('data', (chunk) => {
|
|
205
|
-
handleStderrData(chunk, true); // Write to PassThrough stream for piped stderr
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
else if (this._process.stderr) {
|
|
209
|
-
// If stderr is not in pipe mode, listen directly
|
|
210
|
-
this._process.stderr.on('data', (chunk) => {
|
|
211
|
-
handleStderrData(chunk, false); // No PassThrough stream for non-piped stderr
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
215
100
|
}
|
|
216
101
|
/**
|
|
217
102
|
* Gets the stderr stream for the child process.
|
|
218
103
|
*
|
|
219
|
-
* Returns
|
|
220
|
-
* the actual stderr stream from the child process, or null if no stderr is available.
|
|
104
|
+
* Returns our PassThrough stream that captures stderr data.
|
|
221
105
|
*
|
|
222
|
-
* @returns {PassThrough |
|
|
106
|
+
* @returns {PassThrough | null} The stderr stream or null
|
|
223
107
|
*/
|
|
224
108
|
get stderr() {
|
|
225
|
-
return this._stderrStream
|
|
109
|
+
return this._stderrStream;
|
|
226
110
|
}
|
|
227
111
|
/**
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
* This method continuously reads complete JSON-RPC messages from the buffer
|
|
231
|
-
* and dispatches them to the onmessage callback. It handles partial messages
|
|
232
|
-
* by leaving incomplete data in the buffer for future processing.
|
|
233
|
-
*
|
|
234
|
-
* The method uses a while loop to process all available complete messages
|
|
235
|
-
* in a single call, ensuring efficient message handling without blocking.
|
|
112
|
+
* Gets the process ID of the spawned child process.
|
|
236
113
|
*
|
|
237
|
-
* @
|
|
114
|
+
* @returns {number | undefined} The PID of the child process, or undefined if not started
|
|
238
115
|
*/
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
try {
|
|
242
|
-
const message = this._readBuffer.readMessage();
|
|
243
|
-
if (message === null) {
|
|
244
|
-
break;
|
|
245
|
-
}
|
|
246
|
-
this.onmessage?.(message);
|
|
247
|
-
}
|
|
248
|
-
catch (error) {
|
|
249
|
-
this.onerror?.(error);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
116
|
+
get pid() {
|
|
117
|
+
return this._transport.pid ?? undefined;
|
|
252
118
|
}
|
|
253
119
|
/**
|
|
254
120
|
* Closes the transport by gracefully terminating the child process.
|
|
255
121
|
*
|
|
256
|
-
* This method
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
* 3. Forces termination with SIGKILL if the process doesn't exit
|
|
260
|
-
* 4. Cleans up internal state and resolves the promise
|
|
261
|
-
*
|
|
262
|
-
* The method ensures proper cleanup of the read buffer and handles
|
|
263
|
-
* any errors that occur during the shutdown process.
|
|
122
|
+
* This method delegates to the SDK's StdioClientTransport.close() method which handles:
|
|
123
|
+
* - Graceful shutdown sequence with SIGTERM/SIGKILL
|
|
124
|
+
* - Proper cleanup of internal state
|
|
264
125
|
*
|
|
265
126
|
* @returns {Promise<void>} Resolves when the transport is fully closed
|
|
266
127
|
*/
|
|
267
128
|
async close() {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
// Listen for child process exit events
|
|
271
|
-
const cleanup = () => {
|
|
272
|
-
this._process = undefined;
|
|
273
|
-
this._readBuffer.clear();
|
|
274
|
-
resolve();
|
|
275
|
-
};
|
|
276
|
-
if (this._process) {
|
|
277
|
-
this._process.once('close', cleanup);
|
|
278
|
-
this._process.once('exit', cleanup);
|
|
279
|
-
// Send SIGTERM signal to give child process a chance to shut down gracefully
|
|
280
|
-
try {
|
|
281
|
-
this._process.kill('SIGTERM');
|
|
282
|
-
// Set timeout protection to force kill if child process doesn't exit within 5 seconds
|
|
283
|
-
const timeout = setTimeout(() => {
|
|
284
|
-
if (this._process) {
|
|
285
|
-
logger.warn('Child process did not exit gracefully, force killing...');
|
|
286
|
-
this._process.kill('SIGKILL');
|
|
287
|
-
}
|
|
288
|
-
}, 5000);
|
|
289
|
-
// Ensure timeout timer is cleared after process exits
|
|
290
|
-
this._process.once('close', () => clearTimeout(timeout));
|
|
291
|
-
this._process.once('exit', () => clearTimeout(timeout));
|
|
292
|
-
}
|
|
293
|
-
catch (error) {
|
|
294
|
-
logger.error('Error closing stdio transport:', error);
|
|
295
|
-
cleanup();
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
// Process is already undefined, just resolve
|
|
300
|
-
resolve();
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
this._readBuffer.clear();
|
|
129
|
+
await this._transport.close();
|
|
130
|
+
this._stderrStream?.end();
|
|
305
131
|
}
|
|
306
132
|
/**
|
|
307
133
|
* Sends a JSON-RPC message to the child process via stdin.
|
|
308
134
|
*
|
|
309
|
-
* This method
|
|
310
|
-
* and writes it to the child process's stdin stream. It validates that
|
|
311
|
-
* the transport is connected before attempting to send the message.
|
|
135
|
+
* This method delegates to the SDK's StdioClientTransport.send() method.
|
|
312
136
|
*
|
|
313
137
|
* @param {JSONRPCMessage} message - The JSON-RPC message to send
|
|
314
138
|
* @returns {Promise<void>} Resolves when the message is written to stdin
|
|
315
|
-
* @throws {Error} If the transport is not connected (no active child process)
|
|
316
139
|
*/
|
|
317
140
|
async send(message) {
|
|
318
|
-
|
|
319
|
-
throw new Error('Not connected');
|
|
320
|
-
}
|
|
321
|
-
const json = JSON.stringify(message) + '\n';
|
|
322
|
-
this._process.stdin.write(json);
|
|
141
|
+
await this._transport.send(message);
|
|
323
142
|
}
|
|
324
143
|
}
|
|
@@ -29,6 +29,7 @@ export declare class StreamableHttpTransport implements Transport {
|
|
|
29
29
|
private url;
|
|
30
30
|
private headers;
|
|
31
31
|
private timeout;
|
|
32
|
+
private proxy?;
|
|
32
33
|
/**
|
|
33
34
|
* Internal reference to the underlying MCP SDK transport instance
|
|
34
35
|
* @private
|
|
@@ -40,6 +41,16 @@ export declare class StreamableHttpTransport implements Transport {
|
|
|
40
41
|
* @private
|
|
41
42
|
*/
|
|
42
43
|
private isClosing;
|
|
44
|
+
/**
|
|
45
|
+
* Server name for logging context
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
private _serverName?;
|
|
49
|
+
/**
|
|
50
|
+
* Composite key (serverName-serverIndex) for logging context
|
|
51
|
+
* @private
|
|
52
|
+
*/
|
|
53
|
+
private _compositeKey?;
|
|
43
54
|
/**
|
|
44
55
|
* Event handler called when a JSON-RPC message is received from the server
|
|
45
56
|
* @public
|
|
@@ -63,8 +74,20 @@ export declare class StreamableHttpTransport implements Transport {
|
|
|
63
74
|
* Commonly used for authentication tokens, API keys, or custom headers
|
|
64
75
|
* @param timeout - Request timeout in milliseconds (default: 30000 = 30 seconds)
|
|
65
76
|
* Controls how long to wait for HTTP responses before timing out
|
|
77
|
+
* @param proxy - Optional proxy configuration
|
|
78
|
+
* @param serverName - Optional server name for logging
|
|
79
|
+
* @param compositeKey - Optional composite key (serverName-serverIndex) for logging
|
|
80
|
+
*/
|
|
81
|
+
constructor(url: string, headers?: Record<string, string>, timeout?: number, proxy?: {
|
|
82
|
+
url: string;
|
|
83
|
+
} | undefined, serverName?: string, compositeKey?: string);
|
|
84
|
+
/**
|
|
85
|
+
* Helper method to format log messages with server context.
|
|
86
|
+
*
|
|
87
|
+
* @param message - The base message
|
|
88
|
+
* @returns Formatted message with server context if available
|
|
66
89
|
*/
|
|
67
|
-
|
|
90
|
+
private formatLogMessage;
|
|
68
91
|
/**
|
|
69
92
|
* Initializes and starts the Streamable HTTP transport connection
|
|
70
93
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/streamable-http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"streamable-http-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/streamable-http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAM1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,uBAAwB,YAAW,SAAS;IAyDrD,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK,CAAC;IA3DhB;;;OAGG;IACH,OAAO,CAAC,SAAS,CAA8C;IAE/D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAC,CAAS;IAE/B;;;OAGG;IACI,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAErD;;;OAGG;IACI,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAExC;;;OAGG;IACI,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B;;;;;;;;;;;OAWG;gBAEO,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,OAAO,GAAE,MAAc,EACvB,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,YAAA,EAC/B,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM;IAMvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6G5B;;;;;;;;;;;;;;;;;;;OAmBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BnD"}
|