@better-openclaw/core 1.0.5 → 1.0.7
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 +32 -34
- package/dist/bare-metal-partition.d.mts +26 -0
- package/dist/bare-metal-partition.d.mts.map +1 -0
- package/dist/bare-metal-partition.mjs +48 -0
- package/dist/bare-metal-partition.mjs.map +1 -0
- package/dist/bare-metal-partition.test.d.mts +1 -0
- package/dist/bare-metal-partition.test.mjs +58 -0
- package/dist/bare-metal-partition.test.mjs.map +1 -0
- package/dist/composer.d.mts +21 -0
- package/dist/composer.d.mts.map +1 -0
- package/dist/composer.mjs +287 -0
- package/dist/composer.mjs.map +1 -0
- package/dist/composer.snapshot.test.d.mts +1 -0
- package/dist/composer.snapshot.test.mjs +92 -0
- package/dist/composer.snapshot.test.mjs.map +1 -0
- package/dist/composer.test.d.mts +1 -0
- package/dist/composer.test.mjs +166 -0
- package/dist/composer.test.mjs.map +1 -0
- package/dist/generate.d.mts +11 -0
- package/dist/generate.d.mts.map +1 -0
- package/dist/generate.mjs +169 -0
- package/dist/generate.mjs.map +1 -0
- package/dist/generate.test.d.mts +1 -0
- package/dist/generate.test.mjs +283 -0
- package/dist/generate.test.mjs.map +1 -0
- package/dist/generators/bare-metal-install.d.mts +17 -0
- package/dist/generators/bare-metal-install.d.mts.map +1 -0
- package/dist/generators/bare-metal-install.mjs +224 -0
- package/dist/generators/bare-metal-install.mjs.map +1 -0
- package/dist/generators/bare-metal-install.test.d.mts +1 -0
- package/dist/generators/bare-metal-install.test.mjs +48 -0
- package/dist/generators/bare-metal-install.test.mjs.map +1 -0
- package/dist/generators/caddy.d.mts +17 -0
- package/dist/generators/caddy.d.mts.map +1 -0
- package/dist/generators/caddy.mjs +77 -0
- package/dist/generators/caddy.mjs.map +1 -0
- package/dist/generators/env.d.mts +46 -0
- package/dist/generators/env.d.mts.map +1 -0
- package/dist/generators/env.mjs +250 -0
- package/dist/generators/env.mjs.map +1 -0
- package/dist/generators/grafana.d.mts +22 -0
- package/dist/generators/grafana.d.mts.map +1 -0
- package/dist/generators/grafana.mjs +293 -0
- package/dist/generators/grafana.mjs.map +1 -0
- package/dist/generators/n8n-workflows.d.mts +11 -0
- package/dist/generators/n8n-workflows.d.mts.map +1 -0
- package/dist/generators/n8n-workflows.mjs +75 -0
- package/dist/generators/n8n-workflows.mjs.map +1 -0
- package/dist/generators/native-services.d.mts +17 -0
- package/dist/generators/native-services.d.mts.map +1 -0
- package/dist/generators/native-services.mjs +78 -0
- package/dist/generators/native-services.mjs.map +1 -0
- package/dist/generators/postgres-init.d.mts +30 -0
- package/dist/generators/postgres-init.d.mts.map +1 -0
- package/dist/generators/postgres-init.mjs +151 -0
- package/dist/generators/postgres-init.mjs.map +1 -0
- package/dist/generators/prometheus.d.mts +14 -0
- package/dist/generators/prometheus.d.mts.map +1 -0
- package/dist/generators/prometheus.mjs +107 -0
- package/dist/generators/prometheus.mjs.map +1 -0
- package/dist/generators/readme.d.mts +25 -0
- package/dist/generators/readme.d.mts.map +1 -0
- package/dist/generators/readme.mjs +199 -0
- package/dist/generators/readme.mjs.map +1 -0
- package/dist/generators/scripts.d.mts +10 -0
- package/dist/generators/scripts.d.mts.map +1 -0
- package/dist/generators/scripts.mjs +351 -0
- package/dist/generators/scripts.mjs.map +1 -0
- package/dist/generators/skills.d.mts +14 -0
- package/dist/generators/skills.d.mts.map +1 -0
- package/dist/generators/skills.mjs +587 -0
- package/dist/generators/skills.mjs.map +1 -0
- package/dist/index.d.mts +21 -0
- package/dist/index.mjs +22 -0
- package/dist/magic-string.es-1uTtupLe.mjs +1014 -0
- package/dist/magic-string.es-1uTtupLe.mjs.map +1 -0
- package/dist/presets/registry.d.mts +9 -0
- package/dist/presets/registry.d.mts.map +1 -0
- package/dist/presets/registry.mjs +159 -0
- package/dist/presets/registry.mjs.map +1 -0
- package/dist/presets/registry.test.d.mts +1 -0
- package/dist/presets/registry.test.mjs +34 -0
- package/dist/presets/registry.test.mjs.map +1 -0
- package/dist/resolver.d.mts +21 -0
- package/dist/resolver.d.mts.map +1 -0
- package/dist/resolver.mjs +194 -0
- package/dist/resolver.mjs.map +1 -0
- package/dist/resolver.test.d.mts +1 -0
- package/dist/resolver.test.mjs +237 -0
- package/dist/resolver.test.mjs.map +1 -0
- package/dist/schema.d.mts +706 -0
- package/dist/schema.d.mts.map +1 -0
- package/dist/schema.mjs +260 -0
- package/dist/schema.mjs.map +1 -0
- package/dist/schema.test.d.mts +1 -0
- package/dist/schema.test.mjs +264 -0
- package/dist/schema.test.mjs.map +1 -0
- package/dist/services/definitions/anything-llm.d.mts +7 -0
- package/dist/services/definitions/anything-llm.d.mts.map +1 -0
- package/dist/services/definitions/anything-llm.mjs +44 -0
- package/dist/services/definitions/anything-llm.mjs.map +1 -0
- package/dist/services/definitions/appflowy.d.mts +7 -0
- package/dist/services/definitions/appflowy.d.mts.map +1 -0
- package/dist/services/definitions/appflowy.mjs +45 -0
- package/dist/services/definitions/appflowy.mjs.map +1 -0
- package/dist/services/definitions/beszel.d.mts +7 -0
- package/dist/services/definitions/beszel.d.mts.map +1 -0
- package/dist/services/definitions/beszel.mjs +45 -0
- package/dist/services/definitions/beszel.mjs.map +1 -0
- package/dist/services/definitions/browserless.d.mts +7 -0
- package/dist/services/definitions/browserless.d.mts.map +1 -0
- package/dist/services/definitions/browserless.mjs +85 -0
- package/dist/services/definitions/browserless.mjs.map +1 -0
- package/dist/services/definitions/caddy.d.mts +7 -0
- package/dist/services/definitions/caddy.d.mts.map +1 -0
- package/dist/services/definitions/caddy.mjs +52 -0
- package/dist/services/definitions/caddy.mjs.map +1 -0
- package/dist/services/definitions/chromadb.d.mts +7 -0
- package/dist/services/definitions/chromadb.d.mts.map +1 -0
- package/dist/services/definitions/chromadb.mjs +63 -0
- package/dist/services/definitions/chromadb.mjs.map +1 -0
- package/dist/services/definitions/claude-code.d.mts +7 -0
- package/dist/services/definitions/claude-code.d.mts.map +1 -0
- package/dist/services/definitions/claude-code.mjs +52 -0
- package/dist/services/definitions/claude-code.mjs.map +1 -0
- package/dist/services/definitions/code-server.d.mts +7 -0
- package/dist/services/definitions/code-server.d.mts.map +1 -0
- package/dist/services/definitions/code-server.mjs +66 -0
- package/dist/services/definitions/code-server.mjs.map +1 -0
- package/dist/services/definitions/codex.d.mts +7 -0
- package/dist/services/definitions/codex.d.mts.map +1 -0
- package/dist/services/definitions/codex.mjs +45 -0
- package/dist/services/definitions/codex.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 +7 -0
- package/dist/services/definitions/coolify.d.mts.map +1 -0
- package/dist/services/definitions/coolify.mjs +49 -0
- package/dist/services/definitions/coolify.mjs.map +1 -0
- package/dist/services/definitions/dify.d.mts +7 -0
- package/dist/services/definitions/dify.d.mts.map +1 -0
- package/dist/services/definitions/dify.mjs +81 -0
- package/dist/services/definitions/dify.mjs.map +1 -0
- package/dist/services/definitions/docsgpt.d.mts +7 -0
- package/dist/services/definitions/docsgpt.d.mts.map +1 -0
- package/dist/services/definitions/docsgpt.mjs +45 -0
- package/dist/services/definitions/docsgpt.mjs.map +1 -0
- package/dist/services/definitions/dokploy.d.mts +7 -0
- package/dist/services/definitions/dokploy.d.mts.map +1 -0
- package/dist/services/definitions/dokploy.mjs +49 -0
- package/dist/services/definitions/dokploy.mjs.map +1 -0
- package/dist/services/definitions/dozzle.d.mts +7 -0
- package/dist/services/definitions/dozzle.d.mts.map +1 -0
- package/dist/services/definitions/dozzle.mjs +41 -0
- package/dist/services/definitions/dozzle.mjs.map +1 -0
- package/dist/services/definitions/ffmpeg.d.mts +7 -0
- package/dist/services/definitions/ffmpeg.d.mts.map +1 -0
- package/dist/services/definitions/ffmpeg.mjs +66 -0
- package/dist/services/definitions/ffmpeg.mjs.map +1 -0
- package/dist/services/definitions/flowise.d.mts +7 -0
- package/dist/services/definitions/flowise.d.mts.map +1 -0
- package/dist/services/definitions/flowise.mjs +45 -0
- package/dist/services/definitions/flowise.mjs.map +1 -0
- package/dist/services/definitions/gemini-cli.d.mts +7 -0
- package/dist/services/definitions/gemini-cli.d.mts.map +1 -0
- package/dist/services/definitions/gemini-cli.mjs +46 -0
- package/dist/services/definitions/gemini-cli.mjs.map +1 -0
- package/dist/services/definitions/gitea.d.mts +7 -0
- package/dist/services/definitions/gitea.d.mts.map +1 -0
- package/dist/services/definitions/gitea.mjs +49 -0
- package/dist/services/definitions/gitea.mjs.map +1 -0
- package/dist/services/definitions/gotify.d.mts +7 -0
- package/dist/services/definitions/gotify.d.mts.map +1 -0
- package/dist/services/definitions/gotify.mjs +62 -0
- package/dist/services/definitions/gotify.mjs.map +1 -0
- package/dist/services/definitions/grafana.d.mts +7 -0
- package/dist/services/definitions/grafana.d.mts.map +1 -0
- package/dist/services/definitions/grafana.mjs +63 -0
- package/dist/services/definitions/grafana.mjs.map +1 -0
- package/dist/services/definitions/index.d.mts +76 -0
- package/dist/services/definitions/index.d.mts.map +1 -0
- package/dist/services/definitions/index.mjs +146 -0
- package/dist/services/definitions/index.mjs.map +1 -0
- package/dist/services/definitions/kimi.d.mts +7 -0
- package/dist/services/definitions/kimi.d.mts.map +1 -0
- package/dist/services/definitions/kimi.mjs +46 -0
- package/dist/services/definitions/kimi.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.d.mts +7 -0
- package/dist/services/definitions/lasuite-meet-agents.d.mts.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.mjs +36 -0
- package/dist/services/definitions/lasuite-meet-agents.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-backend.d.mts +7 -0
- package/dist/services/definitions/lasuite-meet-backend.d.mts.map +1 -0
- package/dist/services/definitions/lasuite-meet-backend.mjs +134 -0
- package/dist/services/definitions/lasuite-meet-backend.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-frontend.d.mts +7 -0
- package/dist/services/definitions/lasuite-meet-frontend.d.mts.map +1 -0
- package/dist/services/definitions/lasuite-meet-frontend.mjs +48 -0
- package/dist/services/definitions/lasuite-meet-frontend.mjs.map +1 -0
- package/dist/services/definitions/librechat.d.mts +7 -0
- package/dist/services/definitions/librechat.d.mts.map +1 -0
- package/dist/services/definitions/librechat.mjs +50 -0
- package/dist/services/definitions/librechat.mjs.map +1 -0
- package/dist/services/definitions/lightpanda.d.mts +7 -0
- package/dist/services/definitions/lightpanda.d.mts.map +1 -0
- package/dist/services/definitions/lightpanda.mjs +59 -0
- package/dist/services/definitions/lightpanda.mjs.map +1 -0
- package/dist/services/definitions/litellm.d.mts +7 -0
- package/dist/services/definitions/litellm.d.mts.map +1 -0
- package/dist/services/definitions/litellm.mjs +47 -0
- package/dist/services/definitions/litellm.mjs.map +1 -0
- package/dist/services/definitions/livekit.d.mts +7 -0
- package/dist/services/definitions/livekit.d.mts.map +1 -0
- package/dist/services/definitions/livekit.mjs +56 -0
- package/dist/services/definitions/livekit.mjs.map +1 -0
- package/dist/services/definitions/matomo.d.mts +7 -0
- package/dist/services/definitions/matomo.d.mts.map +1 -0
- package/dist/services/definitions/matomo.mjs +80 -0
- package/dist/services/definitions/matomo.mjs.map +1 -0
- package/dist/services/definitions/matrix-synapse.d.mts +7 -0
- package/dist/services/definitions/matrix-synapse.d.mts.map +1 -0
- package/dist/services/definitions/matrix-synapse.mjs +88 -0
- package/dist/services/definitions/matrix-synapse.mjs.map +1 -0
- package/dist/services/definitions/mattermost.d.mts +7 -0
- package/dist/services/definitions/mattermost.d.mts.map +1 -0
- package/dist/services/definitions/mattermost.mjs +61 -0
- package/dist/services/definitions/mattermost.mjs.map +1 -0
- package/dist/services/definitions/meilisearch.d.mts +7 -0
- package/dist/services/definitions/meilisearch.d.mts.map +1 -0
- package/dist/services/definitions/meilisearch.mjs +78 -0
- package/dist/services/definitions/meilisearch.mjs.map +1 -0
- package/dist/services/definitions/minio.d.mts +7 -0
- package/dist/services/definitions/minio.d.mts.map +1 -0
- package/dist/services/definitions/minio.mjs +102 -0
- 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 +7 -0
- package/dist/services/definitions/mixpost.d.mts.map +1 -0
- package/dist/services/definitions/mixpost.mjs +87 -0
- package/dist/services/definitions/mixpost.mjs.map +1 -0
- package/dist/services/definitions/motion-canvas.d.mts +7 -0
- package/dist/services/definitions/motion-canvas.d.mts.map +1 -0
- package/dist/services/definitions/motion-canvas.mjs +52 -0
- package/dist/services/definitions/motion-canvas.mjs.map +1 -0
- package/dist/services/definitions/n8n.d.mts +7 -0
- package/dist/services/definitions/n8n.d.mts.map +1 -0
- package/dist/services/definitions/n8n.mjs +154 -0
- package/dist/services/definitions/n8n.mjs.map +1 -0
- package/dist/services/definitions/nocodb.d.mts +7 -0
- package/dist/services/definitions/nocodb.d.mts.map +1 -0
- package/dist/services/definitions/nocodb.mjs +45 -0
- package/dist/services/definitions/nocodb.mjs.map +1 -0
- package/dist/services/definitions/ntfy.d.mts +7 -0
- package/dist/services/definitions/ntfy.d.mts.map +1 -0
- package/dist/services/definitions/ntfy.mjs +63 -0
- package/dist/services/definitions/ntfy.mjs.map +1 -0
- package/dist/services/definitions/ollama.d.mts +7 -0
- package/dist/services/definitions/ollama.d.mts.map +1 -0
- package/dist/services/definitions/ollama.mjs +66 -0
- package/dist/services/definitions/ollama.mjs.map +1 -0
- package/dist/services/definitions/open-webui.d.mts +7 -0
- package/dist/services/definitions/open-webui.d.mts.map +1 -0
- package/dist/services/definitions/open-webui.mjs +50 -0
- package/dist/services/definitions/open-webui.mjs.map +1 -0
- package/dist/services/definitions/opencode.d.mts +7 -0
- package/dist/services/definitions/opencode.d.mts.map +1 -0
- package/dist/services/definitions/opencode.mjs +50 -0
- package/dist/services/definitions/opencode.mjs.map +1 -0
- package/dist/services/definitions/openpanel.d.mts +7 -0
- package/dist/services/definitions/openpanel.d.mts.map +1 -0
- package/dist/services/definitions/openpanel.mjs +46 -0
- package/dist/services/definitions/openpanel.mjs.map +1 -0
- package/dist/services/definitions/outline.d.mts +7 -0
- package/dist/services/definitions/outline.d.mts.map +1 -0
- package/dist/services/definitions/outline.mjs +74 -0
- package/dist/services/definitions/outline.mjs.map +1 -0
- package/dist/services/definitions/paperless-ngx.d.mts +7 -0
- package/dist/services/definitions/paperless-ngx.d.mts.map +1 -0
- package/dist/services/definitions/paperless-ngx.mjs +93 -0
- package/dist/services/definitions/paperless-ngx.mjs.map +1 -0
- package/dist/services/definitions/playwright-server.d.mts +7 -0
- package/dist/services/definitions/playwright-server.d.mts.map +1 -0
- package/dist/services/definitions/playwright-server.mjs +42 -0
- package/dist/services/definitions/playwright-server.mjs.map +1 -0
- package/dist/services/definitions/portainer.d.mts +7 -0
- package/dist/services/definitions/portainer.d.mts.map +1 -0
- package/dist/services/definitions/portainer.mjs +49 -0
- package/dist/services/definitions/portainer.mjs.map +1 -0
- package/dist/services/definitions/postgresql.d.mts +7 -0
- package/dist/services/definitions/postgresql.d.mts.map +1 -0
- package/dist/services/definitions/postgresql.mjs +84 -0
- package/dist/services/definitions/postgresql.mjs.map +1 -0
- package/dist/services/definitions/postiz.d.mts +7 -0
- package/dist/services/definitions/postiz.d.mts.map +1 -0
- package/dist/services/definitions/postiz.mjs +83 -0
- package/dist/services/definitions/postiz.mjs.map +1 -0
- package/dist/services/definitions/prometheus.d.mts +7 -0
- package/dist/services/definitions/prometheus.d.mts.map +1 -0
- package/dist/services/definitions/prometheus.mjs +52 -0
- package/dist/services/definitions/prometheus.mjs.map +1 -0
- package/dist/services/definitions/qdrant.d.mts +7 -0
- package/dist/services/definitions/qdrant.d.mts.map +1 -0
- package/dist/services/definitions/qdrant.mjs +77 -0
- package/dist/services/definitions/qdrant.mjs.map +1 -0
- package/dist/services/definitions/redis.d.mts +7 -0
- package/dist/services/definitions/redis.d.mts.map +1 -0
- package/dist/services/definitions/redis.mjs +91 -0
- package/dist/services/definitions/redis.mjs.map +1 -0
- package/dist/services/definitions/remotion.d.mts +7 -0
- package/dist/services/definitions/remotion.d.mts.map +1 -0
- package/dist/services/definitions/remotion.mjs +55 -0
- package/dist/services/definitions/remotion.mjs.map +1 -0
- package/dist/services/definitions/rocketchat.d.mts +7 -0
- package/dist/services/definitions/rocketchat.d.mts.map +1 -0
- package/dist/services/definitions/rocketchat.mjs +57 -0
- package/dist/services/definitions/rocketchat.mjs.map +1 -0
- package/dist/services/definitions/searxng.d.mts +7 -0
- package/dist/services/definitions/searxng.d.mts.map +1 -0
- package/dist/services/definitions/searxng.mjs +65 -0
- package/dist/services/definitions/searxng.mjs.map +1 -0
- package/dist/services/definitions/stable-diffusion.d.mts +7 -0
- package/dist/services/definitions/stable-diffusion.d.mts.map +1 -0
- package/dist/services/definitions/stable-diffusion.mjs +48 -0
- package/dist/services/definitions/stable-diffusion.mjs.map +1 -0
- package/dist/services/definitions/steel-browser.d.mts +7 -0
- package/dist/services/definitions/steel-browser.d.mts.map +1 -0
- package/dist/services/definitions/steel-browser.mjs +77 -0
- package/dist/services/definitions/steel-browser.mjs.map +1 -0
- package/dist/services/definitions/tailscale.d.mts +7 -0
- package/dist/services/definitions/tailscale.d.mts.map +1 -0
- package/dist/services/definitions/tailscale.mjs +70 -0
- package/dist/services/definitions/tailscale.mjs.map +1 -0
- package/dist/services/definitions/temporal.d.mts +7 -0
- package/dist/services/definitions/temporal.d.mts.map +1 -0
- package/dist/services/definitions/temporal.mjs +100 -0
- package/dist/services/definitions/temporal.mjs.map +1 -0
- package/dist/services/definitions/traefik.d.mts +7 -0
- package/dist/services/definitions/traefik.d.mts.map +1 -0
- package/dist/services/definitions/traefik.mjs +58 -0
- package/dist/services/definitions/traefik.mjs.map +1 -0
- package/dist/services/definitions/umami.d.mts +7 -0
- package/dist/services/definitions/umami.d.mts.map +1 -0
- package/dist/services/definitions/umami.mjs +46 -0
- package/dist/services/definitions/umami.mjs.map +1 -0
- package/dist/services/definitions/uptime-kuma.d.mts +7 -0
- package/dist/services/definitions/uptime-kuma.d.mts.map +1 -0
- package/dist/services/definitions/uptime-kuma.mjs +51 -0
- 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 +7 -0
- package/dist/services/definitions/valkey.d.mts.map +1 -0
- package/dist/services/definitions/valkey.mjs +61 -0
- package/dist/services/definitions/valkey.mjs.map +1 -0
- package/dist/services/definitions/watchtower.d.mts +7 -0
- package/dist/services/definitions/watchtower.d.mts.map +1 -0
- package/dist/services/definitions/watchtower.mjs +47 -0
- package/dist/services/definitions/watchtower.mjs.map +1 -0
- package/dist/services/definitions/weaviate.d.mts +7 -0
- package/dist/services/definitions/weaviate.d.mts.map +1 -0
- package/dist/services/definitions/weaviate.mjs +90 -0
- package/dist/services/definitions/weaviate.mjs.map +1 -0
- package/dist/services/definitions/whisper.d.mts +7 -0
- package/dist/services/definitions/whisper.d.mts.map +1 -0
- package/dist/services/definitions/whisper.mjs +62 -0
- package/dist/services/definitions/whisper.mjs.map +1 -0
- package/dist/services/registry.d.mts +16 -0
- package/dist/services/registry.d.mts.map +1 -0
- package/dist/services/registry.mjs +30 -0
- package/dist/services/registry.mjs.map +1 -0
- package/dist/services/registry.test.d.mts +1 -0
- package/dist/services/registry.test.mjs +64 -0
- package/dist/services/registry.test.mjs.map +1 -0
- package/dist/skills/registry.d.mts +11 -0
- package/dist/skills/registry.d.mts.map +1 -0
- package/dist/skills/registry.mjs +215 -0
- package/dist/skills/registry.mjs.map +1 -0
- package/dist/types.d.mts +64 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +92 -0
- package/dist/types.mjs.map +1 -0
- package/dist/validator.d.mts +20 -0
- package/dist/validator.d.mts.map +1 -0
- package/dist/validator.mjs +111 -0
- package/dist/validator.mjs.map +1 -0
- package/dist/validator.test.d.mts +1 -0
- package/dist/validator.test.mjs +65 -0
- package/dist/validator.test.mjs.map +1 -0
- package/dist/version-manager.d.mts +14 -0
- package/dist/version-manager.d.mts.map +1 -0
- package/dist/version-manager.mjs +55 -0
- package/dist/version-manager.mjs.map +1 -0
- package/dist/vi.2VT5v0um-Qk6MgAnK.mjs +12916 -0
- package/dist/vi.2VT5v0um-Qk6MgAnK.mjs.map +1 -0
- package/package.json +17 -17
- package/src/schema.ts +2 -1
- package/src/services/definitions/convex-dashboard.ts +48 -0
- package/src/services/definitions/convex.ts +123 -0
- package/src/services/definitions/index.ts +12 -0
- package/src/services/definitions/mission-control.ts +71 -0
- package/src/services/definitions/tailscale.ts +2 -0
- package/src/services/definitions/usesend.ts +98 -0
- package/tsdown.config.ts +1 -0
|
@@ -0,0 +1,293 @@
|
|
|
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
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
13
|
+
|
|
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":";;;;;;;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,11 @@
|
|
|
1
|
+
import { ResolverOutput } from "../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/generators/n8n-workflows.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Generates n8n workflow template files.
|
|
6
|
+
* Returns a map of file paths to JSON content strings.
|
|
7
|
+
*/
|
|
8
|
+
declare function generateN8nWorkflows(resolved: ResolverOutput): Record<string, string>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { generateN8nWorkflows };
|
|
11
|
+
//# sourceMappingURL=n8n-workflows.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
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;
|
|
32
|
+
|
|
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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { NativePlatform, ResolvedService } from "../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/generators/native-services.d.ts
|
|
4
|
+
interface NativeServicesGeneratorOptions {
|
|
5
|
+
nativeServices: ResolvedService[];
|
|
6
|
+
platform: NativePlatform;
|
|
7
|
+
projectName: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generates native install/run scripts for services that have a native recipe.
|
|
11
|
+
* Returns e.g. native/install-linux.sh (or native/install.ps1 for Windows).
|
|
12
|
+
* Scripts source .env and run install steps then start commands in dependency order.
|
|
13
|
+
*/
|
|
14
|
+
declare function generateNativeInstallScripts(options: NativeServicesGeneratorOptions): Record<string, string>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { NativeServicesGeneratorOptions, generateNativeInstallScripts };
|
|
17
|
+
//# sourceMappingURL=native-services.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
}
|
|
75
|
+
|
|
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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ResolverOutput } from "../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/generators/postgres-init.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Database requirement descriptor for a service.
|
|
6
|
+
*/
|
|
7
|
+
interface DbRequirement {
|
|
8
|
+
serviceId: string;
|
|
9
|
+
serviceName: string;
|
|
10
|
+
dbName: string;
|
|
11
|
+
dbUser: string;
|
|
12
|
+
passwordEnvVar: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the list of database requirements for all resolved services.
|
|
16
|
+
* Exported so other generators (env, composer) can access the same data.
|
|
17
|
+
*/
|
|
18
|
+
declare function getDbRequirements(resolved: ResolverOutput): DbRequirement[];
|
|
19
|
+
/**
|
|
20
|
+
* Generates a PostgreSQL initialization script that creates databases and users
|
|
21
|
+
* for all companion services that need their own DB.
|
|
22
|
+
*
|
|
23
|
+
* Returns null if PostgreSQL is not in the resolved stack or no services need extra DBs.
|
|
24
|
+
* The script is designed to be mounted at /docker-entrypoint-initdb.d/init-databases.sh
|
|
25
|
+
* and runs automatically during PostgreSQL's first initialization.
|
|
26
|
+
*/
|
|
27
|
+
declare function generatePostgresInit(resolved: ResolverOutput): string | null;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { generatePostgresInit, getDbRequirements };
|
|
30
|
+
//# sourceMappingURL=postgres-init.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|