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
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// src/tools/handlers/host.ts
|
|
2
|
+
import { formatHostResourcesMarkdown, formatHostStatusMarkdown } from "../../formatters/index.js";
|
|
3
|
+
import { logError } from "../../utils/errors.js";
|
|
4
|
+
import { escapeShellArg, isLocalHost, validateSSHArg, validateSystemdServiceName, } from "../../utils/index.js";
|
|
5
|
+
import { createExhaustiveError, formatResponse, getHostConfigOptional, initializeHandler, resolveTargetHosts, } from "./base-handler.js";
|
|
6
|
+
/**
|
|
7
|
+
* Execute command on local or remote host based on configuration.
|
|
8
|
+
*
|
|
9
|
+
* Routes to LocalExecutor for localhost detection, SSH for remote hosts.
|
|
10
|
+
* Provides unified interface for command execution across host types.
|
|
11
|
+
*
|
|
12
|
+
* @param host - Host configuration specifying target
|
|
13
|
+
* @param command - Command name to execute
|
|
14
|
+
* @param args - Command arguments (pre-validated)
|
|
15
|
+
* @param container - Service container for executor access
|
|
16
|
+
* @returns Command stdout output
|
|
17
|
+
* @throws {Error} When command execution fails
|
|
18
|
+
*/
|
|
19
|
+
async function executeCommand(host, command, args, container) {
|
|
20
|
+
if (isLocalHost(host)) {
|
|
21
|
+
const localExecutor = container.getLocalExecutor();
|
|
22
|
+
return await localExecutor.executeLocalCommand(command, args);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const sshService = container.getSSHService();
|
|
26
|
+
return await sshService.executeSSHCommand(host, command, args);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Handle all host subactions for system-level operations.
|
|
31
|
+
*
|
|
32
|
+
* Supports 7 subactions: status, resources, info, uptime, services, network, mounts.
|
|
33
|
+
* Can query all hosts (status, resources) or require specific host (others).
|
|
34
|
+
*
|
|
35
|
+
* @param input - Validated Flux input with host action
|
|
36
|
+
* @param container - Service container with SSH and Docker services
|
|
37
|
+
* @returns Formatted response string (markdown or JSON)
|
|
38
|
+
* @throws {Error} When host not found or command fails
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const result = await handleHostAction(
|
|
43
|
+
* { action: 'host', subaction: 'status' },
|
|
44
|
+
* container
|
|
45
|
+
* );
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export async function handleHostAction(input, container) {
|
|
49
|
+
const validated = input;
|
|
50
|
+
const hostName = validated.host;
|
|
51
|
+
const { service: dockerService, hosts, format, } = await initializeHandler(validated, container, (c) => c.getDockerService());
|
|
52
|
+
const sshService = container.getSSHService();
|
|
53
|
+
// Find the target host (can query all hosts if not specified for some actions)
|
|
54
|
+
const hostConfig = getHostConfigOptional(hosts, hostName);
|
|
55
|
+
// For most operations, require the host
|
|
56
|
+
if (hostName && !hostConfig) {
|
|
57
|
+
throw new Error(`Host not found: ${hostName}`);
|
|
58
|
+
}
|
|
59
|
+
switch (validated.subaction) {
|
|
60
|
+
case "status": {
|
|
61
|
+
// For status, we can check all hosts or specific host
|
|
62
|
+
const targetHosts = resolveTargetHosts(hosts, hostName);
|
|
63
|
+
const statusResults = await Promise.all(targetHosts.map(async (h) => {
|
|
64
|
+
try {
|
|
65
|
+
const info = await dockerService.getDockerInfo(h);
|
|
66
|
+
const containers = await dockerService.listContainers([h]);
|
|
67
|
+
const runningCount = containers.filter((c) => c.state === "running").length;
|
|
68
|
+
return {
|
|
69
|
+
name: h.name,
|
|
70
|
+
connected: true,
|
|
71
|
+
containerCount: containers.length,
|
|
72
|
+
runningCount,
|
|
73
|
+
dockerVersion: info.dockerVersion,
|
|
74
|
+
error: undefined,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
logError(err, {
|
|
79
|
+
operation: "handleHostAction:status",
|
|
80
|
+
metadata: { host: h.name, action: "status" },
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
name: h.name,
|
|
84
|
+
connected: false,
|
|
85
|
+
containerCount: 0,
|
|
86
|
+
runningCount: 0,
|
|
87
|
+
dockerVersion: undefined,
|
|
88
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
return formatResponse(hostConfig ? statusResults[0] : statusResults, format, () => formatHostStatusMarkdown(statusResults));
|
|
93
|
+
}
|
|
94
|
+
case "resources": {
|
|
95
|
+
// Resources requires SSH, must have a specific host
|
|
96
|
+
const targetHosts = resolveTargetHosts(hosts, hostName);
|
|
97
|
+
const resourceResults = await Promise.all(targetHosts.map(async (h) => {
|
|
98
|
+
try {
|
|
99
|
+
const resources = await sshService.getHostResources(h);
|
|
100
|
+
return { host: h.name, resources, error: undefined };
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
logError(err, {
|
|
104
|
+
operation: "handleHostAction:resources",
|
|
105
|
+
metadata: { host: h.name, action: "resources" },
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
host: h.name,
|
|
109
|
+
resources: null,
|
|
110
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}));
|
|
114
|
+
return formatResponse(hostConfig ? resourceResults[0] : resourceResults, format, () => formatHostResourcesMarkdown(resourceResults));
|
|
115
|
+
}
|
|
116
|
+
case "info": {
|
|
117
|
+
if (!hostConfig) {
|
|
118
|
+
throw new Error("Host is required for host:info");
|
|
119
|
+
}
|
|
120
|
+
const output = await executeCommand(hostConfig, "uname", ["-a"], container);
|
|
121
|
+
const infoResult = { host: hostConfig.name, info: output.trim() };
|
|
122
|
+
return formatResponse(infoResult, format, (data) => `## System Info - ${data.host}\n\n\`\`\`\n${data.info}\n\`\`\``);
|
|
123
|
+
}
|
|
124
|
+
case "uptime": {
|
|
125
|
+
if (!hostConfig) {
|
|
126
|
+
throw new Error("Host is required for host:uptime");
|
|
127
|
+
}
|
|
128
|
+
const output = await executeCommand(hostConfig, "uptime", [], container);
|
|
129
|
+
const uptimeResult = { host: hostConfig.name, uptime: output.trim() };
|
|
130
|
+
return formatResponse(uptimeResult, format, (data) => `## Uptime - ${data.host}\n\n\`\`\`\n${data.uptime}\n\`\`\``);
|
|
131
|
+
}
|
|
132
|
+
case "services": {
|
|
133
|
+
if (!hostConfig) {
|
|
134
|
+
throw new Error("Host is required for host:services");
|
|
135
|
+
}
|
|
136
|
+
// Use validated properties directly
|
|
137
|
+
const state = validated.subaction === "services" ? validated.state : undefined;
|
|
138
|
+
const service = validated.subaction === "services" ? validated.service : undefined;
|
|
139
|
+
// SECURITY: Defense-in-depth validation to prevent command injection
|
|
140
|
+
// The SSH service joins args with spaces and executes as shell command,
|
|
141
|
+
// so we must reject shell metacharacters like ; | & ` $ etc.
|
|
142
|
+
// Note: Schema already validates state enum, this is defense-in-depth
|
|
143
|
+
if (state && state !== "all") {
|
|
144
|
+
validateSSHArg(state, "state");
|
|
145
|
+
}
|
|
146
|
+
// Note: Schema already validates service name pattern, this is defense-in-depth
|
|
147
|
+
if (service) {
|
|
148
|
+
validateSystemdServiceName(service);
|
|
149
|
+
}
|
|
150
|
+
// Build systemctl command based on options
|
|
151
|
+
const args = ["list-units", "--type=service", "--no-pager"];
|
|
152
|
+
if (state && state !== "all") {
|
|
153
|
+
const safeState = escapeShellArg(state);
|
|
154
|
+
args.push(`--state=${safeState}`);
|
|
155
|
+
}
|
|
156
|
+
if (service) {
|
|
157
|
+
const safeService = escapeShellArg(service);
|
|
158
|
+
args.push(safeService);
|
|
159
|
+
}
|
|
160
|
+
const output = await executeCommand(hostConfig, "systemctl", args, container);
|
|
161
|
+
const servicesResult = { host: hostConfig.name, services: output.trim() };
|
|
162
|
+
return formatResponse(servicesResult, format, (data) => `## Systemd Services - ${data.host}\n\n\`\`\`\n${data.services}\n\`\`\``);
|
|
163
|
+
}
|
|
164
|
+
case "network": {
|
|
165
|
+
if (!hostConfig) {
|
|
166
|
+
throw new Error("Host is required for host:network");
|
|
167
|
+
}
|
|
168
|
+
// Use ip addr or ifconfig
|
|
169
|
+
let output;
|
|
170
|
+
try {
|
|
171
|
+
output = await executeCommand(hostConfig, "ip", ["addr", "show"], container);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
// Fallback to ifconfig if ip command not available
|
|
175
|
+
logError(error, {
|
|
176
|
+
operation: "host:network",
|
|
177
|
+
metadata: { host: hostConfig.name, fallback: "ifconfig" },
|
|
178
|
+
});
|
|
179
|
+
output = await executeCommand(hostConfig, "ifconfig", ["-a"], container);
|
|
180
|
+
}
|
|
181
|
+
const networkResult = { host: hostConfig.name, network: output.trim() };
|
|
182
|
+
return formatResponse(networkResult, format, (data) => `## Network Interfaces - ${data.host}\n\n\`\`\`\n${data.network}\n\`\`\``);
|
|
183
|
+
}
|
|
184
|
+
case "mounts": {
|
|
185
|
+
if (!hostConfig) {
|
|
186
|
+
throw new Error("Host is required for host:mounts");
|
|
187
|
+
}
|
|
188
|
+
const output = await executeCommand(hostConfig, "df", ["-h"], container);
|
|
189
|
+
const mountsResult = { host: hostConfig.name, mounts: output.trim() };
|
|
190
|
+
return formatResponse(mountsResult, format, (data) => `## Mounted Filesystems - ${data.host}\n\n\`\`\`\n${data.mounts}\n\`\`\``);
|
|
191
|
+
}
|
|
192
|
+
default:
|
|
193
|
+
throw createExhaustiveError(validated, "host subaction");
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/tools/handlers/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ScoutInput } from "../../schemas/scout/index.js";
|
|
2
|
+
import type { ServiceContainer } from "../../services/container.js";
|
|
3
|
+
/**
|
|
4
|
+
* Handle all logs subactions for system log retrieval.
|
|
5
|
+
*
|
|
6
|
+
* Supports 4 subactions: syslog, journal, dmesg, auth.
|
|
7
|
+
* Implements defense-in-depth security: grep filtering is performed locally
|
|
8
|
+
* after command execution to prevent command injection.
|
|
9
|
+
*
|
|
10
|
+
* @param input - Validated Scout input with logs action
|
|
11
|
+
* @param container - Service container with SSH service
|
|
12
|
+
* @returns Formatted response string (markdown or JSON)
|
|
13
|
+
* @throws {Error} When host not found or log retrieval fails
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const result = await handleLogsAction(
|
|
18
|
+
* { action: 'logs', subaction: 'journal', host: 'host1', lines: 100 },
|
|
19
|
+
* container
|
|
20
|
+
* );
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function handleLogsAction(input: ScoutInput, container: ServiceContainer): Promise<string>;
|
|
24
|
+
//# sourceMappingURL=scout-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scout-logs.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/scout-logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAUpE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAuIjB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { scoutLogsSchema } from "../../schemas/scout/logs.js";
|
|
2
|
+
import { applyGrepFilter } from "../../utils/text-filters.js";
|
|
3
|
+
import { createExhaustiveError, formatResponse, getHostConfigOrThrow, initializeHandler, validateInput, } from "./base-handler.js";
|
|
4
|
+
/**
|
|
5
|
+
* Handle all logs subactions for system log retrieval.
|
|
6
|
+
*
|
|
7
|
+
* Supports 4 subactions: syslog, journal, dmesg, auth.
|
|
8
|
+
* Implements defense-in-depth security: grep filtering is performed locally
|
|
9
|
+
* after command execution to prevent command injection.
|
|
10
|
+
*
|
|
11
|
+
* @param input - Validated Scout input with logs action
|
|
12
|
+
* @param container - Service container with SSH service
|
|
13
|
+
* @returns Formatted response string (markdown or JSON)
|
|
14
|
+
* @throws {Error} When host not found or log retrieval fails
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const result = await handleLogsAction(
|
|
19
|
+
* { action: 'logs', subaction: 'journal', host: 'host1', lines: 100 },
|
|
20
|
+
* container
|
|
21
|
+
* );
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export async function handleLogsAction(input, container) {
|
|
25
|
+
if (input.action !== "logs") {
|
|
26
|
+
throw new Error(`Invalid action for logs handler: ${input.action}`);
|
|
27
|
+
}
|
|
28
|
+
// Validate and parse with the specific logs schema
|
|
29
|
+
const validatedInput = validateInput(input, scoutLogsSchema, "scout-logs");
|
|
30
|
+
const { hosts, format } = await initializeHandler(validatedInput, container, (c) => c.getSSHService());
|
|
31
|
+
const sshService = container.getSSHService();
|
|
32
|
+
// Find the target host
|
|
33
|
+
const hostConfig = getHostConfigOrThrow(hosts, validatedInput.host);
|
|
34
|
+
const lines = validatedInput.lines;
|
|
35
|
+
const grep = validatedInput.grep;
|
|
36
|
+
switch (validatedInput.subaction) {
|
|
37
|
+
case "syslog": {
|
|
38
|
+
const args = ["-n", String(lines), "/var/log/syslog"];
|
|
39
|
+
const command = "tail";
|
|
40
|
+
let output = await sshService.executeSSHCommand(hostConfig, command, args);
|
|
41
|
+
// Apply grep filter locally if specified (immune to command injection)
|
|
42
|
+
output = applyGrepFilter(output, grep);
|
|
43
|
+
return formatResponse({
|
|
44
|
+
host: hostConfig.name,
|
|
45
|
+
subaction: "syslog",
|
|
46
|
+
lines,
|
|
47
|
+
grep,
|
|
48
|
+
output: output.trim(),
|
|
49
|
+
}, format, () => output.trim());
|
|
50
|
+
}
|
|
51
|
+
case "journal": {
|
|
52
|
+
const args = ["-n", String(lines), "--no-pager"];
|
|
53
|
+
// Add unit filter
|
|
54
|
+
if (validatedInput.unit) {
|
|
55
|
+
args.push("-u", validatedInput.unit);
|
|
56
|
+
}
|
|
57
|
+
// Add time range filters
|
|
58
|
+
if (validatedInput.since) {
|
|
59
|
+
args.push("--since", validatedInput.since);
|
|
60
|
+
}
|
|
61
|
+
if (validatedInput.until) {
|
|
62
|
+
args.push("--until", validatedInput.until);
|
|
63
|
+
}
|
|
64
|
+
// Add priority filter
|
|
65
|
+
if (validatedInput.priority) {
|
|
66
|
+
args.push("-p", validatedInput.priority);
|
|
67
|
+
}
|
|
68
|
+
let output = await sshService.executeSSHCommand(hostConfig, "journalctl", args);
|
|
69
|
+
// Apply local grep filtering if provided
|
|
70
|
+
output = applyGrepFilter(output, grep);
|
|
71
|
+
return formatResponse({
|
|
72
|
+
host: hostConfig.name,
|
|
73
|
+
subaction: "journal",
|
|
74
|
+
lines,
|
|
75
|
+
unit: validatedInput.unit,
|
|
76
|
+
since: validatedInput.since,
|
|
77
|
+
until: validatedInput.until,
|
|
78
|
+
priority: validatedInput.priority,
|
|
79
|
+
grep,
|
|
80
|
+
output: output.trim(),
|
|
81
|
+
}, format, () => output.trim());
|
|
82
|
+
}
|
|
83
|
+
case "dmesg": {
|
|
84
|
+
// Execute dmesg with args, pipe output to tail
|
|
85
|
+
const dmesgOutput = await sshService.executeSSHCommand(hostConfig, "dmesg", [
|
|
86
|
+
"--color=never",
|
|
87
|
+
]);
|
|
88
|
+
// Apply grep filter locally if specified (immune to command injection)
|
|
89
|
+
const filteredOutput = applyGrepFilter(dmesgOutput, grep);
|
|
90
|
+
// Apply tail locally (limit lines)
|
|
91
|
+
const outputLines = filteredOutput.trim().split("\n");
|
|
92
|
+
const output = outputLines.slice(-lines).join("\n");
|
|
93
|
+
return formatResponse({
|
|
94
|
+
host: hostConfig.name,
|
|
95
|
+
subaction: "dmesg",
|
|
96
|
+
lines,
|
|
97
|
+
grep,
|
|
98
|
+
output: output.trim(),
|
|
99
|
+
}, format, () => output.trim());
|
|
100
|
+
}
|
|
101
|
+
case "auth": {
|
|
102
|
+
const args = ["-n", String(lines), "/var/log/auth.log"];
|
|
103
|
+
const command = "tail";
|
|
104
|
+
let output = await sshService.executeSSHCommand(hostConfig, command, args);
|
|
105
|
+
// Apply grep filter locally if specified (immune to command injection)
|
|
106
|
+
output = applyGrepFilter(output, grep);
|
|
107
|
+
return formatResponse({
|
|
108
|
+
host: hostConfig.name,
|
|
109
|
+
subaction: "auth",
|
|
110
|
+
lines,
|
|
111
|
+
grep,
|
|
112
|
+
output: output.trim(),
|
|
113
|
+
}, format, () => output.trim());
|
|
114
|
+
}
|
|
115
|
+
default:
|
|
116
|
+
throw createExhaustiveError(validatedInput, "scout-logs subaction");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=scout-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scout-logs.js","sourceRoot":"","sources":["../../../src/tools/handlers/scout-logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ScoutInput } from "../../schemas/scout/index.js";
|
|
2
|
+
import type { ServiceContainer } from "../../services/container.js";
|
|
3
|
+
/**
|
|
4
|
+
* Handle all Scout simple actions for SSH file and process operations.
|
|
5
|
+
*
|
|
6
|
+
* Supports 9 actions: nodes, peek, exec, find, delta, emit, beam, ps, df.
|
|
7
|
+
* These actions operate directly without subactions.
|
|
8
|
+
*
|
|
9
|
+
* @param input - Validated Scout input with simple action
|
|
10
|
+
* @param container - Service container with SSH and file services
|
|
11
|
+
* @returns Formatted response string (markdown or JSON)
|
|
12
|
+
* @throws {Error} When host not found, target invalid, or operation fails
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const result = await handleScoutSimpleAction(
|
|
17
|
+
* { action: 'peek', target: 'host1:/etc/hosts' },
|
|
18
|
+
* container
|
|
19
|
+
* );
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleScoutSimpleAction(input: ScoutInput, container: ServiceContainer): Promise<string>;
|
|
23
|
+
//# sourceMappingURL=scout-simple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scout-simple.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/scout-simple.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAsCpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAqUjB"}
|