@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.mjs","names":[],"sources":["../../src/generators/env.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { getDbRequirements } from \"./postgres-init.js\";\n\n/**\n * Options for environment file generation.\n */\nexport interface EnvGeneratorOptions {\n\tgenerateSecrets: boolean;\n\tdomain?: string;\n\topenclawVersion?: string;\n\t/** When set, host-like vars (e.g. REDIS_HOST) for these services use host.docker.internal so gateway in Docker can reach native services on host. */\n\tnativeServiceIds?: Set<string>;\n}\n\n/**\n * Generates `.env.example` and `.env` file contents from resolved services.\n *\n * - `.env.example`: every env var with descriptive comments, placeholders for secrets\n * - `.env`: same vars but secrets filled with cryptographically random values when generateSecrets is true\n */\nexport function generateEnvFiles(\n\tresolved: ResolverOutput,\n\toptions: EnvGeneratorOptions,\n): { envExample: string; env: string } {\n\tconst version = options.openclawVersion ?? \"latest\";\n\tconst lines: { comment: string; key: string; exampleValue: string; actualValue: string }[] = [];\n\n\t// ── Base OpenClaw Variables ──────────────────────────────────────────────\n\n\tlines.push({\n\t\tcomment: formatComment(\"OpenClaw version to deploy\", \"OpenClaw Core\", true, false),\n\t\tkey: \"OPENCLAW_VERSION\",\n\t\texampleValue: version,\n\t\tactualValue: version,\n\t});\n\n\tconst gatewayToken = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Authentication token for the OpenClaw gateway API\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"OPENCLAW_GATEWAY_TOKEN\",\n\t\texampleValue: \"your_gateway_token_here\",\n\t\tactualValue: gatewayToken,\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\"Port the OpenClaw gateway listens on\", \"OpenClaw Core\", true, false),\n\t\tkey: \"OPENCLAW_GATEWAY_PORT\",\n\t\texampleValue: \"18789\",\n\t\tactualValue: \"18789\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Port for the OpenClaw ACP bridge (WebSocket)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_BRIDGE_PORT\",\n\t\texampleValue: \"18790\",\n\t\tactualValue: \"18790\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Gateway network bind mode (lan for Docker networking, loopback for local-only)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_GATEWAY_BIND\",\n\t\texampleValue: \"lan\",\n\t\tactualValue: \"lan\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Host path to OpenClaw configuration directory\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_CONFIG_DIR\",\n\t\texampleValue: \"./openclaw/config\",\n\t\tactualValue: \"./openclaw/config\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Host path to OpenClaw workspace directory\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_WORKSPACE_DIR\",\n\t\texampleValue: \"./openclaw/workspace\",\n\t\tactualValue: \"./openclaw/workspace\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"OpenClaw Docker image override (default uses ghcr.io/openclaw/openclaw)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_IMAGE\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tif (options.domain) {\n\t\tlines.push({\n\t\t\tcomment: formatComment(\"Primary domain for service routing\", \"OpenClaw Core\", false, false),\n\t\t\tkey: \"OPENCLAW_DOMAIN\",\n\t\t\texampleValue: \"example.com\",\n\t\t\tactualValue: options.domain,\n\t\t});\n\t}\n\n\t// ── AI Provider API Keys ─────────────────────────────────────────────────\n\n\tif (resolved.aiProviders && resolved.aiProviders.length > 0) {\n\t\tlines.push({\n\t\t\tcomment:\n\t\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# AI Provider API Keys\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tfor (const provider of resolved.aiProviders) {\n\t\t\tif (provider === \"ollama\" || provider === \"lmstudio\" || provider === \"vllm\") continue;\n\n\t\t\tconst envKey = `${provider.toUpperCase()}_API_KEY`;\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(`API Key for ${provider} AI models`, \"OpenClaw Core\", true, true),\n\t\t\t\tkey: envKey,\n\t\t\t\texampleValue: `your_${provider.toLowerCase()}_api_key_here`,\n\t\t\t\tactualValue: \"\",\n\t\t\t});\n\t\t}\n\t}\n\n\t// Claude web-provider session variables (optional)\n\tlines.push({\n\t\tcomment:\n\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# Claude Web Provider (optional)\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\tkey: \"\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude AI session key for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_AI_SESSION_KEY\",\n\t\texampleValue: \"your_claude_ai_session_key_here\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude web session key for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_WEB_SESSION_KEY\",\n\t\texampleValue: \"your_claude_web_session_key_here\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude web cookie for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_WEB_COOKIE\",\n\t\texampleValue: \"your_claude_web_cookie_here\",\n\t\tactualValue: \"\",\n\t});\n\n\t// ── Per-Service Database Passwords ──────────────────────────────────────\n\n\tconst dbReqs = getDbRequirements(resolved);\n\n\tif (dbReqs.length > 0) {\n\t\tlines.push({\n\t\t\tcomment:\n\t\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# Per-Service Database Passwords\\n# Each service gets its own PostgreSQL database and credentials\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tfor (const req of dbReqs) {\n\t\t\tconst secretValue = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(\n\t\t\t\t\t`PostgreSQL password for ${req.serviceName} (database: ${req.dbName}, user: ${req.dbUser})`,\n\t\t\t\t\treq.serviceName,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tkey: req.passwordEnvVar,\n\t\t\t\texampleValue: `your_${req.passwordEnvVar.toLowerCase()}_here`,\n\t\t\t\tactualValue: secretValue,\n\t\t\t});\n\t\t}\n\t}\n\n\t// ── Service-Specific Variables ───────────────────────────────────────────\n\n\tconst dbPasswordKeys = dbReqs.map((r) => r.passwordEnvVar);\n\tconst aiProviderKeys = (resolved.aiProviders || []).map((p) => `${p.toUpperCase()}_API_KEY`);\n\tconst seenKeys = new Set<string>([\n\t\t\"OPENCLAW_VERSION\",\n\t\t\"OPENCLAW_GATEWAY_TOKEN\",\n\t\t\"OPENCLAW_GATEWAY_PORT\",\n\t\t\"OPENCLAW_BRIDGE_PORT\",\n\t\t\"OPENCLAW_GATEWAY_BIND\",\n\t\t\"OPENCLAW_CONFIG_DIR\",\n\t\t\"OPENCLAW_WORKSPACE_DIR\",\n\t\t\"OPENCLAW_IMAGE\",\n\t\t\"OPENCLAW_DOMAIN\",\n\t\t\"CLAUDE_AI_SESSION_KEY\",\n\t\t\"CLAUDE_WEB_SESSION_KEY\",\n\t\t\"CLAUDE_WEB_COOKIE\",\n\t\t...dbPasswordKeys,\n\t\t...aiProviderKeys,\n\t]);\n\n\tfor (const { definition } of resolved.services) {\n\t\tconst allEnvVars = [...definition.environment, ...definition.openclawEnvVars];\n\n\t\tif (allEnvVars.length === 0) continue;\n\n\t\t// Section separator for this service\n\t\tlines.push({\n\t\t\tcomment: `\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# ${definition.icon} ${definition.name}\\n# ═══════════════════════════════════════════════════════════════════════════════`,\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tconst isNative = options.nativeServiceIds?.has(definition.id);\n\n\t\tfor (const envVar of allEnvVars) {\n\t\t\tif (seenKeys.has(envVar.key)) continue;\n\t\t\tseenKeys.add(envVar.key);\n\n\t\t\tconst secretValue = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\t\t\t// For native services, host-like vars must point to host so gateway (in Docker) can reach them\n\t\t\tconst isHostVar = envVar.key.endsWith(\"_HOST\");\n\t\t\tconst hostValue = isNative && isHostVar ? \"host.docker.internal\" : null;\n\n\t\t\tconst exampleValue = hostValue\n\t\t\t\t? hostValue\n\t\t\t\t: envVar.secret\n\t\t\t\t\t? `your_${envVar.key.toLowerCase()}_here`\n\t\t\t\t\t: envVar.defaultValue;\n\n\t\t\tlet actualValue: string;\n\t\t\tif (hostValue) {\n\t\t\t\tactualValue = hostValue;\n\t\t\t} else if (envVar.secret) {\n\t\t\t\tactualValue = envVar.defaultValue.startsWith(\"${\") ? envVar.defaultValue : secretValue;\n\t\t\t} else {\n\t\t\t\tactualValue = envVar.defaultValue;\n\t\t\t}\n\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(envVar.description, definition.name, envVar.required, envVar.secret),\n\t\t\t\tkey: envVar.key,\n\t\t\t\texampleValue,\n\t\t\t\tactualValue,\n\t\t\t});\n\t\t}\n\t}\n\n\t// ── Build output strings ────────────────────────────────────────────────\n\n\tconst header = [\n\t\t\"# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\"# OpenClaw Environment Configuration\",\n\t\t`# Generated at ${new Date().toISOString()}`,\n\t\t\"# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\"\",\n\t].join(\"\\n\");\n\n\tlet envExample = header;\n\tlet env = header;\n\n\tfor (const line of lines) {\n\t\tif (line.key === \"\") {\n\t\t\t// Section comment\n\t\t\tenvExample += `${line.comment}\\n`;\n\t\t\tenv += `${line.comment}\\n`;\n\t\t} else {\n\t\t\tenvExample += `${line.comment}\\n${line.key}=${line.exampleValue}\\n\\n`;\n\t\t\tenv += `${line.comment}\\n${line.key}=${line.actualValue}\\n\\n`;\n\t\t}\n\t}\n\n\treturn { envExample, env };\n}\n\n/**\n * Format a descriptive comment block for an environment variable.\n */\nfunction formatComment(\n\tdescription: string,\n\tserviceName: string,\n\trequired: boolean,\n\tsecret: boolean,\n): string {\n\treturn [\n\t\t`# ${description}`,\n\t\t`# Service: ${serviceName} | Required: ${required ? \"Yes\" : \"No\"} | Secret: ${secret ? \"Yes\" : \"No\"}`,\n\t].join(\"\\n\");\n}\n\n// ── Structured Env Vars ─────────────────────────────────────────────────────\n\nexport interface EnvVarGroup {\n\tserviceName: string;\n\tserviceIcon: string;\n\tserviceId: string;\n\tvars: {\n\t\tkey: string;\n\t\tdescription: string;\n\t\tsecret: boolean;\n\t\trequired: boolean;\n\t\tdefaultValue: string;\n\t}[];\n}\n\n/**\n * Returns environment variables grouped by service, suitable for UI rendering.\n *\n * - First group is always \"OpenClaw Core\" with base variables.\n * - Subsequent groups correspond to each resolved service.\n * - Variables are deduplicated across groups (first occurrence wins).\n */\nexport function getStructuredEnvVars(resolved: ResolverOutput): EnvVarGroup[] {\n\tconst groups: EnvVarGroup[] = [];\n\tconst seenKeys = new Set<string>();\n\n\t// ── OpenClaw Core group ──────────────────────────────────────────────────\n\tconst coreVars: EnvVarGroup[\"vars\"] = [\n\t\t{\n\t\t\tkey: \"OPENCLAW_VERSION\",\n\t\t\tdescription: \"OpenClaw version to deploy\",\n\t\t\tsecret: false,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"latest\",\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENCLAW_GATEWAY_TOKEN\",\n\t\t\tdescription: \"Authentication token for the OpenClaw gateway API\",\n\t\t\tsecret: true,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENCLAW_GATEWAY_PORT\",\n\t\t\tdescription: \"Port the OpenClaw gateway listens on\",\n\t\t\tsecret: false,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"18789\",\n\t\t},\n\t];\n\n\tfor (const v of coreVars) {\n\t\tseenKeys.add(v.key);\n\t}\n\n\tgroups.push({\n\t\tserviceName: \"OpenClaw Core\",\n\t\tserviceIcon: \"⚙️\",\n\t\tserviceId: \"openclaw-core\",\n\t\tvars: coreVars,\n\t});\n\n\t// ── Per-service groups ───────────────────────────────────────────────────\n\tfor (const { definition } of resolved.services) {\n\t\tconst allEnvVars = [...definition.environment, ...definition.openclawEnvVars];\n\n\t\tconst vars: EnvVarGroup[\"vars\"] = [];\n\n\t\tfor (const envVar of allEnvVars) {\n\t\t\tif (seenKeys.has(envVar.key)) continue;\n\t\t\tseenKeys.add(envVar.key);\n\n\t\t\tvars.push({\n\t\t\t\tkey: envVar.key,\n\t\t\t\tdescription: envVar.description,\n\t\t\t\tsecret: envVar.secret,\n\t\t\t\trequired: envVar.required,\n\t\t\t\tdefaultValue: envVar.defaultValue,\n\t\t\t});\n\t\t}\n\n\t\tif (vars.length === 0) continue;\n\n\t\tgroups.push({\n\t\t\tserviceName: definition.name,\n\t\t\tserviceIcon: definition.icon,\n\t\t\tserviceId: definition.id,\n\t\t\tvars,\n\t\t});\n\t}\n\n\treturn groups;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"env.mjs","names":[],"sources":["../../src/generators/env.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { getDbRequirements } from \"./postgres-init.js\";\n\n/**\n * Options for environment file generation.\n */\nexport interface EnvGeneratorOptions {\n\tgenerateSecrets: boolean;\n\tdomain?: string;\n\topenclawVersion?: string;\n\t/** When set, host-like vars (e.g. REDIS_HOST) for these services use host.docker.internal so gateway in Docker can reach native services on host. */\n\tnativeServiceIds?: Set<string>;\n\t/** Compose file names for COMPOSE_FILE env var (enables `docker compose up` without -f flags). */\n\tcomposeFiles?: string[];\n\t/** Compose profiles for COMPOSE_PROFILES env var (enables `docker compose up` without --profile flags). */\n\tcomposeProfiles?: string[];\n\t/** OpenClaw image variant (official, coolify, alpine). */\n\topenclawImage?: \"official\" | \"coolify\" | \"alpine\";\n}\n\n/**\n * Generates `.env.example` and `.env` file contents from resolved services.\n *\n * - `.env.example`: every env var with descriptive comments, placeholders for secrets\n * - `.env`: same vars but secrets filled with cryptographically random values when generateSecrets is true\n */\nexport function generateEnvFiles(\n\tresolved: ResolverOutput,\n\toptions: EnvGeneratorOptions,\n): { envExample: string; env: string } {\n\tconst version = options.openclawVersion ?? \"latest\";\n\tconst lines: { comment: string; key: string; exampleValue: string; actualValue: string }[] = [];\n\n\t// Track all env var values for resolving references later\n\tconst envVarValues = new Map<string, string>();\n\n\t// ── Docker Compose convenience vars ─────────────────────────────────────\n\t// These let you run `docker compose up -d` without -f and --profile flags.\n\n\tif (options.composeFiles && options.composeFiles.length > 0) {\n\t\tconst separator = process.platform === \"win32\" ? \";\" : \":\";\n\t\tconst composeFileValue = options.composeFiles.join(separator);\n\t\tlines.push({\n\t\t\tcomment: formatComment(\n\t\t\t\t\"Compose files to load (allows plain `docker compose up -d`)\",\n\t\t\t\t\"Docker Compose\",\n\t\t\t\tfalse,\n\t\t\t\tfalse,\n\t\t\t),\n\t\t\tkey: \"COMPOSE_FILE\",\n\t\t\texampleValue: composeFileValue,\n\t\t\tactualValue: composeFileValue,\n\t\t});\n\t}\n\n\tif (options.composeProfiles && options.composeProfiles.length > 0) {\n\t\tconst profilesValue = options.composeProfiles.join(\",\");\n\t\tlines.push({\n\t\t\tcomment: formatComment(\n\t\t\t\t\"Profiles to activate (allows plain `docker compose up -d`)\",\n\t\t\t\t\"Docker Compose\",\n\t\t\t\tfalse,\n\t\t\t\tfalse,\n\t\t\t),\n\t\t\tkey: \"COMPOSE_PROFILES\",\n\t\t\texampleValue: profilesValue,\n\t\t\tactualValue: profilesValue,\n\t\t});\n\t}\n\n\t// ── Base OpenClaw Variables ──────────────────────────────────────────────\n\n\tlines.push({\n\t\tcomment: formatComment(\"OpenClaw version to deploy\", \"OpenClaw Core\", true, false),\n\t\tkey: \"OPENCLAW_VERSION\",\n\t\texampleValue: version,\n\t\tactualValue: version,\n\t});\n\n\tconst gatewayToken = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Authentication token for the OpenClaw gateway API\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"OPENCLAW_GATEWAY_TOKEN\",\n\t\texampleValue: \"your_gateway_token_here\",\n\t\tactualValue: gatewayToken,\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\"Port the OpenClaw gateway listens on\", \"OpenClaw Core\", true, false),\n\t\tkey: \"OPENCLAW_GATEWAY_PORT\",\n\t\texampleValue: \"18789\",\n\t\tactualValue: \"18789\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Port for the OpenClaw ACP bridge (WebSocket)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_BRIDGE_PORT\",\n\t\texampleValue: \"18790\",\n\t\tactualValue: \"18790\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Gateway network bind mode: 'lan' (all interfaces, required for Docker). Use 'loopback' only for native (non-Docker) installs with Tailscale serve/funnel\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_GATEWAY_BIND\",\n\t\texampleValue: \"lan\",\n\t\tactualValue: \"lan\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Host path to OpenClaw configuration directory\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_CONFIG_DIR\",\n\t\texampleValue: \"./openclaw/config\",\n\t\tactualValue: \"./openclaw/config\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Host path to OpenClaw workspace directory\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_WORKSPACE_DIR\",\n\t\texampleValue: \"./openclaw/workspace\",\n\t\tactualValue: \"./openclaw/workspace\",\n\t});\n\n\t// Set OPENCLAW_IMAGE based on variant (empty = use compose default)\n\tconst imageVariantMap: Record<string, string> = {\n\t\tofficial: \"\", // use compose default (ghcr.io/openclaw/openclaw:VERSION)\n\t\tcoolify: \"coollabsio/openclaw:latest\",\n\t\talpine: \"alpine/openclaw:latest\",\n\t};\n\tconst imageValue = imageVariantMap[options.openclawImage ?? \"official\"] ?? \"\";\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t`OpenClaw Docker image variant: ${options.openclawImage ?? \"official\"} (official, coolify, alpine)`,\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_IMAGE\",\n\t\texampleValue: \"\",\n\t\tactualValue: imageValue,\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Extra bind mounts for gateway and CLI containers (comma-separated, format: source:target[:options])\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_EXTRA_MOUNTS\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Named volume or host path for /home/node persistence across container restarts\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_HOME_VOLUME\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Extra apt packages to install during Docker image build (space-separated)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_DOCKER_APT_PACKAGES\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tif (options.domain) {\n\t\tlines.push({\n\t\t\tcomment: formatComment(\"Primary domain for service routing\", \"OpenClaw Core\", false, false),\n\t\t\tkey: \"OPENCLAW_DOMAIN\",\n\t\t\texampleValue: \"example.com\",\n\t\t\tactualValue: options.domain,\n\t\t});\n\t}\n\n\t// ── AI Provider API Keys ─────────────────────────────────────────────────\n\n\tif (resolved.aiProviders && resolved.aiProviders.length > 0) {\n\t\tlines.push({\n\t\t\tcomment:\n\t\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# AI Provider API Keys\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tfor (const provider of resolved.aiProviders) {\n\t\t\t// Local-only providers don't need API keys\n\t\t\tif (provider === \"ollama\" || provider === \"lmstudio\" || provider === \"vllm\") continue;\n\n\t\t\t// Ollama Cloud uses OLLAMA_API_KEY (matches Ollama's official env var name)\n\t\t\tconst envKey =\n\t\t\t\tprovider === \"ollama-cloud\" ? \"OLLAMA_API_KEY\" : `${provider.toUpperCase()}_API_KEY`;\n\t\t\tconst label = provider === \"ollama-cloud\" ? \"Ollama Cloud\" : provider;\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(`API Key for ${label} AI models`, \"OpenClaw Core\", true, true),\n\t\t\t\tkey: envKey,\n\t\t\t\texampleValue: `your_${provider.toLowerCase().replace(\"-\", \"_\")}_api_key_here`,\n\t\t\t\tactualValue: \"\",\n\t\t\t});\n\t\t}\n\t}\n\n\t// Claude web-provider session variables (optional)\n\tlines.push({\n\t\tcomment:\n\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# Claude Web Provider (optional)\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\tkey: \"\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude AI session key for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_AI_SESSION_KEY\",\n\t\texampleValue: \"your_claude_ai_session_key_here\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude web session key for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_WEB_SESSION_KEY\",\n\t\texampleValue: \"your_claude_web_session_key_here\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude web cookie for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_WEB_COOKIE\",\n\t\texampleValue: \"your_claude_web_cookie_here\",\n\t\tactualValue: \"\",\n\t});\n\n\t// ── Per-Service Database Passwords ──────────────────────────────────────\n\n\tconst dbReqs = getDbRequirements(resolved);\n\n\tif (dbReqs.length > 0) {\n\t\tlines.push({\n\t\t\tcomment:\n\t\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# Per-Service Database Passwords\\n# Each service gets its own PostgreSQL database and credentials\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tfor (const req of dbReqs) {\n\t\t\tconst secretValue = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\t\t\t// Store in map for later reference resolution\n\t\t\tenvVarValues.set(req.passwordEnvVar, secretValue);\n\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(\n\t\t\t\t\t`PostgreSQL password for ${req.serviceName} (database: ${req.dbName}, user: ${req.dbUser})`,\n\t\t\t\t\treq.serviceName,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tkey: req.passwordEnvVar,\n\t\t\t\texampleValue: `your_${req.passwordEnvVar.toLowerCase()}_here`,\n\t\t\t\tactualValue: secretValue,\n\t\t\t});\n\t\t}\n\t}\n\n\t// ── Service-Specific Variables ───────────────────────────────────────────\n\n\tconst dbPasswordKeys = dbReqs.map((r) => r.passwordEnvVar);\n\tconst aiProviderKeys = (resolved.aiProviders || []).map((p) => `${p.toUpperCase()}_API_KEY`);\n\tconst seenKeys = new Set<string>([\n\t\t\"OPENCLAW_VERSION\",\n\t\t\"OPENCLAW_GATEWAY_TOKEN\",\n\t\t\"OPENCLAW_GATEWAY_PORT\",\n\t\t\"OPENCLAW_BRIDGE_PORT\",\n\t\t\"OPENCLAW_GATEWAY_BIND\",\n\t\t\"OPENCLAW_CONFIG_DIR\",\n\t\t\"OPENCLAW_WORKSPACE_DIR\",\n\t\t\"OPENCLAW_IMAGE\",\n\t\t\"OPENCLAW_EXTRA_MOUNTS\",\n\t\t\"OPENCLAW_HOME_VOLUME\",\n\t\t\"OPENCLAW_DOCKER_APT_PACKAGES\",\n\t\t\"OPENCLAW_DOMAIN\",\n\t\t\"CLAUDE_AI_SESSION_KEY\",\n\t\t\"CLAUDE_WEB_SESSION_KEY\",\n\t\t\"CLAUDE_WEB_COOKIE\",\n\t\t...dbPasswordKeys,\n\t\t...aiProviderKeys,\n\t]);\n\n\tfor (const { definition } of resolved.services) {\n\t\tconst allEnvVars = [...definition.environment, ...definition.openclawEnvVars];\n\n\t\tif (allEnvVars.length === 0) continue;\n\n\t\t// Section separator for this service\n\t\tlines.push({\n\t\t\tcomment: `\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# ${definition.icon} ${definition.name}\\n# ═══════════════════════════════════════════════════════════════════════════════`,\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tconst isNative = options.nativeServiceIds?.has(definition.id);\n\n\t\tfor (const envVar of allEnvVars) {\n\t\t\tif (seenKeys.has(envVar.key)) continue;\n\t\t\tseenKeys.add(envVar.key);\n\n\t\t\tconst secretValue = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\t\t\t// For native services, host-like vars must point to host so gateway (in Docker) can reach them\n\t\t\tconst isHostVar = envVar.key.endsWith(\"_HOST\");\n\t\t\tconst hostValue = isNative && isHostVar ? \"host.docker.internal\" : null;\n\n\t\t\tconst exampleValue = hostValue\n\t\t\t\t? hostValue\n\t\t\t\t: envVar.secret\n\t\t\t\t\t? `your_${envVar.key.toLowerCase()}_here`\n\t\t\t\t\t: envVar.defaultValue;\n\n\t\t\tlet actualValue: string;\n\t\t\tif (hostValue) {\n\t\t\t\tactualValue = hostValue;\n\t\t\t} else if (envVar.secret) {\n\t\t\t\t// Resolve env var references like ${N8N_DB_PASSWORD}\n\t\t\t\tif (envVar.defaultValue.startsWith(\"${\") && envVar.defaultValue.endsWith(\"}\")) {\n\t\t\t\t\tconst refKey = envVar.defaultValue.slice(2, -1); // Extract var name from ${VAR_NAME}\n\t\t\t\t\tactualValue = envVarValues.get(refKey) || envVar.defaultValue;\n\t\t\t\t} else {\n\t\t\t\t\tactualValue = secretValue;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tactualValue = envVar.defaultValue;\n\t\t\t}\n\n\t\t\t// Store in map for later reference resolution\n\t\t\tenvVarValues.set(envVar.key, actualValue);\n\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(envVar.description, definition.name, envVar.required, envVar.secret),\n\t\t\t\tkey: envVar.key,\n\t\t\t\texampleValue,\n\t\t\t\tactualValue,\n\t\t\t});\n\t\t}\n\t}\n\n\t// ── Build output strings ────────────────────────────────────────────────\n\n\tconst header = [\n\t\t\"# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\"# OpenClaw Environment Configuration\",\n\t\t`# Generated at ${new Date().toISOString()}`,\n\t\t\"# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\"\",\n\t].join(\"\\n\");\n\n\tlet envExample = header;\n\tlet env = header;\n\n\tfor (const line of lines) {\n\t\tif (line.key === \"\") {\n\t\t\t// Section comment\n\t\t\tenvExample += `${line.comment}\\n`;\n\t\t\tenv += `${line.comment}\\n`;\n\t\t} else {\n\t\t\tenvExample += `${line.comment}\\n${line.key}=${line.exampleValue}\\n\\n`;\n\t\t\tenv += `${line.comment}\\n${line.key}=${line.actualValue}\\n\\n`;\n\t\t}\n\t}\n\n\treturn { envExample, env };\n}\n\n/**\n * Format a descriptive comment block for an environment variable.\n */\nfunction formatComment(\n\tdescription: string,\n\tserviceName: string,\n\trequired: boolean,\n\tsecret: boolean,\n): string {\n\treturn [\n\t\t`# ${description}`,\n\t\t`# Service: ${serviceName} | Required: ${required ? \"Yes\" : \"No\"} | Secret: ${secret ? \"Yes\" : \"No\"}`,\n\t].join(\"\\n\");\n}\n\n// ── Structured Env Vars ─────────────────────────────────────────────────────\n\nexport interface EnvVarGroup {\n\tserviceName: string;\n\tserviceIcon: string;\n\tserviceId: string;\n\tvars: {\n\t\tkey: string;\n\t\tdescription: string;\n\t\tsecret: boolean;\n\t\trequired: boolean;\n\t\tdefaultValue: string;\n\t}[];\n}\n\n/**\n * Returns environment variables grouped by service, suitable for UI rendering.\n *\n * - First group is always \"OpenClaw Core\" with base variables.\n * - Subsequent groups correspond to each resolved service.\n * - Variables are deduplicated across groups (first occurrence wins).\n */\nexport function getStructuredEnvVars(resolved: ResolverOutput): EnvVarGroup[] {\n\tconst groups: EnvVarGroup[] = [];\n\tconst seenKeys = new Set<string>();\n\n\t// ── OpenClaw Core group ──────────────────────────────────────────────────\n\tconst coreVars: EnvVarGroup[\"vars\"] = [\n\t\t{\n\t\t\tkey: \"OPENCLAW_VERSION\",\n\t\t\tdescription: \"OpenClaw version to deploy\",\n\t\t\tsecret: false,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"latest\",\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENCLAW_GATEWAY_TOKEN\",\n\t\t\tdescription: \"Authentication token for the OpenClaw gateway API\",\n\t\t\tsecret: true,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENCLAW_GATEWAY_PORT\",\n\t\t\tdescription: \"Port the OpenClaw gateway listens on\",\n\t\t\tsecret: false,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"18789\",\n\t\t},\n\t];\n\n\tfor (const v of coreVars) {\n\t\tseenKeys.add(v.key);\n\t}\n\n\tgroups.push({\n\t\tserviceName: \"OpenClaw Core\",\n\t\tserviceIcon: \"⚙️\",\n\t\tserviceId: \"openclaw-core\",\n\t\tvars: coreVars,\n\t});\n\n\t// ── Per-service groups ───────────────────────────────────────────────────\n\tfor (const { definition } of resolved.services) {\n\t\tconst allEnvVars = [...definition.environment, ...definition.openclawEnvVars];\n\n\t\tconst vars: EnvVarGroup[\"vars\"] = [];\n\n\t\tfor (const envVar of allEnvVars) {\n\t\t\tif (seenKeys.has(envVar.key)) continue;\n\t\t\tseenKeys.add(envVar.key);\n\n\t\t\tvars.push({\n\t\t\t\tkey: envVar.key,\n\t\t\t\tdescription: envVar.description,\n\t\t\t\tsecret: envVar.secret,\n\t\t\t\trequired: envVar.required,\n\t\t\t\tdefaultValue: envVar.defaultValue,\n\t\t\t});\n\t\t}\n\n\t\tif (vars.length === 0) continue;\n\n\t\tgroups.push({\n\t\t\tserviceName: definition.name,\n\t\t\tserviceIcon: definition.icon,\n\t\t\tserviceId: definition.id,\n\t\t\tvars,\n\t\t});\n\t}\n\n\treturn groups;\n}\n"],"mappings":";;;;;;;;;;AA2BA,SAAgB,iBACf,UACA,SACsC;CACtC,MAAM,UAAU,QAAQ,mBAAmB;CAC3C,MAAM,QAAuF,EAAE;CAG/F,MAAM,+BAAe,IAAI,KAAqB;AAK9C,KAAI,QAAQ,gBAAgB,QAAQ,aAAa,SAAS,GAAG;EAC5D,MAAM,YAAY,QAAQ,aAAa,UAAU,MAAM;EACvD,MAAM,mBAAmB,QAAQ,aAAa,KAAK,UAAU;AAC7D,QAAM,KAAK;GACV,SAAS,cACR,+DACA,kBACA,OACA,MACA;GACD,KAAK;GACL,cAAc;GACd,aAAa;GACb,CAAC;;AAGH,KAAI,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS,GAAG;EAClE,MAAM,gBAAgB,QAAQ,gBAAgB,KAAK,IAAI;AACvD,QAAM,KAAK;GACV,SAAS,cACR,8DACA,kBACA,OACA,MACA;GACD,KAAK;GACL,cAAc;GACd,aAAa;GACb,CAAC;;AAKH,OAAM,KAAK;EACV,SAAS,cAAc,8BAA8B,iBAAiB,MAAM,MAAM;EAClF,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;CAEF,MAAM,eAAe,QAAQ,kBAAkB,YAAY,GAAG,CAAC,SAAS,MAAM,GAAG;AAEjF,OAAM,KAAK;EACV,SAAS,cACR,qDACA,iBACA,MACA,KACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cAAc,wCAAwC,iBAAiB,MAAM,MAAM;EAC5F,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,gDACA,iBACA,OACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,4JACA,iBACA,OACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,iDACA,iBACA,MACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,6CACA,iBACA,MACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;CAQF,MAAM,aAL0C;EAC/C,UAAU;EACV,SAAS;EACT,QAAQ;EACR,CACkC,QAAQ,iBAAiB,eAAe;AAE3E,OAAM,KAAK;EACV,SAAS,cACR,kCAAkC,QAAQ,iBAAiB,WAAW,+BACtE,iBACA,OACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,uGACA,iBACA,OACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,kFACA,iBACA,OACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,6EACA,iBACA,OACA,MACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,KAAI,QAAQ,OACX,OAAM,KAAK;EACV,SAAS,cAAc,sCAAsC,iBAAiB,OAAO,MAAM;EAC3F,KAAK;EACL,cAAc;EACd,aAAa,QAAQ;EACrB,CAAC;AAKH,KAAI,SAAS,eAAe,SAAS,YAAY,SAAS,GAAG;AAC5D,QAAM,KAAK;GACV,SACC;GACD,KAAK;GACL,cAAc;GACd,aAAa;GACb,CAAC;AAEF,OAAK,MAAM,YAAY,SAAS,aAAa;AAE5C,OAAI,aAAa,YAAY,aAAa,cAAc,aAAa,OAAQ;GAG7E,MAAM,SACL,aAAa,iBAAiB,mBAAmB,GAAG,SAAS,aAAa,CAAC;GAC5E,MAAM,QAAQ,aAAa,iBAAiB,iBAAiB;AAC7D,SAAM,KAAK;IACV,SAAS,cAAc,eAAe,MAAM,aAAa,iBAAiB,MAAM,KAAK;IACrF,KAAK;IACL,cAAc,QAAQ,SAAS,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC/D,aAAa;IACb,CAAC;;;AAKJ,OAAM,KAAK;EACV,SACC;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,yDACA,iBACA,OACA,KACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,0DACA,iBACA,OACA,KACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;AAEF,OAAM,KAAK;EACV,SAAS,cACR,qDACA,iBACA,OACA,KACA;EACD,KAAK;EACL,cAAc;EACd,aAAa;EACb,CAAC;CAIF,MAAM,SAAS,kBAAkB,SAAS;AAE1C,KAAI,OAAO,SAAS,GAAG;AACtB,QAAM,KAAK;GACV,SACC;GACD,KAAK;GACL,cAAc;GACd,aAAa;GACb,CAAC;AAEF,OAAK,MAAM,OAAO,QAAQ;GACzB,MAAM,cAAc,QAAQ,kBAAkB,YAAY,GAAG,CAAC,SAAS,MAAM,GAAG;AAGhF,gBAAa,IAAI,IAAI,gBAAgB,YAAY;AAEjD,SAAM,KAAK;IACV,SAAS,cACR,2BAA2B,IAAI,YAAY,cAAc,IAAI,OAAO,UAAU,IAAI,OAAO,IACzF,IAAI,aACJ,MACA,KACA;IACD,KAAK,IAAI;IACT,cAAc,QAAQ,IAAI,eAAe,aAAa,CAAC;IACvD,aAAa;IACb,CAAC;;;CAMJ,MAAM,iBAAiB,OAAO,KAAK,MAAM,EAAE,eAAe;CAC1D,MAAM,kBAAkB,SAAS,eAAe,EAAE,EAAE,KAAK,MAAM,GAAG,EAAE,aAAa,CAAC,UAAU;CAC5F,MAAM,WAAW,IAAI,IAAY;EAChC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAG;EACH,GAAG;EACH,CAAC;AAEF,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;EAC/C,MAAM,aAAa,CAAC,GAAG,WAAW,aAAa,GAAG,WAAW,gBAAgB;AAE7E,MAAI,WAAW,WAAW,EAAG;AAG7B,QAAM,KAAK;GACV,SAAS,0FAA0F,WAAW,KAAK,GAAG,WAAW,KAAK;GACtI,KAAK;GACL,cAAc;GACd,aAAa;GACb,CAAC;EAEF,MAAM,WAAW,QAAQ,kBAAkB,IAAI,WAAW,GAAG;AAE7D,OAAK,MAAM,UAAU,YAAY;AAChC,OAAI,SAAS,IAAI,OAAO,IAAI,CAAE;AAC9B,YAAS,IAAI,OAAO,IAAI;GAExB,MAAM,cAAc,QAAQ,kBAAkB,YAAY,GAAG,CAAC,SAAS,MAAM,GAAG;GAGhF,MAAM,YAAY,OAAO,IAAI,SAAS,QAAQ;GAC9C,MAAM,YAAY,YAAY,YAAY,yBAAyB;GAEnE,MAAM,eAAe,YAClB,YACA,OAAO,SACN,QAAQ,OAAO,IAAI,aAAa,CAAC,SACjC,OAAO;GAEX,IAAI;AACJ,OAAI,UACH,eAAc;YACJ,OAAO,OAEjB,KAAI,OAAO,aAAa,WAAW,KAAK,IAAI,OAAO,aAAa,SAAS,IAAI,EAAE;IAC9E,MAAM,SAAS,OAAO,aAAa,MAAM,GAAG,GAAG;AAC/C,kBAAc,aAAa,IAAI,OAAO,IAAI,OAAO;SAEjD,eAAc;OAGf,eAAc,OAAO;AAItB,gBAAa,IAAI,OAAO,KAAK,YAAY;AAEzC,SAAM,KAAK;IACV,SAAS,cAAc,OAAO,aAAa,WAAW,MAAM,OAAO,UAAU,OAAO,OAAO;IAC3F,KAAK,OAAO;IACZ;IACA;IACA,CAAC;;;CAMJ,MAAM,SAAS;EACd;EACA;EACA,mCAAkB,IAAI,MAAM,EAAC,aAAa;EAC1C;EACA;EACA,CAAC,KAAK,KAAK;CAEZ,IAAI,aAAa;CACjB,IAAI,MAAM;AAEV,MAAK,MAAM,QAAQ,MAClB,KAAI,KAAK,QAAQ,IAAI;AAEpB,gBAAc,GAAG,KAAK,QAAQ;AAC9B,SAAO,GAAG,KAAK,QAAQ;QACjB;AACN,gBAAc,GAAG,KAAK,QAAQ,IAAI,KAAK,IAAI,GAAG,KAAK,aAAa;AAChE,SAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,IAAI,GAAG,KAAK,YAAY;;AAI1D,QAAO;EAAE;EAAY;EAAK;;;;;AAM3B,SAAS,cACR,aACA,aACA,UACA,QACS;AACT,QAAO,CACN,KAAK,eACL,cAAc,YAAY,eAAe,WAAW,QAAQ,KAAK,aAAa,SAAS,QAAQ,OAC/F,CAAC,KAAK,KAAK;;;;;;;;;AAyBb,SAAgB,qBAAqB,UAAyC;CAC7E,MAAM,SAAwB,EAAE;CAChC,MAAM,2BAAW,IAAI,KAAa;CAGlC,MAAM,WAAgC;EACrC;GACC,KAAK;GACL,aAAa;GACb,QAAQ;GACR,UAAU;GACV,cAAc;GACd;EACD;GACC,KAAK;GACL,aAAa;GACb,QAAQ;GACR,UAAU;GACV,cAAc;GACd;EACD;GACC,KAAK;GACL,aAAa;GACb,QAAQ;GACR,UAAU;GACV,cAAc;GACd;EACD;AAED,MAAK,MAAM,KAAK,SACf,UAAS,IAAI,EAAE,IAAI;AAGpB,QAAO,KAAK;EACX,aAAa;EACb,aAAa;EACb,WAAW;EACX,MAAM;EACN,CAAC;AAGF,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;EAC/C,MAAM,aAAa,CAAC,GAAG,WAAW,aAAa,GAAG,WAAW,gBAAgB;EAE7E,MAAM,OAA4B,EAAE;AAEpC,OAAK,MAAM,UAAU,YAAY;AAChC,OAAI,SAAS,IAAI,OAAO,IAAI,CAAE;AAC9B,YAAS,IAAI,OAAO,IAAI;AAExB,QAAK,KAAK;IACT,KAAK,OAAO;IACZ,aAAa,OAAO;IACpB,QAAQ,OAAO;IACf,UAAU,OAAO;IACjB,cAAc,OAAO;IACrB,CAAC;;AAGH,MAAI,KAAK,WAAW,EAAG;AAEvB,SAAO,KAAK;GACX,aAAa,WAAW;GACxB,aAAa,WAAW;GACxB,WAAW,WAAW;GACtB;GACA,CAAC;;AAGH,QAAO"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const require_vi_2VT5v0um = require('../vi.2VT5v0um-BmRMvymT.cjs');
|
|
2
|
+
const require_generate = require('../generate.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/generators/env.test.ts
|
|
5
|
+
require_vi_2VT5v0um.describe("generateEnvFiles (via generate)", () => {
|
|
6
|
+
const baseInput = {
|
|
7
|
+
projectName: "env-test",
|
|
8
|
+
services: ["redis"],
|
|
9
|
+
skillPacks: [],
|
|
10
|
+
proxy: "none",
|
|
11
|
+
gpu: false,
|
|
12
|
+
platform: "linux/amd64",
|
|
13
|
+
deployment: "local",
|
|
14
|
+
generateSecrets: true,
|
|
15
|
+
openclawVersion: "latest"
|
|
16
|
+
};
|
|
17
|
+
require_vi_2VT5v0um.it("generates .env and .env.example files", () => {
|
|
18
|
+
const result = require_generate.generate(baseInput);
|
|
19
|
+
require_vi_2VT5v0um.globalExpect(result.files).toHaveProperty(".env");
|
|
20
|
+
require_vi_2VT5v0um.globalExpect(result.files).toHaveProperty(".env.example");
|
|
21
|
+
});
|
|
22
|
+
require_vi_2VT5v0um.it(".env.example has empty values for secrets", () => {
|
|
23
|
+
const envExample = require_generate.generate(baseInput).files[".env.example"];
|
|
24
|
+
require_vi_2VT5v0um.globalExpect(envExample).toContain("REDIS_PASSWORD=");
|
|
25
|
+
});
|
|
26
|
+
require_vi_2VT5v0um.it(".env has populated secret values when generateSecrets is true", () => {
|
|
27
|
+
const redisLine = require_generate.generate(baseInput).files[".env"].split("\n").find((l) => l.startsWith("REDIS_PASSWORD="));
|
|
28
|
+
require_vi_2VT5v0um.globalExpect(redisLine).toBeDefined();
|
|
29
|
+
const value = redisLine.split("=")[1];
|
|
30
|
+
require_vi_2VT5v0um.globalExpect(value.length).toBeGreaterThan(0);
|
|
31
|
+
});
|
|
32
|
+
require_vi_2VT5v0um.it("env files contain service-specific variables", () => {
|
|
33
|
+
const env = require_generate.generate({
|
|
34
|
+
...baseInput,
|
|
35
|
+
services: [
|
|
36
|
+
"redis",
|
|
37
|
+
"postgresql",
|
|
38
|
+
"n8n"
|
|
39
|
+
]
|
|
40
|
+
}).files[".env"];
|
|
41
|
+
require_vi_2VT5v0um.globalExpect(env).toContain("REDIS_PASSWORD");
|
|
42
|
+
require_vi_2VT5v0um.globalExpect(env).toContain("POSTGRES_PASSWORD");
|
|
43
|
+
});
|
|
44
|
+
require_vi_2VT5v0um.it("env files group variables by service with comments", () => {
|
|
45
|
+
const envExample = require_generate.generate(baseInput).files[".env.example"];
|
|
46
|
+
require_vi_2VT5v0um.globalExpect(envExample).toContain("#");
|
|
47
|
+
});
|
|
48
|
+
require_vi_2VT5v0um.it(".env references domain when proxy is set", () => {
|
|
49
|
+
const env = require_generate.generate({
|
|
50
|
+
...baseInput,
|
|
51
|
+
proxy: "caddy",
|
|
52
|
+
domain: "example.com"
|
|
53
|
+
}).files[".env"];
|
|
54
|
+
require_vi_2VT5v0um.globalExpect(env).toContain("example.com");
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
//# sourceMappingURL=env.test.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.test.cjs","names":["describe","generate"],"sources":["../../src/generators/env.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generate } from \"../generate.js\";\n\ndescribe(\"generateEnvFiles (via generate)\", () => {\n\tconst baseInput = {\n\t\tprojectName: \"env-test\",\n\t\tservices: [\"redis\"],\n\t\tskillPacks: [] as string[],\n\t\tproxy: \"none\" as const,\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 .env and .env.example files\", () => {\n\t\tconst result = generate(baseInput);\n\n\t\texpect(result.files).toHaveProperty(\".env\");\n\t\texpect(result.files).toHaveProperty(\".env.example\");\n\t});\n\n\tit(\".env.example has empty values for secrets\", () => {\n\t\tconst result = generate(baseInput);\n\t\tconst envExample = result.files[\".env.example\"]!;\n\n\t\t// .env.example should have placeholder empty values for secrets\n\t\texpect(envExample).toContain(\"REDIS_PASSWORD=\");\n\t});\n\n\tit(\".env has populated secret values when generateSecrets is true\", () => {\n\t\tconst result = generate(baseInput);\n\t\tconst env = result.files[\".env\"]!;\n\n\t\t// Find REDIS_PASSWORD line and check it has a value\n\t\tconst redisLine = env.split(\"\\n\").find((l) => l.startsWith(\"REDIS_PASSWORD=\"));\n\t\texpect(redisLine).toBeDefined();\n\t\t// Value should not be empty\n\t\tconst value = redisLine!.split(\"=\")[1];\n\t\texpect(value!.length).toBeGreaterThan(0);\n\t});\n\n\tit(\"env files contain service-specific variables\", () => {\n\t\tconst result = generate({\n\t\t\t...baseInput,\n\t\t\tservices: [\"redis\", \"postgresql\", \"n8n\"],\n\t\t});\n\t\tconst env = result.files[\".env\"]!;\n\n\t\texpect(env).toContain(\"REDIS_PASSWORD\");\n\t\texpect(env).toContain(\"POSTGRES_PASSWORD\");\n\t});\n\n\tit(\"env files group variables by service with comments\", () => {\n\t\tconst result = generate(baseInput);\n\t\tconst envExample = result.files[\".env.example\"]!;\n\n\t\t// Should have comment sections\n\t\texpect(envExample).toContain(\"#\");\n\t});\n\n\tit(\".env references domain when proxy is set\", () => {\n\t\tconst result = generate({\n\t\t\t...baseInput,\n\t\t\tproxy: \"caddy\",\n\t\t\tdomain: \"example.com\",\n\t\t});\n\t\tconst env = result.files[\".env\"]!;\n\n\t\texpect(env).toContain(\"example.com\");\n\t});\n});\n"],"mappings":";;;;AAGAA,6BAAS,yCAAyC;CACjD,MAAM,YAAY;EACjB,aAAa;EACb,UAAU,CAAC,QAAQ;EACnB,YAAY,EAAE;EACd,OAAO;EACP,KAAK;EACL,UAAU;EACV,YAAY;EACZ,iBAAiB;EACjB,iBAAiB;EACjB;AAED,wBAAG,+CAA+C;EACjD,MAAM,SAASC,0BAAS,UAAU;AAElC,mCAAO,OAAO,MAAM,CAAC,eAAe,OAAO;AAC3C,mCAAO,OAAO,MAAM,CAAC,eAAe,eAAe;GAClD;AAEF,wBAAG,mDAAmD;EAErD,MAAM,aADSA,0BAAS,UAAU,CACR,MAAM;AAGhC,mCAAO,WAAW,CAAC,UAAU,kBAAkB;GAC9C;AAEF,wBAAG,uEAAuE;EAKzE,MAAM,YAJSA,0BAAS,UAAU,CACf,MAAM,QAGH,MAAM,KAAK,CAAC,MAAM,MAAM,EAAE,WAAW,kBAAkB,CAAC;AAC9E,mCAAO,UAAU,CAAC,aAAa;EAE/B,MAAM,QAAQ,UAAW,MAAM,IAAI,CAAC;AACpC,mCAAO,MAAO,OAAO,CAAC,gBAAgB,EAAE;GACvC;AAEF,wBAAG,sDAAsD;EAKxD,MAAM,MAJSA,0BAAS;GACvB,GAAG;GACH,UAAU;IAAC;IAAS;IAAc;IAAM;GACxC,CAAC,CACiB,MAAM;AAEzB,mCAAO,IAAI,CAAC,UAAU,iBAAiB;AACvC,mCAAO,IAAI,CAAC,UAAU,oBAAoB;GACzC;AAEF,wBAAG,4DAA4D;EAE9D,MAAM,aADSA,0BAAS,UAAU,CACR,MAAM;AAGhC,mCAAO,WAAW,CAAC,UAAU,IAAI;GAChC;AAEF,wBAAG,kDAAkD;EAMpD,MAAM,MALSA,0BAAS;GACvB,GAAG;GACH,OAAO;GACP,QAAQ;GACR,CAAC,CACiB,MAAM;AAEzB,mCAAO,IAAI,CAAC,UAAU,cAAc;GACnC;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/generators/get-shit-done.ts
|
|
4
|
+
function generateGsdScripts(runtimes) {
|
|
5
|
+
if (!runtimes || runtimes.length === 0) return;
|
|
6
|
+
const flags = runtimes.map((r) => `--${r}`).join(" ");
|
|
7
|
+
return {
|
|
8
|
+
sh: `#!/usr/bin/env bash
|
|
9
|
+
# Automatically generated by Better-OpenClaw
|
|
10
|
+
|
|
11
|
+
if ! command -v npx &> /dev/null; then
|
|
12
|
+
echo "Error: Node.js (npx) is not installed. Please install Node.js."
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
echo "Installing Get-Shit-Done workflows for requested runtimes: ${runtimes.join(", ")}"
|
|
17
|
+
npx yes | npx get-shit-done-cc@latest --local ${flags}
|
|
18
|
+
|
|
19
|
+
echo "GSD Integration Complete!"
|
|
20
|
+
echo "Check the injected folders matching your target platform (e.g. .claude, .codex)."
|
|
21
|
+
`,
|
|
22
|
+
ps1: `# Automatically generated by Better-OpenClaw
|
|
23
|
+
|
|
24
|
+
if (!(Get-Command npx -ErrorAction SilentlyContinue)) {
|
|
25
|
+
Write-Error "Error: Node.js (npx) is not installed. Please install Node.js."
|
|
26
|
+
exit 1
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
Write-Host "Installing Get-Shit-Done workflows for requested runtimes: ${runtimes.join(", ")}"
|
|
30
|
+
npx get-shit-done-cc@latest --local ${flags}
|
|
31
|
+
|
|
32
|
+
Write-Host "GSD Integration Complete!"
|
|
33
|
+
Write-Host "Check the injected folders matching your target platform (e.g. .claude, .codex)."
|
|
34
|
+
`
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
exports.generateGsdScripts = generateGsdScripts;
|
|
40
|
+
//# sourceMappingURL=get-shit-done.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-shit-done.cjs","names":[],"sources":["../../src/generators/get-shit-done.ts"],"sourcesContent":["import type { GsdRuntime } from \"../types.js\";\n\nexport function generateGsdScripts(\n\truntimes: GsdRuntime[] | undefined,\n): { sh: string; ps1: string } | undefined {\n\tif (!runtimes || runtimes.length === 0) {\n\t\treturn undefined;\n\t}\n\n\t// Map runtimes to their corresponding CLI flags for GSD installer\n\tconst flags = runtimes.map((r) => `--${r}`).join(\" \");\n\n\tconst sh = `#!/usr/bin/env bash\n# Automatically generated by Better-OpenClaw\n\nif ! command -v npx &> /dev/null; then\n echo \"Error: Node.js (npx) is not installed. Please install Node.js.\"\n exit 1\nfi\n\necho \"Installing Get-Shit-Done workflows for requested runtimes: ${runtimes.join(\", \")}\"\nnpx yes | npx get-shit-done-cc@latest --local ${flags}\n\necho \"GSD Integration Complete!\"\necho \"Check the injected folders matching your target platform (e.g. .claude, .codex).\"\n`;\n\n\tconst ps1 = `# Automatically generated by Better-OpenClaw\n\nif (!(Get-Command npx -ErrorAction SilentlyContinue)) {\n Write-Error \"Error: Node.js (npx) is not installed. Please install Node.js.\"\n exit 1\n}\n\nWrite-Host \"Installing Get-Shit-Done workflows for requested runtimes: ${runtimes.join(\", \")}\"\nnpx get-shit-done-cc@latest --local ${flags}\n\nWrite-Host \"GSD Integration Complete!\"\nWrite-Host \"Check the injected folders matching your target platform (e.g. .claude, .codex).\"\n`;\n\n\treturn { sh, ps1 };\n}\n"],"mappings":";;;AAEA,SAAgB,mBACf,UAC0C;AAC1C,KAAI,CAAC,YAAY,SAAS,WAAW,EACpC;CAID,MAAM,QAAQ,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,IAAI;AA+BrD,QAAO;EAAE,IA7BE;;;;;;;;mEAQuD,SAAS,KAAK,KAAK,CAAC;gDACvC,MAAM;;;;;EAoBxC,KAdD;;;;;;;yEAO4D,SAAS,KAAK,KAAK,CAAC;sCACvD,MAAM;;;;;EAMzB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GsdRuntime } from "../types.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/generators/get-shit-done.d.ts
|
|
4
|
+
declare function generateGsdScripts(runtimes: GsdRuntime[] | undefined): {
|
|
5
|
+
sh: string;
|
|
6
|
+
ps1: string;
|
|
7
|
+
} | undefined;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { generateGsdScripts };
|
|
10
|
+
//# sourceMappingURL=get-shit-done.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-shit-done.d.cts","names":[],"sources":["../../src/generators/get-shit-done.ts"],"mappings":";;;iBAEgB,kBAAA,CACf,QAAA,EAAU,UAAA;EACN,EAAA;EAAY,GAAA;AAAA"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/generators/grafana.ts
|
|
4
|
+
/**
|
|
5
|
+
* Generates Grafana provisioning configuration files.
|
|
6
|
+
*
|
|
7
|
+
* Returns a map of file paths (relative to project root) to file contents.
|
|
8
|
+
* Includes datasource provisioning YAML for the Prometheus connection.
|
|
9
|
+
*/
|
|
10
|
+
function generateGrafanaConfig() {
|
|
11
|
+
const files = {};
|
|
12
|
+
files["config/grafana/provisioning/datasources/prometheus.yml"] = `# ═══════════════════════════════════════════════════════════════════════════════
|
|
13
|
+
# Grafana Datasource Provisioning — Auto-generated by OpenClaw
|
|
14
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
15
|
+
|
|
16
|
+
apiVersion: 1
|
|
17
|
+
|
|
18
|
+
datasources:
|
|
19
|
+
# Prometheus — primary metrics datasource
|
|
20
|
+
- name: Prometheus
|
|
21
|
+
type: prometheus
|
|
22
|
+
access: proxy
|
|
23
|
+
url: http://prometheus:9090
|
|
24
|
+
isDefault: true
|
|
25
|
+
editable: true
|
|
26
|
+
jsonData:
|
|
27
|
+
httpMethod: POST
|
|
28
|
+
timeInterval: "15s"
|
|
29
|
+
exemplarTraceIdDestinations:
|
|
30
|
+
- name: traceID
|
|
31
|
+
datasourceUid: ""
|
|
32
|
+
version: 1
|
|
33
|
+
`;
|
|
34
|
+
files["config/grafana/provisioning/dashboards/default.yml"] = `# ═══════════════════════════════════════════════════════════════════════════════
|
|
35
|
+
# Grafana Dashboard Provisioning — Auto-generated by OpenClaw
|
|
36
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
37
|
+
|
|
38
|
+
apiVersion: 1
|
|
39
|
+
|
|
40
|
+
providers:
|
|
41
|
+
- name: "OpenClaw Dashboards"
|
|
42
|
+
orgId: 1
|
|
43
|
+
folder: "OpenClaw"
|
|
44
|
+
type: file
|
|
45
|
+
disableDeletion: false
|
|
46
|
+
editable: true
|
|
47
|
+
updateIntervalSeconds: 30
|
|
48
|
+
allowUiUpdates: true
|
|
49
|
+
options:
|
|
50
|
+
path: /var/lib/grafana/dashboards
|
|
51
|
+
foldersFromFilesStructure: false
|
|
52
|
+
`;
|
|
53
|
+
files["config/grafana/grafana.ini"] = `# ═══════════════════════════════════════════════════════════════════════════════
|
|
54
|
+
# Grafana Configuration — Auto-generated by OpenClaw
|
|
55
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
56
|
+
|
|
57
|
+
[server]
|
|
58
|
+
root_url = %(protocol)s://%(domain)s/
|
|
59
|
+
|
|
60
|
+
[security]
|
|
61
|
+
# Admin credentials are set via environment variables:
|
|
62
|
+
# GF_SECURITY_ADMIN_USER
|
|
63
|
+
# GF_SECURITY_ADMIN_PASSWORD
|
|
64
|
+
|
|
65
|
+
[auth.anonymous]
|
|
66
|
+
enabled = false
|
|
67
|
+
|
|
68
|
+
[dashboards]
|
|
69
|
+
default_home_dashboard_path = /var/lib/grafana/dashboards/home.json
|
|
70
|
+
|
|
71
|
+
[alerting]
|
|
72
|
+
enabled = true
|
|
73
|
+
|
|
74
|
+
[unified_alerting]
|
|
75
|
+
enabled = true
|
|
76
|
+
|
|
77
|
+
[log]
|
|
78
|
+
mode = console
|
|
79
|
+
level = info
|
|
80
|
+
`;
|
|
81
|
+
return files;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Generates a Grafana dashboard JSON for the OpenClaw stack overview.
|
|
85
|
+
*
|
|
86
|
+
* The dashboard includes:
|
|
87
|
+
* - Service Health (stat panel)
|
|
88
|
+
* - Memory Usage (gauge)
|
|
89
|
+
* - Request Rate (graph)
|
|
90
|
+
*
|
|
91
|
+
* Uses Prometheus as the datasource.
|
|
92
|
+
*/
|
|
93
|
+
function generateGrafanaDashboard() {
|
|
94
|
+
return JSON.stringify({
|
|
95
|
+
annotations: { list: [] },
|
|
96
|
+
editable: true,
|
|
97
|
+
fiscalYearStartMonth: 0,
|
|
98
|
+
graphTooltip: 1,
|
|
99
|
+
links: [],
|
|
100
|
+
panels: [
|
|
101
|
+
{
|
|
102
|
+
id: 1,
|
|
103
|
+
title: "Service Health",
|
|
104
|
+
type: "stat",
|
|
105
|
+
gridPos: {
|
|
106
|
+
h: 8,
|
|
107
|
+
w: 8,
|
|
108
|
+
x: 0,
|
|
109
|
+
y: 0
|
|
110
|
+
},
|
|
111
|
+
datasource: {
|
|
112
|
+
type: "prometheus",
|
|
113
|
+
uid: "prometheus"
|
|
114
|
+
},
|
|
115
|
+
targets: [{
|
|
116
|
+
expr: "count(up{job=~\".+\"} == 1)",
|
|
117
|
+
legendFormat: "Healthy Services",
|
|
118
|
+
refId: "A"
|
|
119
|
+
}],
|
|
120
|
+
fieldConfig: {
|
|
121
|
+
defaults: {
|
|
122
|
+
thresholds: {
|
|
123
|
+
mode: "absolute",
|
|
124
|
+
steps: [
|
|
125
|
+
{
|
|
126
|
+
color: "red",
|
|
127
|
+
value: null
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
color: "yellow",
|
|
131
|
+
value: 1
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
color: "green",
|
|
135
|
+
value: 3
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
color: { mode: "thresholds" },
|
|
140
|
+
mappings: []
|
|
141
|
+
},
|
|
142
|
+
overrides: []
|
|
143
|
+
},
|
|
144
|
+
options: {
|
|
145
|
+
reduceOptions: {
|
|
146
|
+
values: false,
|
|
147
|
+
calcs: ["lastNotNull"],
|
|
148
|
+
fields: ""
|
|
149
|
+
},
|
|
150
|
+
orientation: "auto",
|
|
151
|
+
textMode: "auto",
|
|
152
|
+
colorMode: "background",
|
|
153
|
+
graphMode: "none",
|
|
154
|
+
justifyMode: "auto"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
id: 2,
|
|
159
|
+
title: "Memory Usage",
|
|
160
|
+
type: "gauge",
|
|
161
|
+
gridPos: {
|
|
162
|
+
h: 8,
|
|
163
|
+
w: 8,
|
|
164
|
+
x: 8,
|
|
165
|
+
y: 0
|
|
166
|
+
},
|
|
167
|
+
datasource: {
|
|
168
|
+
type: "prometheus",
|
|
169
|
+
uid: "prometheus"
|
|
170
|
+
},
|
|
171
|
+
targets: [{
|
|
172
|
+
expr: "sum(container_memory_usage_bytes) / sum(machine_memory_bytes) * 100",
|
|
173
|
+
legendFormat: "Memory %",
|
|
174
|
+
refId: "A"
|
|
175
|
+
}],
|
|
176
|
+
fieldConfig: {
|
|
177
|
+
defaults: {
|
|
178
|
+
thresholds: {
|
|
179
|
+
mode: "absolute",
|
|
180
|
+
steps: [
|
|
181
|
+
{
|
|
182
|
+
color: "green",
|
|
183
|
+
value: null
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
color: "yellow",
|
|
187
|
+
value: 60
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
color: "red",
|
|
191
|
+
value: 85
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
color: { mode: "thresholds" },
|
|
196
|
+
min: 0,
|
|
197
|
+
max: 100,
|
|
198
|
+
unit: "percent",
|
|
199
|
+
mappings: []
|
|
200
|
+
},
|
|
201
|
+
overrides: []
|
|
202
|
+
},
|
|
203
|
+
options: {
|
|
204
|
+
reduceOptions: {
|
|
205
|
+
values: false,
|
|
206
|
+
calcs: ["lastNotNull"],
|
|
207
|
+
fields: ""
|
|
208
|
+
},
|
|
209
|
+
orientation: "auto",
|
|
210
|
+
showThresholdLabels: false,
|
|
211
|
+
showThresholdMarkers: true
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: 3,
|
|
216
|
+
title: "Request Rate",
|
|
217
|
+
type: "timeseries",
|
|
218
|
+
gridPos: {
|
|
219
|
+
h: 8,
|
|
220
|
+
w: 8,
|
|
221
|
+
x: 16,
|
|
222
|
+
y: 0
|
|
223
|
+
},
|
|
224
|
+
datasource: {
|
|
225
|
+
type: "prometheus",
|
|
226
|
+
uid: "prometheus"
|
|
227
|
+
},
|
|
228
|
+
targets: [{
|
|
229
|
+
expr: "sum(rate(http_requests_total{job=~\".+\"}[5m])) by (job)",
|
|
230
|
+
legendFormat: "{{job}}",
|
|
231
|
+
refId: "A"
|
|
232
|
+
}],
|
|
233
|
+
fieldConfig: {
|
|
234
|
+
defaults: {
|
|
235
|
+
color: { mode: "palette-classic" },
|
|
236
|
+
custom: {
|
|
237
|
+
axisBorderShow: false,
|
|
238
|
+
axisCenteredZero: false,
|
|
239
|
+
axisColorMode: "text",
|
|
240
|
+
axisLabel: "req/s",
|
|
241
|
+
drawStyle: "line",
|
|
242
|
+
fillOpacity: 10,
|
|
243
|
+
gradientMode: "none",
|
|
244
|
+
lineInterpolation: "smooth",
|
|
245
|
+
lineWidth: 2,
|
|
246
|
+
pointSize: 5,
|
|
247
|
+
showPoints: "auto",
|
|
248
|
+
spanNulls: false,
|
|
249
|
+
stacking: {
|
|
250
|
+
group: "A",
|
|
251
|
+
mode: "none"
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
mappings: [],
|
|
255
|
+
thresholds: {
|
|
256
|
+
mode: "absolute",
|
|
257
|
+
steps: [{
|
|
258
|
+
color: "green",
|
|
259
|
+
value: null
|
|
260
|
+
}]
|
|
261
|
+
},
|
|
262
|
+
unit: "reqps"
|
|
263
|
+
},
|
|
264
|
+
overrides: []
|
|
265
|
+
},
|
|
266
|
+
options: {
|
|
267
|
+
legend: {
|
|
268
|
+
calcs: [],
|
|
269
|
+
displayMode: "list",
|
|
270
|
+
placement: "bottom"
|
|
271
|
+
},
|
|
272
|
+
tooltip: {
|
|
273
|
+
mode: "multi",
|
|
274
|
+
sort: "desc"
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
],
|
|
279
|
+
schemaVersion: 39,
|
|
280
|
+
tags: ["openclaw"],
|
|
281
|
+
templating: { list: [] },
|
|
282
|
+
time: {
|
|
283
|
+
from: "now-1h",
|
|
284
|
+
to: "now"
|
|
285
|
+
},
|
|
286
|
+
timepicker: {},
|
|
287
|
+
timezone: "browser",
|
|
288
|
+
title: "OpenClaw Stack Overview",
|
|
289
|
+
uid: "openclaw-stack-overview"
|
|
290
|
+
}, null, 2);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
//#endregion
|
|
294
|
+
exports.generateGrafanaConfig = generateGrafanaConfig;
|
|
295
|
+
exports.generateGrafanaDashboard = generateGrafanaDashboard;
|
|
296
|
+
//# sourceMappingURL=grafana.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grafana.cjs","names":[],"sources":["../../src/generators/grafana.ts"],"sourcesContent":["/**\n * Generates Grafana provisioning configuration files.\n *\n * Returns a map of file paths (relative to project root) to file contents.\n * Includes datasource provisioning YAML for the Prometheus connection.\n */\nexport function generateGrafanaConfig(): Record<string, string> {\n\tconst files: Record<string, string> = {};\n\n\t// ── Datasource Provisioning ─────────────────────────────────────────────\n\n\tfiles[\"config/grafana/provisioning/datasources/prometheus.yml\"] =\n\t\t`# ═══════════════════════════════════════════════════════════════════════════════\n# Grafana Datasource Provisioning — Auto-generated by OpenClaw\n# ═══════════════════════════════════════════════════════════════════════════════\n\napiVersion: 1\n\ndatasources:\n # Prometheus — primary metrics datasource\n - name: Prometheus\n type: prometheus\n access: proxy\n url: http://prometheus:9090\n isDefault: true\n editable: true\n jsonData:\n httpMethod: POST\n timeInterval: \"15s\"\n exemplarTraceIdDestinations:\n - name: traceID\n datasourceUid: \"\"\n version: 1\n`;\n\n\t// ── Dashboard Provisioning ───────────────────────────────────────────────\n\n\tfiles[\"config/grafana/provisioning/dashboards/default.yml\"] =\n\t\t`# ═══════════════════════════════════════════════════════════════════════════════\n# Grafana Dashboard Provisioning — Auto-generated by OpenClaw\n# ═══════════════════════════════════════════════════════════════════════════════\n\napiVersion: 1\n\nproviders:\n - name: \"OpenClaw Dashboards\"\n orgId: 1\n folder: \"OpenClaw\"\n type: file\n disableDeletion: false\n editable: true\n updateIntervalSeconds: 30\n allowUiUpdates: true\n options:\n path: /var/lib/grafana/dashboards\n foldersFromFilesStructure: false\n`;\n\n\t// ── Grafana Configuration (grafana.ini overrides) ────────────────────────\n\n\tfiles[\"config/grafana/grafana.ini\"] =\n\t\t`# ═══════════════════════════════════════════════════════════════════════════════\n# Grafana Configuration — Auto-generated by OpenClaw\n# ═══════════════════════════════════════════════════════════════════════════════\n\n[server]\nroot_url = %(protocol)s://%(domain)s/\n\n[security]\n# Admin credentials are set via environment variables:\n# GF_SECURITY_ADMIN_USER\n# GF_SECURITY_ADMIN_PASSWORD\n\n[auth.anonymous]\nenabled = false\n\n[dashboards]\ndefault_home_dashboard_path = /var/lib/grafana/dashboards/home.json\n\n[alerting]\nenabled = true\n\n[unified_alerting]\nenabled = true\n\n[log]\nmode = console\nlevel = info\n`;\n\n\treturn files;\n}\n\n/**\n * Generates a Grafana dashboard JSON for the OpenClaw stack overview.\n *\n * The dashboard includes:\n * - Service Health (stat panel)\n * - Memory Usage (gauge)\n * - Request Rate (graph)\n *\n * Uses Prometheus as the datasource.\n */\nexport function generateGrafanaDashboard(): string {\n\tconst dashboard = {\n\t\tannotations: { list: [] },\n\t\teditable: true,\n\t\tfiscalYearStartMonth: 0,\n\t\tgraphTooltip: 1,\n\t\tlinks: [],\n\t\tpanels: [\n\t\t\t{\n\t\t\t\t// ── Service Health (stat panel) ──\n\t\t\t\tid: 1,\n\t\t\t\ttitle: \"Service Health\",\n\t\t\t\ttype: \"stat\",\n\t\t\t\tgridPos: { h: 8, w: 8, x: 0, y: 0 },\n\t\t\t\tdatasource: { type: \"prometheus\", uid: \"prometheus\" },\n\t\t\t\ttargets: [\n\t\t\t\t\t{\n\t\t\t\t\t\texpr: 'count(up{job=~\".+\"} == 1)',\n\t\t\t\t\t\tlegendFormat: \"Healthy Services\",\n\t\t\t\t\t\trefId: \"A\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tfieldConfig: {\n\t\t\t\t\tdefaults: {\n\t\t\t\t\t\tthresholds: {\n\t\t\t\t\t\t\tmode: \"absolute\",\n\t\t\t\t\t\t\tsteps: [\n\t\t\t\t\t\t\t\t{ color: \"red\", value: null },\n\t\t\t\t\t\t\t\t{ color: \"yellow\", value: 1 },\n\t\t\t\t\t\t\t\t{ color: \"green\", value: 3 },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcolor: { mode: \"thresholds\" },\n\t\t\t\t\t\tmappings: [],\n\t\t\t\t\t},\n\t\t\t\t\toverrides: [],\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\treduceOptions: {\n\t\t\t\t\t\tvalues: false,\n\t\t\t\t\t\tcalcs: [\"lastNotNull\"],\n\t\t\t\t\t\tfields: \"\",\n\t\t\t\t\t},\n\t\t\t\t\torientation: \"auto\",\n\t\t\t\t\ttextMode: \"auto\",\n\t\t\t\t\tcolorMode: \"background\",\n\t\t\t\t\tgraphMode: \"none\",\n\t\t\t\t\tjustifyMode: \"auto\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ── Memory Usage (gauge) ──\n\t\t\t\tid: 2,\n\t\t\t\ttitle: \"Memory Usage\",\n\t\t\t\ttype: \"gauge\",\n\t\t\t\tgridPos: { h: 8, w: 8, x: 8, y: 0 },\n\t\t\t\tdatasource: { type: \"prometheus\", uid: \"prometheus\" },\n\t\t\t\ttargets: [\n\t\t\t\t\t{\n\t\t\t\t\t\texpr: \"sum(container_memory_usage_bytes) / sum(machine_memory_bytes) * 100\",\n\t\t\t\t\t\tlegendFormat: \"Memory %\",\n\t\t\t\t\t\trefId: \"A\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tfieldConfig: {\n\t\t\t\t\tdefaults: {\n\t\t\t\t\t\tthresholds: {\n\t\t\t\t\t\t\tmode: \"absolute\",\n\t\t\t\t\t\t\tsteps: [\n\t\t\t\t\t\t\t\t{ color: \"green\", value: null },\n\t\t\t\t\t\t\t\t{ color: \"yellow\", value: 60 },\n\t\t\t\t\t\t\t\t{ color: \"red\", value: 85 },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcolor: { mode: \"thresholds\" },\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tunit: \"percent\",\n\t\t\t\t\t\tmappings: [],\n\t\t\t\t\t},\n\t\t\t\t\toverrides: [],\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\treduceOptions: {\n\t\t\t\t\t\tvalues: false,\n\t\t\t\t\t\tcalcs: [\"lastNotNull\"],\n\t\t\t\t\t\tfields: \"\",\n\t\t\t\t\t},\n\t\t\t\t\torientation: \"auto\",\n\t\t\t\t\tshowThresholdLabels: false,\n\t\t\t\t\tshowThresholdMarkers: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ── Request Rate (graph / timeseries) ──\n\t\t\t\tid: 3,\n\t\t\t\ttitle: \"Request Rate\",\n\t\t\t\ttype: \"timeseries\",\n\t\t\t\tgridPos: { h: 8, w: 8, x: 16, y: 0 },\n\t\t\t\tdatasource: { type: \"prometheus\", uid: \"prometheus\" },\n\t\t\t\ttargets: [\n\t\t\t\t\t{\n\t\t\t\t\t\texpr: 'sum(rate(http_requests_total{job=~\".+\"}[5m])) by (job)',\n\t\t\t\t\t\tlegendFormat: \"{{job}}\",\n\t\t\t\t\t\trefId: \"A\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tfieldConfig: {\n\t\t\t\t\tdefaults: {\n\t\t\t\t\t\tcolor: { mode: \"palette-classic\" },\n\t\t\t\t\t\tcustom: {\n\t\t\t\t\t\t\taxisBorderShow: false,\n\t\t\t\t\t\t\taxisCenteredZero: false,\n\t\t\t\t\t\t\taxisColorMode: \"text\",\n\t\t\t\t\t\t\taxisLabel: \"req/s\",\n\t\t\t\t\t\t\tdrawStyle: \"line\",\n\t\t\t\t\t\t\tfillOpacity: 10,\n\t\t\t\t\t\t\tgradientMode: \"none\",\n\t\t\t\t\t\t\tlineInterpolation: \"smooth\",\n\t\t\t\t\t\t\tlineWidth: 2,\n\t\t\t\t\t\t\tpointSize: 5,\n\t\t\t\t\t\t\tshowPoints: \"auto\",\n\t\t\t\t\t\t\tspanNulls: false,\n\t\t\t\t\t\t\tstacking: { group: \"A\", mode: \"none\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmappings: [],\n\t\t\t\t\t\tthresholds: {\n\t\t\t\t\t\t\tmode: \"absolute\",\n\t\t\t\t\t\t\tsteps: [{ color: \"green\", value: null }],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunit: \"reqps\",\n\t\t\t\t\t},\n\t\t\t\t\toverrides: [],\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\tlegend: { calcs: [], displayMode: \"list\", placement: \"bottom\" },\n\t\t\t\t\ttooltip: { mode: \"multi\", sort: \"desc\" },\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tschemaVersion: 39,\n\t\ttags: [\"openclaw\"],\n\t\ttemplating: { list: [] },\n\t\ttime: { from: \"now-1h\", to: \"now\" },\n\t\ttimepicker: {},\n\t\ttimezone: \"browser\",\n\t\ttitle: \"OpenClaw Stack Overview\",\n\t\tuid: \"openclaw-stack-overview\",\n\t};\n\n\treturn JSON.stringify(dashboard, null, 2);\n}\n"],"mappings":";;;;;;;;;AAMA,SAAgB,wBAAgD;CAC/D,MAAM,QAAgC,EAAE;AAIxC,OAAM,4DACL;;;;;;;;;;;;;;;;;;;;;;AAyBD,OAAM,wDACL;;;;;;;;;;;;;;;;;;;AAsBD,OAAM,gCACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BD,QAAO;;;;;;;;;;;;AAaR,SAAgB,2BAAmC;AAsJlD,QAAO,KAAK,UArJM;EACjB,aAAa,EAAE,MAAM,EAAE,EAAE;EACzB,UAAU;EACV,sBAAsB;EACtB,cAAc;EACd,OAAO,EAAE;EACT,QAAQ;GACP;IAEC,IAAI;IACJ,OAAO;IACP,MAAM;IACN,SAAS;KAAE,GAAG;KAAG,GAAG;KAAG,GAAG;KAAG,GAAG;KAAG;IACnC,YAAY;KAAE,MAAM;KAAc,KAAK;KAAc;IACrD,SAAS,CACR;KACC,MAAM;KACN,cAAc;KACd,OAAO;KACP,CACD;IACD,aAAa;KACZ,UAAU;MACT,YAAY;OACX,MAAM;OACN,OAAO;QACN;SAAE,OAAO;SAAO,OAAO;SAAM;QAC7B;SAAE,OAAO;SAAU,OAAO;SAAG;QAC7B;SAAE,OAAO;SAAS,OAAO;SAAG;QAC5B;OACD;MACD,OAAO,EAAE,MAAM,cAAc;MAC7B,UAAU,EAAE;MACZ;KACD,WAAW,EAAE;KACb;IACD,SAAS;KACR,eAAe;MACd,QAAQ;MACR,OAAO,CAAC,cAAc;MACtB,QAAQ;MACR;KACD,aAAa;KACb,UAAU;KACV,WAAW;KACX,WAAW;KACX,aAAa;KACb;IACD;GACD;IAEC,IAAI;IACJ,OAAO;IACP,MAAM;IACN,SAAS;KAAE,GAAG;KAAG,GAAG;KAAG,GAAG;KAAG,GAAG;KAAG;IACnC,YAAY;KAAE,MAAM;KAAc,KAAK;KAAc;IACrD,SAAS,CACR;KACC,MAAM;KACN,cAAc;KACd,OAAO;KACP,CACD;IACD,aAAa;KACZ,UAAU;MACT,YAAY;OACX,MAAM;OACN,OAAO;QACN;SAAE,OAAO;SAAS,OAAO;SAAM;QAC/B;SAAE,OAAO;SAAU,OAAO;SAAI;QAC9B;SAAE,OAAO;SAAO,OAAO;SAAI;QAC3B;OACD;MACD,OAAO,EAAE,MAAM,cAAc;MAC7B,KAAK;MACL,KAAK;MACL,MAAM;MACN,UAAU,EAAE;MACZ;KACD,WAAW,EAAE;KACb;IACD,SAAS;KACR,eAAe;MACd,QAAQ;MACR,OAAO,CAAC,cAAc;MACtB,QAAQ;MACR;KACD,aAAa;KACb,qBAAqB;KACrB,sBAAsB;KACtB;IACD;GACD;IAEC,IAAI;IACJ,OAAO;IACP,MAAM;IACN,SAAS;KAAE,GAAG;KAAG,GAAG;KAAG,GAAG;KAAI,GAAG;KAAG;IACpC,YAAY;KAAE,MAAM;KAAc,KAAK;KAAc;IACrD,SAAS,CACR;KACC,MAAM;KACN,cAAc;KACd,OAAO;KACP,CACD;IACD,aAAa;KACZ,UAAU;MACT,OAAO,EAAE,MAAM,mBAAmB;MAClC,QAAQ;OACP,gBAAgB;OAChB,kBAAkB;OAClB,eAAe;OACf,WAAW;OACX,WAAW;OACX,aAAa;OACb,cAAc;OACd,mBAAmB;OACnB,WAAW;OACX,WAAW;OACX,YAAY;OACZ,WAAW;OACX,UAAU;QAAE,OAAO;QAAK,MAAM;QAAQ;OACtC;MACD,UAAU,EAAE;MACZ,YAAY;OACX,MAAM;OACN,OAAO,CAAC;QAAE,OAAO;QAAS,OAAO;QAAM,CAAC;OACxC;MACD,MAAM;MACN;KACD,WAAW,EAAE;KACb;IACD,SAAS;KACR,QAAQ;MAAE,OAAO,EAAE;MAAE,aAAa;MAAQ,WAAW;MAAU;KAC/D,SAAS;MAAE,MAAM;MAAS,MAAM;MAAQ;KACxC;IACD;GACD;EACD,eAAe;EACf,MAAM,CAAC,WAAW;EAClB,YAAY,EAAE,MAAM,EAAE,EAAE;EACxB,MAAM;GAAE,MAAM;GAAU,IAAI;GAAO;EACnC,YAAY,EAAE;EACd,UAAU;EACV,OAAO;EACP,KAAK;EACL,EAEgC,MAAM,EAAE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/generators/grafana.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates Grafana provisioning configuration files.
|
|
4
|
+
*
|
|
5
|
+
* Returns a map of file paths (relative to project root) to file contents.
|
|
6
|
+
* Includes datasource provisioning YAML for the Prometheus connection.
|
|
7
|
+
*/
|
|
8
|
+
declare function generateGrafanaConfig(): Record<string, string>;
|
|
9
|
+
/**
|
|
10
|
+
* Generates a Grafana dashboard JSON for the OpenClaw stack overview.
|
|
11
|
+
*
|
|
12
|
+
* The dashboard includes:
|
|
13
|
+
* - Service Health (stat panel)
|
|
14
|
+
* - Memory Usage (gauge)
|
|
15
|
+
* - Request Rate (graph)
|
|
16
|
+
*
|
|
17
|
+
* Uses Prometheus as the datasource.
|
|
18
|
+
*/
|
|
19
|
+
declare function generateGrafanaDashboard(): string;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { generateGrafanaConfig, generateGrafanaDashboard };
|
|
22
|
+
//# sourceMappingURL=grafana.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grafana.d.cts","names":[],"sources":["../../src/generators/grafana.ts"],"mappings":";;AAMA;;;;;iBAAgB,qBAAA,CAAA,GAAyB,MAAA;;;;;;;;;;;iBAiGzB,wBAAA,CAAA"}
|