@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
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { SessionContext, SessionInfo, SessionRoot } from '../../shared/types/session-context.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Session tracking service that manages session connections and their metadata.
|
|
4
|
+
*
|
|
5
|
+
* This service maintains a registry of connected sessions (typically IDEs or other
|
|
6
|
+
* MCP clients) and tracks their connection state, metadata, and workspace roots.
|
|
7
|
+
* It provides automatic cleanup of stale sessions 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 sessions
|
|
11
|
+
* are connected and maintain their context information for proper session management.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Update session information when a new connection is established
|
|
15
|
+
* sessionTrackerService.updateSession({
|
|
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 sessions
|
|
23
|
+
* const sessions = sessionTrackerService.getSessions();
|
|
24
|
+
*/
|
|
25
|
+
declare class SessionTrackerService {
|
|
26
|
+
private sessions;
|
|
27
|
+
private get TIMEOUT_MS();
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new session tracker service instance.
|
|
30
|
+
*
|
|
31
|
+
* Initializes the service with automatic periodic cleanup of stale sessions
|
|
32
|
+
* every 60 seconds to prevent memory leaks from disconnected sessions.
|
|
33
|
+
*/
|
|
34
|
+
constructor();
|
|
35
|
+
/**
|
|
36
|
+
* Updates or creates a session entry with the provided context information.
|
|
37
|
+
*
|
|
38
|
+
* This method is called whenever a session sends a request with context information.
|
|
39
|
+
* It preserves existing session metadata that isn't provided in the new context,
|
|
40
|
+
* ensuring that sessions don't lose their previously established information.
|
|
41
|
+
*
|
|
42
|
+
* If this is a new session (not previously tracked), it publishes a 'session-connected'
|
|
43
|
+
* event to notify other services about the new connection.
|
|
44
|
+
*
|
|
45
|
+
* @param context - The session context containing session ID and optional metadata
|
|
46
|
+
* @param context.sessionId - Unique identifier for the 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.userAgent - Optional user agent string
|
|
51
|
+
* @param context.ip - Optional session IP address
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* sessionTrackerService.updateSession({
|
|
55
|
+
* sessionId: 'session-123',
|
|
56
|
+
* clientName: 'VS Code',
|
|
57
|
+
* clientVersion: '1.85.0'
|
|
58
|
+
* });
|
|
59
|
+
*/
|
|
60
|
+
updateSession(context: SessionContext): void;
|
|
61
|
+
/**
|
|
62
|
+
* Updates the workspace roots for a specific session.
|
|
63
|
+
*
|
|
64
|
+
* This method is typically called when a session provides its workspace root
|
|
65
|
+
* directories.
|
|
66
|
+
*
|
|
67
|
+
* @param sessionId - The unique session identifier for the session
|
|
68
|
+
* @param roots - Array of session root objects containing URI information
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* sessionTrackerService.updateSessionRoots('session-123', [
|
|
72
|
+
* { uri: 'file:///home/user/project' },
|
|
73
|
+
* { uri: 'file:///home/user/other-project' }
|
|
74
|
+
* ]);
|
|
75
|
+
*/
|
|
76
|
+
updateSessionRoots(sessionId: string, roots: SessionRoot[]): void;
|
|
77
|
+
/**
|
|
78
|
+
* Retrieves all currently tracked session information.
|
|
79
|
+
*
|
|
80
|
+
* Returns an array of all active session info objects, including their metadata
|
|
81
|
+
* and connection state. This is useful for monitoring all connected sessions
|
|
82
|
+
* or displaying session information in administrative interfaces.
|
|
83
|
+
*
|
|
84
|
+
* @returns Array of SessionInfo objects representing all tracked sessions
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* const allSessions = sessionTrackerService.getSessions();
|
|
88
|
+
* console.log(`Currently tracking ${allSessions.length} sessions`);
|
|
89
|
+
*/
|
|
90
|
+
getSessions(): SessionInfo[];
|
|
91
|
+
/**
|
|
92
|
+
* Retrieves session information for a specific session ID.
|
|
93
|
+
*
|
|
94
|
+
* Returns the complete session info object for the given session ID, or undefined
|
|
95
|
+
* if no session with that session ID is currently being tracked.
|
|
96
|
+
*
|
|
97
|
+
* @param sessionId - The unique session identifier to look up
|
|
98
|
+
* @returns SessionInfo object if found, undefined otherwise
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* const session = sessionTrackerService.getSession('session-123');
|
|
102
|
+
* if (session) {
|
|
103
|
+
* console.log(`Session ${session.clientName} is connected`);
|
|
104
|
+
* }
|
|
105
|
+
*/
|
|
106
|
+
getSession(sessionId: string): SessionInfo | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Cleans up stale session entries that haven't been seen recently.
|
|
109
|
+
*
|
|
110
|
+
* This private method is called periodically to remove sessions that haven't
|
|
111
|
+
* sent any requests within the timeout period (5 minutes by default). When
|
|
112
|
+
* a session is removed, it publishes a 'session-disconnected' event to notify
|
|
113
|
+
* other services about the disconnection.
|
|
114
|
+
*
|
|
115
|
+
* This prevents memory leaks from accumulating disconnected sessions and ensures
|
|
116
|
+
* that the session registry only contains active connections.
|
|
117
|
+
*
|
|
118
|
+
* @private
|
|
119
|
+
*/
|
|
120
|
+
private cleanup;
|
|
121
|
+
}
|
|
122
|
+
export declare const sessionTrackerService: SessionTrackerService;
|
|
123
|
+
export type { SessionTrackerService };
|
|
124
|
+
//# sourceMappingURL=session-tracker.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-tracker.service.d.ts","sourceRoot":"","sources":["../../../../src/services/session-tracker.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACZ,MAAM,wCAAwC,CAAC;AAMhD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAM,qBAAqB;IACzB,OAAO,CAAC,QAAQ,CAAuC;IAEvD,OAAO,KAAK,UAAU,GAErB;IAED;;;;;OAKG;;IAMH;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,aAAa,CAAC,OAAO,EAAE,cAAc;IA0B5C;;;;;;;;;;;;;;OAcG;IACI,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;IAQjE;;;;;;;;;;;;OAYG;IACI,WAAW,IAAI,WAAW,EAAE;IAInC;;;;;;;;;;;;;;OAcG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI7D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,OAAO;CAkBhB;AAED,eAAO,MAAM,qBAAqB,uBAA8B,CAAC;AAEjE,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
2
|
+
import { eventBus } from './event-bus.service.js';
|
|
3
|
+
import { configManager } from '../config/config-manager.js';
|
|
4
|
+
import { formatDuration } from '../utils/format-utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Session tracking service that manages session connections and their metadata.
|
|
7
|
+
*
|
|
8
|
+
* This service maintains a registry of connected sessions (typically IDEs or other
|
|
9
|
+
* MCP clients) and tracks their connection state, metadata, and workspace roots.
|
|
10
|
+
* It provides automatic cleanup of stale sessions after a timeout period and
|
|
11
|
+
* publishes connection/disconnection events via the event bus.
|
|
12
|
+
*
|
|
13
|
+
* The service is primarily used by the MCP session manager to track which sessions
|
|
14
|
+
* are connected and maintain their context information for proper session management.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Update session information when a new connection is established
|
|
18
|
+
* sessionTrackerService.updateSession({
|
|
19
|
+
* sessionId: 'session-123',
|
|
20
|
+
* clientName: 'VS Code',
|
|
21
|
+
* clientVersion: '1.85.0',
|
|
22
|
+
* cwd: '/home/user/project'
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Get all currently connected sessions
|
|
26
|
+
* const sessions = sessionTrackerService.getSessions();
|
|
27
|
+
*/
|
|
28
|
+
class SessionTrackerService {
|
|
29
|
+
sessions = new Map();
|
|
30
|
+
// Use the same timeout as session manager (default 30 minutes)
|
|
31
|
+
get TIMEOUT_MS() {
|
|
32
|
+
return configManager.getConfig().security.sessionTimeout;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates a new session tracker service instance.
|
|
36
|
+
*
|
|
37
|
+
* Initializes the service with automatic periodic cleanup of stale sessions
|
|
38
|
+
* every 60 seconds to prevent memory leaks from disconnected sessions.
|
|
39
|
+
*/
|
|
40
|
+
constructor() {
|
|
41
|
+
// Periodic cleanup
|
|
42
|
+
setInterval(() => this.cleanup(), 60000);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Updates or creates a session entry with the provided context information.
|
|
46
|
+
*
|
|
47
|
+
* This method is called whenever a session sends a request with context information.
|
|
48
|
+
* It preserves existing session metadata that isn't provided in the new context,
|
|
49
|
+
* ensuring that sessions don't lose their previously established information.
|
|
50
|
+
*
|
|
51
|
+
* If this is a new session (not previously tracked), it publishes a 'session-connected'
|
|
52
|
+
* event to notify other services about the new connection.
|
|
53
|
+
*
|
|
54
|
+
* @param context - The session context containing session ID and optional metadata
|
|
55
|
+
* @param context.sessionId - Unique identifier for the session
|
|
56
|
+
* @param context.clientName - Optional name of the client application
|
|
57
|
+
* @param context.clientVersion - Optional version of the client application
|
|
58
|
+
* @param context.protocolVersion - Optional MCP protocol version
|
|
59
|
+
* @param context.userAgent - Optional user agent string
|
|
60
|
+
* @param context.ip - Optional session IP address
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* sessionTrackerService.updateSession({
|
|
64
|
+
* sessionId: 'session-123',
|
|
65
|
+
* clientName: 'VS Code',
|
|
66
|
+
* clientVersion: '1.85.0'
|
|
67
|
+
* });
|
|
68
|
+
*/
|
|
69
|
+
updateSession(context) {
|
|
70
|
+
const existing = this.sessions.get(context.sessionId);
|
|
71
|
+
const sessionInfo = {
|
|
72
|
+
...context,
|
|
73
|
+
// Preserve existing info if not provided in new request
|
|
74
|
+
clientName: context.clientName || existing?.clientName,
|
|
75
|
+
clientVersion: context.clientVersion || existing?.clientVersion,
|
|
76
|
+
protocolVersion: context.protocolVersion || existing?.protocolVersion,
|
|
77
|
+
capabilities: context.capabilities || existing?.capabilities,
|
|
78
|
+
userAgent: context.userAgent || existing?.userAgent,
|
|
79
|
+
ip: context.ip || existing?.ip,
|
|
80
|
+
lastSeen: Date.now(),
|
|
81
|
+
roots: existing?.roots // Preserve roots if already fetched
|
|
82
|
+
};
|
|
83
|
+
this.sessions.set(context.sessionId, sessionInfo);
|
|
84
|
+
// If it's a new session, publish connection event
|
|
85
|
+
if (!existing) {
|
|
86
|
+
eventBus.publish('session-connected', {
|
|
87
|
+
timestamp: Date.now(),
|
|
88
|
+
session: sessionInfo
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Updates the workspace roots for a specific session.
|
|
94
|
+
*
|
|
95
|
+
* This method is typically called when a session provides its workspace root
|
|
96
|
+
* directories.
|
|
97
|
+
*
|
|
98
|
+
* @param sessionId - The unique session identifier for the session
|
|
99
|
+
* @param roots - Array of session root objects containing URI information
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* sessionTrackerService.updateSessionRoots('session-123', [
|
|
103
|
+
* { uri: 'file:///home/user/project' },
|
|
104
|
+
* { uri: 'file:///home/user/other-project' }
|
|
105
|
+
* ]);
|
|
106
|
+
*/
|
|
107
|
+
updateSessionRoots(sessionId, roots) {
|
|
108
|
+
const session = this.sessions.get(sessionId);
|
|
109
|
+
if (session) {
|
|
110
|
+
session.roots = roots;
|
|
111
|
+
session.lastSeen = Date.now();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Retrieves all currently tracked session information.
|
|
116
|
+
*
|
|
117
|
+
* Returns an array of all active session info objects, including their metadata
|
|
118
|
+
* and connection state. This is useful for monitoring all connected sessions
|
|
119
|
+
* or displaying session information in administrative interfaces.
|
|
120
|
+
*
|
|
121
|
+
* @returns Array of SessionInfo objects representing all tracked sessions
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* const allSessions = sessionTrackerService.getSessions();
|
|
125
|
+
* console.log(`Currently tracking ${allSessions.length} sessions`);
|
|
126
|
+
*/
|
|
127
|
+
getSessions() {
|
|
128
|
+
return Array.from(this.sessions.values());
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Retrieves session information for a specific session ID.
|
|
132
|
+
*
|
|
133
|
+
* Returns the complete session info object for the given session ID, or undefined
|
|
134
|
+
* if no session with that session ID is currently being tracked.
|
|
135
|
+
*
|
|
136
|
+
* @param sessionId - The unique session identifier to look up
|
|
137
|
+
* @returns SessionInfo object if found, undefined otherwise
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* const session = sessionTrackerService.getSession('session-123');
|
|
141
|
+
* if (session) {
|
|
142
|
+
* console.log(`Session ${session.clientName} is connected`);
|
|
143
|
+
* }
|
|
144
|
+
*/
|
|
145
|
+
getSession(sessionId) {
|
|
146
|
+
return this.sessions.get(sessionId);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Cleans up stale session entries that haven't been seen recently.
|
|
150
|
+
*
|
|
151
|
+
* This private method is called periodically to remove sessions that haven't
|
|
152
|
+
* sent any requests within the timeout period (5 minutes by default). When
|
|
153
|
+
* a session is removed, it publishes a 'session-disconnected' event to notify
|
|
154
|
+
* other services about the disconnection.
|
|
155
|
+
*
|
|
156
|
+
* This prevents memory leaks from accumulating disconnected sessions and ensures
|
|
157
|
+
* that the session registry only contains active connections.
|
|
158
|
+
*
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
cleanup() {
|
|
162
|
+
const now = Date.now();
|
|
163
|
+
for (const [id, info] of this.sessions.entries()) {
|
|
164
|
+
if (now - info.lastSeen > this.TIMEOUT_MS) {
|
|
165
|
+
logger.debug(`Removing stale session: ${id}. Last seen ${formatDuration(now - info.lastSeen)} ago, timeout ${formatDuration(this.TIMEOUT_MS)}`, LOG_MODULES.SESSION_TRACKER);
|
|
166
|
+
this.sessions.delete(id);
|
|
167
|
+
eventBus.publish('session-disconnected', {
|
|
168
|
+
timestamp: Date.now(),
|
|
169
|
+
sessionId: id,
|
|
170
|
+
session: info
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export const sessionTrackerService = new SessionTrackerService();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CA8DpB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { hubToolsService } from './hub-tools.service.js';
|
|
2
2
|
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { logger, LOG_MODULES } from '../utils/logger.js';
|
|
4
|
-
import { LIST_SERVERS_TOOL,
|
|
4
|
+
import { LIST_SERVERS_TOOL, LIST_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, MCP_HUB_LITE_SERVER } from '../models/system-tools.constants.js';
|
|
5
5
|
import { stringifyForLogging } from '../utils/json-utils.js';
|
|
6
6
|
/**
|
|
7
7
|
* Unified system tool call handler
|
|
@@ -18,19 +18,9 @@ export class SystemToolHandler {
|
|
|
18
18
|
case LIST_SERVERS_TOOL:
|
|
19
19
|
result = await hubToolsService.listServers();
|
|
20
20
|
break;
|
|
21
|
-
case
|
|
22
|
-
const
|
|
23
|
-
result = await hubToolsService.
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
case LIST_ALL_TOOLS_IN_SERVER_TOOL: {
|
|
27
|
-
const listAllToolsArgs = toolArgs;
|
|
28
|
-
result = await hubToolsService.listAllToolsInServer(listAllToolsArgs);
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
case FIND_TOOLS_IN_SERVER_TOOL: {
|
|
32
|
-
const findToolsInServerArgs = toolArgs;
|
|
33
|
-
result = await hubToolsService.findToolsInServer(findToolsInServerArgs);
|
|
21
|
+
case LIST_TOOLS_IN_SERVER_TOOL: {
|
|
22
|
+
const listToolsArgs = toolArgs;
|
|
23
|
+
result = await hubToolsService.listToolsInServer(listToolsArgs);
|
|
34
24
|
break;
|
|
35
25
|
}
|
|
36
26
|
case GET_TOOL_TOOL: {
|
|
@@ -50,9 +40,9 @@ export class SystemToolHandler {
|
|
|
50
40
|
});
|
|
51
41
|
break;
|
|
52
42
|
}
|
|
53
|
-
case
|
|
54
|
-
const
|
|
55
|
-
result = await hubToolsService.
|
|
43
|
+
case UPDATE_SERVER_DESCRIPTION_TOOL: {
|
|
44
|
+
const updateDescArgs = toolArgs;
|
|
45
|
+
result = await hubToolsService.updateServerDescription(updateDescArgs);
|
|
56
46
|
break;
|
|
57
47
|
}
|
|
58
48
|
default:
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite key utilities for server instance identification
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for generating and parsing composite keys
|
|
5
|
+
* that uniquely identify a server instance across multiple instances
|
|
6
|
+
* of the same server name.
|
|
7
|
+
*
|
|
8
|
+
* Format: `${serverName}-${serverIndex}`
|
|
9
|
+
* Example: 'my-server-0', 'my-server-1', 'test-server-0'
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generates a composite key from serverName and serverIndex
|
|
13
|
+
* @param serverName - The server name
|
|
14
|
+
* @param serverIndex - The instance index
|
|
15
|
+
* @returns Composite key string
|
|
16
|
+
* @example getCompositeKey('my-server', 0) => 'my-server-0'
|
|
17
|
+
*/
|
|
18
|
+
export declare function getCompositeKey(serverName: string, serverIndex: number): string;
|
|
19
|
+
/**
|
|
20
|
+
* Parses a composite key back into serverName and serverIndex
|
|
21
|
+
* @param key - The composite key to parse
|
|
22
|
+
* @returns Object with serverName and serverIndex, or null if invalid
|
|
23
|
+
* @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseCompositeKey(key: string): {
|
|
26
|
+
serverName: string;
|
|
27
|
+
serverIndex: number;
|
|
28
|
+
} | null;
|
|
29
|
+
//# sourceMappingURL=composite-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite-key.d.ts","sourceRoot":"","sources":["../../../../src/utils/composite-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYjG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite key utilities for server instance identification
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for generating and parsing composite keys
|
|
5
|
+
* that uniquely identify a server instance across multiple instances
|
|
6
|
+
* of the same server name.
|
|
7
|
+
*
|
|
8
|
+
* Format: `${serverName}-${serverIndex}`
|
|
9
|
+
* Example: 'my-server-0', 'my-server-1', 'test-server-0'
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generates a composite key from serverName and serverIndex
|
|
13
|
+
* @param serverName - The server name
|
|
14
|
+
* @param serverIndex - The instance index
|
|
15
|
+
* @returns Composite key string
|
|
16
|
+
* @example getCompositeKey('my-server', 0) => 'my-server-0'
|
|
17
|
+
*/
|
|
18
|
+
export function getCompositeKey(serverName, serverIndex) {
|
|
19
|
+
return `${serverName}-${serverIndex}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parses a composite key back into serverName and serverIndex
|
|
23
|
+
* @param key - The composite key to parse
|
|
24
|
+
* @returns Object with serverName and serverIndex, or null if invalid
|
|
25
|
+
* @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
|
|
26
|
+
*/
|
|
27
|
+
export function parseCompositeKey(key) {
|
|
28
|
+
const lastDashIndex = key.lastIndexOf('-');
|
|
29
|
+
if (lastDashIndex === -1) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const serverName = key.slice(0, lastDashIndex);
|
|
33
|
+
const serverIndexPart = key.slice(lastDashIndex + 1);
|
|
34
|
+
const serverIndex = parseInt(serverIndexPart, 10);
|
|
35
|
+
if (isNaN(serverIndex)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return { serverName, serverIndex };
|
|
39
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAgBrE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IA6BzF;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK;CAWlE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import { logger
|
|
2
|
+
import { logger } from './logger.js';
|
|
3
|
+
import { LOG_MODULES } from './logger/log-modules.js';
|
|
3
4
|
/**
|
|
4
5
|
* Unified error handler
|
|
5
6
|
*/
|
|
@@ -45,7 +46,7 @@ export class ErrorHandler {
|
|
|
45
46
|
* Handles general errors
|
|
46
47
|
*/
|
|
47
48
|
static handleGeneralError(error, message) {
|
|
48
|
-
logger.error(message, error);
|
|
49
|
+
logger.error(message, error, LOG_MODULES.ERROR_HANDLER);
|
|
49
50
|
if (error instanceof McpError) {
|
|
50
51
|
throw error;
|
|
51
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instance ID generation utilities using content-based hashing.
|
|
3
|
+
*/
|
|
4
|
+
import type { ServerInstance } from '../config/config.schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generates a stable 8-character hash from an object.
|
|
7
|
+
* Uses SHA-256 and returns the first 8 hex characters.
|
|
8
|
+
*
|
|
9
|
+
* @param obj - The object to hash
|
|
10
|
+
* @returns An 8-character hex string
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateInstanceHash(obj: Record<string, unknown>): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generates a deterministic instance ID based on server name and instance configuration.
|
|
15
|
+
* The ID format is: ${serverName}-${hash}
|
|
16
|
+
*
|
|
17
|
+
* @param serverName - Name of the server
|
|
18
|
+
* @param instanceConfig - Partial instance configuration
|
|
19
|
+
* @returns A deterministic instance ID
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateInstanceId(serverName: string, instanceConfig: Partial<ServerInstance>): string;
|
|
22
|
+
//# sourceMappingURL=instance-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../../../src/utils/instance-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyBzE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GACtC,MAAM,CAiBR"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instance ID generation utilities using content-based hashing.
|
|
3
|
+
*/
|
|
4
|
+
import { createHash } from 'node:crypto';
|
|
5
|
+
/**
|
|
6
|
+
* Generates a stable 8-character hash from an object.
|
|
7
|
+
* Uses SHA-256 and returns the first 8 hex characters.
|
|
8
|
+
*
|
|
9
|
+
* @param obj - The object to hash
|
|
10
|
+
* @returns An 8-character hex string
|
|
11
|
+
*/
|
|
12
|
+
export function generateInstanceHash(obj) {
|
|
13
|
+
function stableStringify(value) {
|
|
14
|
+
if (value === null || typeof value !== 'object') {
|
|
15
|
+
return JSON.stringify(value);
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(value)) {
|
|
18
|
+
return '[' + value.map(stableStringify).join(',') + ']';
|
|
19
|
+
}
|
|
20
|
+
const sortedObj = {};
|
|
21
|
+
for (const key of Object.keys(value).sort()) {
|
|
22
|
+
sortedObj[key] = value[key];
|
|
23
|
+
}
|
|
24
|
+
return ('{' +
|
|
25
|
+
Object.keys(sortedObj)
|
|
26
|
+
.map((key) => JSON.stringify(key) + ':' + stableStringify(sortedObj[key]))
|
|
27
|
+
.join(',') +
|
|
28
|
+
'}');
|
|
29
|
+
}
|
|
30
|
+
const stableString = stableStringify(obj);
|
|
31
|
+
const hash = createHash('sha256');
|
|
32
|
+
hash.update(stableString);
|
|
33
|
+
return hash.digest('hex').slice(0, 8);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generates a deterministic instance ID based on server name and instance configuration.
|
|
37
|
+
* The ID format is: ${serverName}-${hash}
|
|
38
|
+
*
|
|
39
|
+
* @param serverName - Name of the server
|
|
40
|
+
* @param instanceConfig - Partial instance configuration
|
|
41
|
+
* @returns A deterministic instance ID
|
|
42
|
+
*/
|
|
43
|
+
export function generateInstanceId(serverName, instanceConfig) {
|
|
44
|
+
const hashableContent = {};
|
|
45
|
+
if (instanceConfig.args && instanceConfig.args.length > 0) {
|
|
46
|
+
hashableContent.args = instanceConfig.args;
|
|
47
|
+
}
|
|
48
|
+
if (instanceConfig.env) {
|
|
49
|
+
hashableContent.env = instanceConfig.env;
|
|
50
|
+
}
|
|
51
|
+
if (instanceConfig.headers) {
|
|
52
|
+
hashableContent.headers = instanceConfig.headers;
|
|
53
|
+
}
|
|
54
|
+
if (instanceConfig.tags && Object.keys(instanceConfig.tags).length > 0) {
|
|
55
|
+
hashableContent.tags = instanceConfig.tags;
|
|
56
|
+
}
|
|
57
|
+
const hash = generateInstanceHash(hashableContent);
|
|
58
|
+
return `${serverName}-${hash}`;
|
|
59
|
+
}
|
|
@@ -23,7 +23,7 @@ type ConfigGetter = () => {
|
|
|
23
23
|
logging: {
|
|
24
24
|
jsonPretty: boolean;
|
|
25
25
|
mcpCommDebug: boolean;
|
|
26
|
-
|
|
26
|
+
apiDebug: boolean;
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
29
|
};
|
|
@@ -60,11 +60,11 @@ export declare function getJsonPrettySetting(): boolean;
|
|
|
60
60
|
*/
|
|
61
61
|
export declare function getMcpCommDebugSetting(): boolean;
|
|
62
62
|
/**
|
|
63
|
-
* Get
|
|
63
|
+
* Get API debug setting from config getter.
|
|
64
64
|
*
|
|
65
|
-
* @returns boolean indicating whether to enable
|
|
65
|
+
* @returns boolean indicating whether to enable API debug logging
|
|
66
66
|
*/
|
|
67
|
-
export declare function
|
|
67
|
+
export declare function getApiDebugSetting(): boolean;
|
|
68
68
|
/**
|
|
69
69
|
* Stringify object for logging with dynamic pretty formatting based on LOG_JSON_PRETTY environment variable
|
|
70
70
|
* @param obj Object to stringify
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IACxB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC;YACpB,YAAY,EAAE,OAAO,CAAC;YACtB,
|
|
1
|
+
{"version":3,"file":"json-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IACxB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC;YACpB,YAAY,EAAE,OAAO,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC;SACnB,CAAC;KACH,CAAC;CACH,CAAC;AAQF;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU/E;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAG1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAiB9C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,GAClD,MAAM,CAOR"}
|
|
@@ -130,6 +130,12 @@ export function stringifyRawHeadersForLogging(rawHeaders) {
|
|
|
130
130
|
* @returns boolean indicating whether to use pretty JSON formatting
|
|
131
131
|
*/
|
|
132
132
|
export function getJsonPrettySetting() {
|
|
133
|
+
// Check environment variable first (highest priority)
|
|
134
|
+
const envValue = process.env.LOG_JSON_PRETTY;
|
|
135
|
+
if (envValue !== undefined) {
|
|
136
|
+
return envValue === 'true' || envValue === '1';
|
|
137
|
+
}
|
|
138
|
+
// Then check config getter
|
|
133
139
|
if (_configGetter) {
|
|
134
140
|
try {
|
|
135
141
|
const config = _configGetter();
|
|
@@ -159,15 +165,15 @@ export function getMcpCommDebugSetting() {
|
|
|
159
165
|
return getDefaultForDevMode(false);
|
|
160
166
|
}
|
|
161
167
|
/**
|
|
162
|
-
* Get
|
|
168
|
+
* Get API debug setting from config getter.
|
|
163
169
|
*
|
|
164
|
-
* @returns boolean indicating whether to enable
|
|
170
|
+
* @returns boolean indicating whether to enable API debug logging
|
|
165
171
|
*/
|
|
166
|
-
export function
|
|
172
|
+
export function getApiDebugSetting() {
|
|
167
173
|
if (_configGetter) {
|
|
168
174
|
try {
|
|
169
175
|
const config = _configGetter();
|
|
170
|
-
return config.system.logging.
|
|
176
|
+
return config.system.logging.apiDebug;
|
|
171
177
|
}
|
|
172
178
|
catch {
|
|
173
179
|
// Fall through to default if config getter fails
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* This file contains development log initialization and management.
|
|
4
4
|
*/
|
|
5
5
|
import fs from 'fs';
|
|
6
|
-
import { LogRotator
|
|
6
|
+
import { LogRotator } from '../log-rotator.js';
|
|
7
|
+
import type { RotatorConfig } from '../log-rotator.js';
|
|
7
8
|
/**
|
|
8
9
|
* Development logger configuration and setup.
|
|
9
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-logger.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/dev-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"dev-logger.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/dev-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,aAAa,CAA2B;IAEhD;;OAEG;IACH,IAAI,MAAM,IAAI,EAAE,CAAC,WAAW,GAAG,IAAI,CAElC;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,UAAU,GAAG,IAAI,CAE/B;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAoB/F;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-colors.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"log-colors.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,eAAO,MAAM,MAAM;;;;;;;;;;CAUT,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAa5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|