@better-openclaw/core 1.0.6 → 1.0.8
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/.github/workflows/publish-core.yml +1 -1
- package/dist/bare-metal-partition.d.mts +0 -1
- package/dist/bare-metal-partition.d.mts.map +1 -1
- package/dist/bare-metal-partition.mjs +47 -2
- package/dist/bare-metal-partition.mjs.map +1 -0
- package/dist/bare-metal-partition.test.mjs +3 -3
- package/dist/composer.d.mts +0 -1
- package/dist/composer.d.mts.map +1 -1
- package/dist/composer.mjs +286 -2
- package/dist/composer.mjs.map +1 -0
- package/dist/composer.snapshot.test.mjs +3 -3
- package/dist/composer.test.mjs +3 -3
- package/dist/generate.d.mts +0 -2
- package/dist/generate.d.mts.map +1 -1
- package/dist/generate.mjs +15 -15
- package/dist/generate.test.mjs +1 -1
- package/dist/generators/bare-metal-install.d.mts +0 -2
- package/dist/generators/bare-metal-install.d.mts.map +1 -1
- package/dist/generators/bare-metal-install.mjs +223 -2
- package/dist/generators/bare-metal-install.mjs.map +1 -0
- package/dist/generators/bare-metal-install.test.mjs +2 -2
- package/dist/generators/caddy.d.mts +0 -2
- package/dist/generators/caddy.d.mts.map +1 -1
- package/dist/generators/caddy.mjs +76 -2
- package/dist/generators/caddy.mjs.map +1 -0
- package/dist/generators/env.d.mts +0 -1
- package/dist/generators/env.d.mts.map +1 -1
- package/dist/generators/env.mjs +249 -2
- package/dist/generators/env.mjs.map +1 -0
- package/dist/generators/grafana.d.mts.map +1 -1
- package/dist/generators/grafana.mjs +292 -2
- package/dist/generators/grafana.mjs.map +1 -0
- package/dist/generators/n8n-workflows.d.mts +0 -2
- package/dist/generators/n8n-workflows.d.mts.map +1 -1
- package/dist/generators/n8n-workflows.mjs +74 -2
- package/dist/generators/n8n-workflows.mjs.map +1 -0
- package/dist/generators/native-services.d.mts +0 -1
- package/dist/generators/native-services.d.mts.map +1 -1
- package/dist/generators/native-services.mjs +77 -2
- package/dist/generators/native-services.mjs.map +1 -0
- package/dist/generators/postgres-init.d.mts +0 -1
- package/dist/generators/postgres-init.d.mts.map +1 -1
- package/dist/generators/postgres-init.mjs +150 -2
- package/dist/generators/postgres-init.mjs.map +1 -0
- package/dist/generators/prometheus.d.mts +0 -2
- package/dist/generators/prometheus.d.mts.map +1 -1
- package/dist/generators/prometheus.mjs +106 -2
- package/dist/generators/prometheus.mjs.map +1 -0
- package/dist/generators/readme.d.mts +0 -1
- package/dist/generators/readme.d.mts.map +1 -1
- package/dist/generators/readme.mjs +198 -2
- package/dist/generators/readme.mjs.map +1 -0
- package/dist/generators/scripts.d.mts.map +1 -1
- package/dist/generators/scripts.mjs +350 -2
- package/dist/generators/scripts.mjs.map +1 -0
- package/dist/generators/skills.d.mts +0 -2
- package/dist/generators/skills.d.mts.map +1 -1
- package/dist/generators/skills.mjs +586 -2
- package/dist/generators/skills.mjs.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +15 -15
- package/dist/{magic-string.es-Dew0Rnsa.mjs → magic-string.es-1uTtupLe.mjs} +14 -14
- package/dist/magic-string.es-1uTtupLe.mjs.map +1 -0
- package/dist/presets/registry.d.mts +0 -1
- package/dist/presets/registry.d.mts.map +1 -1
- package/dist/presets/registry.test.mjs +1 -1
- package/dist/resolver.d.mts +0 -2
- package/dist/resolver.d.mts.map +1 -1
- package/dist/resolver.mjs +193 -2
- package/dist/resolver.mjs.map +1 -0
- package/dist/resolver.test.mjs +2 -2
- package/dist/schema.d.mts +714 -2
- package/dist/schema.d.mts.map +1 -0
- package/dist/schema.mjs +6 -2
- package/dist/schema.mjs.map +1 -1
- package/dist/schema.test.mjs +1 -1
- package/dist/services/definitions/anything-llm.d.mts +0 -1
- package/dist/services/definitions/anything-llm.d.mts.map +1 -1
- package/dist/services/definitions/anything-llm.mjs +43 -2
- package/dist/services/definitions/anything-llm.mjs.map +1 -0
- package/dist/services/definitions/appflowy.d.mts +0 -1
- package/dist/services/definitions/appflowy.d.mts.map +1 -1
- package/dist/services/definitions/appflowy.mjs +44 -2
- package/dist/services/definitions/appflowy.mjs.map +1 -0
- package/dist/services/definitions/beszel.d.mts +0 -1
- package/dist/services/definitions/beszel.d.mts.map +1 -1
- package/dist/services/definitions/beszel.mjs +44 -2
- package/dist/services/definitions/beszel.mjs.map +1 -0
- package/dist/services/definitions/browserless.d.mts +0 -1
- package/dist/services/definitions/browserless.d.mts.map +1 -1
- package/dist/services/definitions/browserless.mjs +84 -2
- package/dist/services/definitions/browserless.mjs.map +1 -0
- package/dist/services/definitions/caddy.d.mts +0 -1
- package/dist/services/definitions/caddy.d.mts.map +1 -1
- package/dist/services/definitions/caddy.mjs +51 -2
- package/dist/services/definitions/caddy.mjs.map +1 -0
- package/dist/services/definitions/chromadb.d.mts +0 -1
- package/dist/services/definitions/chromadb.d.mts.map +1 -1
- package/dist/services/definitions/chromadb.mjs +62 -2
- package/dist/services/definitions/chromadb.mjs.map +1 -0
- package/dist/services/definitions/claude-code.d.mts +0 -1
- package/dist/services/definitions/claude-code.d.mts.map +1 -1
- package/dist/services/definitions/claude-code.mjs +51 -2
- package/dist/services/definitions/claude-code.mjs.map +1 -0
- package/dist/services/definitions/code-server.d.mts +0 -1
- package/dist/services/definitions/code-server.d.mts.map +1 -1
- package/dist/services/definitions/code-server.mjs +65 -2
- package/dist/services/definitions/code-server.mjs.map +1 -0
- package/dist/services/definitions/codex.d.mts +0 -1
- package/dist/services/definitions/codex.d.mts.map +1 -1
- package/dist/services/definitions/codex.mjs +44 -2
- package/dist/services/definitions/codex.mjs.map +1 -0
- package/dist/services/definitions/comfyui.d.mts +7 -0
- package/dist/services/definitions/comfyui.d.mts.map +1 -0
- package/dist/services/definitions/comfyui.mjs +83 -0
- package/dist/services/definitions/comfyui.mjs.map +1 -0
- package/dist/services/definitions/convex-dashboard.d.mts +7 -0
- package/dist/services/definitions/convex-dashboard.d.mts.map +1 -0
- package/dist/services/definitions/convex-dashboard.mjs +46 -0
- package/dist/services/definitions/convex-dashboard.mjs.map +1 -0
- package/dist/services/definitions/convex.d.mts +7 -0
- package/dist/services/definitions/convex.d.mts.map +1 -0
- package/dist/services/definitions/convex.mjs +118 -0
- package/dist/services/definitions/convex.mjs.map +1 -0
- package/dist/services/definitions/coolify.d.mts +0 -1
- package/dist/services/definitions/coolify.d.mts.map +1 -1
- package/dist/services/definitions/coolify.mjs +48 -2
- package/dist/services/definitions/coolify.mjs.map +1 -0
- package/dist/services/definitions/desktop-environment.d.mts +7 -0
- package/dist/services/definitions/desktop-environment.d.mts.map +1 -0
- package/dist/services/definitions/desktop-environment.mjs +153 -0
- package/dist/services/definitions/desktop-environment.mjs.map +1 -0
- package/dist/services/definitions/dify.d.mts +0 -1
- package/dist/services/definitions/dify.d.mts.map +1 -1
- package/dist/services/definitions/dify.mjs +80 -2
- package/dist/services/definitions/dify.mjs.map +1 -0
- package/dist/services/definitions/docsgpt.d.mts +0 -1
- package/dist/services/definitions/docsgpt.d.mts.map +1 -1
- package/dist/services/definitions/docsgpt.mjs +44 -2
- package/dist/services/definitions/docsgpt.mjs.map +1 -0
- package/dist/services/definitions/dokploy.d.mts +0 -1
- package/dist/services/definitions/dokploy.d.mts.map +1 -1
- package/dist/services/definitions/dokploy.mjs +48 -2
- package/dist/services/definitions/dokploy.mjs.map +1 -0
- package/dist/services/definitions/dozzle.d.mts +0 -1
- package/dist/services/definitions/dozzle.d.mts.map +1 -1
- package/dist/services/definitions/dozzle.mjs +40 -2
- package/dist/services/definitions/dozzle.mjs.map +1 -0
- package/dist/services/definitions/ffmpeg.d.mts +0 -1
- package/dist/services/definitions/ffmpeg.d.mts.map +1 -1
- package/dist/services/definitions/ffmpeg.mjs +65 -2
- package/dist/services/definitions/ffmpeg.mjs.map +1 -0
- package/dist/services/definitions/flowise.d.mts +0 -1
- package/dist/services/definitions/flowise.d.mts.map +1 -1
- package/dist/services/definitions/flowise.mjs +44 -2
- package/dist/services/definitions/flowise.mjs.map +1 -0
- package/dist/services/definitions/gemini-cli.d.mts +0 -1
- package/dist/services/definitions/gemini-cli.d.mts.map +1 -1
- package/dist/services/definitions/gemini-cli.mjs +45 -2
- package/dist/services/definitions/gemini-cli.mjs.map +1 -0
- package/dist/services/definitions/gitea.d.mts +0 -1
- package/dist/services/definitions/gitea.d.mts.map +1 -1
- package/dist/services/definitions/gitea.mjs +48 -2
- package/dist/services/definitions/gitea.mjs.map +1 -0
- package/dist/services/definitions/gotify.d.mts +0 -1
- package/dist/services/definitions/gotify.d.mts.map +1 -1
- package/dist/services/definitions/gotify.mjs +61 -2
- package/dist/services/definitions/gotify.mjs.map +1 -0
- package/dist/services/definitions/grafana.d.mts +0 -1
- package/dist/services/definitions/grafana.d.mts.map +1 -1
- package/dist/services/definitions/grafana.mjs +62 -2
- package/dist/services/definitions/grafana.mjs.map +1 -0
- package/dist/services/definitions/index.d.mts +8 -2
- package/dist/services/definitions/index.d.mts.map +1 -1
- package/dist/services/definitions/index.mjs +151 -67
- package/dist/services/definitions/index.mjs.map +1 -0
- package/dist/services/definitions/kimi.d.mts +0 -1
- package/dist/services/definitions/kimi.d.mts.map +1 -1
- package/dist/services/definitions/kimi.mjs +45 -2
- package/dist/services/definitions/kimi.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.d.mts +0 -1
- package/dist/services/definitions/lasuite-meet-agents.d.mts.map +1 -1
- package/dist/services/definitions/lasuite-meet-agents.mjs +35 -2
- package/dist/services/definitions/lasuite-meet-agents.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-backend.d.mts +0 -1
- package/dist/services/definitions/lasuite-meet-backend.d.mts.map +1 -1
- package/dist/services/definitions/lasuite-meet-backend.mjs +133 -2
- package/dist/services/definitions/lasuite-meet-backend.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-frontend.d.mts +0 -1
- package/dist/services/definitions/lasuite-meet-frontend.d.mts.map +1 -1
- package/dist/services/definitions/lasuite-meet-frontend.mjs +47 -2
- package/dist/services/definitions/lasuite-meet-frontend.mjs.map +1 -0
- package/dist/services/definitions/librechat.d.mts +0 -1
- package/dist/services/definitions/librechat.d.mts.map +1 -1
- package/dist/services/definitions/librechat.mjs +49 -2
- package/dist/services/definitions/librechat.mjs.map +1 -0
- package/dist/services/definitions/lightpanda.d.mts +0 -1
- package/dist/services/definitions/lightpanda.d.mts.map +1 -1
- package/dist/services/definitions/lightpanda.mjs +58 -2
- package/dist/services/definitions/lightpanda.mjs.map +1 -0
- package/dist/services/definitions/litellm.d.mts +0 -1
- package/dist/services/definitions/litellm.d.mts.map +1 -1
- package/dist/services/definitions/litellm.mjs +46 -2
- package/dist/services/definitions/litellm.mjs.map +1 -0
- package/dist/services/definitions/livekit.d.mts +0 -1
- package/dist/services/definitions/livekit.d.mts.map +1 -1
- package/dist/services/definitions/livekit.mjs +55 -2
- package/dist/services/definitions/livekit.mjs.map +1 -0
- package/dist/services/definitions/matomo.d.mts +0 -1
- package/dist/services/definitions/matomo.d.mts.map +1 -1
- package/dist/services/definitions/matomo.mjs +79 -2
- package/dist/services/definitions/matomo.mjs.map +1 -0
- package/dist/services/definitions/matrix-synapse.d.mts +0 -1
- package/dist/services/definitions/matrix-synapse.d.mts.map +1 -1
- package/dist/services/definitions/matrix-synapse.mjs +87 -2
- package/dist/services/definitions/matrix-synapse.mjs.map +1 -0
- package/dist/services/definitions/mattermost.d.mts +0 -1
- package/dist/services/definitions/mattermost.d.mts.map +1 -1
- package/dist/services/definitions/mattermost.mjs +60 -2
- package/dist/services/definitions/mattermost.mjs.map +1 -0
- package/dist/services/definitions/meilisearch.d.mts +0 -1
- package/dist/services/definitions/meilisearch.d.mts.map +1 -1
- package/dist/services/definitions/meilisearch.mjs +77 -2
- package/dist/services/definitions/meilisearch.mjs.map +1 -0
- package/dist/services/definitions/minio.d.mts +0 -1
- package/dist/services/definitions/minio.d.mts.map +1 -1
- package/dist/services/definitions/minio.mjs +101 -2
- package/dist/services/definitions/minio.mjs.map +1 -0
- package/dist/services/definitions/mission-control.d.mts +7 -0
- package/dist/services/definitions/mission-control.d.mts.map +1 -0
- package/dist/services/definitions/mission-control.mjs +67 -0
- package/dist/services/definitions/mission-control.mjs.map +1 -0
- package/dist/services/definitions/mixpost.d.mts +0 -1
- package/dist/services/definitions/mixpost.d.mts.map +1 -1
- package/dist/services/definitions/mixpost.mjs +86 -2
- package/dist/services/definitions/mixpost.mjs.map +1 -0
- package/dist/services/definitions/motion-canvas.d.mts +0 -1
- package/dist/services/definitions/motion-canvas.d.mts.map +1 -1
- package/dist/services/definitions/motion-canvas.mjs +51 -2
- package/dist/services/definitions/motion-canvas.mjs.map +1 -0
- package/dist/services/definitions/n8n.d.mts +0 -1
- package/dist/services/definitions/n8n.d.mts.map +1 -1
- package/dist/services/definitions/n8n.mjs +153 -2
- package/dist/services/definitions/n8n.mjs.map +1 -0
- package/dist/services/definitions/nocodb.d.mts +0 -1
- package/dist/services/definitions/nocodb.d.mts.map +1 -1
- package/dist/services/definitions/nocodb.mjs +44 -2
- package/dist/services/definitions/nocodb.mjs.map +1 -0
- package/dist/services/definitions/ntfy.d.mts +0 -1
- package/dist/services/definitions/ntfy.d.mts.map +1 -1
- package/dist/services/definitions/ntfy.mjs +62 -2
- package/dist/services/definitions/ntfy.mjs.map +1 -0
- package/dist/services/definitions/ollama.d.mts +0 -1
- package/dist/services/definitions/ollama.d.mts.map +1 -1
- package/dist/services/definitions/ollama.mjs +65 -2
- package/dist/services/definitions/ollama.mjs.map +1 -0
- package/dist/services/definitions/open-webui.d.mts +0 -1
- package/dist/services/definitions/open-webui.d.mts.map +1 -1
- package/dist/services/definitions/open-webui.mjs +49 -2
- package/dist/services/definitions/open-webui.mjs.map +1 -0
- package/dist/services/definitions/opencode.d.mts +0 -1
- package/dist/services/definitions/opencode.d.mts.map +1 -1
- package/dist/services/definitions/opencode.mjs +49 -2
- package/dist/services/definitions/opencode.mjs.map +1 -0
- package/dist/services/definitions/openpanel.d.mts +0 -1
- package/dist/services/definitions/openpanel.d.mts.map +1 -1
- package/dist/services/definitions/openpanel.mjs +45 -2
- package/dist/services/definitions/openpanel.mjs.map +1 -0
- package/dist/services/definitions/outline.d.mts +0 -1
- package/dist/services/definitions/outline.d.mts.map +1 -1
- package/dist/services/definitions/outline.mjs +73 -2
- package/dist/services/definitions/outline.mjs.map +1 -0
- package/dist/services/definitions/paperless-ngx.d.mts +0 -1
- package/dist/services/definitions/paperless-ngx.d.mts.map +1 -1
- package/dist/services/definitions/paperless-ngx.mjs +92 -2
- package/dist/services/definitions/paperless-ngx.mjs.map +1 -0
- package/dist/services/definitions/playwright-server.d.mts +0 -1
- package/dist/services/definitions/playwright-server.d.mts.map +1 -1
- package/dist/services/definitions/playwright-server.mjs +41 -2
- package/dist/services/definitions/playwright-server.mjs.map +1 -0
- package/dist/services/definitions/portainer.d.mts +0 -1
- package/dist/services/definitions/portainer.d.mts.map +1 -1
- package/dist/services/definitions/portainer.mjs +48 -2
- package/dist/services/definitions/portainer.mjs.map +1 -0
- package/dist/services/definitions/postgresql.d.mts +0 -1
- package/dist/services/definitions/postgresql.d.mts.map +1 -1
- package/dist/services/definitions/postgresql.mjs +83 -2
- package/dist/services/definitions/postgresql.mjs.map +1 -0
- package/dist/services/definitions/postiz.d.mts +0 -1
- package/dist/services/definitions/postiz.d.mts.map +1 -1
- package/dist/services/definitions/postiz.mjs +82 -2
- package/dist/services/definitions/postiz.mjs.map +1 -0
- package/dist/services/definitions/prometheus.d.mts +0 -1
- package/dist/services/definitions/prometheus.d.mts.map +1 -1
- package/dist/services/definitions/prometheus.mjs +51 -2
- package/dist/services/definitions/prometheus.mjs.map +1 -0
- package/dist/services/definitions/qdrant.d.mts +0 -1
- package/dist/services/definitions/qdrant.d.mts.map +1 -1
- package/dist/services/definitions/qdrant.mjs +76 -2
- package/dist/services/definitions/qdrant.mjs.map +1 -0
- package/dist/services/definitions/redis.d.mts +0 -1
- package/dist/services/definitions/redis.d.mts.map +1 -1
- package/dist/services/definitions/redis.mjs +90 -2
- package/dist/services/definitions/redis.mjs.map +1 -0
- package/dist/services/definitions/remotion.d.mts +0 -1
- package/dist/services/definitions/remotion.d.mts.map +1 -1
- package/dist/services/definitions/remotion.mjs +54 -2
- package/dist/services/definitions/remotion.mjs.map +1 -0
- package/dist/services/definitions/rocketchat.d.mts +0 -1
- package/dist/services/definitions/rocketchat.d.mts.map +1 -1
- package/dist/services/definitions/rocketchat.mjs +56 -2
- package/dist/services/definitions/rocketchat.mjs.map +1 -0
- package/dist/services/definitions/searxng.d.mts +0 -1
- package/dist/services/definitions/searxng.d.mts.map +1 -1
- package/dist/services/definitions/searxng.mjs +64 -2
- package/dist/services/definitions/searxng.mjs.map +1 -0
- package/dist/services/definitions/stable-diffusion.d.mts +0 -1
- package/dist/services/definitions/stable-diffusion.d.mts.map +1 -1
- package/dist/services/definitions/stable-diffusion.mjs +47 -2
- package/dist/services/definitions/stable-diffusion.mjs.map +1 -0
- package/dist/services/definitions/steel-browser.d.mts +0 -1
- package/dist/services/definitions/steel-browser.d.mts.map +1 -1
- package/dist/services/definitions/steel-browser.mjs +76 -2
- package/dist/services/definitions/steel-browser.mjs.map +1 -0
- package/dist/services/definitions/stream-gateway.d.mts +7 -0
- package/dist/services/definitions/stream-gateway.d.mts.map +1 -0
- package/dist/services/definitions/stream-gateway.mjs +133 -0
- package/dist/services/definitions/stream-gateway.mjs.map +1 -0
- package/dist/services/definitions/tailscale.d.mts +0 -1
- package/dist/services/definitions/tailscale.d.mts.map +1 -1
- package/dist/services/definitions/tailscale.mjs +69 -2
- package/dist/services/definitions/tailscale.mjs.map +1 -0
- package/dist/services/definitions/temporal.d.mts +0 -1
- package/dist/services/definitions/temporal.d.mts.map +1 -1
- package/dist/services/definitions/temporal.mjs +99 -2
- package/dist/services/definitions/temporal.mjs.map +1 -0
- package/dist/services/definitions/traefik.d.mts +0 -1
- package/dist/services/definitions/traefik.d.mts.map +1 -1
- package/dist/services/definitions/traefik.mjs +57 -2
- package/dist/services/definitions/traefik.mjs.map +1 -0
- package/dist/services/definitions/umami.d.mts +0 -1
- package/dist/services/definitions/umami.d.mts.map +1 -1
- package/dist/services/definitions/umami.mjs +45 -2
- package/dist/services/definitions/umami.mjs.map +1 -0
- package/dist/services/definitions/uptime-kuma.d.mts +0 -1
- package/dist/services/definitions/uptime-kuma.d.mts.map +1 -1
- package/dist/services/definitions/uptime-kuma.mjs +50 -2
- package/dist/services/definitions/uptime-kuma.mjs.map +1 -0
- package/dist/services/definitions/usesend.d.mts +7 -0
- package/dist/services/definitions/usesend.d.mts.map +1 -0
- package/dist/services/definitions/usesend.mjs +99 -0
- package/dist/services/definitions/usesend.mjs.map +1 -0
- package/dist/services/definitions/valkey.d.mts +0 -1
- package/dist/services/definitions/valkey.d.mts.map +1 -1
- package/dist/services/definitions/valkey.mjs +60 -2
- package/dist/services/definitions/valkey.mjs.map +1 -0
- package/dist/services/definitions/watchtower.d.mts +0 -1
- package/dist/services/definitions/watchtower.d.mts.map +1 -1
- package/dist/services/definitions/watchtower.mjs +46 -2
- package/dist/services/definitions/watchtower.mjs.map +1 -0
- package/dist/services/definitions/weaviate.d.mts +0 -1
- package/dist/services/definitions/weaviate.d.mts.map +1 -1
- package/dist/services/definitions/weaviate.mjs +89 -2
- package/dist/services/definitions/weaviate.mjs.map +1 -0
- package/dist/services/definitions/whisper.d.mts +0 -1
- package/dist/services/definitions/whisper.d.mts.map +1 -1
- package/dist/services/definitions/whisper.mjs +61 -2
- package/dist/services/definitions/whisper.mjs.map +1 -0
- package/dist/services/registry.d.mts +0 -1
- package/dist/services/registry.d.mts.map +1 -1
- package/dist/services/registry.mjs +29 -2
- package/dist/services/registry.mjs.map +1 -0
- package/dist/services/registry.test.mjs +2 -2
- package/dist/skills/registry.d.mts +0 -1
- package/dist/skills/registry.d.mts.map +1 -1
- package/dist/skills/registry.mjs +214 -2
- package/dist/skills/registry.mjs.map +1 -0
- package/dist/types.d.mts +1 -1
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +10 -0
- package/dist/types.mjs.map +1 -1
- package/dist/validator.d.mts +0 -1
- package/dist/validator.d.mts.map +1 -1
- package/dist/validator.mjs +110 -2
- package/dist/validator.mjs.map +1 -0
- package/dist/validator.test.mjs +4 -4
- package/dist/version-manager.d.mts +0 -1
- package/dist/version-manager.d.mts.map +1 -1
- package/dist/version-manager.mjs +1 -1
- package/dist/{vi.2VT5v0um-Cs3Z_fCB.mjs → vi.2VT5v0um-Qk6MgAnK.mjs} +1183 -1183
- package/dist/vi.2VT5v0um-Qk6MgAnK.mjs.map +1 -0
- package/package.json +14 -13
- package/src/schema.ts +4 -1
- package/src/services/definitions/comfyui.ts +90 -0
- package/src/services/definitions/convex-dashboard.ts +48 -0
- package/src/services/definitions/convex.ts +123 -0
- package/src/services/definitions/desktop-environment.ts +163 -0
- package/src/services/definitions/index.ts +21 -0
- package/src/services/definitions/mission-control.ts +71 -0
- package/src/services/definitions/stream-gateway.ts +148 -0
- package/src/services/definitions/tailscale.ts +2 -0
- package/src/services/definitions/usesend.ts +98 -0
- package/src/types.ts +2 -0
- package/tsdown.config.ts +1 -0
- package/dist/anything-llm-DIIPhz6K.mjs +0 -44
- package/dist/anything-llm-DIIPhz6K.mjs.map +0 -1
- package/dist/appflowy-DdoE-dKg.mjs +0 -45
- package/dist/appflowy-DdoE-dKg.mjs.map +0 -1
- package/dist/bare-metal-install-DpYZDoGq.mjs +0 -224
- package/dist/bare-metal-install-DpYZDoGq.mjs.map +0 -1
- package/dist/bare-metal-partition-CYlOxf9B.mjs +0 -48
- package/dist/bare-metal-partition-CYlOxf9B.mjs.map +0 -1
- package/dist/beszel-DHAG1zl0.mjs +0 -45
- package/dist/beszel-DHAG1zl0.mjs.map +0 -1
- package/dist/browserless-gUuvGmMD.mjs +0 -85
- package/dist/browserless-gUuvGmMD.mjs.map +0 -1
- package/dist/caddy-BJDrqnmw.mjs +0 -77
- package/dist/caddy-BJDrqnmw.mjs.map +0 -1
- package/dist/caddy-_NIdWKrf.mjs +0 -52
- package/dist/caddy-_NIdWKrf.mjs.map +0 -1
- package/dist/chromadb-g4rIsfAl.mjs +0 -63
- package/dist/chromadb-g4rIsfAl.mjs.map +0 -1
- package/dist/claude-code-DPRA1fy_.mjs +0 -52
- package/dist/claude-code-DPRA1fy_.mjs.map +0 -1
- package/dist/code-server-BdZZxxm5.mjs +0 -66
- package/dist/code-server-BdZZxxm5.mjs.map +0 -1
- package/dist/codex-DFVzfrfX.mjs +0 -45
- package/dist/codex-DFVzfrfX.mjs.map +0 -1
- package/dist/composer-CSM5YycB.mjs +0 -287
- package/dist/composer-CSM5YycB.mjs.map +0 -1
- package/dist/coolify-Z5_zDgM3.mjs +0 -49
- package/dist/coolify-Z5_zDgM3.mjs.map +0 -1
- package/dist/definitions-BXpb1kzs.mjs +0 -138
- package/dist/definitions-BXpb1kzs.mjs.map +0 -1
- package/dist/dify-jDc9U6Ku.mjs +0 -81
- package/dist/dify-jDc9U6Ku.mjs.map +0 -1
- package/dist/docsgpt-BXM1c2JC.mjs +0 -45
- package/dist/docsgpt-BXM1c2JC.mjs.map +0 -1
- package/dist/dokploy-Ci8_fb0_.mjs +0 -49
- package/dist/dokploy-Ci8_fb0_.mjs.map +0 -1
- package/dist/dozzle-fAt2sLRL.mjs +0 -41
- package/dist/dozzle-fAt2sLRL.mjs.map +0 -1
- package/dist/env-D2h46lHT.mjs +0 -250
- package/dist/env-D2h46lHT.mjs.map +0 -1
- package/dist/ffmpeg-BCtnA8m_.mjs +0 -66
- package/dist/ffmpeg-BCtnA8m_.mjs.map +0 -1
- package/dist/flowise-CJTTBa7J.mjs +0 -45
- package/dist/flowise-CJTTBa7J.mjs.map +0 -1
- package/dist/gemini-cli-Bfwv6hYe.mjs +0 -46
- package/dist/gemini-cli-Bfwv6hYe.mjs.map +0 -1
- package/dist/gitea-BGkqa-sD.mjs +0 -49
- package/dist/gitea-BGkqa-sD.mjs.map +0 -1
- package/dist/gotify-D7p8oNM3.mjs +0 -62
- package/dist/gotify-D7p8oNM3.mjs.map +0 -1
- package/dist/grafana-BlnWc6js.mjs +0 -63
- package/dist/grafana-BlnWc6js.mjs.map +0 -1
- package/dist/grafana-D3kIm8RX.mjs +0 -293
- package/dist/grafana-D3kIm8RX.mjs.map +0 -1
- package/dist/kimi-BFu1v1sU.mjs +0 -46
- package/dist/kimi-BFu1v1sU.mjs.map +0 -1
- package/dist/lasuite-meet-agents-nlPhMEaN.mjs +0 -36
- package/dist/lasuite-meet-agents-nlPhMEaN.mjs.map +0 -1
- package/dist/lasuite-meet-backend-9H7rZ8Pc.mjs +0 -134
- package/dist/lasuite-meet-backend-9H7rZ8Pc.mjs.map +0 -1
- package/dist/lasuite-meet-frontend-B4xNbnBa.mjs +0 -48
- package/dist/lasuite-meet-frontend-B4xNbnBa.mjs.map +0 -1
- package/dist/librechat-CoPIHXKK.mjs +0 -50
- package/dist/librechat-CoPIHXKK.mjs.map +0 -1
- package/dist/lightpanda-QchAPgNX.mjs +0 -59
- package/dist/lightpanda-QchAPgNX.mjs.map +0 -1
- package/dist/litellm-Dgl6iTry.mjs +0 -47
- package/dist/litellm-Dgl6iTry.mjs.map +0 -1
- package/dist/livekit-C13SxlVB.mjs +0 -56
- package/dist/livekit-C13SxlVB.mjs.map +0 -1
- package/dist/magic-string.es-Dew0Rnsa.mjs.map +0 -1
- package/dist/matomo-CiOoggYl.mjs +0 -80
- package/dist/matomo-CiOoggYl.mjs.map +0 -1
- package/dist/matrix-synapse-CP20A7NN.mjs +0 -88
- package/dist/matrix-synapse-CP20A7NN.mjs.map +0 -1
- package/dist/mattermost-CeFVuhIr.mjs +0 -61
- package/dist/mattermost-CeFVuhIr.mjs.map +0 -1
- package/dist/meilisearch-CLiQiTdN.mjs +0 -78
- package/dist/meilisearch-CLiQiTdN.mjs.map +0 -1
- package/dist/minio-_QuguAeo.mjs +0 -102
- package/dist/minio-_QuguAeo.mjs.map +0 -1
- package/dist/mixpost-eSFPM9XK.mjs +0 -87
- package/dist/mixpost-eSFPM9XK.mjs.map +0 -1
- package/dist/motion-canvas-Bk1ruvuX.mjs +0 -52
- package/dist/motion-canvas-Bk1ruvuX.mjs.map +0 -1
- package/dist/n8n-W5qeU34C.mjs +0 -154
- package/dist/n8n-W5qeU34C.mjs.map +0 -1
- package/dist/n8n-workflows-BPmKVx8z.mjs +0 -75
- package/dist/n8n-workflows-BPmKVx8z.mjs.map +0 -1
- package/dist/native-services-CwOCM-Xz.mjs +0 -78
- package/dist/native-services-CwOCM-Xz.mjs.map +0 -1
- package/dist/nocodb-DQNbSYh_.mjs +0 -45
- package/dist/nocodb-DQNbSYh_.mjs.map +0 -1
- package/dist/ntfy-B8_cZAx2.mjs +0 -63
- package/dist/ntfy-B8_cZAx2.mjs.map +0 -1
- package/dist/ollama-BiKAypcO.mjs +0 -66
- package/dist/ollama-BiKAypcO.mjs.map +0 -1
- package/dist/open-webui-DZOG4_xL.mjs +0 -50
- package/dist/open-webui-DZOG4_xL.mjs.map +0 -1
- package/dist/opencode-Dvfh5KvA.mjs +0 -50
- package/dist/opencode-Dvfh5KvA.mjs.map +0 -1
- package/dist/openpanel-BuWHhDze.mjs +0 -46
- package/dist/openpanel-BuWHhDze.mjs.map +0 -1
- package/dist/outline-Dy-YzdYS.mjs +0 -74
- package/dist/outline-Dy-YzdYS.mjs.map +0 -1
- package/dist/paperless-ngx-DVtWWpKg.mjs +0 -93
- package/dist/paperless-ngx-DVtWWpKg.mjs.map +0 -1
- package/dist/playwright-server-Boiz8--G.mjs +0 -42
- package/dist/playwright-server-Boiz8--G.mjs.map +0 -1
- package/dist/portainer-D9MU96UI.mjs +0 -49
- package/dist/portainer-D9MU96UI.mjs.map +0 -1
- package/dist/postgres-init-BiM-xZtq.mjs +0 -151
- package/dist/postgres-init-BiM-xZtq.mjs.map +0 -1
- package/dist/postgresql-s65Z9RqR.mjs +0 -84
- package/dist/postgresql-s65Z9RqR.mjs.map +0 -1
- package/dist/postiz-U6EK23EY.mjs +0 -83
- package/dist/postiz-U6EK23EY.mjs.map +0 -1
- package/dist/prometheus-WOlk-a1G.mjs +0 -107
- package/dist/prometheus-WOlk-a1G.mjs.map +0 -1
- package/dist/prometheus-x901F67p.mjs +0 -52
- package/dist/prometheus-x901F67p.mjs.map +0 -1
- package/dist/qdrant-DZW9uW4e.mjs +0 -77
- package/dist/qdrant-DZW9uW4e.mjs.map +0 -1
- package/dist/readme-C7M3QE9a.mjs +0 -199
- package/dist/readme-C7M3QE9a.mjs.map +0 -1
- package/dist/redis-DPMOf237.mjs +0 -91
- package/dist/redis-DPMOf237.mjs.map +0 -1
- package/dist/registry-CqLarEm5.mjs +0 -30
- package/dist/registry-CqLarEm5.mjs.map +0 -1
- package/dist/registry-DLX9Q4VQ.mjs +0 -215
- package/dist/registry-DLX9Q4VQ.mjs.map +0 -1
- package/dist/remotion-COkr0wpr.mjs +0 -55
- package/dist/remotion-COkr0wpr.mjs.map +0 -1
- package/dist/resolver-Dl5clk-d.mjs +0 -194
- package/dist/resolver-Dl5clk-d.mjs.map +0 -1
- package/dist/rocketchat-BebQT1MZ.mjs +0 -57
- package/dist/rocketchat-BebQT1MZ.mjs.map +0 -1
- package/dist/schema-PSUY6yJU.d.mts +0 -700
- package/dist/schema-PSUY6yJU.d.mts.map +0 -1
- package/dist/scripts-DsljWbP4.mjs +0 -351
- package/dist/scripts-DsljWbP4.mjs.map +0 -1
- package/dist/searxng-tJpBkchC.mjs +0 -65
- package/dist/searxng-tJpBkchC.mjs.map +0 -1
- package/dist/skills-DWG72Y3X.mjs +0 -587
- package/dist/skills-DWG72Y3X.mjs.map +0 -1
- package/dist/stable-diffusion-BulAzkyT.mjs +0 -48
- package/dist/stable-diffusion-BulAzkyT.mjs.map +0 -1
- package/dist/steel-browser-Cc0bYBjM.mjs +0 -77
- package/dist/steel-browser-Cc0bYBjM.mjs.map +0 -1
- package/dist/tailscale-CrM4EZlF.mjs +0 -69
- package/dist/tailscale-CrM4EZlF.mjs.map +0 -1
- package/dist/temporal-49gA0msh.mjs +0 -100
- package/dist/temporal-49gA0msh.mjs.map +0 -1
- package/dist/traefik-Da-c1f55.mjs +0 -58
- package/dist/traefik-Da-c1f55.mjs.map +0 -1
- package/dist/umami-csBSsHqO.mjs +0 -46
- package/dist/umami-csBSsHqO.mjs.map +0 -1
- package/dist/uptime-kuma-D0NvVuXD.mjs +0 -51
- package/dist/uptime-kuma-D0NvVuXD.mjs.map +0 -1
- package/dist/validator-2FspYNva.mjs +0 -111
- package/dist/validator-2FspYNva.mjs.map +0 -1
- package/dist/valkey-BCZqGJ0L.mjs +0 -61
- package/dist/valkey-BCZqGJ0L.mjs.map +0 -1
- package/dist/vi.2VT5v0um-Cs3Z_fCB.mjs.map +0 -1
- package/dist/watchtower-BWuvFGpA.mjs +0 -47
- package/dist/watchtower-BWuvFGpA.mjs.map +0 -1
- package/dist/weaviate-DttY1Hn7.mjs +0 -90
- package/dist/weaviate-DttY1Hn7.mjs.map +0 -1
- package/dist/whisper-CLu7-Vd8.mjs +0 -62
- package/dist/whisper-CLu7-Vd8.mjs.map +0 -1
|
@@ -0,0 +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// 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 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]);\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grafana.d.mts","names":[],"sources":["../../src/generators/grafana.ts"],"
|
|
1
|
+
{"version":3,"file":"grafana.d.mts","names":[],"sources":["../../src/generators/grafana.ts"],"mappings":";;AAMA;;;;;iBAAgB,qBAAA,CAAA,GAAyB,MAAA;;;;;;;;;;;iBAiGzB,wBAAA,CAAA"}
|
|
@@ -1,3 +1,293 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/generators/grafana.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
|
+
function generateGrafanaConfig() {
|
|
9
|
+
const files = {};
|
|
10
|
+
files["config/grafana/provisioning/datasources/prometheus.yml"] = `# ═══════════════════════════════════════════════════════════════════════════════
|
|
11
|
+
# Grafana Datasource Provisioning — Auto-generated by OpenClaw
|
|
12
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
2
13
|
|
|
3
|
-
|
|
14
|
+
apiVersion: 1
|
|
15
|
+
|
|
16
|
+
datasources:
|
|
17
|
+
# Prometheus — primary metrics datasource
|
|
18
|
+
- name: Prometheus
|
|
19
|
+
type: prometheus
|
|
20
|
+
access: proxy
|
|
21
|
+
url: http://prometheus:9090
|
|
22
|
+
isDefault: true
|
|
23
|
+
editable: true
|
|
24
|
+
jsonData:
|
|
25
|
+
httpMethod: POST
|
|
26
|
+
timeInterval: "15s"
|
|
27
|
+
exemplarTraceIdDestinations:
|
|
28
|
+
- name: traceID
|
|
29
|
+
datasourceUid: ""
|
|
30
|
+
version: 1
|
|
31
|
+
`;
|
|
32
|
+
files["config/grafana/provisioning/dashboards/default.yml"] = `# ═══════════════════════════════════════════════════════════════════════════════
|
|
33
|
+
# Grafana Dashboard Provisioning — Auto-generated by OpenClaw
|
|
34
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
35
|
+
|
|
36
|
+
apiVersion: 1
|
|
37
|
+
|
|
38
|
+
providers:
|
|
39
|
+
- name: "OpenClaw Dashboards"
|
|
40
|
+
orgId: 1
|
|
41
|
+
folder: "OpenClaw"
|
|
42
|
+
type: file
|
|
43
|
+
disableDeletion: false
|
|
44
|
+
editable: true
|
|
45
|
+
updateIntervalSeconds: 30
|
|
46
|
+
allowUiUpdates: true
|
|
47
|
+
options:
|
|
48
|
+
path: /var/lib/grafana/dashboards
|
|
49
|
+
foldersFromFilesStructure: false
|
|
50
|
+
`;
|
|
51
|
+
files["config/grafana/grafana.ini"] = `# ═══════════════════════════════════════════════════════════════════════════════
|
|
52
|
+
# Grafana Configuration — Auto-generated by OpenClaw
|
|
53
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
54
|
+
|
|
55
|
+
[server]
|
|
56
|
+
root_url = %(protocol)s://%(domain)s/
|
|
57
|
+
|
|
58
|
+
[security]
|
|
59
|
+
# Admin credentials are set via environment variables:
|
|
60
|
+
# GF_SECURITY_ADMIN_USER
|
|
61
|
+
# GF_SECURITY_ADMIN_PASSWORD
|
|
62
|
+
|
|
63
|
+
[auth.anonymous]
|
|
64
|
+
enabled = false
|
|
65
|
+
|
|
66
|
+
[dashboards]
|
|
67
|
+
default_home_dashboard_path = /var/lib/grafana/dashboards/home.json
|
|
68
|
+
|
|
69
|
+
[alerting]
|
|
70
|
+
enabled = true
|
|
71
|
+
|
|
72
|
+
[unified_alerting]
|
|
73
|
+
enabled = true
|
|
74
|
+
|
|
75
|
+
[log]
|
|
76
|
+
mode = console
|
|
77
|
+
level = info
|
|
78
|
+
`;
|
|
79
|
+
return files;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Generates a Grafana dashboard JSON for the OpenClaw stack overview.
|
|
83
|
+
*
|
|
84
|
+
* The dashboard includes:
|
|
85
|
+
* - Service Health (stat panel)
|
|
86
|
+
* - Memory Usage (gauge)
|
|
87
|
+
* - Request Rate (graph)
|
|
88
|
+
*
|
|
89
|
+
* Uses Prometheus as the datasource.
|
|
90
|
+
*/
|
|
91
|
+
function generateGrafanaDashboard() {
|
|
92
|
+
return JSON.stringify({
|
|
93
|
+
annotations: { list: [] },
|
|
94
|
+
editable: true,
|
|
95
|
+
fiscalYearStartMonth: 0,
|
|
96
|
+
graphTooltip: 1,
|
|
97
|
+
links: [],
|
|
98
|
+
panels: [
|
|
99
|
+
{
|
|
100
|
+
id: 1,
|
|
101
|
+
title: "Service Health",
|
|
102
|
+
type: "stat",
|
|
103
|
+
gridPos: {
|
|
104
|
+
h: 8,
|
|
105
|
+
w: 8,
|
|
106
|
+
x: 0,
|
|
107
|
+
y: 0
|
|
108
|
+
},
|
|
109
|
+
datasource: {
|
|
110
|
+
type: "prometheus",
|
|
111
|
+
uid: "prometheus"
|
|
112
|
+
},
|
|
113
|
+
targets: [{
|
|
114
|
+
expr: "count(up{job=~\".+\"} == 1)",
|
|
115
|
+
legendFormat: "Healthy Services",
|
|
116
|
+
refId: "A"
|
|
117
|
+
}],
|
|
118
|
+
fieldConfig: {
|
|
119
|
+
defaults: {
|
|
120
|
+
thresholds: {
|
|
121
|
+
mode: "absolute",
|
|
122
|
+
steps: [
|
|
123
|
+
{
|
|
124
|
+
color: "red",
|
|
125
|
+
value: null
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
color: "yellow",
|
|
129
|
+
value: 1
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
color: "green",
|
|
133
|
+
value: 3
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
color: { mode: "thresholds" },
|
|
138
|
+
mappings: []
|
|
139
|
+
},
|
|
140
|
+
overrides: []
|
|
141
|
+
},
|
|
142
|
+
options: {
|
|
143
|
+
reduceOptions: {
|
|
144
|
+
values: false,
|
|
145
|
+
calcs: ["lastNotNull"],
|
|
146
|
+
fields: ""
|
|
147
|
+
},
|
|
148
|
+
orientation: "auto",
|
|
149
|
+
textMode: "auto",
|
|
150
|
+
colorMode: "background",
|
|
151
|
+
graphMode: "none",
|
|
152
|
+
justifyMode: "auto"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 2,
|
|
157
|
+
title: "Memory Usage",
|
|
158
|
+
type: "gauge",
|
|
159
|
+
gridPos: {
|
|
160
|
+
h: 8,
|
|
161
|
+
w: 8,
|
|
162
|
+
x: 8,
|
|
163
|
+
y: 0
|
|
164
|
+
},
|
|
165
|
+
datasource: {
|
|
166
|
+
type: "prometheus",
|
|
167
|
+
uid: "prometheus"
|
|
168
|
+
},
|
|
169
|
+
targets: [{
|
|
170
|
+
expr: "sum(container_memory_usage_bytes) / sum(machine_memory_bytes) * 100",
|
|
171
|
+
legendFormat: "Memory %",
|
|
172
|
+
refId: "A"
|
|
173
|
+
}],
|
|
174
|
+
fieldConfig: {
|
|
175
|
+
defaults: {
|
|
176
|
+
thresholds: {
|
|
177
|
+
mode: "absolute",
|
|
178
|
+
steps: [
|
|
179
|
+
{
|
|
180
|
+
color: "green",
|
|
181
|
+
value: null
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
color: "yellow",
|
|
185
|
+
value: 60
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
color: "red",
|
|
189
|
+
value: 85
|
|
190
|
+
}
|
|
191
|
+
]
|
|
192
|
+
},
|
|
193
|
+
color: { mode: "thresholds" },
|
|
194
|
+
min: 0,
|
|
195
|
+
max: 100,
|
|
196
|
+
unit: "percent",
|
|
197
|
+
mappings: []
|
|
198
|
+
},
|
|
199
|
+
overrides: []
|
|
200
|
+
},
|
|
201
|
+
options: {
|
|
202
|
+
reduceOptions: {
|
|
203
|
+
values: false,
|
|
204
|
+
calcs: ["lastNotNull"],
|
|
205
|
+
fields: ""
|
|
206
|
+
},
|
|
207
|
+
orientation: "auto",
|
|
208
|
+
showThresholdLabels: false,
|
|
209
|
+
showThresholdMarkers: true
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
id: 3,
|
|
214
|
+
title: "Request Rate",
|
|
215
|
+
type: "timeseries",
|
|
216
|
+
gridPos: {
|
|
217
|
+
h: 8,
|
|
218
|
+
w: 8,
|
|
219
|
+
x: 16,
|
|
220
|
+
y: 0
|
|
221
|
+
},
|
|
222
|
+
datasource: {
|
|
223
|
+
type: "prometheus",
|
|
224
|
+
uid: "prometheus"
|
|
225
|
+
},
|
|
226
|
+
targets: [{
|
|
227
|
+
expr: "sum(rate(http_requests_total{job=~\".+\"}[5m])) by (job)",
|
|
228
|
+
legendFormat: "{{job}}",
|
|
229
|
+
refId: "A"
|
|
230
|
+
}],
|
|
231
|
+
fieldConfig: {
|
|
232
|
+
defaults: {
|
|
233
|
+
color: { mode: "palette-classic" },
|
|
234
|
+
custom: {
|
|
235
|
+
axisBorderShow: false,
|
|
236
|
+
axisCenteredZero: false,
|
|
237
|
+
axisColorMode: "text",
|
|
238
|
+
axisLabel: "req/s",
|
|
239
|
+
drawStyle: "line",
|
|
240
|
+
fillOpacity: 10,
|
|
241
|
+
gradientMode: "none",
|
|
242
|
+
lineInterpolation: "smooth",
|
|
243
|
+
lineWidth: 2,
|
|
244
|
+
pointSize: 5,
|
|
245
|
+
showPoints: "auto",
|
|
246
|
+
spanNulls: false,
|
|
247
|
+
stacking: {
|
|
248
|
+
group: "A",
|
|
249
|
+
mode: "none"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
mappings: [],
|
|
253
|
+
thresholds: {
|
|
254
|
+
mode: "absolute",
|
|
255
|
+
steps: [{
|
|
256
|
+
color: "green",
|
|
257
|
+
value: null
|
|
258
|
+
}]
|
|
259
|
+
},
|
|
260
|
+
unit: "reqps"
|
|
261
|
+
},
|
|
262
|
+
overrides: []
|
|
263
|
+
},
|
|
264
|
+
options: {
|
|
265
|
+
legend: {
|
|
266
|
+
calcs: [],
|
|
267
|
+
displayMode: "list",
|
|
268
|
+
placement: "bottom"
|
|
269
|
+
},
|
|
270
|
+
tooltip: {
|
|
271
|
+
mode: "multi",
|
|
272
|
+
sort: "desc"
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
],
|
|
277
|
+
schemaVersion: 39,
|
|
278
|
+
tags: ["openclaw"],
|
|
279
|
+
templating: { list: [] },
|
|
280
|
+
time: {
|
|
281
|
+
from: "now-1h",
|
|
282
|
+
to: "now"
|
|
283
|
+
},
|
|
284
|
+
timepicker: {},
|
|
285
|
+
timezone: "browser",
|
|
286
|
+
title: "OpenClaw Stack Overview",
|
|
287
|
+
uid: "openclaw-stack-overview"
|
|
288
|
+
}, null, 2);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
//#endregion
|
|
292
|
+
export { generateGrafanaConfig, generateGrafanaDashboard };
|
|
293
|
+
//# sourceMappingURL=grafana.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grafana.mjs","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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"n8n-workflows.d.mts","names":[],"sources":["../../src/generators/n8n-workflows.ts"],"
|
|
1
|
+
{"version":3,"file":"n8n-workflows.d.mts","names":[],"sources":["../../src/generators/n8n-workflows.ts"],"mappings":";;;;;AAMA;;iBAAgB,oBAAA,CAAqB,QAAA,EAAU,cAAA,GAAiB,MAAA"}
|
|
@@ -1,3 +1,75 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/generators/n8n-workflows.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates n8n workflow template files.
|
|
4
|
+
* Returns a map of file paths to JSON content strings.
|
|
5
|
+
*/
|
|
6
|
+
function generateN8nWorkflows(resolved) {
|
|
7
|
+
const files = {};
|
|
8
|
+
if (!resolved.services.some((s) => s.definition.id === "n8n")) return files;
|
|
9
|
+
files["n8n/workflows/openclaw-webhook-handler.json"] = JSON.stringify(createWebhookHandlerWorkflow(resolved), null, 2);
|
|
10
|
+
return files;
|
|
11
|
+
}
|
|
12
|
+
function createWebhookHandlerWorkflow(resolved) {
|
|
13
|
+
return {
|
|
14
|
+
name: "OpenClaw Webhook Handler",
|
|
15
|
+
nodes: [
|
|
16
|
+
{
|
|
17
|
+
parameters: {
|
|
18
|
+
httpMethod: "POST",
|
|
19
|
+
path: "openclaw-webhook",
|
|
20
|
+
responseMode: "responseNode",
|
|
21
|
+
options: {}
|
|
22
|
+
},
|
|
23
|
+
id: "webhook-trigger",
|
|
24
|
+
name: "Webhook",
|
|
25
|
+
type: "n8n-nodes-base.webhook",
|
|
26
|
+
typeVersion: 2,
|
|
27
|
+
position: [250, 300]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
parameters: { jsCode: `// Process OpenClaw webhook payload
|
|
31
|
+
const payload = \$input.all()[0].json;
|
|
2
32
|
|
|
3
|
-
|
|
33
|
+
// Available services in this stack:
|
|
34
|
+
// ${resolved.services.map((s) => s.definition.name).join(", ")}\n
|
|
35
|
+
return [{ json: { received: true, timestamp: new Date().toISOString(), payload } }];` },
|
|
36
|
+
id: "process-payload",
|
|
37
|
+
name: "Process Payload",
|
|
38
|
+
type: "n8n-nodes-base.code",
|
|
39
|
+
typeVersion: 2,
|
|
40
|
+
position: [470, 300]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
parameters: {
|
|
44
|
+
respondWith: "json",
|
|
45
|
+
responseBody: "={{ JSON.stringify($json) }}",
|
|
46
|
+
options: {}
|
|
47
|
+
},
|
|
48
|
+
id: "respond",
|
|
49
|
+
name: "Respond to Webhook",
|
|
50
|
+
type: "n8n-nodes-base.respondToWebhook",
|
|
51
|
+
typeVersion: 1,
|
|
52
|
+
position: [690, 300]
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
connections: {
|
|
56
|
+
Webhook: { main: [[{
|
|
57
|
+
node: "Process Payload",
|
|
58
|
+
type: "main",
|
|
59
|
+
index: 0
|
|
60
|
+
}]] },
|
|
61
|
+
"Process Payload": { main: [[{
|
|
62
|
+
node: "Respond to Webhook",
|
|
63
|
+
type: "main",
|
|
64
|
+
index: 0
|
|
65
|
+
}]] }
|
|
66
|
+
},
|
|
67
|
+
active: false,
|
|
68
|
+
settings: { executionOrder: "v1" },
|
|
69
|
+
tags: [{ name: "openclaw" }]
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
export { generateN8nWorkflows };
|
|
75
|
+
//# sourceMappingURL=n8n-workflows.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-workflows.mjs","names":[],"sources":["../../src/generators/n8n-workflows.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Generates n8n workflow template files.\n * Returns a map of file paths to JSON content strings.\n */\nexport function generateN8nWorkflows(resolved: ResolverOutput): Record<string, string> {\n\tconst files: Record<string, string> = {};\n\n\t// Only generate if n8n is in the stack\n\tconst hasN8n = resolved.services.some((s) => s.definition.id === \"n8n\");\n\tif (!hasN8n) return files;\n\n\tfiles[\"n8n/workflows/openclaw-webhook-handler.json\"] = JSON.stringify(\n\t\tcreateWebhookHandlerWorkflow(resolved),\n\t\tnull,\n\t\t2,\n\t);\n\n\treturn files;\n}\n\nfunction createWebhookHandlerWorkflow(resolved: ResolverOutput) {\n\t// Create a basic n8n workflow JSON that:\n\t// 1. Has a Webhook trigger node listening on /openclaw-webhook\n\t// 2. Has a Function node that processes the payload\n\t// 3. Outputs to a Respond to Webhook node\n\tconst serviceNames = resolved.services.map((s) => s.definition.name).join(\", \");\n\n\treturn {\n\t\tname: \"OpenClaw Webhook Handler\",\n\t\tnodes: [\n\t\t\t{\n\t\t\t\tparameters: {\n\t\t\t\t\thttpMethod: \"POST\",\n\t\t\t\t\tpath: \"openclaw-webhook\",\n\t\t\t\t\tresponseMode: \"responseNode\",\n\t\t\t\t\toptions: {},\n\t\t\t\t},\n\t\t\t\tid: \"webhook-trigger\",\n\t\t\t\tname: \"Webhook\",\n\t\t\t\ttype: \"n8n-nodes-base.webhook\",\n\t\t\t\ttypeVersion: 2,\n\t\t\t\tposition: [250, 300],\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameters: {\n\t\t\t\t\tjsCode:\n\t\t\t\t\t\t\"// Process OpenClaw webhook payload\\n\" +\n\t\t\t\t\t\t\"const payload = $input.all()[0].json;\\n\" +\n\t\t\t\t\t\t\"\\n\" +\n\t\t\t\t\t\t\"// Available services in this stack:\\n\" +\n\t\t\t\t\t\t`// ${serviceNames}\\n` +\n\t\t\t\t\t\t\"\\n\" +\n\t\t\t\t\t\t\"return [{ json: { received: true, timestamp: new Date().toISOString(), payload } }];\",\n\t\t\t\t},\n\t\t\t\tid: \"process-payload\",\n\t\t\t\tname: \"Process Payload\",\n\t\t\t\ttype: \"n8n-nodes-base.code\",\n\t\t\t\ttypeVersion: 2,\n\t\t\t\tposition: [470, 300],\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameters: {\n\t\t\t\t\trespondWith: \"json\",\n\t\t\t\t\tresponseBody: \"={{ JSON.stringify($json) }}\",\n\t\t\t\t\toptions: {},\n\t\t\t\t},\n\t\t\t\tid: \"respond\",\n\t\t\t\tname: \"Respond to Webhook\",\n\t\t\t\ttype: \"n8n-nodes-base.respondToWebhook\",\n\t\t\t\ttypeVersion: 1,\n\t\t\t\tposition: [690, 300],\n\t\t\t},\n\t\t],\n\t\tconnections: {\n\t\t\tWebhook: {\n\t\t\t\tmain: [[{ node: \"Process Payload\", type: \"main\", index: 0 }]],\n\t\t\t},\n\t\t\t\"Process Payload\": {\n\t\t\t\tmain: [[{ node: \"Respond to Webhook\", type: \"main\", index: 0 }]],\n\t\t\t},\n\t\t},\n\t\tactive: false,\n\t\tsettings: { executionOrder: \"v1\" },\n\t\ttags: [{ name: \"openclaw\" }],\n\t};\n}\n"],"mappings":";;;;;AAMA,SAAgB,qBAAqB,UAAkD;CACtF,MAAM,QAAgC,EAAE;AAIxC,KAAI,CADW,SAAS,SAAS,MAAM,MAAM,EAAE,WAAW,OAAO,MAAM,CAC1D,QAAO;AAEpB,OAAM,iDAAiD,KAAK,UAC3D,6BAA6B,SAAS,EACtC,MACA,EACA;AAED,QAAO;;AAGR,SAAS,6BAA6B,UAA0B;AAO/D,QAAO;EACN,MAAM;EACN,OAAO;GACN;IACC,YAAY;KACX,YAAY;KACZ,MAAM;KACN,cAAc;KACd,SAAS,EAAE;KACX;IACD,IAAI;IACJ,MAAM;IACN,MAAM;IACN,aAAa;IACb,UAAU,CAAC,KAAK,IAAI;IACpB;GACD;IACC,YAAY,EACX,QACC;;;;KArBgB,SAAS,SAAS,KAAK,MAAM,EAAE,WAAW,KAAK,CAAC,KAAK,KAAK,CAyBvD;uFAGpB;IACD,IAAI;IACJ,MAAM;IACN,MAAM;IACN,aAAa;IACb,UAAU,CAAC,KAAK,IAAI;IACpB;GACD;IACC,YAAY;KACX,aAAa;KACb,cAAc;KACd,SAAS,EAAE;KACX;IACD,IAAI;IACJ,MAAM;IACN,MAAM;IACN,aAAa;IACb,UAAU,CAAC,KAAK,IAAI;IACpB;GACD;EACD,aAAa;GACZ,SAAS,EACR,MAAM,CAAC,CAAC;IAAE,MAAM;IAAmB,MAAM;IAAQ,OAAO;IAAG,CAAC,CAAC,EAC7D;GACD,mBAAmB,EAClB,MAAM,CAAC,CAAC;IAAE,MAAM;IAAsB,MAAM;IAAQ,OAAO;IAAG,CAAC,CAAC,EAChE;GACD;EACD,QAAQ;EACR,UAAU,EAAE,gBAAgB,MAAM;EAClC,MAAM,CAAC,EAAE,MAAM,YAAY,CAAC;EAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-services.d.mts","names":[],"sources":["../../src/generators/native-services.ts"],"
|
|
1
|
+
{"version":3,"file":"native-services.d.mts","names":[],"sources":["../../src/generators/native-services.ts"],"mappings":";;;UAEiB,8BAAA;EAChB,cAAA,EAAgB,eAAA;EAChB,QAAA,EAAU,cAAA;EACV,WAAA;AAAA;;;;;;iBAQe,4BAAA,CACf,OAAA,EAAS,8BAAA,GACP,MAAA"}
|
|
@@ -1,3 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/generators/native-services.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates native install/run scripts for services that have a native recipe.
|
|
4
|
+
* Returns e.g. native/install-linux.sh (or native/install.ps1 for Windows).
|
|
5
|
+
* Scripts source .env and run install steps then start commands in dependency order.
|
|
6
|
+
*/
|
|
7
|
+
function generateNativeInstallScripts(options) {
|
|
8
|
+
const { nativeServices, platform } = options;
|
|
9
|
+
const files = {};
|
|
10
|
+
if (platform === "linux") files["native/install-linux.sh"] = buildLinuxNativeScript(nativeServices);
|
|
11
|
+
else if (platform === "windows") files["native/install-windows.ps1"] = buildWindowsNativeScript(nativeServices);
|
|
12
|
+
else files["native/install-macos.sh"] = buildLinuxNativeScript(nativeServices);
|
|
13
|
+
return files;
|
|
14
|
+
}
|
|
15
|
+
function buildLinuxNativeScript(nativeServices) {
|
|
16
|
+
const lines = [
|
|
17
|
+
"#!/usr/bin/env bash",
|
|
18
|
+
"set -euo pipefail",
|
|
19
|
+
"# OpenClaw native services — install and start (Linux). Run from project root. Source .env first.",
|
|
20
|
+
"",
|
|
21
|
+
"SCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"",
|
|
22
|
+
"PROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"",
|
|
23
|
+
"cd \"$PROJECT_DIR\"",
|
|
24
|
+
"",
|
|
25
|
+
"if [ -f .env ]; then set -a; source .env; set +a; fi",
|
|
26
|
+
""
|
|
27
|
+
];
|
|
28
|
+
for (const { definition: def } of nativeServices) {
|
|
29
|
+
const recipe = def.nativeRecipes?.find((r) => r.platform === "linux");
|
|
30
|
+
if (!recipe) continue;
|
|
31
|
+
lines.push(`# ─── ${def.icon} ${def.name} ─────────────────────────────────────────`);
|
|
32
|
+
lines.push("");
|
|
33
|
+
if (recipe.configPath && recipe.configTemplate) {
|
|
34
|
+
const delim = `ENDOF_${def.id.toUpperCase().replace(/-/g, "_")}_CONF`;
|
|
35
|
+
lines.push(`# Write config for ${def.id}`);
|
|
36
|
+
lines.push(`sudo mkdir -p "$(dirname "${recipe.configPath}")" 2>/dev/null || true`);
|
|
37
|
+
lines.push(`sudo tee "${recipe.configPath}" > /dev/null << ${delim}`);
|
|
38
|
+
lines.push(recipe.configTemplate.trim());
|
|
39
|
+
lines.push(delim);
|
|
40
|
+
lines.push("");
|
|
41
|
+
}
|
|
42
|
+
for (const step of recipe.installSteps) {
|
|
43
|
+
lines.push(`# Install: ${def.id}`);
|
|
44
|
+
lines.push(step);
|
|
45
|
+
lines.push("");
|
|
46
|
+
}
|
|
47
|
+
lines.push(`# Start: ${def.id}`);
|
|
48
|
+
lines.push(recipe.startCommand);
|
|
49
|
+
lines.push("");
|
|
50
|
+
}
|
|
51
|
+
lines.push("echo 'Native services started.'");
|
|
52
|
+
return lines.join("\n");
|
|
53
|
+
}
|
|
54
|
+
function buildWindowsNativeScript(nativeServices) {
|
|
55
|
+
const lines = [
|
|
56
|
+
"# OpenClaw native services — install and start (Windows). Run from project root.",
|
|
57
|
+
"$ErrorActionPreference = 'Stop'",
|
|
58
|
+
"$ProjectDir = (Get-Item $PSScriptRoot).Parent.FullName",
|
|
59
|
+
"Set-Location $ProjectDir",
|
|
60
|
+
"",
|
|
61
|
+
"if (Test-Path .env) { Get-Content .env | ForEach-Object { if ($_ -match '^([^#=]+)=(.*)$') { [System.Environment]::SetEnvironmentVariable($matches[1].Trim(), $matches[2].Trim(), 'Process') } } }",
|
|
62
|
+
""
|
|
63
|
+
];
|
|
64
|
+
for (const { definition: def } of nativeServices) {
|
|
65
|
+
const recipe = def.nativeRecipes?.find((r) => r.platform === "windows");
|
|
66
|
+
if (!recipe) continue;
|
|
67
|
+
lines.push(`# ${def.name}`);
|
|
68
|
+
for (const step of recipe.installSteps) lines.push(`Invoke-Expression "${step.replace(/"/g, "`\"")}"`);
|
|
69
|
+
lines.push(recipe.startCommand);
|
|
70
|
+
lines.push("");
|
|
71
|
+
}
|
|
72
|
+
lines.push("Write-Host 'Native services started.'");
|
|
73
|
+
return lines.join("\n");
|
|
74
|
+
}
|
|
2
75
|
|
|
3
|
-
|
|
76
|
+
//#endregion
|
|
77
|
+
export { generateNativeInstallScripts };
|
|
78
|
+
//# sourceMappingURL=native-services.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-services.mjs","names":[],"sources":["../../src/generators/native-services.ts"],"sourcesContent":["import type { NativePlatform, ResolvedService } from \"../types.js\";\n\nexport interface NativeServicesGeneratorOptions {\n\tnativeServices: ResolvedService[];\n\tplatform: NativePlatform;\n\tprojectName: string;\n}\n\n/**\n * Generates native install/run scripts for services that have a native recipe.\n * Returns e.g. native/install-linux.sh (or native/install.ps1 for Windows).\n * Scripts source .env and run install steps then start commands in dependency order.\n */\nexport function generateNativeInstallScripts(\n\toptions: NativeServicesGeneratorOptions,\n): Record<string, string> {\n\tconst { nativeServices, platform } = options;\n\tconst files: Record<string, string> = {};\n\n\tif (platform === \"linux\") {\n\t\tfiles[\"native/install-linux.sh\"] = buildLinuxNativeScript(nativeServices);\n\t} else if (platform === \"windows\") {\n\t\tfiles[\"native/install-windows.ps1\"] = buildWindowsNativeScript(nativeServices);\n\t} else {\n\t\t// macos: use bash script similar to linux\n\t\tfiles[\"native/install-macos.sh\"] = buildLinuxNativeScript(nativeServices);\n\t}\n\n\treturn files;\n}\n\nfunction buildLinuxNativeScript(nativeServices: ResolvedService[]): string {\n\tconst lines: string[] = [\n\t\t\"#!/usr/bin/env bash\",\n\t\t\"set -euo pipefail\",\n\t\t\"# OpenClaw native services — install and start (Linux). Run from project root. Source .env first.\",\n\t\t\"\",\n\t\t'SCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"',\n\t\t'PROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"',\n\t\t'cd \"$PROJECT_DIR\"',\n\t\t\"\",\n\t\t\"if [ -f .env ]; then set -a; source .env; set +a; fi\",\n\t\t\"\",\n\t];\n\n\tfor (const { definition: def } of nativeServices) {\n\t\tconst recipe = def.nativeRecipes?.find((r) => r.platform === \"linux\");\n\t\tif (!recipe) continue;\n\n\t\tlines.push(`# ─── ${def.icon} ${def.name} ─────────────────────────────────────────`);\n\t\tlines.push(\"\");\n\n\t\tif (recipe.configPath && recipe.configTemplate) {\n\t\t\tconst delim = `ENDOF_${def.id.toUpperCase().replace(/-/g, \"_\")}_CONF`;\n\t\t\tlines.push(`# Write config for ${def.id}`);\n\t\t\tlines.push(`sudo mkdir -p \"$(dirname \"${recipe.configPath}\")\" 2>/dev/null || true`);\n\t\t\tlines.push(`sudo tee \"${recipe.configPath}\" > /dev/null << ${delim}`);\n\t\t\tlines.push(recipe.configTemplate.trim());\n\t\t\tlines.push(delim);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tfor (const step of recipe.installSteps) {\n\t\t\tlines.push(`# Install: ${def.id}`);\n\t\t\tlines.push(step);\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\tlines.push(`# Start: ${def.id}`);\n\t\tlines.push(recipe.startCommand);\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"echo 'Native services started.'\");\n\treturn lines.join(\"\\n\");\n}\n\nfunction buildWindowsNativeScript(nativeServices: ResolvedService[]): string {\n\tconst lines: string[] = [\n\t\t\"# OpenClaw native services — install and start (Windows). Run from project root.\",\n\t\t\"$ErrorActionPreference = 'Stop'\",\n\t\t\"$ProjectDir = (Get-Item $PSScriptRoot).Parent.FullName\",\n\t\t\"Set-Location $ProjectDir\",\n\t\t\"\",\n\t\t\"if (Test-Path .env) { Get-Content .env | ForEach-Object { if ($_ -match '^([^#=]+)=(.*)$') { [System.Environment]::SetEnvironmentVariable($matches[1].Trim(), $matches[2].Trim(), 'Process') } } }\",\n\t\t\"\",\n\t];\n\n\tfor (const { definition: def } of nativeServices) {\n\t\tconst recipe = def.nativeRecipes?.find((r) => r.platform === \"windows\");\n\t\tif (!recipe) continue;\n\n\t\tlines.push(`# ${def.name}`);\n\t\tfor (const step of recipe.installSteps) {\n\t\t\tlines.push(`Invoke-Expression \"${step.replace(/\"/g, '`\"')}\"`);\n\t\t}\n\t\tlines.push(recipe.startCommand);\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"Write-Host 'Native services started.'\");\n\treturn lines.join(\"\\n\");\n}\n"],"mappings":";;;;;;AAaA,SAAgB,6BACf,SACyB;CACzB,MAAM,EAAE,gBAAgB,aAAa;CACrC,MAAM,QAAgC,EAAE;AAExC,KAAI,aAAa,QAChB,OAAM,6BAA6B,uBAAuB,eAAe;UAC/D,aAAa,UACvB,OAAM,gCAAgC,yBAAyB,eAAe;KAG9E,OAAM,6BAA6B,uBAAuB,eAAe;AAG1E,QAAO;;AAGR,SAAS,uBAAuB,gBAA2C;CAC1E,MAAM,QAAkB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAED,MAAK,MAAM,EAAE,YAAY,SAAS,gBAAgB;EACjD,MAAM,SAAS,IAAI,eAAe,MAAM,MAAM,EAAE,aAAa,QAAQ;AACrE,MAAI,CAAC,OAAQ;AAEb,QAAM,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,KAAK,4CAA4C;AACrF,QAAM,KAAK,GAAG;AAEd,MAAI,OAAO,cAAc,OAAO,gBAAgB;GAC/C,MAAM,QAAQ,SAAS,IAAI,GAAG,aAAa,CAAC,QAAQ,MAAM,IAAI,CAAC;AAC/D,SAAM,KAAK,sBAAsB,IAAI,KAAK;AAC1C,SAAM,KAAK,6BAA6B,OAAO,WAAW,yBAAyB;AACnF,SAAM,KAAK,aAAa,OAAO,WAAW,mBAAmB,QAAQ;AACrE,SAAM,KAAK,OAAO,eAAe,MAAM,CAAC;AACxC,SAAM,KAAK,MAAM;AACjB,SAAM,KAAK,GAAG;;AAGf,OAAK,MAAM,QAAQ,OAAO,cAAc;AACvC,SAAM,KAAK,cAAc,IAAI,KAAK;AAClC,SAAM,KAAK,KAAK;AAChB,SAAM,KAAK,GAAG;;AAGf,QAAM,KAAK,YAAY,IAAI,KAAK;AAChC,QAAM,KAAK,OAAO,aAAa;AAC/B,QAAM,KAAK,GAAG;;AAGf,OAAM,KAAK,kCAAkC;AAC7C,QAAO,MAAM,KAAK,KAAK;;AAGxB,SAAS,yBAAyB,gBAA2C;CAC5E,MAAM,QAAkB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAED,MAAK,MAAM,EAAE,YAAY,SAAS,gBAAgB;EACjD,MAAM,SAAS,IAAI,eAAe,MAAM,MAAM,EAAE,aAAa,UAAU;AACvE,MAAI,CAAC,OAAQ;AAEb,QAAM,KAAK,KAAK,IAAI,OAAO;AAC3B,OAAK,MAAM,QAAQ,OAAO,aACzB,OAAM,KAAK,sBAAsB,KAAK,QAAQ,MAAM,MAAK,CAAC,GAAG;AAE9D,QAAM,KAAK,OAAO,aAAa;AAC/B,QAAM,KAAK,GAAG;;AAGf,OAAM,KAAK,wCAAwC;AACnD,QAAO,MAAM,KAAK,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-init.d.mts","names":[],"sources":["../../src/generators/postgres-init.ts"],"
|
|
1
|
+
{"version":3,"file":"postgres-init.d.mts","names":[],"sources":["../../src/generators/postgres-init.ts"],"mappings":";;;;;AAAkD;UAKxC,aAAA;EACT,SAAA;EACA,WAAA;EACA,MAAA;EACA,MAAA;EACA,cAAA;AAAA;;;;AAiCD;iBAAgB,iBAAA,CAAkB,QAAA,EAAU,cAAA,GAAiB,aAAA;;;;;;;;AAuB7D;iBAAgB,oBAAA,CAAqB,QAAA,EAAU,cAAA"}
|