@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 @@
|
|
|
1
|
+
{"version":3,"file":"bare-metal-install.cjs","names":[],"sources":["../../src/generators/bare-metal-install.ts"],"sourcesContent":["/**\n * Generates platform-specific installer scripts for bare-metal (VPS, computer) deployment.\n * Each script ensures Docker and Docker Compose are installed, then runs the stack.\n * Returns a map of one file: install.sh (Linux/macOS) or install.ps1 (Windows).\n */\nimport type { Platform } from \"../types.js\";\n\nconst LINUX_SCRIPT_PREFIX_NATIVE = `\n# Native services (install/start on host first)\nif [ -f \"native/install-linux.sh\" ]; then\n info \"Installing and starting native services...\"\n bash native/install-linux.sh\n ok \"Native services ready.\"\nfi\n`;\n\nconst LINUX_SCRIPT = `#!/usr/bin/env bash\nset -euo pipefail\n\n# OpenClaw bare-metal installer (Linux)\n# Optionally runs native services script, then Docker + Compose.\n# Idempotent: safe to re-run.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\nif [ -t 1 ]; then\n RED='\\\\033[0;31m'; GREEN='\\\\033[0;32m'; YELLOW='\\\\033[1;33m'; CYAN='\\\\033[0;36m'; NC='\\\\033[0m'\nelse\n RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''\nfi\ninfo() { echo -e \"\\${CYAN}ℹ $*\\${NC}\"; }\nok() { echo -e \"\\${GREEN}✅ $*\\${NC}\"; }\nwarn() { echo -e \"\\${YELLOW}⚠️ $*\\${NC}\"; }\nerr() { echo -e \"\\${RED}❌ $*\\${NC}\" >&2; }\n__NATIVE_BLOCK__\n# Install Docker if missing\nif ! command -v docker &> /dev/null; then\n info \"Installing Docker...\"\n if command -v apt-get &> /dev/null; then\n sudo apt-get update -qq\n sudo apt-get install -y -qq ca-certificates curl\n curl -fsSL https://get.docker.com | sudo sh\n sudo usermod -aG docker \"$USER\" 2>/dev/null || true\n ok \"Docker installed. You may need to log out and back in for group changes.\"\n elif command -v dnf &> /dev/null || command -v yum &> /dev/null; then\n sudo dnf install -y dnf-plugins-core 2>/dev/null || sudo yum install -y yum-utils\n sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 2>/dev/null || sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin 2>/dev/null || sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin\n sudo systemctl enable --now docker\n sudo usermod -aG docker \"$USER\" 2>/dev/null || true\n ok \"Docker installed.\"\n else\n err \"Unsupported package manager. Install Docker manually: https://docs.docker.com/engine/install/\"\n exit 1\n fi\nelse\n ok \"Docker already installed.\"\nfi\n\nif ! docker compose version &> /dev/null; then\n err \"Docker Compose (v2) plugin not found. Install it: https://docs.docker.com/compose/install/\"\n exit 1\nfi\n\nif ! docker info &> /dev/null 2>&1; then\n err \"Docker daemon not running. Start it (e.g. sudo systemctl start docker) and re-run this script.\"\n exit 1\nfi\n\n# Use project start script if present, else docker compose up\nif [ -f \"scripts/start.sh\" ]; then\n info \"Starting stack via scripts/start.sh...\"\n bash scripts/start.sh\nelse\n if [ -f \".env.example\" ] && [ ! -f \".env\" ]; then cp .env.example .env; fi\n info \"Starting stack...\"\n docker compose up -d --remove-orphans\n echo \"\"\n ok \"Stack started. Gateway: http://localhost:\\${OPENCLAW_GATEWAY_PORT:-18789}\"\nfi\n`;\n\nconst MACOS_SCRIPT_PREFIX_NATIVE = `\nif [ -f \"native/install-macos.sh\" ]; then\n info \"Installing and starting native services...\"\n bash native/install-macos.sh\n ok \"Native services ready.\"\nfi\n`;\n\nconst MACOS_SCRIPT = `#!/usr/bin/env bash\nset -euo pipefail\n\n# OpenClaw bare-metal installer (macOS)\n# Optionally runs native services, then Docker Desktop + compose.\n# Idempotent: safe to re-run.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\nif [ -t 1 ]; then\n RED='\\\\033[0;31m'; GREEN='\\\\033[0;32m'; YELLOW='\\\\033[1;33m'; CYAN='\\\\033[0;36m'; NC='\\\\033[0m'\nelse\n RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''\nfi\ninfo() { echo -e \"\\${CYAN}ℹ $*\\${NC}\"; }\nok() { echo -e \"\\${GREEN}✅ $*\\${NC}\"; }\nwarn() { echo -e \"\\${YELLOW}⚠️ $*\\${NC}\"; }\nerr() { echo -e \"\\${RED}❌ $*\\${NC}\" >&2; }\n__NATIVE_BLOCK__\nif ! command -v docker &> /dev/null; then\n if command -v brew &> /dev/null; then\n info \"Installing Docker via Homebrew...\"\n brew install --cask docker\n warn \"Docker Desktop was installed. Please open Docker from Applications, then re-run this script.\"\n exit 0\n else\n err \"Docker not found. Install Docker Desktop from https://docs.docker.com/desktop/install/mac-install/ or run: brew install --cask docker\"\n exit 1\n fi\nfi\n\nif ! docker info &> /dev/null 2>&1; then\n err \"Docker daemon not running. Open Docker Desktop from Applications, then re-run this script.\"\n exit 1\nfi\n\nif ! docker compose version &> /dev/null; then\n err \"Docker Compose (v2) not available. Ensure Docker Desktop is up to date.\"\n exit 1\nfi\n\nif [ -f \"scripts/start.sh\" ]; then\n info \"Starting stack via scripts/start.sh...\"\n bash scripts/start.sh\nelse\n if [ -f \".env.example\" ] && [ ! -f \".env\" ]; then cp .env.example .env; fi\n info \"Starting stack...\"\n docker compose up -d --remove-orphans\n echo \"\"\n ok \"Stack started. Gateway: http://localhost:\\${OPENCLAW_GATEWAY_PORT:-18789}\"\nfi\n`;\n\nconst WINDOWS_SCRIPT_PREFIX_NATIVE = `\nif (Test-Path \"native/install-windows.ps1\") {\n Info \"Installing and starting native services...\"\n & .\\\\native\\\\install-windows.ps1\n Ok \"Native services ready.\"\n}\n`;\n\nconst WINDOWS_SCRIPT = `# OpenClaw bare-metal installer (Windows PowerShell)\n# Optionally runs native services, then Docker Desktop + compose.\n# Idempotent: safe to re-run. Run in PowerShell as Administrator if installing Docker.\n\n$ErrorActionPreference = \"Stop\"\n$ProjectDir = $PSScriptRoot\nSet-Location $ProjectDir\n\nfunction Info { Write-Host \" $args\" -ForegroundColor Cyan }\nfunction Ok { Write-Host \" $args\" -ForegroundColor Green }\nfunction Warn { Write-Host \" $args\" -ForegroundColor Yellow }\nfunction Err { Write-Host \" $args\" -ForegroundColor Red; exit 1 }\n__NATIVE_BLOCK__\n# Check Docker\n$docker = Get-Command docker -ErrorAction SilentlyContinue\nif (-not $docker) {\n Write-Host \"\"\n Write-Host \" Docker not found.\" -ForegroundColor Red\n Write-Host \" Install Docker Desktop from: https://docs.docker.com/desktop/install/windows-install/\"\n Write-Host \" Then restart PowerShell and run this script again.\"\n exit 1\n}\n\ntry { docker info 2>$null | Out-Null } catch {\n Write-Host \"\"\n Write-Host \" Docker daemon is not running.\" -ForegroundColor Red\n Write-Host \" Start Docker Desktop from the Start menu, then run this script again.\"\n exit 1\n}\n\ntry { docker compose version 2>$null | Out-Null } catch {\n Write-Host \"\"\n Write-Host \" Docker Compose (v2) not available. Update Docker Desktop.\" -ForegroundColor Red\n exit 1\n}\n\nOk \"Docker is ready.\"\n\n# Prepare .env\nif (-not (Test-Path \".env\")) {\n if (Test-Path \".env.example\") {\n Copy-Item \".env.example\" \".env\"\n Info \"Created .env from .env.example\"\n }\n}\n\n# Create dirs\n$configDir = if ($env:OPENCLAW_CONFIG_DIR) { $env:OPENCLAW_CONFIG_DIR } else { \"./openclaw/config\" }\n$workspaceDir = if ($env:OPENCLAW_WORKSPACE_DIR) { $env:OPENCLAW_WORKSPACE_DIR } else { \"./openclaw/workspace\" }\nNew-Item -ItemType Directory -Force -Path $configDir | Out-Null\nNew-Item -ItemType Directory -Force -Path $workspaceDir | Out-Null\nOk \"Directories ready.\"\n\n# Start stack\nInfo \"Starting stack...\"\ndocker compose up -d --remove-orphans\n\n$port = if ($env:OPENCLAW_GATEWAY_PORT) { $env:OPENCLAW_GATEWAY_PORT } else { \"18789\" }\nWrite-Host \"\"\nOk \"Stack started. Gateway: http://localhost:$port\"\n`;\n\nexport interface BareMetalInstallOptions {\n\tplatform: Platform;\n\tprojectName: string;\n\t/** When true, top-level script runs native/install-*.sh|ps1 first, then Docker + compose. */\n\thasNativeServices?: boolean;\n}\n\n/**\n * Returns one file: install.sh (Linux/macOS) or install.ps1 (Windows).\n * When hasNativeServices is true, the script runs the native installer first, then Docker + compose.\n */\nexport function generateBareMetalInstall(options: BareMetalInstallOptions): Record<string, string> {\n\tconst { platform, hasNativeServices } = options;\n\tconst files: Record<string, string> = {};\n\n\tif (platform === \"windows/amd64\") {\n\t\tconst script = hasNativeServices\n\t\t\t? WINDOWS_SCRIPT.replace(\"__NATIVE_BLOCK__\", WINDOWS_SCRIPT_PREFIX_NATIVE)\n\t\t\t: WINDOWS_SCRIPT.replace(\"__NATIVE_BLOCK__\", \"\");\n\t\tfiles[\"install.ps1\"] = script;\n\t\treturn files;\n\t}\n\n\tconst isMac = platform.startsWith(\"macos/\");\n\tconst baseScript = isMac ? MACOS_SCRIPT : LINUX_SCRIPT;\n\tconst prefix = hasNativeServices\n\t\t? isMac\n\t\t\t? MACOS_SCRIPT_PREFIX_NATIVE\n\t\t\t: LINUX_SCRIPT_PREFIX_NATIVE\n\t\t: \"\";\n\tconst script = baseScript.replace(\"__NATIVE_BLOCK__\", prefix);\n\tfiles[\"install.sh\"] = script;\n\treturn files;\n}\n"],"mappings":";;;AAOA,MAAM,6BAA6B;;;;;;;;AASnC,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmErB,MAAM,6BAA6B;;;;;;;AAQnC,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDrB,MAAM,+BAA+B;;;;;;;AAQrC,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEvB,SAAgB,yBAAyB,SAA0D;CAClG,MAAM,EAAE,UAAU,sBAAsB;CACxC,MAAM,QAAgC,EAAE;AAExC,KAAI,aAAa,iBAAiB;AAIjC,QAAM,iBAHS,oBACZ,eAAe,QAAQ,oBAAoB,6BAA6B,GACxE,eAAe,QAAQ,oBAAoB,GAAG;AAEjD,SAAO;;CAGR,MAAM,QAAQ,SAAS,WAAW,SAAS;CAC3C,MAAM,aAAa,QAAQ,eAAe;CAC1C,MAAM,SAAS,oBACZ,QACC,6BACA,6BACD;AAEH,OAAM,gBADS,WAAW,QAAQ,oBAAoB,OAAO;AAE7D,QAAO"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Platform } from "../types.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/generators/bare-metal-install.d.ts
|
|
4
|
+
interface BareMetalInstallOptions {
|
|
5
|
+
platform: Platform;
|
|
6
|
+
projectName: string;
|
|
7
|
+
/** When true, top-level script runs native/install-*.sh|ps1 first, then Docker + compose. */
|
|
8
|
+
hasNativeServices?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns one file: install.sh (Linux/macOS) or install.ps1 (Windows).
|
|
12
|
+
* When hasNativeServices is true, the script runs the native installer first, then Docker + compose.
|
|
13
|
+
*/
|
|
14
|
+
declare function generateBareMetalInstall(options: BareMetalInstallOptions): Record<string, string>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { BareMetalInstallOptions, generateBareMetalInstall };
|
|
17
|
+
//# sourceMappingURL=bare-metal-install.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bare-metal-install.d.cts","names":[],"sources":["../../src/generators/bare-metal-install.ts"],"mappings":";;;UAuNiB,uBAAA;EAChB,QAAA,EAAU,QAAA;EACV,WAAA;EAAA;EAEA,iBAAA;AAAA;;AAOD;;;iBAAgB,wBAAA,CAAyB,OAAA,EAAS,uBAAA,GAA0B,MAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const require_vi_2VT5v0um = require('../vi.2VT5v0um-BmRMvymT.cjs');
|
|
2
|
+
const require_generators_bare_metal_install = require('./bare-metal-install.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/generators/bare-metal-install.test.ts
|
|
5
|
+
require_vi_2VT5v0um.describe("generateBareMetalInstall", () => {
|
|
6
|
+
require_vi_2VT5v0um.it("returns install.ps1 for windows/amd64", () => {
|
|
7
|
+
const result = require_generators_bare_metal_install.generateBareMetalInstall({
|
|
8
|
+
platform: "windows/amd64",
|
|
9
|
+
projectName: "my-stack"
|
|
10
|
+
});
|
|
11
|
+
require_vi_2VT5v0um.globalExpect(result).toHaveProperty("install.ps1");
|
|
12
|
+
require_vi_2VT5v0um.globalExpect(Object.keys(result)).toHaveLength(1);
|
|
13
|
+
require_vi_2VT5v0um.globalExpect(result["install.ps1"]).toContain("docker compose");
|
|
14
|
+
require_vi_2VT5v0um.globalExpect(result["install.ps1"]).toContain("PowerShell");
|
|
15
|
+
});
|
|
16
|
+
require_vi_2VT5v0um.it("returns install.sh for linux/amd64", () => {
|
|
17
|
+
const result = require_generators_bare_metal_install.generateBareMetalInstall({
|
|
18
|
+
platform: "linux/amd64",
|
|
19
|
+
projectName: "my-stack"
|
|
20
|
+
});
|
|
21
|
+
require_vi_2VT5v0um.globalExpect(result).toHaveProperty("install.sh");
|
|
22
|
+
require_vi_2VT5v0um.globalExpect(Object.keys(result)).toHaveLength(1);
|
|
23
|
+
require_vi_2VT5v0um.globalExpect(result["install.sh"]).toContain("docker");
|
|
24
|
+
require_vi_2VT5v0um.globalExpect(result["install.sh"]).toContain("compose");
|
|
25
|
+
});
|
|
26
|
+
require_vi_2VT5v0um.it("returns install.sh for linux/arm64", () => {
|
|
27
|
+
const result = require_generators_bare_metal_install.generateBareMetalInstall({
|
|
28
|
+
platform: "linux/arm64",
|
|
29
|
+
projectName: "my-stack"
|
|
30
|
+
});
|
|
31
|
+
require_vi_2VT5v0um.globalExpect(result).toHaveProperty("install.sh");
|
|
32
|
+
require_vi_2VT5v0um.globalExpect(result["install.sh"]).toContain("docker");
|
|
33
|
+
});
|
|
34
|
+
require_vi_2VT5v0um.it("returns install.sh for macos/amd64 and macos/arm64", () => {
|
|
35
|
+
for (const platform of ["macos/amd64", "macos/arm64"]) {
|
|
36
|
+
const result = require_generators_bare_metal_install.generateBareMetalInstall({
|
|
37
|
+
platform,
|
|
38
|
+
projectName: "my-stack"
|
|
39
|
+
});
|
|
40
|
+
require_vi_2VT5v0um.globalExpect(result).toHaveProperty("install.sh");
|
|
41
|
+
require_vi_2VT5v0um.globalExpect(result["install.sh"]).toContain("Docker");
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
//# sourceMappingURL=bare-metal-install.test.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bare-metal-install.test.cjs","names":["describe","generateBareMetalInstall"],"sources":["../../src/generators/bare-metal-install.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generateBareMetalInstall } from \"./bare-metal-install.js\";\n\ndescribe(\"generateBareMetalInstall\", () => {\n\tit(\"returns install.ps1 for windows/amd64\", () => {\n\t\tconst result = generateBareMetalInstall({\n\t\t\tplatform: \"windows/amd64\",\n\t\t\tprojectName: \"my-stack\",\n\t\t});\n\t\texpect(result).toHaveProperty(\"install.ps1\");\n\t\texpect(Object.keys(result)).toHaveLength(1);\n\t\texpect(result[\"install.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"install.ps1\"]).toContain(\"PowerShell\");\n\t});\n\n\tit(\"returns install.sh for linux/amd64\", () => {\n\t\tconst result = generateBareMetalInstall({\n\t\t\tplatform: \"linux/amd64\",\n\t\t\tprojectName: \"my-stack\",\n\t\t});\n\t\texpect(result).toHaveProperty(\"install.sh\");\n\t\texpect(Object.keys(result)).toHaveLength(1);\n\t\texpect(result[\"install.sh\"]).toContain(\"docker\");\n\t\texpect(result[\"install.sh\"]).toContain(\"compose\");\n\t});\n\n\tit(\"returns install.sh for linux/arm64\", () => {\n\t\tconst result = generateBareMetalInstall({\n\t\t\tplatform: \"linux/arm64\",\n\t\t\tprojectName: \"my-stack\",\n\t\t});\n\t\texpect(result).toHaveProperty(\"install.sh\");\n\t\texpect(result[\"install.sh\"]).toContain(\"docker\");\n\t});\n\n\tit(\"returns install.sh for macos/amd64 and macos/arm64\", () => {\n\t\tfor (const platform of [\"macos/amd64\", \"macos/arm64\"] as const) {\n\t\t\tconst result = generateBareMetalInstall({ platform, projectName: \"my-stack\" });\n\t\t\texpect(result).toHaveProperty(\"install.sh\");\n\t\t\texpect(result[\"install.sh\"]).toContain(\"Docker\");\n\t\t}\n\t});\n});\n"],"mappings":";;;;AAGAA,6BAAS,kCAAkC;AAC1C,wBAAG,+CAA+C;EACjD,MAAM,SAASC,+DAAyB;GACvC,UAAU;GACV,aAAa;GACb,CAAC;AACF,mCAAO,OAAO,CAAC,eAAe,cAAc;AAC5C,mCAAO,OAAO,KAAK,OAAO,CAAC,CAAC,aAAa,EAAE;AAC3C,mCAAO,OAAO,eAAe,CAAC,UAAU,iBAAiB;AACzD,mCAAO,OAAO,eAAe,CAAC,UAAU,aAAa;GACpD;AAEF,wBAAG,4CAA4C;EAC9C,MAAM,SAASA,+DAAyB;GACvC,UAAU;GACV,aAAa;GACb,CAAC;AACF,mCAAO,OAAO,CAAC,eAAe,aAAa;AAC3C,mCAAO,OAAO,KAAK,OAAO,CAAC,CAAC,aAAa,EAAE;AAC3C,mCAAO,OAAO,cAAc,CAAC,UAAU,SAAS;AAChD,mCAAO,OAAO,cAAc,CAAC,UAAU,UAAU;GAChD;AAEF,wBAAG,4CAA4C;EAC9C,MAAM,SAASA,+DAAyB;GACvC,UAAU;GACV,aAAa;GACb,CAAC;AACF,mCAAO,OAAO,CAAC,eAAe,aAAa;AAC3C,mCAAO,OAAO,cAAc,CAAC,UAAU,SAAS;GAC/C;AAEF,wBAAG,4DAA4D;AAC9D,OAAK,MAAM,YAAY,CAAC,eAAe,cAAc,EAAW;GAC/D,MAAM,SAASA,+DAAyB;IAAE;IAAU,aAAa;IAAY,CAAC;AAC9E,oCAAO,OAAO,CAAC,eAAe,aAAa;AAC3C,oCAAO,OAAO,cAAc,CAAC,UAAU,SAAS;;GAEhD;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-CFyDIn0m.mjs";
|
|
2
2
|
import { generateBareMetalInstall } from "./bare-metal-install.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/generators/bare-metal-install.test.ts
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/generators/caddy.ts
|
|
4
|
+
/**
|
|
5
|
+
* Generates a Caddyfile with reverse proxy entries for each exposed service.
|
|
6
|
+
*
|
|
7
|
+
* Each service with exposed ports gets a subdomain route under the provided domain.
|
|
8
|
+
* Services without exposed ports are skipped.
|
|
9
|
+
*
|
|
10
|
+
* @param resolved - The resolved service configuration
|
|
11
|
+
* @param domain - The main domain for routing (e.g. "example.com")
|
|
12
|
+
* @returns The Caddyfile content as a string
|
|
13
|
+
*/
|
|
14
|
+
function generateCaddyfile(resolved, domain) {
|
|
15
|
+
const sections = [];
|
|
16
|
+
sections.push(`# ═══════════════════════════════════════════════════════════════════════════════
|
|
17
|
+
# OpenClaw Caddyfile — Auto-generated reverse proxy configuration
|
|
18
|
+
# Domain: ${domain}
|
|
19
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
20
|
+
|
|
21
|
+
{
|
|
22
|
+
# Global options
|
|
23
|
+
email admin@${domain}
|
|
24
|
+
acme_ca https://acme-v02.api.letsencrypt.org/directory
|
|
25
|
+
}
|
|
26
|
+
`);
|
|
27
|
+
for (const { definition } of resolved.services) {
|
|
28
|
+
if (definition.id === "caddy" || definition.id === "traefik") continue;
|
|
29
|
+
const exposedPorts = definition.ports.filter((p) => p.exposed);
|
|
30
|
+
if (exposedPorts.length === 0) continue;
|
|
31
|
+
const primaryPort = exposedPorts[0];
|
|
32
|
+
const subdomain = `${definition.id}.${domain}`;
|
|
33
|
+
const block = [
|
|
34
|
+
`# ${definition.icon} ${definition.name}`,
|
|
35
|
+
`# ${definition.description}`,
|
|
36
|
+
`${subdomain} {`,
|
|
37
|
+
` reverse_proxy ${definition.id}:${primaryPort.container} {`,
|
|
38
|
+
` header_up Host {host}`,
|
|
39
|
+
` header_up X-Real-IP {remote_host}`,
|
|
40
|
+
` header_up X-Forwarded-For {remote_host}`,
|
|
41
|
+
` header_up X-Forwarded-Proto {scheme}`,
|
|
42
|
+
` }`
|
|
43
|
+
];
|
|
44
|
+
if (definition.healthcheck) {
|
|
45
|
+
block.push("");
|
|
46
|
+
block.push(` # Health check`);
|
|
47
|
+
block.push(` handle /health {`);
|
|
48
|
+
block.push(` reverse_proxy ${definition.id}:${primaryPort.container}`);
|
|
49
|
+
block.push(` }`);
|
|
50
|
+
}
|
|
51
|
+
block.push(`}`);
|
|
52
|
+
block.push("");
|
|
53
|
+
for (let i = 1; i < exposedPorts.length; i++) {
|
|
54
|
+
const port = exposedPorts[i];
|
|
55
|
+
const portSubdomain = `${definition.id}-${port.description.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+$/, "")}.${domain}`;
|
|
56
|
+
block.push(`# ${definition.name} — ${port.description}`);
|
|
57
|
+
block.push(`${portSubdomain} {`);
|
|
58
|
+
block.push(` reverse_proxy ${definition.id}:${port.container}`);
|
|
59
|
+
block.push(`}`);
|
|
60
|
+
block.push("");
|
|
61
|
+
}
|
|
62
|
+
sections.push(block.join("\n"));
|
|
63
|
+
}
|
|
64
|
+
sections.push(`# Root domain — serves the OpenClaw gateway
|
|
65
|
+
${domain} {
|
|
66
|
+
reverse_proxy openclaw:18789 {
|
|
67
|
+
header_up Host {host}
|
|
68
|
+
header_up X-Real-IP {remote_host}
|
|
69
|
+
header_up X-Forwarded-For {remote_host}
|
|
70
|
+
header_up X-Forwarded-Proto {scheme}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`);
|
|
74
|
+
return sections.join("\n");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
exports.generateCaddyfile = generateCaddyfile;
|
|
79
|
+
//# sourceMappingURL=caddy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caddy.cjs","names":[],"sources":["../../src/generators/caddy.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Generates a Caddyfile with reverse proxy entries for each exposed service.\n *\n * Each service with exposed ports gets a subdomain route under the provided domain.\n * Services without exposed ports are skipped.\n *\n * @param resolved - The resolved service configuration\n * @param domain - The main domain for routing (e.g. \"example.com\")\n * @returns The Caddyfile content as a string\n */\nexport function generateCaddyfile(resolved: ResolverOutput, domain: string): string {\n\tconst sections: string[] = [];\n\n\t// ── Global Options ──────────────────────────────────────────────────────\n\n\tsections.push(`# ═══════════════════════════════════════════════════════════════════════════════\n# OpenClaw Caddyfile — Auto-generated reverse proxy configuration\n# Domain: ${domain}\n# ═══════════════════════════════════════════════════════════════════════════════\n\n{\n\t# Global options\n\temail admin@${domain}\n\tacme_ca https://acme-v02.api.letsencrypt.org/directory\n}\n`);\n\n\t// ── Per-Service Reverse Proxy Blocks ─────────────────────────────────────\n\n\tfor (const { definition } of resolved.services) {\n\t\t// Skip the proxy service itself\n\t\tif (definition.id === \"caddy\" || definition.id === \"traefik\") continue;\n\n\t\tconst exposedPorts = definition.ports.filter((p) => p.exposed);\n\t\tif (exposedPorts.length === 0) continue;\n\n\t\t// Use the first exposed port as the primary route target\n\t\tconst primaryPort = exposedPorts[0]!;\n\t\tconst subdomain = `${definition.id}.${domain}`;\n\n\t\tconst block = [\n\t\t\t`# ${definition.icon} ${definition.name}`,\n\t\t\t`# ${definition.description}`,\n\t\t\t`${subdomain} {`,\n\t\t\t`\treverse_proxy ${definition.id}:${primaryPort.container} {`,\n\t\t\t`\t\theader_up Host {host}`,\n\t\t\t`\t\theader_up X-Real-IP {remote_host}`,\n\t\t\t`\t\theader_up X-Forwarded-For {remote_host}`,\n\t\t\t`\t\theader_up X-Forwarded-Proto {scheme}`,\n\t\t\t`\t}`,\n\t\t];\n\n\t\t// Add health check if service has one\n\t\tif (definition.healthcheck) {\n\t\t\tblock.push(\"\");\n\t\t\tblock.push(`\t# Health check`);\n\t\t\tblock.push(`\thandle /health {`);\n\t\t\tblock.push(`\t\treverse_proxy ${definition.id}:${primaryPort.container}`);\n\t\t\tblock.push(`\t}`);\n\t\t}\n\n\t\tblock.push(`}`);\n\t\tblock.push(\"\");\n\n\t\t// If there are additional exposed ports, add them as separate entries\n\t\tfor (let i = 1; i < exposedPorts.length; i++) {\n\t\t\tconst port = exposedPorts[i]!;\n\t\t\tconst portSubdomain = `${definition.id}-${port.description\n\t\t\t\t.toLowerCase()\n\t\t\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t\t\t.replace(/-+$/, \"\")}.${domain}`;\n\n\t\t\tblock.push(`# ${definition.name} — ${port.description}`);\n\t\t\tblock.push(`${portSubdomain} {`);\n\t\t\tblock.push(`\treverse_proxy ${definition.id}:${port.container}`);\n\t\t\tblock.push(`}`);\n\t\t\tblock.push(\"\");\n\t\t}\n\n\t\tsections.push(block.join(\"\\n\"));\n\t}\n\n\t// ── Fallback / Root Domain ──────────────────────────────────────────────\n\n\tsections.push(`# Root domain — serves the OpenClaw gateway\n${domain} {\n\treverse_proxy openclaw:18789 {\n\t\theader_up Host {host}\n\t\theader_up X-Real-IP {remote_host}\n\t\theader_up X-Forwarded-For {remote_host}\n\t\theader_up X-Forwarded-Proto {scheme}\n\t}\n}\n`);\n\n\treturn sections.join(\"\\n\");\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,SAAgB,kBAAkB,UAA0B,QAAwB;CACnF,MAAM,WAAqB,EAAE;AAI7B,UAAS,KAAK;;YAEH,OAAO;;;;;eAKJ,OAAO;;;EAGpB;AAID,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;AAE/C,MAAI,WAAW,OAAO,WAAW,WAAW,OAAO,UAAW;EAE9D,MAAM,eAAe,WAAW,MAAM,QAAQ,MAAM,EAAE,QAAQ;AAC9D,MAAI,aAAa,WAAW,EAAG;EAG/B,MAAM,cAAc,aAAa;EACjC,MAAM,YAAY,GAAG,WAAW,GAAG,GAAG;EAEtC,MAAM,QAAQ;GACb,KAAK,WAAW,KAAK,GAAG,WAAW;GACnC,KAAK,WAAW;GAChB,GAAG,UAAU;GACb,kBAAkB,WAAW,GAAG,GAAG,YAAY,UAAU;GACzD;GACA;GACA;GACA;GACA;GACA;AAGD,MAAI,WAAW,aAAa;AAC3B,SAAM,KAAK,GAAG;AACd,SAAM,KAAK,kBAAkB;AAC7B,SAAM,KAAK,oBAAoB;AAC/B,SAAM,KAAK,mBAAmB,WAAW,GAAG,GAAG,YAAY,YAAY;AACvE,SAAM,KAAK,KAAK;;AAGjB,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,GAAG;AAGd,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;GAC7C,MAAM,OAAO,aAAa;GAC1B,MAAM,gBAAgB,GAAG,WAAW,GAAG,GAAG,KAAK,YAC7C,aAAa,CACb,QAAQ,eAAe,IAAI,CAC3B,QAAQ,OAAO,GAAG,CAAC,GAAG;AAExB,SAAM,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,cAAc;AACxD,SAAM,KAAK,GAAG,cAAc,IAAI;AAChC,SAAM,KAAK,kBAAkB,WAAW,GAAG,GAAG,KAAK,YAAY;AAC/D,SAAM,KAAK,IAAI;AACf,SAAM,KAAK,GAAG;;AAGf,WAAS,KAAK,MAAM,KAAK,KAAK,CAAC;;AAKhC,UAAS,KAAK;EACb,OAAO;;;;;;;;EAQP;AAED,QAAO,SAAS,KAAK,KAAK"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ResolverOutput } from "../types.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/generators/caddy.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Generates a Caddyfile with reverse proxy entries for each exposed service.
|
|
6
|
+
*
|
|
7
|
+
* Each service with exposed ports gets a subdomain route under the provided domain.
|
|
8
|
+
* Services without exposed ports are skipped.
|
|
9
|
+
*
|
|
10
|
+
* @param resolved - The resolved service configuration
|
|
11
|
+
* @param domain - The main domain for routing (e.g. "example.com")
|
|
12
|
+
* @returns The Caddyfile content as a string
|
|
13
|
+
*/
|
|
14
|
+
declare function generateCaddyfile(resolved: ResolverOutput, domain: string): string;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { generateCaddyfile };
|
|
17
|
+
//# sourceMappingURL=caddy.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caddy.d.cts","names":[],"sources":["../../src/generators/caddy.ts"],"mappings":";;;;;AAYA;;;;;;;;iBAAgB,iBAAA,CAAkB,QAAA,EAAU,cAAA,EAAgB,MAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const require_vi_2VT5v0um = require('../vi.2VT5v0um-BmRMvymT.cjs');
|
|
2
|
+
const require_generate = require('../generate.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/generators/caddy.test.ts
|
|
5
|
+
require_vi_2VT5v0um.describe("generateCaddyfile (via generate)", () => {
|
|
6
|
+
const baseInput = {
|
|
7
|
+
projectName: "caddy-test",
|
|
8
|
+
services: ["redis", "n8n"],
|
|
9
|
+
skillPacks: [],
|
|
10
|
+
proxy: "caddy",
|
|
11
|
+
domain: "example.com",
|
|
12
|
+
gpu: false,
|
|
13
|
+
platform: "linux/amd64",
|
|
14
|
+
deployment: "local",
|
|
15
|
+
generateSecrets: true,
|
|
16
|
+
openclawVersion: "latest"
|
|
17
|
+
};
|
|
18
|
+
require_vi_2VT5v0um.it("generates Caddyfile when proxy is caddy", () => {
|
|
19
|
+
const result = require_generate.generate(baseInput);
|
|
20
|
+
require_vi_2VT5v0um.globalExpect(result.files).toHaveProperty("caddy/Caddyfile");
|
|
21
|
+
require_vi_2VT5v0um.globalExpect(result.files["caddy/Caddyfile"].length).toBeGreaterThan(0);
|
|
22
|
+
});
|
|
23
|
+
require_vi_2VT5v0um.it("does not generate Caddyfile when proxy is none", () => {
|
|
24
|
+
require_vi_2VT5v0um.globalExpect(require_generate.generate({
|
|
25
|
+
...baseInput,
|
|
26
|
+
proxy: "none"
|
|
27
|
+
}).files).not.toHaveProperty("caddy/Caddyfile");
|
|
28
|
+
});
|
|
29
|
+
require_vi_2VT5v0um.it("Caddyfile contains the domain", () => {
|
|
30
|
+
const caddyfile = require_generate.generate(baseInput).files["caddy/Caddyfile"];
|
|
31
|
+
require_vi_2VT5v0um.globalExpect(caddyfile).toContain("example.com");
|
|
32
|
+
});
|
|
33
|
+
require_vi_2VT5v0um.it("Caddyfile includes reverse proxy directives for services with exposed ports", () => {
|
|
34
|
+
const caddyfile = require_generate.generate(baseInput).files["caddy/Caddyfile"];
|
|
35
|
+
require_vi_2VT5v0um.globalExpect(caddyfile).toContain("n8n");
|
|
36
|
+
});
|
|
37
|
+
require_vi_2VT5v0um.it("Caddyfile includes TLS configuration", () => {
|
|
38
|
+
const caddyfile = require_generate.generate(baseInput).files["caddy/Caddyfile"];
|
|
39
|
+
require_vi_2VT5v0um.globalExpect(caddyfile.length).toBeGreaterThan(50);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
//# sourceMappingURL=caddy.test.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caddy.test.cjs","names":["describe","generate"],"sources":["../../src/generators/caddy.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generate } from \"../generate.js\";\n\ndescribe(\"generateCaddyfile (via generate)\", () => {\n\tconst baseInput = {\n\t\tprojectName: \"caddy-test\",\n\t\tservices: [\"redis\", \"n8n\"],\n\t\tskillPacks: [] as string[],\n\t\tproxy: \"caddy\" as const,\n\t\tdomain: \"example.com\",\n\t\tgpu: false,\n\t\tplatform: \"linux/amd64\" as const,\n\t\tdeployment: \"local\" as const,\n\t\tgenerateSecrets: true,\n\t\topenclawVersion: \"latest\",\n\t};\n\n\tit(\"generates Caddyfile when proxy is caddy\", () => {\n\t\tconst result = generate(baseInput);\n\n\t\texpect(result.files).toHaveProperty(\"caddy/Caddyfile\");\n\t\texpect(result.files[\"caddy/Caddyfile\"]!.length).toBeGreaterThan(0);\n\t});\n\n\tit(\"does not generate Caddyfile when proxy is none\", () => {\n\t\tconst result = generate({\n\t\t\t...baseInput,\n\t\t\tproxy: \"none\",\n\t\t});\n\n\t\texpect(result.files).not.toHaveProperty(\"caddy/Caddyfile\");\n\t});\n\n\tit(\"Caddyfile contains the domain\", () => {\n\t\tconst result = generate(baseInput);\n\t\tconst caddyfile = result.files[\"caddy/Caddyfile\"]!;\n\n\t\texpect(caddyfile).toContain(\"example.com\");\n\t});\n\n\tit(\"Caddyfile includes reverse proxy directives for services with exposed ports\", () => {\n\t\tconst result = generate(baseInput);\n\t\tconst caddyfile = result.files[\"caddy/Caddyfile\"]!;\n\n\t\t// Should reference n8n since it has exposed ports\n\t\texpect(caddyfile).toContain(\"n8n\");\n\t});\n\n\tit(\"Caddyfile includes TLS configuration\", () => {\n\t\tconst result = generate(baseInput);\n\t\tconst caddyfile = result.files[\"caddy/Caddyfile\"]!;\n\n\t\t// Caddy auto-enables TLS, so should reference HTTPS or TLS\n\t\texpect(caddyfile.length).toBeGreaterThan(50);\n\t});\n});\n"],"mappings":";;;;AAGAA,6BAAS,0CAA0C;CAClD,MAAM,YAAY;EACjB,aAAa;EACb,UAAU,CAAC,SAAS,MAAM;EAC1B,YAAY,EAAE;EACd,OAAO;EACP,QAAQ;EACR,KAAK;EACL,UAAU;EACV,YAAY;EACZ,iBAAiB;EACjB,iBAAiB;EACjB;AAED,wBAAG,iDAAiD;EACnD,MAAM,SAASC,0BAAS,UAAU;AAElC,mCAAO,OAAO,MAAM,CAAC,eAAe,kBAAkB;AACtD,mCAAO,OAAO,MAAM,mBAAoB,OAAO,CAAC,gBAAgB,EAAE;GACjE;AAEF,wBAAG,wDAAwD;AAM1D,mCALeA,0BAAS;GACvB,GAAG;GACH,OAAO;GACP,CAAC,CAEY,MAAM,CAAC,IAAI,eAAe,kBAAkB;GACzD;AAEF,wBAAG,uCAAuC;EAEzC,MAAM,YADSA,0BAAS,UAAU,CACT,MAAM;AAE/B,mCAAO,UAAU,CAAC,UAAU,cAAc;GACzC;AAEF,wBAAG,qFAAqF;EAEvF,MAAM,YADSA,0BAAS,UAAU,CACT,MAAM;AAG/B,mCAAO,UAAU,CAAC,UAAU,MAAM;GACjC;AAEF,wBAAG,8CAA8C;EAEhD,MAAM,YADSA,0BAAS,UAAU,CACT,MAAM;AAG/B,mCAAO,UAAU,OAAO,CAAC,gBAAgB,GAAG;GAC3C;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/generators/cloud-init.ts
|
|
4
|
+
/**
|
|
5
|
+
* Generates a cloud-init.yml file for deploying the stack to a VPS.
|
|
6
|
+
* Compatible with Hetzner, DigitalOcean, Vultr, Linode, and any provider
|
|
7
|
+
* that supports cloud-init user data.
|
|
8
|
+
*
|
|
9
|
+
* Based on the patterns from openclaw_docker-setup.sh and openclaw_install.sh:
|
|
10
|
+
* 1. Installs Docker via the official convenience script
|
|
11
|
+
* 2. Adds the default user to the docker group
|
|
12
|
+
* 3. Verifies Docker Compose v2 plugin is available
|
|
13
|
+
* 4. Creates /opt/openclaw/ with config, workspace, and identity directories
|
|
14
|
+
* 5. Writes docker-compose.yml and .env inline (env with restrictive 0600 perms)
|
|
15
|
+
* 6. Starts the stack with docker compose up -d
|
|
16
|
+
* 7. Polls the gateway health endpoint until it responds (up to 120s)
|
|
17
|
+
* 8. Logs all operations to /opt/openclaw/deploy.log
|
|
18
|
+
*/
|
|
19
|
+
function generateCloudInit(options) {
|
|
20
|
+
const gatewayPort = options.gatewayPort ?? 18789;
|
|
21
|
+
const indentContent = (content) => content.split("\n").map((line) => ` ${line}`).join("\n");
|
|
22
|
+
return `#cloud-config
|
|
23
|
+
# Cloud-init for ${options.projectName}
|
|
24
|
+
# Generated by better-openclaw
|
|
25
|
+
# Compatible with: Hetzner, DigitalOcean, Vultr, Linode, AWS, GCP
|
|
26
|
+
|
|
27
|
+
package_update: true
|
|
28
|
+
|
|
29
|
+
packages:
|
|
30
|
+
- curl
|
|
31
|
+
- git
|
|
32
|
+
- ca-certificates
|
|
33
|
+
- gnupg
|
|
34
|
+
|
|
35
|
+
write_files:
|
|
36
|
+
- path: /opt/openclaw/docker-compose.yml
|
|
37
|
+
permissions: "0644"
|
|
38
|
+
content: |
|
|
39
|
+
${indentContent(options.composeYaml)}
|
|
40
|
+
|
|
41
|
+
- path: /opt/openclaw/.env
|
|
42
|
+
permissions: "0600"
|
|
43
|
+
content: |
|
|
44
|
+
${indentContent(options.envContent)}
|
|
45
|
+
|
|
46
|
+
- path: /opt/openclaw/deploy.sh
|
|
47
|
+
permissions: "0755"
|
|
48
|
+
content: |
|
|
49
|
+
#!/usr/bin/env bash
|
|
50
|
+
# OpenClaw deployment script — runs as runcmd via cloud-init
|
|
51
|
+
# All output logged to /opt/openclaw/deploy.log
|
|
52
|
+
set -euo pipefail
|
|
53
|
+
exec > >(tee -a /opt/openclaw/deploy.log) 2>&1
|
|
54
|
+
echo "==> [$(date -u +%Y-%m-%dT%H:%M:%SZ)] Starting OpenClaw deployment"
|
|
55
|
+
|
|
56
|
+
# Install Docker via official convenience script
|
|
57
|
+
echo "==> Installing Docker"
|
|
58
|
+
curl -fsSL https://get.docker.com | sh
|
|
59
|
+
|
|
60
|
+
# Enable and start Docker daemon
|
|
61
|
+
systemctl enable docker
|
|
62
|
+
systemctl start docker
|
|
63
|
+
|
|
64
|
+
# Add default user to docker group (cloud providers commonly use 'ubuntu' or 'root')
|
|
65
|
+
DEFAULT_USER="\${SUDO_USER:-$(logname 2>/dev/null || echo root)}"
|
|
66
|
+
if [ "$DEFAULT_USER" != "root" ]; then
|
|
67
|
+
usermod -aG docker "$DEFAULT_USER"
|
|
68
|
+
echo "==> Added $DEFAULT_USER to docker group"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# Verify Docker Compose v2 plugin
|
|
72
|
+
if ! docker compose version >/dev/null 2>&1; then
|
|
73
|
+
echo "ERROR: Docker Compose v2 plugin not available" >&2
|
|
74
|
+
exit 1
|
|
75
|
+
fi
|
|
76
|
+
echo "==> Docker Compose: $(docker compose version)"
|
|
77
|
+
|
|
78
|
+
# Create openclaw directories (matching docker-setup.sh structure)
|
|
79
|
+
# config: gateway config files (openclaw.json)
|
|
80
|
+
# workspace: agent workspace and data
|
|
81
|
+
# identity: device identity for Docker Desktop/Windows bind mount compat
|
|
82
|
+
mkdir -p /opt/openclaw/openclaw/config
|
|
83
|
+
mkdir -p /opt/openclaw/openclaw/workspace
|
|
84
|
+
mkdir -p /opt/openclaw/openclaw/config/identity
|
|
85
|
+
|
|
86
|
+
# Start the stack
|
|
87
|
+
echo "==> Starting stack"
|
|
88
|
+
cd /opt/openclaw
|
|
89
|
+
docker compose up -d
|
|
90
|
+
|
|
91
|
+
# Health check: poll gateway until it responds (up to 120 seconds)
|
|
92
|
+
echo "==> Waiting for gateway health check on port ${gatewayPort}"
|
|
93
|
+
RETRIES=60
|
|
94
|
+
while [ "$RETRIES" -gt 0 ]; do
|
|
95
|
+
if curl -sf "http://127.0.0.1:${gatewayPort}" >/dev/null 2>&1; then
|
|
96
|
+
echo "==> Gateway is healthy"
|
|
97
|
+
break
|
|
98
|
+
fi
|
|
99
|
+
RETRIES=$((RETRIES - 1))
|
|
100
|
+
sleep 2
|
|
101
|
+
done
|
|
102
|
+
|
|
103
|
+
if [ "$RETRIES" -eq 0 ]; then
|
|
104
|
+
echo "WARNING: Gateway did not respond within 120s. Check logs with:"
|
|
105
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml logs -f openclaw-gateway"
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
# Print summary
|
|
109
|
+
echo ""
|
|
110
|
+
echo "==> Deployment complete at $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
111
|
+
echo " Project: ${options.projectName}"
|
|
112
|
+
echo " Gateway: http://$(hostname -I | awk '{print $1}'):${gatewayPort}"
|
|
113
|
+
echo ""
|
|
114
|
+
echo "Useful commands:"
|
|
115
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml logs -f"
|
|
116
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml ps"
|
|
117
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml restart"
|
|
118
|
+
echo ""
|
|
119
|
+
echo "Channel setup (optional):"
|
|
120
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml run --rm openclaw-cli channels login"
|
|
121
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml run --rm openclaw-cli channels add --channel telegram --token <TOKEN>"
|
|
122
|
+
|
|
123
|
+
runcmd:
|
|
124
|
+
- /opt/openclaw/deploy.sh
|
|
125
|
+
|
|
126
|
+
final_message: "OpenClaw stack '${options.projectName}' is ready! Connect to port ${gatewayPort}."
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
exports.generateCloudInit = generateCloudInit;
|
|
132
|
+
//# sourceMappingURL=cloud-init.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-init.cjs","names":[],"sources":["../../src/generators/cloud-init.ts"],"sourcesContent":["/**\n * Generates a cloud-init.yml file for deploying the stack to a VPS.\n * Compatible with Hetzner, DigitalOcean, Vultr, Linode, and any provider\n * that supports cloud-init user data.\n *\n * Based on the patterns from openclaw_docker-setup.sh and openclaw_install.sh:\n * 1. Installs Docker via the official convenience script\n * 2. Adds the default user to the docker group\n * 3. Verifies Docker Compose v2 plugin is available\n * 4. Creates /opt/openclaw/ with config, workspace, and identity directories\n * 5. Writes docker-compose.yml and .env inline (env with restrictive 0600 perms)\n * 6. Starts the stack with docker compose up -d\n * 7. Polls the gateway health endpoint until it responds (up to 120s)\n * 8. Logs all operations to /opt/openclaw/deploy.log\n */\nexport function generateCloudInit(options: {\n\tcomposeYaml: string;\n\tenvContent: string;\n\tprojectName: string;\n\tgatewayPort?: number;\n}): string {\n\tconst gatewayPort = options.gatewayPort ?? 18789;\n\n\t// Escape content for cloud-init write_files (indent by 8 spaces)\n\tconst indentContent = (content: string) =>\n\t\tcontent\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => ` ${line}`)\n\t\t\t.join(\"\\n\");\n\n\treturn `#cloud-config\n# Cloud-init for ${options.projectName}\n# Generated by better-openclaw\n# Compatible with: Hetzner, DigitalOcean, Vultr, Linode, AWS, GCP\n\npackage_update: true\n\npackages:\n - curl\n - git\n - ca-certificates\n - gnupg\n\nwrite_files:\n - path: /opt/openclaw/docker-compose.yml\n permissions: \"0644\"\n content: |\n${indentContent(options.composeYaml)}\n\n - path: /opt/openclaw/.env\n permissions: \"0600\"\n content: |\n${indentContent(options.envContent)}\n\n - path: /opt/openclaw/deploy.sh\n permissions: \"0755\"\n content: |\n #!/usr/bin/env bash\n # OpenClaw deployment script — runs as runcmd via cloud-init\n # All output logged to /opt/openclaw/deploy.log\n set -euo pipefail\n exec > >(tee -a /opt/openclaw/deploy.log) 2>&1\n echo \"==> [$(date -u +%Y-%m-%dT%H:%M:%SZ)] Starting OpenClaw deployment\"\n\n # Install Docker via official convenience script\n echo \"==> Installing Docker\"\n curl -fsSL https://get.docker.com | sh\n\n # Enable and start Docker daemon\n systemctl enable docker\n systemctl start docker\n\n # Add default user to docker group (cloud providers commonly use 'ubuntu' or 'root')\n DEFAULT_USER=\"\\${SUDO_USER:-$(logname 2>/dev/null || echo root)}\"\n if [ \"$DEFAULT_USER\" != \"root\" ]; then\n usermod -aG docker \"$DEFAULT_USER\"\n echo \"==> Added $DEFAULT_USER to docker group\"\n fi\n\n # Verify Docker Compose v2 plugin\n if ! docker compose version >/dev/null 2>&1; then\n echo \"ERROR: Docker Compose v2 plugin not available\" >&2\n exit 1\n fi\n echo \"==> Docker Compose: $(docker compose version)\"\n\n # Create openclaw directories (matching docker-setup.sh structure)\n # config: gateway config files (openclaw.json)\n # workspace: agent workspace and data\n # identity: device identity for Docker Desktop/Windows bind mount compat\n mkdir -p /opt/openclaw/openclaw/config\n mkdir -p /opt/openclaw/openclaw/workspace\n mkdir -p /opt/openclaw/openclaw/config/identity\n\n # Start the stack\n echo \"==> Starting stack\"\n cd /opt/openclaw\n docker compose up -d\n\n # Health check: poll gateway until it responds (up to 120 seconds)\n echo \"==> Waiting for gateway health check on port ${gatewayPort}\"\n RETRIES=60\n while [ \"$RETRIES\" -gt 0 ]; do\n if curl -sf \"http://127.0.0.1:${gatewayPort}\" >/dev/null 2>&1; then\n echo \"==> Gateway is healthy\"\n break\n fi\n RETRIES=$((RETRIES - 1))\n sleep 2\n done\n\n if [ \"$RETRIES\" -eq 0 ]; then\n echo \"WARNING: Gateway did not respond within 120s. Check logs with:\"\n echo \" docker compose -f /opt/openclaw/docker-compose.yml logs -f openclaw-gateway\"\n fi\n\n # Print summary\n echo \"\"\n echo \"==> Deployment complete at $(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n echo \" Project: ${options.projectName}\"\n echo \" Gateway: http://$(hostname -I | awk '{print $1}'):${gatewayPort}\"\n echo \"\"\n echo \"Useful commands:\"\n echo \" docker compose -f /opt/openclaw/docker-compose.yml logs -f\"\n echo \" docker compose -f /opt/openclaw/docker-compose.yml ps\"\n echo \" docker compose -f /opt/openclaw/docker-compose.yml restart\"\n echo \"\"\n echo \"Channel setup (optional):\"\n echo \" docker compose -f /opt/openclaw/docker-compose.yml run --rm openclaw-cli channels login\"\n echo \" docker compose -f /opt/openclaw/docker-compose.yml run --rm openclaw-cli channels add --channel telegram --token <TOKEN>\"\n\nruncmd:\n - /opt/openclaw/deploy.sh\n\nfinal_message: \"OpenClaw stack '${options.projectName}' is ready! Connect to port ${gatewayPort}.\"\n`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,SAAgB,kBAAkB,SAKvB;CACV,MAAM,cAAc,QAAQ,eAAe;CAG3C,MAAM,iBAAiB,YACtB,QACE,MAAM,KAAK,CACX,KAAK,SAAS,WAAW,OAAO,CAChC,KAAK,KAAK;AAEb,QAAO;mBACW,QAAQ,YAAY;;;;;;;;;;;;;;;;EAgBrC,cAAc,QAAQ,YAAY,CAAC;;;;;EAKnC,cAAc,QAAQ,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAgDyB,YAAY;;;0CAG/B,YAAY;;;;;;;;;;;;;;;;6BAgBzB,QAAQ,YAAY;sEACqB,YAAY;;;;;;;;;;;;;;kCAchD,QAAQ,YAAY,8BAA8B,YAAY"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/generators/cloud-init.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates a cloud-init.yml file for deploying the stack to a VPS.
|
|
4
|
+
* Compatible with Hetzner, DigitalOcean, Vultr, Linode, and any provider
|
|
5
|
+
* that supports cloud-init user data.
|
|
6
|
+
*
|
|
7
|
+
* Based on the patterns from openclaw_docker-setup.sh and openclaw_install.sh:
|
|
8
|
+
* 1. Installs Docker via the official convenience script
|
|
9
|
+
* 2. Adds the default user to the docker group
|
|
10
|
+
* 3. Verifies Docker Compose v2 plugin is available
|
|
11
|
+
* 4. Creates /opt/openclaw/ with config, workspace, and identity directories
|
|
12
|
+
* 5. Writes docker-compose.yml and .env inline (env with restrictive 0600 perms)
|
|
13
|
+
* 6. Starts the stack with docker compose up -d
|
|
14
|
+
* 7. Polls the gateway health endpoint until it responds (up to 120s)
|
|
15
|
+
* 8. Logs all operations to /opt/openclaw/deploy.log
|
|
16
|
+
*/
|
|
17
|
+
declare function generateCloudInit(options: {
|
|
18
|
+
composeYaml: string;
|
|
19
|
+
envContent: string;
|
|
20
|
+
projectName: string;
|
|
21
|
+
gatewayPort?: number;
|
|
22
|
+
}): string;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { generateCloudInit };
|
|
25
|
+
//# sourceMappingURL=cloud-init.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-init.d.cts","names":[],"sources":["../../src/generators/cloud-init.ts"],"mappings":";;AAeA;;;;;;;;;;;;;;iBAAgB,iBAAA,CAAkB,OAAA;EACjC,WAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;AAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/generators/cloud-init.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates a cloud-init.yml file for deploying the stack to a VPS.
|
|
4
|
+
* Compatible with Hetzner, DigitalOcean, Vultr, Linode, and any provider
|
|
5
|
+
* that supports cloud-init user data.
|
|
6
|
+
*
|
|
7
|
+
* Based on the patterns from openclaw_docker-setup.sh and openclaw_install.sh:
|
|
8
|
+
* 1. Installs Docker via the official convenience script
|
|
9
|
+
* 2. Adds the default user to the docker group
|
|
10
|
+
* 3. Verifies Docker Compose v2 plugin is available
|
|
11
|
+
* 4. Creates /opt/openclaw/ with config, workspace, and identity directories
|
|
12
|
+
* 5. Writes docker-compose.yml and .env inline (env with restrictive 0600 perms)
|
|
13
|
+
* 6. Starts the stack with docker compose up -d
|
|
14
|
+
* 7. Polls the gateway health endpoint until it responds (up to 120s)
|
|
15
|
+
* 8. Logs all operations to /opt/openclaw/deploy.log
|
|
16
|
+
*/
|
|
17
|
+
declare function generateCloudInit(options: {
|
|
18
|
+
composeYaml: string;
|
|
19
|
+
envContent: string;
|
|
20
|
+
projectName: string;
|
|
21
|
+
gatewayPort?: number;
|
|
22
|
+
}): string;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { generateCloudInit };
|
|
25
|
+
//# sourceMappingURL=cloud-init.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-init.d.mts","names":[],"sources":["../../src/generators/cloud-init.ts"],"mappings":";;AAeA;;;;;;;;;;;;;;iBAAgB,iBAAA,CAAkB,OAAA;EACjC,WAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;AAAA"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
//#region src/generators/cloud-init.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates a cloud-init.yml file for deploying the stack to a VPS.
|
|
4
|
+
* Compatible with Hetzner, DigitalOcean, Vultr, Linode, and any provider
|
|
5
|
+
* that supports cloud-init user data.
|
|
6
|
+
*
|
|
7
|
+
* Based on the patterns from openclaw_docker-setup.sh and openclaw_install.sh:
|
|
8
|
+
* 1. Installs Docker via the official convenience script
|
|
9
|
+
* 2. Adds the default user to the docker group
|
|
10
|
+
* 3. Verifies Docker Compose v2 plugin is available
|
|
11
|
+
* 4. Creates /opt/openclaw/ with config, workspace, and identity directories
|
|
12
|
+
* 5. Writes docker-compose.yml and .env inline (env with restrictive 0600 perms)
|
|
13
|
+
* 6. Starts the stack with docker compose up -d
|
|
14
|
+
* 7. Polls the gateway health endpoint until it responds (up to 120s)
|
|
15
|
+
* 8. Logs all operations to /opt/openclaw/deploy.log
|
|
16
|
+
*/
|
|
17
|
+
function generateCloudInit(options) {
|
|
18
|
+
const gatewayPort = options.gatewayPort ?? 18789;
|
|
19
|
+
const indentContent = (content) => content.split("\n").map((line) => ` ${line}`).join("\n");
|
|
20
|
+
return `#cloud-config
|
|
21
|
+
# Cloud-init for ${options.projectName}
|
|
22
|
+
# Generated by better-openclaw
|
|
23
|
+
# Compatible with: Hetzner, DigitalOcean, Vultr, Linode, AWS, GCP
|
|
24
|
+
|
|
25
|
+
package_update: true
|
|
26
|
+
|
|
27
|
+
packages:
|
|
28
|
+
- curl
|
|
29
|
+
- git
|
|
30
|
+
- ca-certificates
|
|
31
|
+
- gnupg
|
|
32
|
+
|
|
33
|
+
write_files:
|
|
34
|
+
- path: /opt/openclaw/docker-compose.yml
|
|
35
|
+
permissions: "0644"
|
|
36
|
+
content: |
|
|
37
|
+
${indentContent(options.composeYaml)}
|
|
38
|
+
|
|
39
|
+
- path: /opt/openclaw/.env
|
|
40
|
+
permissions: "0600"
|
|
41
|
+
content: |
|
|
42
|
+
${indentContent(options.envContent)}
|
|
43
|
+
|
|
44
|
+
- path: /opt/openclaw/deploy.sh
|
|
45
|
+
permissions: "0755"
|
|
46
|
+
content: |
|
|
47
|
+
#!/usr/bin/env bash
|
|
48
|
+
# OpenClaw deployment script — runs as runcmd via cloud-init
|
|
49
|
+
# All output logged to /opt/openclaw/deploy.log
|
|
50
|
+
set -euo pipefail
|
|
51
|
+
exec > >(tee -a /opt/openclaw/deploy.log) 2>&1
|
|
52
|
+
echo "==> [$(date -u +%Y-%m-%dT%H:%M:%SZ)] Starting OpenClaw deployment"
|
|
53
|
+
|
|
54
|
+
# Install Docker via official convenience script
|
|
55
|
+
echo "==> Installing Docker"
|
|
56
|
+
curl -fsSL https://get.docker.com | sh
|
|
57
|
+
|
|
58
|
+
# Enable and start Docker daemon
|
|
59
|
+
systemctl enable docker
|
|
60
|
+
systemctl start docker
|
|
61
|
+
|
|
62
|
+
# Add default user to docker group (cloud providers commonly use 'ubuntu' or 'root')
|
|
63
|
+
DEFAULT_USER="\${SUDO_USER:-$(logname 2>/dev/null || echo root)}"
|
|
64
|
+
if [ "$DEFAULT_USER" != "root" ]; then
|
|
65
|
+
usermod -aG docker "$DEFAULT_USER"
|
|
66
|
+
echo "==> Added $DEFAULT_USER to docker group"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Verify Docker Compose v2 plugin
|
|
70
|
+
if ! docker compose version >/dev/null 2>&1; then
|
|
71
|
+
echo "ERROR: Docker Compose v2 plugin not available" >&2
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
echo "==> Docker Compose: $(docker compose version)"
|
|
75
|
+
|
|
76
|
+
# Create openclaw directories (matching docker-setup.sh structure)
|
|
77
|
+
# config: gateway config files (openclaw.json)
|
|
78
|
+
# workspace: agent workspace and data
|
|
79
|
+
# identity: device identity for Docker Desktop/Windows bind mount compat
|
|
80
|
+
mkdir -p /opt/openclaw/openclaw/config
|
|
81
|
+
mkdir -p /opt/openclaw/openclaw/workspace
|
|
82
|
+
mkdir -p /opt/openclaw/openclaw/config/identity
|
|
83
|
+
|
|
84
|
+
# Start the stack
|
|
85
|
+
echo "==> Starting stack"
|
|
86
|
+
cd /opt/openclaw
|
|
87
|
+
docker compose up -d
|
|
88
|
+
|
|
89
|
+
# Health check: poll gateway until it responds (up to 120 seconds)
|
|
90
|
+
echo "==> Waiting for gateway health check on port ${gatewayPort}"
|
|
91
|
+
RETRIES=60
|
|
92
|
+
while [ "$RETRIES" -gt 0 ]; do
|
|
93
|
+
if curl -sf "http://127.0.0.1:${gatewayPort}" >/dev/null 2>&1; then
|
|
94
|
+
echo "==> Gateway is healthy"
|
|
95
|
+
break
|
|
96
|
+
fi
|
|
97
|
+
RETRIES=$((RETRIES - 1))
|
|
98
|
+
sleep 2
|
|
99
|
+
done
|
|
100
|
+
|
|
101
|
+
if [ "$RETRIES" -eq 0 ]; then
|
|
102
|
+
echo "WARNING: Gateway did not respond within 120s. Check logs with:"
|
|
103
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml logs -f openclaw-gateway"
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
# Print summary
|
|
107
|
+
echo ""
|
|
108
|
+
echo "==> Deployment complete at $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
109
|
+
echo " Project: ${options.projectName}"
|
|
110
|
+
echo " Gateway: http://$(hostname -I | awk '{print $1}'):${gatewayPort}"
|
|
111
|
+
echo ""
|
|
112
|
+
echo "Useful commands:"
|
|
113
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml logs -f"
|
|
114
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml ps"
|
|
115
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml restart"
|
|
116
|
+
echo ""
|
|
117
|
+
echo "Channel setup (optional):"
|
|
118
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml run --rm openclaw-cli channels login"
|
|
119
|
+
echo " docker compose -f /opt/openclaw/docker-compose.yml run --rm openclaw-cli channels add --channel telegram --token <TOKEN>"
|
|
120
|
+
|
|
121
|
+
runcmd:
|
|
122
|
+
- /opt/openclaw/deploy.sh
|
|
123
|
+
|
|
124
|
+
final_message: "OpenClaw stack '${options.projectName}' is ready! Connect to port ${gatewayPort}."
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
//#endregion
|
|
129
|
+
export { generateCloudInit };
|
|
130
|
+
//# sourceMappingURL=cloud-init.mjs.map
|