@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
- package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
- package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
- package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
- package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
- package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
- package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
- package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
- package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
- package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
- package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
- package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
- package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
- package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
- package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
- package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
- package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
- package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
- package/dist/client/assets/el-input-99gMrutP.js +1 -0
- package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
- package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
- package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
- package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
- package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
- package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
- package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
- package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
- package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
- package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
- package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
- package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
- package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
- package/dist/client/assets/index-C2V-ZGji.js +1 -0
- package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
- package/dist/client/assets/index-vhkqgpmN.js +2 -0
- package/dist/client/assets/omit-CqPQN3XP.js +1 -0
- package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
- package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/server/shared/models/resource.model.d.ts +2 -1
- package/dist/server/shared/models/resource.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.d.ts +363 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +2 -56
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +2 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.d.ts +4 -32
- package/dist/server/shared/types/client.types.d.ts.map +1 -1
- package/dist/server/shared/types/client.types.js +3 -2
- package/dist/server/shared/types/index.d.ts +3 -3
- package/dist/server/shared/types/index.d.ts.map +1 -1
- package/dist/server/shared/types/index.js +3 -3
- package/dist/server/shared/types/session-context.types.d.ts +35 -0
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
- package/dist/server/shared/types/session-context.types.js +5 -0
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -1
- package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
- package/dist/server/src/api/mcp/gateway.d.ts +1 -3
- package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
- package/dist/server/src/api/mcp/gateway.js +34 -61
- package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
- package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
- package/dist/server/src/api/web/clients.js +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/web/sessions.js +1 -1
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -4
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -102
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -98
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/index.js +1 -1
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/client-tracker.service.d.ts +3 -128
- package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
- package/dist/server/src/services/client-tracker.service.js +4 -200
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +15 -19
- package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
- package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
- package/dist/server/src/services/gateway/global-transport.js +42 -0
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
- package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
- package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
- package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
- package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
- package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
- package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
- package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
- package/dist/server/src/services/gateway/types.d.ts +2 -1
- package/dist/server/src/services/gateway/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.d.ts +32 -238
- package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-manager.service.js +89 -267
- package/dist/server/src/services/hub-tools/index.d.ts +1 -3
- package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/index.js +1 -2
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
- package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
- package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
- package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
- package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -64
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/search/search-cache.d.ts +0 -19
- package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
- package/dist/server/src/services/search/search-cache.js +0 -24
- package/dist/server/src/services/search/search-core.service.d.ts +5 -5
- package/dist/server/src/services/search/search-core.service.js +11 -11
- package/dist/server/src/services/session/session-manager.d.ts +12 -256
- package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
- package/dist/server/src/services/session/session-manager.js +23 -583
- package/dist/server/src/services/session-tracker.service.d.ts +124 -0
- package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
- package/dist/server/src/services/session-tracker.service.js +176 -0
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +10 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.d.ts +1 -0
- package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-colors.js +2 -1
- package/dist/server/src/utils/logger/log-context.d.ts +1 -0
- package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +287 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -8
- package/dist/server/src/utils/logger/log-output.d.ts +2 -2
- package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-output.js +27 -6
- package/dist/server/src/utils/logger/logger.d.ts +13 -0
- package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/logger.js +42 -7
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/request-context.d.ts +12 -30
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +10 -30
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/tool-args-parser.d.ts +0 -4
- package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
- package/dist/server/src/utils/tool-args-parser.js +0 -7
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +33 -13
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/evaluation/evaluation.test.js +10 -9
- package/dist/server/tests/integration/api/gateway.test.js +24 -39
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/temp/test-stack.d.ts +6 -0
- package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
- package/dist/server/tests/temp/test-stack.js +40 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -334
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +107 -13
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/logger.test.js +101 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/request-context.test.js +9 -28
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
- package/package.json +1 -1
- package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
- package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
- package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
- package/dist/client/assets/ServerListView-DralUL71.js +0 -30
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
- package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
- package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
- package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
- package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
- package/dist/client/assets/el-input-CeZiq23m.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-iw_hrrlC.js +0 -1
- package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
- package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
- package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/index-COYaYRbH.js +0 -1
- package/dist/client/assets/index-Cfcvxyee.js +0 -2
- package/dist/client/assets/index-PhuI36Zi.js +0 -1
- package/dist/client/assets/omit-7EL6VJO4.js +0 -1
- package/dist/client/assets/vnode-upjuIlvm.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
-
import { stringifyForLogging, stringifyForLoggingWithReplacer, setJsonPrettyConfigGetter, rawHeadersToObject, stringifyRawHeadersForLogging, getJsonPrettySetting, getMcpCommDebugSetting,
|
|
2
|
+
import { stringifyForLogging, stringifyForLoggingWithReplacer, setJsonPrettyConfigGetter, rawHeadersToObject, stringifyRawHeadersForLogging, getJsonPrettySetting, getMcpCommDebugSetting, getApiDebugSetting } from '../../../src/utils/json-utils.js';
|
|
3
3
|
describe('json-utils', () => {
|
|
4
4
|
beforeEach(() => {
|
|
5
5
|
// Reset config getter
|
|
@@ -13,7 +13,7 @@ describe('json-utils', () => {
|
|
|
13
13
|
logging: {
|
|
14
14
|
jsonPretty: true,
|
|
15
15
|
mcpCommDebug: false,
|
|
16
|
-
|
|
16
|
+
apiDebug: false
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
}));
|
|
@@ -35,7 +35,7 @@ describe('json-utils', () => {
|
|
|
35
35
|
logging: {
|
|
36
36
|
jsonPretty: true,
|
|
37
37
|
mcpCommDebug: false,
|
|
38
|
-
|
|
38
|
+
apiDebug: false
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
}));
|
|
@@ -53,7 +53,7 @@ describe('json-utils', () => {
|
|
|
53
53
|
logging: {
|
|
54
54
|
jsonPretty: true,
|
|
55
55
|
mcpCommDebug: false,
|
|
56
|
-
|
|
56
|
+
apiDebug: false
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
}));
|
|
@@ -72,7 +72,7 @@ describe('json-utils', () => {
|
|
|
72
72
|
logging: {
|
|
73
73
|
jsonPretty: true,
|
|
74
74
|
mcpCommDebug: false,
|
|
75
|
-
|
|
75
|
+
apiDebug: false
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
}));
|
|
@@ -102,7 +102,7 @@ describe('json-utils', () => {
|
|
|
102
102
|
logging: {
|
|
103
103
|
jsonPretty: false,
|
|
104
104
|
mcpCommDebug: false,
|
|
105
|
-
|
|
105
|
+
apiDebug: false
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
}));
|
|
@@ -182,7 +182,7 @@ describe('json-utils', () => {
|
|
|
182
182
|
logging: {
|
|
183
183
|
jsonPretty: false,
|
|
184
184
|
mcpCommDebug: false,
|
|
185
|
-
|
|
185
|
+
apiDebug: false
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
}));
|
|
@@ -192,7 +192,7 @@ describe('json-utils', () => {
|
|
|
192
192
|
logging: {
|
|
193
193
|
jsonPretty: true,
|
|
194
194
|
mcpCommDebug: false,
|
|
195
|
-
|
|
195
|
+
apiDebug: false
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
}));
|
|
@@ -204,12 +204,106 @@ describe('json-utils', () => {
|
|
|
204
204
|
});
|
|
205
205
|
expect(getJsonPrettySetting()).toBe(true);
|
|
206
206
|
});
|
|
207
|
+
it('should respect LOG_JSON_PRETTY environment variable when set to "true"', () => {
|
|
208
|
+
try {
|
|
209
|
+
process.env.LOG_JSON_PRETTY = 'true';
|
|
210
|
+
setJsonPrettyConfigGetter(() => ({
|
|
211
|
+
system: {
|
|
212
|
+
logging: {
|
|
213
|
+
jsonPretty: false, // Config says false, but env should override
|
|
214
|
+
mcpCommDebug: false,
|
|
215
|
+
apiDebug: false
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}));
|
|
219
|
+
expect(getJsonPrettySetting()).toBe(true);
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
delete process.env.LOG_JSON_PRETTY;
|
|
223
|
+
setJsonPrettyConfigGetter(null);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
it('should respect LOG_JSON_PRETTY environment variable when set to "1"', () => {
|
|
227
|
+
try {
|
|
228
|
+
process.env.LOG_JSON_PRETTY = '1';
|
|
229
|
+
setJsonPrettyConfigGetter(() => ({
|
|
230
|
+
system: {
|
|
231
|
+
logging: {
|
|
232
|
+
jsonPretty: false, // Config says false, but env should override
|
|
233
|
+
mcpCommDebug: false,
|
|
234
|
+
apiDebug: false
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}));
|
|
238
|
+
expect(getJsonPrettySetting()).toBe(true);
|
|
239
|
+
}
|
|
240
|
+
finally {
|
|
241
|
+
delete process.env.LOG_JSON_PRETTY;
|
|
242
|
+
setJsonPrettyConfigGetter(null);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
it('should respect LOG_JSON_PRETTY environment variable when set to "false"', () => {
|
|
246
|
+
try {
|
|
247
|
+
process.env.LOG_JSON_PRETTY = 'false';
|
|
248
|
+
setJsonPrettyConfigGetter(() => ({
|
|
249
|
+
system: {
|
|
250
|
+
logging: {
|
|
251
|
+
jsonPretty: true, // Config says true, but env should override
|
|
252
|
+
mcpCommDebug: false,
|
|
253
|
+
apiDebug: false
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}));
|
|
257
|
+
expect(getJsonPrettySetting()).toBe(false);
|
|
258
|
+
}
|
|
259
|
+
finally {
|
|
260
|
+
delete process.env.LOG_JSON_PRETTY;
|
|
261
|
+
setJsonPrettyConfigGetter(null);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
it('should respect LOG_JSON_PRETTY environment variable when set to "0"', () => {
|
|
265
|
+
try {
|
|
266
|
+
process.env.LOG_JSON_PRETTY = '0';
|
|
267
|
+
setJsonPrettyConfigGetter(() => ({
|
|
268
|
+
system: {
|
|
269
|
+
logging: {
|
|
270
|
+
jsonPretty: true, // Config says true, but env should override
|
|
271
|
+
mcpCommDebug: false,
|
|
272
|
+
apiDebug: false
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}));
|
|
276
|
+
expect(getJsonPrettySetting()).toBe(false);
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
delete process.env.LOG_JSON_PRETTY;
|
|
280
|
+
setJsonPrettyConfigGetter(null);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
it('should use config getter when LOG_JSON_PRETTY is not set', () => {
|
|
284
|
+
try {
|
|
285
|
+
delete process.env.LOG_JSON_PRETTY;
|
|
286
|
+
setJsonPrettyConfigGetter(() => ({
|
|
287
|
+
system: {
|
|
288
|
+
logging: {
|
|
289
|
+
jsonPretty: false,
|
|
290
|
+
mcpCommDebug: false,
|
|
291
|
+
apiDebug: false
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}));
|
|
295
|
+
expect(getJsonPrettySetting()).toBe(false);
|
|
296
|
+
}
|
|
297
|
+
finally {
|
|
298
|
+
setJsonPrettyConfigGetter(null);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
207
301
|
});
|
|
208
302
|
describe('all setting getters', () => {
|
|
209
303
|
it('should return correct defaults when no config getter is set', () => {
|
|
210
304
|
expect(getJsonPrettySetting()).toBe(true);
|
|
211
305
|
expect(getMcpCommDebugSetting()).toBe(false);
|
|
212
|
-
expect(
|
|
306
|
+
expect(getApiDebugSetting()).toBe(false);
|
|
213
307
|
});
|
|
214
308
|
it('should return values from config getter when available', () => {
|
|
215
309
|
setJsonPrettyConfigGetter(() => ({
|
|
@@ -217,13 +311,13 @@ describe('json-utils', () => {
|
|
|
217
311
|
logging: {
|
|
218
312
|
jsonPretty: false,
|
|
219
313
|
mcpCommDebug: true,
|
|
220
|
-
|
|
314
|
+
apiDebug: true
|
|
221
315
|
}
|
|
222
316
|
}
|
|
223
317
|
}));
|
|
224
318
|
expect(getJsonPrettySetting()).toBe(false);
|
|
225
319
|
expect(getMcpCommDebugSetting()).toBe(true);
|
|
226
|
-
expect(
|
|
320
|
+
expect(getApiDebugSetting()).toBe(true);
|
|
227
321
|
});
|
|
228
322
|
it('should fall back to defaults when config getter fails', () => {
|
|
229
323
|
setJsonPrettyConfigGetter(() => {
|
|
@@ -231,7 +325,7 @@ describe('json-utils', () => {
|
|
|
231
325
|
});
|
|
232
326
|
expect(getJsonPrettySetting()).toBe(true);
|
|
233
327
|
expect(getMcpCommDebugSetting()).toBe(false);
|
|
234
|
-
expect(
|
|
328
|
+
expect(getApiDebugSetting()).toBe(false);
|
|
235
329
|
});
|
|
236
330
|
});
|
|
237
331
|
describe('rawHeadersToObject', () => {
|
|
@@ -270,7 +364,7 @@ describe('json-utils', () => {
|
|
|
270
364
|
logging: {
|
|
271
365
|
jsonPretty: true,
|
|
272
366
|
mcpCommDebug: false,
|
|
273
|
-
|
|
367
|
+
apiDebug: false
|
|
274
368
|
}
|
|
275
369
|
}
|
|
276
370
|
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-formatter.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/utils/logger-formatter.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { formatError } from '../../../src/utils/logger/log-formatter.js';
|
|
3
|
+
describe('Logger Formatter - formatError', () => {
|
|
4
|
+
it('should return empty string for array containing exactly one empty object ([{}])', () => {
|
|
5
|
+
const error = [{}];
|
|
6
|
+
const result = formatError(error);
|
|
7
|
+
expect(result).toBe('');
|
|
8
|
+
});
|
|
9
|
+
it('should return formatted string for array containing multiple empty objects ([{}, {}, {}])', () => {
|
|
10
|
+
const error = [{}, {}, {}];
|
|
11
|
+
const result = formatError(error);
|
|
12
|
+
expect(result).toContain('{}');
|
|
13
|
+
});
|
|
14
|
+
it('should return formatted string for array containing non-empty objects', () => {
|
|
15
|
+
const error = [{ message: 'test' }];
|
|
16
|
+
const result = formatError(error);
|
|
17
|
+
expect(result).toContain('message');
|
|
18
|
+
expect(result).toContain('test');
|
|
19
|
+
});
|
|
20
|
+
it('should return formatted string for array containing mixed objects (empty and non-empty)', () => {
|
|
21
|
+
const error = [{}, { message: 'test' }, {}];
|
|
22
|
+
const result = formatError(error);
|
|
23
|
+
expect(result).toContain('message');
|
|
24
|
+
expect(result).toContain('test');
|
|
25
|
+
});
|
|
26
|
+
it('should return empty string for empty array', () => {
|
|
27
|
+
const error = [];
|
|
28
|
+
const result = formatError(error);
|
|
29
|
+
expect(result).toBe('');
|
|
30
|
+
});
|
|
31
|
+
it('should handle Error objects with message correctly', () => {
|
|
32
|
+
const error = new Error('Test error');
|
|
33
|
+
const result = formatError(error);
|
|
34
|
+
expect(result).toContain('Test error');
|
|
35
|
+
});
|
|
36
|
+
it('should handle Error objects without message correctly', () => {
|
|
37
|
+
const error = new Error();
|
|
38
|
+
const result = formatError(error);
|
|
39
|
+
expect(result).toContain('Error');
|
|
40
|
+
});
|
|
41
|
+
it('should handle Error objects with custom name correctly', () => {
|
|
42
|
+
const error = Object.assign(new Error(), { name: 'NetworkError' });
|
|
43
|
+
const result = formatError(error);
|
|
44
|
+
expect(result).toContain('NetworkError');
|
|
45
|
+
});
|
|
46
|
+
it('should handle string errors correctly', () => {
|
|
47
|
+
const error = 'string error';
|
|
48
|
+
const result = formatError(error);
|
|
49
|
+
expect(result).toBe('string error');
|
|
50
|
+
});
|
|
51
|
+
it('should handle empty objects correctly', () => {
|
|
52
|
+
const error = {};
|
|
53
|
+
const result = formatError(error);
|
|
54
|
+
expect(result).toBe('{}');
|
|
55
|
+
});
|
|
56
|
+
it('should handle null values correctly', () => {
|
|
57
|
+
const error = null;
|
|
58
|
+
const result = formatError(error);
|
|
59
|
+
expect(result).toBe('null');
|
|
60
|
+
});
|
|
61
|
+
it('should handle undefined values correctly', () => {
|
|
62
|
+
const error = undefined;
|
|
63
|
+
const result = formatError(error);
|
|
64
|
+
expect(result).toBe('undefined');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
@@ -4,6 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import os from 'node:os';
|
|
5
5
|
import { Logger, logWithColor } from '../../../src/utils/logger.js';
|
|
6
6
|
import { setJsonPrettyConfigGetter, setDevModeEnabled } from '../../../src/utils/json-utils.js';
|
|
7
|
+
import { createColoredLogMessage, createLogMessage, getCallerInfo, formatCallerInfo } from '../../../src/utils/logger/log-formatter.js';
|
|
7
8
|
describe('Logger', () => {
|
|
8
9
|
let logger;
|
|
9
10
|
let tempLogDir;
|
|
@@ -459,4 +460,104 @@ describe('Logger', () => {
|
|
|
459
460
|
createWriteStreamSpy.mockRestore();
|
|
460
461
|
});
|
|
461
462
|
});
|
|
463
|
+
describe('caller information', () => {
|
|
464
|
+
it('should enable caller information by default', () => {
|
|
465
|
+
logger = new Logger();
|
|
466
|
+
// Since showCaller is private, we test through behavior
|
|
467
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
468
|
+
logger.info('test message');
|
|
469
|
+
expect(consoleInfoSpy).toHaveBeenCalled();
|
|
470
|
+
consoleInfoSpy.mockRestore();
|
|
471
|
+
});
|
|
472
|
+
it('should allow disabling caller information', () => {
|
|
473
|
+
logger = new Logger();
|
|
474
|
+
logger.setShowCaller(false);
|
|
475
|
+
const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
|
|
476
|
+
logger.info('test message');
|
|
477
|
+
expect(consoleInfoSpy).toHaveBeenCalled();
|
|
478
|
+
consoleInfoSpy.mockRestore();
|
|
479
|
+
});
|
|
480
|
+
it('should respect LOG_CALLER environment variable when set to "false"', () => {
|
|
481
|
+
try {
|
|
482
|
+
process.env.LOG_CALLER = 'false';
|
|
483
|
+
logger = new Logger();
|
|
484
|
+
// Verify the logger was created without errors
|
|
485
|
+
expect(logger).toBeDefined();
|
|
486
|
+
}
|
|
487
|
+
finally {
|
|
488
|
+
delete process.env.LOG_CALLER;
|
|
489
|
+
}
|
|
490
|
+
});
|
|
491
|
+
it('should respect LOG_CALLER environment variable when set to "0"', () => {
|
|
492
|
+
try {
|
|
493
|
+
process.env.LOG_CALLER = '0';
|
|
494
|
+
logger = new Logger();
|
|
495
|
+
expect(logger).toBeDefined();
|
|
496
|
+
}
|
|
497
|
+
finally {
|
|
498
|
+
delete process.env.LOG_CALLER;
|
|
499
|
+
}
|
|
500
|
+
});
|
|
501
|
+
it('should include caller information in log messages when enabled', () => {
|
|
502
|
+
const message = createLogMessage('info', 'test message', {
|
|
503
|
+
caller: 'test-file.ts:123'
|
|
504
|
+
});
|
|
505
|
+
expect(message).toContain('[test-file.ts:123]');
|
|
506
|
+
});
|
|
507
|
+
it('should include caller information in colored log messages when enabled', () => {
|
|
508
|
+
const message = createColoredLogMessage('info', 'test message', {
|
|
509
|
+
caller: 'test-file.ts:123'
|
|
510
|
+
});
|
|
511
|
+
expect(message).toContain('[test-file.ts:123]');
|
|
512
|
+
});
|
|
513
|
+
it('should format caller info correctly', () => {
|
|
514
|
+
const formatted = formatCallerInfo({
|
|
515
|
+
fileName: 'logger.ts',
|
|
516
|
+
lineNumber: 42,
|
|
517
|
+
columnNumber: 10
|
|
518
|
+
});
|
|
519
|
+
expect(formatted).toBe('logger.ts:42');
|
|
520
|
+
});
|
|
521
|
+
it('should format caller info without line number when lineNumber is 0', () => {
|
|
522
|
+
const formatted = formatCallerInfo({
|
|
523
|
+
fileName: 'logger.ts',
|
|
524
|
+
lineNumber: 0,
|
|
525
|
+
columnNumber: 0
|
|
526
|
+
});
|
|
527
|
+
expect(formatted).toBe('logger.ts');
|
|
528
|
+
});
|
|
529
|
+
it('should get caller info (best effort)', () => {
|
|
530
|
+
// We can't assert specific values, but we can verify it doesn't throw
|
|
531
|
+
// and either returns null or a valid object
|
|
532
|
+
getCallerInfo(0);
|
|
533
|
+
expect(true).toBe(true);
|
|
534
|
+
});
|
|
535
|
+
describe('getCallerInfo with project file detection', () => {
|
|
536
|
+
// Save original prepareStackTrace
|
|
537
|
+
const originalPrepareStackTrace = Error.prepareStackTrace;
|
|
538
|
+
afterEach(() => {
|
|
539
|
+
// Restore original prepareStackTrace
|
|
540
|
+
Error.prepareStackTrace = originalPrepareStackTrace;
|
|
541
|
+
});
|
|
542
|
+
it('should extract clean file path from full path with /src/', () => {
|
|
543
|
+
// We need to test the internal logic indirectly
|
|
544
|
+
// Since we can't easily mock the stack, we'll verify our function
|
|
545
|
+
// doesn't throw and handles the basic case
|
|
546
|
+
const result = getCallerInfo(0);
|
|
547
|
+
// Just verify it returns something (null or object)
|
|
548
|
+
expect(result === null || typeof result === 'object').toBe(true);
|
|
549
|
+
});
|
|
550
|
+
it('should prefer project source files over external files', () => {
|
|
551
|
+
// This test verifies the concept - we trust that our implementation
|
|
552
|
+
// will search for /src/ in the file paths
|
|
553
|
+
const result = getCallerInfo(0);
|
|
554
|
+
expect(result === null || typeof result === 'object').toBe(true);
|
|
555
|
+
});
|
|
556
|
+
it('should handle Windows paths with \\src\\', () => {
|
|
557
|
+
// Test the function can be called without errors
|
|
558
|
+
const result = getCallerInfo(0);
|
|
559
|
+
expect(result === null || typeof result === 'object').toBe(true);
|
|
560
|
+
});
|
|
561
|
+
});
|
|
562
|
+
});
|
|
462
563
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-validator.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/utils/parameter-validator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { validateParameters } from '../../../src/utils/parameter-validator.js';
|
|
3
|
+
describe('Parameter Validator', () => {
|
|
4
|
+
it('should return null for valid parameters', () => {
|
|
5
|
+
const schema = {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
name: { type: 'string' },
|
|
9
|
+
age: { type: 'number' }
|
|
10
|
+
},
|
|
11
|
+
required: ['name']
|
|
12
|
+
};
|
|
13
|
+
const args = { name: 'test', age: 25 };
|
|
14
|
+
const result = validateParameters(args, schema);
|
|
15
|
+
expect(result).toBeNull();
|
|
16
|
+
});
|
|
17
|
+
it('should return error for missing required parameter', () => {
|
|
18
|
+
const schema = {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
name: { type: 'string' },
|
|
22
|
+
age: { type: 'number' }
|
|
23
|
+
},
|
|
24
|
+
required: ['name', 'age']
|
|
25
|
+
};
|
|
26
|
+
const args = { name: 'test' };
|
|
27
|
+
const result = validateParameters(args, schema);
|
|
28
|
+
expect(result).toContain('Missing required parameter');
|
|
29
|
+
expect(result).toContain('age');
|
|
30
|
+
});
|
|
31
|
+
it('should return error for invalid parameter type', () => {
|
|
32
|
+
const schema = {
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: {
|
|
35
|
+
name: { type: 'string' },
|
|
36
|
+
age: { type: 'number' }
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const args = { name: 'test', age: '25' }; // age should be number, not string
|
|
40
|
+
const result = validateParameters(args, schema);
|
|
41
|
+
expect(result).toContain('Invalid type for parameter');
|
|
42
|
+
expect(result).toContain('Expected: number');
|
|
43
|
+
});
|
|
44
|
+
it('should handle schema without required fields', () => {
|
|
45
|
+
const schema = {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
optionalField: { type: 'string' }
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const args = {};
|
|
52
|
+
const result = validateParameters(args, schema);
|
|
53
|
+
expect(result).toBeNull();
|
|
54
|
+
});
|
|
55
|
+
it('should handle schema without properties', () => {
|
|
56
|
+
const schema = {
|
|
57
|
+
type: 'object'
|
|
58
|
+
};
|
|
59
|
+
const args = { any: 'value' };
|
|
60
|
+
const result = validateParameters(args, schema);
|
|
61
|
+
expect(result).toBeNull();
|
|
62
|
+
});
|
|
63
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-tree.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/utils/process-tree.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { getChildren, getProcessTree, isAnyInTreeRunning, getWorkingProcessPid, killProcessTree } from '../../../src/utils/process-tree.js';
|
|
3
|
+
// Mock child_process module
|
|
4
|
+
vi.mock('child_process', () => ({
|
|
5
|
+
spawn: vi.fn()
|
|
6
|
+
}));
|
|
7
|
+
describe('process-tree (non-Windows platform)', () => {
|
|
8
|
+
// Save original platform
|
|
9
|
+
const originalPlatform = process.platform;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
// Mock non-Windows platform
|
|
12
|
+
Object.defineProperty(process, 'platform', {
|
|
13
|
+
value: 'linux',
|
|
14
|
+
configurable: true
|
|
15
|
+
});
|
|
16
|
+
vi.clearAllMocks();
|
|
17
|
+
});
|
|
18
|
+
describe('getChildren', () => {
|
|
19
|
+
it('should return empty array on non-Windows platform', async () => {
|
|
20
|
+
const result = await getChildren(1234);
|
|
21
|
+
expect(result).toEqual([]);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
describe('getProcessTree', () => {
|
|
25
|
+
it('should return array with just the original PID on non-Windows platform', async () => {
|
|
26
|
+
const result = await getProcessTree(1234);
|
|
27
|
+
expect(result).toEqual([1234]);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('getWorkingProcessPid', () => {
|
|
31
|
+
it('should return the original PID on non-Windows platform', async () => {
|
|
32
|
+
const result = await getWorkingProcessPid(1234);
|
|
33
|
+
expect(result).toEqual(1234);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('isAnyInTreeRunning', () => {
|
|
37
|
+
it('should check just the single process on non-Windows platform', async () => {
|
|
38
|
+
// Mock process.kill to return true (process running)
|
|
39
|
+
const originalKill = process.kill;
|
|
40
|
+
process.kill = vi.fn();
|
|
41
|
+
const result = await isAnyInTreeRunning(1234);
|
|
42
|
+
expect(result).toBeDefined();
|
|
43
|
+
// Restore original
|
|
44
|
+
process.kill = originalKill;
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('killProcessTree', () => {
|
|
48
|
+
it('should just kill the single process on non-Windows platform', async () => {
|
|
49
|
+
// Mock process.kill
|
|
50
|
+
const originalKill = process.kill;
|
|
51
|
+
process.kill = vi.fn();
|
|
52
|
+
await killProcessTree(1234);
|
|
53
|
+
// Restore original
|
|
54
|
+
process.kill = originalKill;
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
// Restore original platform after all tests
|
|
58
|
+
afterAll(() => {
|
|
59
|
+
Object.defineProperty(process, 'platform', {
|
|
60
|
+
value: originalPlatform,
|
|
61
|
+
configurable: true
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('process-tree (Windows platform)', () => {
|
|
66
|
+
// Save original platform
|
|
67
|
+
const originalPlatform = process.platform;
|
|
68
|
+
beforeEach(() => {
|
|
69
|
+
// Mock Windows platform
|
|
70
|
+
Object.defineProperty(process, 'platform', {
|
|
71
|
+
value: 'win32',
|
|
72
|
+
configurable: true
|
|
73
|
+
});
|
|
74
|
+
vi.clearAllMocks();
|
|
75
|
+
});
|
|
76
|
+
describe('isProcessRunning (internal helper behavior)', () => {
|
|
77
|
+
it('should handle process.kill correctly', async () => {
|
|
78
|
+
const originalKill = process.kill;
|
|
79
|
+
// isAnyInTreeRunning will call our mocked kill
|
|
80
|
+
// We'll test this indirectly
|
|
81
|
+
const pidToCheck = 99999; // A PID that doesn't exist
|
|
82
|
+
process.kill = vi.fn((checkPid, signal) => {
|
|
83
|
+
if (checkPid === pidToCheck && signal === 0) {
|
|
84
|
+
throw new Error('ESRCH');
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
});
|
|
88
|
+
const result = await isAnyInTreeRunning(pidToCheck);
|
|
89
|
+
expect(result !== undefined).toBe(true);
|
|
90
|
+
// Restore original
|
|
91
|
+
process.kill = originalKill;
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('edge cases and error handling', () => {
|
|
95
|
+
it('should handle invalid PID gracefully', async () => {
|
|
96
|
+
const result = await getChildren(0);
|
|
97
|
+
expect(Array.isArray(result)).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
it('should handle negative PID gracefully', async () => {
|
|
100
|
+
const result = await getProcessTree(-1);
|
|
101
|
+
expect(Array.isArray(result)).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
it('should handle errors in getWorkingProcessPid gracefully', async () => {
|
|
104
|
+
const pid = 12345;
|
|
105
|
+
const result = await getWorkingProcessPid(pid);
|
|
106
|
+
// When PowerShell fails, it should fall back to returning the original PID
|
|
107
|
+
expect(result).toEqual(pid);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('killProcessTree error handling', () => {
|
|
111
|
+
it('should handle errors in killProcessTree gracefully', async () => {
|
|
112
|
+
const originalKill = process.kill;
|
|
113
|
+
process.kill = vi.fn(() => {
|
|
114
|
+
throw new Error('Access denied');
|
|
115
|
+
});
|
|
116
|
+
// This should not throw, errors should be caught
|
|
117
|
+
await expect(killProcessTree(1234)).resolves.not.toThrow();
|
|
118
|
+
// Restore original
|
|
119
|
+
process.kill = originalKill;
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
// Restore original platform after all tests
|
|
123
|
+
afterAll(() => {
|
|
124
|
+
Object.defineProperty(process, 'platform', {
|
|
125
|
+
value: originalPlatform,
|
|
126
|
+
configurable: true
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|