@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
- package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
- package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
- package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
- package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
- package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
- package/dist/client/assets/el-input-99gMrutP.js +1 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
- package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
- package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
- package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/index-C2V-ZGji.js +1 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/index-vhkqgpmN.js +2 -0
- package/dist/client/assets/omit-CqPQN3XP.js +1 -0
- package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +363 -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 +2 -56
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +2 -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/client.types.d.ts +4 -32
- package/dist/server/shared/types/client.types.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.js +3 -2
- package/dist/server/shared/types/index.d.ts +3 -3
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +3 -3
- package/dist/server/shared/types/session-context.types.d.ts +35 -0
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
- package/dist/server/shared/types/session-context.types.js +5 -0
- 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.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +34 -61
- package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
- package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
- package/dist/server/src/api/web/clients.js +2 -2
- 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/web/sessions.js +1 -1
- 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 -4
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -102
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -98
- 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/index.js +1 -1
- 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/client-tracker.service.d.ts +3 -128
- package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
- package/dist/server/src/services/client-tracker.service.js +4 -200
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +15 -19
- package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +42 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
- 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 -64
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/search/search-cache.d.ts +0 -19
- package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
- package/dist/server/src/services/search/search-cache.js +0 -24
- package/dist/server/src/services/search/search-core.service.d.ts +5 -5
- package/dist/server/src/services/search/search-core.service.js +11 -11
- package/dist/server/src/services/session/session-manager.d.ts +12 -256
- package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
- package/dist/server/src/services/session/session-manager.js +23 -583
- package/dist/server/src/services/session-tracker.service.d.ts +124 -0
- package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
- package/dist/server/src/services/session-tracker.service.js +176 -0
- 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 +10 -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-colors.d.ts +1 -0
- package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.js +2 -1
- package/dist/server/src/utils/logger/log-context.d.ts +1 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +287 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -8
- package/dist/server/src/utils/logger/log-output.d.ts +2 -2
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-output.js +27 -6
- package/dist/server/src/utils/logger/logger.d.ts +13 -0
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/logger.js +42 -7
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/request-context.d.ts +12 -30
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +10 -30
- 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/tool-args-parser.d.ts +0 -4
- package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
- package/dist/server/src/utils/tool-args-parser.js +0 -7
- 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 +33 -13
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/evaluation/evaluation.test.js +10 -9
- package/dist/server/tests/integration/api/gateway.test.js +24 -39
- 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/temp/test-stack.d.ts +6 -0
- package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
- package/dist/server/tests/temp/test-stack.js +40 -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 -334
- 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 +107 -13
- 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/logger.test.js +101 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/request-context.test.js +9 -28
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +1 -1
- package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
- package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
- package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
- package/dist/client/assets/ServerListView-DralUL71.js +0 -30
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
- package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
- package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
- package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
- package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
- package/dist/client/assets/el-input-CeZiq23m.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-iw_hrrlC.js +0 -1
- package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
- package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
- package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/index-COYaYRbH.js +0 -1
- package/dist/client/assets/index-Cfcvxyee.js +0 -2
- package/dist/client/assets/index-PhuI36Zi.js +0 -1
- package/dist/client/assets/omit-7EL6VJO4.js +0 -1
- package/dist/client/assets/vnode-upjuIlvm.js +0 -1
|
@@ -1,73 +1,19 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
/**
|
|
3
3
|
* Session State Schema
|
|
4
|
-
* Represents the
|
|
4
|
+
* Represents the state of a client session (in-memory only)
|
|
5
5
|
*/
|
|
6
6
|
export declare const SessionStateSchema: z.ZodObject<{
|
|
7
7
|
sessionId: z.ZodString;
|
|
8
8
|
clientName: z.ZodOptional<z.ZodString>;
|
|
9
9
|
clientVersion: z.ZodOptional<z.ZodString>;
|
|
10
10
|
protocolVersion: z.ZodOptional<z.ZodString>;
|
|
11
|
-
cwd: z.ZodOptional<z.ZodString>;
|
|
12
|
-
project: z.ZodOptional<z.ZodString>;
|
|
13
11
|
userAgent: z.ZodOptional<z.ZodString>;
|
|
14
12
|
ip: z.ZodOptional<z.ZodString>;
|
|
13
|
+
capabilities: z.ZodOptional<z.ZodAny>;
|
|
15
14
|
createdAt: z.ZodNumber;
|
|
16
15
|
lastAccessedAt: z.ZodNumber;
|
|
17
16
|
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
18
17
|
}, z.core.$strip>;
|
|
19
18
|
export type SessionState = z.infer<typeof SessionStateSchema>;
|
|
20
|
-
/**
|
|
21
|
-
* Session Store Schema
|
|
22
|
-
* Container for all persisted sessions
|
|
23
|
-
*/
|
|
24
|
-
export declare const SessionStoreSchema: z.ZodObject<{
|
|
25
|
-
version: z.ZodDefault<z.ZodString>;
|
|
26
|
-
sessions: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
27
|
-
sessionId: z.ZodString;
|
|
28
|
-
clientName: z.ZodOptional<z.ZodString>;
|
|
29
|
-
clientVersion: z.ZodOptional<z.ZodString>;
|
|
30
|
-
protocolVersion: z.ZodOptional<z.ZodString>;
|
|
31
|
-
cwd: z.ZodOptional<z.ZodString>;
|
|
32
|
-
project: z.ZodOptional<z.ZodString>;
|
|
33
|
-
userAgent: z.ZodOptional<z.ZodString>;
|
|
34
|
-
ip: z.ZodOptional<z.ZodString>;
|
|
35
|
-
createdAt: z.ZodNumber;
|
|
36
|
-
lastAccessedAt: z.ZodNumber;
|
|
37
|
-
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
38
|
-
}, z.core.$strip>>>;
|
|
39
|
-
}, z.core.$strip>;
|
|
40
|
-
export type SessionStore = z.infer<typeof SessionStoreSchema>;
|
|
41
|
-
/**
|
|
42
|
-
* Create a new empty session store
|
|
43
|
-
*/
|
|
44
|
-
export declare function createEmptySessionStore(): SessionStore;
|
|
45
|
-
/**
|
|
46
|
-
* Validates and normalizes session store data using Zod schema validation.
|
|
47
|
-
*
|
|
48
|
-
* This function takes raw session store data (typically parsed from JSON) and validates it
|
|
49
|
-
* against the SessionStoreSchema. If validation succeeds, it returns the validated and
|
|
50
|
-
* normalized data. If validation fails, it returns an empty session store with default values.
|
|
51
|
-
*
|
|
52
|
-
* The function uses safeParse to prevent exceptions during validation, making it safe to use
|
|
53
|
-
* with untrusted or potentially corrupted data sources like persisted JSON files.
|
|
54
|
-
*
|
|
55
|
-
* @param {unknown} data - Raw session store data to validate (typically from JSON.parse)
|
|
56
|
-
* @returns {SessionStore} Validated session store data, or an empty store if validation fails
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```typescript
|
|
60
|
-
* // Validate data from a JSON file
|
|
61
|
-
* // Note: In practice, sessions are stored in a directory structure:
|
|
62
|
-
* // - sessions/index.json (contains session ID list)
|
|
63
|
-
* // - sessions/{sessionId}.json (individual session files)
|
|
64
|
-
* const validatedStore = validateSessionStore(rawData);
|
|
65
|
-
*
|
|
66
|
-
* // Use the validated store
|
|
67
|
-
* Object.keys(validatedStore.sessions).forEach(sessionId => {
|
|
68
|
-
* console.log(`Session: ${sessionId}`);
|
|
69
|
-
* });
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
export declare function validateSessionStore(data: unknown): SessionStore;
|
|
73
19
|
//# sourceMappingURL=session.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.model.d.ts","sourceRoot":"","sources":["../../../../shared/models/session.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"session.model.d.ts","sourceRoot":"","sources":["../../../../shared/models/session.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAW7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -1,70 +1,17 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
/**
|
|
3
3
|
* Session State Schema
|
|
4
|
-
* Represents the
|
|
4
|
+
* Represents the state of a client session (in-memory only)
|
|
5
5
|
*/
|
|
6
6
|
export const SessionStateSchema = z.object({
|
|
7
7
|
sessionId: z.string(),
|
|
8
8
|
clientName: z.string().optional(),
|
|
9
9
|
clientVersion: z.string().optional(),
|
|
10
10
|
protocolVersion: z.string().optional(),
|
|
11
|
-
cwd: z.string().optional(),
|
|
12
|
-
project: z.string().optional(),
|
|
13
11
|
userAgent: z.string().optional(),
|
|
14
12
|
ip: z.string().optional(),
|
|
13
|
+
capabilities: z.any().optional(),
|
|
15
14
|
createdAt: z.number(),
|
|
16
15
|
lastAccessedAt: z.number(),
|
|
17
16
|
metadata: z.record(z.string(), z.any()).default({})
|
|
18
17
|
});
|
|
19
|
-
/**
|
|
20
|
-
* Session Store Schema
|
|
21
|
-
* Container for all persisted sessions
|
|
22
|
-
*/
|
|
23
|
-
export const SessionStoreSchema = z.object({
|
|
24
|
-
version: z.string().default('1.0.0'),
|
|
25
|
-
sessions: z.record(z.string(), SessionStateSchema).default({})
|
|
26
|
-
});
|
|
27
|
-
/**
|
|
28
|
-
* Create a new empty session store
|
|
29
|
-
*/
|
|
30
|
-
export function createEmptySessionStore() {
|
|
31
|
-
return {
|
|
32
|
-
version: '1.0.0',
|
|
33
|
-
sessions: {}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Validates and normalizes session store data using Zod schema validation.
|
|
38
|
-
*
|
|
39
|
-
* This function takes raw session store data (typically parsed from JSON) and validates it
|
|
40
|
-
* against the SessionStoreSchema. If validation succeeds, it returns the validated and
|
|
41
|
-
* normalized data. If validation fails, it returns an empty session store with default values.
|
|
42
|
-
*
|
|
43
|
-
* The function uses safeParse to prevent exceptions during validation, making it safe to use
|
|
44
|
-
* with untrusted or potentially corrupted data sources like persisted JSON files.
|
|
45
|
-
*
|
|
46
|
-
* @param {unknown} data - Raw session store data to validate (typically from JSON.parse)
|
|
47
|
-
* @returns {SessionStore} Validated session store data, or an empty store if validation fails
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```typescript
|
|
51
|
-
* // Validate data from a JSON file
|
|
52
|
-
* // Note: In practice, sessions are stored in a directory structure:
|
|
53
|
-
* // - sessions/index.json (contains session ID list)
|
|
54
|
-
* // - sessions/{sessionId}.json (individual session files)
|
|
55
|
-
* const validatedStore = validateSessionStore(rawData);
|
|
56
|
-
*
|
|
57
|
-
* // Use the validated store
|
|
58
|
-
* Object.keys(validatedStore.sessions).forEach(sessionId => {
|
|
59
|
-
* console.log(`Session: ${sessionId}`);
|
|
60
|
-
* });
|
|
61
|
-
* ```
|
|
62
|
-
*/
|
|
63
|
-
export function validateSessionStore(data) {
|
|
64
|
-
const result = SessionStoreSchema.safeParse(data);
|
|
65
|
-
if (result.success) {
|
|
66
|
-
return result.data;
|
|
67
|
-
}
|
|
68
|
-
// Return empty store if validation fails
|
|
69
|
-
return createEmptySessionStore();
|
|
70
|
-
}
|
|
@@ -12,11 +12,13 @@ export interface ToolAnnotations {
|
|
|
12
12
|
idempotentHint?: boolean;
|
|
13
13
|
openWorldHint?: boolean;
|
|
14
14
|
}
|
|
15
|
-
export interface
|
|
15
|
+
export interface ToolSummary {
|
|
16
16
|
name: string;
|
|
17
17
|
description?: string;
|
|
18
|
-
inputSchema?: JsonSchema;
|
|
19
18
|
serverName: string;
|
|
19
|
+
}
|
|
20
|
+
export interface Tool extends ToolSummary {
|
|
21
|
+
inputSchema?: JsonSchema;
|
|
20
22
|
annotations?: ToolAnnotations;
|
|
21
23
|
}
|
|
22
24
|
//# sourceMappingURL=tool.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.model.d.ts","sourceRoot":"","sources":["../../../../shared/models/tool.model.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAGD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"tool.model.d.ts","sourceRoot":"","sources":["../../../../shared/models/tool.model.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAGD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B"}
|
|
@@ -1,35 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* @deprecated This file is deprecated. Please import from './session-context.types.js' instead.
|
|
3
|
+
*
|
|
4
|
+
* Client Types (Deprecated - maintained for backward compatibility)
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
* Workspace root information
|
|
7
|
-
*/
|
|
8
|
-
export interface ClientRoot {
|
|
9
|
-
uri: string;
|
|
10
|
-
name?: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Basic request context - for AsyncLocalStorage
|
|
14
|
-
* Contains the minimal set of fields required for requests
|
|
15
|
-
*/
|
|
16
|
-
export interface ClientContext {
|
|
17
|
-
sessionId: string;
|
|
18
|
-
clientName?: string;
|
|
19
|
-
clientVersion?: string;
|
|
20
|
-
protocolVersion?: string;
|
|
21
|
-
cwd?: string;
|
|
22
|
-
project?: string;
|
|
23
|
-
ip?: string;
|
|
24
|
-
userAgent?: string;
|
|
25
|
-
timestamp: number;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Complete client information - for tracking and display
|
|
29
|
-
* Extends ClientContext with runtime state
|
|
30
|
-
*/
|
|
31
|
-
export interface ClientInfo extends ClientContext {
|
|
32
|
-
lastSeen: number;
|
|
33
|
-
roots?: ClientRoot[];
|
|
34
|
-
}
|
|
6
|
+
export type { SessionRoot as ClientRoot, SessionContext as ClientContext, SessionInfo as ClientInfo } from './session-context.types.js';
|
|
35
7
|
//# sourceMappingURL=client.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../../../../shared/types/client.types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../../../../shared/types/client.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,IAAI,UAAU,EACzB,cAAc,IAAI,aAAa,EAC/B,WAAW,IAAI,UAAU,EAC1B,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* @deprecated This file is deprecated. Please import from './session-context.types.js' instead.
|
|
3
|
+
*
|
|
4
|
+
* Client Types (Deprecated - maintained for backward compatibility)
|
|
4
5
|
*/
|
|
5
6
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
export * from './common.types';
|
|
3
|
-
export * from './websocket.types';
|
|
1
|
+
export type { SessionContext, SessionInfo, SessionRoot } from './session-context.types.js';
|
|
2
|
+
export * from './common.types.js';
|
|
3
|
+
export * from './websocket.types.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../shared/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../shared/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG3F,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export * from './common.types';
|
|
3
|
-
export * from './websocket.types';
|
|
1
|
+
// Other types
|
|
2
|
+
export * from './common.types.js';
|
|
3
|
+
export * from './websocket.types.js';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Context Types
|
|
3
|
+
* Shared session context types between frontend and backend
|
|
4
|
+
*/
|
|
5
|
+
import type { ClientCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Workspace root information
|
|
8
|
+
*/
|
|
9
|
+
export interface SessionRoot {
|
|
10
|
+
uri: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Basic request context - for AsyncLocalStorage
|
|
15
|
+
* Contains the minimal set of fields required for requests
|
|
16
|
+
*/
|
|
17
|
+
export interface SessionContext {
|
|
18
|
+
sessionId: string;
|
|
19
|
+
clientName?: string;
|
|
20
|
+
clientVersion?: string;
|
|
21
|
+
protocolVersion?: string;
|
|
22
|
+
ip?: string;
|
|
23
|
+
userAgent?: string;
|
|
24
|
+
capabilities?: ClientCapabilities;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Complete session information - for tracking and display
|
|
29
|
+
* Extends SessionContext with runtime state
|
|
30
|
+
*/
|
|
31
|
+
export interface SessionInfo extends SessionContext {
|
|
32
|
+
lastSeen: number;
|
|
33
|
+
roots?: SessionRoot[];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=session-context.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-context.types.d.ts","sourceRoot":"","sources":["../../../../shared/types/session-context.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACvB"}
|
|
@@ -39,7 +39,8 @@ export interface PingMessage {
|
|
|
39
39
|
}
|
|
40
40
|
export interface FetchLogsMessage {
|
|
41
41
|
type: 'fetch-logs';
|
|
42
|
-
|
|
42
|
+
serverName: string;
|
|
43
|
+
serverIndex: number;
|
|
43
44
|
limit?: number;
|
|
44
45
|
since?: number;
|
|
45
46
|
}
|
|
@@ -47,7 +48,8 @@ export type ClientMessage = SubscribeMessage | UnsubscribeMessage | PingMessage
|
|
|
47
48
|
export interface ServerStatusEvent {
|
|
48
49
|
type: 'server-status';
|
|
49
50
|
data: {
|
|
50
|
-
|
|
51
|
+
serverName: string;
|
|
52
|
+
serverIndex: number;
|
|
51
53
|
status: 'online' | 'offline' | 'error';
|
|
52
54
|
error?: string;
|
|
53
55
|
timestamp: number;
|
|
@@ -56,7 +58,8 @@ export interface ServerStatusEvent {
|
|
|
56
58
|
export interface LogEvent {
|
|
57
59
|
type: 'log';
|
|
58
60
|
data: {
|
|
59
|
-
|
|
61
|
+
serverName: string;
|
|
62
|
+
serverIndex: number;
|
|
60
63
|
logs: Array<{
|
|
61
64
|
level: LogLevel;
|
|
62
65
|
message: string;
|
|
@@ -67,14 +70,16 @@ export interface LogEvent {
|
|
|
67
70
|
export interface ToolsEvent {
|
|
68
71
|
type: 'tools';
|
|
69
72
|
data: {
|
|
70
|
-
|
|
73
|
+
serverName: string;
|
|
74
|
+
serverIndex: number;
|
|
71
75
|
tools: Tool[];
|
|
72
76
|
};
|
|
73
77
|
}
|
|
74
78
|
export interface ResourcesEvent {
|
|
75
79
|
type: 'resources';
|
|
76
80
|
data: {
|
|
77
|
-
|
|
81
|
+
serverName: string;
|
|
82
|
+
serverIndex: number;
|
|
78
83
|
resources: Resource[];
|
|
79
84
|
};
|
|
80
85
|
}
|
|
@@ -93,7 +98,8 @@ export interface ServerDeletedEvent {
|
|
|
93
98
|
export interface ServerConnectedEvent {
|
|
94
99
|
type: 'server-connected';
|
|
95
100
|
data: {
|
|
96
|
-
|
|
101
|
+
serverName: string;
|
|
102
|
+
serverIndex: number;
|
|
97
103
|
status: 'online';
|
|
98
104
|
timestamp: number;
|
|
99
105
|
};
|
|
@@ -101,7 +107,8 @@ export interface ServerConnectedEvent {
|
|
|
101
107
|
export interface ServerDisconnectedEvent {
|
|
102
108
|
type: 'server-disconnected';
|
|
103
109
|
data: {
|
|
104
|
-
|
|
110
|
+
serverName: string;
|
|
111
|
+
serverIndex: number;
|
|
105
112
|
status: 'offline';
|
|
106
113
|
timestamp: number;
|
|
107
114
|
};
|
|
@@ -114,8 +121,8 @@ export interface ToolCallStartedEvent {
|
|
|
114
121
|
type: 'tool-call-started';
|
|
115
122
|
data: {
|
|
116
123
|
requestId: string;
|
|
117
|
-
serverId: string;
|
|
118
124
|
serverName: string;
|
|
125
|
+
serverIndex: number;
|
|
119
126
|
toolName: string;
|
|
120
127
|
timestamp: number;
|
|
121
128
|
args: Record<string, unknown>;
|
|
@@ -125,8 +132,8 @@ export interface ToolCallCompletedEvent {
|
|
|
125
132
|
type: 'tool-call-completed';
|
|
126
133
|
data: {
|
|
127
134
|
requestId: string;
|
|
128
|
-
serverId: string;
|
|
129
135
|
serverName: string;
|
|
136
|
+
serverIndex: number;
|
|
130
137
|
toolName: string;
|
|
131
138
|
timestamp: number;
|
|
132
139
|
result: unknown;
|
|
@@ -136,8 +143,8 @@ export interface ToolCallErrorEvent {
|
|
|
136
143
|
type: 'tool-call-error';
|
|
137
144
|
data: {
|
|
138
145
|
requestId: string;
|
|
139
|
-
serverId: string;
|
|
140
146
|
serverName: string;
|
|
147
|
+
serverIndex: number;
|
|
141
148
|
toolName: string;
|
|
142
149
|
timestamp: number;
|
|
143
150
|
error: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.types.d.ts","sourceRoot":"","sources":["../../../../shared/types/websocket.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG3D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;CAiBzB,CAAC;AAGX,eAAO,MAAM,oBAAoB,2SAAwC,CAAC;AAG1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAMvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"websocket.types.d.ts","sourceRoot":"","sources":["../../../../shared/types/websocket.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-response-wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/debug-response-wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAW5C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"debug-response-wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/debug-response-wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAW5C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAyS9E"}
|
|
@@ -78,7 +78,32 @@ export function wrapReplyForDebug(reply, sessionId) {
|
|
|
78
78
|
let logResponse = primaryBuffer;
|
|
79
79
|
try {
|
|
80
80
|
if (isToolsListResponse(logResponse)) {
|
|
81
|
-
|
|
81
|
+
const simplified = simplifyToolsListResponse(logResponse);
|
|
82
|
+
if (simplified !== null) {
|
|
83
|
+
logResponse = simplified;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Could not simplify, format as pretty JSON
|
|
87
|
+
try {
|
|
88
|
+
// Handle SSE format
|
|
89
|
+
if (logResponse.includes('event: message') && logResponse.includes('data:')) {
|
|
90
|
+
const dataMatch = logResponse.match(/data: ([^\n]+)/);
|
|
91
|
+
if (dataMatch) {
|
|
92
|
+
const jsonData = dataMatch[1].trim();
|
|
93
|
+
const parsed = JSON.parse(jsonData);
|
|
94
|
+
const formattedData = stringifyForLogging(parsed);
|
|
95
|
+
logResponse = `event: message\ndata: ${formattedData}`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
const parsed = JSON.parse(logResponse);
|
|
100
|
+
logResponse = stringifyForLogging(parsed);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// If parsing fails, use original
|
|
105
|
+
}
|
|
106
|
+
}
|
|
82
107
|
}
|
|
83
108
|
else if (hasImageContent(logResponse)) {
|
|
84
109
|
// Simplify image content first
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP Gateway endpoint using Streamable HTTP Transport
|
|
2
|
+
* MCP Gateway endpoint using Streamable HTTP Transport (stateless mode)
|
|
3
3
|
* Handles all MCP protocol requests at /mcp endpoint
|
|
4
|
-
*
|
|
5
|
-
* This is a thin wrapper around modular utilities for better maintainability.
|
|
6
4
|
*/
|
|
7
5
|
import type { FastifyInstance } from 'fastify';
|
|
8
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/gateway.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../../../src/api/mcp/gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAM7E;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,iBA0F9D"}
|
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP Gateway endpoint using Streamable HTTP Transport
|
|
2
|
+
* MCP Gateway endpoint using Streamable HTTP Transport (stateless mode)
|
|
3
3
|
* Handles all MCP protocol requests at /mcp endpoint
|
|
4
|
-
*
|
|
5
|
-
* This is a thin wrapper around modular utilities for better maintainability.
|
|
6
4
|
*/
|
|
7
|
-
import { logger, LOG_MODULES } from '../../utils/logger.js';
|
|
8
|
-
import { stringifyForLogging } from '../../utils/json-utils.js';
|
|
9
|
-
import { requestContext } from '../../utils/request-context.js';
|
|
10
|
-
import { clientTrackerService } from '../../services/client-tracker.service.js';
|
|
11
|
-
import { mcpSessionManager } from '../../services/mcp-session-manager.js';
|
|
12
|
-
import { cleanupStaleSseStreams } from './sse-stream-manager.js';
|
|
13
|
-
import { extractSessionContext } from './session-context-extractor.js';
|
|
5
|
+
import { logger, LOG_MODULES } from '../../utils/logger/index.js';
|
|
6
|
+
import { stringifyForLogging, getMcpCommDebugSetting } from '../../utils/json-utils.js';
|
|
14
7
|
import { wrapReplyForDebug } from './debug-response-wrapper.js';
|
|
8
|
+
import { globalTransport } from '../../services/gateway/global-transport.js';
|
|
15
9
|
/**
|
|
16
10
|
* MCP Gateway routes registration.
|
|
17
11
|
*
|
|
@@ -19,70 +13,49 @@ import { wrapReplyForDebug } from './debug-response-wrapper.js';
|
|
|
19
13
|
*/
|
|
20
14
|
export async function mcpGatewayRoutes(fastify) {
|
|
21
15
|
const handleMcpRequest = async (request, reply) => {
|
|
22
|
-
// First, log that we received the request
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
16
|
+
// First, log that we received the request
|
|
17
|
+
if (getMcpCommDebugSetting()) {
|
|
18
|
+
let initialLogMsg = `MCP Gateway ${request.method} ${request.url}`;
|
|
19
|
+
// Combine headers and body into one log block
|
|
20
|
+
initialLogMsg += `\n Request headers: ${stringifyForLogging(request.headers)}`;
|
|
21
|
+
if (request.body) {
|
|
22
|
+
try {
|
|
23
|
+
const preview = stringifyForLogging(request.body);
|
|
24
|
+
initialLogMsg += `\n Body: ${preview}`;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
initialLogMsg += `\n Body: [Unserializable]`;
|
|
28
|
+
}
|
|
33
29
|
}
|
|
30
|
+
logger.debug(initialLogMsg, LOG_MODULES.COMMUNICATION);
|
|
34
31
|
}
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
sessionLogMsg += ` [Client: ${clientContext.clientName}]`;
|
|
46
|
-
logger.debug(sessionLogMsg, LOG_MODULES.GATEWAY);
|
|
47
|
-
reply.header('Content-Type', 'application/json');
|
|
48
|
-
if (!request.headers['accept']) {
|
|
49
|
-
request.headers['accept'] = 'application/json, text/event-stream';
|
|
32
|
+
// Reject GET requests without Accept: text/event-stream (health-check hook compatibility)
|
|
33
|
+
const accept = request.raw.headers['accept'] || '';
|
|
34
|
+
if (request.method === 'GET' && !accept.includes('text/event-stream')) {
|
|
35
|
+
reply.raw.writeHead(400, { 'Content-Type': 'application/json' });
|
|
36
|
+
reply.raw.end(JSON.stringify({
|
|
37
|
+
jsonrpc: '2.0',
|
|
38
|
+
error: { code: -32000, message: 'Bad Request: Accept: text/event-stream required' },
|
|
39
|
+
id: null
|
|
40
|
+
}));
|
|
41
|
+
return;
|
|
50
42
|
}
|
|
51
|
-
|
|
43
|
+
reply.header('Content-Type', 'application/json');
|
|
44
|
+
wrapReplyForDebug(reply, '');
|
|
52
45
|
reply.hijack();
|
|
53
|
-
const startTime = Date.now();
|
|
54
46
|
try {
|
|
55
|
-
|
|
56
|
-
// Only explicit initialize requests require SDK initialization handling
|
|
57
|
-
// For all other requests (tools/list, etc.), skip initialization checks
|
|
58
|
-
const isInitializeRequest = request.body?.method === 'initialize';
|
|
59
|
-
const hasRestoredState = !!mcpSessionManager.getSessionState(sessionId);
|
|
60
|
-
const requireInitialize = isInitializeRequest;
|
|
61
|
-
logger.debug(`Request for session: ${sessionId}, method: ${request.body?.method || 'GET'}, isInitialize: ${isInitializeRequest}, hasRestoredState: ${hasRestoredState}, requireInitialize: ${requireInitialize}`, LOG_MODULES.GATEWAY);
|
|
62
|
-
const session = await mcpSessionManager.getSession(sessionId, requireInitialize);
|
|
63
|
-
// Proactive cleanup: For GET requests (SSE connections), clean up stale streams first
|
|
64
|
-
// This prevents "Only one SSE stream is allowed per session" errors
|
|
65
|
-
if (request.method === 'GET') {
|
|
66
|
-
logger.debug(`Proactive SSE stream cleanup for session ${sessionId} before handling request`, LOG_MODULES.GATEWAY);
|
|
67
|
-
cleanupStaleSseStreams(session.transport, sessionId);
|
|
68
|
-
}
|
|
69
|
-
await requestContext.run(clientContext, async () => {
|
|
70
|
-
await session.transport.handleRequest(request.raw, reply.raw, request.body);
|
|
71
|
-
});
|
|
72
|
-
const duration = Date.now() - startTime;
|
|
73
|
-
logger.info(`MCP Gateway response for ${sessionId}: handled in ${duration}ms`, LOG_MODULES.GATEWAY);
|
|
47
|
+
await globalTransport.handleRequest(request.raw, reply.raw, request.body);
|
|
74
48
|
}
|
|
75
49
|
catch (error) {
|
|
76
50
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
77
|
-
logger.error(`Error handling MCP request
|
|
51
|
+
logger.error(`Error handling MCP request: ${errorMessage}`, error, LOG_MODULES.GATEWAY);
|
|
78
52
|
if (!reply.raw.headersSent) {
|
|
79
53
|
reply.raw.writeHead(500, { 'Content-Type': 'application/json' });
|
|
80
54
|
reply.raw.end(JSON.stringify({
|
|
81
55
|
jsonrpc: '2.0',
|
|
82
56
|
error: {
|
|
83
57
|
code: -32000,
|
|
84
|
-
message: 'Internal Server Error'
|
|
85
|
-
data: { sessionId }
|
|
58
|
+
message: 'Internal Server Error'
|
|
86
59
|
},
|
|
87
60
|
id: null
|
|
88
61
|
}));
|
|
@@ -101,7 +74,7 @@ export async function mcpGatewayRoutes(fastify) {
|
|
|
101
74
|
},
|
|
102
75
|
handler: handleMcpRequest
|
|
103
76
|
});
|
|
104
|
-
// Handle any subpaths if client appends them
|
|
77
|
+
// Handle any subpaths if client appends them
|
|
105
78
|
fastify.all('/mcp/*', {
|
|
106
79
|
bodyLimit: 10 * 1024 * 1024, // 10MB limit
|
|
107
80
|
preHandler: (request, _reply, done) => {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Extracts and resolves session context from incoming requests.
|
|
4
4
|
*/
|
|
5
5
|
import type { FastifyRequest } from 'fastify';
|
|
6
|
-
import type {
|
|
6
|
+
import type { SessionContext } from '../../../shared/types/session-context.types.js';
|
|
7
7
|
export interface RequestBody {
|
|
8
8
|
method?: string;
|
|
9
9
|
params?: {
|
|
@@ -30,18 +30,18 @@ export interface RequestBody {
|
|
|
30
30
|
* project information, IP address, and user agent for comprehensive session tracking.
|
|
31
31
|
*
|
|
32
32
|
* @param {FastifyRequest<{ Body: RequestBody | null }>} request - Incoming Fastify request object
|
|
33
|
-
* @returns {{ sessionId: string;
|
|
33
|
+
* @returns {{ sessionId: string; sessionContext: SessionContext }} Object containing resolved session ID and enriched session context
|
|
34
34
|
*
|
|
35
35
|
* @example
|
|
36
36
|
* ```typescript
|
|
37
|
-
* const { sessionId,
|
|
38
|
-
* console.log(`Session: ${sessionId}, Client: ${
|
|
37
|
+
* const { sessionId, sessionContext } = extractSessionContext(request);
|
|
38
|
+
* console.log(`Session: ${sessionId}, Client: ${sessionContext.clientName}`);
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
41
|
export declare function extractSessionContext(request: FastifyRequest<{
|
|
42
42
|
Body: RequestBody | null;
|
|
43
43
|
}>): {
|
|
44
44
|
sessionId: string;
|
|
45
|
-
|
|
45
|
+
sessionContext: SessionContext;
|
|
46
46
|
};
|
|
47
47
|
//# sourceMappingURL=session-context-extractor.d.ts.map
|