synapse-mcp 1.0.0 → 1.0.2
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/README.md +1820 -147
- package/dist/constants.d.ts +10 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +18 -8
- package/dist/constants.js.map +1 -1
- package/dist/events/emitter.d.ts +63 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +112 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +51 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +3 -0
- package/dist/events/types.js.map +1 -0
- package/dist/formatters/compose.d.ts +185 -0
- package/dist/formatters/compose.d.ts.map +1 -0
- package/dist/formatters/compose.js +397 -0
- package/dist/formatters/compose.js.map +1 -0
- package/dist/formatters/container.d.ts +84 -0
- package/dist/formatters/container.d.ts.map +1 -0
- package/dist/formatters/container.js +323 -0
- package/dist/formatters/container.js.map +1 -0
- package/dist/formatters/diagnostics.d.ts +20 -0
- package/dist/formatters/diagnostics.d.ts.map +1 -0
- package/dist/formatters/diagnostics.js +73 -0
- package/dist/formatters/diagnostics.js.map +1 -0
- package/dist/formatters/docker.d.ts +139 -0
- package/dist/formatters/docker.d.ts.map +1 -0
- package/dist/formatters/docker.js +216 -0
- package/dist/formatters/docker.js.map +1 -0
- package/dist/formatters/host.d.ts +137 -0
- package/dist/formatters/host.d.ts.map +1 -0
- package/dist/formatters/host.js +198 -0
- package/dist/formatters/host.js.map +1 -0
- package/dist/formatters/index.d.ts +17 -270
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +21 -456
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/scout.d.ts +424 -0
- package/dist/formatters/scout.d.ts.map +1 -0
- package/dist/formatters/scout.js +687 -0
- package/dist/formatters/scout.js.map +1 -0
- package/dist/formatters/strategy.d.ts +105 -0
- package/dist/formatters/strategy.d.ts.map +1 -0
- package/dist/formatters/strategy.js +120 -0
- package/dist/formatters/strategy.js.map +1 -0
- package/dist/formatters/utils.d.ts +84 -0
- package/dist/formatters/utils.d.ts.map +1 -0
- package/dist/formatters/utils.js +129 -0
- package/dist/formatters/utils.js.map +1 -0
- package/dist/health-rate-limiter.d.ts +59 -0
- package/dist/health-rate-limiter.d.ts.map +1 -0
- package/dist/health-rate-limiter.js +159 -0
- package/dist/health-rate-limiter.js.map +1 -0
- package/dist/index.js +61 -100
- package/dist/index.js.map +1 -1
- package/dist/middleware/async-handler.d.ts +62 -0
- package/dist/middleware/async-handler.d.ts.map +1 -0
- package/dist/middleware/async-handler.js +58 -0
- package/dist/middleware/async-handler.js.map +1 -0
- package/dist/middleware/auth.d.ts +32 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +63 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/csrf-protection.d.ts +58 -0
- package/dist/middleware/csrf-protection.d.ts.map +1 -0
- package/dist/middleware/csrf-protection.js +123 -0
- package/dist/middleware/csrf-protection.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +49 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +90 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/error-mapper.d.ts +44 -0
- package/dist/middleware/error-mapper.d.ts.map +1 -0
- package/dist/middleware/error-mapper.js +127 -0
- package/dist/middleware/error-mapper.js.map +1 -0
- package/dist/middleware/index.d.ts +13 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +13 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/request-id.d.ts +22 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +31 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/middleware/types.d.ts +33 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +2 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/schemas/common.d.ts +205 -8
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +290 -17
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/flux/compose.d.ts +307 -44
- package/dist/schemas/flux/compose.d.ts.map +1 -1
- package/dist/schemas/flux/compose.js +74 -48
- package/dist/schemas/flux/compose.js.map +1 -1
- package/dist/schemas/flux/container.d.ts +423 -56
- package/dist/schemas/flux/container.d.ts.map +1 -1
- package/dist/schemas/flux/container.js +83 -61
- package/dist/schemas/flux/container.js.map +1 -1
- package/dist/schemas/flux/docker.d.ts +254 -37
- package/dist/schemas/flux/docker.d.ts.map +1 -1
- package/dist/schemas/flux/docker.js +69 -39
- package/dist/schemas/flux/docker.js.map +1 -1
- package/dist/schemas/flux/host.d.ts +312 -29
- package/dist/schemas/flux/host.d.ts.map +1 -1
- package/dist/schemas/flux/host.js +74 -31
- package/dist/schemas/flux/host.js.map +1 -1
- package/dist/schemas/flux/index.d.ts +503 -11
- package/dist/schemas/flux/index.d.ts.map +1 -1
- package/dist/schemas/flux/index.js +34 -70
- package/dist/schemas/flux/index.js.map +1 -1
- package/dist/schemas/host-config.d.ts +76 -0
- package/dist/schemas/host-config.d.ts.map +1 -0
- package/dist/schemas/host-config.js +105 -0
- package/dist/schemas/host-config.js.map +1 -0
- package/dist/schemas/scout/index.d.ts +80 -23
- package/dist/schemas/scout/index.d.ts.map +1 -1
- package/dist/schemas/scout/index.js +26 -11
- package/dist/schemas/scout/index.js.map +1 -1
- package/dist/schemas/scout/logs.d.ts +17 -5
- package/dist/schemas/scout/logs.d.ts.map +1 -1
- package/dist/schemas/scout/logs.js +41 -31
- package/dist/schemas/scout/logs.js.map +1 -1
- package/dist/schemas/scout/simple.d.ts +126 -11
- package/dist/schemas/scout/simple.d.ts.map +1 -1
- package/dist/schemas/scout/simple.js +112 -57
- package/dist/schemas/scout/simple.js.map +1 -1
- package/dist/schemas/scout/zfs.d.ts +17 -5
- package/dist/schemas/scout/zfs.d.ts.map +1 -1
- package/dist/schemas/scout/zfs.js +34 -25
- package/dist/schemas/scout/zfs.js.map +1 -1
- package/dist/services/cache-layer.d.ts +160 -0
- package/dist/services/cache-layer.d.ts.map +1 -0
- package/dist/services/cache-layer.js +138 -0
- package/dist/services/cache-layer.js.map +1 -0
- package/dist/services/compose-cache.d.ts +75 -0
- package/dist/services/compose-cache.d.ts.map +1 -0
- package/dist/services/compose-cache.js +178 -0
- package/dist/services/compose-cache.js.map +1 -0
- package/dist/services/compose-discovery.d.ts +46 -0
- package/dist/services/compose-discovery.d.ts.map +1 -0
- package/dist/services/compose-discovery.js +219 -0
- package/dist/services/compose-discovery.js.map +1 -0
- package/dist/services/compose-project-lister.d.ts +27 -0
- package/dist/services/compose-project-lister.d.ts.map +1 -0
- package/dist/services/compose-project-lister.js +71 -0
- package/dist/services/compose-project-lister.js.map +1 -0
- package/dist/services/compose-scanner.d.ts +63 -0
- package/dist/services/compose-scanner.d.ts.map +1 -0
- package/dist/services/compose-scanner.js +253 -0
- package/dist/services/compose-scanner.js.map +1 -0
- package/dist/services/compose.d.ts +64 -28
- package/dist/services/compose.d.ts.map +1 -1
- package/dist/services/compose.js +220 -98
- package/dist/services/compose.js.map +1 -1
- package/dist/services/config-loader.d.ts +23 -0
- package/dist/services/config-loader.d.ts.map +1 -0
- package/dist/services/config-loader.js +124 -0
- package/dist/services/config-loader.js.map +1 -0
- package/dist/services/config-service.d.ts +38 -0
- package/dist/services/config-service.d.ts.map +1 -0
- package/dist/services/config-service.js +225 -0
- package/dist/services/config-service.js.map +1 -0
- package/dist/services/container-host-map-cache.d.ts +121 -0
- package/dist/services/container-host-map-cache.d.ts.map +1 -0
- package/dist/services/container-host-map-cache.js +188 -0
- package/dist/services/container-host-map-cache.js.map +1 -0
- package/dist/services/container.d.ts +194 -6
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +386 -11
- package/dist/services/container.js.map +1 -1
- package/dist/services/diagnostics.d.ts +57 -0
- package/dist/services/diagnostics.d.ts.map +1 -0
- package/dist/services/diagnostics.js +271 -0
- package/dist/services/diagnostics.js.map +1 -0
- package/dist/services/docker/container-service.d.ts +123 -0
- package/dist/services/docker/container-service.d.ts.map +1 -0
- package/dist/services/docker/container-service.js +347 -0
- package/dist/services/docker/container-service.js.map +1 -0
- package/dist/services/docker/image-service.d.ts +82 -0
- package/dist/services/docker/image-service.d.ts.map +1 -0
- package/dist/services/docker/image-service.js +193 -0
- package/dist/services/docker/image-service.js.map +1 -0
- package/dist/services/docker/index.d.ts +80 -0
- package/dist/services/docker/index.d.ts.map +1 -0
- package/dist/services/docker/index.js +103 -0
- package/dist/services/docker/index.js.map +1 -0
- package/dist/services/docker/network-service.d.ts +22 -0
- package/dist/services/docker/network-service.d.ts.map +1 -0
- package/dist/services/docker/network-service.js +43 -0
- package/dist/services/docker/network-service.js.map +1 -0
- package/dist/services/docker/system-service.d.ts +49 -0
- package/dist/services/docker/system-service.d.ts.map +1 -0
- package/dist/services/docker/system-service.js +215 -0
- package/dist/services/docker/system-service.js.map +1 -0
- package/dist/services/docker/utils/client-factory.d.ts +56 -0
- package/dist/services/docker/utils/client-factory.d.ts.map +1 -0
- package/dist/services/docker/utils/client-factory.js +139 -0
- package/dist/services/docker/utils/client-factory.js.map +1 -0
- package/dist/services/docker/utils/client-manager.d.ts +88 -0
- package/dist/services/docker/utils/client-manager.d.ts.map +1 -0
- package/dist/services/docker/utils/client-manager.js +124 -0
- package/dist/services/docker/utils/client-manager.js.map +1 -0
- package/dist/services/docker/utils/exec-handler.d.ts +94 -0
- package/dist/services/docker/utils/exec-handler.d.ts.map +1 -0
- package/dist/services/docker/utils/exec-handler.js +197 -0
- package/dist/services/docker/utils/exec-handler.js.map +1 -0
- package/dist/services/docker/utils/formatters.d.ts +13 -0
- package/dist/services/docker/utils/formatters.d.ts.map +1 -0
- package/dist/services/docker/utils/formatters.js +33 -0
- package/dist/services/docker/utils/formatters.js.map +1 -0
- package/dist/services/docker/utils/log-parser.d.ts +10 -0
- package/dist/services/docker/utils/log-parser.d.ts.map +1 -0
- package/dist/services/docker/utils/log-parser.js +48 -0
- package/dist/services/docker/utils/log-parser.js.map +1 -0
- package/dist/services/docker/utils/stats-calculator.d.ts +68 -0
- package/dist/services/docker/utils/stats-calculator.d.ts.map +1 -0
- package/dist/services/docker/utils/stats-calculator.js +61 -0
- package/dist/services/docker/utils/stats-calculator.js.map +1 -0
- package/dist/services/docker/volume-service.d.ts +22 -0
- package/dist/services/docker/volume-service.d.ts.map +1 -0
- package/dist/services/docker/volume-service.js +48 -0
- package/dist/services/docker/volume-service.js.map +1 -0
- package/dist/services/docker-interfaces.d.ts +283 -0
- package/dist/services/docker-interfaces.d.ts.map +1 -0
- package/dist/services/docker-interfaces.js +13 -0
- package/dist/services/docker-interfaces.js.map +1 -0
- package/dist/services/docker.d.ts +42 -5
- package/dist/services/docker.d.ts.map +1 -1
- package/dist/services/docker.js +335 -127
- package/dist/services/docker.js.map +1 -1
- package/dist/services/file-service.d.ts +6 -2
- package/dist/services/file-service.d.ts.map +1 -1
- package/dist/services/file-service.js +156 -52
- package/dist/services/file-service.js.map +1 -1
- package/dist/services/host-config-repository.d.ts +133 -0
- package/dist/services/host-config-repository.d.ts.map +1 -0
- package/dist/services/host-config-repository.js +323 -0
- package/dist/services/host-config-repository.js.map +1 -0
- package/dist/services/host-resolver.d.ts +49 -0
- package/dist/services/host-resolver.d.ts.map +1 -0
- package/dist/services/host-resolver.js +176 -0
- package/dist/services/host-resolver.js.map +1 -0
- package/dist/services/interfaces.d.ts +61 -194
- package/dist/services/interfaces.d.ts.map +1 -1
- package/dist/services/local-executor.d.ts +31 -0
- package/dist/services/local-executor.d.ts.map +1 -0
- package/dist/services/local-executor.js +71 -0
- package/dist/services/local-executor.js.map +1 -0
- package/dist/services/ssh-config-loader.d.ts +35 -0
- package/dist/services/ssh-config-loader.d.ts.map +1 -0
- package/dist/services/ssh-config-loader.js +218 -0
- package/dist/services/ssh-config-loader.js.map +1 -0
- package/dist/services/ssh-pool.d.ts +26 -1
- package/dist/services/ssh-pool.d.ts.map +1 -1
- package/dist/services/ssh-pool.js +166 -25
- package/dist/services/ssh-pool.js.map +1 -1
- package/dist/services/ssh-service.d.ts +3 -0
- package/dist/services/ssh-service.d.ts.map +1 -1
- package/dist/services/ssh-service.js +53 -31
- package/dist/services/ssh-service.js.map +1 -1
- package/dist/services/ssh.d.ts +2 -6
- package/dist/services/ssh.d.ts.map +1 -1
- package/dist/services/ssh.js +9 -40
- package/dist/services/ssh.js.map +1 -1
- package/dist/tools/definitions/flux.d.ts +13 -0
- package/dist/tools/definitions/flux.d.ts.map +1 -0
- package/dist/tools/definitions/flux.js +101 -0
- package/dist/tools/definitions/flux.js.map +1 -0
- package/dist/tools/definitions/index.d.ts +8 -0
- package/dist/tools/definitions/index.d.ts.map +1 -0
- package/dist/tools/definitions/index.js +8 -0
- package/dist/tools/definitions/index.js.map +1 -0
- package/dist/tools/definitions/scout.d.ts +13 -0
- package/dist/tools/definitions/scout.d.ts.map +1 -0
- package/dist/tools/definitions/scout.js +78 -0
- package/dist/tools/definitions/scout.js.map +1 -0
- package/dist/tools/flux.d.ts +16 -8
- package/dist/tools/flux.d.ts.map +1 -1
- package/dist/tools/flux.js +27 -66
- package/dist/tools/flux.js.map +1 -1
- package/dist/tools/handlers/base-handler.d.ts +172 -0
- package/dist/tools/handlers/base-handler.d.ts.map +1 -0
- package/dist/tools/handlers/base-handler.js +234 -0
- package/dist/tools/handlers/base-handler.js.map +1 -0
- package/dist/tools/handlers/compose-handlers.d.ts +108 -0
- package/dist/tools/handlers/compose-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/compose-handlers.js +293 -0
- package/dist/tools/handlers/compose-handlers.js.map +1 -0
- package/dist/tools/handlers/compose-utils.d.ts +35 -0
- package/dist/tools/handlers/compose-utils.d.ts.map +1 -0
- package/dist/tools/handlers/compose-utils.js +76 -0
- package/dist/tools/handlers/compose-utils.js.map +1 -0
- package/dist/tools/handlers/compose.d.ts +23 -0
- package/dist/tools/handlers/compose.d.ts.map +1 -0
- package/dist/tools/handlers/compose.js +125 -0
- package/dist/tools/handlers/compose.js.map +1 -0
- package/dist/tools/handlers/container.d.ts +23 -0
- package/dist/tools/handlers/container.d.ts.map +1 -0
- package/dist/tools/handlers/container.js +333 -0
- package/dist/tools/handlers/container.js.map +1 -0
- package/dist/tools/handlers/docker.d.ts +24 -0
- package/dist/tools/handlers/docker.d.ts.map +1 -0
- package/dist/tools/handlers/docker.js +155 -0
- package/dist/tools/handlers/docker.js.map +1 -0
- package/dist/tools/handlers/host.d.ts +23 -0
- package/dist/tools/handlers/host.d.ts.map +1 -0
- package/dist/tools/handlers/host.js +196 -0
- package/dist/tools/handlers/host.js.map +1 -0
- package/dist/tools/handlers/scout-logs.d.ts +24 -0
- package/dist/tools/handlers/scout-logs.d.ts.map +1 -0
- package/dist/tools/handlers/scout-logs.js +119 -0
- package/dist/tools/handlers/scout-logs.js.map +1 -0
- package/dist/tools/handlers/scout-simple.d.ts +23 -0
- package/dist/tools/handlers/scout-simple.d.ts.map +1 -0
- package/dist/tools/handlers/scout-simple.js +286 -0
- package/dist/tools/handlers/scout-simple.js.map +1 -0
- package/dist/tools/handlers/scout-zfs.d.ts +23 -0
- package/dist/tools/handlers/scout-zfs.d.ts.map +1 -0
- package/dist/tools/handlers/scout-zfs.js +82 -0
- package/dist/tools/handlers/scout-zfs.js.map +1 -0
- package/dist/tools/index.d.ts +32 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +41 -35
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +135 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +151 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/scout.d.ts +16 -8
- package/dist/tools/scout.d.ts.map +1 -1
- package/dist/tools/scout.js +36 -78
- package/dist/tools/scout.js.map +1 -1
- package/dist/types.d.ts +629 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/command-security.d.ts +82 -0
- package/dist/utils/command-security.d.ts.map +1 -0
- package/dist/utils/command-security.js +122 -0
- package/dist/utils/command-security.js.map +1 -0
- package/dist/utils/error-sanitization.d.ts +77 -0
- package/dist/utils/error-sanitization.d.ts.map +1 -0
- package/dist/utils/error-sanitization.js +107 -0
- package/dist/utils/error-sanitization.js.map +1 -0
- package/dist/utils/errors.d.ts +30 -6
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +91 -12
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/help-handler.d.ts +23 -0
- package/dist/utils/help-handler.d.ts.map +1 -0
- package/dist/utils/help-handler.js +21 -0
- package/dist/utils/help-handler.js.map +1 -0
- package/dist/utils/help.d.ts +1 -1
- package/dist/utils/help.d.ts.map +1 -1
- package/dist/utils/help.js +57 -16
- package/dist/utils/help.js.map +1 -1
- package/dist/utils/host-utils.d.ts +31 -0
- package/dist/utils/host-utils.d.ts.map +1 -0
- package/dist/utils/host-utils.js +80 -0
- package/dist/utils/host-utils.js.map +1 -0
- package/dist/utils/index.d.ts +8 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +8 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/init-detection.d.ts +36 -0
- package/dist/utils/init-detection.d.ts.map +1 -0
- package/dist/utils/init-detection.js +79 -0
- package/dist/utils/init-detection.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +32 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pagination.d.ts +20 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +29 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/path-security.d.ts +132 -18
- package/dist/utils/path-security.d.ts.map +1 -1
- package/dist/utils/path-security.js +164 -35
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/sorting.d.ts +33 -0
- package/dist/utils/sorting.d.ts.map +1 -0
- package/dist/utils/sorting.js +57 -0
- package/dist/utils/sorting.js.map +1 -0
- package/dist/utils/text-filters.d.ts +13 -0
- package/dist/utils/text-filters.d.ts.map +1 -0
- package/dist/utils/text-filters.js +18 -0
- package/dist/utils/text-filters.js.map +1 -0
- package/dist/utils/time.d.ts +11 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +13 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/validation.d.ts +25 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +56 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +45 -19
- package/dist/schemas/discriminator.d.ts +0 -20
- package/dist/schemas/discriminator.d.ts.map +0 -1
- package/dist/schemas/discriminator.js +0 -25
- package/dist/schemas/discriminator.js.map +0 -1
- package/dist/schemas/unified.d.ts +0 -674
- package/dist/schemas/unified.d.ts.map +0 -1
- package/dist/schemas/unified.js +0 -453
- package/dist/schemas/unified.js.map +0 -1
- package/dist/tools/unified.d.ts +0 -7
- package/dist/tools/unified.d.ts.map +0 -1
- package/dist/tools/unified.js +0 -827
- package/dist/tools/unified.js.map +0 -1
package/dist/utils/errors.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getCurrentTimestamp } from "./time.js";
|
|
1
2
|
/**
|
|
2
3
|
* Error classes for preserving context in error chains
|
|
3
4
|
*
|
|
@@ -13,13 +14,11 @@
|
|
|
13
14
|
export class HostOperationError extends Error {
|
|
14
15
|
hostName;
|
|
15
16
|
operation;
|
|
16
|
-
cause;
|
|
17
17
|
constructor(message, hostName, operation, cause) {
|
|
18
18
|
const fullMessage = `[Host: ${hostName}] [Op: ${operation}] ${message}`;
|
|
19
|
-
super(fullMessage);
|
|
19
|
+
super(fullMessage, { cause });
|
|
20
20
|
this.hostName = hostName;
|
|
21
21
|
this.operation = operation;
|
|
22
|
-
this.cause = cause;
|
|
23
22
|
this.name = "HostOperationError";
|
|
24
23
|
// Preserve original error cause for debugging
|
|
25
24
|
if (cause instanceof Error) {
|
|
@@ -36,23 +35,21 @@ export class SSHCommandError extends Error {
|
|
|
36
35
|
exitCode;
|
|
37
36
|
stderr;
|
|
38
37
|
stdout;
|
|
39
|
-
cause;
|
|
40
38
|
constructor(message, hostName, command, exitCode, stderr, stdout, cause) {
|
|
41
39
|
const fullMessage = [
|
|
42
40
|
`[SSH] [Host: ${hostName}] ${message}`,
|
|
43
41
|
`Command: ${command}`,
|
|
44
42
|
exitCode !== undefined ? `Exit code: ${exitCode}` : null,
|
|
45
|
-
stderr ? `Stderr: ${stderr}` : null
|
|
43
|
+
stderr ? `Stderr: ${stderr}` : null,
|
|
46
44
|
]
|
|
47
45
|
.filter(Boolean)
|
|
48
46
|
.join("\n");
|
|
49
|
-
super(fullMessage);
|
|
47
|
+
super(fullMessage, { cause });
|
|
50
48
|
this.hostName = hostName;
|
|
51
49
|
this.command = command;
|
|
52
50
|
this.exitCode = exitCode;
|
|
53
51
|
this.stderr = stderr;
|
|
54
52
|
this.stdout = stdout;
|
|
55
|
-
this.cause = cause;
|
|
56
53
|
this.name = "SSHCommandError";
|
|
57
54
|
if (cause instanceof Error) {
|
|
58
55
|
this.stack = `${this.stack}\nCaused by: ${cause.stack}`;
|
|
@@ -66,20 +63,102 @@ export class ComposeOperationError extends Error {
|
|
|
66
63
|
hostName;
|
|
67
64
|
project;
|
|
68
65
|
action;
|
|
69
|
-
cause;
|
|
70
66
|
constructor(message, hostName, project, action, cause) {
|
|
71
67
|
const fullMessage = `[Compose] [Host: ${hostName}] [Project: ${project}] [Action: ${action}] ${message}`;
|
|
72
|
-
super(fullMessage);
|
|
68
|
+
super(fullMessage, { cause });
|
|
73
69
|
this.hostName = hostName;
|
|
74
70
|
this.project = project;
|
|
75
71
|
this.action = action;
|
|
76
|
-
this.cause = cause;
|
|
77
72
|
this.name = "ComposeOperationError";
|
|
78
73
|
if (cause instanceof Error) {
|
|
79
74
|
this.stack = `${this.stack}\nCaused by: ${cause.stack}`;
|
|
80
75
|
}
|
|
81
76
|
}
|
|
82
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Validation error for input schema failures
|
|
80
|
+
*/
|
|
81
|
+
export class ValidationError extends Error {
|
|
82
|
+
handlerName;
|
|
83
|
+
issues;
|
|
84
|
+
constructor(message, handlerName, issues, cause) {
|
|
85
|
+
const fullMessage = `[Validation] [Handler: ${handlerName}] ${message}\nIssues: ${issues.join(", ")}`;
|
|
86
|
+
super(fullMessage, { cause });
|
|
87
|
+
this.handlerName = handlerName;
|
|
88
|
+
this.issues = issues;
|
|
89
|
+
this.name = "ValidationError";
|
|
90
|
+
if (cause instanceof Error) {
|
|
91
|
+
this.stack = `${this.stack}\nCaused by: ${cause.stack}`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Fields that may contain sensitive operational details and should be redacted in logs
|
|
97
|
+
*
|
|
98
|
+
* SECURITY (CWE-532): Redact fields that could contain credentials or secrets.
|
|
99
|
+
* Operational identifiers (host, container_id, project) are intentionally NOT redacted
|
|
100
|
+
* because they are needed for debugging and do not contain secrets.
|
|
101
|
+
*/
|
|
102
|
+
const SENSITIVE_PARAM_FIELDS = new Set([
|
|
103
|
+
// Command execution
|
|
104
|
+
"command", // Shell commands may contain credentials or secrets
|
|
105
|
+
"args", // Command arguments
|
|
106
|
+
// File system paths
|
|
107
|
+
"path", // File paths may reveal system structure
|
|
108
|
+
"target", // File/directory targets
|
|
109
|
+
"source", // Source paths
|
|
110
|
+
"destination", // Destination paths
|
|
111
|
+
"compose_file", // Compose file paths reveal infrastructure layout
|
|
112
|
+
// Search/filter patterns
|
|
113
|
+
"grep", // Search patterns may contain sensitive data
|
|
114
|
+
"label_filter", // Docker labels may contain internal info
|
|
115
|
+
"name_filter", // Container/image names may be sensitive
|
|
116
|
+
// Environment
|
|
117
|
+
"env", // Environment variables (if we add this feature)
|
|
118
|
+
]);
|
|
119
|
+
/**
|
|
120
|
+
* Sanitize params for safe logging by redacting potentially sensitive fields
|
|
121
|
+
*
|
|
122
|
+
* Preserves safe operational fields (action, subaction, host, response_format, etc.)
|
|
123
|
+
* while redacting fields that may contain sensitive data (paths, commands, filters).
|
|
124
|
+
*
|
|
125
|
+
* @param params - Parameters to sanitize
|
|
126
|
+
* @returns Sanitized copy of params with sensitive fields redacted
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* sanitizeParams({
|
|
130
|
+
* action: 'scout',
|
|
131
|
+
* command: 'cat /etc/passwd',
|
|
132
|
+
* host: 'web-01',
|
|
133
|
+
* path: '/etc/secrets'
|
|
134
|
+
* })
|
|
135
|
+
* // Returns: { action: 'scout', command: '[REDACTED]', host: 'web-01', path: '[REDACTED]' }
|
|
136
|
+
*/
|
|
137
|
+
export function sanitizeParams(params) {
|
|
138
|
+
// Handle non-object types
|
|
139
|
+
if (typeof params !== "object" || params === null) {
|
|
140
|
+
return params;
|
|
141
|
+
}
|
|
142
|
+
// Handle arrays (unlikely but defensive)
|
|
143
|
+
if (Array.isArray(params)) {
|
|
144
|
+
return "[REDACTED]";
|
|
145
|
+
}
|
|
146
|
+
// Sanitize object fields
|
|
147
|
+
const sanitized = {};
|
|
148
|
+
for (const [key, value] of Object.entries(params)) {
|
|
149
|
+
if (SENSITIVE_PARAM_FIELDS.has(key)) {
|
|
150
|
+
sanitized[key] = "[REDACTED]";
|
|
151
|
+
}
|
|
152
|
+
else if (typeof value === "object" && value !== null) {
|
|
153
|
+
// Nested objects are redacted entirely (avoiding deep traversal)
|
|
154
|
+
sanitized[key] = "[REDACTED]";
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
sanitized[key] = value;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return sanitized;
|
|
161
|
+
}
|
|
83
162
|
/**
|
|
84
163
|
* Log error with structured context
|
|
85
164
|
*
|
|
@@ -90,7 +169,7 @@ export class ComposeOperationError extends Error {
|
|
|
90
169
|
* @param context - Additional context information
|
|
91
170
|
*/
|
|
92
171
|
export function logError(error, context) {
|
|
93
|
-
const timestamp =
|
|
172
|
+
const timestamp = getCurrentTimestamp();
|
|
94
173
|
const parts = [`[${timestamp}]`];
|
|
95
174
|
if (context?.requestId) {
|
|
96
175
|
parts.push(`[Request: ${context.requestId}]`);
|
|
@@ -120,7 +199,7 @@ export function logError(error, context) {
|
|
|
120
199
|
console.error(error.stack);
|
|
121
200
|
}
|
|
122
201
|
if (context?.metadata) {
|
|
123
|
-
console.error("Metadata:", JSON.stringify(context.metadata
|
|
202
|
+
console.error("Metadata:", JSON.stringify(context.metadata));
|
|
124
203
|
}
|
|
125
204
|
}
|
|
126
205
|
else {
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGzB;IACA;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared help handling for flux and scout tools
|
|
3
|
+
* Extracts 100% duplicated help logic from flux.ts and scout.ts
|
|
4
|
+
*/
|
|
5
|
+
import type { ZodType } from "zod";
|
|
6
|
+
/**
|
|
7
|
+
* Help action input shape
|
|
8
|
+
*/
|
|
9
|
+
export interface HelpInput {
|
|
10
|
+
action: "help";
|
|
11
|
+
topic?: string;
|
|
12
|
+
format?: "markdown" | "json";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Handle help action for any schema
|
|
16
|
+
* Consolidates identical logic from flux.ts:29-37 and scout.ts:32-40
|
|
17
|
+
*
|
|
18
|
+
* @param input - Help input with optional topic and format
|
|
19
|
+
* @param schema - Zod schema to generate help from
|
|
20
|
+
* @returns Formatted help string (markdown or JSON)
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleHelpAction(input: HelpInput, schema: ZodType): string;
|
|
23
|
+
//# sourceMappingURL=help-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-handler.d.ts","sourceRoot":"","sources":["../../src/utils/help-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGnC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAM1E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared help handling for flux and scout tools
|
|
3
|
+
* Extracts 100% duplicated help logic from flux.ts and scout.ts
|
|
4
|
+
*/
|
|
5
|
+
import { formatHelpJson, formatHelpMarkdown, generateHelp } from "./help.js";
|
|
6
|
+
/**
|
|
7
|
+
* Handle help action for any schema
|
|
8
|
+
* Consolidates identical logic from flux.ts:29-37 and scout.ts:32-40
|
|
9
|
+
*
|
|
10
|
+
* @param input - Help input with optional topic and format
|
|
11
|
+
* @param schema - Zod schema to generate help from
|
|
12
|
+
* @returns Formatted help string (markdown or JSON)
|
|
13
|
+
*/
|
|
14
|
+
export function handleHelpAction(input, schema) {
|
|
15
|
+
const entries = generateHelp(schema, input.topic);
|
|
16
|
+
if (input.format === "json") {
|
|
17
|
+
return formatHelpJson(entries);
|
|
18
|
+
}
|
|
19
|
+
return formatHelpMarkdown(entries);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=help-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-handler.js","sourceRoot":"","sources":["../../src/utils/help-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAW7E;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgB,EAAE,MAAe;IAChE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
package/dist/utils/help.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* 2. Check Zod changelog for changes to internal structure
|
|
12
12
|
* 3. Update this module if internal structure changes
|
|
13
13
|
*/
|
|
14
|
-
import { z } from "zod";
|
|
14
|
+
import type { z } from "zod";
|
|
15
15
|
export interface HelpEntry {
|
|
16
16
|
discriminator: string;
|
|
17
17
|
description: string;
|
package/dist/utils/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAkOD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CA0C9E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CA8B/D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAQ3D"}
|
package/dist/utils/help.js
CHANGED
|
@@ -12,17 +12,28 @@
|
|
|
12
12
|
* 3. Update this module if internal structure changes
|
|
13
13
|
*/
|
|
14
14
|
/**
|
|
15
|
-
* Safely
|
|
15
|
+
* Safely accesses the internal _def property from a Zod schema.
|
|
16
|
+
*
|
|
17
|
+
* NOTE: Uses Zod internal API (_def) which is not part of the public interface.
|
|
18
|
+
* This may break on Zod version upgrades.
|
|
19
|
+
*
|
|
20
|
+
* @param schema - Zod schema to extract internal definition from
|
|
21
|
+
* @returns Internal definition object with type, options, values, etc.
|
|
16
22
|
*/
|
|
17
23
|
function getDef(schema) {
|
|
18
24
|
return schema._def ?? {};
|
|
19
25
|
}
|
|
20
26
|
/**
|
|
21
|
-
*
|
|
27
|
+
* Unwraps z.preprocess wrapper to access inner discriminated union schema.
|
|
22
28
|
*
|
|
23
29
|
* In Zod 4.x, z.preprocess() creates a pipe with:
|
|
24
30
|
* - _def.type === 'pipe'
|
|
25
31
|
* - _def.out containing the inner schema
|
|
32
|
+
*
|
|
33
|
+
* In Zod 3.x, preprocessed schemas have _def.innerType instead.
|
|
34
|
+
*
|
|
35
|
+
* @param schema - Potentially wrapped Zod schema
|
|
36
|
+
* @returns Unwrapped inner schema or original schema if not wrapped
|
|
26
37
|
*/
|
|
27
38
|
function unwrapSchema(schema) {
|
|
28
39
|
const def = getDef(schema);
|
|
@@ -37,9 +48,14 @@ function unwrapSchema(schema) {
|
|
|
37
48
|
return schema;
|
|
38
49
|
}
|
|
39
50
|
/**
|
|
40
|
-
*
|
|
51
|
+
* Gets the base type name from a potentially wrapped Zod schema.
|
|
41
52
|
*
|
|
42
|
-
* Handles default(), optional(), nullable() wrapping to
|
|
53
|
+
* Handles default(), optional(), nullable() wrapping to extract the underlying type.
|
|
54
|
+
* For union types, returns a pipe-delimited string of all type options.
|
|
55
|
+
* For enum types, returns quoted values joined by pipes.
|
|
56
|
+
*
|
|
57
|
+
* @param schema - Zod schema to extract type name from
|
|
58
|
+
* @returns Type name string (e.g., "string", "number", "string | number", '"active" | "inactive"')
|
|
43
59
|
*/
|
|
44
60
|
function getBaseTypeName(schema) {
|
|
45
61
|
const def = getDef(schema);
|
|
@@ -64,7 +80,12 @@ function getBaseTypeName(schema) {
|
|
|
64
80
|
return def.type ?? "unknown";
|
|
65
81
|
}
|
|
66
82
|
/**
|
|
67
|
-
*
|
|
83
|
+
* Extracts the default value from a Zod schema if present.
|
|
84
|
+
*
|
|
85
|
+
* Handles both Zod 3.x (defaultValue as value) and Zod 4.x (defaultValue as getter function).
|
|
86
|
+
*
|
|
87
|
+
* @param schema - Zod schema to extract default value from
|
|
88
|
+
* @returns Default value if schema is wrapped with .default(), undefined otherwise
|
|
68
89
|
*/
|
|
69
90
|
function getDefaultValue(schema) {
|
|
70
91
|
const def = getDef(schema);
|
|
@@ -73,14 +94,19 @@ function getDefaultValue(schema) {
|
|
|
73
94
|
// defaultValue is a getter function in Zod 4.x
|
|
74
95
|
return typeof def.defaultValue === "function" ? def.defaultValue() : def.defaultValue;
|
|
75
96
|
}
|
|
76
|
-
catch {
|
|
97
|
+
catch (_error) {
|
|
77
98
|
return undefined;
|
|
78
99
|
}
|
|
79
100
|
}
|
|
80
101
|
return undefined;
|
|
81
102
|
}
|
|
82
103
|
/**
|
|
83
|
-
*
|
|
104
|
+
* Extracts options array from a discriminated union or union schema.
|
|
105
|
+
*
|
|
106
|
+
* Tries direct property access first (Zod 4.x), then falls back to _def.options.
|
|
107
|
+
*
|
|
108
|
+
* @param schema - Zod discriminated union or union schema
|
|
109
|
+
* @returns Array of schema options, or undefined if not a union type
|
|
84
110
|
*/
|
|
85
111
|
function getOptions(schema) {
|
|
86
112
|
// Try direct access (Zod 4.x)
|
|
@@ -93,16 +119,31 @@ function getOptions(schema) {
|
|
|
93
119
|
return def.options;
|
|
94
120
|
}
|
|
95
121
|
/**
|
|
96
|
-
*
|
|
122
|
+
* Checks if a schema is a nested discriminated union (has options but no shape).
|
|
123
|
+
*
|
|
124
|
+
* Used to detect nested union structures like zfs or logs actions in Scout schema,
|
|
125
|
+
* where the union contains another discriminated union rather than object schemas.
|
|
126
|
+
*
|
|
127
|
+
* @param schema - Zod schema to check for nested union structure
|
|
128
|
+
* @returns true if schema has options array but no shape property
|
|
97
129
|
*/
|
|
98
130
|
function isNestedDiscriminatedUnion(schema) {
|
|
99
131
|
const def = getDef(schema);
|
|
100
132
|
const hasOptions = !!getOptions(schema);
|
|
101
133
|
const hasShape = !!schema.shape;
|
|
102
|
-
return hasOptions && !hasShape && (def.type ===
|
|
134
|
+
return hasOptions && !hasShape && (def.type === "discriminatedUnion" || def.type === "union");
|
|
103
135
|
}
|
|
104
136
|
/**
|
|
105
|
-
*
|
|
137
|
+
* Extracts help entry from a single ZodObject schema.
|
|
138
|
+
*
|
|
139
|
+
* Parses the schema's shape to identify:
|
|
140
|
+
* - Discriminator values (literal fields like 'action' or 'subaction')
|
|
141
|
+
* - Parameters (all non-discriminator fields with types, descriptions, defaults)
|
|
142
|
+
* - Schema description
|
|
143
|
+
*
|
|
144
|
+
* @param option - ZodObject schema representing one union option
|
|
145
|
+
* @param prefix - Optional prefix for nested discriminators (e.g., "zfs" for "zfs:pools")
|
|
146
|
+
* @returns HelpEntry with discriminator, description, and parameters, or null if invalid
|
|
106
147
|
*/
|
|
107
148
|
function extractObjectHelpEntry(option, prefix) {
|
|
108
149
|
// Access shape from ZodObject
|
|
@@ -125,8 +166,8 @@ function extractObjectHelpEntry(option, prefix) {
|
|
|
125
166
|
}
|
|
126
167
|
// Build discriminator value: action or action:subaction
|
|
127
168
|
let discriminatorValue;
|
|
128
|
-
const actionLiteral = literals.find(l => l.key ===
|
|
129
|
-
const subactionLiteral = literals.find(l => l.key ===
|
|
169
|
+
const actionLiteral = literals.find((l) => l.key === "action");
|
|
170
|
+
const subactionLiteral = literals.find((l) => l.key === "subaction");
|
|
130
171
|
if (subactionLiteral && actionLiteral) {
|
|
131
172
|
// Nested pattern: action:subaction (e.g., "zfs:pools")
|
|
132
173
|
discriminatorValue = `${actionLiteral.value}:${subactionLiteral.value}`;
|
|
@@ -151,13 +192,13 @@ function extractObjectHelpEntry(option, prefix) {
|
|
|
151
192
|
type: getBaseTypeName(fieldSchema),
|
|
152
193
|
description: fieldSchema.description,
|
|
153
194
|
required: !fieldSchema.isOptional(),
|
|
154
|
-
default: getDefaultValue(fieldSchema)
|
|
195
|
+
default: getDefaultValue(fieldSchema),
|
|
155
196
|
};
|
|
156
197
|
});
|
|
157
198
|
return {
|
|
158
199
|
discriminator: discriminatorValue,
|
|
159
200
|
description: option.description ?? "",
|
|
160
|
-
parameters
|
|
201
|
+
parameters,
|
|
161
202
|
};
|
|
162
203
|
}
|
|
163
204
|
/**
|
|
@@ -204,7 +245,7 @@ export function generateHelp(schema, topic) {
|
|
|
204
245
|
}
|
|
205
246
|
// Filter by topic if provided
|
|
206
247
|
if (topic) {
|
|
207
|
-
return entries.filter((e) => e.discriminator === topic || e.discriminator.startsWith(topic
|
|
248
|
+
return entries.filter((e) => e.discriminator === topic || e.discriminator.startsWith(`${topic}:`));
|
|
208
249
|
}
|
|
209
250
|
return entries;
|
|
210
251
|
}
|
|
@@ -252,7 +293,7 @@ export function formatHelpJson(entries) {
|
|
|
252
293
|
const jsonEntries = entries.map((entry) => ({
|
|
253
294
|
action: entry.discriminator,
|
|
254
295
|
description: entry.description,
|
|
255
|
-
parameters: entry.parameters
|
|
296
|
+
parameters: entry.parameters,
|
|
256
297
|
}));
|
|
257
298
|
return JSON.stringify(jsonEntries, null, 2);
|
|
258
299
|
}
|
package/dist/utils/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA4CH
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { HostConfig } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Determine if a host should use local command execution instead of SSH.
|
|
4
|
+
*
|
|
5
|
+
* A host is considered local if:
|
|
6
|
+
* - Host is localhost/127.x.x.x/::1/0.0.0.0 AND no SSH user is specified
|
|
7
|
+
* - Protocol is SSH (http/https are Docker API only, not for command execution)
|
|
8
|
+
*
|
|
9
|
+
* Note: Even localhost with sshUser means we need to SSH as that user,
|
|
10
|
+
* so it's treated as remote for command execution purposes.
|
|
11
|
+
*
|
|
12
|
+
* @param host - Host configuration to check
|
|
13
|
+
* @returns True if commands should run locally, false if SSH is required
|
|
14
|
+
*/
|
|
15
|
+
export declare function isLocalHost(host: HostConfig): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Narrow a multi-host array to a single default host when no explicit host was requested.
|
|
18
|
+
*
|
|
19
|
+
* Prevents unbounded fan-out across all configured hosts on read operations.
|
|
20
|
+
* Resolution order:
|
|
21
|
+
* 1. SYNAPSE_DEFAULT_HOST env var
|
|
22
|
+
* 2. First host with a local Docker socket path
|
|
23
|
+
* 3. Fall through to original array (no narrowing possible)
|
|
24
|
+
*
|
|
25
|
+
* When hosts.length <= 1, returns the array unchanged (already targeted).
|
|
26
|
+
*
|
|
27
|
+
* @param hosts - Array of host configurations
|
|
28
|
+
* @returns Narrowed array (single host) or original array if no default found
|
|
29
|
+
*/
|
|
30
|
+
export declare function narrowToDefaultHost(hosts: HostConfig[]): HostConfig[];
|
|
31
|
+
//# sourceMappingURL=host-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-utils.d.ts","sourceRoot":"","sources":["../../src/utils/host-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAmCrD;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAkBrE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determine if a host should use local command execution instead of SSH.
|
|
3
|
+
*
|
|
4
|
+
* A host is considered local if:
|
|
5
|
+
* - Host is localhost/127.x.x.x/::1/0.0.0.0 AND no SSH user is specified
|
|
6
|
+
* - Protocol is SSH (http/https are Docker API only, not for command execution)
|
|
7
|
+
*
|
|
8
|
+
* Note: Even localhost with sshUser means we need to SSH as that user,
|
|
9
|
+
* so it's treated as remote for command execution purposes.
|
|
10
|
+
*
|
|
11
|
+
* @param host - Host configuration to check
|
|
12
|
+
* @returns True if commands should run locally, false if SSH is required
|
|
13
|
+
*/
|
|
14
|
+
export function isLocalHost(host) {
|
|
15
|
+
// Docker API protocols (http/https) don't support local command execution
|
|
16
|
+
if (host.protocol === "http" || host.protocol === "https") {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
// If SSH user is specified, we need SSH even for localhost
|
|
20
|
+
if (host.sshUser) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
// Check if hostname is a loopback address
|
|
24
|
+
const hostname = host.host.toLowerCase();
|
|
25
|
+
// Check for localhost
|
|
26
|
+
if (hostname === "localhost") {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
// Check for IPv4 loopback (127.0.0.0/8)
|
|
30
|
+
if (hostname.startsWith("127.")) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
// Check for IPv6 loopback
|
|
34
|
+
if (hostname === "::1") {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
// Check for 0.0.0.0 (all interfaces - treated as local)
|
|
38
|
+
if (hostname === "0.0.0.0") {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find a host with a local Docker socket path.
|
|
45
|
+
* Used as a fallback when no specific host is requested.
|
|
46
|
+
*/
|
|
47
|
+
function findLocalSocketHost(hosts) {
|
|
48
|
+
return hosts.find((host) => Boolean(host.dockerSocketPath) || host.host.startsWith("/"));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Narrow a multi-host array to a single default host when no explicit host was requested.
|
|
52
|
+
*
|
|
53
|
+
* Prevents unbounded fan-out across all configured hosts on read operations.
|
|
54
|
+
* Resolution order:
|
|
55
|
+
* 1. SYNAPSE_DEFAULT_HOST env var
|
|
56
|
+
* 2. First host with a local Docker socket path
|
|
57
|
+
* 3. Fall through to original array (no narrowing possible)
|
|
58
|
+
*
|
|
59
|
+
* When hosts.length <= 1, returns the array unchanged (already targeted).
|
|
60
|
+
*
|
|
61
|
+
* @param hosts - Array of host configurations
|
|
62
|
+
* @returns Narrowed array (single host) or original array if no default found
|
|
63
|
+
*/
|
|
64
|
+
export function narrowToDefaultHost(hosts) {
|
|
65
|
+
if (hosts.length <= 1)
|
|
66
|
+
return hosts;
|
|
67
|
+
const rawDefaultHost = process.env.SYNAPSE_DEFAULT_HOST?.trim();
|
|
68
|
+
const defaultHost = rawDefaultHost && rawDefaultHost !== "undefined" && rawDefaultHost !== "null"
|
|
69
|
+
? rawDefaultHost
|
|
70
|
+
: undefined;
|
|
71
|
+
const localSocketHost = findLocalSocketHost(hosts);
|
|
72
|
+
const targetName = defaultHost ?? localSocketHost?.name;
|
|
73
|
+
if (!targetName)
|
|
74
|
+
return hosts;
|
|
75
|
+
const matched = hosts.find((h) => h.name === targetName);
|
|
76
|
+
if (!matched)
|
|
77
|
+
return hosts;
|
|
78
|
+
return [matched];
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=host-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-utils.js","sourceRoot":"","sources":["../../src/utils/host-utils.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,0EAA0E;IAC1E,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2DAA2D;IAC3D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAEzC,sBAAsB;IACtB,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0BAA0B;IAC1B,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wDAAwD;IACxD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAmB;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAChE,MAAM,WAAW,GACf,cAAc,IAAI,cAAc,KAAK,WAAW,IAAI,cAAc,KAAK,MAAM;QAC3E,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,WAAW,IAAI,eAAe,EAAE,IAAI,CAAC;IAExD,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAE9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,OAAO,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
export { validateSecurePath, HostSecurityError, validateHostFormat, escapeShellArg, isSystemPath } from "./path-security.js";
|
|
2
|
-
export { generateHelp, formatHelpMarkdown, formatHelpJson } from "./help.js";
|
|
3
1
|
export type { HelpEntry, HelpJsonEntry } from "./help.js";
|
|
2
|
+
export { formatHelpJson, formatHelpMarkdown, generateHelp } from "./help.js";
|
|
3
|
+
export { type HelpInput, handleHelpAction } from "./help-handler.js";
|
|
4
|
+
export { isLocalHost } from "./host-utils.js";
|
|
5
|
+
export { applyPagination } from "./pagination.js";
|
|
6
|
+
export { escapeShellArg, HostSecurityError, isSystemPath, SSHArgSecurityError, SYSTEMD_SERVICE_NAME_PATTERN, validateHostname, validateSecurePath, validateSSHArg, validateSystemdServiceName, } from "./path-security.js";
|
|
7
|
+
export { COMPOSE_PROJECT_SEVERITY, COMPOSE_SERVICE_SEVERITY, CONTAINER_SEVERITY, sortBySeverity, } from "./sorting.js";
|
|
8
|
+
export { getCurrentTimestamp } from "./time.js";
|
|
9
|
+
export { validateAlphanumeric, validateServiceName } from "./validation.js";
|
|
4
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,KAAK,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
// Explicit named exports for better IDE support and tree-shaking
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
2
|
+
export { formatHelpJson, formatHelpMarkdown, generateHelp } from "./help.js";
|
|
3
|
+
export { handleHelpAction } from "./help-handler.js";
|
|
4
|
+
export { isLocalHost } from "./host-utils.js";
|
|
5
|
+
export { applyPagination } from "./pagination.js";
|
|
6
|
+
export { escapeShellArg, HostSecurityError, isSystemPath, SSHArgSecurityError, SYSTEMD_SERVICE_NAME_PATTERN, validateHostname, validateSecurePath, validateSSHArg, validateSystemdServiceName, } from "./path-security.js";
|
|
7
|
+
export { COMPOSE_PROJECT_SEVERITY, COMPOSE_SERVICE_SEVERITY, CONTAINER_SEVERITY, sortBySeverity, } from "./sorting.js";
|
|
8
|
+
export { getCurrentTimestamp } from "./time.js";
|
|
9
|
+
export { validateAlphanumeric, validateServiceName } from "./validation.js";
|
|
4
10
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAGjE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAkB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|