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,216 @@
|
|
|
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 { formatBytes } from "../services/docker/utils/formatters.js";
|
|
8
|
+
/**
|
|
9
|
+
* Format Docker info as markdown
|
|
10
|
+
*
|
|
11
|
+
* Output structure per STYLE.md:
|
|
12
|
+
* 1. Title (Section 3.1): "Docker System Info on {host}" or "(all)"
|
|
13
|
+
* 2. Summary (Section 3.2): "Hosts: N | OK: N | Fail: N"
|
|
14
|
+
* 3. Per-host details with canonical symbols (Section 4.1)
|
|
15
|
+
*
|
|
16
|
+
* Title format:
|
|
17
|
+
* - Single host: "Docker System Info on {host}"
|
|
18
|
+
* - Multiple hosts: "Docker System Info (all)"
|
|
19
|
+
* - No markdown ## prefix (plain text titles)
|
|
20
|
+
*
|
|
21
|
+
* Symbols:
|
|
22
|
+
* - ✗ for errors (never ❌ emoji)
|
|
23
|
+
*
|
|
24
|
+
* @param results - Array of host Docker info results (success or error)
|
|
25
|
+
* @returns Formatted markdown string with system information
|
|
26
|
+
*/
|
|
27
|
+
export function formatDockerInfoMarkdown(results) {
|
|
28
|
+
// STYLE.md 3.1: Title format varies by result count
|
|
29
|
+
const title = results.length === 1 ? `Docker System Info on ${results[0].host}` : "Docker System Info (all)";
|
|
30
|
+
// STYLE.md 3.2: Rollup summary with success/error counts
|
|
31
|
+
const totalHosts = results.length;
|
|
32
|
+
const okHosts = results.filter((r) => r.info.status === "success").length;
|
|
33
|
+
const failHosts = results.filter((r) => r.info.status === "error").length;
|
|
34
|
+
const summary = `Hosts: ${totalHosts} | OK: ${okHosts} | Fail: ${failHosts}`;
|
|
35
|
+
const lines = [title, summary, ""];
|
|
36
|
+
for (const { host, info } of results) {
|
|
37
|
+
lines.push(`### ${host}`);
|
|
38
|
+
if (info.status === "error") {
|
|
39
|
+
// Use canonical ✗ symbol per STYLE.md 4.1 (never emoji)
|
|
40
|
+
lines.push(`✗ Error: ${info.errorMessage}`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
lines.push(`- Docker: ${info.dockerVersion} (API ${info.apiVersion})`);
|
|
44
|
+
lines.push(`- OS: ${info.os} (${info.arch})`);
|
|
45
|
+
lines.push(`- Kernel: ${info.kernelVersion}`);
|
|
46
|
+
lines.push(`- CPUs: ${info.cpus} | Memory: ${formatBytes(info.memoryBytes)}`);
|
|
47
|
+
lines.push(`- Storage: ${info.storageDriver} @ ${info.rootDir}`);
|
|
48
|
+
lines.push(`- Containers: ${info.containersRunning} running / ${info.containersTotal} total`);
|
|
49
|
+
lines.push(`- Images: ${info.images}`);
|
|
50
|
+
}
|
|
51
|
+
lines.push("");
|
|
52
|
+
}
|
|
53
|
+
return lines.join("\n");
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Format Docker disk usage as markdown
|
|
57
|
+
*
|
|
58
|
+
* Output structure per STYLE.md:
|
|
59
|
+
* 1. Title (Section 3.1): "Docker Disk Usage on {host}" or "(all)"
|
|
60
|
+
* 2. Summary (Section 3.2): Aggregate totals across all hosts
|
|
61
|
+
* 3. Per-host usage breakdown tables
|
|
62
|
+
*
|
|
63
|
+
* @param results - Array of host disk usage statistics
|
|
64
|
+
* @returns Formatted markdown string with disk usage by category
|
|
65
|
+
*/
|
|
66
|
+
export function formatDockerDfMarkdown(results) {
|
|
67
|
+
// STYLE.md 3.1: Title format varies by result count
|
|
68
|
+
const title = results.length === 1 ? `Docker Disk Usage on ${results[0].host}` : "Docker Disk Usage (all)";
|
|
69
|
+
// STYLE.md 3.2: Rollup summary aggregates size and reclaimable across all hosts
|
|
70
|
+
const totalSize = results.reduce((sum, r) => sum + r.usage.totalSize, 0);
|
|
71
|
+
const totalReclaimable = results.reduce((sum, r) => sum + r.usage.totalReclaimable, 0);
|
|
72
|
+
const summary = `Total: ${formatBytes(totalSize)} | Reclaimable: ${formatBytes(totalReclaimable)}`;
|
|
73
|
+
const lines = [title, summary, ""];
|
|
74
|
+
for (const { host, usage } of results) {
|
|
75
|
+
lines.push(`### ${host}`, "", "| Type | Count | Size | Reclaimable |", "|------|-------|------|-------------|");
|
|
76
|
+
lines.push(`| Images | ${usage.images.total} (${usage.images.active} active) | ${formatBytes(usage.images.size)} | ${formatBytes(usage.images.reclaimable)} |`);
|
|
77
|
+
lines.push(`| Containers | ${usage.containers.total} (${usage.containers.running} running) | ${formatBytes(usage.containers.size)} | ${formatBytes(usage.containers.reclaimable)} |`);
|
|
78
|
+
lines.push(`| Volumes | ${usage.volumes.total} (${usage.volumes.active} active) | ${formatBytes(usage.volumes.size)} | ${formatBytes(usage.volumes.reclaimable)} |`);
|
|
79
|
+
lines.push(`| Build Cache | ${usage.buildCache.total} | ${formatBytes(usage.buildCache.size)} | ${formatBytes(usage.buildCache.reclaimable)} |`);
|
|
80
|
+
lines.push(`| **Total** | | **${formatBytes(usage.totalSize)}** | **${formatBytes(usage.totalReclaimable)}** |`);
|
|
81
|
+
lines.push("");
|
|
82
|
+
}
|
|
83
|
+
return lines.join("\n");
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Format prune results as markdown
|
|
87
|
+
*
|
|
88
|
+
* Output structure per STYLE.md:
|
|
89
|
+
* 1. Title (Section 3.1): "Docker Prune on {host}" or "(all)"
|
|
90
|
+
* 2. Per-host RECLAIMED sections (Section 7.8)
|
|
91
|
+
*
|
|
92
|
+
* RECLAIMED format:
|
|
93
|
+
* - Section header: "RECLAIMED:"
|
|
94
|
+
* - Indented list: " type: size"
|
|
95
|
+
* - Not a table (differs from previous implementation)
|
|
96
|
+
*
|
|
97
|
+
* @param allResults - Array of host prune results
|
|
98
|
+
* @returns Formatted markdown string with RECLAIMED sections
|
|
99
|
+
*/
|
|
100
|
+
export function formatPruneMarkdown(allResults) {
|
|
101
|
+
// STYLE.md 3.1: Title format varies by result count
|
|
102
|
+
const title = allResults.length === 1 ? `Docker Prune on ${allResults[0].host}` : "Docker Prune (all)";
|
|
103
|
+
const lines = [title, ""];
|
|
104
|
+
// STYLE.md 7.8: Use RECLAIMED section format (indented list, not table)
|
|
105
|
+
for (const { host, results } of allResults) {
|
|
106
|
+
lines.push(`### ${host}`, "", "RECLAIMED:");
|
|
107
|
+
for (const r of results) {
|
|
108
|
+
lines.push(` ${r.type}: ${formatBytes(r.spaceReclaimed)}`);
|
|
109
|
+
}
|
|
110
|
+
lines.push("");
|
|
111
|
+
}
|
|
112
|
+
return lines.join("\n");
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Format images list as markdown table
|
|
116
|
+
*
|
|
117
|
+
* Title format per STYLE.md 3.1:
|
|
118
|
+
* - With host: "Docker Images on {host}"
|
|
119
|
+
* - Without host: "Docker Images"
|
|
120
|
+
* - No markdown ## prefix
|
|
121
|
+
*
|
|
122
|
+
* @param images - Array of image information
|
|
123
|
+
* @param total - Total count of images (for pagination)
|
|
124
|
+
* @param offset - Current pagination offset
|
|
125
|
+
* @param host - Optional host name for single-host queries
|
|
126
|
+
* @returns Formatted markdown string with image table
|
|
127
|
+
*/
|
|
128
|
+
export function formatImagesMarkdown(images, total, offset, host) {
|
|
129
|
+
if (images.length === 0)
|
|
130
|
+
return "No images found.";
|
|
131
|
+
const title = host ? `Docker Images on ${host}` : "Docker Images";
|
|
132
|
+
const lines = [
|
|
133
|
+
title,
|
|
134
|
+
"",
|
|
135
|
+
`Showing ${images.length} of ${total} images (offset: ${offset})`,
|
|
136
|
+
"",
|
|
137
|
+
"| ID | Tags | Size | Host | Containers |",
|
|
138
|
+
"|-----|------|------|------|------------|",
|
|
139
|
+
];
|
|
140
|
+
for (const img of images) {
|
|
141
|
+
const tags = img.tags.slice(0, 2).join(", ") + (img.tags.length > 2 ? "..." : "");
|
|
142
|
+
lines.push(`| ${img.id} | ${tags} | ${formatBytes(img.size)} | ${img.hostName} | ${img.containers} |`);
|
|
143
|
+
}
|
|
144
|
+
return lines.join("\n");
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Format Docker networks list as markdown
|
|
148
|
+
*
|
|
149
|
+
* Title format per STYLE.MD 3.1:
|
|
150
|
+
* - With host: "Docker Networks on {host}"
|
|
151
|
+
* - Without host: "Docker Networks"
|
|
152
|
+
* - No markdown ## prefix
|
|
153
|
+
*
|
|
154
|
+
* @param networks - Array of network information
|
|
155
|
+
* @param total - Total count of networks (for pagination)
|
|
156
|
+
* @param offset - Current pagination offset
|
|
157
|
+
* @param host - Optional host name for single-host queries
|
|
158
|
+
* @returns Formatted markdown string with networks list
|
|
159
|
+
*/
|
|
160
|
+
export function formatNetworksMarkdown(networks, total, offset, host) {
|
|
161
|
+
const title = host ? `Docker Networks on ${host}` : "Docker Networks";
|
|
162
|
+
if (networks.length === 0) {
|
|
163
|
+
return `${title}\n\nNo networks found.`;
|
|
164
|
+
}
|
|
165
|
+
const lines = [
|
|
166
|
+
title,
|
|
167
|
+
"",
|
|
168
|
+
`Showing ${networks.length} of ${total} networks (offset: ${offset})`,
|
|
169
|
+
"",
|
|
170
|
+
];
|
|
171
|
+
let currentHost = "";
|
|
172
|
+
for (const network of networks) {
|
|
173
|
+
if (network.hostName !== currentHost) {
|
|
174
|
+
currentHost = network.hostName;
|
|
175
|
+
lines.push(`### ${currentHost}`);
|
|
176
|
+
}
|
|
177
|
+
lines.push(`- ${network.name} (${network.driver}, ${network.scope})`);
|
|
178
|
+
}
|
|
179
|
+
return lines.join("\n");
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Format Docker volumes list as markdown
|
|
183
|
+
*
|
|
184
|
+
* Title format per STYLE.md 3.1:
|
|
185
|
+
* - With host: "Docker Volumes on {host}"
|
|
186
|
+
* - Without host: "Docker Volumes"
|
|
187
|
+
* - No markdown ## prefix
|
|
188
|
+
*
|
|
189
|
+
* @param volumes - Array of volume information
|
|
190
|
+
* @param total - Total count of volumes (for pagination)
|
|
191
|
+
* @param offset - Current pagination offset
|
|
192
|
+
* @param host - Optional host name for single-host queries
|
|
193
|
+
* @returns Formatted markdown string with volumes list
|
|
194
|
+
*/
|
|
195
|
+
export function formatVolumesMarkdown(volumes, total, offset, host) {
|
|
196
|
+
const title = host ? `Docker Volumes on ${host}` : "Docker Volumes";
|
|
197
|
+
if (volumes.length === 0) {
|
|
198
|
+
return `${title}\n\nNo volumes found.`;
|
|
199
|
+
}
|
|
200
|
+
const lines = [
|
|
201
|
+
title,
|
|
202
|
+
"",
|
|
203
|
+
`Showing ${volumes.length} of ${total} volumes (offset: ${offset})`,
|
|
204
|
+
"",
|
|
205
|
+
];
|
|
206
|
+
let currentHost = "";
|
|
207
|
+
for (const volume of volumes) {
|
|
208
|
+
if (volume.hostName !== currentHost) {
|
|
209
|
+
currentHost = volume.hostName;
|
|
210
|
+
lines.push(`### ${currentHost}`);
|
|
211
|
+
}
|
|
212
|
+
lines.push(`- ${volume.name} (${volume.driver}, ${volume.scope})`);
|
|
213
|
+
}
|
|
214
|
+
return lines.join("\n");
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/formatters/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host and system formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent markdown formatting for host status,
|
|
5
|
+
* resources, and port mappings.
|
|
6
|
+
*/
|
|
7
|
+
import type { HostResources } from "../services/ssh.js";
|
|
8
|
+
export type { HostResources } from "../services/ssh.js";
|
|
9
|
+
/**
|
|
10
|
+
* Host status entry type
|
|
11
|
+
*/
|
|
12
|
+
export interface HostStatusEntry {
|
|
13
|
+
name: string;
|
|
14
|
+
connected: boolean;
|
|
15
|
+
containerCount: number;
|
|
16
|
+
runningCount: number;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Format host status as markdown table
|
|
21
|
+
*
|
|
22
|
+
* Title format per STYLE.md 3.1: Plain text, no markdown ## prefix
|
|
23
|
+
* Summary per STYLE.md 3.2: Pipe-separated host counts
|
|
24
|
+
* Legend per STYLE.md 3.3: Shows symbols for mixed states
|
|
25
|
+
* Symbols per STYLE.md 4.1: ● for online, ○ for offline
|
|
26
|
+
* Sorting per STYLE.md Section 12: Severity-first (offline → online)
|
|
27
|
+
*
|
|
28
|
+
* @param status - Array of host status entries
|
|
29
|
+
* @returns Formatted markdown string with status table
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const output = formatHostStatusMarkdown([
|
|
34
|
+
* { name: "squirts", connected: true, containerCount: 10, runningCount: 8 },
|
|
35
|
+
* { name: "boops", connected: false, containerCount: 0, runningCount: 0, error: "Timeout" }
|
|
36
|
+
* ]);
|
|
37
|
+
* // Homelab Host Status
|
|
38
|
+
* // Hosts: 2 | Online: 1 | Offline: 1
|
|
39
|
+
* // Legend: ● online ○ offline
|
|
40
|
+
* //
|
|
41
|
+
* // | Host | Status | Containers | Running |
|
|
42
|
+
* // |--------|-----------------------|------------|---------|
|
|
43
|
+
* // | boops | ○ Offline (Timeout) | 0 | 0 |
|
|
44
|
+
* // | squirts| ● Online | 10 | 8 |
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatHostStatusMarkdown(status: HostStatusEntry[]): string;
|
|
48
|
+
/**
|
|
49
|
+
* Format host resources as markdown
|
|
50
|
+
*
|
|
51
|
+
* Title format per STYLE.md 3.1: Plain text, no markdown ## prefix
|
|
52
|
+
* Symbols per STYLE.md 4.1: ✗ for errors (no ❌ emoji)
|
|
53
|
+
* Freshness per STYLE.md 3.6: Resources are volatile (CPU, memory, disk)
|
|
54
|
+
* Warning per STYLE.md 10.2: MANDATORY thresholds - CPU>90%, MEM>90%, DISK>85%
|
|
55
|
+
*
|
|
56
|
+
* @param results - Array of host resource results (success or error)
|
|
57
|
+
* @returns Formatted markdown string with resource details
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const output = formatHostResourcesMarkdown([
|
|
62
|
+
* {
|
|
63
|
+
* host: "squirts",
|
|
64
|
+
* resources: {
|
|
65
|
+
* hostname: "squirts.local",
|
|
66
|
+
* uptime: "10 days",
|
|
67
|
+
* loadAverage: [1.0, 1.5, 2.0],
|
|
68
|
+
* cpu: { cores: 8, usagePercent: 95 },
|
|
69
|
+
* memory: { totalMB: 16384, usedMB: 15360, usagePercent: 94 },
|
|
70
|
+
* disk: [{ mount: "/", totalGB: 100, usedGB: 90, usagePercent: 90 }]
|
|
71
|
+
* }
|
|
72
|
+
* }
|
|
73
|
+
* ]);
|
|
74
|
+
* // Host Resources
|
|
75
|
+
* // As of (EST): 11:45:30 | 02/13/2026
|
|
76
|
+
* //
|
|
77
|
+
* // ### squirts
|
|
78
|
+
* // - **Hostname:** squirts.local
|
|
79
|
+
* // - **Uptime:** 10 days
|
|
80
|
+
* // - **Load:** 1.0, 1.5, 2.0
|
|
81
|
+
* // - **CPU:** 8 cores @ 95% ⚠
|
|
82
|
+
* // - **Memory:** 15360 MB / 16384 MB (94% ⚠)
|
|
83
|
+
* //
|
|
84
|
+
* // **Disks:**
|
|
85
|
+
* // - /: 90G / 100G (90% ⚠)
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare function formatHostResourcesMarkdown(results: Array<{
|
|
89
|
+
host: string;
|
|
90
|
+
resources: HostResources | null;
|
|
91
|
+
error?: string;
|
|
92
|
+
}>): string;
|
|
93
|
+
/**
|
|
94
|
+
* Port mapping info type for formatting
|
|
95
|
+
*/
|
|
96
|
+
export interface HostPortMapping {
|
|
97
|
+
port: number;
|
|
98
|
+
protocol: "tcp" | "udp";
|
|
99
|
+
state: "listening" | "bound" | "reserved";
|
|
100
|
+
source: "host" | "docker" | "compose";
|
|
101
|
+
containerName?: string;
|
|
102
|
+
containerPort?: number;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Format host port mappings as markdown
|
|
106
|
+
*
|
|
107
|
+
* Title format per STYLE.md 3.1: Plain text, no markdown ## prefix
|
|
108
|
+
* Symbols per STYLE.md 4.1: Canonical → for port mapping notation (no emoji)
|
|
109
|
+
* Pagination per STYLE.md Section 12: Standard footer format
|
|
110
|
+
*
|
|
111
|
+
* @param ports - Array of port mapping information
|
|
112
|
+
* @param host - Host name
|
|
113
|
+
* @param total - Total count of ports (for pagination)
|
|
114
|
+
* @param offset - Current pagination offset
|
|
115
|
+
* @param hasMore - Whether more results are available
|
|
116
|
+
* @returns Formatted markdown string with port mappings
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const output = formatHostPortsMarkdown(
|
|
121
|
+
* [{ port: 8080, protocol: "tcp", state: "listening", source: "docker", containerName: "nginx", containerPort: 80 }],
|
|
122
|
+
* "squirts",
|
|
123
|
+
* 10,
|
|
124
|
+
* 0,
|
|
125
|
+
* true
|
|
126
|
+
* );
|
|
127
|
+
* // Port Mappings - squirts
|
|
128
|
+
* //
|
|
129
|
+
* // | Port | Protocol | State | Source | Container | Mapping |
|
|
130
|
+
* // |------|----------|-----------|--------|-----------|------------|
|
|
131
|
+
* // | 8080 | tcp | listening | docker | nginx | 8080 → 80 |
|
|
132
|
+
* //
|
|
133
|
+
* // Showing 1–1 of 10 | next_offset: 1
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare function formatHostPortsMarkdown(ports: HostPortMapping[], host: string, total: number, offset: number, hasMore: boolean): string;
|
|
137
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/formatters/host.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CA0C1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAChF,MAAM,CA2CR;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,KAAK,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAC;IAC1C,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EAAE,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,MAAM,CA+BR"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host and system formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent markdown formatting for host status,
|
|
5
|
+
* resources, and port mappings.
|
|
6
|
+
*/
|
|
7
|
+
import { getTimestamp } from "./utils.js";
|
|
8
|
+
/**
|
|
9
|
+
* Format host status as markdown table
|
|
10
|
+
*
|
|
11
|
+
* Title format per STYLE.md 3.1: Plain text, no markdown ## prefix
|
|
12
|
+
* Summary per STYLE.md 3.2: Pipe-separated host counts
|
|
13
|
+
* Legend per STYLE.md 3.3: Shows symbols for mixed states
|
|
14
|
+
* Symbols per STYLE.md 4.1: ● for online, ○ for offline
|
|
15
|
+
* Sorting per STYLE.md Section 12: Severity-first (offline → online)
|
|
16
|
+
*
|
|
17
|
+
* @param status - Array of host status entries
|
|
18
|
+
* @returns Formatted markdown string with status table
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const output = formatHostStatusMarkdown([
|
|
23
|
+
* { name: "squirts", connected: true, containerCount: 10, runningCount: 8 },
|
|
24
|
+
* { name: "boops", connected: false, containerCount: 0, runningCount: 0, error: "Timeout" }
|
|
25
|
+
* ]);
|
|
26
|
+
* // Homelab Host Status
|
|
27
|
+
* // Hosts: 2 | Online: 1 | Offline: 1
|
|
28
|
+
* // Legend: ● online ○ offline
|
|
29
|
+
* //
|
|
30
|
+
* // | Host | Status | Containers | Running |
|
|
31
|
+
* // |--------|-----------------------|------------|---------|
|
|
32
|
+
* // | boops | ○ Offline (Timeout) | 0 | 0 |
|
|
33
|
+
* // | squirts| ● Online | 10 | 8 |
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function formatHostStatusMarkdown(status) {
|
|
37
|
+
// STYLE.md Section 12: Severity-first sorting (offline → online)
|
|
38
|
+
const sorted = [...status].sort((a, b) => {
|
|
39
|
+
if (!a.connected && b.connected)
|
|
40
|
+
return -1;
|
|
41
|
+
if (a.connected && !b.connected)
|
|
42
|
+
return 1;
|
|
43
|
+
return 0;
|
|
44
|
+
});
|
|
45
|
+
// STYLE.md 3.2: Summary line with counts
|
|
46
|
+
const totalHosts = sorted.length;
|
|
47
|
+
const onlineCount = sorted.filter((h) => h.connected).length;
|
|
48
|
+
const offlineCount = sorted.filter((h) => !h.connected).length;
|
|
49
|
+
// STYLE.md 3.3: Legend for mixed states
|
|
50
|
+
const hasMixedStates = onlineCount > 0 && offlineCount > 0;
|
|
51
|
+
const lines = [
|
|
52
|
+
// STYLE.md 3.1: Plain text title (no markdown ##)
|
|
53
|
+
"Homelab Host Status",
|
|
54
|
+
`Hosts: ${totalHosts} | Online: ${onlineCount} | Offline: ${offlineCount}`,
|
|
55
|
+
];
|
|
56
|
+
if (hasMixedStates) {
|
|
57
|
+
lines.push("Legend: ● online ○ offline");
|
|
58
|
+
}
|
|
59
|
+
lines.push("", "| Host | Status | Containers | Running |", "|------|--------|------------|---------|");
|
|
60
|
+
for (const h of sorted) {
|
|
61
|
+
// STYLE.md 4.1: Canonical symbols (● for online, ○ for offline)
|
|
62
|
+
const statusSymbol = h.connected ? "●" : "○";
|
|
63
|
+
const statusText = h.connected ? "Online" : `Offline (${h.error || "Unknown"})`;
|
|
64
|
+
lines.push(`| ${h.name} | ${statusSymbol} ${statusText} | ${h.containerCount} | ${h.runningCount} |`);
|
|
65
|
+
}
|
|
66
|
+
return lines.join("\n");
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format host resources as markdown
|
|
70
|
+
*
|
|
71
|
+
* Title format per STYLE.md 3.1: Plain text, no markdown ## prefix
|
|
72
|
+
* Symbols per STYLE.md 4.1: ✗ for errors (no ❌ emoji)
|
|
73
|
+
* Freshness per STYLE.md 3.6: Resources are volatile (CPU, memory, disk)
|
|
74
|
+
* Warning per STYLE.md 10.2: MANDATORY thresholds - CPU>90%, MEM>90%, DISK>85%
|
|
75
|
+
*
|
|
76
|
+
* @param results - Array of host resource results (success or error)
|
|
77
|
+
* @returns Formatted markdown string with resource details
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const output = formatHostResourcesMarkdown([
|
|
82
|
+
* {
|
|
83
|
+
* host: "squirts",
|
|
84
|
+
* resources: {
|
|
85
|
+
* hostname: "squirts.local",
|
|
86
|
+
* uptime: "10 days",
|
|
87
|
+
* loadAverage: [1.0, 1.5, 2.0],
|
|
88
|
+
* cpu: { cores: 8, usagePercent: 95 },
|
|
89
|
+
* memory: { totalMB: 16384, usedMB: 15360, usagePercent: 94 },
|
|
90
|
+
* disk: [{ mount: "/", totalGB: 100, usedGB: 90, usagePercent: 90 }]
|
|
91
|
+
* }
|
|
92
|
+
* }
|
|
93
|
+
* ]);
|
|
94
|
+
* // Host Resources
|
|
95
|
+
* // As of (EST): 11:45:30 | 02/13/2026
|
|
96
|
+
* //
|
|
97
|
+
* // ### squirts
|
|
98
|
+
* // - **Hostname:** squirts.local
|
|
99
|
+
* // - **Uptime:** 10 days
|
|
100
|
+
* // - **Load:** 1.0, 1.5, 2.0
|
|
101
|
+
* // - **CPU:** 8 cores @ 95% ⚠
|
|
102
|
+
* // - **Memory:** 15360 MB / 16384 MB (94% ⚠)
|
|
103
|
+
* //
|
|
104
|
+
* // **Disks:**
|
|
105
|
+
* // - /: 90G / 100G (90% ⚠)
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export function formatHostResourcesMarkdown(results) {
|
|
109
|
+
// STYLE.md 3.1: Plain text title (no markdown ##)
|
|
110
|
+
// STYLE.md 3.6: Freshness timestamp for volatile resource data
|
|
111
|
+
const lines = ["Host Resources", getTimestamp(), ""];
|
|
112
|
+
for (const { host, resources, error } of results) {
|
|
113
|
+
lines.push(`### ${host}`);
|
|
114
|
+
if (error || !resources) {
|
|
115
|
+
// STYLE.md 4.1: Canonical ✗ symbol (no ❌ emoji)
|
|
116
|
+
lines.push(`✗ ${error || "Unknown error"}`);
|
|
117
|
+
lines.push("");
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
lines.push(`- **Hostname:** ${resources.hostname}`);
|
|
121
|
+
lines.push(`- **Uptime:** ${resources.uptime}`);
|
|
122
|
+
lines.push(`- **Load:** ${resources.loadAverage.join(", ")}`);
|
|
123
|
+
// STYLE.md 10.2: CPU warning threshold >90%
|
|
124
|
+
const cpuWarning = resources.cpu.usagePercent > 90 ? " ⚠" : "";
|
|
125
|
+
lines.push(`- **CPU:** ${resources.cpu.cores} cores @ ${resources.cpu.usagePercent}%${cpuWarning}`);
|
|
126
|
+
// STYLE.md 10.2: Memory warning threshold >90%
|
|
127
|
+
const memWarning = resources.memory.usagePercent > 90 ? " ⚠" : "";
|
|
128
|
+
lines.push(`- **Memory:** ${resources.memory.usedMB} MB / ${resources.memory.totalMB} MB (${resources.memory.usagePercent}%${memWarning})`);
|
|
129
|
+
if (resources.disk.length > 0) {
|
|
130
|
+
lines.push("", "**Disks:**");
|
|
131
|
+
for (const d of resources.disk) {
|
|
132
|
+
// STYLE.md 10.2: Disk warning threshold >85%
|
|
133
|
+
const diskWarning = d.usagePercent > 85 ? " ⚠" : "";
|
|
134
|
+
lines.push(`- ${d.mount}: ${d.usedGB}G / ${d.totalGB}G (${d.usagePercent}%${diskWarning})`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
lines.push("");
|
|
138
|
+
}
|
|
139
|
+
return lines.join("\n");
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Format host port mappings as markdown
|
|
143
|
+
*
|
|
144
|
+
* Title format per STYLE.md 3.1: Plain text, no markdown ## prefix
|
|
145
|
+
* Symbols per STYLE.md 4.1: Canonical → for port mapping notation (no emoji)
|
|
146
|
+
* Pagination per STYLE.md Section 12: Standard footer format
|
|
147
|
+
*
|
|
148
|
+
* @param ports - Array of port mapping information
|
|
149
|
+
* @param host - Host name
|
|
150
|
+
* @param total - Total count of ports (for pagination)
|
|
151
|
+
* @param offset - Current pagination offset
|
|
152
|
+
* @param hasMore - Whether more results are available
|
|
153
|
+
* @returns Formatted markdown string with port mappings
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const output = formatHostPortsMarkdown(
|
|
158
|
+
* [{ port: 8080, protocol: "tcp", state: "listening", source: "docker", containerName: "nginx", containerPort: 80 }],
|
|
159
|
+
* "squirts",
|
|
160
|
+
* 10,
|
|
161
|
+
* 0,
|
|
162
|
+
* true
|
|
163
|
+
* );
|
|
164
|
+
* // Port Mappings - squirts
|
|
165
|
+
* //
|
|
166
|
+
* // | Port | Protocol | State | Source | Container | Mapping |
|
|
167
|
+
* // |------|----------|-----------|--------|-----------|------------|
|
|
168
|
+
* // | 8080 | tcp | listening | docker | nginx | 8080 → 80 |
|
|
169
|
+
* //
|
|
170
|
+
* // Showing 1–1 of 10 | next_offset: 1
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export function formatHostPortsMarkdown(ports, host, total, offset, hasMore) {
|
|
174
|
+
// STYLE.md 3.1: Plain text title (no markdown ##)
|
|
175
|
+
if (ports.length === 0) {
|
|
176
|
+
return `Port Mappings - ${host}\n\nNo ports found matching the specified criteria.`;
|
|
177
|
+
}
|
|
178
|
+
const lines = [
|
|
179
|
+
`Port Mappings - ${host}`,
|
|
180
|
+
"",
|
|
181
|
+
"| Port | Protocol | State | Source | Container | Mapping |",
|
|
182
|
+
"|------|----------|-------|--------|-----------|---------|",
|
|
183
|
+
];
|
|
184
|
+
for (const p of ports) {
|
|
185
|
+
const container = p.containerName || "—";
|
|
186
|
+
// STYLE.md 4.1: Use canonical → for port mapping notation
|
|
187
|
+
const mapping = p.containerPort ? `${p.port} → ${p.containerPort}` : "—";
|
|
188
|
+
// No emoji per STYLE.md 4.1 - just text
|
|
189
|
+
lines.push(`| ${p.port} | ${p.protocol} | ${p.state} | ${p.source} | ${container} | ${mapping} |`);
|
|
190
|
+
}
|
|
191
|
+
// STYLE.md Section 12: Standard pagination footer format
|
|
192
|
+
if (hasMore) {
|
|
193
|
+
const endOffset = offset + ports.length;
|
|
194
|
+
lines.push("", `Showing ${offset + 1}–${endOffset} of ${total} | next_offset: ${endOffset}`);
|
|
195
|
+
}
|
|
196
|
+
return lines.join("\n");
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/formatters/host.ts"],"names":[],"mappings":"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"}
|