@better-openclaw/core 1.0.16 → 1.0.18
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 +27 -0
- package/dist/bare-metal-partition.cjs +53 -0
- package/dist/bare-metal-partition.cjs.map +1 -0
- package/dist/bare-metal-partition.d.cts +26 -0
- package/dist/bare-metal-partition.d.cts.map +1 -0
- package/dist/bare-metal-partition.test.cjs +57 -0
- package/dist/bare-metal-partition.test.cjs.map +1 -0
- package/dist/bare-metal-partition.test.d.cts +1 -0
- package/dist/bare-metal-partition.test.mjs +1 -1
- package/dist/chunk-C0xms8kb.cjs +34 -0
- package/dist/compose-validation.test.cjs +67 -0
- package/dist/compose-validation.test.cjs.map +1 -0
- package/dist/compose-validation.test.d.cts +1 -0
- package/dist/compose-validation.test.d.mts +1 -0
- package/dist/compose-validation.test.mjs +66 -0
- package/dist/compose-validation.test.mjs.map +1 -0
- package/dist/composer.cjs +462 -0
- package/dist/composer.cjs.map +1 -0
- package/dist/composer.d.cts +21 -0
- package/dist/composer.d.cts.map +1 -0
- package/dist/composer.d.mts.map +1 -1
- package/dist/composer.mjs +187 -27
- package/dist/composer.mjs.map +1 -1
- package/dist/composer.snapshot.test.cjs +91 -0
- package/dist/composer.snapshot.test.cjs.map +1 -0
- package/dist/composer.snapshot.test.d.cts +1 -0
- package/dist/composer.snapshot.test.mjs +1 -1
- package/dist/composer.test.cjs +166 -0
- package/dist/composer.test.cjs.map +1 -0
- package/dist/composer.test.d.cts +1 -0
- package/dist/composer.test.mjs +2 -2
- package/dist/composer.test.mjs.map +1 -1
- package/dist/deployers/coolify.cjs +174 -0
- package/dist/deployers/coolify.cjs.map +1 -0
- package/dist/deployers/coolify.d.cts +25 -0
- package/dist/deployers/coolify.d.cts.map +1 -0
- package/dist/deployers/coolify.d.mts +25 -0
- package/dist/deployers/coolify.d.mts.map +1 -0
- package/dist/deployers/coolify.mjs +172 -0
- package/dist/deployers/coolify.mjs.map +1 -0
- package/dist/deployers/dokploy.cjs +141 -0
- package/dist/deployers/dokploy.cjs.map +1 -0
- package/dist/deployers/dokploy.d.cts +24 -0
- package/dist/deployers/dokploy.d.cts.map +1 -0
- package/dist/deployers/dokploy.d.mts +24 -0
- package/dist/deployers/dokploy.d.mts.map +1 -0
- package/dist/deployers/dokploy.mjs +139 -0
- package/dist/deployers/dokploy.mjs.map +1 -0
- package/dist/deployers/index.cjs +26 -0
- package/dist/deployers/index.cjs.map +1 -0
- package/dist/deployers/index.d.cts +14 -0
- package/dist/deployers/index.d.cts.map +1 -0
- package/dist/deployers/index.d.mts +14 -0
- package/dist/deployers/index.d.mts.map +1 -0
- package/dist/deployers/index.mjs +21 -0
- package/dist/deployers/index.mjs.map +1 -0
- package/dist/deployers/types.cjs +0 -0
- package/dist/deployers/types.d.cts +72 -0
- package/dist/deployers/types.d.cts.map +1 -0
- package/dist/deployers/types.d.mts +72 -0
- package/dist/deployers/types.d.mts.map +1 -0
- package/dist/deployers/types.mjs +1 -0
- package/dist/errors.cjs +27 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +17 -0
- package/dist/errors.d.cts.map +1 -0
- package/dist/generate.cjs +225 -0
- package/dist/generate.cjs.map +1 -0
- package/dist/generate.d.cts +12 -0
- package/dist/generate.d.cts.map +1 -0
- package/dist/generate.d.mts.map +1 -1
- package/dist/generate.mjs +34 -5
- package/dist/generate.mjs.map +1 -1
- package/dist/generate.test.cjs +283 -0
- package/dist/generate.test.cjs.map +1 -0
- package/dist/generate.test.d.cts +1 -0
- package/dist/generate.test.mjs +1 -1
- package/dist/generators/bare-metal-install.cjs +226 -0
- package/dist/generators/bare-metal-install.cjs.map +1 -0
- package/dist/generators/bare-metal-install.d.cts +17 -0
- package/dist/generators/bare-metal-install.d.cts.map +1 -0
- package/dist/generators/bare-metal-install.test.cjs +47 -0
- package/dist/generators/bare-metal-install.test.cjs.map +1 -0
- package/dist/generators/bare-metal-install.test.d.cts +1 -0
- package/dist/generators/bare-metal-install.test.mjs +1 -1
- package/dist/generators/caddy.cjs +79 -0
- package/dist/generators/caddy.cjs.map +1 -0
- package/dist/generators/caddy.d.cts +17 -0
- package/dist/generators/caddy.d.cts.map +1 -0
- package/dist/generators/caddy.test.cjs +44 -0
- package/dist/generators/caddy.test.cjs.map +1 -0
- package/dist/generators/caddy.test.d.cts +1 -0
- package/dist/generators/caddy.test.mjs +1 -1
- package/dist/generators/cloud-init.cjs +132 -0
- package/dist/generators/cloud-init.cjs.map +1 -0
- package/dist/generators/cloud-init.d.cts +25 -0
- package/dist/generators/cloud-init.d.cts.map +1 -0
- package/dist/generators/cloud-init.d.mts +25 -0
- package/dist/generators/cloud-init.d.mts.map +1 -0
- package/dist/generators/cloud-init.mjs +130 -0
- package/dist/generators/cloud-init.mjs.map +1 -0
- package/dist/generators/env.cjs +325 -0
- package/dist/generators/env.cjs.map +1 -0
- package/dist/generators/env.d.cts +52 -0
- package/dist/generators/env.d.cts.map +1 -0
- package/dist/generators/env.d.mts +6 -0
- package/dist/generators/env.d.mts.map +1 -1
- package/dist/generators/env.mjs +58 -6
- package/dist/generators/env.mjs.map +1 -1
- package/dist/generators/env.test.cjs +59 -0
- package/dist/generators/env.test.cjs.map +1 -0
- package/dist/generators/env.test.d.cts +1 -0
- package/dist/generators/env.test.mjs +1 -1
- package/dist/generators/get-shit-done.cjs +40 -0
- package/dist/generators/get-shit-done.cjs.map +1 -0
- package/dist/generators/get-shit-done.d.cts +10 -0
- package/dist/generators/get-shit-done.d.cts.map +1 -0
- package/dist/generators/grafana.cjs +296 -0
- package/dist/generators/grafana.cjs.map +1 -0
- package/dist/generators/grafana.d.cts +22 -0
- package/dist/generators/grafana.d.cts.map +1 -0
- package/dist/generators/health-check.cjs +707 -0
- package/dist/generators/health-check.cjs.map +1 -0
- package/dist/generators/health-check.d.cts +18 -0
- package/dist/generators/health-check.d.cts.map +1 -0
- package/dist/generators/health-check.d.mts +2 -2
- package/dist/generators/health-check.d.mts.map +1 -1
- package/dist/generators/health-check.mjs.map +1 -1
- package/dist/generators/health-check.test.cjs +84 -0
- package/dist/generators/health-check.test.cjs.map +1 -0
- package/dist/generators/health-check.test.d.cts +1 -0
- package/dist/generators/health-check.test.mjs +1 -1
- package/dist/generators/n8n-workflows.cjs +77 -0
- package/dist/generators/n8n-workflows.cjs.map +1 -0
- package/dist/generators/n8n-workflows.d.cts +11 -0
- package/dist/generators/n8n-workflows.d.cts.map +1 -0
- package/dist/generators/native-services.cjs +80 -0
- package/dist/generators/native-services.cjs.map +1 -0
- package/dist/generators/native-services.d.cts +17 -0
- package/dist/generators/native-services.d.cts.map +1 -0
- package/dist/generators/openclaw-install-script.cjs +68 -0
- package/dist/generators/openclaw-install-script.cjs.map +1 -0
- package/dist/generators/openclaw-install-script.d.cts +12 -0
- package/dist/generators/openclaw-install-script.d.cts.map +1 -0
- package/dist/generators/openclaw-install-script.d.mts +12 -0
- package/dist/generators/openclaw-install-script.d.mts.map +1 -0
- package/dist/generators/openclaw-install-script.mjs +66 -0
- package/dist/generators/openclaw-install-script.mjs.map +1 -0
- package/dist/generators/openclaw-json.cjs +540 -0
- package/dist/generators/openclaw-json.cjs.map +1 -0
- package/dist/generators/openclaw-json.d.cts +16 -0
- package/dist/generators/openclaw-json.d.cts.map +1 -0
- package/dist/generators/openclaw-json.d.mts +8 -3
- package/dist/generators/openclaw-json.d.mts.map +1 -1
- package/dist/generators/openclaw-json.mjs +214 -86
- package/dist/generators/openclaw-json.mjs.map +1 -1
- package/dist/generators/postgres-init.cjs +189 -0
- package/dist/generators/postgres-init.cjs.map +1 -0
- package/dist/generators/postgres-init.d.cts +30 -0
- package/dist/generators/postgres-init.d.cts.map +1 -0
- package/dist/generators/postgres-init.d.mts.map +1 -1
- package/dist/generators/postgres-init.mjs +35 -0
- package/dist/generators/postgres-init.mjs.map +1 -1
- package/dist/generators/prometheus.cjs +109 -0
- package/dist/generators/prometheus.cjs.map +1 -0
- package/dist/generators/prometheus.d.cts +14 -0
- package/dist/generators/prometheus.d.cts.map +1 -0
- package/dist/generators/readme.cjs +286 -0
- package/dist/generators/readme.cjs.map +1 -0
- package/dist/generators/readme.d.cts +27 -0
- package/dist/generators/readme.d.cts.map +1 -0
- package/dist/generators/readme.d.mts +3 -1
- package/dist/generators/readme.d.mts.map +1 -1
- package/dist/generators/readme.mjs +88 -3
- package/dist/generators/readme.mjs.map +1 -1
- package/dist/generators/scripts.cjs +353 -0
- package/dist/generators/scripts.cjs.map +1 -0
- package/dist/generators/scripts.d.cts +10 -0
- package/dist/generators/scripts.d.cts.map +1 -0
- package/dist/generators/scripts.test.cjs +51 -0
- package/dist/generators/scripts.test.cjs.map +1 -0
- package/dist/generators/scripts.test.d.cts +1 -0
- package/dist/generators/scripts.test.mjs +1 -1
- package/dist/generators/skills.cjs +590 -0
- package/dist/generators/skills.cjs.map +1 -0
- package/dist/generators/skills.d.cts +14 -0
- package/dist/generators/skills.d.cts.map +1 -0
- package/dist/generators/stack-manifest.cjs +70 -0
- package/dist/generators/stack-manifest.cjs.map +1 -0
- package/dist/generators/stack-manifest.d.cts +51 -0
- package/dist/generators/stack-manifest.d.cts.map +1 -0
- package/dist/generators/stack-manifest.d.mts +51 -0
- package/dist/generators/stack-manifest.d.mts.map +1 -0
- package/dist/generators/stack-manifest.mjs +68 -0
- package/dist/generators/stack-manifest.mjs.map +1 -0
- package/dist/generators/traefik.cjs +88 -0
- package/dist/generators/traefik.cjs.map +1 -0
- package/dist/generators/traefik.d.cts +19 -0
- package/dist/generators/traefik.d.cts.map +1 -0
- package/dist/generators/traefik.test.cjs +68 -0
- package/dist/generators/traefik.test.cjs.map +1 -0
- package/dist/generators/traefik.test.d.cts +1 -0
- package/dist/generators/traefik.test.mjs +1 -1
- package/dist/index.cjs +118 -0
- package/dist/index.d.cts +31 -0
- package/dist/index.d.mts +9 -3
- package/dist/index.mjs +8 -3
- package/dist/magic-string.es-D2agHT3I.cjs +1015 -0
- package/dist/magic-string.es-D2agHT3I.cjs.map +1 -0
- package/dist/manifest-4uLbISXV.cjs +1190 -0
- package/dist/manifest-4uLbISXV.cjs.map +1 -0
- package/dist/migrations.cjs +37 -0
- package/dist/migrations.cjs.map +1 -0
- package/dist/migrations.d.cts +14 -0
- package/dist/migrations.d.cts.map +1 -0
- package/dist/migrations.test.cjs +41 -0
- package/dist/migrations.test.cjs.map +1 -0
- package/dist/migrations.test.d.cts +1 -0
- package/dist/migrations.test.mjs +1 -1
- package/dist/port-scanner.cjs +125 -0
- package/dist/port-scanner.cjs.map +1 -0
- package/dist/port-scanner.d.cts +27 -0
- package/dist/port-scanner.d.cts.map +1 -0
- package/dist/port-scanner.d.mts +27 -0
- package/dist/port-scanner.d.mts.map +1 -0
- package/dist/port-scanner.mjs +122 -0
- package/dist/port-scanner.mjs.map +1 -0
- package/dist/presets/presets.test.cjs +65 -0
- package/dist/presets/presets.test.cjs.map +1 -0
- package/dist/presets/presets.test.d.cts +1 -0
- package/dist/presets/presets.test.d.mts +1 -0
- package/dist/presets/presets.test.mjs +64 -0
- package/dist/presets/presets.test.mjs.map +1 -0
- package/dist/presets/registry.cjs +193 -0
- package/dist/presets/registry.cjs.map +1 -0
- package/dist/presets/registry.d.cts +9 -0
- package/dist/presets/registry.d.cts.map +1 -0
- package/dist/presets/registry.d.mts.map +1 -1
- package/dist/presets/registry.mjs +38 -8
- package/dist/presets/registry.mjs.map +1 -1
- package/dist/presets/registry.test.cjs +36 -0
- package/dist/presets/registry.test.cjs.map +1 -0
- package/dist/presets/registry.test.d.cts +1 -0
- package/dist/presets/registry.test.mjs +5 -2
- package/dist/presets/registry.test.mjs.map +1 -1
- package/dist/resolver.cjs +217 -0
- package/dist/resolver.cjs.map +1 -0
- package/dist/resolver.d.cts +26 -0
- package/dist/resolver.d.cts.map +1 -0
- package/dist/resolver.mjs +2 -0
- package/dist/resolver.mjs.map +1 -1
- package/dist/resolver.test.cjs +236 -0
- package/dist/resolver.test.cjs.map +1 -0
- package/dist/resolver.test.d.cts +1 -0
- package/dist/resolver.test.mjs +1 -1
- package/dist/schema.cjs +354 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +854 -0
- package/dist/schema.d.cts.map +1 -0
- package/dist/schema.d.mts +56 -1
- package/dist/schema.d.mts.map +1 -1
- package/dist/schema.mjs +31 -4
- package/dist/schema.mjs.map +1 -1
- package/dist/schema.test.cjs +263 -0
- package/dist/schema.test.cjs.map +1 -0
- package/dist/schema.test.d.cts +1 -0
- package/dist/schema.test.mjs +1 -1
- package/dist/services/definitions/anything-llm.cjs +46 -0
- package/dist/services/definitions/anything-llm.cjs.map +1 -0
- package/dist/services/definitions/anything-llm.d.cts +7 -0
- package/dist/services/definitions/anything-llm.d.cts.map +1 -0
- package/dist/services/definitions/anything-llm.mjs +2 -2
- package/dist/services/definitions/anything-llm.mjs.map +1 -1
- package/dist/services/definitions/appflowy.cjs +47 -0
- package/dist/services/definitions/appflowy.cjs.map +1 -0
- package/dist/services/definitions/appflowy.d.cts +7 -0
- package/dist/services/definitions/appflowy.d.cts.map +1 -0
- package/dist/services/definitions/appflowy.mjs +1 -1
- package/dist/services/definitions/appflowy.mjs.map +1 -1
- package/dist/services/definitions/authentik.cjs +107 -0
- package/dist/services/definitions/authentik.cjs.map +1 -0
- package/dist/services/definitions/authentik.d.cts +7 -0
- package/dist/services/definitions/authentik.d.cts.map +1 -0
- package/dist/services/definitions/authentik.mjs +5 -5
- package/dist/services/definitions/authentik.mjs.map +1 -1
- package/dist/services/definitions/beszel.cjs +47 -0
- package/dist/services/definitions/beszel.cjs.map +1 -0
- package/dist/services/definitions/beszel.d.cts +7 -0
- package/dist/services/definitions/beszel.d.cts.map +1 -0
- package/dist/services/definitions/beszel.mjs +1 -1
- package/dist/services/definitions/beszel.mjs.map +1 -1
- package/dist/services/definitions/browserless.cjs +87 -0
- package/dist/services/definitions/browserless.cjs.map +1 -0
- package/dist/services/definitions/browserless.d.cts +7 -0
- package/dist/services/definitions/browserless.d.cts.map +1 -0
- package/dist/services/definitions/browserless.mjs +1 -1
- package/dist/services/definitions/browserless.mjs.map +1 -1
- package/dist/services/definitions/caddy.cjs +73 -0
- package/dist/services/definitions/caddy.cjs.map +1 -0
- package/dist/services/definitions/caddy.d.cts +7 -0
- package/dist/services/definitions/caddy.d.cts.map +1 -0
- package/dist/services/definitions/caddy.mjs +2 -2
- package/dist/services/definitions/caddy.mjs.map +1 -1
- package/dist/services/definitions/cal-com.cjs +90 -0
- package/dist/services/definitions/cal-com.cjs.map +1 -0
- package/dist/services/definitions/cal-com.d.cts +7 -0
- package/dist/services/definitions/cal-com.d.cts.map +1 -0
- package/dist/services/definitions/cal-com.mjs +2 -2
- package/dist/services/definitions/cal-com.mjs.map +1 -1
- package/dist/services/definitions/chromadb.cjs +65 -0
- package/dist/services/definitions/chromadb.cjs.map +1 -0
- package/dist/services/definitions/chromadb.d.cts +7 -0
- package/dist/services/definitions/chromadb.d.cts.map +1 -0
- package/dist/services/definitions/chromadb.mjs +3 -3
- package/dist/services/definitions/chromadb.mjs.map +1 -1
- package/dist/services/definitions/claude-code.cjs +54 -0
- package/dist/services/definitions/claude-code.cjs.map +1 -0
- package/dist/services/definitions/claude-code.d.cts +7 -0
- package/dist/services/definitions/claude-code.d.cts.map +1 -0
- package/dist/services/definitions/claude-code.mjs +1 -1
- package/dist/services/definitions/claude-code.mjs.map +1 -1
- package/dist/services/definitions/code-server.cjs +68 -0
- package/dist/services/definitions/code-server.cjs.map +1 -0
- package/dist/services/definitions/code-server.d.cts +7 -0
- package/dist/services/definitions/code-server.d.cts.map +1 -0
- package/dist/services/definitions/code-server.mjs +1 -1
- package/dist/services/definitions/code-server.mjs.map +1 -1
- package/dist/services/definitions/codex.cjs +47 -0
- package/dist/services/definitions/codex.cjs.map +1 -0
- package/dist/services/definitions/codex.d.cts +7 -0
- package/dist/services/definitions/codex.d.cts.map +1 -0
- package/dist/services/definitions/codex.mjs +1 -1
- package/dist/services/definitions/codex.mjs.map +1 -1
- package/dist/services/definitions/comfyui.cjs +85 -0
- package/dist/services/definitions/comfyui.cjs.map +1 -0
- package/dist/services/definitions/comfyui.d.cts +7 -0
- package/dist/services/definitions/comfyui.d.cts.map +1 -0
- package/dist/services/definitions/comfyui.mjs +1 -1
- package/dist/services/definitions/comfyui.mjs.map +1 -1
- package/dist/services/definitions/convex-dashboard.cjs +48 -0
- package/dist/services/definitions/convex-dashboard.cjs.map +1 -0
- package/dist/services/definitions/convex-dashboard.d.cts +7 -0
- package/dist/services/definitions/convex-dashboard.d.cts.map +1 -0
- package/dist/services/definitions/convex.cjs +120 -0
- package/dist/services/definitions/convex.cjs.map +1 -0
- package/dist/services/definitions/convex.d.cts +7 -0
- package/dist/services/definitions/convex.d.cts.map +1 -0
- package/dist/services/definitions/coolify.cjs +51 -0
- package/dist/services/definitions/coolify.cjs.map +1 -0
- package/dist/services/definitions/coolify.d.cts +7 -0
- package/dist/services/definitions/coolify.d.cts.map +1 -0
- package/dist/services/definitions/coolify.mjs +1 -1
- package/dist/services/definitions/coolify.mjs.map +1 -1
- package/dist/services/definitions/crowdsec.cjs +64 -0
- package/dist/services/definitions/crowdsec.cjs.map +1 -0
- package/dist/services/definitions/crowdsec.d.cts +7 -0
- package/dist/services/definitions/crowdsec.d.cts.map +1 -0
- package/dist/services/definitions/crowdsec.mjs +2 -2
- package/dist/services/definitions/crowdsec.mjs.map +1 -1
- package/dist/services/definitions/desktop-environment.cjs +155 -0
- package/dist/services/definitions/desktop-environment.cjs.map +1 -0
- package/dist/services/definitions/desktop-environment.d.cts +7 -0
- package/dist/services/definitions/desktop-environment.d.cts.map +1 -0
- package/dist/services/definitions/desktop-environment.mjs +1 -1
- package/dist/services/definitions/desktop-environment.mjs.map +1 -1
- package/dist/services/definitions/dify.cjs +83 -0
- package/dist/services/definitions/dify.cjs.map +1 -0
- package/dist/services/definitions/dify.d.cts +7 -0
- package/dist/services/definitions/dify.d.cts.map +1 -0
- package/dist/services/definitions/dify.mjs +1 -1
- package/dist/services/definitions/dify.mjs.map +1 -1
- package/dist/services/definitions/docsgpt.cjs +47 -0
- package/dist/services/definitions/docsgpt.cjs.map +1 -0
- package/dist/services/definitions/docsgpt.d.cts +7 -0
- package/dist/services/definitions/docsgpt.d.cts.map +1 -0
- package/dist/services/definitions/docsgpt.mjs +1 -1
- package/dist/services/definitions/docsgpt.mjs.map +1 -1
- package/dist/services/definitions/dokploy.cjs +51 -0
- package/dist/services/definitions/dokploy.cjs.map +1 -0
- package/dist/services/definitions/dokploy.d.cts +7 -0
- package/dist/services/definitions/dokploy.d.cts.map +1 -0
- package/dist/services/definitions/dokploy.mjs +2 -2
- package/dist/services/definitions/dokploy.mjs.map +1 -1
- package/dist/services/definitions/dozzle.cjs +43 -0
- package/dist/services/definitions/dozzle.cjs.map +1 -0
- package/dist/services/definitions/dozzle.d.cts +7 -0
- package/dist/services/definitions/dozzle.d.cts.map +1 -0
- package/dist/services/definitions/dozzle.mjs +1 -1
- package/dist/services/definitions/dozzle.mjs.map +1 -1
- package/dist/services/definitions/ffmpeg.cjs +68 -0
- package/dist/services/definitions/ffmpeg.cjs.map +1 -0
- package/dist/services/definitions/ffmpeg.d.cts +7 -0
- package/dist/services/definitions/ffmpeg.d.cts.map +1 -0
- package/dist/services/definitions/ffmpeg.mjs +2 -2
- package/dist/services/definitions/ffmpeg.mjs.map +1 -1
- package/dist/services/definitions/flowise.cjs +47 -0
- package/dist/services/definitions/flowise.cjs.map +1 -0
- package/dist/services/definitions/flowise.d.cts +7 -0
- package/dist/services/definitions/flowise.d.cts.map +1 -0
- package/dist/services/definitions/flowise.mjs +1 -1
- package/dist/services/definitions/flowise.mjs.map +1 -1
- package/dist/services/definitions/gemini-cli.cjs +54 -0
- package/dist/services/definitions/gemini-cli.cjs.map +1 -0
- package/dist/services/definitions/gemini-cli.d.cts +7 -0
- package/dist/services/definitions/gemini-cli.d.cts.map +1 -0
- package/dist/services/definitions/gemini-cli.mjs +7 -1
- package/dist/services/definitions/gemini-cli.mjs.map +1 -1
- package/dist/services/definitions/ghost.cjs +60 -0
- package/dist/services/definitions/ghost.cjs.map +1 -0
- package/dist/services/definitions/ghost.d.cts +7 -0
- package/dist/services/definitions/ghost.d.cts.map +1 -0
- package/dist/services/definitions/ghost.mjs +1 -1
- package/dist/services/definitions/ghost.mjs.map +1 -1
- package/dist/services/definitions/gitea.cjs +51 -0
- package/dist/services/definitions/gitea.cjs.map +1 -0
- package/dist/services/definitions/gitea.d.cts +7 -0
- package/dist/services/definitions/gitea.d.cts.map +1 -0
- package/dist/services/definitions/gitea.mjs +1 -1
- package/dist/services/definitions/gitea.mjs.map +1 -1
- package/dist/services/definitions/gotify.cjs +64 -0
- package/dist/services/definitions/gotify.cjs.map +1 -0
- package/dist/services/definitions/gotify.d.cts +7 -0
- package/dist/services/definitions/gotify.d.cts.map +1 -0
- package/dist/services/definitions/gotify.mjs +3 -3
- package/dist/services/definitions/gotify.mjs.map +1 -1
- package/dist/services/definitions/grafana.cjs +77 -0
- package/dist/services/definitions/grafana.cjs.map +1 -0
- package/dist/services/definitions/grafana.d.cts +7 -0
- package/dist/services/definitions/grafana.d.cts.map +1 -0
- package/dist/services/definitions/grafana.mjs +2 -2
- package/dist/services/definitions/grafana.mjs.map +1 -1
- package/dist/services/definitions/headscale.cjs +73 -0
- package/dist/services/definitions/headscale.cjs.map +1 -0
- package/dist/services/definitions/headscale.d.cts +7 -0
- package/dist/services/definitions/headscale.d.cts.map +1 -0
- package/dist/services/definitions/headscale.mjs +2 -2
- package/dist/services/definitions/headscale.mjs.map +1 -1
- package/dist/services/definitions/hexstrike.cjs +46 -0
- package/dist/services/definitions/hexstrike.cjs.map +1 -0
- package/dist/services/definitions/hexstrike.d.cts +7 -0
- package/dist/services/definitions/hexstrike.d.cts.map +1 -0
- package/dist/services/definitions/hexstrike.mjs +1 -1
- package/dist/services/definitions/hexstrike.mjs.map +1 -1
- package/dist/services/definitions/homeassistant.cjs +63 -0
- package/dist/services/definitions/homeassistant.cjs.map +1 -0
- package/dist/services/definitions/homeassistant.d.cts +7 -0
- package/dist/services/definitions/homeassistant.d.cts.map +1 -0
- package/dist/services/definitions/homeassistant.mjs +1 -1
- package/dist/services/definitions/homeassistant.mjs.map +1 -1
- package/dist/services/definitions/immich.cjs +94 -0
- package/dist/services/definitions/immich.cjs.map +1 -0
- package/dist/services/definitions/immich.d.cts +7 -0
- package/dist/services/definitions/immich.d.cts.map +1 -0
- package/dist/services/definitions/immich.mjs +6 -6
- package/dist/services/definitions/immich.mjs.map +1 -1
- package/dist/services/definitions/index.cjs +291 -0
- package/dist/services/definitions/index.cjs.map +1 -0
- package/dist/services/definitions/index.d.cts +101 -0
- package/dist/services/definitions/index.d.cts.map +1 -0
- package/dist/services/definitions/jellyfin.cjs +64 -0
- package/dist/services/definitions/jellyfin.cjs.map +1 -0
- package/dist/services/definitions/jellyfin.d.cts +7 -0
- package/dist/services/definitions/jellyfin.d.cts.map +1 -0
- package/dist/services/definitions/jellyfin.mjs +1 -1
- package/dist/services/definitions/jellyfin.mjs.map +1 -1
- package/dist/services/definitions/jenkins.cjs +64 -0
- package/dist/services/definitions/jenkins.cjs.map +1 -0
- package/dist/services/definitions/jenkins.d.cts +7 -0
- package/dist/services/definitions/jenkins.d.cts.map +1 -0
- package/dist/services/definitions/jenkins.mjs +1 -1
- package/dist/services/definitions/jenkins.mjs.map +1 -1
- package/dist/services/definitions/kimi.cjs +48 -0
- package/dist/services/definitions/kimi.cjs.map +1 -0
- package/dist/services/definitions/kimi.d.cts +7 -0
- package/dist/services/definitions/kimi.d.cts.map +1 -0
- package/dist/services/definitions/kimi.mjs +1 -1
- package/dist/services/definitions/kimi.mjs.map +1 -1
- package/dist/services/definitions/lasuite-meet-agents.cjs +38 -0
- package/dist/services/definitions/lasuite-meet-agents.cjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.d.cts +7 -0
- package/dist/services/definitions/lasuite-meet-agents.d.cts.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.mjs +1 -1
- package/dist/services/definitions/lasuite-meet-agents.mjs.map +1 -1
- package/dist/services/definitions/lasuite-meet-backend.cjs +136 -0
- package/dist/services/definitions/lasuite-meet-backend.cjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-backend.d.cts +7 -0
- package/dist/services/definitions/lasuite-meet-backend.d.cts.map +1 -0
- package/dist/services/definitions/lasuite-meet-backend.mjs +3 -3
- package/dist/services/definitions/lasuite-meet-backend.mjs.map +1 -1
- package/dist/services/definitions/lasuite-meet-frontend.cjs +50 -0
- package/dist/services/definitions/lasuite-meet-frontend.cjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-frontend.d.cts +7 -0
- package/dist/services/definitions/lasuite-meet-frontend.d.cts.map +1 -0
- package/dist/services/definitions/lasuite-meet-frontend.mjs +3 -3
- package/dist/services/definitions/lasuite-meet-frontend.mjs.map +1 -1
- package/dist/services/definitions/librechat.cjs +52 -0
- package/dist/services/definitions/librechat.cjs.map +1 -0
- package/dist/services/definitions/librechat.d.cts +7 -0
- package/dist/services/definitions/librechat.d.cts.map +1 -0
- package/dist/services/definitions/librechat.mjs +1 -1
- package/dist/services/definitions/librechat.mjs.map +1 -1
- package/dist/services/definitions/lightpanda.cjs +61 -0
- package/dist/services/definitions/lightpanda.cjs.map +1 -0
- package/dist/services/definitions/lightpanda.d.cts +7 -0
- package/dist/services/definitions/lightpanda.d.cts.map +1 -0
- package/dist/services/definitions/litellm.cjs +49 -0
- package/dist/services/definitions/litellm.cjs.map +1 -0
- package/dist/services/definitions/litellm.d.cts +7 -0
- package/dist/services/definitions/litellm.d.cts.map +1 -0
- package/dist/services/definitions/litellm.mjs +1 -1
- package/dist/services/definitions/litellm.mjs.map +1 -1
- package/dist/services/definitions/livekit.cjs +58 -0
- package/dist/services/definitions/livekit.cjs.map +1 -0
- package/dist/services/definitions/livekit.d.cts +7 -0
- package/dist/services/definitions/livekit.d.cts.map +1 -0
- package/dist/services/definitions/loki.cjs +53 -0
- package/dist/services/definitions/loki.cjs.map +1 -0
- package/dist/services/definitions/loki.d.cts +7 -0
- package/dist/services/definitions/loki.d.cts.map +1 -0
- package/dist/services/definitions/loki.mjs +1 -1
- package/dist/services/definitions/loki.mjs.map +1 -1
- package/dist/services/definitions/matomo.cjs +82 -0
- package/dist/services/definitions/matomo.cjs.map +1 -0
- package/dist/services/definitions/matomo.d.cts +7 -0
- package/dist/services/definitions/matomo.d.cts.map +1 -0
- package/dist/services/definitions/matomo.mjs +1 -1
- package/dist/services/definitions/matomo.mjs.map +1 -1
- package/dist/services/definitions/matrix-synapse.cjs +90 -0
- package/dist/services/definitions/matrix-synapse.cjs.map +1 -0
- package/dist/services/definitions/matrix-synapse.d.cts +7 -0
- package/dist/services/definitions/matrix-synapse.d.cts.map +1 -0
- package/dist/services/definitions/matrix-synapse.mjs +1 -1
- package/dist/services/definitions/matrix-synapse.mjs.map +1 -1
- package/dist/services/definitions/mattermost.cjs +63 -0
- package/dist/services/definitions/mattermost.cjs.map +1 -0
- package/dist/services/definitions/mattermost.d.cts +7 -0
- package/dist/services/definitions/mattermost.d.cts.map +1 -0
- package/dist/services/definitions/mattermost.mjs +1 -1
- package/dist/services/definitions/mattermost.mjs.map +1 -1
- package/dist/services/definitions/meilisearch.cjs +80 -0
- package/dist/services/definitions/meilisearch.cjs.map +1 -0
- package/dist/services/definitions/meilisearch.d.cts +7 -0
- package/dist/services/definitions/meilisearch.d.cts.map +1 -0
- package/dist/services/definitions/meilisearch.mjs +4 -4
- package/dist/services/definitions/meilisearch.mjs.map +1 -1
- package/dist/services/definitions/milvus.cjs +77 -0
- package/dist/services/definitions/milvus.cjs.map +1 -0
- package/dist/services/definitions/milvus.d.cts +7 -0
- package/dist/services/definitions/milvus.d.cts.map +1 -0
- package/dist/services/definitions/milvus.mjs +1 -1
- package/dist/services/definitions/milvus.mjs.map +1 -1
- package/dist/services/definitions/minio.cjs +104 -0
- package/dist/services/definitions/minio.cjs.map +1 -0
- package/dist/services/definitions/minio.d.cts +7 -0
- package/dist/services/definitions/minio.d.cts.map +1 -0
- package/dist/services/definitions/minio.mjs +1 -1
- package/dist/services/definitions/minio.mjs.map +1 -1
- package/dist/services/definitions/mission-control.cjs +69 -0
- package/dist/services/definitions/mission-control.cjs.map +1 -0
- package/dist/services/definitions/mission-control.d.cts +7 -0
- package/dist/services/definitions/mission-control.d.cts.map +1 -0
- package/dist/services/definitions/mixpost.cjs +89 -0
- package/dist/services/definitions/mixpost.cjs.map +1 -0
- package/dist/services/definitions/mixpost.d.cts +7 -0
- package/dist/services/definitions/mixpost.d.cts.map +1 -0
- package/dist/services/definitions/mixpost.mjs +1 -1
- package/dist/services/definitions/mixpost.mjs.map +1 -1
- package/dist/services/definitions/motion-canvas.cjs +54 -0
- package/dist/services/definitions/motion-canvas.cjs.map +1 -0
- package/dist/services/definitions/motion-canvas.d.cts +7 -0
- package/dist/services/definitions/motion-canvas.d.cts.map +1 -0
- package/dist/services/definitions/motion-canvas.mjs +1 -1
- package/dist/services/definitions/motion-canvas.mjs.map +1 -1
- package/dist/services/definitions/n8n.cjs +156 -0
- package/dist/services/definitions/n8n.cjs.map +1 -0
- package/dist/services/definitions/n8n.d.cts +7 -0
- package/dist/services/definitions/n8n.d.cts.map +1 -0
- package/dist/services/definitions/n8n.mjs +1 -1
- package/dist/services/definitions/n8n.mjs.map +1 -1
- package/dist/services/definitions/neo4j.cjs +93 -0
- package/dist/services/definitions/neo4j.cjs.map +1 -0
- package/dist/services/definitions/neo4j.d.cts +7 -0
- package/dist/services/definitions/neo4j.d.cts.map +1 -0
- package/dist/services/definitions/neo4j.mjs +1 -1
- package/dist/services/definitions/neo4j.mjs.map +1 -1
- package/dist/services/definitions/nextcloud.cjs +82 -0
- package/dist/services/definitions/nextcloud.cjs.map +1 -0
- package/dist/services/definitions/nextcloud.d.cts +7 -0
- package/dist/services/definitions/nextcloud.d.cts.map +1 -0
- package/dist/services/definitions/nextcloud.mjs +19 -19
- package/dist/services/definitions/nextcloud.mjs.map +1 -1
- package/dist/services/definitions/nocodb.cjs +47 -0
- package/dist/services/definitions/nocodb.cjs.map +1 -0
- package/dist/services/definitions/nocodb.d.cts +7 -0
- package/dist/services/definitions/nocodb.d.cts.map +1 -0
- package/dist/services/definitions/nocodb.mjs +1 -1
- package/dist/services/definitions/nocodb.mjs.map +1 -1
- package/dist/services/definitions/ntfy.cjs +65 -0
- package/dist/services/definitions/ntfy.cjs.map +1 -0
- package/dist/services/definitions/ntfy.d.cts +7 -0
- package/dist/services/definitions/ntfy.d.cts.map +1 -0
- package/dist/services/definitions/ntfy.mjs +2 -2
- package/dist/services/definitions/ntfy.mjs.map +1 -1
- package/dist/services/definitions/ollama.cjs +68 -0
- package/dist/services/definitions/ollama.cjs.map +1 -0
- package/dist/services/definitions/ollama.d.cts +7 -0
- package/dist/services/definitions/ollama.d.cts.map +1 -0
- package/dist/services/definitions/ollama.mjs +1 -1
- package/dist/services/definitions/ollama.mjs.map +1 -1
- package/dist/services/definitions/open-webui.cjs +52 -0
- package/dist/services/definitions/open-webui.cjs.map +1 -0
- package/dist/services/definitions/open-webui.d.cts +7 -0
- package/dist/services/definitions/open-webui.d.cts.map +1 -0
- package/dist/services/definitions/open-webui.mjs +1 -1
- package/dist/services/definitions/open-webui.mjs.map +1 -1
- package/dist/services/definitions/opencode.cjs +52 -0
- package/dist/services/definitions/opencode.cjs.map +1 -0
- package/dist/services/definitions/opencode.d.cts +7 -0
- package/dist/services/definitions/opencode.d.cts.map +1 -0
- package/dist/services/definitions/opencode.mjs +1 -1
- package/dist/services/definitions/opencode.mjs.map +1 -1
- package/dist/services/definitions/openpanel.cjs +48 -0
- package/dist/services/definitions/openpanel.cjs.map +1 -0
- package/dist/services/definitions/openpanel.d.cts +7 -0
- package/dist/services/definitions/openpanel.d.cts.map +1 -0
- package/dist/services/definitions/openpanel.mjs +3 -3
- package/dist/services/definitions/openpanel.mjs.map +1 -1
- package/dist/services/definitions/outline.cjs +76 -0
- package/dist/services/definitions/outline.cjs.map +1 -0
- package/dist/services/definitions/outline.d.cts +7 -0
- package/dist/services/definitions/outline.d.cts.map +1 -0
- package/dist/services/definitions/paperless-ngx.cjs +95 -0
- package/dist/services/definitions/paperless-ngx.cjs.map +1 -0
- package/dist/services/definitions/paperless-ngx.d.cts +7 -0
- package/dist/services/definitions/paperless-ngx.d.cts.map +1 -0
- package/dist/services/definitions/paperless-ngx.mjs +1 -1
- package/dist/services/definitions/paperless-ngx.mjs.map +1 -1
- package/dist/services/definitions/pentagi.cjs +46 -0
- package/dist/services/definitions/pentagi.cjs.map +1 -0
- package/dist/services/definitions/pentagi.d.cts +7 -0
- package/dist/services/definitions/pentagi.d.cts.map +1 -0
- package/dist/services/definitions/pentagi.mjs +2 -2
- package/dist/services/definitions/pentagi.mjs.map +1 -1
- package/dist/services/definitions/pentestagent.cjs +41 -0
- package/dist/services/definitions/pentestagent.cjs.map +1 -0
- package/dist/services/definitions/pentestagent.d.cts +7 -0
- package/dist/services/definitions/pentestagent.d.cts.map +1 -0
- package/dist/services/definitions/playwright-server.cjs +44 -0
- package/dist/services/definitions/playwright-server.cjs.map +1 -0
- package/dist/services/definitions/playwright-server.d.cts +7 -0
- package/dist/services/definitions/playwright-server.d.cts.map +1 -0
- package/dist/services/definitions/playwright-server.mjs +1 -1
- package/dist/services/definitions/playwright-server.mjs.map +1 -1
- package/dist/services/definitions/portainer.cjs +51 -0
- package/dist/services/definitions/portainer.cjs.map +1 -0
- package/dist/services/definitions/portainer.d.cts +7 -0
- package/dist/services/definitions/portainer.d.cts.map +1 -0
- package/dist/services/definitions/portainer.mjs +1 -1
- package/dist/services/definitions/portainer.mjs.map +1 -1
- package/dist/services/definitions/postgresql.cjs +86 -0
- package/dist/services/definitions/postgresql.cjs.map +1 -0
- package/dist/services/definitions/postgresql.d.cts +7 -0
- package/dist/services/definitions/postgresql.d.cts.map +1 -0
- package/dist/services/definitions/postgresql.mjs +1 -1
- package/dist/services/definitions/postgresql.mjs.map +1 -1
- package/dist/services/definitions/postiz.cjs +85 -0
- package/dist/services/definitions/postiz.cjs.map +1 -0
- package/dist/services/definitions/postiz.d.cts +7 -0
- package/dist/services/definitions/postiz.d.cts.map +1 -0
- package/dist/services/definitions/postiz.mjs +1 -1
- package/dist/services/definitions/postiz.mjs.map +1 -1
- package/dist/services/definitions/prometheus.cjs +54 -0
- package/dist/services/definitions/prometheus.cjs.map +1 -0
- package/dist/services/definitions/prometheus.d.cts +7 -0
- package/dist/services/definitions/prometheus.d.cts.map +1 -0
- package/dist/services/definitions/prometheus.mjs +1 -1
- package/dist/services/definitions/prometheus.mjs.map +1 -1
- package/dist/services/definitions/qdrant.cjs +79 -0
- package/dist/services/definitions/qdrant.cjs.map +1 -0
- package/dist/services/definitions/qdrant.d.cts +7 -0
- package/dist/services/definitions/qdrant.d.cts.map +1 -0
- package/dist/services/definitions/qdrant.mjs +1 -1
- package/dist/services/definitions/qdrant.mjs.map +1 -1
- package/dist/services/definitions/redis.cjs +93 -0
- package/dist/services/definitions/redis.cjs.map +1 -0
- package/dist/services/definitions/redis.d.cts +7 -0
- package/dist/services/definitions/redis.d.cts.map +1 -0
- package/dist/services/definitions/redis.mjs +1 -1
- package/dist/services/definitions/redis.mjs.map +1 -1
- package/dist/services/definitions/remotion.cjs +57 -0
- package/dist/services/definitions/remotion.cjs.map +1 -0
- package/dist/services/definitions/remotion.d.cts +7 -0
- package/dist/services/definitions/remotion.d.cts.map +1 -0
- package/dist/services/definitions/remotion.mjs +1 -1
- package/dist/services/definitions/remotion.mjs.map +1 -1
- package/dist/services/definitions/rocketchat.cjs +59 -0
- package/dist/services/definitions/rocketchat.cjs.map +1 -0
- package/dist/services/definitions/rocketchat.d.cts +7 -0
- package/dist/services/definitions/rocketchat.d.cts.map +1 -0
- package/dist/services/definitions/rocketchat.mjs +1 -1
- package/dist/services/definitions/rocketchat.mjs.map +1 -1
- package/dist/services/definitions/scrapling.cjs +46 -0
- package/dist/services/definitions/scrapling.cjs.map +1 -0
- package/dist/services/definitions/scrapling.d.cts +7 -0
- package/dist/services/definitions/scrapling.d.cts.map +1 -0
- package/dist/services/definitions/scrapling.mjs +2 -2
- package/dist/services/definitions/scrapling.mjs.map +1 -1
- package/dist/services/definitions/searxng.cjs +67 -0
- package/dist/services/definitions/searxng.cjs.map +1 -0
- package/dist/services/definitions/searxng.d.cts +7 -0
- package/dist/services/definitions/searxng.d.cts.map +1 -0
- package/dist/services/definitions/searxng.mjs +1 -1
- package/dist/services/definitions/searxng.mjs.map +1 -1
- package/dist/services/definitions/signoz.cjs +56 -0
- package/dist/services/definitions/signoz.cjs.map +1 -0
- package/dist/services/definitions/signoz.d.cts +7 -0
- package/dist/services/definitions/signoz.d.cts.map +1 -0
- package/dist/services/definitions/signoz.mjs +2 -2
- package/dist/services/definitions/signoz.mjs.map +1 -1
- package/dist/services/definitions/solidityguard.cjs +51 -0
- package/dist/services/definitions/solidityguard.cjs.map +1 -0
- package/dist/services/definitions/solidityguard.d.cts +7 -0
- package/dist/services/definitions/solidityguard.d.cts.map +1 -0
- package/dist/services/definitions/solidityguard.mjs +1 -1
- package/dist/services/definitions/solidityguard.mjs.map +1 -1
- package/dist/services/definitions/stable-diffusion.cjs +50 -0
- package/dist/services/definitions/stable-diffusion.cjs.map +1 -0
- package/dist/services/definitions/stable-diffusion.d.cts +7 -0
- package/dist/services/definitions/stable-diffusion.d.cts.map +1 -0
- package/dist/services/definitions/stable-diffusion.mjs +1 -1
- package/dist/services/definitions/stable-diffusion.mjs.map +1 -1
- package/dist/services/definitions/steel-browser.cjs +79 -0
- package/dist/services/definitions/steel-browser.cjs.map +1 -0
- package/dist/services/definitions/steel-browser.d.cts +7 -0
- package/dist/services/definitions/steel-browser.d.cts.map +1 -0
- package/dist/services/definitions/steel-browser.mjs +1 -1
- package/dist/services/definitions/steel-browser.mjs.map +1 -1
- package/dist/services/definitions/stream-gateway.cjs +135 -0
- package/dist/services/definitions/stream-gateway.cjs.map +1 -0
- package/dist/services/definitions/stream-gateway.d.cts +7 -0
- package/dist/services/definitions/stream-gateway.d.cts.map +1 -0
- package/dist/services/definitions/stream-gateway.mjs +2 -2
- package/dist/services/definitions/stream-gateway.mjs.map +1 -1
- package/dist/services/definitions/supabase.cjs +71 -0
- package/dist/services/definitions/supabase.cjs.map +1 -0
- package/dist/services/definitions/supabase.d.cts +7 -0
- package/dist/services/definitions/supabase.d.cts.map +1 -0
- package/dist/services/definitions/supabase.mjs +2 -2
- package/dist/services/definitions/supabase.mjs.map +1 -1
- package/dist/services/definitions/tailscale.cjs +72 -0
- package/dist/services/definitions/tailscale.cjs.map +1 -0
- package/dist/services/definitions/tailscale.d.cts +7 -0
- package/dist/services/definitions/tailscale.d.cts.map +1 -0
- package/dist/services/definitions/tailscale.mjs +1 -1
- package/dist/services/definitions/tailscale.mjs.map +1 -1
- package/dist/services/definitions/temporal.cjs +102 -0
- package/dist/services/definitions/temporal.cjs.map +1 -0
- package/dist/services/definitions/temporal.d.cts +7 -0
- package/dist/services/definitions/temporal.d.cts.map +1 -0
- package/dist/services/definitions/traefik.cjs +59 -0
- package/dist/services/definitions/traefik.cjs.map +1 -0
- package/dist/services/definitions/traefik.d.cts +7 -0
- package/dist/services/definitions/traefik.d.cts.map +1 -0
- package/dist/services/definitions/traefik.mjs +1 -1
- package/dist/services/definitions/traefik.mjs.map +1 -1
- package/dist/services/definitions/umami.cjs +48 -0
- package/dist/services/definitions/umami.cjs.map +1 -0
- package/dist/services/definitions/umami.d.cts +7 -0
- package/dist/services/definitions/umami.d.cts.map +1 -0
- package/dist/services/definitions/uptime-kuma.cjs +53 -0
- package/dist/services/definitions/uptime-kuma.cjs.map +1 -0
- package/dist/services/definitions/uptime-kuma.d.cts +7 -0
- package/dist/services/definitions/uptime-kuma.d.cts.map +1 -0
- package/dist/services/definitions/uptime-kuma.mjs +2 -2
- package/dist/services/definitions/uptime-kuma.mjs.map +1 -1
- package/dist/services/definitions/usesend.cjs +101 -0
- package/dist/services/definitions/usesend.cjs.map +1 -0
- package/dist/services/definitions/usesend.d.cts +7 -0
- package/dist/services/definitions/usesend.d.cts.map +1 -0
- package/dist/services/definitions/usesend.mjs +4 -4
- package/dist/services/definitions/usesend.mjs.map +1 -1
- package/dist/services/definitions/valkey.cjs +63 -0
- package/dist/services/definitions/valkey.cjs.map +1 -0
- package/dist/services/definitions/valkey.d.cts +7 -0
- package/dist/services/definitions/valkey.d.cts.map +1 -0
- package/dist/services/definitions/valkey.mjs +1 -1
- package/dist/services/definitions/valkey.mjs.map +1 -1
- package/dist/services/definitions/vaultwarden.cjs +65 -0
- package/dist/services/definitions/vaultwarden.cjs.map +1 -0
- package/dist/services/definitions/vaultwarden.d.cts +7 -0
- package/dist/services/definitions/vaultwarden.d.cts.map +1 -0
- package/dist/services/definitions/vaultwarden.mjs +2 -2
- package/dist/services/definitions/vaultwarden.mjs.map +1 -1
- package/dist/services/definitions/watchtower.cjs +49 -0
- package/dist/services/definitions/watchtower.cjs.map +1 -0
- package/dist/services/definitions/watchtower.d.cts +7 -0
- package/dist/services/definitions/watchtower.d.cts.map +1 -0
- package/dist/services/definitions/weaviate.cjs +92 -0
- package/dist/services/definitions/weaviate.cjs.map +1 -0
- package/dist/services/definitions/weaviate.d.cts +7 -0
- package/dist/services/definitions/weaviate.d.cts.map +1 -0
- package/dist/services/definitions/weaviate.mjs +2 -2
- package/dist/services/definitions/weaviate.mjs.map +1 -1
- package/dist/services/definitions/whisper.cjs +64 -0
- package/dist/services/definitions/whisper.cjs.map +1 -0
- package/dist/services/definitions/whisper.d.cts +7 -0
- package/dist/services/definitions/whisper.d.cts.map +1 -0
- package/dist/services/definitions/whisper.mjs +2 -2
- package/dist/services/definitions/whisper.mjs.map +1 -1
- package/dist/services/definitions/xyops.cjs +88 -0
- package/dist/services/definitions/xyops.cjs.map +1 -0
- package/dist/services/definitions/xyops.d.cts +7 -0
- package/dist/services/definitions/xyops.d.cts.map +1 -0
- package/dist/services/definitions/xyops.mjs +1 -1
- package/dist/services/definitions/xyops.mjs.map +1 -1
- package/dist/services/registry.cjs +35 -0
- package/dist/services/registry.cjs.map +1 -0
- package/dist/services/registry.d.cts +16 -0
- package/dist/services/registry.d.cts.map +1 -0
- package/dist/services/registry.test.cjs +63 -0
- package/dist/services/registry.test.cjs.map +1 -0
- package/dist/services/registry.test.d.cts +1 -0
- package/dist/services/registry.test.mjs +1 -1
- package/dist/skills/registry.cjs +712 -0
- package/dist/skills/registry.cjs.map +1 -0
- package/dist/skills/registry.d.cts +11 -0
- package/dist/skills/registry.d.cts.map +1 -0
- package/dist/skills/skill-manifest.cjs +23 -0
- package/dist/skills/skill-manifest.cjs.map +1 -0
- package/dist/skills/skill-manifest.d.cts +20 -0
- package/dist/skills/skill-manifest.d.cts.map +1 -0
- package/dist/types.cjs +149 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +82 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +9 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +40 -0
- package/dist/types.mjs.map +1 -1
- package/dist/validator.cjs +124 -0
- package/dist/validator.cjs.map +1 -0
- package/dist/validator.d.cts +20 -0
- package/dist/validator.d.cts.map +1 -0
- package/dist/validator.test.cjs +64 -0
- package/dist/validator.test.cjs.map +1 -0
- package/dist/validator.test.d.cts +1 -0
- package/dist/validator.test.mjs +1 -1
- package/dist/version-manager.cjs +65 -0
- package/dist/version-manager.cjs.map +1 -0
- package/dist/version-manager.d.cts +14 -0
- package/dist/version-manager.d.cts.map +1 -0
- package/dist/version-manager.test.cjs +101 -0
- package/dist/version-manager.test.cjs.map +1 -0
- package/dist/version-manager.test.d.cts +1 -0
- package/dist/version-manager.test.mjs +1 -1
- package/dist/vi.2VT5v0um-BmRMvymT.cjs +12934 -0
- package/dist/vi.2VT5v0um-BmRMvymT.cjs.map +1 -0
- package/dist/{vi.2VT5v0um-BgmKutxR.mjs → vi.2VT5v0um-CFyDIn0m.mjs} +5 -5
- package/dist/{vi.2VT5v0um-BgmKutxR.mjs.map → vi.2VT5v0um-CFyDIn0m.mjs.map} +1 -1
- package/package.json +24 -3
- package/src/__snapshots__/composer.snapshot.test.ts.snap +20 -20
- package/src/compose-validation.test.ts +102 -0
- package/src/composer.test.ts +1 -1
- package/src/composer.ts +331 -53
- package/src/deployers/coolify.ts +241 -0
- package/src/deployers/dokploy.ts +174 -0
- package/src/deployers/index.ts +36 -0
- package/src/deployers/types.ts +70 -0
- package/src/generate.ts +45 -1
- package/src/generators/cloud-init.ts +137 -0
- package/src/generators/env.ts +112 -6
- package/src/generators/health-check.ts +2 -2
- package/src/generators/openclaw-install-script.ts +77 -0
- package/src/generators/openclaw-json.ts +195 -58
- package/src/generators/postgres-init.ts +11 -0
- package/src/generators/readme.ts +103 -4
- package/src/generators/stack-manifest.ts +127 -0
- package/src/index.ts +30 -0
- package/src/port-scanner.ts +189 -0
- package/src/presets/presets.test.ts +73 -0
- package/src/presets/registry.test.ts +3 -0
- package/src/presets/registry.ts +30 -7
- package/src/resolver.ts +2 -0
- package/src/schema.ts +30 -1
- package/src/services/definitions/anything-llm.ts +2 -2
- package/src/services/definitions/appflowy.ts +1 -1
- package/src/services/definitions/authentik.ts +5 -5
- package/src/services/definitions/beszel.ts +1 -1
- package/src/services/definitions/browserless.ts +1 -1
- package/src/services/definitions/caddy.ts +2 -2
- package/src/services/definitions/cal-com.ts +2 -2
- package/src/services/definitions/chromadb.ts +3 -3
- package/src/services/definitions/claude-code.ts +1 -1
- package/src/services/definitions/code-server.ts +1 -1
- package/src/services/definitions/codex.ts +1 -1
- package/src/services/definitions/comfyui.ts +1 -1
- package/src/services/definitions/coolify.ts +1 -1
- package/src/services/definitions/crowdsec.ts +2 -2
- package/src/services/definitions/desktop-environment.ts +1 -1
- package/src/services/definitions/dify.ts +1 -1
- package/src/services/definitions/docsgpt.ts +1 -1
- package/src/services/definitions/dokploy.ts +2 -2
- package/src/services/definitions/dozzle.ts +1 -1
- package/src/services/definitions/ffmpeg.ts +2 -2
- package/src/services/definitions/flowise.ts +1 -1
- package/src/services/definitions/gemini-cli.ts +8 -1
- package/src/services/definitions/ghost.ts +1 -1
- package/src/services/definitions/gitea.ts +1 -1
- package/src/services/definitions/gotify.ts +3 -3
- package/src/services/definitions/grafana.ts +2 -2
- package/src/services/definitions/headscale.ts +68 -68
- package/src/services/definitions/hexstrike.ts +1 -1
- package/src/services/definitions/homeassistant.ts +1 -1
- package/src/services/definitions/immich.ts +6 -6
- package/src/services/definitions/jellyfin.ts +1 -1
- package/src/services/definitions/jenkins.ts +1 -1
- package/src/services/definitions/kimi.ts +1 -1
- package/src/services/definitions/lasuite-meet-agents.ts +1 -1
- package/src/services/definitions/lasuite-meet-backend.ts +3 -3
- package/src/services/definitions/lasuite-meet-frontend.ts +3 -3
- package/src/services/definitions/librechat.ts +1 -1
- package/src/services/definitions/litellm.ts +1 -1
- package/src/services/definitions/loki.ts +1 -1
- package/src/services/definitions/matomo.ts +1 -1
- package/src/services/definitions/matrix-synapse.ts +1 -1
- package/src/services/definitions/mattermost.ts +1 -1
- package/src/services/definitions/meilisearch.ts +4 -4
- package/src/services/definitions/milvus.ts +1 -1
- package/src/services/definitions/minio.ts +1 -1
- package/src/services/definitions/mixpost.ts +1 -1
- package/src/services/definitions/motion-canvas.ts +1 -1
- package/src/services/definitions/n8n.ts +1 -1
- package/src/services/definitions/neo4j.ts +1 -1
- package/src/services/definitions/nextcloud.ts +19 -19
- package/src/services/definitions/nocodb.ts +1 -1
- package/src/services/definitions/ntfy.ts +2 -2
- package/src/services/definitions/ollama.ts +1 -1
- package/src/services/definitions/open-webui.ts +1 -1
- package/src/services/definitions/opencode.ts +1 -1
- package/src/services/definitions/openpanel.ts +3 -3
- package/src/services/definitions/paperless-ngx.ts +1 -1
- package/src/services/definitions/pentagi.ts +2 -2
- package/src/services/definitions/playwright-server.ts +1 -1
- package/src/services/definitions/portainer.ts +1 -1
- package/src/services/definitions/postgresql.ts +1 -1
- package/src/services/definitions/postiz.ts +1 -1
- package/src/services/definitions/prometheus.ts +1 -1
- package/src/services/definitions/qdrant.ts +1 -1
- package/src/services/definitions/redis.ts +1 -1
- package/src/services/definitions/remotion.ts +1 -1
- package/src/services/definitions/rocketchat.ts +1 -1
- package/src/services/definitions/scrapling.ts +2 -2
- package/src/services/definitions/searxng.ts +1 -1
- package/src/services/definitions/signoz.ts +2 -2
- package/src/services/definitions/solidityguard.ts +1 -1
- package/src/services/definitions/stable-diffusion.ts +1 -1
- package/src/services/definitions/steel-browser.ts +1 -1
- package/src/services/definitions/stream-gateway.ts +2 -2
- package/src/services/definitions/supabase.ts +2 -2
- package/src/services/definitions/tailscale.ts +1 -1
- package/src/services/definitions/traefik.ts +1 -1
- package/src/services/definitions/uptime-kuma.ts +2 -2
- package/src/services/definitions/usesend.ts +4 -4
- package/src/services/definitions/valkey.ts +1 -1
- package/src/services/definitions/vaultwarden.ts +2 -2
- package/src/services/definitions/weaviate.ts +2 -2
- package/src/services/definitions/whisper.ts +2 -2
- package/src/services/definitions/xyops.ts +1 -1
- package/src/types.ts +138 -20
- package/tsdown.config.ts +2 -2
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_chunk = require('./chunk-C0xms8kb.cjs');
|
|
3
|
+
const require_generators_postgres_init = require('./generators/postgres-init.cjs');
|
|
4
|
+
let yaml = require("yaml");
|
|
5
|
+
|
|
6
|
+
//#region src/composer.ts
|
|
7
|
+
/** Maps image variant to the Docker image string. */
|
|
8
|
+
const IMAGE_VARIANTS = {
|
|
9
|
+
official: "ghcr.io/openclaw/openclaw",
|
|
10
|
+
coolify: "coollabsio/openclaw",
|
|
11
|
+
alpine: "alpine/openclaw"
|
|
12
|
+
};
|
|
13
|
+
/** Returns the OpenClaw image string with version tag for a given variant. */
|
|
14
|
+
function getOpenclawImage(variant, version) {
|
|
15
|
+
return `${IMAGE_VARIANTS[variant]}:${variant === "official" ? version : "latest"}`;
|
|
16
|
+
}
|
|
17
|
+
/** Creates a YAML scalar that is always quoted — avoids YAML 1.1 bare `no` → false. */
|
|
18
|
+
function quotedStr(value) {
|
|
19
|
+
const s = new yaml.Scalar(value);
|
|
20
|
+
s.type = yaml.Scalar.QUOTE_DOUBLE;
|
|
21
|
+
return s;
|
|
22
|
+
}
|
|
23
|
+
const CATEGORY_PROFILE_MAP = {
|
|
24
|
+
ai: {
|
|
25
|
+
file: "docker-compose.ai.yml",
|
|
26
|
+
profile: "ai"
|
|
27
|
+
},
|
|
28
|
+
"ai-platform": {
|
|
29
|
+
file: "docker-compose.ai.yml",
|
|
30
|
+
profile: "ai"
|
|
31
|
+
},
|
|
32
|
+
media: {
|
|
33
|
+
file: "docker-compose.media.yml",
|
|
34
|
+
profile: "media"
|
|
35
|
+
},
|
|
36
|
+
monitoring: {
|
|
37
|
+
file: "docker-compose.monitoring.yml",
|
|
38
|
+
profile: "monitoring"
|
|
39
|
+
},
|
|
40
|
+
analytics: {
|
|
41
|
+
file: "docker-compose.monitoring.yml",
|
|
42
|
+
profile: "monitoring"
|
|
43
|
+
},
|
|
44
|
+
"dev-tools": {
|
|
45
|
+
file: "docker-compose.tools.yml",
|
|
46
|
+
profile: "tools"
|
|
47
|
+
},
|
|
48
|
+
"coding-agent": {
|
|
49
|
+
file: "docker-compose.tools.yml",
|
|
50
|
+
profile: "tools"
|
|
51
|
+
},
|
|
52
|
+
"social-media": {
|
|
53
|
+
file: "docker-compose.social.yml",
|
|
54
|
+
profile: "social"
|
|
55
|
+
},
|
|
56
|
+
knowledge: {
|
|
57
|
+
file: "docker-compose.knowledge.yml",
|
|
58
|
+
profile: "knowledge"
|
|
59
|
+
},
|
|
60
|
+
communication: {
|
|
61
|
+
file: "docker-compose.communication.yml",
|
|
62
|
+
profile: "communication"
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const YAML_OPTIONS = {
|
|
66
|
+
lineWidth: 120,
|
|
67
|
+
nullStr: ""
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Builds the OpenClaw gateway and CLI service entries.
|
|
71
|
+
* Matches the real OpenClaw docker-compose.yml structure:
|
|
72
|
+
* - Bridge port 18790 for ACP/WebSocket
|
|
73
|
+
* - Bind-mount volumes (not named volumes)
|
|
74
|
+
* - Claude web-provider session env vars
|
|
75
|
+
* - Gateway bind mode (--bind lan)
|
|
76
|
+
* - CLI companion service with stdin/tty
|
|
77
|
+
*/
|
|
78
|
+
function buildGatewayServices(resolved, options, dependsOn) {
|
|
79
|
+
const allVolumes = /* @__PURE__ */ new Set();
|
|
80
|
+
const gatewayEnv = {
|
|
81
|
+
HOME: "/home/node",
|
|
82
|
+
TERM: "xterm-256color",
|
|
83
|
+
OPENCLAW_GATEWAY_TOKEN: "${OPENCLAW_GATEWAY_TOKEN}",
|
|
84
|
+
CLAUDE_AI_SESSION_KEY: "${CLAUDE_AI_SESSION_KEY}",
|
|
85
|
+
CLAUDE_WEB_SESSION_KEY: "${CLAUDE_WEB_SESSION_KEY}",
|
|
86
|
+
CLAUDE_WEB_COOKIE: "${CLAUDE_WEB_COOKIE}"
|
|
87
|
+
};
|
|
88
|
+
const providerKeys = [
|
|
89
|
+
"OPENAI_API_KEY",
|
|
90
|
+
"ANTHROPIC_API_KEY",
|
|
91
|
+
"GOOGLE_API_KEY",
|
|
92
|
+
"XAI_API_KEY",
|
|
93
|
+
"DEEPSEEK_API_KEY",
|
|
94
|
+
"GROQ_API_KEY",
|
|
95
|
+
"OPENROUTER_API_KEY",
|
|
96
|
+
"MISTRAL_API_KEY",
|
|
97
|
+
"TOGETHER_API_KEY",
|
|
98
|
+
"OLLAMA_API_KEY"
|
|
99
|
+
];
|
|
100
|
+
for (const key of providerKeys) gatewayEnv[key] = `\${${key}}`;
|
|
101
|
+
const gatewayVolumes = ["${OPENCLAW_CONFIG_DIR:-./openclaw/config}:/home/node/.openclaw", "${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}:/home/node/.openclaw/workspace"];
|
|
102
|
+
for (const { definition: def } of resolved.services) {
|
|
103
|
+
for (const env of def.openclawEnvVars) gatewayEnv[env.key] = env.secret ? `\${${env.key}}` : env.defaultValue;
|
|
104
|
+
if (def.openclawVolumeMounts) for (const vol of def.openclawVolumeMounts) {
|
|
105
|
+
if (!(vol.name.startsWith("./") || vol.name.startsWith("/") || vol.name.startsWith("~"))) allVolumes.add(vol.name);
|
|
106
|
+
gatewayVolumes.push(`${vol.name}:${vol.containerPath}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const defaultImage = getOpenclawImage(options.openclawImage ?? "official", options.openclawVersion);
|
|
110
|
+
const gateway = {
|
|
111
|
+
image: `\${OPENCLAW_IMAGE:-${defaultImage}}`,
|
|
112
|
+
environment: gatewayEnv,
|
|
113
|
+
volumes: gatewayVolumes,
|
|
114
|
+
ports: ["${OPENCLAW_GATEWAY_PORT:-18789}:18789", "${OPENCLAW_BRIDGE_PORT:-18790}:18790"],
|
|
115
|
+
networks: ["openclaw-network"],
|
|
116
|
+
init: true,
|
|
117
|
+
restart: "unless-stopped",
|
|
118
|
+
command: [
|
|
119
|
+
"node",
|
|
120
|
+
"dist/index.js",
|
|
121
|
+
"gateway",
|
|
122
|
+
"--bind",
|
|
123
|
+
"${OPENCLAW_GATEWAY_BIND:-lan}",
|
|
124
|
+
"--port",
|
|
125
|
+
"18789"
|
|
126
|
+
]
|
|
127
|
+
};
|
|
128
|
+
const gwTraefikLabels = options.traefikLabels?.get("openclaw-gateway");
|
|
129
|
+
if (gwTraefikLabels) gateway.labels = gwTraefikLabels;
|
|
130
|
+
if (options.bareMetalNativeHost) gateway.extra_hosts = ["host.docker.internal:host-gateway"];
|
|
131
|
+
if (dependsOn && Object.keys(dependsOn).length > 0) gateway.depends_on = dependsOn;
|
|
132
|
+
const cliEnv = {
|
|
133
|
+
HOME: "/home/node",
|
|
134
|
+
TERM: "xterm-256color",
|
|
135
|
+
OPENCLAW_GATEWAY_TOKEN: "${OPENCLAW_GATEWAY_TOKEN}",
|
|
136
|
+
OPENCLAW_GATEWAY_HOST: "openclaw-gateway",
|
|
137
|
+
OPENCLAW_GATEWAY_PORT: "18789",
|
|
138
|
+
BROWSER: "echo",
|
|
139
|
+
CLAUDE_AI_SESSION_KEY: "${CLAUDE_AI_SESSION_KEY}",
|
|
140
|
+
CLAUDE_WEB_SESSION_KEY: "${CLAUDE_WEB_SESSION_KEY}",
|
|
141
|
+
CLAUDE_WEB_COOKIE: "${CLAUDE_WEB_COOKIE}"
|
|
142
|
+
};
|
|
143
|
+
for (const key of providerKeys) cliEnv[key] = `\${${key}}`;
|
|
144
|
+
return {
|
|
145
|
+
gatewayService: gateway,
|
|
146
|
+
cliService: {
|
|
147
|
+
image: `\${OPENCLAW_IMAGE:-${defaultImage}}`,
|
|
148
|
+
environment: cliEnv,
|
|
149
|
+
volumes: ["${OPENCLAW_CONFIG_DIR:-./openclaw/config}:/home/node/.openclaw", "${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}:/home/node/.openclaw/workspace"],
|
|
150
|
+
stdin_open: true,
|
|
151
|
+
tty: true,
|
|
152
|
+
init: true,
|
|
153
|
+
networks: ["openclaw-network"],
|
|
154
|
+
entrypoint: ["node", "dist/index.js"],
|
|
155
|
+
restart: "no",
|
|
156
|
+
depends_on: { "openclaw-gateway": { condition: "service_started" } }
|
|
157
|
+
},
|
|
158
|
+
allVolumes
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function buildCompanionService(def, resolved, options, allVolumes) {
|
|
162
|
+
const svc = {};
|
|
163
|
+
const volumeNames = [];
|
|
164
|
+
svc.image = `${def.image}:${def.imageTag}`;
|
|
165
|
+
if (def.environment.length > 0) {
|
|
166
|
+
const env = {};
|
|
167
|
+
for (const e of def.environment) env[e.key] = e.secret ? `\${${e.key}}` : e.defaultValue;
|
|
168
|
+
svc.environment = env;
|
|
169
|
+
}
|
|
170
|
+
const exposedPorts = def.ports.filter((p) => p.exposed);
|
|
171
|
+
if (exposedPorts.length > 0) {
|
|
172
|
+
const prefix = def.id.toUpperCase().replace(/-/g, "_");
|
|
173
|
+
svc.ports = exposedPorts.map((p, i) => {
|
|
174
|
+
const suffix = exposedPorts.length > 1 ? `_${i}` : "";
|
|
175
|
+
let defaultPort = p.host;
|
|
176
|
+
if ((def.id === "caddy" || def.id === "traefik") && options.proxyHttpPort !== void 0 && p.container === 80) defaultPort = options.proxyHttpPort;
|
|
177
|
+
if ((def.id === "caddy" || def.id === "traefik") && options.proxyHttpsPort !== void 0 && p.container === 443) defaultPort = options.proxyHttpsPort;
|
|
178
|
+
if (options.portOverrides?.[def.id]?.[p.host] !== void 0) defaultPort = options.portOverrides?.[def.id]?.[p.host] || p.host;
|
|
179
|
+
return `\${${prefix}_EXTERNAL_PORT${suffix}:-${defaultPort}}:${p.container}`;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if (def.volumes.length > 0) svc.volumes = def.volumes.map((v) => {
|
|
183
|
+
if (!(v.name.startsWith("./") || v.name.startsWith("/") || v.name.startsWith("~"))) {
|
|
184
|
+
allVolumes.add(v.name);
|
|
185
|
+
volumeNames.push(v.name);
|
|
186
|
+
}
|
|
187
|
+
return `${v.name}:${v.containerPath}`;
|
|
188
|
+
});
|
|
189
|
+
if (def.id === "postgresql") {
|
|
190
|
+
if (!svc.volumes) svc.volumes = [];
|
|
191
|
+
svc.volumes.push("./postgres/init-databases.sh:/docker-entrypoint-initdb.d/init-databases.sh:ro");
|
|
192
|
+
const dbReqs = require_generators_postgres_init.getDbRequirements(resolved);
|
|
193
|
+
if (dbReqs.length > 0) {
|
|
194
|
+
const env = svc.environment ?? {};
|
|
195
|
+
for (const req of dbReqs) env[req.passwordEnvVar] = `\${${req.passwordEnvVar}}`;
|
|
196
|
+
svc.environment = env;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (def.healthcheck) {
|
|
200
|
+
const hc = {
|
|
201
|
+
test: ["CMD-SHELL", def.healthcheck.test],
|
|
202
|
+
interval: def.healthcheck.interval,
|
|
203
|
+
timeout: def.healthcheck.timeout,
|
|
204
|
+
retries: def.healthcheck.retries
|
|
205
|
+
};
|
|
206
|
+
if (def.healthcheck.startPeriod) hc.start_period = def.healthcheck.startPeriod;
|
|
207
|
+
svc.healthcheck = hc;
|
|
208
|
+
}
|
|
209
|
+
svc.restart = def.restartPolicy;
|
|
210
|
+
svc.networks = def.networks;
|
|
211
|
+
if (def.command) svc.command = def.command;
|
|
212
|
+
if (def.entrypoint) svc.entrypoint = def.entrypoint;
|
|
213
|
+
const mergedLabels = {};
|
|
214
|
+
if (def.labels) Object.assign(mergedLabels, def.labels);
|
|
215
|
+
const traefikLabels = options.traefikLabels?.get(def.id);
|
|
216
|
+
if (traefikLabels) Object.assign(mergedLabels, traefikLabels);
|
|
217
|
+
if (Object.keys(mergedLabels).length > 0) svc.labels = mergedLabels;
|
|
218
|
+
if (def.id === "traefik" && options.traefikLabels) {
|
|
219
|
+
if (!svc.volumes) svc.volumes = [];
|
|
220
|
+
svc.volumes.push("./traefik/traefik.yml:/etc/traefik/traefik.yml:ro", "/var/run/docker.sock:/var/run/docker.sock:ro");
|
|
221
|
+
}
|
|
222
|
+
let deploy;
|
|
223
|
+
if (def.deploy) deploy = JSON.parse(JSON.stringify(def.deploy));
|
|
224
|
+
if (options.gpu && def.gpuRequired) {
|
|
225
|
+
const base = deploy ?? {};
|
|
226
|
+
const resources = base.resources ?? {};
|
|
227
|
+
deploy = {
|
|
228
|
+
...base,
|
|
229
|
+
resources: {
|
|
230
|
+
...resources,
|
|
231
|
+
reservations: {
|
|
232
|
+
...resources.reservations ?? {},
|
|
233
|
+
devices: [{
|
|
234
|
+
driver: "nvidia",
|
|
235
|
+
count: "all",
|
|
236
|
+
capabilities: ["gpu"]
|
|
237
|
+
}]
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (def.minMemoryMB && options.hardened) {
|
|
243
|
+
const base = deploy ?? {};
|
|
244
|
+
const resources = base.resources ?? {};
|
|
245
|
+
const limits = resources.limits ?? {};
|
|
246
|
+
deploy = {
|
|
247
|
+
...base,
|
|
248
|
+
resources: {
|
|
249
|
+
...resources,
|
|
250
|
+
limits: {
|
|
251
|
+
...limits,
|
|
252
|
+
memory: `${def.minMemoryMB * 2}m`
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
if (deploy) svc.deploy = deploy;
|
|
258
|
+
if (options.hardened) {
|
|
259
|
+
svc.cap_drop = ["ALL"];
|
|
260
|
+
svc.security_opt = ["no-new-privileges:true"];
|
|
261
|
+
const capAddMap = {
|
|
262
|
+
caddy: ["NET_BIND_SERVICE"],
|
|
263
|
+
traefik: ["NET_BIND_SERVICE"],
|
|
264
|
+
crowdsec: ["NET_BIND_SERVICE", "DAC_READ_SEARCH"]
|
|
265
|
+
};
|
|
266
|
+
if (capAddMap[def.id]) svc.cap_add = capAddMap[def.id];
|
|
267
|
+
}
|
|
268
|
+
const depIds = [...new Set([...def.dependsOn, ...def.requires])].filter((id) => resolved.services.some((s) => s.definition.id === id));
|
|
269
|
+
if (depIds.length > 0) {
|
|
270
|
+
const dependsOn = {};
|
|
271
|
+
for (const depId of depIds) dependsOn[depId] = { condition: resolved.services.find((s) => s.definition.id === depId)?.definition.healthcheck ? "service_healthy" : "service_started" };
|
|
272
|
+
svc.depends_on = dependsOn;
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
entry: svc,
|
|
276
|
+
volumeNames
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Builds a one-shot init container that creates databases and users for
|
|
281
|
+
* services that need their own PostgreSQL database. Runs AFTER PostgreSQL
|
|
282
|
+
* is healthy, on every `docker compose up`, and is idempotent.
|
|
283
|
+
*
|
|
284
|
+
* Uses standard PG* environment variables (PGHOST, PGUSER, PGDATABASE,
|
|
285
|
+
* PGPASSWORD) so psql/createuser/createdb automatically connect without
|
|
286
|
+
* needing explicit -h/-U/-d flags — simpler and avoids YAML escaping issues.
|
|
287
|
+
*
|
|
288
|
+
* Returns null when no setup is needed (no PostgreSQL or no DB requirements).
|
|
289
|
+
*/
|
|
290
|
+
function buildPostgresSetup(resolved) {
|
|
291
|
+
if (!resolved.services.some((s) => s.definition.id === "postgresql")) return null;
|
|
292
|
+
const dbReqs = require_generators_postgres_init.getDbRequirements(resolved);
|
|
293
|
+
if (dbReqs.length === 0) return null;
|
|
294
|
+
const scriptLines = ["echo '=== PostgreSQL database setup ==='", "FAILED=0"];
|
|
295
|
+
for (const req of dbReqs) scriptLines.push(`echo "Setting up database '${req.dbName}' with user '${req.dbUser}'..."`, `psql -c "SELECT 1 FROM pg_roles WHERE rolname='${req.dbUser}'" | grep -q 1 || psql -c "CREATE ROLE ${req.dbUser} WITH LOGIN PASSWORD '$$${req.passwordEnvVar}'"`, `psql -c "ALTER ROLE ${req.dbUser} WITH LOGIN PASSWORD '$$${req.passwordEnvVar}'"`, `psql -tc "SELECT 1 FROM pg_database WHERE datname='${req.dbName}'" | grep -q 1 || psql -c "CREATE DATABASE ${req.dbName} OWNER ${req.dbUser}"`, `psql -c "GRANT ALL PRIVILEGES ON DATABASE ${req.dbName} TO ${req.dbUser}" || FAILED=1`, `echo " Done: ${req.dbName}"`);
|
|
296
|
+
scriptLines.push("echo '=== All databases ready ==='", "exit $$FAILED");
|
|
297
|
+
const env = {
|
|
298
|
+
PGHOST: "postgresql",
|
|
299
|
+
PGUSER: "${POSTGRES_USER:-openclaw}",
|
|
300
|
+
PGDATABASE: "${POSTGRES_DB:-openclaw}",
|
|
301
|
+
PGPASSWORD: "${POSTGRES_PASSWORD}"
|
|
302
|
+
};
|
|
303
|
+
for (const req of dbReqs) env[req.passwordEnvVar] = `\${${req.passwordEnvVar}}`;
|
|
304
|
+
return {
|
|
305
|
+
image: "postgres:17-alpine",
|
|
306
|
+
depends_on: { postgresql: { condition: "service_healthy" } },
|
|
307
|
+
environment: env,
|
|
308
|
+
entrypoint: ["/bin/sh", "-c"],
|
|
309
|
+
command: [scriptLines.join("\n")],
|
|
310
|
+
restart: quotedStr("no"),
|
|
311
|
+
networks: ["openclaw-network"]
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Generates a single Docker Compose YAML string with ALL services.
|
|
316
|
+
* Backward-compatible signature.
|
|
317
|
+
*/
|
|
318
|
+
function compose(resolved, options) {
|
|
319
|
+
const isDirectInstall = options.openclawInstallMethod === "direct";
|
|
320
|
+
const gatewayDependsOn = {};
|
|
321
|
+
for (const { definition: def } of resolved.services) gatewayDependsOn[def.id] = { condition: def.healthcheck ? "service_healthy" : "service_started" };
|
|
322
|
+
const services = {};
|
|
323
|
+
let allVolumes = /* @__PURE__ */ new Set();
|
|
324
|
+
if (!isDirectInstall) {
|
|
325
|
+
const { gatewayService, cliService, allVolumes: gwVolumes } = buildGatewayServices(resolved, options, gatewayDependsOn);
|
|
326
|
+
allVolumes = gwVolumes;
|
|
327
|
+
services["openclaw-gateway"] = gatewayService;
|
|
328
|
+
const dbReqs = require_generators_postgres_init.getDbRequirements(resolved);
|
|
329
|
+
const dbServiceIds = new Set(dbReqs.map((r) => r.serviceId));
|
|
330
|
+
for (const { definition: def } of resolved.services) {
|
|
331
|
+
const { entry } = buildCompanionService(def, resolved, options, allVolumes);
|
|
332
|
+
if (dbServiceIds.has(def.id) && entry.depends_on) {
|
|
333
|
+
const deps = entry.depends_on;
|
|
334
|
+
if (deps.postgresql) {
|
|
335
|
+
delete deps.postgresql;
|
|
336
|
+
deps["postgres-setup"] = { condition: "service_completed_successfully" };
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
services[def.id] = entry;
|
|
340
|
+
}
|
|
341
|
+
const pgSetup = buildPostgresSetup(resolved);
|
|
342
|
+
if (pgSetup) services["postgres-setup"] = pgSetup;
|
|
343
|
+
services["openclaw-cli"] = cliService;
|
|
344
|
+
} else {
|
|
345
|
+
const dbReqs = require_generators_postgres_init.getDbRequirements(resolved);
|
|
346
|
+
const dbServiceIds = new Set(dbReqs.map((r) => r.serviceId));
|
|
347
|
+
for (const { definition: def } of resolved.services) {
|
|
348
|
+
const { entry } = buildCompanionService(def, resolved, options, allVolumes);
|
|
349
|
+
if (dbServiceIds.has(def.id) && entry.depends_on) {
|
|
350
|
+
const deps = entry.depends_on;
|
|
351
|
+
if (deps.postgresql) {
|
|
352
|
+
delete deps.postgresql;
|
|
353
|
+
deps["postgres-setup"] = { condition: "service_completed_successfully" };
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
services[def.id] = entry;
|
|
357
|
+
}
|
|
358
|
+
const pgSetup = buildPostgresSetup(resolved);
|
|
359
|
+
if (pgSetup) services["postgres-setup"] = pgSetup;
|
|
360
|
+
}
|
|
361
|
+
const volumes = {};
|
|
362
|
+
for (const v of [...allVolumes].sort()) volumes[v] = null;
|
|
363
|
+
return (0, yaml.stringify)({
|
|
364
|
+
services,
|
|
365
|
+
volumes,
|
|
366
|
+
networks: { "openclaw-network": { driver: "bridge" } }
|
|
367
|
+
}, YAML_OPTIONS);
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Generates multiple Docker Compose files, splitting services into profile-based
|
|
371
|
+
* override files by category.
|
|
372
|
+
*/
|
|
373
|
+
function composeMultiFile(resolved, options) {
|
|
374
|
+
const isDirectInstall = options.openclawInstallMethod === "direct";
|
|
375
|
+
const allVolumes = /* @__PURE__ */ new Set();
|
|
376
|
+
const serviceInfos = [];
|
|
377
|
+
const dbReqs = require_generators_postgres_init.getDbRequirements(resolved);
|
|
378
|
+
const dbServiceIds = new Set(dbReqs.map((r) => r.serviceId));
|
|
379
|
+
for (const { definition: def } of resolved.services) {
|
|
380
|
+
const { entry, volumeNames } = buildCompanionService(def, resolved, options, allVolumes);
|
|
381
|
+
if (dbServiceIds.has(def.id) && entry.depends_on) {
|
|
382
|
+
const deps = entry.depends_on;
|
|
383
|
+
if (deps.postgresql) {
|
|
384
|
+
delete deps.postgresql;
|
|
385
|
+
deps["postgres-setup"] = { condition: "service_completed_successfully" };
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
serviceInfos.push({
|
|
389
|
+
id: def.id,
|
|
390
|
+
category: def.category,
|
|
391
|
+
entry,
|
|
392
|
+
volumeNames
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
const baseServiceIds = /* @__PURE__ */ new Set();
|
|
396
|
+
const profileFileMap = {};
|
|
397
|
+
for (const info of serviceInfos) {
|
|
398
|
+
const mapping = CATEGORY_PROFILE_MAP[info.category];
|
|
399
|
+
if (mapping) {
|
|
400
|
+
if (!profileFileMap[mapping.file]) profileFileMap[mapping.file] = {
|
|
401
|
+
profile: mapping.profile,
|
|
402
|
+
services: []
|
|
403
|
+
};
|
|
404
|
+
profileFileMap[mapping.file].services.push(info);
|
|
405
|
+
} else baseServiceIds.add(info.id);
|
|
406
|
+
}
|
|
407
|
+
const baseServices = {};
|
|
408
|
+
if (!isDirectInstall) {
|
|
409
|
+
const gatewayDependsOn = {};
|
|
410
|
+
for (const { definition: def } of resolved.services) if (baseServiceIds.has(def.id)) gatewayDependsOn[def.id] = { condition: def.healthcheck ? "service_healthy" : "service_started" };
|
|
411
|
+
const { gatewayService, cliService, allVolumes: gwVolumes } = buildGatewayServices(resolved, options, gatewayDependsOn);
|
|
412
|
+
for (const v of gwVolumes) allVolumes.add(v);
|
|
413
|
+
baseServices["openclaw-gateway"] = gatewayService;
|
|
414
|
+
for (const info of serviceInfos) if (baseServiceIds.has(info.id)) baseServices[info.id] = info.entry;
|
|
415
|
+
const pgSetup = buildPostgresSetup(resolved);
|
|
416
|
+
if (pgSetup) baseServices["postgres-setup"] = pgSetup;
|
|
417
|
+
baseServices["openclaw-cli"] = cliService;
|
|
418
|
+
} else {
|
|
419
|
+
for (const info of serviceInfos) if (baseServiceIds.has(info.id)) baseServices[info.id] = info.entry;
|
|
420
|
+
const pgSetup = buildPostgresSetup(resolved);
|
|
421
|
+
if (pgSetup) baseServices["postgres-setup"] = pgSetup;
|
|
422
|
+
}
|
|
423
|
+
const sortedAllVolumes = {};
|
|
424
|
+
for (const v of [...allVolumes].sort()) sortedAllVolumes[v] = null;
|
|
425
|
+
const networks = { "openclaw-network": { driver: "bridge" } };
|
|
426
|
+
const files = {};
|
|
427
|
+
files["docker-compose.yml"] = (0, yaml.stringify)({
|
|
428
|
+
services: baseServices,
|
|
429
|
+
volumes: sortedAllVolumes,
|
|
430
|
+
networks
|
|
431
|
+
}, YAML_OPTIONS);
|
|
432
|
+
const usedProfiles = /* @__PURE__ */ new Set();
|
|
433
|
+
for (const [fileName, { profile, services }] of Object.entries(profileFileMap)) {
|
|
434
|
+
usedProfiles.add(profile);
|
|
435
|
+
const profileServices = {};
|
|
436
|
+
const profileVolumes = /* @__PURE__ */ new Set();
|
|
437
|
+
for (const info of services) {
|
|
438
|
+
profileServices[info.id] = {
|
|
439
|
+
...info.entry,
|
|
440
|
+
profiles: [profile]
|
|
441
|
+
};
|
|
442
|
+
for (const vName of info.volumeNames) profileVolumes.add(vName);
|
|
443
|
+
}
|
|
444
|
+
const fileContent = { services: profileServices };
|
|
445
|
+
if (profileVolumes.size > 0) {
|
|
446
|
+
const sortedProfileVolumes = {};
|
|
447
|
+
for (const v of [...profileVolumes].sort()) sortedProfileVolumes[v] = null;
|
|
448
|
+
fileContent.volumes = sortedProfileVolumes;
|
|
449
|
+
}
|
|
450
|
+
files[fileName] = (0, yaml.stringify)(fileContent, YAML_OPTIONS);
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
files,
|
|
454
|
+
mainFile: "docker-compose.yml",
|
|
455
|
+
profiles: [...usedProfiles].sort()
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
//#endregion
|
|
460
|
+
exports.compose = compose;
|
|
461
|
+
exports.composeMultiFile = composeMultiFile;
|
|
462
|
+
//# sourceMappingURL=composer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.cjs","names":["Scalar","getDbRequirements"],"sources":["../src/composer.ts"],"sourcesContent":["import { Scalar, stringify } from \"yaml\";\nimport { getDbRequirements } from \"./generators/postgres-init.js\";\nimport type {\n\tComposeOptions,\n\tOpenclawImageVariant,\n\tResolverOutput,\n\tServiceCategory,\n} from \"./types.js\";\n\n/** Maps image variant to the Docker image string. */\nconst IMAGE_VARIANTS: Record<OpenclawImageVariant, string> = {\n\tofficial: \"ghcr.io/openclaw/openclaw\",\n\tcoolify: \"coollabsio/openclaw\",\n\talpine: \"alpine/openclaw\",\n};\n\n/** Returns the OpenClaw image string with version tag for a given variant. */\nfunction getOpenclawImage(variant: OpenclawImageVariant, version: string): string {\n\tconst base = IMAGE_VARIANTS[variant];\n\t// Coolify and alpine images use :latest by default\n\tconst tag = variant === \"official\" ? version : \"latest\";\n\treturn `${base}:${tag}`;\n}\n\n/** Creates a YAML scalar that is always quoted — avoids YAML 1.1 bare `no` → false. */\nfunction quotedStr(value: string): Scalar {\n\tconst s = new Scalar(value);\n\ts.type = Scalar.QUOTE_DOUBLE;\n\treturn s;\n}\n\n// ── Public Types ────────────────────────────────────────────────────────────\n\nexport interface ComposeResult {\n\tfiles: Record<string, string>; // filename -> YAML content\n\tmainFile: string; // \"docker-compose.yml\"\n\tprofiles: string[]; // list of profiles used\n}\n\n// ── Category → Profile Mapping ──────────────────────────────────────────────\n\nconst CATEGORY_PROFILE_MAP: Partial<Record<ServiceCategory, { file: string; profile: string }>> = {\n\tai: { file: \"docker-compose.ai.yml\", profile: \"ai\" },\n\t\"ai-platform\": { file: \"docker-compose.ai.yml\", profile: \"ai\" },\n\tmedia: { file: \"docker-compose.media.yml\", profile: \"media\" },\n\tmonitoring: { file: \"docker-compose.monitoring.yml\", profile: \"monitoring\" },\n\tanalytics: { file: \"docker-compose.monitoring.yml\", profile: \"monitoring\" },\n\t\"dev-tools\": { file: \"docker-compose.tools.yml\", profile: \"tools\" },\n\t\"coding-agent\": { file: \"docker-compose.tools.yml\", profile: \"tools\" },\n\t\"social-media\": { file: \"docker-compose.social.yml\", profile: \"social\" },\n\tknowledge: { file: \"docker-compose.knowledge.yml\", profile: \"knowledge\" },\n\tcommunication: { file: \"docker-compose.communication.yml\", profile: \"communication\" },\n};\n\nconst YAML_OPTIONS = { lineWidth: 120, nullStr: \"\" };\n\n// ── Shared Gateway Builder ──────────────────────────────────────────────────\n\ninterface GatewayBuildResult {\n\tgatewayService: Record<string, unknown>;\n\tcliService: Record<string, unknown>;\n\tallVolumes: Set<string>;\n}\n\n/**\n * Builds the OpenClaw gateway and CLI service entries.\n * Matches the real OpenClaw docker-compose.yml structure:\n * - Bridge port 18790 for ACP/WebSocket\n * - Bind-mount volumes (not named volumes)\n * - Claude web-provider session env vars\n * - Gateway bind mode (--bind lan)\n * - CLI companion service with stdin/tty\n */\nfunction buildGatewayServices(\n\tresolved: ResolverOutput,\n\toptions: ComposeOptions,\n\tdependsOn?: Record<string, { condition: string }>,\n): GatewayBuildResult {\n\tconst allVolumes = new Set<string>();\n\n\t// Gateway environment\n\tconst gatewayEnv: Record<string, string> = {\n\t\tHOME: \"/home/node\",\n\t\tTERM: \"xterm-256color\",\n\t\tOPENCLAW_GATEWAY_TOKEN: \"${OPENCLAW_GATEWAY_TOKEN}\",\n\t\t// Claude web-provider session vars (optional, user fills in .env)\n\t\tCLAUDE_AI_SESSION_KEY: \"${CLAUDE_AI_SESSION_KEY}\",\n\t\tCLAUDE_WEB_SESSION_KEY: \"${CLAUDE_WEB_SESSION_KEY}\",\n\t\tCLAUDE_WEB_COOKIE: \"${CLAUDE_WEB_COOKIE}\",\n\t};\n\n\t// Add AI provider API keys to gateway environment\n\tconst providerKeys = [\n\t\t\"OPENAI_API_KEY\",\n\t\t\"ANTHROPIC_API_KEY\",\n\t\t\"GOOGLE_API_KEY\",\n\t\t\"XAI_API_KEY\",\n\t\t\"DEEPSEEK_API_KEY\",\n\t\t\"GROQ_API_KEY\",\n\t\t\"OPENROUTER_API_KEY\",\n\t\t\"MISTRAL_API_KEY\",\n\t\t\"TOGETHER_API_KEY\",\n\t\t\"OLLAMA_API_KEY\",\n\t];\n\tfor (const key of providerKeys) {\n\t\tgatewayEnv[key] = `\\${${key}}`;\n\t}\n\n\t// Gateway volumes (bind-mount style matching real docker-setup.sh)\n\tconst gatewayVolumes: string[] = [\n\t\t\"${OPENCLAW_CONFIG_DIR:-./openclaw/config}:/home/node/.openclaw\",\n\t\t\"${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}:/home/node/.openclaw/workspace\",\n\t];\n\n\t// Collect env vars and volume mounts from companion services\n\tfor (const { definition: def } of resolved.services) {\n\t\tfor (const env of def.openclawEnvVars) {\n\t\t\tgatewayEnv[env.key] = env.secret ? `\\${${env.key}}` : env.defaultValue;\n\t\t}\n\t\tif (def.openclawVolumeMounts) {\n\t\t\tfor (const vol of def.openclawVolumeMounts) {\n\t\t\t\tconst isBindMount =\n\t\t\t\t\tvol.name.startsWith(\"./\") || vol.name.startsWith(\"/\") || vol.name.startsWith(\"~\");\n\t\t\t\tif (!isBindMount) {\n\t\t\t\t\tallVolumes.add(vol.name);\n\t\t\t\t}\n\t\t\t\tgatewayVolumes.push(`${vol.name}:${vol.containerPath}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Gateway service\n\tconst defaultImage = getOpenclawImage(\n\t\toptions.openclawImage ?? \"official\",\n\t\toptions.openclawVersion,\n\t);\n\tconst gateway: Record<string, unknown> = {\n\t\timage: `\\${OPENCLAW_IMAGE:-${defaultImage}}`,\n\t\tenvironment: gatewayEnv,\n\t\tvolumes: gatewayVolumes,\n\t\tports: [\"${OPENCLAW_GATEWAY_PORT:-18789}:18789\", \"${OPENCLAW_BRIDGE_PORT:-18790}:18790\"],\n\t\tnetworks: [\"openclaw-network\"],\n\t\tinit: true,\n\t\trestart: \"unless-stopped\",\n\t\tcommand: [\n\t\t\t\"node\",\n\t\t\t\"dist/index.js\",\n\t\t\t\"gateway\",\n\t\t\t\"--bind\",\n\t\t\t\"${OPENCLAW_GATEWAY_BIND:-lan}\",\n\t\t\t\"--port\",\n\t\t\t\"18789\",\n\t\t],\n\t};\n\n\t// Traefik labels for the gateway\n\tconst gwTraefikLabels = options.traefikLabels?.get(\"openclaw-gateway\");\n\tif (gwTraefikLabels) {\n\t\tgateway.labels = gwTraefikLabels;\n\t}\n\n\tif (options.bareMetalNativeHost) {\n\t\tgateway.extra_hosts = [\"host.docker.internal:host-gateway\"];\n\t}\n\n\tif (dependsOn && Object.keys(dependsOn).length > 0) {\n\t\tgateway.depends_on = dependsOn;\n\t}\n\n\t// CLI companion service (matching real OpenClaw docker-compose.yml)\n\t// Build CLI environment with same keys as gateway for consistency\n\tconst cliEnv: Record<string, string> = {\n\t\tHOME: \"/home/node\",\n\t\tTERM: \"xterm-256color\",\n\t\tOPENCLAW_GATEWAY_TOKEN: \"${OPENCLAW_GATEWAY_TOKEN}\",\n\t\t// Gateway connection: use Docker service name so CLI can reach the gateway over the bridge network\n\t\tOPENCLAW_GATEWAY_HOST: \"openclaw-gateway\",\n\t\tOPENCLAW_GATEWAY_PORT: \"18789\",\n\t\tBROWSER: \"echo\",\n\t\tCLAUDE_AI_SESSION_KEY: \"${CLAUDE_AI_SESSION_KEY}\",\n\t\tCLAUDE_WEB_SESSION_KEY: \"${CLAUDE_WEB_SESSION_KEY}\",\n\t\tCLAUDE_WEB_COOKIE: \"${CLAUDE_WEB_COOKIE}\",\n\t};\n\n\t// Add same AI provider API keys to CLI for direct AI interactions\n\tfor (const key of providerKeys) {\n\t\tcliEnv[key] = `\\${${key}}`;\n\t}\n\n\tconst cliService: Record<string, unknown> = {\n\t\timage: `\\${OPENCLAW_IMAGE:-${defaultImage}}`,\n\t\tenvironment: cliEnv,\n\t\tvolumes: [\n\t\t\t\"${OPENCLAW_CONFIG_DIR:-./openclaw/config}:/home/node/.openclaw\",\n\t\t\t\"${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}:/home/node/.openclaw/workspace\",\n\t\t],\n\t\tstdin_open: true,\n\t\ttty: true,\n\t\tinit: true,\n\t\tnetworks: [\"openclaw-network\"],\n\t\tentrypoint: [\"node\", \"dist/index.js\"],\n\t\t// CLI is interactive — don't auto-restart, but wait for gateway to be ready\n\t\trestart: \"no\",\n\t\tdepends_on: {\n\t\t\t\"openclaw-gateway\": { condition: \"service_started\" },\n\t\t},\n\t};\n\n\treturn { gatewayService: gateway, cliService: cliService, allVolumes };\n}\n\n// ── Shared Companion Service Builder ────────────────────────────────────────\n\nfunction buildCompanionService(\n\tdef: ResolverOutput[\"services\"][number][\"definition\"],\n\tresolved: ResolverOutput,\n\toptions: ComposeOptions,\n\tallVolumes: Set<string>,\n): { entry: Record<string, unknown>; volumeNames: string[] } {\n\tconst svc: Record<string, unknown> = {};\n\tconst volumeNames: string[] = [];\n\n\tsvc.image = `${def.image}:${def.imageTag}`;\n\n\tif (def.environment.length > 0) {\n\t\tconst env: Record<string, string> = {};\n\t\tfor (const e of def.environment) {\n\t\t\tenv[e.key] = e.secret ? `\\${${e.key}}` : e.defaultValue;\n\t\t}\n\t\tsvc.environment = env;\n\t}\n\n\tconst exposedPorts = def.ports.filter((p) => p.exposed);\n\tif (exposedPorts.length > 0) {\n\t\tconst prefix = def.id.toUpperCase().replace(/-/g, \"_\");\n\t\tsvc.ports = exposedPorts.map((p, i) => {\n\t\t\tconst suffix = exposedPorts.length > 1 ? `_${i}` : \"\";\n\t\t\tlet defaultPort = p.host;\n\n\t\t\t// Override proxy ports if custom ports are specified\n\t\t\tif (\n\t\t\t\t(def.id === \"caddy\" || def.id === \"traefik\") &&\n\t\t\t\toptions.proxyHttpPort !== undefined &&\n\t\t\t\tp.container === 80\n\t\t\t) {\n\t\t\t\tdefaultPort = options.proxyHttpPort;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(def.id === \"caddy\" || def.id === \"traefik\") &&\n\t\t\t\toptions.proxyHttpsPort !== undefined &&\n\t\t\t\tp.container === 443\n\t\t\t) {\n\t\t\t\tdefaultPort = options.proxyHttpsPort;\n\t\t\t}\n\n\t\t\t// Apply global port overrides if specified\n\t\t\tif (options.portOverrides?.[def.id]?.[p.host] !== undefined) {\n\t\t\t\tdefaultPort = options.portOverrides?.[def.id]?.[p.host] || p.host;\n\t\t\t}\n\n\t\t\t// Use _EXTERNAL_PORT to avoid colliding with openclawEnvVars _PORT keys.\n\t\t\t// openclawEnvVars define the container port (e.g. GRAFANA_PORT=3000 for\n\t\t\t// internal Docker networking), while these are host port mappings (e.g. 3150).\n\t\t\t// Without this, GRAFANA_PORT=3000 from .env would override the default\n\t\t\t// 3150 in ${GRAFANA_PORT:-3150}:3000, mapping host port 3000 instead.\n\t\t\treturn `\\${${prefix}_EXTERNAL_PORT${suffix}:-${defaultPort}}:${p.container}`;\n\t\t});\n\t}\n\n\tif (def.volumes.length > 0) {\n\t\tsvc.volumes = def.volumes.map((v) => {\n\t\t\tconst isBindMount =\n\t\t\t\tv.name.startsWith(\"./\") || v.name.startsWith(\"/\") || v.name.startsWith(\"~\");\n\n\t\t\tif (!isBindMount) {\n\t\t\t\tallVolumes.add(v.name);\n\t\t\t\tvolumeNames.push(v.name);\n\t\t\t}\n\t\t\treturn `${v.name}:${v.containerPath}`;\n\t\t});\n\t}\n\n\t// PostgreSQL: mount the init script and pass per-service DB passwords\n\tif (def.id === \"postgresql\") {\n\t\tif (!svc.volumes) svc.volumes = [];\n\t\t(svc.volumes as string[]).push(\n\t\t\t\"./postgres/init-databases.sh:/docker-entrypoint-initdb.d/init-databases.sh:ro\",\n\t\t);\n\n\t\t// Pass per-service database password env vars so the init script can use them\n\t\tconst dbReqs = getDbRequirements(resolved);\n\t\tif (dbReqs.length > 0) {\n\t\t\tconst env = (svc.environment ?? {}) as Record<string, string>;\n\t\t\tfor (const req of dbReqs) {\n\t\t\t\tenv[req.passwordEnvVar] = `\\${${req.passwordEnvVar}}`;\n\t\t\t}\n\t\t\tsvc.environment = env;\n\t\t}\n\t}\n\n\tif (def.healthcheck) {\n\t\tconst hc: Record<string, unknown> = {\n\t\t\ttest: [\"CMD-SHELL\", def.healthcheck.test],\n\t\t\tinterval: def.healthcheck.interval,\n\t\t\ttimeout: def.healthcheck.timeout,\n\t\t\tretries: def.healthcheck.retries,\n\t\t};\n\t\tif (def.healthcheck.startPeriod) {\n\t\t\thc.start_period = def.healthcheck.startPeriod;\n\t\t}\n\t\tsvc.healthcheck = hc;\n\t}\n\n\tsvc.restart = def.restartPolicy;\n\tsvc.networks = def.networks;\n\n\tif (def.command) svc.command = def.command;\n\tif (def.entrypoint) svc.entrypoint = def.entrypoint;\n\n\t// Labels: merge static definition labels with dynamic Traefik labels\n\tconst mergedLabels: Record<string, string> = {};\n\tif (def.labels) Object.assign(mergedLabels, def.labels);\n\tconst traefikLabels = options.traefikLabels?.get(def.id);\n\tif (traefikLabels) Object.assign(mergedLabels, traefikLabels);\n\tif (Object.keys(mergedLabels).length > 0) svc.labels = mergedLabels;\n\n\t// Traefik: bind-mount static config and Docker socket\n\tif (def.id === \"traefik\" && options.traefikLabels) {\n\t\tif (!svc.volumes) svc.volumes = [];\n\t\t(svc.volumes as string[]).push(\n\t\t\t\"./traefik/traefik.yml:/etc/traefik/traefik.yml:ro\",\n\t\t\t\"/var/run/docker.sock:/var/run/docker.sock:ro\",\n\t\t);\n\t}\n\n\tlet deploy: Record<string, unknown> | undefined;\n\tif (def.deploy) {\n\t\tdeploy = JSON.parse(JSON.stringify(def.deploy)) as Record<string, unknown>;\n\t}\n\tif (options.gpu && def.gpuRequired) {\n\t\tconst base = deploy ?? {};\n\t\tconst resources = (base.resources ?? {}) as Record<string, unknown>;\n\t\tdeploy = {\n\t\t\t...base,\n\t\t\tresources: {\n\t\t\t\t...resources,\n\t\t\t\treservations: {\n\t\t\t\t\t...((resources.reservations as Record<string, unknown>) ?? {}),\n\t\t\t\t\tdevices: [{ driver: \"nvidia\", count: \"all\", capabilities: [\"gpu\"] }],\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\t// Memory limits from estimatedMemoryMB\n\tif (def.minMemoryMB && options.hardened) {\n\t\tconst base = deploy ?? {};\n\t\tconst resources = (base.resources ?? {}) as Record<string, unknown>;\n\t\tconst limits = (resources.limits as Record<string, unknown>) ?? {};\n\t\tdeploy = {\n\t\t\t...base,\n\t\t\tresources: {\n\t\t\t\t...resources,\n\t\t\t\tlimits: {\n\t\t\t\t\t...limits,\n\t\t\t\t\tmemory: `${def.minMemoryMB * 2}m`, // 2x min as safe limit\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\tif (deploy) svc.deploy = deploy;\n\n\t// Security hardening (when enabled)\n\tif (options.hardened) {\n\t\tsvc.cap_drop = [\"ALL\"];\n\t\tsvc.security_opt = [\"no-new-privileges:true\"];\n\n\t\t// Services that need specific capabilities\n\t\tconst capAddMap: Record<string, string[]> = {\n\t\t\tcaddy: [\"NET_BIND_SERVICE\"],\n\t\t\ttraefik: [\"NET_BIND_SERVICE\"],\n\t\t\tcrowdsec: [\"NET_BIND_SERVICE\", \"DAC_READ_SEARCH\"],\n\t\t};\n\t\tif (capAddMap[def.id]) {\n\t\t\tsvc.cap_add = capAddMap[def.id];\n\t\t}\n\t}\n\n\t// Merge both dependsOn and requires to ensure proper Docker startup ordering\n\tconst depIds = [...new Set([...def.dependsOn, ...def.requires])].filter((id) =>\n\t\tresolved.services.some((s) => s.definition.id === id),\n\t);\n\tif (depIds.length > 0) {\n\t\tconst dependsOn: Record<string, { condition: string }> = {};\n\t\tfor (const depId of depIds) {\n\t\t\tconst dep = resolved.services.find((s) => s.definition.id === depId);\n\t\t\tdependsOn[depId] = {\n\t\t\t\tcondition: dep?.definition.healthcheck ? \"service_healthy\" : \"service_started\",\n\t\t\t};\n\t\t}\n\t\tsvc.depends_on = dependsOn;\n\t}\n\n\treturn { entry: svc, volumeNames };\n}\n\n// ── PostgreSQL Setup Init Container ─────────────────────────────────────────\n\n/**\n * Builds a one-shot init container that creates databases and users for\n * services that need their own PostgreSQL database. Runs AFTER PostgreSQL\n * is healthy, on every `docker compose up`, and is idempotent.\n *\n * Uses standard PG* environment variables (PGHOST, PGUSER, PGDATABASE,\n * PGPASSWORD) so psql/createuser/createdb automatically connect without\n * needing explicit -h/-U/-d flags — simpler and avoids YAML escaping issues.\n *\n * Returns null when no setup is needed (no PostgreSQL or no DB requirements).\n */\nfunction buildPostgresSetup(resolved: ResolverOutput): Record<string, unknown> | null {\n\tconst hasPostgres = resolved.services.some((s) => s.definition.id === \"postgresql\");\n\tif (!hasPostgres) return null;\n\n\tconst dbReqs = getDbRequirements(resolved);\n\tif (dbReqs.length === 0) return null;\n\n\t// Build a shell script with one command per line.\n\t// Uses $$ to escape $ from Docker Compose's variable substitution —\n\t// Docker Compose converts $$ → $ before passing to the container.\n\t// NO set -e: we handle errors explicitly so one failed service doesn't block others.\n\tconst scriptLines = [\"echo '=== PostgreSQL database setup ==='\", \"FAILED=0\"];\n\n\tfor (const req of dbReqs) {\n\t\t// Each service's setup is wrapped so a failure doesn't block the others.\n\t\t// Uses psql -v ON_ERROR_STOP=0 so SQL errors don't abort psql.\n\t\tscriptLines.push(\n\t\t\t`echo \"Setting up database '${req.dbName}' with user '${req.dbUser}'...\"`,\n\t\t\t// Create user if not exists (pure SQL, no createuser binary quirks)\n\t\t\t`psql -c \"SELECT 1 FROM pg_roles WHERE rolname='${req.dbUser}'\" | grep -q 1 || psql -c \"CREATE ROLE ${req.dbUser} WITH LOGIN PASSWORD '$$${req.passwordEnvVar}'\"`,\n\t\t\t// Always sync the password to match current env\n\t\t\t`psql -c \"ALTER ROLE ${req.dbUser} WITH LOGIN PASSWORD '$$${req.passwordEnvVar}'\"`,\n\t\t\t// Create database if not exists\n\t\t\t`psql -tc \"SELECT 1 FROM pg_database WHERE datname='${req.dbName}'\" | grep -q 1 || psql -c \"CREATE DATABASE ${req.dbName} OWNER ${req.dbUser}\"`,\n\t\t\t// Grant privileges (idempotent)\n\t\t\t`psql -c \"GRANT ALL PRIVILEGES ON DATABASE ${req.dbName} TO ${req.dbUser}\" || FAILED=1`,\n\t\t\t`echo \" Done: ${req.dbName}\"`,\n\t\t);\n\t}\n\n\tscriptLines.push(\"echo '=== All databases ready ==='\", \"exit $$FAILED\");\n\n\t// Standard PG* env vars: psql/createuser/createdb use these automatically\n\tconst env: Record<string, string> = {\n\t\tPGHOST: \"postgresql\",\n\t\tPGUSER: \"${POSTGRES_USER:-openclaw}\",\n\t\tPGDATABASE: \"${POSTGRES_DB:-openclaw}\",\n\t\tPGPASSWORD: \"${POSTGRES_PASSWORD}\",\n\t};\n\tfor (const req of dbReqs) {\n\t\tenv[req.passwordEnvVar] = `\\${${req.passwordEnvVar}}`;\n\t}\n\n\treturn {\n\t\timage: \"postgres:17-alpine\",\n\t\tdepends_on: {\n\t\t\tpostgresql: { condition: \"service_healthy\" },\n\t\t},\n\t\tenvironment: env,\n\t\t// command MUST be a single-element array so the entire script is passed\n\t\t// as ONE argument to `sh -c`. A plain string gets shlex-split by Docker\n\t\t// Compose into multiple args, breaking multi-line scripts.\n\t\tentrypoint: [\"/bin/sh\", \"-c\"],\n\t\tcommand: [scriptLines.join(\"\\n\")],\n\t\trestart: quotedStr(\"no\"),\n\t\tnetworks: [\"openclaw-network\"],\n\t};\n}\n\n// ── Single-File Compose ─────────────────────────────────────────────────────\n\n/**\n * Generates a single Docker Compose YAML string with ALL services.\n * Backward-compatible signature.\n */\nexport function compose(resolved: ResolverOutput, options: ComposeOptions): string {\n\tconst isDirectInstall = options.openclawInstallMethod === \"direct\";\n\n\t// Build depends_on for ALL companion services\n\tconst gatewayDependsOn: Record<string, { condition: string }> = {};\n\tfor (const { definition: def } of resolved.services) {\n\t\tgatewayDependsOn[def.id] = {\n\t\t\tcondition: def.healthcheck ? \"service_healthy\" : \"service_started\",\n\t\t};\n\t}\n\n\tconst services: Record<string, Record<string, unknown>> = {};\n\tlet allVolumes = new Set<string>();\n\n\tif (!isDirectInstall) {\n\t\tconst {\n\t\t\tgatewayService,\n\t\t\tcliService,\n\t\t\tallVolumes: gwVolumes,\n\t\t} = buildGatewayServices(resolved, options, gatewayDependsOn);\n\t\tallVolumes = gwVolumes;\n\t\tservices[\"openclaw-gateway\"] = gatewayService;\n\t\t// CLI service added after companions\n\t\t// Determine which services need DB setup so we can redirect their depends_on\n\t\tconst dbReqs = getDbRequirements(resolved);\n\t\tconst dbServiceIds = new Set(dbReqs.map((r) => r.serviceId));\n\n\t\tfor (const { definition: def } of resolved.services) {\n\t\t\tconst { entry } = buildCompanionService(def, resolved, options, allVolumes);\n\t\t\tif (dbServiceIds.has(def.id) && entry.depends_on) {\n\t\t\t\tconst deps = entry.depends_on as Record<string, { condition: string }>;\n\t\t\t\tif (deps.postgresql) {\n\t\t\t\t\tdelete deps.postgresql;\n\t\t\t\t\tdeps[\"postgres-setup\"] = { condition: \"service_completed_successfully\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\tservices[def.id] = entry;\n\t\t}\n\n\t\tconst pgSetup = buildPostgresSetup(resolved);\n\t\tif (pgSetup) {\n\t\t\tservices[\"postgres-setup\"] = pgSetup;\n\t\t}\n\n\t\tservices[\"openclaw-cli\"] = cliService;\n\t} else {\n\t\t// Direct install: no gateway/CLI containers, just companion services\n\t\tconst dbReqs = getDbRequirements(resolved);\n\t\tconst dbServiceIds = new Set(dbReqs.map((r) => r.serviceId));\n\n\t\tfor (const { definition: def } of resolved.services) {\n\t\t\tconst { entry } = buildCompanionService(def, resolved, options, allVolumes);\n\t\t\tif (dbServiceIds.has(def.id) && entry.depends_on) {\n\t\t\t\tconst deps = entry.depends_on as Record<string, { condition: string }>;\n\t\t\t\tif (deps.postgresql) {\n\t\t\t\t\tdelete deps.postgresql;\n\t\t\t\t\tdeps[\"postgres-setup\"] = { condition: \"service_completed_successfully\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\tservices[def.id] = entry;\n\t\t}\n\n\t\tconst pgSetup = buildPostgresSetup(resolved);\n\t\tif (pgSetup) {\n\t\t\tservices[\"postgres-setup\"] = pgSetup;\n\t\t}\n\t}\n\n\tconst volumes: Record<string, null> = {};\n\tfor (const v of [...allVolumes].sort()) {\n\t\tvolumes[v] = null;\n\t}\n\n\tconst networks = { \"openclaw-network\": { driver: \"bridge\" } };\n\n\treturn stringify({ services, volumes, networks }, YAML_OPTIONS);\n}\n\n// ── Multi-File Compose ──────────────────────────────────────────────────────\n\ninterface ServiceInfo {\n\tid: string;\n\tcategory: ServiceCategory;\n\tentry: Record<string, unknown>;\n\tvolumeNames: string[];\n}\n\n/**\n * Generates multiple Docker Compose files, splitting services into profile-based\n * override files by category.\n */\nexport function composeMultiFile(resolved: ResolverOutput, options: ComposeOptions): ComposeResult {\n\tconst isDirectInstall = options.openclawInstallMethod === \"direct\";\n\tconst allVolumes = new Set<string>();\n\n\t// Build all companion service entries & classify by category\n\tconst serviceInfos: ServiceInfo[] = [];\n\tconst dbReqs = getDbRequirements(resolved);\n\tconst dbServiceIds = new Set(dbReqs.map((r) => r.serviceId));\n\n\tfor (const { definition: def } of resolved.services) {\n\t\tconst { entry, volumeNames } = buildCompanionService(def, resolved, options, allVolumes);\n\t\t// Redirect DB-dependent services to depend on postgres-setup\n\t\tif (dbServiceIds.has(def.id) && entry.depends_on) {\n\t\t\tconst deps = entry.depends_on as Record<string, { condition: string }>;\n\t\t\tif (deps.postgresql) {\n\t\t\t\tdelete deps.postgresql;\n\t\t\t\tdeps[\"postgres-setup\"] = { condition: \"service_completed_successfully\" };\n\t\t\t}\n\t\t}\n\t\tserviceInfos.push({ id: def.id, category: def.category, entry, volumeNames });\n\t}\n\n\t// Partition services into base vs. profile files\n\tconst baseServiceIds = new Set<string>();\n\tconst profileFileMap: Record<string, { profile: string; services: ServiceInfo[] }> = {};\n\n\tfor (const info of serviceInfos) {\n\t\tconst mapping = CATEGORY_PROFILE_MAP[info.category];\n\t\tif (mapping) {\n\t\t\tif (!profileFileMap[mapping.file]) {\n\t\t\t\tprofileFileMap[mapping.file] = { profile: mapping.profile, services: [] };\n\t\t\t}\n\t\t\tprofileFileMap[mapping.file]!.services.push(info);\n\t\t} else {\n\t\t\tbaseServiceIds.add(info.id);\n\t\t}\n\t}\n\n\tconst baseServices: Record<string, Record<string, unknown>> = {};\n\n\tif (!isDirectInstall) {\n\t\t// Gateway depends_on (only base services)\n\t\tconst gatewayDependsOn: Record<string, { condition: string }> = {};\n\t\tfor (const { definition: def } of resolved.services) {\n\t\t\tif (baseServiceIds.has(def.id)) {\n\t\t\t\tgatewayDependsOn[def.id] = {\n\t\t\t\t\tcondition: def.healthcheck ? \"service_healthy\" : \"service_started\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst {\n\t\t\tgatewayService,\n\t\t\tcliService,\n\t\t\tallVolumes: gwVolumes,\n\t\t} = buildGatewayServices(resolved, options, gatewayDependsOn);\n\n\t\t// Merge gateway volumes into allVolumes\n\t\tfor (const v of gwVolumes) allVolumes.add(v);\n\n\t\tbaseServices[\"openclaw-gateway\"] = gatewayService;\n\n\t\tfor (const info of serviceInfos) {\n\t\t\tif (baseServiceIds.has(info.id)) {\n\t\t\t\tbaseServices[info.id] = info.entry;\n\t\t\t}\n\t\t}\n\n\t\t// Add postgres-setup init container if needed\n\t\tconst pgSetup = buildPostgresSetup(resolved);\n\t\tif (pgSetup) {\n\t\t\tbaseServices[\"postgres-setup\"] = pgSetup;\n\t\t}\n\n\t\tbaseServices[\"openclaw-cli\"] = cliService;\n\t} else {\n\t\t// Direct install: no gateway/CLI containers\n\t\tfor (const info of serviceInfos) {\n\t\t\tif (baseServiceIds.has(info.id)) {\n\t\t\t\tbaseServices[info.id] = info.entry;\n\t\t\t}\n\t\t}\n\n\t\tconst pgSetup = buildPostgresSetup(resolved);\n\t\tif (pgSetup) {\n\t\t\tbaseServices[\"postgres-setup\"] = pgSetup;\n\t\t}\n\t}\n\n\tconst sortedAllVolumes: Record<string, null> = {};\n\tfor (const v of [...allVolumes].sort()) {\n\t\tsortedAllVolumes[v] = null;\n\t}\n\n\tconst networks = { \"openclaw-network\": { driver: \"bridge\" } };\n\n\tconst files: Record<string, string> = {};\n\tfiles[\"docker-compose.yml\"] = stringify(\n\t\t{ services: baseServices, volumes: sortedAllVolumes, networks },\n\t\tYAML_OPTIONS,\n\t);\n\n\t// Profile override files\n\tconst usedProfiles = new Set<string>();\n\n\tfor (const [fileName, { profile, services }] of Object.entries(profileFileMap)) {\n\t\tusedProfiles.add(profile);\n\n\t\tconst profileServices: Record<string, Record<string, unknown>> = {};\n\t\tconst profileVolumes = new Set<string>();\n\n\t\tfor (const info of services) {\n\t\t\tprofileServices[info.id] = { ...info.entry, profiles: [profile] };\n\t\t\tfor (const vName of info.volumeNames) {\n\t\t\t\tprofileVolumes.add(vName);\n\t\t\t}\n\t\t}\n\n\t\tconst fileContent: Record<string, unknown> = { services: profileServices };\n\n\t\tif (profileVolumes.size > 0) {\n\t\t\tconst sortedProfileVolumes: Record<string, null> = {};\n\t\t\tfor (const v of [...profileVolumes].sort()) {\n\t\t\t\tsortedProfileVolumes[v] = null;\n\t\t\t}\n\t\t\tfileContent.volumes = sortedProfileVolumes;\n\t\t}\n\n\t\tfiles[fileName] = stringify(fileContent, YAML_OPTIONS);\n\t}\n\n\treturn {\n\t\tfiles,\n\t\tmainFile: \"docker-compose.yml\",\n\t\tprofiles: [...usedProfiles].sort(),\n\t};\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComposeOptions, ResolverOutput } from "./types.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/composer.d.ts
|
|
4
|
+
interface ComposeResult {
|
|
5
|
+
files: Record<string, string>;
|
|
6
|
+
mainFile: string;
|
|
7
|
+
profiles: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generates a single Docker Compose YAML string with ALL services.
|
|
11
|
+
* Backward-compatible signature.
|
|
12
|
+
*/
|
|
13
|
+
declare function compose(resolved: ResolverOutput, options: ComposeOptions): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generates multiple Docker Compose files, splitting services into profile-based
|
|
16
|
+
* override files by category.
|
|
17
|
+
*/
|
|
18
|
+
declare function composeMultiFile(resolved: ResolverOutput, options: ComposeOptions): ComposeResult;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { ComposeResult, compose, composeMultiFile };
|
|
21
|
+
//# sourceMappingURL=composer.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.d.cts","names":[],"sources":["../src/composer.ts"],"mappings":";;;UAiCiB,aAAA;EAChB,KAAA,EAAO,MAAA;EACP,QAAA;EACA,QAAA;AAAA;;;;;iBA+be,OAAA,CAAQ,QAAA,EAAU,cAAA,EAAgB,OAAA,EAAS,cAAA;;;AAA3D;;iBA2FgB,gBAAA,CAAiB,QAAA,EAAU,cAAA,EAAgB,OAAA,EAAS,cAAA,GAAiB,aAAA"}
|
package/dist/composer.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer.d.mts","names":[],"sources":["../src/composer.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"composer.d.mts","names":[],"sources":["../src/composer.ts"],"mappings":";;;UAiCiB,aAAA;EAChB,KAAA,EAAO,MAAA;EACP,QAAA;EACA,QAAA;AAAA;;;;;iBA+be,OAAA,CAAQ,QAAA,EAAU,cAAA,EAAgB,OAAA,EAAS,cAAA;;;AAA3D;;iBA2FgB,gBAAA,CAAiB,QAAA,EAAU,cAAA,EAAgB,OAAA,EAAS,cAAA,GAAiB,aAAA"}
|