@loop_ouroboros/mcp-hub-lite 1.0.2 → 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 +32 -0
- package/dist/client/assets/{HomeView-7rMg9C6t.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-5q1b0P3O.js → _baseClone-Bp9Rjwd7.js} +1 -1
- 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-H85n3BUC.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-DPsOVNIJ.js → omit-CqPQN3XP.js} +1 -1
- package/dist/client/assets/{raf-DY5mgbuB.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 +362 -5
- package/dist/server/shared/models/server.model.d.ts.map +1 -1
- package/dist/server/shared/models/server.model.js +220 -1
- package/dist/server/shared/models/session.model.d.ts +1 -57
- package/dist/server/shared/models/session.model.d.ts.map +1 -1
- package/dist/server/shared/models/session.model.js +1 -55
- package/dist/server/shared/models/tool.model.d.ts +4 -2
- package/dist/server/shared/models/tool.model.d.ts.map +1 -1
- package/dist/server/shared/types/session-context.types.d.ts +0 -2
- package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
- package/dist/server/shared/types/websocket.types.d.ts +17 -10
- package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
- package/dist/server/src/api/mcp/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 +19 -50
- package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
- package/dist/server/src/api/mcp/session-context-extractor.js +5 -14
- package/dist/server/src/api/web/hub-tools.d.ts +2 -2
- package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
- package/dist/server/src/api/web/hub-tools.js +3 -54
- package/dist/server/src/api/web/mcp-status.d.ts +1 -1
- package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
- package/dist/server/src/api/web/mcp-status.js +71 -30
- package/dist/server/src/api/web/resources.d.ts.map +1 -1
- package/dist/server/src/api/web/resources.js +28 -22
- package/dist/server/src/api/web/search.d.ts +2 -16
- package/dist/server/src/api/web/search.d.ts.map +1 -1
- package/dist/server/src/api/web/search.js +24 -45
- package/dist/server/src/api/web/servers.d.ts +3 -3
- package/dist/server/src/api/web/servers.d.ts.map +1 -1
- package/dist/server/src/api/web/servers.js +70 -25
- package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
- package/dist/server/src/api/ws/ws-handler.js +4 -2
- package/dist/server/src/app.d.ts.map +1 -1
- package/dist/server/src/app.js +0 -2
- package/dist/server/src/cli/commands/list.js +2 -2
- package/dist/server/src/cli/commands/status.d.ts.map +1 -1
- package/dist/server/src/cli/commands/status.js +41 -30
- package/dist/server/src/cli/index.d.ts.map +1 -1
- package/dist/server/src/cli/index.js +2 -1
- package/dist/server/src/cli/server.d.ts +11 -2
- package/dist/server/src/cli/server.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.d.ts +22 -0
- package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
- package/dist/server/src/config/config-change-logger.js +135 -11
- package/dist/server/src/config/config-loader.d.ts +6 -5
- package/dist/server/src/config/config-loader.d.ts.map +1 -1
- package/dist/server/src/config/config-loader.js +54 -16
- package/dist/server/src/config/config-manager.d.ts +51 -43
- package/dist/server/src/config/config-manager.d.ts.map +1 -1
- package/dist/server/src/config/config-manager.js +84 -66
- package/dist/server/src/config/config-migrator.d.ts +82 -0
- package/dist/server/src/config/config-migrator.d.ts.map +1 -0
- package/dist/server/src/config/config-migrator.js +348 -0
- package/dist/server/src/config/config-saver.d.ts +2 -0
- package/dist/server/src/config/config-saver.d.ts.map +1 -1
- package/dist/server/src/config/config-saver.js +8 -2
- package/dist/server/src/config/config.schema.d.ts +10 -104
- package/dist/server/src/config/config.schema.d.ts.map +1 -1
- package/dist/server/src/config/config.schema.js +15 -99
- package/dist/server/src/config/path-validator.d.ts +27 -0
- package/dist/server/src/config/path-validator.d.ts.map +1 -0
- package/dist/server/src/config/path-validator.js +53 -0
- package/dist/server/src/config/server-config-manager.d.ts +37 -31
- package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
- package/dist/server/src/config/server-config-manager.js +222 -66
- package/dist/server/src/config/type-converter.d.ts.map +1 -1
- package/dist/server/src/config/type-converter.js +3 -2
- package/dist/server/src/models/event.model.d.ts +17 -10
- package/dist/server/src/models/event.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.d.ts +17 -3
- package/dist/server/src/models/server.model.d.ts.map +1 -1
- package/dist/server/src/models/server.model.js +2 -1
- package/dist/server/src/models/system-tools.constants.d.ts +10 -27
- package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
- package/dist/server/src/models/system-tools.constants.js +4 -8
- package/dist/server/src/pid/manager.d.ts.map +1 -1
- package/dist/server/src/pid/manager.js +2 -1
- package/dist/server/src/server/dev-server.js +34 -20
- package/dist/server/src/server/runner.d.ts.map +1 -1
- package/dist/server/src/server/runner.js +41 -26
- package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
- package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
- package/dist/server/src/services/connection/connection-manager.js +286 -241
- package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
- package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
- package/dist/server/src/services/connection/tool-cache.js +50 -55
- package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
- package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
- package/dist/server/src/services/gateway/gateway.service.js +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 +10 -81
- 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 +24 -1
- package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
- package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
- package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/server-selector.js +44 -37
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
- package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
- package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
- package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools/tool-search.js +10 -4
- package/dist/server/src/services/hub-tools/types.d.ts +2 -2
- package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.d.ts +43 -72
- package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
- package/dist/server/src/services/hub-tools.service.js +185 -110
- package/dist/server/src/services/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 -585
- package/dist/server/src/services/session-tracker.service.d.ts +2 -10
- package/dist/server/src/services/session-tracker.service.d.ts.map +1 -1
- package/dist/server/src/services/session-tracker.service.js +2 -53
- package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
- package/dist/server/src/services/system-tool-handler.js +7 -17
- package/dist/server/src/utils/composite-key.d.ts +29 -0
- package/dist/server/src/utils/composite-key.d.ts.map +1 -0
- package/dist/server/src/utils/composite-key.js +39 -0
- package/dist/server/src/utils/error-handler.d.ts.map +1 -1
- package/dist/server/src/utils/error-handler.js +3 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/utils/index.js +2 -0
- package/dist/server/src/utils/instance-id.d.ts +22 -0
- package/dist/server/src/utils/instance-id.d.ts.map +1 -0
- package/dist/server/src/utils/instance-id.js +59 -0
- package/dist/server/src/utils/json-utils.d.ts +4 -4
- package/dist/server/src/utils/json-utils.d.ts.map +1 -1
- package/dist/server/src/utils/json-utils.js +4 -4
- package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
- package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-formatter.js +82 -5
- package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
- package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
- package/dist/server/src/utils/logger/log-modules.js +8 -6
- package/dist/server/src/utils/parameter-validator.d.ts +10 -0
- package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
- package/dist/server/src/utils/parameter-validator.js +53 -0
- package/dist/server/src/utils/process-tree.d.ts +49 -0
- package/dist/server/src/utils/process-tree.d.ts.map +1 -0
- package/dist/server/src/utils/process-tree.js +285 -0
- package/dist/server/src/utils/request-context.d.ts +0 -18
- package/dist/server/src/utils/request-context.d.ts.map +1 -1
- package/dist/server/src/utils/request-context.js +0 -20
- package/dist/server/src/utils/sort-utils.d.ts +40 -0
- package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
- package/dist/server/src/utils/sort-utils.js +131 -0
- package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
- package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/sse-transport.js +55 -9
- package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
- package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/stdio-transport.js +66 -247
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
- package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
- package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
- package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
- package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
- package/dist/server/src/utils/transports/transport-factory.js +31 -11
- package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
- package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
- package/dist/server/src/utils/version.d.ts +11 -0
- package/dist/server/src/utils/version.d.ts.map +1 -0
- package/dist/server/src/utils/version.js +57 -0
- package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
- package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
- package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
- package/dist/server/tests/evaluation/evaluation.test.js +10 -9
- package/dist/server/tests/integration/api/gateway.test.js +2 -2
- package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
- package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
- package/dist/server/tests/server.test.js +27 -16
- package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
- package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
- package/dist/server/tests/temp/temp-run-docling.js +53 -0
- package/dist/server/tests/types/test-helpers.d.ts +1 -2
- package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config-saver.test.js +200 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
- package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
- package/dist/server/tests/unit/config/config.schema.test.js +347 -0
- package/dist/server/tests/unit/server/runner.test.js +86 -62
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
- package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
- package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
- package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
- package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
- package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
- package/dist/server/tests/unit/services/session-manager.test.js +26 -436
- package/dist/server/tests/unit/utils/config.test.js +88 -186
- package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
- package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
- package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
- package/dist/server/tests/unit/utils/request-context.test.js +5 -24
- 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-Bf-1ffbk.js +0 -1
- package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
- package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
- package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
- package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
- package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
- package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
- package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
- package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
- package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
- package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
- package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
- package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
- package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
- package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
- package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
- package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
- package/dist/client/assets/el-select-DvjGddk_.js +0 -1
- package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
- package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
- package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
- package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
- package/dist/client/assets/el-tag-npbwux4f.js +0 -1
- package/dist/client/assets/index-CCnAxNF8.js +0 -2
- package/dist/client/assets/index-d1DZeSfz.js +0 -1
- package/dist/client/assets/vnode-CHomNjgN.js +0 -1
|
@@ -21,18 +21,17 @@ export const LOG_MODULES = {
|
|
|
21
21
|
// Core system modules
|
|
22
22
|
SERVER: { module: 'Server' },
|
|
23
23
|
DEV_SERVER: { module: 'DevServer' },
|
|
24
|
+
RUNNER: { module: 'Runner' },
|
|
24
25
|
// Config management
|
|
25
26
|
CONFIG_MANAGER: { module: 'ConfigManager' },
|
|
26
27
|
CONFIG_LOADER: { module: 'ConfigLoader' },
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
SESSION: { module: 'Session' },
|
|
31
|
-
SESSION_API: { module: 'Session API' },
|
|
32
|
-
SESSION_TRACKER: { module: 'SessionTracker' },
|
|
28
|
+
CONFIG_SAVER: { module: 'ConfigSaver' },
|
|
29
|
+
CONFIG_CHANGES: { module: 'SystemConfigManager' },
|
|
30
|
+
SERVER_CONFIG_MANAGER: { module: 'ServerConfigManager' },
|
|
33
31
|
// Connection management
|
|
34
32
|
CONNECTION_MANAGER: { module: 'ConnectionManager' },
|
|
35
33
|
HUB_MANAGER: { module: 'HubManager' },
|
|
34
|
+
SERVER_SELECTOR: { module: 'ServerSelector' },
|
|
36
35
|
// Gateway related
|
|
37
36
|
GATEWAY: { module: 'Gateway' },
|
|
38
37
|
GATEWAY_SERVICE: { module: 'GatewayService' },
|
|
@@ -40,6 +39,7 @@ export const LOG_MODULES = {
|
|
|
40
39
|
HUB_TOOLS: { module: 'HubTools' },
|
|
41
40
|
SYSTEM_TOOL: { module: 'SystemTool' },
|
|
42
41
|
TOOL_LIST: { module: 'ToolList' },
|
|
42
|
+
TOOL_LIST_GENERATOR: { module: 'ToolListGenerator' },
|
|
43
43
|
// Gateway request handlers
|
|
44
44
|
INITIALIZE_HANDLER: { module: 'Initialize' },
|
|
45
45
|
SYSTEM_TOOLS_HANDLER: { module: 'SystemTools' },
|
|
@@ -47,6 +47,8 @@ export const LOG_MODULES = {
|
|
|
47
47
|
TOOLS_HANDLER: { module: 'Tools' },
|
|
48
48
|
// Search service
|
|
49
49
|
SEARCH: { module: 'Search' },
|
|
50
|
+
// Error handling
|
|
51
|
+
ERROR_HANDLER: { module: 'ErrorHandler' },
|
|
50
52
|
// Communication
|
|
51
53
|
COMMUNICATION: { module: 'Communication' },
|
|
52
54
|
CONTEXT: { module: 'Context' },
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { JsonSchema } from '../../shared/models/tool.model.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validates tool arguments against the provided JSON schema
|
|
4
|
+
*
|
|
5
|
+
* @param args - The tool arguments to validate
|
|
6
|
+
* @param schema - The JSON schema to validate against
|
|
7
|
+
* @returns null if valid, or an error message string if invalid
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateParameters(args: Record<string, unknown>, schema: JsonSchema): string | null;
|
|
10
|
+
//# sourceMappingURL=parameter-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-validator.d.ts","sourceRoot":"","sources":["../../../../src/utils/parameter-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,UAAU,GACjB,MAAM,GAAG,IAAI,CAyBf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates tool arguments against the provided JSON schema
|
|
3
|
+
*
|
|
4
|
+
* @param args - The tool arguments to validate
|
|
5
|
+
* @param schema - The JSON schema to validate against
|
|
6
|
+
* @returns null if valid, or an error message string if invalid
|
|
7
|
+
*/
|
|
8
|
+
export function validateParameters(args, schema) {
|
|
9
|
+
// Check required fields
|
|
10
|
+
if (schema.required && Array.isArray(schema.required)) {
|
|
11
|
+
for (const requiredField of schema.required) {
|
|
12
|
+
if (!(requiredField in args)) {
|
|
13
|
+
return `Missing required parameter: '${requiredField}'. Required parameters: [${schema.required.join(', ')}]`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Check parameter types (basic validation)
|
|
18
|
+
if (schema.properties) {
|
|
19
|
+
for (const [paramName, paramSchema] of Object.entries(schema.properties)) {
|
|
20
|
+
if (paramName in args) {
|
|
21
|
+
const argValue = args[paramName];
|
|
22
|
+
const expectedType = paramSchema.type;
|
|
23
|
+
if (expectedType && !isValidType(argValue, expectedType)) {
|
|
24
|
+
return `Invalid type for parameter '${paramName}'. Expected: ${expectedType}, got: ${typeof argValue}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validates if a value matches the expected type
|
|
33
|
+
*
|
|
34
|
+
* @param value - The value to validate
|
|
35
|
+
* @param expectedType - The expected JSON schema type
|
|
36
|
+
* @returns true if valid, false otherwise
|
|
37
|
+
*/
|
|
38
|
+
function isValidType(value, expectedType) {
|
|
39
|
+
switch (expectedType) {
|
|
40
|
+
case 'string':
|
|
41
|
+
return typeof value === 'string';
|
|
42
|
+
case 'number':
|
|
43
|
+
return typeof value === 'number';
|
|
44
|
+
case 'boolean':
|
|
45
|
+
return typeof value === 'boolean';
|
|
46
|
+
case 'object':
|
|
47
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
48
|
+
case 'array':
|
|
49
|
+
return Array.isArray(value);
|
|
50
|
+
default:
|
|
51
|
+
return true; // Cannot validate unknown types, so pass by default
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windows Process Tree Utility Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides process tree management utilities specifically for Windows.
|
|
5
|
+
* It handles the case where shell: true spawns cmd.exe which then spawns
|
|
6
|
+
* the actual working process (like node.exe, python.exe, etc.).
|
|
7
|
+
*
|
|
8
|
+
* On non-Windows platforms, all methods return safe default values
|
|
9
|
+
* and don't perform any actual operations.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Gets all child process IDs for a given parent PID on Windows.
|
|
13
|
+
*
|
|
14
|
+
* @param pid - Parent process ID
|
|
15
|
+
@returns Promise resolving to array of child PID
|
|
16
|
+
*/
|
|
17
|
+
export declare function getChildren(pid: number): Promise<number[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Gets the entire process tree (all descendants) for a given PID.
|
|
20
|
+
* Includes the original PID at the beginning of the array.
|
|
21
|
+
*
|
|
22
|
+
* @param pid - Root process ID
|
|
23
|
+
* @returns Array of all process IDs in the tree
|
|
24
|
+
*/
|
|
25
|
+
export declare function getProcessTree(pid: number): Promise<number[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Checks if any process in the process tree is still running.
|
|
28
|
+
*
|
|
29
|
+
* @param pid - Root process ID
|
|
30
|
+
* @returns True if any process in the tree is running
|
|
31
|
+
*/
|
|
32
|
+
export declare function isAnyInTreeRunning(pid: number): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Tries to find the actual working process PID in the tree.
|
|
35
|
+
* This looks for processes that are likely the actual worker
|
|
36
|
+
* (node.exe, python.exe, etc.) rather than shell processes.
|
|
37
|
+
*
|
|
38
|
+
* @param pid - Root process ID
|
|
39
|
+
* @returns Working process PID if found, undefined otherwise
|
|
40
|
+
*/
|
|
41
|
+
export declare function getWorkingProcessPid(pid: number): Promise<number | undefined>;
|
|
42
|
+
/**
|
|
43
|
+
* Kills the entire process tree.
|
|
44
|
+
*
|
|
45
|
+
* @param pid - Root process ID
|
|
46
|
+
* @param signal - Signal to send (default: SIGTERM)
|
|
47
|
+
*/
|
|
48
|
+
export declare function killProcessTree(pid: number, signal?: NodeJS.Signals): Promise<void>;
|
|
49
|
+
//# sourceMappingURL=process-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-tree.d.ts","sourceRoot":"","sources":["../../../../src/utils/process-tree.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBhE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBtE;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkCnF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,CAAC,OAAmB,GACjC,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { logger, LOG_MODULES } from './logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Windows Process Tree Utility Module
|
|
5
|
+
*
|
|
6
|
+
* This module provides process tree management utilities specifically for Windows.
|
|
7
|
+
* It handles the case where shell: true spawns cmd.exe which then spawns
|
|
8
|
+
* the actual working process (like node.exe, python.exe, etc.).
|
|
9
|
+
*
|
|
10
|
+
* On non-Windows platforms, all methods return safe default values
|
|
11
|
+
* and don't perform any actual operations.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Gets all child process IDs for a given parent PID on Windows.
|
|
15
|
+
*
|
|
16
|
+
* @param pid - Parent process ID
|
|
17
|
+
@returns Promise resolving to array of child PID
|
|
18
|
+
*/
|
|
19
|
+
export async function getChildren(pid) {
|
|
20
|
+
if (process.platform !== 'win32') {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const result = await executePowerShellCommand(`Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq ${pid} } | Select-Object -ExpandProperty ProcessId`);
|
|
25
|
+
const pids = parsePidList(result);
|
|
26
|
+
return pids;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
logger.debug(`Failed to get children for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gets the entire process tree (all descendants) for a given PID.
|
|
35
|
+
* Includes the original PID at the beginning of the array.
|
|
36
|
+
*
|
|
37
|
+
* @param pid - Root process ID
|
|
38
|
+
* @returns Array of all process IDs in the tree
|
|
39
|
+
*/
|
|
40
|
+
export async function getProcessTree(pid) {
|
|
41
|
+
if (process.platform !== 'win32') {
|
|
42
|
+
return [pid];
|
|
43
|
+
}
|
|
44
|
+
const tree = [pid];
|
|
45
|
+
const queue = [pid];
|
|
46
|
+
while (queue.length > 0) {
|
|
47
|
+
const current = queue.shift();
|
|
48
|
+
const children = await getChildren(current);
|
|
49
|
+
for (const child of children) {
|
|
50
|
+
if (!tree.includes(child)) {
|
|
51
|
+
tree.push(child);
|
|
52
|
+
queue.push(child);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return tree;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Checks if any process in the process tree is still running.
|
|
60
|
+
*
|
|
61
|
+
* @param pid - Root process ID
|
|
62
|
+
* @returns True if any process in the tree is running
|
|
63
|
+
*/
|
|
64
|
+
export async function isAnyInTreeRunning(pid) {
|
|
65
|
+
if (process.platform !== 'win32') {
|
|
66
|
+
return isProcessRunning(pid);
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const tree = await getProcessTree(pid);
|
|
70
|
+
for (const processId of tree) {
|
|
71
|
+
if (isProcessRunning(processId)) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
logger.debug(`Error checking process tree for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
|
|
79
|
+
return isProcessRunning(pid);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Tries to find the actual working process PID in the tree.
|
|
84
|
+
* This looks for processes that are likely the actual worker
|
|
85
|
+
* (node.exe, python.exe, etc.) rather than shell processes.
|
|
86
|
+
*
|
|
87
|
+
* @param pid - Root process ID
|
|
88
|
+
* @returns Working process PID if found, undefined otherwise
|
|
89
|
+
*/
|
|
90
|
+
export async function getWorkingProcessPid(pid) {
|
|
91
|
+
if (process.platform !== 'win32') {
|
|
92
|
+
return pid;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const tree = await getProcessTree(pid);
|
|
96
|
+
// If only the root process is in the tree, return it
|
|
97
|
+
if (tree.length === 1) {
|
|
98
|
+
return pid;
|
|
99
|
+
}
|
|
100
|
+
// Get process names for all PIDs in the tree
|
|
101
|
+
const processInfo = await getProcessInfo(tree);
|
|
102
|
+
// Filter out shell processes (cmd.exe, powershell.exe, etc.)
|
|
103
|
+
const workerProcesses = processInfo.filter((info) => !isShellProcess(info.name));
|
|
104
|
+
if (workerProcesses.length > 0) {
|
|
105
|
+
// Prefer the deepest (last) worker process in the tree
|
|
106
|
+
return workerProcesses[workerProcesses.length - 1].pid;
|
|
107
|
+
}
|
|
108
|
+
// If no worker processes found, return the last process in the tree
|
|
109
|
+
return tree[tree.length - 1];
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
logger.debug(`Error finding working process for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
|
|
113
|
+
return pid;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Kills the entire process tree.
|
|
118
|
+
*
|
|
119
|
+
* @param pid - Root process ID
|
|
120
|
+
* @param signal - Signal to send (default: SIGTERM)
|
|
121
|
+
*/
|
|
122
|
+
export async function killProcessTree(pid, signal = 'SIGTERM') {
|
|
123
|
+
if (process.platform !== 'win32') {
|
|
124
|
+
// On non-Windows, just kill the single process
|
|
125
|
+
try {
|
|
126
|
+
process.kill(pid, signal);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Process might already be dead
|
|
130
|
+
}
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const tree = await getProcessTree(pid);
|
|
135
|
+
// Kill processes in reverse order (children first, parent last)
|
|
136
|
+
for (let i = tree.length - 1; i >= 0; i--) {
|
|
137
|
+
const processId = tree[i];
|
|
138
|
+
try {
|
|
139
|
+
process.kill(processId, signal);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Process might already be dead
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
logger.debug(`Error killing process tree for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
|
|
148
|
+
// Fallback: try to kill just the root process
|
|
149
|
+
try {
|
|
150
|
+
process.kill(pid, signal);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Process might already be dead
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// ==================== Internal Helper Functions ====================
|
|
158
|
+
/**
|
|
159
|
+
* Checks if a single process is running.
|
|
160
|
+
*
|
|
161
|
+
* @param pid - Process ID
|
|
162
|
+
* @returns True if process is running
|
|
163
|
+
*/
|
|
164
|
+
function isProcessRunning(pid) {
|
|
165
|
+
try {
|
|
166
|
+
process.kill(pid, 0);
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Executes a PowerShell command and returns the output.
|
|
175
|
+
*
|
|
176
|
+
* @param command - PowerShell command
|
|
177
|
+
* @returns Command output
|
|
178
|
+
*/
|
|
179
|
+
async function executePowerShellCommand(command) {
|
|
180
|
+
return new Promise((resolve, reject) => {
|
|
181
|
+
const ps = spawn('powershell.exe', ['-Command', command], {
|
|
182
|
+
windowsHide: true,
|
|
183
|
+
stdio: ['ignore', 'pipe', 'pipe']
|
|
184
|
+
});
|
|
185
|
+
let stdout = '';
|
|
186
|
+
let stderr = '';
|
|
187
|
+
ps.stdout?.on('data', (data) => {
|
|
188
|
+
stdout += data.toString();
|
|
189
|
+
});
|
|
190
|
+
ps.stderr?.on('data', (data) => {
|
|
191
|
+
stderr += data.toString();
|
|
192
|
+
});
|
|
193
|
+
ps.on('close', (code) => {
|
|
194
|
+
if (code === 0) {
|
|
195
|
+
resolve(stdout.trim());
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
reject(new Error(`PowerShell command failed: ${stderr || stdout}`));
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
ps.on('error', (error) => {
|
|
202
|
+
reject(error);
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Parses a list of PIDs from command output.
|
|
208
|
+
*
|
|
209
|
+
* @param output - Command output
|
|
210
|
+
* * @returns Array of PIDs
|
|
211
|
+
*/
|
|
212
|
+
function parsePidList(output) {
|
|
213
|
+
const lines = output
|
|
214
|
+
.split('\n')
|
|
215
|
+
.map((line) => line.trim())
|
|
216
|
+
.filter((line) => line.length > 0);
|
|
217
|
+
const pids = [];
|
|
218
|
+
for (const line of lines) {
|
|
219
|
+
const pid = parseInt(line, 10);
|
|
220
|
+
if (!isNaN(pid) && pid > 0) {
|
|
221
|
+
pids.push(pid);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return pids;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Gets process information for multiple PIDs.
|
|
228
|
+
*
|
|
229
|
+
* @param pids - Array of process IDs
|
|
230
|
+
* @returns Array of process info objects
|
|
231
|
+
*/
|
|
232
|
+
async function getProcessInfo(pids) {
|
|
233
|
+
if (pids.length === 0) {
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
236
|
+
const result = await executePowerShellCommand(`Get-CimInstance Win32_Process | Where-Object { ${pids.map((pid) => `$_.ProcessId -eq ${pid}`).join(' -or ')} } | Select-Object ProcessId, Name | ConvertTo-Csv -NoTypeInformation`);
|
|
237
|
+
return parseProcessInfoCsv(result);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Parses process info from CSV output.
|
|
241
|
+
*
|
|
242
|
+
* @param csvOutput - CSV output from PowerShell
|
|
243
|
+
* @ *returns Array of process info
|
|
244
|
+
*/
|
|
245
|
+
function parseProcessInfoCsv(csvOutput) {
|
|
246
|
+
const lines = csvOutput
|
|
247
|
+
.split('\n')
|
|
248
|
+
.map((line) => line.trim())
|
|
249
|
+
.filter((line) => line.length > 0);
|
|
250
|
+
if (lines.length < 2) {
|
|
251
|
+
return [];
|
|
252
|
+
}
|
|
253
|
+
const info = [];
|
|
254
|
+
// Skip header line
|
|
255
|
+
for (let i = 1; i < lines.length; i++) {
|
|
256
|
+
const parts = lines[i].split(',').map((p) => p.trim().replace(/^"|"$/g, ''));
|
|
257
|
+
if (parts.length >= 2) {
|
|
258
|
+
const pid = parseInt(parts[0], 10);
|
|
259
|
+
if (!isNaN(pid) && pid > 0) {
|
|
260
|
+
info.push({
|
|
261
|
+
pid,
|
|
262
|
+
name: parts[1].toLowerCase()
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return info;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Checks if a process name is a shell process.
|
|
271
|
+
*
|
|
272
|
+
* @param processName - Process name (should be lowercase)
|
|
273
|
+
* @returns True if it's a shell process
|
|
274
|
+
*/
|
|
275
|
+
function isShellProcess(processName) {
|
|
276
|
+
const shellProcesses = [
|
|
277
|
+
'cmd.exe',
|
|
278
|
+
'powershell.exe',
|
|
279
|
+
'pwsh.exe',
|
|
280
|
+
'command.com',
|
|
281
|
+
'sh.exe',
|
|
282
|
+
'bash.exe'
|
|
283
|
+
];
|
|
284
|
+
return shellProcesses.includes(processName.toLowerCase());
|
|
285
|
+
}
|
|
@@ -50,22 +50,4 @@ export declare const requestContext: AsyncLocalStorage<SessionContext>;
|
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export declare function getSessionContext(): SessionContext | undefined;
|
|
53
|
-
/**
|
|
54
|
-
* Retrieves the current request's working directory (cwd).
|
|
55
|
-
*
|
|
56
|
-
* This is a convenience function that extracts the cwd property from the
|
|
57
|
-
* current request's session context. It's commonly used in file operations
|
|
58
|
-
* that need to respect the session's current working directory.
|
|
59
|
-
*
|
|
60
|
-
* @returns {string | undefined} The current request's working directory, or undefined if not available
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```typescript
|
|
64
|
-
* const cwd = getSessionCwd();
|
|
65
|
-
* if (cwd) {
|
|
66
|
-
* const fullPath = path.join(cwd, relativePath);
|
|
67
|
-
* }
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
export declare function getSessionCwd(): string | undefined;
|
|
71
53
|
//# sourceMappingURL=request-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/utils/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,mCAA0C,CAAC;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D
|
|
1
|
+
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/utils/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,mCAA0C,CAAC;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D"}
|
|
@@ -51,23 +51,3 @@ export const requestContext = new AsyncLocalStorage();
|
|
|
51
51
|
export function getSessionContext() {
|
|
52
52
|
return requestContext.getStore();
|
|
53
53
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Retrieves the current request's working directory (cwd).
|
|
56
|
-
*
|
|
57
|
-
* This is a convenience function that extracts the cwd property from the
|
|
58
|
-
* current request's session context. It's commonly used in file operations
|
|
59
|
-
* that need to respect the session's current working directory.
|
|
60
|
-
*
|
|
61
|
-
* @returns {string | undefined} The current request's working directory, or undefined if not available
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const cwd = getSessionCwd();
|
|
66
|
-
* if (cwd) {
|
|
67
|
-
* const fullPath = path.join(cwd, relativePath);
|
|
68
|
-
* }
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
|
-
export function getSessionCwd() {
|
|
72
|
-
return requestContext.getStore()?.cwd;
|
|
73
|
-
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object key sorting utilities for consistent configuration.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Sorts object keys alphabetically using localeCompare.
|
|
6
|
+
* Returns a new object with sorted keys, preserving the original object.
|
|
7
|
+
*
|
|
8
|
+
* @param obj - Object to sort
|
|
9
|
+
* @returns New object with sorted keys
|
|
10
|
+
*/
|
|
11
|
+
export declare function sortObjectKeys<T extends Record<string, unknown>>(obj: T): T;
|
|
12
|
+
/**
|
|
13
|
+
* Sorts object keys alphabetically, case-insensitive.
|
|
14
|
+
* Returns a new object with sorted keys, preserving the original object and original key case.
|
|
15
|
+
*
|
|
16
|
+
* @param obj - Object to sort
|
|
17
|
+
* @returns New object with sorted keys (case-insensitive sort)
|
|
18
|
+
*/
|
|
19
|
+
export declare function sortObjectKeysCaseInsensitive<T extends Record<string, unknown>>(obj: T): T;
|
|
20
|
+
/**
|
|
21
|
+
* Recursively sorts all object keys in a nested structure.
|
|
22
|
+
* Returns a new object with all nested keys sorted, preserving the original object.
|
|
23
|
+
*
|
|
24
|
+
* @param obj - Object to sort recursively
|
|
25
|
+
* @returns New object with all nested keys sorted
|
|
26
|
+
*/
|
|
27
|
+
export declare function sortObjectKeysDeep<T>(obj: T): T;
|
|
28
|
+
/**
|
|
29
|
+
* Sorts env and headers objects in a server configuration.
|
|
30
|
+
* This is a convenience function for server template/instance configurations.
|
|
31
|
+
* Also normalizes URL fields by removing trailing slashes.
|
|
32
|
+
*
|
|
33
|
+
* @param config - Server configuration object with optional env and headers
|
|
34
|
+
* @returns New object with sorted env and headers keys and normalized URLs
|
|
35
|
+
*/
|
|
36
|
+
export declare function sortServerConfigEnvHeaders<T extends {
|
|
37
|
+
env?: Record<string, string>;
|
|
38
|
+
headers?: Record<string, string>;
|
|
39
|
+
}>(config: T): T;
|
|
40
|
+
//# sourceMappingURL=sort-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/sort-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoDH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAW3E;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAa1F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAmB/C;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC5E,MAAM,EAAE,CAAC,GAAG,CAAC,CAcd"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object key sorting utilities for consistent configuration.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Normalizes a URL string by removing trailing slashes.
|
|
6
|
+
*
|
|
7
|
+
* @param url - The URL to normalize
|
|
8
|
+
* @returns Normalized URL
|
|
9
|
+
*/
|
|
10
|
+
function normalizeUrl(url) {
|
|
11
|
+
return url.replace(/\/+$/, '');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Normalizes URL fields in a configuration object.
|
|
15
|
+
* Currently handles:
|
|
16
|
+
* - url fields at any level
|
|
17
|
+
* - proxy.url fields
|
|
18
|
+
*
|
|
19
|
+
* @param obj - Object to normalize
|
|
20
|
+
* @returns New object with normalized URLs
|
|
21
|
+
*/
|
|
22
|
+
function normalizeConfigUrls(obj) {
|
|
23
|
+
if (!obj) {
|
|
24
|
+
return obj;
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(obj)) {
|
|
27
|
+
return obj.map((item) => normalizeConfigUrls(item));
|
|
28
|
+
}
|
|
29
|
+
if (typeof obj === 'object') {
|
|
30
|
+
const result = {};
|
|
31
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
32
|
+
if (key === 'url' && typeof value === 'string') {
|
|
33
|
+
result[key] = normalizeUrl(value);
|
|
34
|
+
}
|
|
35
|
+
else if (key === 'proxy' && typeof value === 'object' && value !== null) {
|
|
36
|
+
const proxy = value;
|
|
37
|
+
if (typeof proxy.url === 'string') {
|
|
38
|
+
result[key] = { ...proxy, url: normalizeUrl(proxy.url) };
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
result[key] = normalizeConfigUrls(value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
result[key] = normalizeConfigUrls(value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
return obj;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sorts object keys alphabetically using localeCompare.
|
|
54
|
+
* Returns a new object with sorted keys, preserving the original object.
|
|
55
|
+
*
|
|
56
|
+
* @param obj - Object to sort
|
|
57
|
+
* @returns New object with sorted keys
|
|
58
|
+
*/
|
|
59
|
+
export function sortObjectKeys(obj) {
|
|
60
|
+
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
61
|
+
return obj;
|
|
62
|
+
}
|
|
63
|
+
const sortedObj = {};
|
|
64
|
+
const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
|
|
65
|
+
for (const key of keys) {
|
|
66
|
+
sortedObj[key] = obj[key];
|
|
67
|
+
}
|
|
68
|
+
return sortedObj;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Sorts object keys alphabetically, case-insensitive.
|
|
72
|
+
* Returns a new object with sorted keys, preserving the original object and original key case.
|
|
73
|
+
*
|
|
74
|
+
* @param obj - Object to sort
|
|
75
|
+
* @returns New object with sorted keys (case-insensitive sort)
|
|
76
|
+
*/
|
|
77
|
+
export function sortObjectKeysCaseInsensitive(obj) {
|
|
78
|
+
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
79
|
+
return obj;
|
|
80
|
+
}
|
|
81
|
+
const sortedObj = {};
|
|
82
|
+
const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
|
|
83
|
+
for (const key of keys) {
|
|
84
|
+
sortedObj[key] = obj[key];
|
|
85
|
+
}
|
|
86
|
+
return sortedObj;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Recursively sorts all object keys in a nested structure.
|
|
90
|
+
* Returns a new object with all nested keys sorted, preserving the original object.
|
|
91
|
+
*
|
|
92
|
+
* @param obj - Object to sort recursively
|
|
93
|
+
* @returns New object with all nested keys sorted
|
|
94
|
+
*/
|
|
95
|
+
export function sortObjectKeysDeep(obj) {
|
|
96
|
+
if (!obj) {
|
|
97
|
+
return obj;
|
|
98
|
+
}
|
|
99
|
+
if (Array.isArray(obj)) {
|
|
100
|
+
return obj.map((item) => sortObjectKeysDeep(item));
|
|
101
|
+
}
|
|
102
|
+
if (typeof obj === 'object') {
|
|
103
|
+
const sortedObj = {};
|
|
104
|
+
const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
|
|
105
|
+
for (const key of keys) {
|
|
106
|
+
sortedObj[key] = sortObjectKeysDeep(obj[key]);
|
|
107
|
+
}
|
|
108
|
+
return sortedObj;
|
|
109
|
+
}
|
|
110
|
+
return obj;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Sorts env and headers objects in a server configuration.
|
|
114
|
+
* This is a convenience function for server template/instance configurations.
|
|
115
|
+
* Also normalizes URL fields by removing trailing slashes.
|
|
116
|
+
*
|
|
117
|
+
* @param config - Server configuration object with optional env and headers
|
|
118
|
+
* @returns New object with sorted env and headers keys and normalized URLs
|
|
119
|
+
*/
|
|
120
|
+
export function sortServerConfigEnvHeaders(config) {
|
|
121
|
+
// First normalize URLs
|
|
122
|
+
const normalized = normalizeConfigUrls(config);
|
|
123
|
+
const result = { ...normalized };
|
|
124
|
+
if (result.env) {
|
|
125
|
+
result.env = sortObjectKeysCaseInsensitive(result.env);
|
|
126
|
+
}
|
|
127
|
+
if (result.headers) {
|
|
128
|
+
result.headers = sortObjectKeysCaseInsensitive(result.headers);
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|