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,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent markdown formatting for container operations:
|
|
5
|
+
* listing, logs, stats, inspection, and search.
|
|
6
|
+
*/
|
|
7
|
+
import { formatBytes } from "../services/docker/utils/formatters.js";
|
|
8
|
+
import { CONTAINER_SEVERITY, sortBySeverity } from "../utils/sorting.js";
|
|
9
|
+
import { getTimestamp } from "./utils.js";
|
|
10
|
+
/**
|
|
11
|
+
* Get canonical state symbol for container status
|
|
12
|
+
* STYLE.md Section 4.1: Status and State symbols
|
|
13
|
+
*/
|
|
14
|
+
function getContainerStatusSymbol(state) {
|
|
15
|
+
if (state === "running")
|
|
16
|
+
return "●"; // running/active
|
|
17
|
+
if (state === "paused" || state === "restarting")
|
|
18
|
+
return "◐"; // degraded/transitioning
|
|
19
|
+
return "○"; // stopped/exited/dead
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Format container list as markdown following STYLE.md section 7.3
|
|
23
|
+
*/
|
|
24
|
+
export function formatContainersMarkdown(containers, total, offset, hasMore, filters) {
|
|
25
|
+
if (containers.length === 0) {
|
|
26
|
+
return "No containers found matching the specified criteria.";
|
|
27
|
+
}
|
|
28
|
+
// Title - STYLE.md Section 3.1 (plain text, no markdown ##)
|
|
29
|
+
const title = "Docker Containers";
|
|
30
|
+
// Summary - STYLE.md Section 3.2
|
|
31
|
+
const summary = `Showing ${containers.length} of ${total} containers`;
|
|
32
|
+
// Request Echo - STYLE.md Section 3.5 (filters affect output)
|
|
33
|
+
const filterLine = filters
|
|
34
|
+
? `Filters: ${Object.entries(filters)
|
|
35
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
36
|
+
.join(", ")}`
|
|
37
|
+
: "";
|
|
38
|
+
// Legend - STYLE.md Section 3.3 (for mixed states)
|
|
39
|
+
const states = new Set(containers.map((c) => c.state));
|
|
40
|
+
const hasMultipleStates = states.size > 1;
|
|
41
|
+
const legend = hasMultipleStates ? "Legend: ● running ◐ restarting ○ stopped" : "";
|
|
42
|
+
const lines = [title, summary];
|
|
43
|
+
if (filterLine)
|
|
44
|
+
lines.push(filterLine);
|
|
45
|
+
if (legend)
|
|
46
|
+
lines.push(legend);
|
|
47
|
+
lines.push(""); // blank line before table
|
|
48
|
+
// Table header - STYLE.md Section 5.1
|
|
49
|
+
lines.push(" Container Host Ports Project");
|
|
50
|
+
lines.push(" ------------------------- ---------------- ------------------- ---------------");
|
|
51
|
+
// Sort by severity - STYLE.md Section 12
|
|
52
|
+
// Note: Handler also sorts before pagination to ensure critical containers appear on page 1
|
|
53
|
+
// This defensive sort ensures correct order even if formatter is called with unsorted data
|
|
54
|
+
const sorted = sortBySeverity(containers, (c) => c.state, CONTAINER_SEVERITY, (c) => c.name);
|
|
55
|
+
for (const c of sorted) {
|
|
56
|
+
const symbol = getContainerStatusSymbol(c.state);
|
|
57
|
+
// Format ports: show first 3 host ports then +N notation
|
|
58
|
+
const ports = c.ports.filter((p) => p.hostPort).map((p) => p.hostPort.toString());
|
|
59
|
+
const portsDisplay = ports.length === 0
|
|
60
|
+
? "—"
|
|
61
|
+
: ports.length <= 3
|
|
62
|
+
? ports.join(",")
|
|
63
|
+
: `${ports.slice(0, 3).join(",")}+${ports.length - 3}`;
|
|
64
|
+
// Extract project from labels (com.docker.compose.project)
|
|
65
|
+
const project = c.labels["com.docker.compose.project"] || "—";
|
|
66
|
+
// Format row with aligned columns
|
|
67
|
+
const nameCol = c.name.length > 25 ? `${c.name.slice(0, 24)}…` : c.name.padEnd(25);
|
|
68
|
+
const hostDisplay = c.hostName || "—";
|
|
69
|
+
const hostCol = hostDisplay.length > 16 ? `${hostDisplay.slice(0, 15)}…` : hostDisplay.padEnd(16);
|
|
70
|
+
const portsCol = portsDisplay.length > 19 ? `${portsDisplay.slice(0, 18)}…` : portsDisplay.padEnd(19);
|
|
71
|
+
const projectCol = project.length > 15 ? `${project.slice(0, 14)}…` : project;
|
|
72
|
+
lines.push(`${symbol} ${nameCol} ${hostCol} ${portsCol} ${projectCol}`);
|
|
73
|
+
}
|
|
74
|
+
// Pagination footer - STYLE.md Section 12
|
|
75
|
+
if (hasMore) {
|
|
76
|
+
lines.push("");
|
|
77
|
+
lines.push(`Showing ${offset + 1}–${offset + containers.length} of ${total} | next_offset: ${offset + containers.length}`);
|
|
78
|
+
}
|
|
79
|
+
return lines.join("\n");
|
|
80
|
+
}
|
|
81
|
+
/** Preview threshold for log output - show preview format when exceeding this */
|
|
82
|
+
const PREVIEW_THRESHOLD = 10;
|
|
83
|
+
/**
|
|
84
|
+
* Format container logs as markdown following STYLE.md section 7.5
|
|
85
|
+
*
|
|
86
|
+
* Uses preview format (first 5 + last 5) for outputs >10 lines
|
|
87
|
+
*/
|
|
88
|
+
export function formatLogsMarkdown(logs, container, host, requested, truncated, follow) {
|
|
89
|
+
if (logs.length === 0) {
|
|
90
|
+
return `No logs found for container '${container}' on ${host}.`;
|
|
91
|
+
}
|
|
92
|
+
// Title - STYLE.md Section 3.1 (plain text, no markdown ##)
|
|
93
|
+
const title = `Container Logs for ${container} on ${host}`;
|
|
94
|
+
// Summary - STYLE.md Section 3.2
|
|
95
|
+
const summary = [
|
|
96
|
+
`Lines returned: ${logs.length} (requested: ${requested})`,
|
|
97
|
+
`truncated: ${truncated ? "yes" : "no"}`,
|
|
98
|
+
`follow: ${follow ? "yes" : "no"}`,
|
|
99
|
+
].join(" | ");
|
|
100
|
+
// STYLE.md Section 3.6: Freshness timestamp for volatile data (logs)
|
|
101
|
+
const timestamp = getTimestamp();
|
|
102
|
+
const formatLogLine = (log) => ` [${log.stream}] ${log.message}`;
|
|
103
|
+
let logOutput;
|
|
104
|
+
if (logs.length <= PREVIEW_THRESHOLD) {
|
|
105
|
+
// Show all lines
|
|
106
|
+
logOutput = logs.map(formatLogLine).join("\n");
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// Preview format per STYLE.md 7.5
|
|
110
|
+
const first5 = logs.slice(0, 5).map(formatLogLine).join("\n");
|
|
111
|
+
const last5 = logs.slice(-5).map(formatLogLine).join("\n");
|
|
112
|
+
logOutput = `Preview (first 5):\n${first5}\n ...\n\nPreview (last 5):\n${last5}\n ...`;
|
|
113
|
+
}
|
|
114
|
+
return `${title}\n${summary}\n${timestamp}\n\n${logOutput}`;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Format single container stats as markdown following STYLE.md
|
|
118
|
+
*/
|
|
119
|
+
export function formatStatsMarkdown(stats, host) {
|
|
120
|
+
if (stats.length === 0)
|
|
121
|
+
return "No stats available.";
|
|
122
|
+
const s = stats[0];
|
|
123
|
+
// STYLE.md Section 3.6: Freshness timestamp for volatile data (stats)
|
|
124
|
+
const timestamp = getTimestamp();
|
|
125
|
+
// STYLE.md 10.2: Warning thresholds for CPU>90%, MEM>90%
|
|
126
|
+
const cpuWarning = s.cpuPercent > 90 ? " ⚠" : "";
|
|
127
|
+
const memWarning = s.memoryPercent > 90 ? " ⚠" : "";
|
|
128
|
+
// STYLE.md 3.1: Plain text title (no markdown ##)
|
|
129
|
+
return `Stats: ${s.containerName} (${host})
|
|
130
|
+
${timestamp}
|
|
131
|
+
|
|
132
|
+
| Metric | Value |
|
|
133
|
+
|--------|-------|
|
|
134
|
+
| CPU | ${s.cpuPercent.toFixed(1)}%${cpuWarning} |
|
|
135
|
+
| Memory | ${formatBytes(s.memoryUsage)} / ${formatBytes(s.memoryLimit)} (${s.memoryPercent.toFixed(1)}%${memWarning}) |
|
|
136
|
+
| Network RX | ${formatBytes(s.networkRx)} |
|
|
137
|
+
| Network TX | ${formatBytes(s.networkTx)} |
|
|
138
|
+
| Block Read | ${formatBytes(s.blockRead)} |
|
|
139
|
+
| Block Write | ${formatBytes(s.blockWrite)} |`;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Format multiple container stats as markdown table
|
|
143
|
+
* STYLE.md Section 3.1: Plain text title
|
|
144
|
+
* STYLE.md Section 3.2: Summary with rollup counts
|
|
145
|
+
* STYLE.md Section 3.6: Freshness timestamp for volatile data
|
|
146
|
+
* STYLE.md Section 10.2: Warning thresholds (CPU>90%, MEM>90%)
|
|
147
|
+
* STYLE.md Section 12: Severity-first sorting
|
|
148
|
+
*/
|
|
149
|
+
export function formatMultiStatsMarkdown(allStats) {
|
|
150
|
+
if (allStats.length === 0)
|
|
151
|
+
return "No running containers found.";
|
|
152
|
+
// STYLE.md 3.1: Plain text title (no markdown ##)
|
|
153
|
+
const title = "Container Resource Usage";
|
|
154
|
+
// STYLE.md 3.2: Summary with container count
|
|
155
|
+
const summary = `Showing ${allStats.length} containers`;
|
|
156
|
+
// STYLE.md Section 3.6: Freshness timestamp for volatile data (stats)
|
|
157
|
+
const timestamp = getTimestamp();
|
|
158
|
+
// STYLE.md Section 12: Severity-first sorting (highest CPU/MEM first)
|
|
159
|
+
const sorted = [...allStats].sort((a, b) => {
|
|
160
|
+
// Sort by max(CPU%, MEM%) descending - highest resource usage first
|
|
161
|
+
const aMax = Math.max(a.stats.cpuPercent, a.stats.memoryPercent);
|
|
162
|
+
const bMax = Math.max(b.stats.cpuPercent, b.stats.memoryPercent);
|
|
163
|
+
return bMax - aMax;
|
|
164
|
+
});
|
|
165
|
+
const lines = [
|
|
166
|
+
title,
|
|
167
|
+
summary,
|
|
168
|
+
timestamp,
|
|
169
|
+
"",
|
|
170
|
+
"| Container | Host | CPU% | Memory | Mem% |",
|
|
171
|
+
"|-----------|------|------|--------|------|",
|
|
172
|
+
];
|
|
173
|
+
for (const { stats, host } of sorted) {
|
|
174
|
+
// STYLE.md 10.2: Warning thresholds
|
|
175
|
+
const cpuWarning = stats.cpuPercent > 90 ? " ⚠" : "";
|
|
176
|
+
const memWarning = stats.memoryPercent > 90 ? " ⚠" : "";
|
|
177
|
+
lines.push(`| ${stats.containerName} | ${host} | ${stats.cpuPercent.toFixed(1)}%${cpuWarning} | ${formatBytes(stats.memoryUsage)} | ${stats.memoryPercent.toFixed(1)}%${memWarning} |`);
|
|
178
|
+
}
|
|
179
|
+
return lines.join("\n");
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Format container inspection as markdown
|
|
183
|
+
* STYLE.md Section 3.1: Plain text title (no markdown ##/###)
|
|
184
|
+
* STYLE.md Section 4.1: Canonical → for port mapping
|
|
185
|
+
*/
|
|
186
|
+
export function formatInspectMarkdown(info, host) {
|
|
187
|
+
const config = info.Config;
|
|
188
|
+
const state = info.State;
|
|
189
|
+
const mounts = info.Mounts || [];
|
|
190
|
+
const network = info.NetworkSettings;
|
|
191
|
+
// STYLE.md 3.1: Plain text title (no markdown ##)
|
|
192
|
+
const lines = [
|
|
193
|
+
`Container: ${info.Name.replace(/^\//, "")} (${host})`,
|
|
194
|
+
"",
|
|
195
|
+
"**State**",
|
|
196
|
+
`- Status: ${state.Status}`,
|
|
197
|
+
`- Running: ${state.Running}`,
|
|
198
|
+
`- Started: ${state.StartedAt}`,
|
|
199
|
+
`- Restart Count: ${info.RestartCount}`,
|
|
200
|
+
"",
|
|
201
|
+
"**Configuration**",
|
|
202
|
+
`- Image: ${config.Image}`,
|
|
203
|
+
`- Command: ${(config.Cmd || []).join(" ")}`,
|
|
204
|
+
`- Working Dir: ${config.WorkingDir || "/"}`,
|
|
205
|
+
"",
|
|
206
|
+
];
|
|
207
|
+
if (config.Env && config.Env.length > 0) {
|
|
208
|
+
lines.push("**Environment Variables**");
|
|
209
|
+
for (const env of config.Env.slice(0, 20)) {
|
|
210
|
+
const [key] = env.split("=");
|
|
211
|
+
const isSensitive = /password|secret|key|token|api/i.test(key);
|
|
212
|
+
lines.push(`- ${isSensitive ? `${key}=****` : env}`);
|
|
213
|
+
}
|
|
214
|
+
if (config.Env.length > 20)
|
|
215
|
+
lines.push(`- ... and ${config.Env.length - 20} more`);
|
|
216
|
+
lines.push("");
|
|
217
|
+
}
|
|
218
|
+
if (mounts.length > 0) {
|
|
219
|
+
lines.push("**Mounts**");
|
|
220
|
+
for (const m of mounts) {
|
|
221
|
+
// STYLE.md 4.1: Canonical → for mapping notation
|
|
222
|
+
lines.push(`- ${m.Source} → ${m.Destination} (${m.Mode || "rw"})`);
|
|
223
|
+
}
|
|
224
|
+
lines.push("");
|
|
225
|
+
}
|
|
226
|
+
if (network.Ports) {
|
|
227
|
+
lines.push("**Ports**");
|
|
228
|
+
for (const [containerPort, bindings] of Object.entries(network.Ports)) {
|
|
229
|
+
if (bindings && bindings.length > 0) {
|
|
230
|
+
for (const b of bindings) {
|
|
231
|
+
// STYLE.md 4.1: Canonical → for port mapping
|
|
232
|
+
lines.push(`- ${b.HostIp || "0.0.0.0"}:${b.HostPort} → ${containerPort}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
lines.push("");
|
|
237
|
+
}
|
|
238
|
+
if (network.Networks && Object.keys(network.Networks).length > 0) {
|
|
239
|
+
lines.push("**Networks**");
|
|
240
|
+
for (const networkName of Object.keys(network.Networks)) {
|
|
241
|
+
lines.push(`- ${networkName}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return lines.join("\n");
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Format search results as markdown
|
|
248
|
+
*/
|
|
249
|
+
export function formatSearchResultsMarkdown(containers, query, total) {
|
|
250
|
+
if (containers.length === 0)
|
|
251
|
+
return `No containers found matching '${query}'.`;
|
|
252
|
+
const lines = [`## Search Results for '${query}' (${total} matches)`, ""];
|
|
253
|
+
for (const c of containers) {
|
|
254
|
+
const stateEmoji = c.state === "running" ? "🟢" : c.state === "paused" ? "🟡" : "🔴";
|
|
255
|
+
lines.push(`${stateEmoji} **${c.name}** (${c.hostName})`);
|
|
256
|
+
lines.push(` Image: ${c.image} | State: ${c.state}`);
|
|
257
|
+
lines.push("");
|
|
258
|
+
}
|
|
259
|
+
return lines.join("\n");
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Format container inspect summary as markdown (condensed version)
|
|
263
|
+
*/
|
|
264
|
+
export function formatInspectSummaryMarkdown(summary) {
|
|
265
|
+
const lines = [
|
|
266
|
+
`## ${summary.name} (${summary.host})`,
|
|
267
|
+
"",
|
|
268
|
+
"| Field | Value |",
|
|
269
|
+
"|-------|-------|",
|
|
270
|
+
`| ID | ${summary.id} |`,
|
|
271
|
+
`| Image | ${summary.image} |`,
|
|
272
|
+
`| State | ${summary.state} |`,
|
|
273
|
+
`| Started | ${summary.started?.slice(0, 19) || "-"} |`,
|
|
274
|
+
`| Restarts | ${summary.restartCount} |`,
|
|
275
|
+
`| Networks | ${summary.networks.join(", ") || "-"} |`,
|
|
276
|
+
`| Ports | ${summary.ports.join(", ") || "-"} |`,
|
|
277
|
+
`| Mounts | ${summary.mounts.length} |`,
|
|
278
|
+
`| Env Vars | ${summary.env_count} |`,
|
|
279
|
+
`| Labels | ${summary.labels_count} |`,
|
|
280
|
+
];
|
|
281
|
+
if (summary.mounts.length > 0 && summary.mounts.length <= 5) {
|
|
282
|
+
lines.push("", "**Mounts:**");
|
|
283
|
+
for (const m of summary.mounts) {
|
|
284
|
+
lines.push(`- ${m.src} → ${m.dst} (${m.type})`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return lines.join("\n");
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Format container lifecycle operations as one-liners
|
|
291
|
+
* Simple success messages per STYLE.md - no elaborate formatting needed
|
|
292
|
+
*/
|
|
293
|
+
export function formatContainerStartMarkdown(container, host) {
|
|
294
|
+
return `Container ${container} started on ${host}`;
|
|
295
|
+
}
|
|
296
|
+
export function formatContainerStopMarkdown(container, host) {
|
|
297
|
+
return `Container ${container} stopped on ${host}`;
|
|
298
|
+
}
|
|
299
|
+
export function formatContainerRestartMarkdown(container, host) {
|
|
300
|
+
return `Container ${container} restarted on ${host}`;
|
|
301
|
+
}
|
|
302
|
+
export function formatContainerPauseMarkdown(container, host) {
|
|
303
|
+
return `Container ${container} paused on ${host}`;
|
|
304
|
+
}
|
|
305
|
+
export function formatContainerResumeMarkdown(container, host) {
|
|
306
|
+
return `Container ${container} resumed on ${host}`;
|
|
307
|
+
}
|
|
308
|
+
export function formatContainerExecMarkdown(container, host, command, output, exitCode) {
|
|
309
|
+
const status = exitCode === 0 ? "✓" : "✗";
|
|
310
|
+
const outputLines = output.split("\n");
|
|
311
|
+
if (outputLines.length <= PREVIEW_THRESHOLD) {
|
|
312
|
+
return `${status} Executed in ${container} on ${host}: ${command}\nExit code: ${exitCode}\n\n${output}`;
|
|
313
|
+
}
|
|
314
|
+
const first5 = outputLines.slice(0, 5).join("\n");
|
|
315
|
+
const last5 = outputLines.slice(-5).join("\n");
|
|
316
|
+
const preview = `Preview (first 5):\n${first5}\n...\n\nPreview (last 5):\n${last5}\n...`;
|
|
317
|
+
return `${status} Executed in ${container} on ${host}: ${command}\nExit code: ${exitCode}\nOutput lines: ${outputLines.length} (previewed)\n\n${preview}`;
|
|
318
|
+
}
|
|
319
|
+
export function formatContainerTopMarkdown(container, host, processes) {
|
|
320
|
+
const timestamp = getTimestamp();
|
|
321
|
+
return `Processes in ${container} (${host})\n${timestamp}\n\n${processes}`;
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/formatters/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic and health check formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent markdown formatting for system health checks
|
|
5
|
+
* and diagnostic operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Diagnostic check result type for formatting
|
|
9
|
+
*/
|
|
10
|
+
export interface DiagnosticCheckResult {
|
|
11
|
+
status: "pass" | "warn" | "fail";
|
|
12
|
+
message: string;
|
|
13
|
+
details?: string;
|
|
14
|
+
recommendations?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Format host doctor diagnostic results as markdown
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatHostDoctorMarkdown(host: string, checks: Record<string, DiagnosticCheckResult>): string;
|
|
20
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/formatters/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC5C,MAAM,CAsER"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic and health check formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent markdown formatting for system health checks
|
|
5
|
+
* and diagnostic operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Format host doctor diagnostic results as markdown
|
|
9
|
+
*/
|
|
10
|
+
export function formatHostDoctorMarkdown(host, checks) {
|
|
11
|
+
const lines = [`## 🏥 Health Check: ${host}`, ""];
|
|
12
|
+
// Individual check results (determine order and labels)
|
|
13
|
+
const checkOrder = ["docker", "network", "resources", "containers", "processes", "logs"];
|
|
14
|
+
const checkLabels = {
|
|
15
|
+
docker: "Docker Daemon",
|
|
16
|
+
network: "Network Connectivity",
|
|
17
|
+
resources: "System Resources",
|
|
18
|
+
containers: "Container Health",
|
|
19
|
+
processes: "Process Health",
|
|
20
|
+
logs: "System Logs",
|
|
21
|
+
};
|
|
22
|
+
// Build list of checks to display (only those that exist in checks object)
|
|
23
|
+
const checksToDisplay = [];
|
|
24
|
+
for (const checkName of checkOrder) {
|
|
25
|
+
const result = checks[checkName];
|
|
26
|
+
if (result) {
|
|
27
|
+
checksToDisplay.push([checkName, result]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Count status types (only from checks that will be displayed)
|
|
31
|
+
let passCount = 0;
|
|
32
|
+
let warnCount = 0;
|
|
33
|
+
let failCount = 0;
|
|
34
|
+
for (const [, result] of checksToDisplay) {
|
|
35
|
+
if (result.status === "pass")
|
|
36
|
+
passCount++;
|
|
37
|
+
else if (result.status === "warn")
|
|
38
|
+
warnCount++;
|
|
39
|
+
else if (result.status === "fail")
|
|
40
|
+
failCount++;
|
|
41
|
+
}
|
|
42
|
+
// Overall status
|
|
43
|
+
const overallStatus = failCount > 0 ? "❌ CRITICAL" : warnCount > 0 ? "⚠️ WARNING" : "✅ HEALTHY";
|
|
44
|
+
lines.push(`**Overall Status:** ${overallStatus}`);
|
|
45
|
+
lines.push(`**Checks:** ${passCount} passed, ${warnCount} warnings, ${failCount} failed`);
|
|
46
|
+
lines.push("");
|
|
47
|
+
// Display each check
|
|
48
|
+
for (const [checkName, result] of checksToDisplay) {
|
|
49
|
+
const statusEmoji = result.status === "pass" ? "✅" : result.status === "warn" ? "⚠️" : "❌";
|
|
50
|
+
const statusText = result.status.toUpperCase();
|
|
51
|
+
const label = checkLabels[checkName] || checkName;
|
|
52
|
+
lines.push(`### ${statusEmoji} ${label} - ${statusText}`);
|
|
53
|
+
lines.push("");
|
|
54
|
+
lines.push(`**Message:** ${result.message}`);
|
|
55
|
+
if (result.details) {
|
|
56
|
+
lines.push("");
|
|
57
|
+
lines.push("**Details:**");
|
|
58
|
+
lines.push("```");
|
|
59
|
+
lines.push(result.details);
|
|
60
|
+
lines.push("```");
|
|
61
|
+
}
|
|
62
|
+
if (result.recommendations) {
|
|
63
|
+
lines.push("");
|
|
64
|
+
lines.push("**Recommendations:**");
|
|
65
|
+
for (const rec of result.recommendations.split("\n")) {
|
|
66
|
+
lines.push(`- ${rec}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
lines.push("");
|
|
70
|
+
}
|
|
71
|
+
return lines.join("\n");
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/formatters/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker system formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent markdown formatting for Docker system info,
|
|
5
|
+
* disk usage, prune operations, images, networks, and volumes.
|
|
6
|
+
*/
|
|
7
|
+
import type { DockerDiskUsage, DockerNetworkInfo, DockerVolumeInfo, ImageInfo, PruneResult } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Successful Docker info result
|
|
10
|
+
*/
|
|
11
|
+
export interface DockerInfoSuccess {
|
|
12
|
+
status: "success";
|
|
13
|
+
dockerVersion: string;
|
|
14
|
+
apiVersion: string;
|
|
15
|
+
os: string;
|
|
16
|
+
arch: string;
|
|
17
|
+
kernelVersion: string;
|
|
18
|
+
cpus: number;
|
|
19
|
+
memoryBytes: number;
|
|
20
|
+
storageDriver: string;
|
|
21
|
+
rootDir: string;
|
|
22
|
+
containersRunning: number;
|
|
23
|
+
containersTotal: number;
|
|
24
|
+
images: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Error Docker info result (when a host is unreachable)
|
|
28
|
+
*/
|
|
29
|
+
export interface DockerInfoError {
|
|
30
|
+
status: "error";
|
|
31
|
+
errorMessage: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Docker info result - discriminated union for success/error
|
|
35
|
+
*/
|
|
36
|
+
export type DockerInfoResult = DockerInfoSuccess | DockerInfoError;
|
|
37
|
+
/**
|
|
38
|
+
* Format Docker info as markdown
|
|
39
|
+
*
|
|
40
|
+
* Output structure per STYLE.md:
|
|
41
|
+
* 1. Title (Section 3.1): "Docker System Info on {host}" or "(all)"
|
|
42
|
+
* 2. Summary (Section 3.2): "Hosts: N | OK: N | Fail: N"
|
|
43
|
+
* 3. Per-host details with canonical symbols (Section 4.1)
|
|
44
|
+
*
|
|
45
|
+
* Title format:
|
|
46
|
+
* - Single host: "Docker System Info on {host}"
|
|
47
|
+
* - Multiple hosts: "Docker System Info (all)"
|
|
48
|
+
* - No markdown ## prefix (plain text titles)
|
|
49
|
+
*
|
|
50
|
+
* Symbols:
|
|
51
|
+
* - ✗ for errors (never ❌ emoji)
|
|
52
|
+
*
|
|
53
|
+
* @param results - Array of host Docker info results (success or error)
|
|
54
|
+
* @returns Formatted markdown string with system information
|
|
55
|
+
*/
|
|
56
|
+
export declare function formatDockerInfoMarkdown(results: Array<{
|
|
57
|
+
host: string;
|
|
58
|
+
info: DockerInfoResult;
|
|
59
|
+
}>): string;
|
|
60
|
+
/**
|
|
61
|
+
* Format Docker disk usage as markdown
|
|
62
|
+
*
|
|
63
|
+
* Output structure per STYLE.md:
|
|
64
|
+
* 1. Title (Section 3.1): "Docker Disk Usage on {host}" or "(all)"
|
|
65
|
+
* 2. Summary (Section 3.2): Aggregate totals across all hosts
|
|
66
|
+
* 3. Per-host usage breakdown tables
|
|
67
|
+
*
|
|
68
|
+
* @param results - Array of host disk usage statistics
|
|
69
|
+
* @returns Formatted markdown string with disk usage by category
|
|
70
|
+
*/
|
|
71
|
+
export declare function formatDockerDfMarkdown(results: Array<{
|
|
72
|
+
host: string;
|
|
73
|
+
usage: DockerDiskUsage;
|
|
74
|
+
}>): string;
|
|
75
|
+
/**
|
|
76
|
+
* Format prune results as markdown
|
|
77
|
+
*
|
|
78
|
+
* Output structure per STYLE.md:
|
|
79
|
+
* 1. Title (Section 3.1): "Docker Prune on {host}" or "(all)"
|
|
80
|
+
* 2. Per-host RECLAIMED sections (Section 7.8)
|
|
81
|
+
*
|
|
82
|
+
* RECLAIMED format:
|
|
83
|
+
* - Section header: "RECLAIMED:"
|
|
84
|
+
* - Indented list: " type: size"
|
|
85
|
+
* - Not a table (differs from previous implementation)
|
|
86
|
+
*
|
|
87
|
+
* @param allResults - Array of host prune results
|
|
88
|
+
* @returns Formatted markdown string with RECLAIMED sections
|
|
89
|
+
*/
|
|
90
|
+
export declare function formatPruneMarkdown(allResults: Array<{
|
|
91
|
+
host: string;
|
|
92
|
+
results: PruneResult[];
|
|
93
|
+
}>): string;
|
|
94
|
+
/**
|
|
95
|
+
* Format images list as markdown table
|
|
96
|
+
*
|
|
97
|
+
* Title format per STYLE.md 3.1:
|
|
98
|
+
* - With host: "Docker Images on {host}"
|
|
99
|
+
* - Without host: "Docker Images"
|
|
100
|
+
* - No markdown ## prefix
|
|
101
|
+
*
|
|
102
|
+
* @param images - Array of image information
|
|
103
|
+
* @param total - Total count of images (for pagination)
|
|
104
|
+
* @param offset - Current pagination offset
|
|
105
|
+
* @param host - Optional host name for single-host queries
|
|
106
|
+
* @returns Formatted markdown string with image table
|
|
107
|
+
*/
|
|
108
|
+
export declare function formatImagesMarkdown(images: ImageInfo[], total: number, offset: number, host?: string): string;
|
|
109
|
+
/**
|
|
110
|
+
* Format Docker networks list as markdown
|
|
111
|
+
*
|
|
112
|
+
* Title format per STYLE.MD 3.1:
|
|
113
|
+
* - With host: "Docker Networks on {host}"
|
|
114
|
+
* - Without host: "Docker Networks"
|
|
115
|
+
* - No markdown ## prefix
|
|
116
|
+
*
|
|
117
|
+
* @param networks - Array of network information
|
|
118
|
+
* @param total - Total count of networks (for pagination)
|
|
119
|
+
* @param offset - Current pagination offset
|
|
120
|
+
* @param host - Optional host name for single-host queries
|
|
121
|
+
* @returns Formatted markdown string with networks list
|
|
122
|
+
*/
|
|
123
|
+
export declare function formatNetworksMarkdown(networks: DockerNetworkInfo[], total: number, offset: number, host?: string): string;
|
|
124
|
+
/**
|
|
125
|
+
* Format Docker volumes list as markdown
|
|
126
|
+
*
|
|
127
|
+
* Title format per STYLE.md 3.1:
|
|
128
|
+
* - With host: "Docker Volumes on {host}"
|
|
129
|
+
* - Without host: "Docker Volumes"
|
|
130
|
+
* - No markdown ## prefix
|
|
131
|
+
*
|
|
132
|
+
* @param volumes - Array of volume information
|
|
133
|
+
* @param total - Total count of volumes (for pagination)
|
|
134
|
+
* @param offset - Current pagination offset
|
|
135
|
+
* @param host - Optional host name for single-host queries
|
|
136
|
+
* @returns Formatted markdown string with volumes list
|
|
137
|
+
*/
|
|
138
|
+
export declare function formatVolumesMarkdown(volumes: DockerVolumeInfo[], total: number, offset: number, host?: string): string;
|
|
139
|
+
//# sourceMappingURL=docker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/formatters/docker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAEnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GACvD,MAAM,CA+BR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC,GACvD,MAAM,CAsCR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,GAC1D,MAAM,CAkBR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAqBR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAwBR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAwBR"}
|