@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
|
@@ -4,24 +4,20 @@
|
|
|
4
4
|
*/
|
|
5
5
|
// Individual system tool name constants
|
|
6
6
|
export const LIST_SERVERS_TOOL = 'list_servers';
|
|
7
|
-
export const
|
|
8
|
-
export const LIST_ALL_TOOLS_IN_SERVER_TOOL = 'list_all_tools_in_server';
|
|
9
|
-
export const FIND_TOOLS_IN_SERVER_TOOL = 'find_tools_in_server';
|
|
7
|
+
export const LIST_TOOLS_IN_SERVER_TOOL = 'list_tools_in_server';
|
|
10
8
|
export const GET_TOOL_TOOL = 'get_tool';
|
|
11
9
|
export const CALL_TOOL_TOOL = 'call_tool';
|
|
12
|
-
export const
|
|
10
|
+
export const UPDATE_SERVER_DESCRIPTION_TOOL = 'update_server_description';
|
|
13
11
|
/**
|
|
14
12
|
* List of all system tool names
|
|
15
13
|
* This array is used to identify system tools across the application
|
|
16
14
|
*/
|
|
17
15
|
export const SYSTEM_TOOL_NAMES = [
|
|
18
16
|
LIST_SERVERS_TOOL,
|
|
19
|
-
|
|
20
|
-
LIST_ALL_TOOLS_IN_SERVER_TOOL,
|
|
21
|
-
FIND_TOOLS_IN_SERVER_TOOL,
|
|
17
|
+
LIST_TOOLS_IN_SERVER_TOOL,
|
|
22
18
|
GET_TOOL_TOOL,
|
|
23
19
|
CALL_TOOL_TOOL,
|
|
24
|
-
|
|
20
|
+
UPDATE_SERVER_DESCRIPTION_TOOL
|
|
25
21
|
];
|
|
26
22
|
// Individual gateway server name constant
|
|
27
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/pid/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/pid/manager.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,UAAU;IACrB;;;;;;;;;;;;;;;;;;OAkBG;WACW,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAmBtD;;;;;;;;;;;;;;;;OAgBG;WACW,SAAS,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAIvD;;;;;;;;;;;;;;;OAeG;WACW,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;IAI7D;;;;;;;;;;;;;;;;OAgBG;WACW,SAAS,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;IAa1D;;;;;;;;;;;;;;;;;;;OAmBG;WACW,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;CAG/D"}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* PidManager.removePid();
|
|
25
25
|
*/
|
|
26
26
|
import { logger } from '../utils/logger.js';
|
|
27
|
+
import { LOG_MODULES } from '../utils/logger/log-modules.js';
|
|
27
28
|
import { writePidFile, readPidFile, removePidFile, pidFileExists } from './file.js';
|
|
28
29
|
export class PidManager {
|
|
29
30
|
/**
|
|
@@ -60,7 +61,7 @@ export class PidManager {
|
|
|
60
61
|
});
|
|
61
62
|
}
|
|
62
63
|
catch (error) {
|
|
63
|
-
logger.error('Failed to write PID file:', error);
|
|
64
|
+
logger.error('Failed to write PID file:', error, LOG_MODULES.PID_MANAGER);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { buildApp } from '../app.js';
|
|
2
2
|
import { configManager } from '../config/config-manager.js';
|
|
3
|
+
import { resolveInstanceConfig } from '../config/config-migrator.js';
|
|
3
4
|
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
4
5
|
import { mcpConnectionManager } from '../services/mcp-connection-manager.js';
|
|
5
6
|
import { PidManager } from '../pid/manager.js';
|
|
@@ -70,31 +71,44 @@ async function startDevServer() {
|
|
|
70
71
|
logger.info('Initializing server connections...', LOG_MODULES.DEV_SERVER);
|
|
71
72
|
const serverConfigs = configManager.getServers();
|
|
72
73
|
for (const { name: serverName, config: serverConfig } of serverConfigs) {
|
|
73
|
-
if
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
// Check if there are existing instances
|
|
75
|
+
const existingInstances = configManager.getServerInstancesByName(serverName);
|
|
76
|
+
if (existingInstances.length === 0) {
|
|
77
|
+
// Auto-create instance for enabled servers
|
|
78
|
+
try {
|
|
79
|
+
const newInstance = await configManager.addServerInstance(serverName, {});
|
|
80
|
+
// Connect the new instance
|
|
81
|
+
const resolvedConfig = resolveInstanceConfig(serverConfig, newInstance.id);
|
|
82
|
+
if (resolvedConfig && resolvedConfig.enabled !== false) {
|
|
83
|
+
mcpConnectionManager
|
|
84
|
+
.connect(serverName, newInstance.index ?? 0, {
|
|
85
|
+
...resolvedConfig,
|
|
86
|
+
id: newInstance.id
|
|
87
|
+
})
|
|
88
|
+
.catch((err) => {
|
|
82
89
|
logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
|
|
83
90
|
});
|
|
84
91
|
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
|
|
87
|
-
}
|
|
88
92
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
existingInstances.forEach((instance) => {
|
|
92
|
-
mcpConnectionManager.connect({ ...serverConfig, ...instance }).catch((err) => {
|
|
93
|
-
logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
93
|
+
catch (err) {
|
|
94
|
+
logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
|
|
96
95
|
}
|
|
97
96
|
}
|
|
97
|
+
else {
|
|
98
|
+
// Connect existing instances
|
|
99
|
+
existingInstances.forEach((instance) => {
|
|
100
|
+
if (instance.enabled !== false) {
|
|
101
|
+
const resolvedConfig = resolveInstanceConfig(serverConfig, instance.id);
|
|
102
|
+
if (resolvedConfig) {
|
|
103
|
+
mcpConnectionManager
|
|
104
|
+
.connect(serverName, instance.index ?? 0, { ...resolvedConfig, id: instance.id })
|
|
105
|
+
.catch((err) => {
|
|
106
|
+
logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
98
112
|
}
|
|
99
113
|
// Listen on configured port
|
|
100
114
|
await app.listen({
|
|
@@ -165,7 +179,7 @@ process.on('uncaughtException', (err) => {
|
|
|
165
179
|
});
|
|
166
180
|
// Handle unhandled promise rejections
|
|
167
181
|
process.on('unhandledRejection', (reason, promise) => {
|
|
168
|
-
logger.error('Unhandled Rejection
|
|
182
|
+
logger.error('Unhandled Rejection:', { promise, reason }, LOG_MODULES.DEV_SERVER);
|
|
169
183
|
process.exit(1);
|
|
170
184
|
});
|
|
171
185
|
startDevServer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/server/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/server/runner.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAuI9F"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { buildApp } from '../app.js';
|
|
2
2
|
import { configManager } from '../config/config-manager.js';
|
|
3
|
-
import {
|
|
3
|
+
import { resolveInstanceConfig } from '../config/config-migrator.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { LOG_MODULES } from '../utils/logger/log-modules.js';
|
|
4
6
|
import { setJsonPrettyConfigGetter } from '../utils/json-utils.js';
|
|
5
7
|
import { mcpConnectionManager } from '../services/mcp-connection-manager.js';
|
|
6
8
|
import { gateway } from '../services/gateway.service.js';
|
|
@@ -77,18 +79,18 @@ export async function runServer(options = {}) {
|
|
|
77
79
|
if (portCheck.inUse) {
|
|
78
80
|
if (portCheck.isSelfProject) {
|
|
79
81
|
// This project is already running
|
|
80
|
-
logger.error(`MCP Hub Lite is already running on port ${port} (PID: ${portCheck.pid})
|
|
81
|
-
logger.error(`Use 'npm run stop' or 'mcp-hub-lite stop' to stop the running instance
|
|
82
|
+
logger.error(`MCP Hub Lite is already running on port ${port} (PID: ${portCheck.pid})`, LOG_MODULES.SERVER);
|
|
83
|
+
logger.error(`Use 'npm run stop' or 'mcp-hub-lite stop' to stop the running instance.`, LOG_MODULES.SERVER);
|
|
82
84
|
process.exit(1);
|
|
83
85
|
}
|
|
84
86
|
else {
|
|
85
87
|
// Port is occupied by another application
|
|
86
|
-
logger.error(`Port ${port} is already in use by another application
|
|
87
|
-
logger.error(` Process: ${portCheck.processName} (PID: ${portCheck.pid})
|
|
88
|
+
logger.error(`Port ${port} is already in use by another application:`, LOG_MODULES.SERVER);
|
|
89
|
+
logger.error(` Process: ${portCheck.processName} (PID: ${portCheck.pid})`, LOG_MODULES.SERVER);
|
|
88
90
|
if (portCheck.commandLine) {
|
|
89
|
-
logger.error(` Command: ${portCheck.commandLine}
|
|
91
|
+
logger.error(` Command: ${portCheck.commandLine}`, LOG_MODULES.SERVER);
|
|
90
92
|
}
|
|
91
|
-
logger.error(`Please stop the conflicting application or use a different port
|
|
93
|
+
logger.error(`Please stop the conflicting application or use a different port.`, LOG_MODULES.SERVER);
|
|
92
94
|
process.exit(1);
|
|
93
95
|
}
|
|
94
96
|
}
|
|
@@ -97,31 +99,44 @@ export async function runServer(options = {}) {
|
|
|
97
99
|
logger.info('Initializing server connections...', LOG_MODULES.SERVER);
|
|
98
100
|
const serverConfigs = configManager.getServers();
|
|
99
101
|
for (const { name: serverName, config: serverConfig } of serverConfigs) {
|
|
100
|
-
if
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
102
|
+
// Check if there are existing instances
|
|
103
|
+
const existingInstances = configManager.getServerInstancesByName(serverName);
|
|
104
|
+
if (existingInstances.length === 0) {
|
|
105
|
+
// Auto-create instance for enabled servers
|
|
106
|
+
try {
|
|
107
|
+
const newInstance = await configManager.addServerInstance(serverName, {});
|
|
108
|
+
// Connect the new instance
|
|
109
|
+
const resolvedConfig = resolveInstanceConfig(serverConfig, newInstance.id);
|
|
110
|
+
if (resolvedConfig && resolvedConfig.enabled !== false) {
|
|
111
|
+
mcpConnectionManager
|
|
112
|
+
.connect(serverName, newInstance.index ?? 0, {
|
|
113
|
+
...resolvedConfig,
|
|
114
|
+
id: newInstance.id
|
|
115
|
+
})
|
|
116
|
+
.catch((err) => {
|
|
109
117
|
logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
|
|
110
118
|
});
|
|
111
119
|
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.SERVER);
|
|
114
|
-
}
|
|
115
120
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
existingInstances.forEach((instance) => {
|
|
119
|
-
mcpConnectionManager.connect({ ...serverConfig, ...instance }).catch((err) => {
|
|
120
|
-
logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
121
|
+
catch (err) {
|
|
122
|
+
logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.SERVER);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
+
else {
|
|
126
|
+
// Connect existing instances
|
|
127
|
+
existingInstances.forEach((instance) => {
|
|
128
|
+
if (instance.enabled !== false) {
|
|
129
|
+
const resolvedConfig = resolveInstanceConfig(serverConfig, instance.id);
|
|
130
|
+
if (resolvedConfig) {
|
|
131
|
+
mcpConnectionManager
|
|
132
|
+
.connect(serverName, instance.index ?? 0, { ...resolvedConfig, id: instance.id })
|
|
133
|
+
.catch((err) => {
|
|
134
|
+
logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
125
140
|
}
|
|
126
141
|
// Setup signal handlers for graceful shutdown
|
|
127
142
|
const shutdown = async (signal) => {
|
|
@@ -1,132 +1,7 @@
|
|
|
1
|
-
import type { ClientContext, ClientInfo, ClientRoot } from '../../shared/types/client.types.js';
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
2
|
+
* @deprecated This file is deprecated. Please import from './session-tracker.service.js' instead.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
* MCP clients) and tracks their connection state, metadata, and workspace roots.
|
|
7
|
-
* It provides automatic cleanup of stale clients after a timeout period and
|
|
8
|
-
* publishes connection/disconnection events via the event bus.
|
|
9
|
-
*
|
|
10
|
-
* The service is primarily used by the MCP session manager to track which clients
|
|
11
|
-
* are connected and maintain their context information for proper session management.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* // Update client information when a new connection is established
|
|
15
|
-
* clientTrackerService.updateClient({
|
|
16
|
-
* sessionId: 'session-123',
|
|
17
|
-
* clientName: 'VS Code',
|
|
18
|
-
* clientVersion: '1.85.0',
|
|
19
|
-
* cwd: '/home/user/project'
|
|
20
|
-
* });
|
|
21
|
-
*
|
|
22
|
-
* // Get all currently connected clients
|
|
23
|
-
* const clients = clientTrackerService.getClients();
|
|
4
|
+
* Client Tracker Service (Deprecated - maintained for backward compatibility)
|
|
24
5
|
*/
|
|
25
|
-
|
|
26
|
-
private clients;
|
|
27
|
-
private get TIMEOUT_MS();
|
|
28
|
-
/**
|
|
29
|
-
* Creates a new client tracker service instance.
|
|
30
|
-
*
|
|
31
|
-
* Initializes the service with automatic periodic cleanup of stale clients
|
|
32
|
-
* every 60 seconds to prevent memory leaks from disconnected clients.
|
|
33
|
-
*/
|
|
34
|
-
constructor();
|
|
35
|
-
/**
|
|
36
|
-
* Updates or creates a client entry with the provided context information.
|
|
37
|
-
*
|
|
38
|
-
* This method is called whenever a client sends a request with context information.
|
|
39
|
-
* It preserves existing client metadata that isn't provided in the new context,
|
|
40
|
-
* ensuring that clients don't lose their previously established information.
|
|
41
|
-
*
|
|
42
|
-
* If this is a new client (not previously tracked), it publishes a 'client-connected'
|
|
43
|
-
* event to notify other services about the new connection.
|
|
44
|
-
*
|
|
45
|
-
* @param context - The client context containing session ID and optional metadata
|
|
46
|
-
* @param context.sessionId - Unique identifier for the client session
|
|
47
|
-
* @param context.clientName - Optional name of the client application
|
|
48
|
-
* @param context.clientVersion - Optional version of the client application
|
|
49
|
-
* @param context.protocolVersion - Optional MCP protocol version
|
|
50
|
-
* @param context.project - Optional project identifier
|
|
51
|
-
* @param context.cwd - Optional current working directory
|
|
52
|
-
* @param context.userAgent - Optional user agent string
|
|
53
|
-
* @param context.ip - Optional client IP address
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* clientTrackerService.updateClient({
|
|
57
|
-
* sessionId: 'session-123',
|
|
58
|
-
* clientName: 'VS Code',
|
|
59
|
-
* clientVersion: '1.85.0',
|
|
60
|
-
* cwd: '/home/user/project'
|
|
61
|
-
* });
|
|
62
|
-
*/
|
|
63
|
-
updateClient(context: ClientContext): void;
|
|
64
|
-
/**
|
|
65
|
-
* Updates the workspace roots for a specific client session.
|
|
66
|
-
*
|
|
67
|
-
* This method is typically called when a client provides its workspace root
|
|
68
|
-
* directories, which helps determine the client's working directory context.
|
|
69
|
-
* If the client doesn't have a current working directory (cwd) set, it will
|
|
70
|
-
* attempt to infer one from the first root URI in the list.
|
|
71
|
-
*
|
|
72
|
-
* For file:// URIs, it converts them to local file paths using Node.js's
|
|
73
|
-
* fileURLToPath utility. For other URI schemes, it uses the URI directly.
|
|
74
|
-
*
|
|
75
|
-
* @param sessionId - The unique session identifier for the client
|
|
76
|
-
* @param roots - Array of client root objects containing URI information
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* clientTrackerService.updateClientRoots('session-123', [
|
|
80
|
-
* { uri: 'file:///home/user/project' },
|
|
81
|
-
* { uri: 'file:///home/user/other-project' }
|
|
82
|
-
* ]);
|
|
83
|
-
*/
|
|
84
|
-
updateClientRoots(sessionId: string, roots: ClientRoot[]): void;
|
|
85
|
-
/**
|
|
86
|
-
* Retrieves all currently tracked client information.
|
|
87
|
-
*
|
|
88
|
-
* Returns an array of all active client info objects, including their metadata
|
|
89
|
-
* and connection state. This is useful for monitoring all connected clients
|
|
90
|
-
* or displaying client information in administrative interfaces.
|
|
91
|
-
*
|
|
92
|
-
* @returns Array of ClientInfo objects representing all tracked clients
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* const allClients = clientTrackerService.getClients();
|
|
96
|
-
* console.log(`Currently tracking ${allClients.length} clients`);
|
|
97
|
-
*/
|
|
98
|
-
getClients(): ClientInfo[];
|
|
99
|
-
/**
|
|
100
|
-
* Retrieves client information for a specific session ID.
|
|
101
|
-
*
|
|
102
|
-
* Returns the complete client info object for the given session ID, or undefined
|
|
103
|
-
* if no client with that session ID is currently being tracked.
|
|
104
|
-
*
|
|
105
|
-
* @param sessionId - The unique session identifier to look up
|
|
106
|
-
* @returns ClientInfo object if found, undefined otherwise
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
* const client = clientTrackerService.getClient('session-123');
|
|
110
|
-
* if (client) {
|
|
111
|
-
* console.log(`Client ${client.clientName} is connected`);
|
|
112
|
-
* }
|
|
113
|
-
*/
|
|
114
|
-
getClient(sessionId: string): ClientInfo | undefined;
|
|
115
|
-
/**
|
|
116
|
-
* Cleans up stale client entries that haven't been seen recently.
|
|
117
|
-
*
|
|
118
|
-
* This private method is called periodically to remove clients that haven't
|
|
119
|
-
* sent any requests within the timeout period (5 minutes by default). When
|
|
120
|
-
* a client is removed, it publishes a 'client-disconnected' event to notify
|
|
121
|
-
* other services about the disconnection.
|
|
122
|
-
*
|
|
123
|
-
* This prevents memory leaks from accumulating disconnected clients and ensures
|
|
124
|
-
* that the client registry only contains active connections.
|
|
125
|
-
*
|
|
126
|
-
* @private
|
|
127
|
-
*/
|
|
128
|
-
private cleanup;
|
|
129
|
-
}
|
|
130
|
-
export declare const clientTrackerService: ClientTrackerService;
|
|
131
|
-
export {};
|
|
6
|
+
export { sessionTrackerService, sessionTrackerService as clientTrackerService, type SessionTrackerService } from './session-tracker.service.js';
|
|
132
7
|
//# sourceMappingURL=client-tracker.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-tracker.service.d.ts","sourceRoot":"","sources":["../../../../src/services/client-tracker.service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"client-tracker.service.d.ts","sourceRoot":"","sources":["../../../../src/services/client-tracker.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,IAAI,oBAAoB,EAC7C,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,203 +1,7 @@
|
|
|
1
|
-
import { logger } from '../utils/logger.js';
|
|
2
|
-
import { eventBus } from './event-bus.service.js';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { configManager } from '../config/config-manager.js';
|
|
5
|
-
import { formatDuration } from '../utils/format-utils.js';
|
|
6
1
|
/**
|
|
7
|
-
*
|
|
2
|
+
* @deprecated This file is deprecated. Please import from './session-tracker.service.js' instead.
|
|
8
3
|
*
|
|
9
|
-
*
|
|
10
|
-
* MCP clients) and tracks their connection state, metadata, and workspace roots.
|
|
11
|
-
* It provides automatic cleanup of stale clients after a timeout period and
|
|
12
|
-
* publishes connection/disconnection events via the event bus.
|
|
13
|
-
*
|
|
14
|
-
* The service is primarily used by the MCP session manager to track which clients
|
|
15
|
-
* are connected and maintain their context information for proper session management.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* // Update client information when a new connection is established
|
|
19
|
-
* clientTrackerService.updateClient({
|
|
20
|
-
* sessionId: 'session-123',
|
|
21
|
-
* clientName: 'VS Code',
|
|
22
|
-
* clientVersion: '1.85.0',
|
|
23
|
-
* cwd: '/home/user/project'
|
|
24
|
-
* });
|
|
25
|
-
*
|
|
26
|
-
* // Get all currently connected clients
|
|
27
|
-
* const clients = clientTrackerService.getClients();
|
|
4
|
+
* Client Tracker Service (Deprecated - maintained for backward compatibility)
|
|
28
5
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// Use the same timeout as session manager (default 30 minutes)
|
|
32
|
-
get TIMEOUT_MS() {
|
|
33
|
-
return configManager.getConfig().security.sessionTimeout;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Creates a new client tracker service instance.
|
|
37
|
-
*
|
|
38
|
-
* Initializes the service with automatic periodic cleanup of stale clients
|
|
39
|
-
* every 60 seconds to prevent memory leaks from disconnected clients.
|
|
40
|
-
*/
|
|
41
|
-
constructor() {
|
|
42
|
-
// Periodic cleanup
|
|
43
|
-
setInterval(() => this.cleanup(), 60000);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Updates or creates a client entry with the provided context information.
|
|
47
|
-
*
|
|
48
|
-
* This method is called whenever a client sends a request with context information.
|
|
49
|
-
* It preserves existing client metadata that isn't provided in the new context,
|
|
50
|
-
* ensuring that clients don't lose their previously established information.
|
|
51
|
-
*
|
|
52
|
-
* If this is a new client (not previously tracked), it publishes a 'client-connected'
|
|
53
|
-
* event to notify other services about the new connection.
|
|
54
|
-
*
|
|
55
|
-
* @param context - The client context containing session ID and optional metadata
|
|
56
|
-
* @param context.sessionId - Unique identifier for the client session
|
|
57
|
-
* @param context.clientName - Optional name of the client application
|
|
58
|
-
* @param context.clientVersion - Optional version of the client application
|
|
59
|
-
* @param context.protocolVersion - Optional MCP protocol version
|
|
60
|
-
* @param context.project - Optional project identifier
|
|
61
|
-
* @param context.cwd - Optional current working directory
|
|
62
|
-
* @param context.userAgent - Optional user agent string
|
|
63
|
-
* @param context.ip - Optional client IP address
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* clientTrackerService.updateClient({
|
|
67
|
-
* sessionId: 'session-123',
|
|
68
|
-
* clientName: 'VS Code',
|
|
69
|
-
* clientVersion: '1.85.0',
|
|
70
|
-
* cwd: '/home/user/project'
|
|
71
|
-
* });
|
|
72
|
-
*/
|
|
73
|
-
updateClient(context) {
|
|
74
|
-
const existing = this.clients.get(context.sessionId);
|
|
75
|
-
const clientInfo = {
|
|
76
|
-
...context,
|
|
77
|
-
// Preserve existing info if not provided in new request
|
|
78
|
-
clientName: context.clientName || existing?.clientName,
|
|
79
|
-
clientVersion: context.clientVersion || existing?.clientVersion,
|
|
80
|
-
protocolVersion: context.protocolVersion || existing?.protocolVersion,
|
|
81
|
-
project: context.project || existing?.project,
|
|
82
|
-
cwd: context.cwd || existing?.cwd, // Preserve CWD if not provided in new request (e.g. inferred from roots)
|
|
83
|
-
userAgent: context.userAgent || existing?.userAgent,
|
|
84
|
-
ip: context.ip || existing?.ip,
|
|
85
|
-
lastSeen: Date.now(),
|
|
86
|
-
roots: existing?.roots // Preserve roots if already fetched
|
|
87
|
-
};
|
|
88
|
-
this.clients.set(context.sessionId, clientInfo);
|
|
89
|
-
// If it's a new client, publish connection event
|
|
90
|
-
if (!existing) {
|
|
91
|
-
eventBus.publish('client-connected', {
|
|
92
|
-
timestamp: Date.now(),
|
|
93
|
-
client: clientInfo
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Updates the workspace roots for a specific client session.
|
|
99
|
-
*
|
|
100
|
-
* This method is typically called when a client provides its workspace root
|
|
101
|
-
* directories, which helps determine the client's working directory context.
|
|
102
|
-
* If the client doesn't have a current working directory (cwd) set, it will
|
|
103
|
-
* attempt to infer one from the first root URI in the list.
|
|
104
|
-
*
|
|
105
|
-
* For file:// URIs, it converts them to local file paths using Node.js's
|
|
106
|
-
* fileURLToPath utility. For other URI schemes, it uses the URI directly.
|
|
107
|
-
*
|
|
108
|
-
* @param sessionId - The unique session identifier for the client
|
|
109
|
-
* @param roots - Array of client root objects containing URI information
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* clientTrackerService.updateClientRoots('session-123', [
|
|
113
|
-
* { uri: 'file:///home/user/project' },
|
|
114
|
-
* { uri: 'file:///home/user/other-project' }
|
|
115
|
-
* ]);
|
|
116
|
-
*/
|
|
117
|
-
updateClientRoots(sessionId, roots) {
|
|
118
|
-
const client = this.clients.get(sessionId);
|
|
119
|
-
if (client) {
|
|
120
|
-
client.roots = roots;
|
|
121
|
-
client.lastSeen = Date.now();
|
|
122
|
-
// If CWD is missing, try to infer from roots
|
|
123
|
-
if (!client.cwd && roots.length > 0) {
|
|
124
|
-
// Convert file:// uri to path if possible, or just use URI
|
|
125
|
-
const root = roots[0];
|
|
126
|
-
if (root.uri.startsWith('file://')) {
|
|
127
|
-
try {
|
|
128
|
-
client.cwd = fileURLToPath(root.uri);
|
|
129
|
-
}
|
|
130
|
-
catch {
|
|
131
|
-
client.cwd = root.uri;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
client.cwd = root.uri;
|
|
136
|
-
}
|
|
137
|
-
logger.debug(`Inferred CWD for session ${sessionId} from roots: ${client.cwd}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Retrieves all currently tracked client information.
|
|
143
|
-
*
|
|
144
|
-
* Returns an array of all active client info objects, including their metadata
|
|
145
|
-
* and connection state. This is useful for monitoring all connected clients
|
|
146
|
-
* or displaying client information in administrative interfaces.
|
|
147
|
-
*
|
|
148
|
-
* @returns Array of ClientInfo objects representing all tracked clients
|
|
149
|
-
*
|
|
150
|
-
* @example
|
|
151
|
-
* const allClients = clientTrackerService.getClients();
|
|
152
|
-
* console.log(`Currently tracking ${allClients.length} clients`);
|
|
153
|
-
*/
|
|
154
|
-
getClients() {
|
|
155
|
-
return Array.from(this.clients.values());
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Retrieves client information for a specific session ID.
|
|
159
|
-
*
|
|
160
|
-
* Returns the complete client info object for the given session ID, or undefined
|
|
161
|
-
* if no client with that session ID is currently being tracked.
|
|
162
|
-
*
|
|
163
|
-
* @param sessionId - The unique session identifier to look up
|
|
164
|
-
* @returns ClientInfo object if found, undefined otherwise
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* const client = clientTrackerService.getClient('session-123');
|
|
168
|
-
* if (client) {
|
|
169
|
-
* console.log(`Client ${client.clientName} is connected`);
|
|
170
|
-
* }
|
|
171
|
-
*/
|
|
172
|
-
getClient(sessionId) {
|
|
173
|
-
return this.clients.get(sessionId);
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Cleans up stale client entries that haven't been seen recently.
|
|
177
|
-
*
|
|
178
|
-
* This private method is called periodically to remove clients that haven't
|
|
179
|
-
* sent any requests within the timeout period (5 minutes by default). When
|
|
180
|
-
* a client is removed, it publishes a 'client-disconnected' event to notify
|
|
181
|
-
* other services about the disconnection.
|
|
182
|
-
*
|
|
183
|
-
* This prevents memory leaks from accumulating disconnected clients and ensures
|
|
184
|
-
* that the client registry only contains active connections.
|
|
185
|
-
*
|
|
186
|
-
* @private
|
|
187
|
-
*/
|
|
188
|
-
cleanup() {
|
|
189
|
-
const now = Date.now();
|
|
190
|
-
for (const [id, info] of this.clients.entries()) {
|
|
191
|
-
if (now - info.lastSeen > this.TIMEOUT_MS) {
|
|
192
|
-
logger.debug(`Removing stale client: ${id}. Last seen ${formatDuration(now - info.lastSeen)} ago, timeout ${formatDuration(this.TIMEOUT_MS)}`);
|
|
193
|
-
this.clients.delete(id);
|
|
194
|
-
eventBus.publish('client-disconnected', {
|
|
195
|
-
timestamp: Date.now(),
|
|
196
|
-
clientId: id,
|
|
197
|
-
client: info
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
export const clientTrackerService = new ClientTrackerService();
|
|
6
|
+
// Re-export from new service with backward-compatible aliases
|
|
7
|
+
export { sessionTrackerService, sessionTrackerService as clientTrackerService } from './session-tracker.service.js';
|