@better-openclaw/core 1.0.20 → 1.0.22
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.cjs +2 -3
- package/dist/bare-metal-partition.cjs.map +1 -1
- package/dist/bare-metal-partition.d.mts.map +1 -1
- package/dist/bare-metal-partition.mjs +1 -1
- package/dist/bare-metal-partition.test.cjs +4 -5
- package/dist/bare-metal-partition.test.cjs.map +1 -1
- package/dist/bare-metal-partition.test.mjs +3 -4
- package/dist/bare-metal-partition.test.mjs.map +1 -1
- package/dist/compose-validation.test.cjs +5 -6
- package/dist/compose-validation.test.cjs.map +1 -1
- package/dist/compose-validation.test.mjs +2 -3
- package/dist/compose-validation.test.mjs.map +1 -1
- package/dist/composer.cjs +4 -5
- package/dist/composer.cjs.map +1 -1
- package/dist/composer.d.mts.map +1 -1
- package/dist/composer.mjs +1 -2
- package/dist/composer.mjs.map +1 -1
- package/dist/composer.snapshot.test.cjs +4 -5
- package/dist/composer.snapshot.test.cjs.map +1 -1
- package/dist/composer.snapshot.test.mjs +3 -4
- package/dist/composer.snapshot.test.mjs.map +1 -1
- package/dist/composer.test.cjs +5 -6
- package/dist/composer.test.cjs.map +1 -1
- package/dist/composer.test.mjs +3 -4
- package/dist/composer.test.mjs.map +1 -1
- package/dist/coolify-BVGGcMrT.d.mts +18 -0
- package/dist/coolify-BVGGcMrT.d.mts.map +1 -0
- package/dist/coolify-vlb1G9V2.d.cts +18 -0
- package/dist/coolify-vlb1G9V2.d.cts.map +1 -0
- package/dist/deployers/coolify.cjs +63 -53
- package/dist/deployers/coolify.cjs.map +1 -1
- package/dist/deployers/coolify.d.cts +2 -25
- package/dist/deployers/coolify.d.mts +2 -25
- package/dist/deployers/coolify.mjs +62 -51
- package/dist/deployers/coolify.mjs.map +1 -1
- package/dist/deployers/dokploy.cjs +108 -32
- package/dist/deployers/dokploy.cjs.map +1 -1
- package/dist/deployers/dokploy.d.cts +2 -24
- package/dist/deployers/dokploy.d.mts +2 -24
- package/dist/deployers/dokploy.mjs +107 -30
- package/dist/deployers/dokploy.mjs.map +1 -1
- package/dist/deployers/index.cjs +4 -5
- package/dist/deployers/index.cjs.map +1 -1
- package/dist/deployers/index.d.cts +4 -4
- package/dist/deployers/index.d.cts.map +1 -1
- package/dist/deployers/index.d.mts +4 -4
- package/dist/deployers/index.d.mts.map +1 -1
- package/dist/deployers/index.mjs +1 -2
- package/dist/deployers/index.mjs.map +1 -1
- package/dist/deployers/strip-host-ports.cjs +137 -0
- package/dist/deployers/strip-host-ports.cjs.map +1 -0
- package/dist/deployers/strip-host-ports.d.cts +62 -0
- package/dist/deployers/strip-host-ports.d.cts.map +1 -0
- package/dist/deployers/strip-host-ports.d.mts +62 -0
- package/dist/deployers/strip-host-ports.d.mts.map +1 -0
- package/dist/deployers/strip-host-ports.mjs +132 -0
- package/dist/deployers/strip-host-ports.mjs.map +1 -0
- package/dist/deployers/strip-host-ports.test.cjs +88 -0
- package/dist/deployers/strip-host-ports.test.cjs.map +1 -0
- package/dist/deployers/strip-host-ports.test.d.cts +1 -0
- package/dist/deployers/strip-host-ports.test.d.mts +1 -0
- package/dist/deployers/strip-host-ports.test.mjs +89 -0
- package/dist/deployers/strip-host-ports.test.mjs.map +1 -0
- package/dist/deployers/types.d.cts +2 -72
- package/dist/deployers/types.d.mts +2 -72
- package/dist/deployers/types.mjs +1 -1
- package/dist/dokploy-8cbrxUun.d.cts +25 -0
- package/dist/dokploy-8cbrxUun.d.cts.map +1 -0
- package/dist/dokploy-BTflLhTM.d.mts +25 -0
- package/dist/dokploy-BTflLhTM.d.mts.map +1 -0
- package/dist/errors.cjs +2 -3
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.mjs +1 -1
- package/dist/errors.mjs.map +1 -1
- package/dist/generate.cjs +27 -28
- package/dist/generate.cjs.map +1 -1
- package/dist/generate.d.mts.map +1 -1
- package/dist/generate.mjs +1 -2
- package/dist/generate.mjs.map +1 -1
- package/dist/generate.test.cjs +4 -5
- package/dist/generate.test.cjs.map +1 -1
- package/dist/generate.test.mjs +3 -4
- package/dist/generate.test.mjs.map +1 -1
- package/dist/generators/bare-metal-install.cjs +2 -3
- package/dist/generators/bare-metal-install.cjs.map +1 -1
- package/dist/generators/bare-metal-install.d.mts.map +1 -1
- package/dist/generators/bare-metal-install.mjs +1 -1
- package/dist/generators/bare-metal-install.test.cjs +3 -4
- package/dist/generators/bare-metal-install.test.cjs.map +1 -1
- package/dist/generators/bare-metal-install.test.mjs +3 -4
- package/dist/generators/bare-metal-install.test.mjs.map +1 -1
- package/dist/generators/caddy.cjs +2 -3
- package/dist/generators/caddy.cjs.map +1 -1
- package/dist/generators/caddy.d.mts.map +1 -1
- package/dist/generators/caddy.mjs +1 -1
- package/dist/generators/caddy.test.cjs +3 -4
- package/dist/generators/caddy.test.cjs.map +1 -1
- package/dist/generators/caddy.test.mjs +3 -4
- package/dist/generators/caddy.test.mjs.map +1 -1
- package/dist/generators/cloud-init.cjs +2 -3
- package/dist/generators/cloud-init.cjs.map +1 -1
- package/dist/generators/cloud-init.mjs +1 -1
- package/dist/generators/env.cjs +4 -5
- package/dist/generators/env.cjs.map +1 -1
- package/dist/generators/env.d.mts.map +1 -1
- package/dist/generators/env.mjs +1 -2
- package/dist/generators/env.mjs.map +1 -1
- package/dist/generators/env.test.cjs +3 -4
- package/dist/generators/env.test.cjs.map +1 -1
- package/dist/generators/env.test.mjs +3 -4
- package/dist/generators/env.test.mjs.map +1 -1
- package/dist/generators/get-shit-done.cjs +2 -3
- package/dist/generators/get-shit-done.cjs.map +1 -1
- package/dist/generators/get-shit-done.mjs +1 -1
- package/dist/generators/grafana.cjs +2 -3
- package/dist/generators/grafana.cjs.map +1 -1
- package/dist/generators/grafana.mjs +1 -1
- package/dist/generators/health-check.cjs +2 -3
- package/dist/generators/health-check.cjs.map +1 -1
- package/dist/generators/health-check.d.mts.map +1 -1
- package/dist/generators/health-check.mjs +1 -1
- package/dist/generators/health-check.test.cjs +3 -4
- package/dist/generators/health-check.test.cjs.map +1 -1
- package/dist/generators/health-check.test.mjs +3 -4
- package/dist/generators/health-check.test.mjs.map +1 -1
- package/dist/generators/n8n-workflows.cjs +2 -3
- package/dist/generators/n8n-workflows.cjs.map +1 -1
- package/dist/generators/n8n-workflows.d.mts.map +1 -1
- package/dist/generators/n8n-workflows.mjs +1 -1
- package/dist/generators/native-services.cjs +2 -3
- package/dist/generators/native-services.cjs.map +1 -1
- package/dist/generators/native-services.mjs +1 -1
- package/dist/generators/openclaw-install-script.cjs +2 -3
- package/dist/generators/openclaw-install-script.cjs.map +1 -1
- package/dist/generators/openclaw-install-script.mjs +1 -1
- package/dist/generators/openclaw-json.cjs +2 -3
- package/dist/generators/openclaw-json.cjs.map +1 -1
- package/dist/generators/openclaw-json.mjs +1 -1
- package/dist/generators/postgres-init.cjs +32 -3
- package/dist/generators/postgres-init.cjs.map +1 -1
- package/dist/generators/postgres-init.d.cts.map +1 -1
- package/dist/generators/postgres-init.d.mts.map +1 -1
- package/dist/generators/postgres-init.mjs +31 -1
- package/dist/generators/postgres-init.mjs.map +1 -1
- package/dist/generators/prometheus.cjs +2 -3
- package/dist/generators/prometheus.cjs.map +1 -1
- package/dist/generators/prometheus.d.mts.map +1 -1
- package/dist/generators/prometheus.mjs +1 -1
- package/dist/generators/readme.cjs +2 -3
- package/dist/generators/readme.cjs.map +1 -1
- package/dist/generators/readme.d.mts.map +1 -1
- package/dist/generators/readme.mjs +1 -1
- package/dist/generators/scripts.cjs +2 -3
- package/dist/generators/scripts.cjs.map +1 -1
- package/dist/generators/scripts.mjs +1 -1
- package/dist/generators/scripts.test.cjs +3 -4
- package/dist/generators/scripts.test.cjs.map +1 -1
- package/dist/generators/scripts.test.mjs +3 -4
- package/dist/generators/scripts.test.mjs.map +1 -1
- package/dist/generators/skills.cjs +3 -590
- package/dist/generators/skills.d.mts.map +1 -1
- package/dist/generators/skills.mjs +1 -2
- package/dist/generators/skills.mjs.map +1 -1
- package/dist/generators/stack-manifest.cjs +2 -3
- package/dist/generators/stack-manifest.cjs.map +1 -1
- package/dist/generators/stack-manifest.mjs +1 -1
- package/dist/generators/traefik.cjs +2 -3
- package/dist/generators/traefik.cjs.map +1 -1
- package/dist/generators/traefik.mjs +1 -1
- package/dist/generators/traefik.test.cjs +4 -5
- package/dist/generators/traefik.test.cjs.map +1 -1
- package/dist/generators/traefik.test.mjs +3 -4
- package/dist/generators/traefik.test.mjs.map +1 -1
- package/dist/index.cjs +35 -36
- package/dist/index.d.cts +5 -5
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +2 -3
- package/dist/{magic-string.es-D2agHT3I.cjs → magic-string.es-CJq41xdM.cjs} +2 -4
- package/dist/{magic-string.es-CfFonO_S.mjs.map → magic-string.es-CJq41xdM.cjs.map} +1 -1
- package/dist/{magic-string.es-CfFonO_S.mjs → magic-string.es-CoDyF8pj.mjs} +2 -3
- package/dist/{magic-string.es-D2agHT3I.cjs.map → magic-string.es-CoDyF8pj.mjs.map} +1 -1
- package/dist/migrations.cjs +5 -6
- package/dist/migrations.cjs.map +1 -1
- package/dist/migrations.mjs +4 -4
- package/dist/migrations.mjs.map +1 -1
- package/dist/migrations.test.cjs +6 -7
- package/dist/migrations.test.cjs.map +1 -1
- package/dist/migrations.test.mjs +7 -8
- package/dist/migrations.test.mjs.map +1 -1
- package/dist/port-scanner.cjs +2 -3
- package/dist/port-scanner.cjs.map +1 -1
- package/dist/port-scanner.d.mts.map +1 -1
- package/dist/port-scanner.mjs +1 -1
- package/dist/presets/presets.test.cjs +11 -8
- package/dist/presets/presets.test.cjs.map +1 -1
- package/dist/presets/presets.test.mjs +7 -4
- package/dist/presets/presets.test.mjs.map +1 -1
- package/dist/presets/registry.cjs +152 -3
- package/dist/presets/registry.cjs.map +1 -1
- package/dist/presets/registry.d.cts.map +1 -1
- package/dist/presets/registry.d.mts.map +1 -1
- package/dist/presets/registry.mjs +151 -1
- package/dist/presets/registry.mjs.map +1 -1
- package/dist/presets/registry.test.cjs +3 -4
- package/dist/presets/registry.test.cjs.map +1 -1
- package/dist/presets/registry.test.mjs +3 -4
- package/dist/presets/registry.test.mjs.map +1 -1
- package/dist/resolver.cjs +4 -5
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.mts.map +1 -1
- package/dist/resolver.mjs +1 -2
- package/dist/resolver.mjs.map +1 -1
- package/dist/resolver.test.cjs +3 -4
- package/dist/resolver.test.cjs.map +1 -1
- package/dist/resolver.test.mjs +3 -4
- package/dist/resolver.test.mjs.map +1 -1
- package/dist/schema-C_hc7e4k.d.cts +898 -0
- package/dist/schema-C_hc7e4k.d.cts.map +1 -0
- package/dist/schema-CaesJaS2.d.mts +898 -0
- package/dist/schema-CaesJaS2.d.mts.map +1 -0
- package/dist/schema.cjs +15 -5
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +2 -854
- package/dist/schema.d.mts +2 -854
- package/dist/schema.mjs +13 -3
- package/dist/schema.mjs.map +1 -1
- package/dist/schema.test.cjs +3 -4
- package/dist/schema.test.cjs.map +1 -1
- package/dist/schema.test.mjs +3 -4
- package/dist/schema.test.mjs.map +1 -1
- package/dist/services/definitions/airbyte.cjs +76 -0
- package/dist/services/definitions/airbyte.cjs.map +1 -0
- package/dist/services/definitions/airbyte.d.cts +7 -0
- package/dist/services/definitions/airbyte.d.cts.map +1 -0
- package/dist/services/definitions/airbyte.d.mts +7 -0
- package/dist/services/definitions/airbyte.d.mts.map +1 -0
- package/dist/services/definitions/airbyte.mjs +75 -0
- package/dist/services/definitions/airbyte.mjs.map +1 -0
- package/dist/services/definitions/airflow.cjs +109 -0
- package/dist/services/definitions/airflow.cjs.map +1 -0
- package/dist/services/definitions/airflow.d.cts +7 -0
- package/dist/services/definitions/airflow.d.cts.map +1 -0
- package/dist/services/definitions/airflow.d.mts +7 -0
- package/dist/services/definitions/airflow.d.mts.map +1 -0
- package/dist/services/definitions/airflow.mjs +108 -0
- package/dist/services/definitions/airflow.mjs.map +1 -0
- package/dist/services/definitions/anything-llm.cjs +2 -3
- package/dist/services/definitions/anything-llm.cjs.map +1 -1
- package/dist/services/definitions/anything-llm.mjs +1 -1
- package/dist/services/definitions/appflowy.cjs +2 -3
- package/dist/services/definitions/appflowy.cjs.map +1 -1
- package/dist/services/definitions/appflowy.mjs +1 -1
- package/dist/services/definitions/appwrite.cjs +190 -0
- package/dist/services/definitions/appwrite.cjs.map +1 -0
- package/dist/services/definitions/appwrite.d.cts +7 -0
- package/dist/services/definitions/appwrite.d.cts.map +1 -0
- package/dist/services/definitions/appwrite.d.mts +7 -0
- package/dist/services/definitions/appwrite.d.mts.map +1 -0
- package/dist/services/definitions/appwrite.mjs +189 -0
- package/dist/services/definitions/appwrite.mjs.map +1 -0
- package/dist/services/definitions/authelia.cjs +145 -0
- package/dist/services/definitions/authelia.cjs.map +1 -0
- package/dist/services/definitions/authelia.d.cts +7 -0
- package/dist/services/definitions/authelia.d.cts.map +1 -0
- package/dist/services/definitions/authelia.d.mts +7 -0
- package/dist/services/definitions/authelia.d.mts.map +1 -0
- package/dist/services/definitions/authelia.mjs +144 -0
- package/dist/services/definitions/authelia.mjs.map +1 -0
- package/dist/services/definitions/authentik.cjs +2 -3
- package/dist/services/definitions/authentik.cjs.map +1 -1
- package/dist/services/definitions/authentik.mjs +1 -1
- package/dist/services/definitions/axolotl.cjs +67 -0
- package/dist/services/definitions/axolotl.cjs.map +1 -0
- package/dist/services/definitions/axolotl.d.cts +7 -0
- package/dist/services/definitions/axolotl.d.cts.map +1 -0
- package/dist/services/definitions/axolotl.d.mts +7 -0
- package/dist/services/definitions/axolotl.d.mts.map +1 -0
- package/dist/services/definitions/axolotl.mjs +66 -0
- package/dist/services/definitions/axolotl.mjs.map +1 -0
- package/dist/services/definitions/beszel.cjs +2 -3
- package/dist/services/definitions/beszel.cjs.map +1 -1
- package/dist/services/definitions/beszel.mjs +1 -1
- package/dist/services/definitions/browserless.cjs +2 -3
- package/dist/services/definitions/browserless.cjs.map +1 -1
- package/dist/services/definitions/browserless.mjs +1 -1
- package/dist/services/definitions/caddy.cjs +2 -3
- package/dist/services/definitions/caddy.cjs.map +1 -1
- package/dist/services/definitions/caddy.mjs +1 -1
- package/dist/services/definitions/cal-com.cjs +2 -3
- package/dist/services/definitions/cal-com.cjs.map +1 -1
- package/dist/services/definitions/cal-com.mjs +1 -1
- package/dist/services/definitions/chatwoot-worker.cjs +95 -0
- package/dist/services/definitions/chatwoot-worker.cjs.map +1 -0
- package/dist/services/definitions/chatwoot-worker.d.cts +7 -0
- package/dist/services/definitions/chatwoot-worker.d.cts.map +1 -0
- package/dist/services/definitions/chatwoot-worker.d.mts +7 -0
- package/dist/services/definitions/chatwoot-worker.d.mts.map +1 -0
- package/dist/services/definitions/chatwoot-worker.mjs +94 -0
- package/dist/services/definitions/chatwoot-worker.mjs.map +1 -0
- package/dist/services/definitions/chatwoot.cjs +112 -0
- package/dist/services/definitions/chatwoot.cjs.map +1 -0
- package/dist/services/definitions/chatwoot.d.cts +7 -0
- package/dist/services/definitions/chatwoot.d.cts.map +1 -0
- package/dist/services/definitions/chatwoot.d.mts +7 -0
- package/dist/services/definitions/chatwoot.d.mts.map +1 -0
- package/dist/services/definitions/chatwoot.mjs +111 -0
- package/dist/services/definitions/chatwoot.mjs.map +1 -0
- package/dist/services/definitions/chromadb.cjs +2 -3
- package/dist/services/definitions/chromadb.cjs.map +1 -1
- package/dist/services/definitions/chromadb.mjs +1 -1
- package/dist/services/definitions/claude-code.cjs +2 -3
- package/dist/services/definitions/claude-code.cjs.map +1 -1
- package/dist/services/definitions/claude-code.mjs +1 -1
- package/dist/services/definitions/code-server.cjs +2 -3
- package/dist/services/definitions/code-server.cjs.map +1 -1
- package/dist/services/definitions/code-server.mjs +1 -1
- package/dist/services/definitions/codex.cjs +2 -3
- package/dist/services/definitions/codex.cjs.map +1 -1
- package/dist/services/definitions/codex.mjs +1 -1
- package/dist/services/definitions/comfyui.cjs +2 -3
- package/dist/services/definitions/comfyui.cjs.map +1 -1
- package/dist/services/definitions/comfyui.mjs +1 -1
- package/dist/services/definitions/convex-dashboard.cjs +2 -3
- package/dist/services/definitions/convex-dashboard.cjs.map +1 -1
- package/dist/services/definitions/convex-dashboard.mjs +1 -1
- package/dist/services/definitions/convex.cjs +2 -3
- package/dist/services/definitions/convex.cjs.map +1 -1
- package/dist/services/definitions/convex.mjs +1 -1
- package/dist/services/definitions/coolify.cjs +2 -3
- package/dist/services/definitions/coolify.cjs.map +1 -1
- package/dist/services/definitions/coolify.mjs +1 -1
- package/dist/services/definitions/crowdsec.cjs +2 -3
- package/dist/services/definitions/crowdsec.cjs.map +1 -1
- package/dist/services/definitions/crowdsec.mjs +1 -1
- package/dist/services/definitions/dagster.cjs +83 -0
- package/dist/services/definitions/dagster.cjs.map +1 -0
- package/dist/services/definitions/dagster.d.cts +7 -0
- package/dist/services/definitions/dagster.d.cts.map +1 -0
- package/dist/services/definitions/dagster.d.mts +7 -0
- package/dist/services/definitions/dagster.d.mts.map +1 -0
- package/dist/services/definitions/dagster.mjs +82 -0
- package/dist/services/definitions/dagster.mjs.map +1 -0
- package/dist/services/definitions/desktop-environment.cjs +2 -3
- package/dist/services/definitions/desktop-environment.cjs.map +1 -1
- package/dist/services/definitions/desktop-environment.mjs +1 -1
- package/dist/services/definitions/dify.cjs +2 -3
- package/dist/services/definitions/dify.cjs.map +1 -1
- package/dist/services/definitions/dify.mjs +1 -1
- package/dist/services/definitions/directus.cjs +115 -0
- package/dist/services/definitions/directus.cjs.map +1 -0
- package/dist/services/definitions/directus.d.cts +7 -0
- package/dist/services/definitions/directus.d.cts.map +1 -0
- package/dist/services/definitions/directus.d.mts +7 -0
- package/dist/services/definitions/directus.d.mts.map +1 -0
- package/dist/services/definitions/directus.mjs +114 -0
- package/dist/services/definitions/directus.mjs.map +1 -0
- package/dist/services/definitions/docsgpt.cjs +2 -3
- package/dist/services/definitions/docsgpt.cjs.map +1 -1
- package/dist/services/definitions/docsgpt.mjs +1 -1
- package/dist/services/definitions/dokploy.cjs +2 -3
- package/dist/services/definitions/dokploy.cjs.map +1 -1
- package/dist/services/definitions/dokploy.mjs +1 -1
- package/dist/services/definitions/dozzle.cjs +2 -3
- package/dist/services/definitions/dozzle.cjs.map +1 -1
- package/dist/services/definitions/dozzle.mjs +1 -1
- package/dist/services/definitions/duplicati.cjs +76 -0
- package/dist/services/definitions/duplicati.cjs.map +1 -0
- package/dist/services/definitions/duplicati.d.cts +7 -0
- package/dist/services/definitions/duplicati.d.cts.map +1 -0
- package/dist/services/definitions/duplicati.d.mts +7 -0
- package/dist/services/definitions/duplicati.d.mts.map +1 -0
- package/dist/services/definitions/duplicati.mjs +75 -0
- package/dist/services/definitions/duplicati.mjs.map +1 -0
- package/dist/services/definitions/excalidraw.cjs +48 -0
- package/dist/services/definitions/excalidraw.cjs.map +1 -0
- package/dist/services/definitions/excalidraw.d.cts +7 -0
- package/dist/services/definitions/excalidraw.d.cts.map +1 -0
- package/dist/services/definitions/excalidraw.d.mts +7 -0
- package/dist/services/definitions/excalidraw.d.mts.map +1 -0
- package/dist/services/definitions/excalidraw.mjs +47 -0
- package/dist/services/definitions/excalidraw.mjs.map +1 -0
- package/dist/services/definitions/ffmpeg.cjs +2 -3
- package/dist/services/definitions/ffmpeg.cjs.map +1 -1
- package/dist/services/definitions/ffmpeg.mjs +1 -1
- package/dist/services/definitions/firecrawl-playwright.cjs +61 -0
- package/dist/services/definitions/firecrawl-playwright.cjs.map +1 -0
- package/dist/services/definitions/firecrawl-playwright.d.cts +7 -0
- package/dist/services/definitions/firecrawl-playwright.d.cts.map +1 -0
- package/dist/services/definitions/firecrawl-playwright.d.mts +7 -0
- package/dist/services/definitions/firecrawl-playwright.d.mts.map +1 -0
- package/dist/services/definitions/firecrawl-playwright.mjs +60 -0
- package/dist/services/definitions/firecrawl-playwright.mjs.map +1 -0
- package/dist/services/definitions/firecrawl.cjs +163 -0
- package/dist/services/definitions/firecrawl.cjs.map +1 -0
- package/dist/services/definitions/firecrawl.d.cts +7 -0
- package/dist/services/definitions/firecrawl.d.cts.map +1 -0
- package/dist/services/definitions/firecrawl.d.mts +7 -0
- package/dist/services/definitions/firecrawl.d.mts.map +1 -0
- package/dist/services/definitions/firecrawl.mjs +162 -0
- package/dist/services/definitions/firecrawl.mjs.map +1 -0
- package/dist/services/definitions/flagsmith.cjs +77 -0
- package/dist/services/definitions/flagsmith.cjs.map +1 -0
- package/dist/services/definitions/flagsmith.d.cts +7 -0
- package/dist/services/definitions/flagsmith.d.cts.map +1 -0
- package/dist/services/definitions/flagsmith.d.mts +7 -0
- package/dist/services/definitions/flagsmith.d.mts.map +1 -0
- package/dist/services/definitions/flagsmith.mjs +76 -0
- package/dist/services/definitions/flagsmith.mjs.map +1 -0
- package/dist/services/definitions/flowise.cjs +2 -3
- package/dist/services/definitions/flowise.cjs.map +1 -1
- package/dist/services/definitions/flowise.mjs +1 -1
- package/dist/services/definitions/fonoster.cjs +66 -0
- package/dist/services/definitions/fonoster.cjs.map +1 -0
- package/dist/services/definitions/fonoster.d.cts +7 -0
- package/dist/services/definitions/fonoster.d.cts.map +1 -0
- package/dist/services/definitions/fonoster.d.mts +7 -0
- package/dist/services/definitions/fonoster.d.mts.map +1 -0
- package/dist/services/definitions/fonoster.mjs +65 -0
- package/dist/services/definitions/fonoster.mjs.map +1 -0
- package/dist/services/definitions/formbricks.cjs +75 -0
- package/dist/services/definitions/formbricks.cjs.map +1 -0
- package/dist/services/definitions/formbricks.d.cts +7 -0
- package/dist/services/definitions/formbricks.d.cts.map +1 -0
- package/dist/services/definitions/formbricks.d.mts +7 -0
- package/dist/services/definitions/formbricks.d.mts.map +1 -0
- package/dist/services/definitions/formbricks.mjs +74 -0
- package/dist/services/definitions/formbricks.mjs.map +1 -0
- package/dist/services/definitions/gemini-cli.cjs +2 -3
- package/dist/services/definitions/gemini-cli.cjs.map +1 -1
- package/dist/services/definitions/gemini-cli.mjs +1 -1
- package/dist/services/definitions/ghost.cjs +2 -3
- package/dist/services/definitions/ghost.cjs.map +1 -1
- package/dist/services/definitions/ghost.mjs +1 -1
- package/dist/services/definitions/gitea.cjs +2 -3
- package/dist/services/definitions/gitea.cjs.map +1 -1
- package/dist/services/definitions/gitea.mjs +1 -1
- package/dist/services/definitions/gotify.cjs +2 -3
- package/dist/services/definitions/gotify.cjs.map +1 -1
- package/dist/services/definitions/gotify.mjs +1 -1
- package/dist/services/definitions/grafana.cjs +2 -3
- package/dist/services/definitions/grafana.cjs.map +1 -1
- package/dist/services/definitions/grafana.mjs +1 -1
- package/dist/services/definitions/headscale.cjs +2 -3
- package/dist/services/definitions/headscale.cjs.map +1 -1
- package/dist/services/definitions/headscale.mjs +1 -1
- package/dist/services/definitions/hedgedoc.cjs +82 -0
- package/dist/services/definitions/hedgedoc.cjs.map +1 -0
- package/dist/services/definitions/hedgedoc.d.cts +7 -0
- package/dist/services/definitions/hedgedoc.d.cts.map +1 -0
- package/dist/services/definitions/hedgedoc.d.mts +7 -0
- package/dist/services/definitions/hedgedoc.d.mts.map +1 -0
- package/dist/services/definitions/hedgedoc.mjs +81 -0
- package/dist/services/definitions/hedgedoc.mjs.map +1 -0
- package/dist/services/definitions/hexstrike.cjs +2 -3
- package/dist/services/definitions/hexstrike.cjs.map +1 -1
- package/dist/services/definitions/hexstrike.mjs +1 -1
- package/dist/services/definitions/heyform.cjs +64 -0
- package/dist/services/definitions/heyform.cjs.map +1 -0
- package/dist/services/definitions/heyform.d.cts +7 -0
- package/dist/services/definitions/heyform.d.cts.map +1 -0
- package/dist/services/definitions/heyform.d.mts +7 -0
- package/dist/services/definitions/heyform.d.mts.map +1 -0
- package/dist/services/definitions/heyform.mjs +63 -0
- package/dist/services/definitions/heyform.mjs.map +1 -0
- package/dist/services/definitions/homeassistant.cjs +2 -3
- package/dist/services/definitions/homeassistant.cjs.map +1 -1
- package/dist/services/definitions/homeassistant.mjs +1 -1
- package/dist/services/definitions/hoppscotch.cjs +76 -0
- package/dist/services/definitions/hoppscotch.cjs.map +1 -0
- package/dist/services/definitions/hoppscotch.d.cts +7 -0
- package/dist/services/definitions/hoppscotch.d.cts.map +1 -0
- package/dist/services/definitions/hoppscotch.d.mts +7 -0
- package/dist/services/definitions/hoppscotch.d.mts.map +1 -0
- package/dist/services/definitions/hoppscotch.mjs +75 -0
- package/dist/services/definitions/hoppscotch.mjs.map +1 -0
- package/dist/services/definitions/immich.cjs +2 -3
- package/dist/services/definitions/immich.cjs.map +1 -1
- package/dist/services/definitions/immich.mjs +1 -1
- package/dist/services/definitions/index.cjs +220 -98
- package/dist/services/definitions/index.cjs.map +1 -1
- package/dist/services/definitions/index.d.cts +42 -1
- package/dist/services/definitions/index.d.cts.map +1 -1
- package/dist/services/definitions/index.d.mts +42 -1
- package/dist/services/definitions/index.d.mts.map +1 -1
- package/dist/services/definitions/index.mjs +85 -4
- package/dist/services/definitions/index.mjs.map +1 -1
- package/dist/services/definitions/infisical.cjs +99 -0
- package/dist/services/definitions/infisical.cjs.map +1 -0
- package/dist/services/definitions/infisical.d.cts +7 -0
- package/dist/services/definitions/infisical.d.cts.map +1 -0
- package/dist/services/definitions/infisical.d.mts +7 -0
- package/dist/services/definitions/infisical.d.mts.map +1 -0
- package/dist/services/definitions/infisical.mjs +98 -0
- package/dist/services/definitions/infisical.mjs.map +1 -0
- package/dist/services/definitions/jellyfin.cjs +2 -3
- package/dist/services/definitions/jellyfin.cjs.map +1 -1
- package/dist/services/definitions/jellyfin.mjs +1 -1
- package/dist/services/definitions/jenkins.cjs +2 -3
- package/dist/services/definitions/jenkins.cjs.map +1 -1
- package/dist/services/definitions/jenkins.mjs +1 -1
- package/dist/services/definitions/keycloak.cjs +122 -0
- package/dist/services/definitions/keycloak.cjs.map +1 -0
- package/dist/services/definitions/keycloak.d.cts +7 -0
- package/dist/services/definitions/keycloak.d.cts.map +1 -0
- package/dist/services/definitions/keycloak.d.mts +7 -0
- package/dist/services/definitions/keycloak.d.mts.map +1 -0
- package/dist/services/definitions/keycloak.mjs +121 -0
- package/dist/services/definitions/keycloak.mjs.map +1 -0
- package/dist/services/definitions/kimi.cjs +2 -3
- package/dist/services/definitions/kimi.cjs.map +1 -1
- package/dist/services/definitions/kimi.mjs +1 -1
- package/dist/services/definitions/kong.cjs +121 -0
- package/dist/services/definitions/kong.cjs.map +1 -0
- package/dist/services/definitions/kong.d.cts +7 -0
- package/dist/services/definitions/kong.d.cts.map +1 -0
- package/dist/services/definitions/kong.d.mts +7 -0
- package/dist/services/definitions/kong.d.mts.map +1 -0
- package/dist/services/definitions/kong.mjs +120 -0
- package/dist/services/definitions/kong.mjs.map +1 -0
- package/dist/services/definitions/lago.cjs +95 -0
- package/dist/services/definitions/lago.cjs.map +1 -0
- package/dist/services/definitions/lago.d.cts +7 -0
- package/dist/services/definitions/lago.d.cts.map +1 -0
- package/dist/services/definitions/lago.d.mts +7 -0
- package/dist/services/definitions/lago.d.mts.map +1 -0
- package/dist/services/definitions/lago.mjs +94 -0
- package/dist/services/definitions/lago.mjs.map +1 -0
- package/dist/services/definitions/langflow.cjs +88 -0
- package/dist/services/definitions/langflow.cjs.map +1 -0
- package/dist/services/definitions/langflow.d.cts +7 -0
- package/dist/services/definitions/langflow.d.cts.map +1 -0
- package/dist/services/definitions/langflow.d.mts +7 -0
- package/dist/services/definitions/langflow.d.mts.map +1 -0
- package/dist/services/definitions/langflow.mjs +87 -0
- package/dist/services/definitions/langflow.mjs.map +1 -0
- package/dist/services/definitions/langfuse.cjs +79 -0
- package/dist/services/definitions/langfuse.cjs.map +1 -0
- package/dist/services/definitions/langfuse.d.cts +7 -0
- package/dist/services/definitions/langfuse.d.cts.map +1 -0
- package/dist/services/definitions/langfuse.d.mts +7 -0
- package/dist/services/definitions/langfuse.d.mts.map +1 -0
- package/dist/services/definitions/langfuse.mjs +78 -0
- package/dist/services/definitions/langfuse.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.cjs +2 -3
- package/dist/services/definitions/lasuite-meet-agents.cjs.map +1 -1
- package/dist/services/definitions/lasuite-meet-agents.mjs +1 -1
- package/dist/services/definitions/lasuite-meet-backend.cjs +2 -3
- package/dist/services/definitions/lasuite-meet-backend.cjs.map +1 -1
- package/dist/services/definitions/lasuite-meet-backend.mjs +1 -1
- package/dist/services/definitions/lasuite-meet-frontend.cjs +2 -3
- package/dist/services/definitions/lasuite-meet-frontend.cjs.map +1 -1
- package/dist/services/definitions/lasuite-meet-frontend.mjs +1 -1
- package/dist/services/definitions/librechat.cjs +2 -3
- package/dist/services/definitions/librechat.cjs.map +1 -1
- package/dist/services/definitions/librechat.mjs +1 -1
- package/dist/services/definitions/lightpanda.cjs +2 -3
- package/dist/services/definitions/lightpanda.cjs.map +1 -1
- package/dist/services/definitions/lightpanda.mjs +1 -1
- package/dist/services/definitions/listmonk.cjs +118 -0
- package/dist/services/definitions/listmonk.cjs.map +1 -0
- package/dist/services/definitions/listmonk.d.cts +7 -0
- package/dist/services/definitions/listmonk.d.cts.map +1 -0
- package/dist/services/definitions/listmonk.d.mts +7 -0
- package/dist/services/definitions/listmonk.d.mts.map +1 -0
- package/dist/services/definitions/listmonk.mjs +117 -0
- package/dist/services/definitions/listmonk.mjs.map +1 -0
- package/dist/services/definitions/litellm.cjs +2 -3
- package/dist/services/definitions/litellm.cjs.map +1 -1
- package/dist/services/definitions/litellm.mjs +1 -1
- package/dist/services/definitions/livekit.cjs +2 -3
- package/dist/services/definitions/livekit.cjs.map +1 -1
- package/dist/services/definitions/livekit.mjs +1 -1
- package/dist/services/definitions/loki.cjs +2 -3
- package/dist/services/definitions/loki.cjs.map +1 -1
- package/dist/services/definitions/loki.mjs +1 -1
- package/dist/services/definitions/mariadb.cjs +81 -0
- package/dist/services/definitions/mariadb.cjs.map +1 -0
- package/dist/services/definitions/mariadb.d.cts +7 -0
- package/dist/services/definitions/mariadb.d.cts.map +1 -0
- package/dist/services/definitions/mariadb.d.mts +7 -0
- package/dist/services/definitions/mariadb.d.mts.map +1 -0
- package/dist/services/definitions/mariadb.mjs +80 -0
- package/dist/services/definitions/mariadb.mjs.map +1 -0
- package/dist/services/definitions/matomo.cjs +2 -3
- package/dist/services/definitions/matomo.cjs.map +1 -1
- package/dist/services/definitions/matomo.mjs +1 -1
- package/dist/services/definitions/matrix-synapse.cjs +2 -3
- package/dist/services/definitions/matrix-synapse.cjs.map +1 -1
- package/dist/services/definitions/matrix-synapse.mjs +1 -1
- package/dist/services/definitions/mattermost.cjs +2 -3
- package/dist/services/definitions/mattermost.cjs.map +1 -1
- package/dist/services/definitions/mattermost.mjs +1 -1
- package/dist/services/definitions/mautic.cjs +83 -0
- package/dist/services/definitions/mautic.cjs.map +1 -0
- package/dist/services/definitions/mautic.d.cts +7 -0
- package/dist/services/definitions/mautic.d.cts.map +1 -0
- package/dist/services/definitions/mautic.d.mts +7 -0
- package/dist/services/definitions/mautic.d.mts.map +1 -0
- package/dist/services/definitions/mautic.mjs +82 -0
- package/dist/services/definitions/mautic.mjs.map +1 -0
- package/dist/services/definitions/medusa.cjs +83 -0
- package/dist/services/definitions/medusa.cjs.map +1 -0
- package/dist/services/definitions/medusa.d.cts +7 -0
- package/dist/services/definitions/medusa.d.cts.map +1 -0
- package/dist/services/definitions/medusa.d.mts +7 -0
- package/dist/services/definitions/medusa.d.mts.map +1 -0
- package/dist/services/definitions/medusa.mjs +82 -0
- package/dist/services/definitions/medusa.mjs.map +1 -0
- package/dist/services/definitions/meilisearch.cjs +2 -3
- package/dist/services/definitions/meilisearch.cjs.map +1 -1
- package/dist/services/definitions/meilisearch.mjs +1 -1
- package/dist/services/definitions/milvus.cjs +2 -3
- package/dist/services/definitions/milvus.cjs.map +1 -1
- package/dist/services/definitions/milvus.mjs +1 -1
- package/dist/services/definitions/minio.cjs +2 -3
- package/dist/services/definitions/minio.cjs.map +1 -1
- package/dist/services/definitions/minio.mjs +1 -1
- package/dist/services/definitions/mission-control.cjs +2 -3
- package/dist/services/definitions/mission-control.cjs.map +1 -1
- package/dist/services/definitions/mission-control.mjs +1 -1
- package/dist/services/definitions/mixpost.cjs +2 -3
- package/dist/services/definitions/mixpost.cjs.map +1 -1
- package/dist/services/definitions/mixpost.mjs +1 -1
- package/dist/services/definitions/motion-canvas.cjs +2 -3
- package/dist/services/definitions/motion-canvas.cjs.map +1 -1
- package/dist/services/definitions/motion-canvas.mjs +1 -1
- package/dist/services/definitions/mysql.cjs +81 -0
- package/dist/services/definitions/mysql.cjs.map +1 -0
- package/dist/services/definitions/mysql.d.cts +7 -0
- package/dist/services/definitions/mysql.d.cts.map +1 -0
- package/dist/services/definitions/mysql.d.mts +7 -0
- package/dist/services/definitions/mysql.d.mts.map +1 -0
- package/dist/services/definitions/mysql.mjs +80 -0
- package/dist/services/definitions/mysql.mjs.map +1 -0
- package/dist/services/definitions/n8n.cjs +2 -3
- package/dist/services/definitions/n8n.cjs.map +1 -1
- package/dist/services/definitions/n8n.mjs +1 -1
- package/dist/services/definitions/neo4j.cjs +2 -3
- package/dist/services/definitions/neo4j.cjs.map +1 -1
- package/dist/services/definitions/neo4j.mjs +1 -1
- package/dist/services/definitions/nextcloud.cjs +2 -3
- package/dist/services/definitions/nextcloud.cjs.map +1 -1
- package/dist/services/definitions/nextcloud.mjs +1 -1
- package/dist/services/definitions/nocodb.cjs +2 -3
- package/dist/services/definitions/nocodb.cjs.map +1 -1
- package/dist/services/definitions/nocodb.mjs +1 -1
- package/dist/services/definitions/ntfy.cjs +2 -3
- package/dist/services/definitions/ntfy.cjs.map +1 -1
- package/dist/services/definitions/ntfy.mjs +1 -1
- package/dist/services/definitions/ollama.cjs +2 -3
- package/dist/services/definitions/ollama.cjs.map +1 -1
- package/dist/services/definitions/ollama.mjs +1 -1
- package/dist/services/definitions/open-webui.cjs +2 -3
- package/dist/services/definitions/open-webui.cjs.map +1 -1
- package/dist/services/definitions/open-webui.mjs +1 -1
- package/dist/services/definitions/opencode.cjs +2 -3
- package/dist/services/definitions/opencode.cjs.map +1 -1
- package/dist/services/definitions/opencode.mjs +1 -1
- package/dist/services/definitions/openhands.cjs +58 -0
- package/dist/services/definitions/openhands.cjs.map +1 -0
- package/dist/services/definitions/openhands.d.cts +7 -0
- package/dist/services/definitions/openhands.d.cts.map +1 -0
- package/dist/services/definitions/openhands.d.mts +7 -0
- package/dist/services/definitions/openhands.d.mts.map +1 -0
- package/dist/services/definitions/openhands.mjs +57 -0
- package/dist/services/definitions/openhands.mjs.map +1 -0
- package/dist/services/definitions/openpanel.cjs +2 -3
- package/dist/services/definitions/openpanel.cjs.map +1 -1
- package/dist/services/definitions/openpanel.mjs +1 -1
- package/dist/services/definitions/opensearch.cjs +94 -0
- package/dist/services/definitions/opensearch.cjs.map +1 -0
- package/dist/services/definitions/opensearch.d.cts +7 -0
- package/dist/services/definitions/opensearch.d.cts.map +1 -0
- package/dist/services/definitions/opensearch.d.mts +7 -0
- package/dist/services/definitions/opensearch.d.mts.map +1 -0
- package/dist/services/definitions/opensearch.mjs +93 -0
- package/dist/services/definitions/opensearch.mjs.map +1 -0
- package/dist/services/definitions/outline.cjs +2 -3
- package/dist/services/definitions/outline.cjs.map +1 -1
- package/dist/services/definitions/outline.mjs +1 -1
- package/dist/services/definitions/paperless-ngx.cjs +2 -3
- package/dist/services/definitions/paperless-ngx.cjs.map +1 -1
- package/dist/services/definitions/paperless-ngx.mjs +1 -1
- package/dist/services/definitions/pentagi.cjs +2 -3
- package/dist/services/definitions/pentagi.cjs.map +1 -1
- package/dist/services/definitions/pentagi.mjs +1 -1
- package/dist/services/definitions/pentestagent.cjs +2 -3
- package/dist/services/definitions/pentestagent.cjs.map +1 -1
- package/dist/services/definitions/pentestagent.mjs +1 -1
- package/dist/services/definitions/playwright-server.cjs +2 -3
- package/dist/services/definitions/playwright-server.cjs.map +1 -1
- package/dist/services/definitions/playwright-server.mjs +1 -1
- package/dist/services/definitions/pocketbase.cjs +61 -0
- package/dist/services/definitions/pocketbase.cjs.map +1 -0
- package/dist/services/definitions/pocketbase.d.cts +7 -0
- package/dist/services/definitions/pocketbase.d.cts.map +1 -0
- package/dist/services/definitions/pocketbase.d.mts +7 -0
- package/dist/services/definitions/pocketbase.d.mts.map +1 -0
- package/dist/services/definitions/pocketbase.mjs +60 -0
- package/dist/services/definitions/pocketbase.mjs.map +1 -0
- package/dist/services/definitions/portainer.cjs +2 -3
- package/dist/services/definitions/portainer.cjs.map +1 -1
- package/dist/services/definitions/portainer.mjs +1 -1
- package/dist/services/definitions/postgresql.cjs +2 -3
- package/dist/services/definitions/postgresql.cjs.map +1 -1
- package/dist/services/definitions/postgresql.mjs +1 -1
- package/dist/services/definitions/postiz.cjs +2 -3
- package/dist/services/definitions/postiz.cjs.map +1 -1
- package/dist/services/definitions/postiz.mjs +1 -1
- package/dist/services/definitions/prometheus.cjs +2 -3
- package/dist/services/definitions/prometheus.cjs.map +1 -1
- package/dist/services/definitions/prometheus.mjs +1 -1
- package/dist/services/definitions/qdrant.cjs +2 -3
- package/dist/services/definitions/qdrant.cjs.map +1 -1
- package/dist/services/definitions/qdrant.mjs +1 -1
- package/dist/services/definitions/rabbitmq.cjs +80 -0
- package/dist/services/definitions/rabbitmq.cjs.map +1 -0
- package/dist/services/definitions/rabbitmq.d.cts +7 -0
- package/dist/services/definitions/rabbitmq.d.cts.map +1 -0
- package/dist/services/definitions/rabbitmq.d.mts +7 -0
- package/dist/services/definitions/rabbitmq.d.mts.map +1 -0
- package/dist/services/definitions/rabbitmq.mjs +79 -0
- package/dist/services/definitions/rabbitmq.mjs.map +1 -0
- package/dist/services/definitions/ragflow.cjs +192 -0
- package/dist/services/definitions/ragflow.cjs.map +1 -0
- package/dist/services/definitions/ragflow.d.cts +7 -0
- package/dist/services/definitions/ragflow.d.cts.map +1 -0
- package/dist/services/definitions/ragflow.d.mts +7 -0
- package/dist/services/definitions/ragflow.d.mts.map +1 -0
- package/dist/services/definitions/ragflow.mjs +191 -0
- package/dist/services/definitions/ragflow.mjs.map +1 -0
- package/dist/services/definitions/redis.cjs +2 -3
- package/dist/services/definitions/redis.cjs.map +1 -1
- package/dist/services/definitions/redis.mjs +1 -1
- package/dist/services/definitions/remotion.cjs +2 -3
- package/dist/services/definitions/remotion.cjs.map +1 -1
- package/dist/services/definitions/remotion.mjs +1 -1
- package/dist/services/definitions/restic.cjs +58 -0
- package/dist/services/definitions/restic.cjs.map +1 -0
- package/dist/services/definitions/restic.d.cts +7 -0
- package/dist/services/definitions/restic.d.cts.map +1 -0
- package/dist/services/definitions/restic.d.mts +7 -0
- package/dist/services/definitions/restic.d.mts.map +1 -0
- package/dist/services/definitions/restic.mjs +57 -0
- package/dist/services/definitions/restic.mjs.map +1 -0
- package/dist/services/definitions/rocketchat.cjs +2 -3
- package/dist/services/definitions/rocketchat.cjs.map +1 -1
- package/dist/services/definitions/rocketchat.mjs +1 -1
- package/dist/services/definitions/saleor.cjs +76 -0
- package/dist/services/definitions/saleor.cjs.map +1 -0
- package/dist/services/definitions/saleor.d.cts +7 -0
- package/dist/services/definitions/saleor.d.cts.map +1 -0
- package/dist/services/definitions/saleor.d.mts +7 -0
- package/dist/services/definitions/saleor.d.mts.map +1 -0
- package/dist/services/definitions/saleor.mjs +75 -0
- package/dist/services/definitions/saleor.mjs.map +1 -0
- package/dist/services/definitions/scrapling.cjs +2 -3
- package/dist/services/definitions/scrapling.cjs.map +1 -1
- package/dist/services/definitions/scrapling.mjs +1 -1
- package/dist/services/definitions/searxng.cjs +2 -3
- package/dist/services/definitions/searxng.cjs.map +1 -1
- package/dist/services/definitions/searxng.mjs +1 -1
- package/dist/services/definitions/signoz.cjs +2 -3
- package/dist/services/definitions/signoz.cjs.map +1 -1
- package/dist/services/definitions/signoz.mjs +1 -1
- package/dist/services/definitions/solidityguard.cjs +2 -3
- package/dist/services/definitions/solidityguard.cjs.map +1 -1
- package/dist/services/definitions/solidityguard.mjs +1 -1
- package/dist/services/definitions/stable-diffusion.cjs +2 -3
- package/dist/services/definitions/stable-diffusion.cjs.map +1 -1
- package/dist/services/definitions/stable-diffusion.mjs +1 -1
- package/dist/services/definitions/steel-browser.cjs +2 -3
- package/dist/services/definitions/steel-browser.cjs.map +1 -1
- package/dist/services/definitions/steel-browser.mjs +1 -1
- package/dist/services/definitions/stirling-pdf.cjs +74 -0
- package/dist/services/definitions/stirling-pdf.cjs.map +1 -0
- package/dist/services/definitions/stirling-pdf.d.cts +7 -0
- package/dist/services/definitions/stirling-pdf.d.cts.map +1 -0
- package/dist/services/definitions/stirling-pdf.d.mts +7 -0
- package/dist/services/definitions/stirling-pdf.d.mts.map +1 -0
- package/dist/services/definitions/stirling-pdf.mjs +73 -0
- package/dist/services/definitions/stirling-pdf.mjs.map +1 -0
- package/dist/services/definitions/strapi.cjs +124 -0
- package/dist/services/definitions/strapi.cjs.map +1 -0
- package/dist/services/definitions/strapi.d.cts +7 -0
- package/dist/services/definitions/strapi.d.cts.map +1 -0
- package/dist/services/definitions/strapi.d.mts +7 -0
- package/dist/services/definitions/strapi.d.mts.map +1 -0
- package/dist/services/definitions/strapi.mjs +123 -0
- package/dist/services/definitions/strapi.mjs.map +1 -0
- package/dist/services/definitions/stream-gateway.cjs +2 -3
- package/dist/services/definitions/stream-gateway.cjs.map +1 -1
- package/dist/services/definitions/stream-gateway.mjs +1 -1
- package/dist/services/definitions/supabase.cjs +2 -3
- package/dist/services/definitions/supabase.cjs.map +1 -1
- package/dist/services/definitions/supabase.mjs +1 -1
- package/dist/services/definitions/tailscale.cjs +2 -3
- package/dist/services/definitions/tailscale.cjs.map +1 -1
- package/dist/services/definitions/tailscale.mjs +1 -1
- package/dist/services/definitions/temporal.cjs +2 -3
- package/dist/services/definitions/temporal.cjs.map +1 -1
- package/dist/services/definitions/temporal.mjs +1 -1
- package/dist/services/definitions/traefik.cjs +2 -3
- package/dist/services/definitions/traefik.cjs.map +1 -1
- package/dist/services/definitions/traefik.mjs +1 -1
- package/dist/services/definitions/twenty.cjs +83 -0
- package/dist/services/definitions/twenty.cjs.map +1 -0
- package/dist/services/definitions/twenty.d.cts +7 -0
- package/dist/services/definitions/twenty.d.cts.map +1 -0
- package/dist/services/definitions/twenty.d.mts +7 -0
- package/dist/services/definitions/twenty.d.mts.map +1 -0
- package/dist/services/definitions/twenty.mjs +82 -0
- package/dist/services/definitions/twenty.mjs.map +1 -0
- package/dist/services/definitions/umami.cjs +2 -3
- package/dist/services/definitions/umami.cjs.map +1 -1
- package/dist/services/definitions/umami.mjs +1 -1
- package/dist/services/definitions/uptime-kuma.cjs +2 -3
- package/dist/services/definitions/uptime-kuma.cjs.map +1 -1
- package/dist/services/definitions/uptime-kuma.mjs +1 -1
- package/dist/services/definitions/usesend.cjs +2 -3
- package/dist/services/definitions/usesend.cjs.map +1 -1
- package/dist/services/definitions/usesend.mjs +1 -1
- package/dist/services/definitions/valkey.cjs +2 -3
- package/dist/services/definitions/valkey.cjs.map +1 -1
- package/dist/services/definitions/valkey.mjs +1 -1
- package/dist/services/definitions/vault.cjs +71 -0
- package/dist/services/definitions/vault.cjs.map +1 -0
- package/dist/services/definitions/vault.d.cts +7 -0
- package/dist/services/definitions/vault.d.cts.map +1 -0
- package/dist/services/definitions/vault.d.mts +7 -0
- package/dist/services/definitions/vault.d.mts.map +1 -0
- package/dist/services/definitions/vault.mjs +70 -0
- package/dist/services/definitions/vault.mjs.map +1 -0
- package/dist/services/definitions/vaultwarden.cjs +2 -3
- package/dist/services/definitions/vaultwarden.cjs.map +1 -1
- package/dist/services/definitions/vaultwarden.mjs +1 -1
- package/dist/services/definitions/watchtower.cjs +2 -3
- package/dist/services/definitions/watchtower.cjs.map +1 -1
- package/dist/services/definitions/watchtower.mjs +1 -1
- package/dist/services/definitions/weaviate.cjs +2 -3
- package/dist/services/definitions/weaviate.cjs.map +1 -1
- package/dist/services/definitions/weaviate.mjs +1 -1
- package/dist/services/definitions/whisper.cjs +2 -3
- package/dist/services/definitions/whisper.cjs.map +1 -1
- package/dist/services/definitions/whisper.mjs +1 -1
- package/dist/services/definitions/xyops.cjs +2 -3
- package/dist/services/definitions/xyops.cjs.map +1 -1
- package/dist/services/definitions/xyops.mjs +1 -1
- package/dist/services/registry.cjs +3 -4
- package/dist/services/registry.cjs.map +1 -1
- package/dist/services/registry.d.mts.map +1 -1
- package/dist/services/registry.mjs +1 -2
- package/dist/services/registry.mjs.map +1 -1
- package/dist/services/registry.test.cjs +3 -4
- package/dist/services/registry.test.cjs.map +1 -1
- package/dist/services/registry.test.mjs +3 -4
- package/dist/services/registry.test.mjs.map +1 -1
- package/dist/{manifest-4uLbISXV.cjs → skill-manifest--IgY9REK.cjs} +40 -10
- package/dist/skill-manifest--IgY9REK.cjs.map +1 -0
- package/dist/{manifest-B8UDsVlR.mjs → skill-manifest-BVUXU0__.mjs} +24 -5
- package/dist/skill-manifest-BVUXU0__.mjs.map +1 -0
- package/dist/skills/registry.cjs +262 -3
- package/dist/skills/registry.cjs.map +1 -1
- package/dist/skills/registry.d.cts.map +1 -1
- package/dist/skills/registry.d.mts.map +1 -1
- package/dist/skills/registry.mjs +261 -1
- package/dist/skills/registry.mjs.map +1 -1
- package/dist/skills/skill-manifest.cjs +5 -23
- package/dist/skills/skill-manifest.mjs +1 -19
- package/dist/skills-BlzpHmpH.cjs +620 -0
- package/dist/skills-BlzpHmpH.cjs.map +1 -0
- package/dist/types-CR83OJiq.d.cts +243 -0
- package/dist/types-CR83OJiq.d.cts.map +1 -0
- package/dist/types-zYjGTuyn.d.mts +243 -0
- package/dist/types-zYjGTuyn.d.mts.map +1 -0
- package/dist/types.cjs +79 -3
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.mjs +78 -1
- package/dist/types.mjs.map +1 -1
- package/dist/validator.cjs +3 -4
- package/dist/validator.cjs.map +1 -1
- package/dist/validator.mjs +1 -2
- package/dist/validator.mjs.map +1 -1
- package/dist/validator.test.cjs +5 -6
- package/dist/validator.test.cjs.map +1 -1
- package/dist/validator.test.mjs +3 -4
- package/dist/validator.test.mjs.map +1 -1
- package/dist/version-manager.cjs +3 -4
- package/dist/version-manager.cjs.map +1 -1
- package/dist/version-manager.d.mts.map +1 -1
- package/dist/version-manager.mjs +1 -2
- package/dist/version-manager.mjs.map +1 -1
- package/dist/version-manager.test.cjs +5 -6
- package/dist/version-manager.test.cjs.map +1 -1
- package/dist/version-manager.test.mjs +3 -4
- package/dist/version-manager.test.mjs.map +1 -1
- package/dist/{vi.2VT5v0um-BmRMvymT.cjs → vi.2VT5v0um-CRqXre87.cjs} +82 -202
- package/dist/{vi.2VT5v0um-CFyDIn0m.mjs.map → vi.2VT5v0um-CRqXre87.cjs.map} +1 -1
- package/dist/{vi.2VT5v0um-CFyDIn0m.mjs → vi.2VT5v0um-DvC3SVNc.mjs} +67 -186
- package/dist/{vi.2VT5v0um-BmRMvymT.cjs.map → vi.2VT5v0um-DvC3SVNc.mjs.map} +1 -1
- package/package.json +4 -3
- package/src/deployers/coolify.ts +198 -103
- package/src/deployers/dokploy.ts +209 -55
- package/src/deployers/index.ts +1 -0
- package/src/deployers/strip-host-ports.test.ts +100 -0
- package/src/deployers/strip-host-ports.ts +187 -0
- package/src/deployers/types.ts +185 -1
- package/src/generators/postgres-init.ts +6 -0
- package/src/index.ts +19 -4
- package/src/presets/presets.test.ts +4 -0
- package/src/presets/registry.ts +88 -0
- package/src/schema.ts +11 -0
- package/src/services/definitions/airbyte.ts +75 -0
- package/src/services/definitions/airflow.ts +109 -0
- package/src/services/definitions/appwrite.ts +181 -0
- package/src/services/definitions/authelia.ts +145 -0
- package/src/services/definitions/axolotl.ts +65 -0
- package/src/services/definitions/chatwoot-worker.ts +93 -0
- package/src/services/definitions/chatwoot.ts +106 -0
- package/src/services/definitions/dagster.ts +82 -0
- package/src/services/definitions/directus.ts +115 -0
- package/src/services/definitions/duplicati.ts +77 -0
- package/src/services/definitions/excalidraw.ts +46 -0
- package/src/services/definitions/firecrawl-playwright.ts +62 -0
- package/src/services/definitions/firecrawl.ts +146 -0
- package/src/services/definitions/flagsmith.ts +76 -0
- package/src/services/definitions/fonoster.ts +67 -0
- package/src/services/definitions/formbricks.ts +75 -0
- package/src/services/definitions/hedgedoc.ts +81 -0
- package/src/services/definitions/heyform.ts +67 -0
- package/src/services/definitions/hoppscotch.ts +74 -0
- package/src/services/definitions/index.ts +124 -0
- package/src/services/definitions/infisical.ts +97 -0
- package/src/services/definitions/keycloak.ts +119 -0
- package/src/services/definitions/kong.ts +116 -0
- package/src/services/definitions/lago.ts +95 -0
- package/src/services/definitions/langflow.ts +82 -0
- package/src/services/definitions/langfuse.ts +76 -0
- package/src/services/definitions/listmonk.ts +118 -0
- package/src/services/definitions/mariadb.ts +82 -0
- package/src/services/definitions/mautic.ts +82 -0
- package/src/services/definitions/medusa.ts +82 -0
- package/src/services/definitions/mysql.ts +82 -0
- package/src/services/definitions/openhands.ts +60 -0
- package/src/services/definitions/opensearch.ts +95 -0
- package/src/services/definitions/pocketbase.ts +62 -0
- package/src/services/definitions/rabbitmq.ts +81 -0
- package/src/services/definitions/ragflow.ts +175 -0
- package/src/services/definitions/restic.ts +60 -0
- package/src/services/definitions/saleor.ts +75 -0
- package/src/services/definitions/stirling-pdf.ts +73 -0
- package/src/services/definitions/strapi.ts +124 -0
- package/src/services/definitions/twenty.ts +82 -0
- package/src/services/definitions/vault.ts +74 -0
- package/src/skills/manifest.json +8 -0
- package/src/skills/registry.ts +119 -0
- package/src/types.ts +91 -2
- package/tsconfig.tsbuildinfo +1 -0
- package/dist/chunk-C0xms8kb.cjs +0 -34
- package/dist/deployers/coolify.d.cts.map +0 -1
- package/dist/deployers/coolify.d.mts.map +0 -1
- package/dist/deployers/dokploy.d.cts.map +0 -1
- package/dist/deployers/dokploy.d.mts.map +0 -1
- package/dist/deployers/types.d.cts.map +0 -1
- package/dist/deployers/types.d.mts.map +0 -1
- package/dist/generators/skills.cjs.map +0 -1
- package/dist/manifest-4uLbISXV.cjs.map +0 -1
- package/dist/manifest-B8UDsVlR.mjs.map +0 -1
- package/dist/schema.d.cts.map +0 -1
- package/dist/schema.d.mts.map +0 -1
- package/dist/skills/skill-manifest.cjs.map +0 -1
- package/dist/skills/skill-manifest.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-json.cjs","names":[],"sources":["../../src/generators/openclaw-json.ts"],"sourcesContent":["import type { AiProvider, DeploymentType, ResolverOutput } from \"../types.js\";\n\nexport interface OpenClawConfigOptions {\n\tdeploymentType: DeploymentType;\n\tgatewayPort: number;\n\topenclawVersion: string;\n}\n\nconst PROVIDER_CONFIGS: Record<AiProvider, any> = {\n\topenai: {\n\t\tbaseUrl: \"https://api.openai.com/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${OPENAI_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"gpt-5\",\n\t\t\t\tname: \"GPT-5\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 2.5 },\n\t\t\t\tcontextWindow: 128000,\n\t\t\t\tmaxTokens: 16384,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"o4-mini\",\n\t\t\t\tname: \"o4-mini\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 1.1 },\n\t\t\t\tcontextWindow: 200000,\n\t\t\t\tmaxTokens: 100000,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"gpt-5-mini\",\n\t\t\t\tname: \"GPT-5 Mini\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0.15 },\n\t\t\t\tcontextWindow: 128000,\n\t\t\t\tmaxTokens: 16384,\n\t\t\t},\n\t\t],\n\t},\n\tanthropic: {\n\t\tbaseUrl: \"https://api.anthropic.com/v1/messages\",\n\t\tapi: \"anthropic-messages\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${ANTHROPIC_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"claude-opus-4-6\",\n\t\t\t\tname: \"Claude 4.6 Opus\",\n\t\t\t\tapi: \"anthropic-messages\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 15.0, output: 75.0, cacheRead: 1.5, cacheWrite: 18.75 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 128000,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"claude-sonnet-4-6\",\n\t\t\t\tname: \"Claude 4.6 Sonnet\",\n\t\t\t\tapi: \"anthropic-messages\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 3.0, output: 15.0, cacheRead: 0.3, cacheWrite: 3.75 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 128000,\n\t\t\t},\n\t\t],\n\t},\n\tgoogle: {\n\t\tbaseUrl: \"https://generativelanguage.googleapis.com/v1beta/openai\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${GOOGLE_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"gemini-3.1-pro-preview\",\n\t\t\t\tname: \"Gemini 3.1 Pro\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 2.0, output: 8.0, cacheRead: 0.5, cacheWrite: 2.0 },\n\t\t\t\tcontextWindow: 2000000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"gemini-3-flash-preview\",\n\t\t\t\tname: \"Gemini 3 Flash\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.15, output: 0.6, cacheRead: 0.0375, cacheWrite: 0.15 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\txai: {\n\t\tbaseUrl: \"https://api.x.ai/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${XAI_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"grok-4-fast\",\n\t\t\t\tname: \"Grok 4 Fast\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 2.0, output: 10.0, cacheRead: 1.0, cacheWrite: 2.0 },\n\t\t\t\tcontextWindow: 256000,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t],\n\t},\n\tdeepseek: {\n\t\tbaseUrl: \"https://api.deepseek.com/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${DEEPSEEK_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"deepseek-chat\",\n\t\t\t\tname: \"DeepSeek V3\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0.14, output: 0.28, cacheRead: 0.014, cacheWrite: 0.14 },\n\t\t\t\tcontextWindow: 65536,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"deepseek-reasoner\",\n\t\t\t\tname: \"DeepSeek R1\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0.55, output: 2.19, cacheRead: 0.14, cacheWrite: 0.55 },\n\t\t\t\tcontextWindow: 65536,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\tgroq: {\n\t\tbaseUrl: \"https://api.groq.com/openai/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${GROQ_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"llama-4-maverick\",\n\t\t\t\tname: \"LLaMA 4 Maverick (Groq)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.59, output: 0.79 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t],\n\t},\n\topenrouter: {\n\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${OPENROUTER_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"anthropic/claude-opus-4-6\",\n\t\t\t\tname: \"Claude 4.6 Opus (OpenRouter)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 15.0, output: 75.0 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 128000,\n\t\t\t},\n\t\t],\n\t},\n\tmistral: {\n\t\tbaseUrl: \"https://api.mistral.ai/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${MISTRAL_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"mistral-large-latest\",\n\t\t\t\tname: \"Mistral Large\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 2.0, output: 6.0 },\n\t\t\t\tcontextWindow: 131000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\ttogether: {\n\t\tbaseUrl: \"https://api.together.xyz/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${TOGETHER_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8\", // \"meta-llama/Llama-4-Maverick-Instruct-Turbo\",\n\t\t\t\tname: \"LLaMA 4 Maverick (Together)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.88, output: 0.88 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t],\n\t},\n\tollama: {\n\t\tbaseUrl: null, // dynamic: resolved at generation time based on deployment type\n\t\tapi: \"openai-completions\",\n\t\tauth: \"none\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"llama3:latest\",\n\t\t\t\tname: \"LLaMA 3 (Local)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"deepseek-r1:latest\",\n\t\t\t\tname: \"DeepSeek R1 (Local)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t],\n\t},\n\t\"ollama-cloud\": {\n\t\tbaseUrl: \"https://ollama.com/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${OLLAMA_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"qwen3.5:397b-cloud\",\n\t\t\t\tname: \"Qwen 3.5 397B (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"glm-5:cloud\",\n\t\t\t\tname: \"GLM-5 (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"minimax-m2.5:cloud\",\n\t\t\t\tname: \"MiniMax M2.5 (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"kimi-k2.5:cloud\",\n\t\t\t\tname: \"Kimi K2.5 (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"gemini-3-flash-preview:cloud\",\n\t\t\t\tname: \"Gemini 3 Flash (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\tlmstudio: {\n\t\tbaseUrl: null, // dynamic: resolved at generation time based on deployment type\n\t\tapi: \"openai-completions\",\n\t\tauth: \"none\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"local-model\",\n\t\t\t\tname: \"LM Studio Model\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t],\n\t},\n\tvllm: {\n\t\tbaseUrl: null, // dynamic: resolved at generation time based on deployment type\n\t\tapi: \"openai-completions\",\n\t\tauth: \"none\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"local-model\",\n\t\t\t\tname: \"vLLM Model\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t],\n\t},\n};\n\n/** Default ports for local inference providers (ollama, lmstudio, vllm). */\nconst LOCAL_PROVIDER_PORTS: Record<string, number> = {\n\tollama: 11434,\n\tlmstudio: 1234,\n\tvllm: 8000,\n};\n\n/**\n * Generates a default `openclaw/config/openclaw.json` tailored\n * to the services installed in the stack.\n */\nexport function generateOpenClawConfig(\n\tresolved: ResolverOutput,\n\toptions: OpenClawConfigOptions,\n): string {\n\tconst isDocker = options.deploymentType === \"docker\";\n\t// Docker containers reach host services via host.docker.internal; bare-metal uses localhost\n\tconst localInferenceHost = isDocker ? \"host.docker.internal\" : \"localhost\";\n\t// Docker: bind to all interfaces (0.0.0.0) so port mapping works from host\n\t// Bare-metal/local: bind to loopback (127.0.0.1) for security, Tailscale can expose if needed\n\tconst gatewayBind = isDocker ? \"lan\" : \"loopback\";\n\tconst defaultSkills: Record<string, { enabled: boolean }> = {};\n\n\t// Auto-enable any OpenClaw skills attached to installed companion services\n\tfor (const { definition } of resolved.services) {\n\t\tfor (const skill of definition.skills) {\n\t\t\tif (skill.autoInstall) {\n\t\t\t\tdefaultSkills[skill.skillId] = { enabled: true };\n\t\t\t}\n\t\t}\n\t}\n\n\tconst providers: Record<string, any> = {};\n\tconst agentsModels: Record<string, { alias: string }> = {};\n\tlet primaryModel = \"\";\n\n\t// Always default to empty or the first choice, fallback to openai if nothing was passed\n\tconst selectedProviders =\n\t\tresolved.aiProviders && resolved.aiProviders.length > 0\n\t\t\t? resolved.aiProviders\n\t\t\t: ([\"openai\"] as AiProvider[]);\n\n\tfor (const provider of selectedProviders) {\n\t\tconst meta = PROVIDER_CONFIGS[provider];\n\t\tif (!meta) continue;\n\n\t\t// Local inference providers have null baseUrl — resolve dynamically based on deployment type\n\t\tconst baseUrl =\n\t\t\tmeta.baseUrl ?? `http://${localInferenceHost}:${LOCAL_PROVIDER_PORTS[provider] ?? 8000}/v1`;\n\n\t\tproviders[provider] = {\n\t\t\tbaseUrl,\n\t\t\tapi: meta.api,\n\t\t\tauth: meta.auth,\n\t\t\t...(meta.apiKey ? { apiKey: meta.apiKey } : {}),\n\t\t\tmodels: meta.models,\n\t\t};\n\n\t\tfor (const m of meta.models) {\n\t\t\tconst fullId = `${provider}/${m.id}`;\n\t\t\tagentsModels[fullId] = { alias: m.name };\n\t\t\tif (!primaryModel) primaryModel = fullId; // Use the very first model mapped as the global system default\n\t\t}\n\t}\n\n\tconst authProfiles: Record<string, any> = {\n\t\t\"local:default\": {\n\t\t\tprovider: \"local\",\n\t\t\tmode: \"token\",\n\t\t},\n\t};\n\n\t// Add provider auth profiles too\n\tfor (const provider of Object.keys(providers)) {\n\t\tauthProfiles[`${provider}:default`] = {\n\t\t\tprovider: provider,\n\t\t\tmode: \"api_key\",\n\t\t};\n\t}\n\n\tconst config = {\n\t\tmeta: {\n\t\t\tlastTouchedVersion: options.openclawVersion,\n\t\t\tlastTouchedAt: new Date().toISOString(),\n\t\t},\n\t\tenv: {\n\t\t\tshellEnv: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\tvars: {},\n\t\t},\n\t\twizard: {\n\t\t\tlastRunAt: new Date().toISOString(),\n\t\t\tlastRunVersion: options.openclawVersion,\n\t\t\tlastRunCommand: \"auto-generated-by-better-openclaw\",\n\t\t\tlastRunMode: \"local\",\n\t\t},\n\t\tlogging: {\n\t\t\tredactSensitive: \"tools\",\n\t\t},\n\t\tupdate: {\n\t\t\tcheckOnStart: true,\n\t\t},\n\t\tauth: {\n\t\t\tprofiles: authProfiles,\n\t\t},\n\t\tmodels: {\n\t\t\tmode: \"merge\",\n\t\t\tproviders,\n\t\t},\n\t\tagents: {\n\t\t\tdefaults: {\n\t\t\t\tmodel: {\n\t\t\t\t\tprimary: primaryModel,\n\t\t\t\t},\n\t\t\t\tmodels: agentsModels,\n\t\t\t\tworkspace: isDocker ? \"/home/node/.openclaw/workspace\" : \"./workspace\",\n\t\t\t\tcompaction: { mode: \"safeguard\" },\n\t\t\t\tmaxConcurrent: 4,\n\t\t\t\tsubagents: { maxConcurrent: 8 },\n\t\t\t},\n\t\t},\n\t\tmessages: {\n\t\t\tackReactionScope: \"group-mentions\",\n\t\t},\n\t\tcommands: {\n\t\t\tnative: \"auto\",\n\t\t\tnativeSkills: \"auto\",\n\t\t},\n\t\tcron: {\n\t\t\tenabled: true,\n\t\t},\n\t\thooks: {\n\t\t\tinternal: {\n\t\t\t\tenabled: true,\n\t\t\t\tentries: {\n\t\t\t\t\t\"boot-md\": { enabled: true },\n\t\t\t\t\t\"bootstrap-extra-files\": { enabled: true },\n\t\t\t\t\t\"command-logger\": { enabled: true },\n\t\t\t\t\t\"session-memory\": { enabled: true },\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tweb: {\n\t\t\tenabled: true,\n\t\t},\n\t\tdiscovery: {\n\t\t\twideArea: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t},\n\t\tcanvasHost: {\n\t\t\tenabled: true,\n\t\t\tliveReload: true,\n\t\t},\n\t\tchannels: {},\n\t\tgateway: {\n\t\t\tport: options.gatewayPort,\n\t\t\tmode: \"local\",\n\t\t\tbind: gatewayBind,\n\t\t\tcontrolUi: {\n\t\t\t\tenabled: true,\n\t\t\t\t// Docker NAT makes browser connections appear external — skip device pairing, use token-only auth\n\t\t\t\t...(isDocker ? { allowInsecureAuth: true } : {}),\n\t\t\t\t// Non-loopback binds need explicit origin allowlist for control UI CORS\n\t\t\t\t// Reference: docker-setup.sh ensure_control_ui_allowed_origins()\n\t\t\t\t...(gatewayBind !== \"loopback\"\n\t\t\t\t\t? { allowedOrigins: [`http://127.0.0.1:${options.gatewayPort}`] }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\tauth: {\n\t\t\t\tmode: \"token\",\n\t\t\t\ttoken: \"${OPENCLAW_GATEWAY_TOKEN}\",\n\t\t\t\t...(isDocker ? {} : { allowTailscale: true }),\n\t\t\t},\n\t\t\t// Tailscale serve only works on bare-metal/local (not inside Docker containers)\n\t\t\t...(isDocker ? {} : { tailscale: { mode: \"serve\", resetOnExit: true } }),\n\t\t\tnodes: {\n\t\t\t\tdenyCommands: [\"camera.snap\", \"camera.clip\", \"screen.record\"],\n\t\t\t},\n\t\t},\n\t\tskills: {\n\t\t\tinstall: { nodeManager: \"pnpm\" },\n\t\t\tload: {\n\t\t\t\twatch: true,\n\t\t\t},\n\t\t\t...(Object.keys(defaultSkills).length > 0 ? { entries: defaultSkills } : {}),\n\t\t},\n\t\tplugins: {\n\t\t\tenabled: true,\n\t\t\tentries: {\n\t\t\t\ttelegram: { enabled: true },\n\t\t\t\twhatsapp: { enabled: true },\n\t\t\t\tdiscord: { enabled: true },\n\t\t\t\t\"memory-core\": { enabled: true },\n\t\t\t},\n\t\t},\n\t};\n\n\treturn JSON.stringify(config, null, 2);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openclaw-json.cjs","names":[],"sources":["../../src/generators/openclaw-json.ts"],"sourcesContent":["import type { AiProvider, DeploymentType, ResolverOutput } from \"../types.js\";\n\nexport interface OpenClawConfigOptions {\n\tdeploymentType: DeploymentType;\n\tgatewayPort: number;\n\topenclawVersion: string;\n}\n\nconst PROVIDER_CONFIGS: Record<AiProvider, any> = {\n\topenai: {\n\t\tbaseUrl: \"https://api.openai.com/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${OPENAI_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"gpt-5\",\n\t\t\t\tname: \"GPT-5\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 2.5 },\n\t\t\t\tcontextWindow: 128000,\n\t\t\t\tmaxTokens: 16384,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"o4-mini\",\n\t\t\t\tname: \"o4-mini\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 1.1 },\n\t\t\t\tcontextWindow: 200000,\n\t\t\t\tmaxTokens: 100000,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"gpt-5-mini\",\n\t\t\t\tname: \"GPT-5 Mini\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0.15 },\n\t\t\t\tcontextWindow: 128000,\n\t\t\t\tmaxTokens: 16384,\n\t\t\t},\n\t\t],\n\t},\n\tanthropic: {\n\t\tbaseUrl: \"https://api.anthropic.com/v1/messages\",\n\t\tapi: \"anthropic-messages\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${ANTHROPIC_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"claude-opus-4-6\",\n\t\t\t\tname: \"Claude 4.6 Opus\",\n\t\t\t\tapi: \"anthropic-messages\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 15.0, output: 75.0, cacheRead: 1.5, cacheWrite: 18.75 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 128000,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"claude-sonnet-4-6\",\n\t\t\t\tname: \"Claude 4.6 Sonnet\",\n\t\t\t\tapi: \"anthropic-messages\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 3.0, output: 15.0, cacheRead: 0.3, cacheWrite: 3.75 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 128000,\n\t\t\t},\n\t\t],\n\t},\n\tgoogle: {\n\t\tbaseUrl: \"https://generativelanguage.googleapis.com/v1beta/openai\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${GOOGLE_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"gemini-3.1-pro-preview\",\n\t\t\t\tname: \"Gemini 3.1 Pro\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 2.0, output: 8.0, cacheRead: 0.5, cacheWrite: 2.0 },\n\t\t\t\tcontextWindow: 2000000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"gemini-3-flash-preview\",\n\t\t\t\tname: \"Gemini 3 Flash\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.15, output: 0.6, cacheRead: 0.0375, cacheWrite: 0.15 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\txai: {\n\t\tbaseUrl: \"https://api.x.ai/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${XAI_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"grok-4-fast\",\n\t\t\t\tname: \"Grok 4 Fast\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 2.0, output: 10.0, cacheRead: 1.0, cacheWrite: 2.0 },\n\t\t\t\tcontextWindow: 256000,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t],\n\t},\n\tdeepseek: {\n\t\tbaseUrl: \"https://api.deepseek.com/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${DEEPSEEK_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"deepseek-chat\",\n\t\t\t\tname: \"DeepSeek V3\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0.14, output: 0.28, cacheRead: 0.014, cacheWrite: 0.14 },\n\t\t\t\tcontextWindow: 65536,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"deepseek-reasoner\",\n\t\t\t\tname: \"DeepSeek R1\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0.55, output: 2.19, cacheRead: 0.14, cacheWrite: 0.55 },\n\t\t\t\tcontextWindow: 65536,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\tgroq: {\n\t\tbaseUrl: \"https://api.groq.com/openai/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${GROQ_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"llama-4-maverick\",\n\t\t\t\tname: \"LLaMA 4 Maverick (Groq)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.59, output: 0.79 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t],\n\t},\n\topenrouter: {\n\t\tbaseUrl: \"https://openrouter.ai/api/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${OPENROUTER_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"anthropic/claude-opus-4-6\",\n\t\t\t\tname: \"Claude 4.6 Opus (OpenRouter)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 15.0, output: 75.0 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 128000,\n\t\t\t},\n\t\t],\n\t},\n\tmistral: {\n\t\tbaseUrl: \"https://api.mistral.ai/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${MISTRAL_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"mistral-large-latest\",\n\t\t\t\tname: \"Mistral Large\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 2.0, output: 6.0 },\n\t\t\t\tcontextWindow: 131000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\ttogether: {\n\t\tbaseUrl: \"https://api.together.xyz/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${TOGETHER_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8\", // \"meta-llama/Llama-4-Maverick-Instruct-Turbo\",\n\t\t\t\tname: \"LLaMA 4 Maverick (Together)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0.88, output: 0.88 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t],\n\t},\n\tollama: {\n\t\tbaseUrl: null, // dynamic: resolved at generation time based on deployment type\n\t\tapi: \"openai-completions\",\n\t\tauth: \"none\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"llama3:latest\",\n\t\t\t\tname: \"LLaMA 3 (Local)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"deepseek-r1:latest\",\n\t\t\t\tname: \"DeepSeek R1 (Local)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: true,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t],\n\t},\n\t\"ollama-cloud\": {\n\t\tbaseUrl: \"https://ollama.com/v1\",\n\t\tapi: \"openai-completions\",\n\t\tauth: \"api-key\",\n\t\tapiKey: \"${OLLAMA_API_KEY}\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"qwen3.5:397b-cloud\",\n\t\t\t\tname: \"Qwen 3.5 397B (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"glm-5:cloud\",\n\t\t\t\tname: \"GLM-5 (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"minimax-m2.5:cloud\",\n\t\t\t\tname: \"MiniMax M2.5 (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"kimi-k2.5:cloud\",\n\t\t\t\tname: \"Kimi K2.5 (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 131072,\n\t\t\t\tmaxTokens: 32768,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"gemini-3-flash-preview:cloud\",\n\t\t\t\tname: \"Gemini 3 Flash (Cloud)\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\", \"image\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 1000000,\n\t\t\t\tmaxTokens: 8192,\n\t\t\t},\n\t\t],\n\t},\n\tlmstudio: {\n\t\tbaseUrl: null, // dynamic: resolved at generation time based on deployment type\n\t\tapi: \"openai-completions\",\n\t\tauth: \"none\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"local-model\",\n\t\t\t\tname: \"LM Studio Model\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t],\n\t},\n\tvllm: {\n\t\tbaseUrl: null, // dynamic: resolved at generation time based on deployment type\n\t\tapi: \"openai-completions\",\n\t\tauth: \"none\",\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tid: \"local-model\",\n\t\t\t\tname: \"vLLM Model\",\n\t\t\t\tapi: \"openai-completions\",\n\t\t\t\treasoning: false,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\tcost: { input: 0, output: 0 },\n\t\t\t\tcontextWindow: 8192,\n\t\t\t\tmaxTokens: 4096,\n\t\t\t},\n\t\t],\n\t},\n};\n\n/** Default ports for local inference providers (ollama, lmstudio, vllm). */\nconst LOCAL_PROVIDER_PORTS: Record<string, number> = {\n\tollama: 11434,\n\tlmstudio: 1234,\n\tvllm: 8000,\n};\n\n/**\n * Generates a default `openclaw/config/openclaw.json` tailored\n * to the services installed in the stack.\n */\nexport function generateOpenClawConfig(\n\tresolved: ResolverOutput,\n\toptions: OpenClawConfigOptions,\n): string {\n\tconst isDocker = options.deploymentType === \"docker\";\n\t// Docker containers reach host services via host.docker.internal; bare-metal uses localhost\n\tconst localInferenceHost = isDocker ? \"host.docker.internal\" : \"localhost\";\n\t// Docker: bind to all interfaces (0.0.0.0) so port mapping works from host\n\t// Bare-metal/local: bind to loopback (127.0.0.1) for security, Tailscale can expose if needed\n\tconst gatewayBind = isDocker ? \"lan\" : \"loopback\";\n\tconst defaultSkills: Record<string, { enabled: boolean }> = {};\n\n\t// Auto-enable any OpenClaw skills attached to installed companion services\n\tfor (const { definition } of resolved.services) {\n\t\tfor (const skill of definition.skills) {\n\t\t\tif (skill.autoInstall) {\n\t\t\t\tdefaultSkills[skill.skillId] = { enabled: true };\n\t\t\t}\n\t\t}\n\t}\n\n\tconst providers: Record<string, any> = {};\n\tconst agentsModels: Record<string, { alias: string }> = {};\n\tlet primaryModel = \"\";\n\n\t// Always default to empty or the first choice, fallback to openai if nothing was passed\n\tconst selectedProviders =\n\t\tresolved.aiProviders && resolved.aiProviders.length > 0\n\t\t\t? resolved.aiProviders\n\t\t\t: ([\"openai\"] as AiProvider[]);\n\n\tfor (const provider of selectedProviders) {\n\t\tconst meta = PROVIDER_CONFIGS[provider];\n\t\tif (!meta) continue;\n\n\t\t// Local inference providers have null baseUrl — resolve dynamically based on deployment type\n\t\tconst baseUrl =\n\t\t\tmeta.baseUrl ?? `http://${localInferenceHost}:${LOCAL_PROVIDER_PORTS[provider] ?? 8000}/v1`;\n\n\t\tproviders[provider] = {\n\t\t\tbaseUrl,\n\t\t\tapi: meta.api,\n\t\t\tauth: meta.auth,\n\t\t\t...(meta.apiKey ? { apiKey: meta.apiKey } : {}),\n\t\t\tmodels: meta.models,\n\t\t};\n\n\t\tfor (const m of meta.models) {\n\t\t\tconst fullId = `${provider}/${m.id}`;\n\t\t\tagentsModels[fullId] = { alias: m.name };\n\t\t\tif (!primaryModel) primaryModel = fullId; // Use the very first model mapped as the global system default\n\t\t}\n\t}\n\n\tconst authProfiles: Record<string, any> = {\n\t\t\"local:default\": {\n\t\t\tprovider: \"local\",\n\t\t\tmode: \"token\",\n\t\t},\n\t};\n\n\t// Add provider auth profiles too\n\tfor (const provider of Object.keys(providers)) {\n\t\tauthProfiles[`${provider}:default`] = {\n\t\t\tprovider: provider,\n\t\t\tmode: \"api_key\",\n\t\t};\n\t}\n\n\tconst config = {\n\t\tmeta: {\n\t\t\tlastTouchedVersion: options.openclawVersion,\n\t\t\tlastTouchedAt: new Date().toISOString(),\n\t\t},\n\t\tenv: {\n\t\t\tshellEnv: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\tvars: {},\n\t\t},\n\t\twizard: {\n\t\t\tlastRunAt: new Date().toISOString(),\n\t\t\tlastRunVersion: options.openclawVersion,\n\t\t\tlastRunCommand: \"auto-generated-by-better-openclaw\",\n\t\t\tlastRunMode: \"local\",\n\t\t},\n\t\tlogging: {\n\t\t\tredactSensitive: \"tools\",\n\t\t},\n\t\tupdate: {\n\t\t\tcheckOnStart: true,\n\t\t},\n\t\tauth: {\n\t\t\tprofiles: authProfiles,\n\t\t},\n\t\tmodels: {\n\t\t\tmode: \"merge\",\n\t\t\tproviders,\n\t\t},\n\t\tagents: {\n\t\t\tdefaults: {\n\t\t\t\tmodel: {\n\t\t\t\t\tprimary: primaryModel,\n\t\t\t\t},\n\t\t\t\tmodels: agentsModels,\n\t\t\t\tworkspace: isDocker ? \"/home/node/.openclaw/workspace\" : \"./workspace\",\n\t\t\t\tcompaction: { mode: \"safeguard\" },\n\t\t\t\tmaxConcurrent: 4,\n\t\t\t\tsubagents: { maxConcurrent: 8 },\n\t\t\t},\n\t\t},\n\t\tmessages: {\n\t\t\tackReactionScope: \"group-mentions\",\n\t\t},\n\t\tcommands: {\n\t\t\tnative: \"auto\",\n\t\t\tnativeSkills: \"auto\",\n\t\t},\n\t\tcron: {\n\t\t\tenabled: true,\n\t\t},\n\t\thooks: {\n\t\t\tinternal: {\n\t\t\t\tenabled: true,\n\t\t\t\tentries: {\n\t\t\t\t\t\"boot-md\": { enabled: true },\n\t\t\t\t\t\"bootstrap-extra-files\": { enabled: true },\n\t\t\t\t\t\"command-logger\": { enabled: true },\n\t\t\t\t\t\"session-memory\": { enabled: true },\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tweb: {\n\t\t\tenabled: true,\n\t\t},\n\t\tdiscovery: {\n\t\t\twideArea: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t},\n\t\tcanvasHost: {\n\t\t\tenabled: true,\n\t\t\tliveReload: true,\n\t\t},\n\t\tchannels: {},\n\t\tgateway: {\n\t\t\tport: options.gatewayPort,\n\t\t\tmode: \"local\",\n\t\t\tbind: gatewayBind,\n\t\t\tcontrolUi: {\n\t\t\t\tenabled: true,\n\t\t\t\t// Docker NAT makes browser connections appear external — skip device pairing, use token-only auth\n\t\t\t\t...(isDocker ? { allowInsecureAuth: true } : {}),\n\t\t\t\t// Non-loopback binds need explicit origin allowlist for control UI CORS\n\t\t\t\t// Reference: docker-setup.sh ensure_control_ui_allowed_origins()\n\t\t\t\t...(gatewayBind !== \"loopback\"\n\t\t\t\t\t? { allowedOrigins: [`http://127.0.0.1:${options.gatewayPort}`] }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\tauth: {\n\t\t\t\tmode: \"token\",\n\t\t\t\ttoken: \"${OPENCLAW_GATEWAY_TOKEN}\",\n\t\t\t\t...(isDocker ? {} : { allowTailscale: true }),\n\t\t\t},\n\t\t\t// Tailscale serve only works on bare-metal/local (not inside Docker containers)\n\t\t\t...(isDocker ? {} : { tailscale: { mode: \"serve\", resetOnExit: true } }),\n\t\t\tnodes: {\n\t\t\t\tdenyCommands: [\"camera.snap\", \"camera.clip\", \"screen.record\"],\n\t\t\t},\n\t\t},\n\t\tskills: {\n\t\t\tinstall: { nodeManager: \"pnpm\" },\n\t\t\tload: {\n\t\t\t\twatch: true,\n\t\t\t},\n\t\t\t...(Object.keys(defaultSkills).length > 0 ? { entries: defaultSkills } : {}),\n\t\t},\n\t\tplugins: {\n\t\t\tenabled: true,\n\t\t\tentries: {\n\t\t\t\ttelegram: { enabled: true },\n\t\t\t\twhatsapp: { enabled: true },\n\t\t\t\tdiscord: { enabled: true },\n\t\t\t\t\"memory-core\": { enabled: true },\n\t\t\t},\n\t\t},\n\t};\n\n\treturn JSON.stringify(config, null, 2);\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
2
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
2
|
//#region src/generators/postgres-init.ts
|
|
4
3
|
/**
|
|
5
4
|
* Known database requirements for services that need their own PostgreSQL database.
|
|
@@ -76,6 +75,36 @@ const DB_REQUIREMENTS = {
|
|
|
76
75
|
dbUser: "authentik",
|
|
77
76
|
passwordEnvVar: "AUTHENTIK_DB_PASSWORD"
|
|
78
77
|
},
|
|
78
|
+
chatwoot: {
|
|
79
|
+
dbName: "chatwoot",
|
|
80
|
+
dbUser: "chatwoot",
|
|
81
|
+
passwordEnvVar: "CHATWOOT_DB_PASSWORD"
|
|
82
|
+
},
|
|
83
|
+
firecrawl: {
|
|
84
|
+
dbName: "firecrawl",
|
|
85
|
+
dbUser: "firecrawl",
|
|
86
|
+
passwordEnvVar: "FIRECRAWL_DB_PASSWORD"
|
|
87
|
+
},
|
|
88
|
+
flagsmith: {
|
|
89
|
+
dbName: "flagsmith",
|
|
90
|
+
dbUser: "flagsmith",
|
|
91
|
+
passwordEnvVar: "FLAGSMITH_DB_PASSWORD"
|
|
92
|
+
},
|
|
93
|
+
infisical: {
|
|
94
|
+
dbName: "infisical",
|
|
95
|
+
dbUser: "infisical",
|
|
96
|
+
passwordEnvVar: "INFISICAL_DB_PASSWORD"
|
|
97
|
+
},
|
|
98
|
+
keycloak: {
|
|
99
|
+
dbName: "keycloak",
|
|
100
|
+
dbUser: "keycloak",
|
|
101
|
+
passwordEnvVar: "KEYCLOAK_DB_PASSWORD"
|
|
102
|
+
},
|
|
103
|
+
listmonk: {
|
|
104
|
+
dbName: "listmonk",
|
|
105
|
+
dbUser: "listmonk",
|
|
106
|
+
passwordEnvVar: "LISTMONK_DB_PASSWORD"
|
|
107
|
+
},
|
|
79
108
|
"lasuite-meet-backend": {
|
|
80
109
|
dbName: "meet",
|
|
81
110
|
dbUser: "meet",
|
|
@@ -182,8 +211,8 @@ echo " Services: ${reqs.map((r) => r.serviceName).join(", ")}"
|
|
|
182
211
|
echo "═══════════════════════════════════════════════════════════"
|
|
183
212
|
`;
|
|
184
213
|
}
|
|
185
|
-
|
|
186
214
|
//#endregion
|
|
187
215
|
exports.generatePostgresInit = generatePostgresInit;
|
|
188
216
|
exports.getDbRequirements = getDbRequirements;
|
|
217
|
+
|
|
189
218
|
//# sourceMappingURL=postgres-init.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-init.cjs","names":[],"sources":["../../src/generators/postgres-init.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Database requirement descriptor for a service.\n */\ninterface DbRequirement {\n\tserviceId: string;\n\tserviceName: string;\n\tdbName: string;\n\tdbUser: string;\n\tpasswordEnvVar: string;\n}\n\n/**\n * Known database requirements for services that need their own PostgreSQL database.\n * Maps service ID to the DB name, user, and password env var they expect.\n */\nconst DB_REQUIREMENTS: Record<string, Omit<DbRequirement, \"serviceId\" | \"serviceName\">> = {\n\tn8n: { dbName: \"n8n\", dbUser: \"n8n\", passwordEnvVar: \"N8N_DB_PASSWORD\" },\n\tpostiz: { dbName: \"postiz\", dbUser: \"postiz\", passwordEnvVar: \"POSTIZ_DB_PASSWORD\" },\n\toutline: { dbName: \"outline\", dbUser: \"outline\", passwordEnvVar: \"OUTLINE_DB_PASSWORD\" },\n\tdify: { dbName: \"dify\", dbUser: \"dify\", passwordEnvVar: \"DIFY_DB_PASSWORD\" },\n\ttemporal: { dbName: \"temporal\", dbUser: \"temporal\", passwordEnvVar: \"TEMPORAL_DB_PASSWORD\" },\n\tmattermost: {\n\t\tdbName: \"mattermost\",\n\t\tdbUser: \"mattermost\",\n\t\tpasswordEnvVar: \"MATTERMOST_DB_PASSWORD\",\n\t},\n\t\"matrix-synapse\": { dbName: \"synapse\", dbUser: \"synapse\", passwordEnvVar: \"SYNAPSE_DB_PASSWORD\" },\n\t\"paperless-ngx\": {\n\t\tdbName: \"paperless\",\n\t\tdbUser: \"paperless\",\n\t\tpasswordEnvVar: \"PAPERLESS_DB_PASSWORD\",\n\t},\n\tumami: { dbName: \"umami\", dbUser: \"umami\", passwordEnvVar: \"UMAMI_DB_PASSWORD\" },\n\tmatomo: { dbName: \"matomo\", dbUser: \"matomo\", passwordEnvVar: \"MATOMO_DB_PASSWORD\" },\n\tmixpost: { dbName: \"mixpost\", dbUser: \"mixpost\", passwordEnvVar: \"MIXPOST_DB_PASSWORD\" },\n\t\"cal-com\": { dbName: \"calcom\", dbUser: \"calcom\", passwordEnvVar: \"CALCOM_DB_PASSWORD\" },\n\timmich: { dbName: \"immich\", dbUser: \"immich\", passwordEnvVar: \"IMMICH_DB_PASSWORD\" },\n\tauthentik: { dbName: \"authentik\", dbUser: \"authentik\", passwordEnvVar: \"AUTHENTIK_DB_PASSWORD\" },\n\t\"lasuite-meet-backend\": {\n\t\tdbName: \"meet\",\n\t\tdbUser: \"meet\",\n\t\tpasswordEnvVar: \"LASUITE_MEET_DB_PASSWORD\",\n\t},\n\topenpanel: { dbName: \"openpanel\", dbUser: \"openpanel\", passwordEnvVar: \"OPENPANEL_DB_PASSWORD\" },\n\tusesend: { dbName: \"usesend\", dbUser: \"usesend\", passwordEnvVar: \"USESEND_DB_PASSWORD\" },\n\tnextcloud: { dbName: \"nextcloud\", dbUser: \"nextcloud\", passwordEnvVar: \"NEXTCLOUD_DB_PASSWORD\" },\n};\n\n/**\n * Get the list of database requirements for all resolved services.\n * Exported so other generators (env, composer) can access the same data.\n */\nexport function getDbRequirements(resolved: ResolverOutput): DbRequirement[] {\n\tconst reqs: DbRequirement[] = [];\n\tfor (const { definition } of resolved.services) {\n\t\tconst req = DB_REQUIREMENTS[definition.id];\n\t\tif (req) {\n\t\t\treqs.push({\n\t\t\t\tserviceId: definition.id,\n\t\t\t\tserviceName: definition.name,\n\t\t\t\t...req,\n\t\t\t});\n\t\t}\n\t}\n\treturn reqs;\n}\n\n/**\n * Generates a PostgreSQL initialization script that creates databases and users\n * for all companion services that need their own DB.\n *\n * Returns null if PostgreSQL is not in the resolved stack or no services need extra DBs.\n * The script is designed to be mounted at /docker-entrypoint-initdb.d/init-databases.sh\n * and runs automatically during PostgreSQL's first initialization.\n */\nexport function generatePostgresInit(resolved: ResolverOutput): string | null {\n\tconst hasPostgres = resolved.services.some((s) => s.definition.id === \"postgresql\");\n\tif (!hasPostgres) return null;\n\n\tconst reqs = getDbRequirements(resolved);\n\tif (reqs.length === 0) return null;\n\n\tconst createCalls = reqs\n\t\t.map(\n\t\t\t(r) =>\n\t\t\t\t`create_db_and_user \"${r.dbName}\" \"${r.dbUser}\" \"\\${${r.passwordEnvVar}:-$POSTGRES_PASSWORD}\"`,\n\t\t)\n\t\t.join(\"\\n\");\n\n\treturn `#!/bin/bash\nset -e\n\n# ═══════════════════════════════════════════════════════════════════════════════\n# PostgreSQL Initialization Script\n# Generated by better-openclaw\n#\n# This script runs automatically during PostgreSQL's first initialization.\n# It creates databases and users for all companion services in your stack.\n# ═══════════════════════════════════════════════════════════════════════════════\n\ncreate_db_and_user() {\n local db=\"$1\"\n local user=\"$2\"\n local password=\"$3\"\n\n echo \">>> Creating database '$db' with user '$user'...\"\n\n psql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"$POSTGRES_DB\" <<-EOSQL\n -- Create user if not exists\n DO \\\\$\\\\$\n BEGIN\n IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$user') THEN\n CREATE ROLE \"$user\" WITH LOGIN PASSWORD '$password';\n RAISE NOTICE 'Created user: $user';\n ELSE\n -- Update password in case it changed\n ALTER ROLE \"$user\" WITH PASSWORD '$password';\n RAISE NOTICE 'User already exists, updated password: $user';\n END IF;\n END\n \\\\$\\\\$;\n\n -- Create database if not exists\n SELECT 'CREATE DATABASE \"$db\" OWNER \"$user\"'\n WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db')\\\\gexec\n\n -- Grant privileges\n GRANT ALL PRIVILEGES ON DATABASE \"$db\" TO \"$user\";\nEOSQL\n\n echo \">>> Done: database '$db' with user '$user'\"\n}\n\necho \"═══════════════════════════════════════════════════════════\"\necho \" Initializing databases for companion services...\"\necho \"═══════════════════════════════════════════════════════════\"\n\n${createCalls}\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════\"\necho \" All databases initialized successfully!\"\necho \" Services: ${reqs.map((r) => r.serviceName).join(\", \")}\"\necho \"═══════════════════════════════════════════════════════════\"\n`;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"postgres-init.cjs","names":[],"sources":["../../src/generators/postgres-init.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Database requirement descriptor for a service.\n */\ninterface DbRequirement {\n\tserviceId: string;\n\tserviceName: string;\n\tdbName: string;\n\tdbUser: string;\n\tpasswordEnvVar: string;\n}\n\n/**\n * Known database requirements for services that need their own PostgreSQL database.\n * Maps service ID to the DB name, user, and password env var they expect.\n */\nconst DB_REQUIREMENTS: Record<string, Omit<DbRequirement, \"serviceId\" | \"serviceName\">> = {\n\tn8n: { dbName: \"n8n\", dbUser: \"n8n\", passwordEnvVar: \"N8N_DB_PASSWORD\" },\n\tpostiz: { dbName: \"postiz\", dbUser: \"postiz\", passwordEnvVar: \"POSTIZ_DB_PASSWORD\" },\n\toutline: { dbName: \"outline\", dbUser: \"outline\", passwordEnvVar: \"OUTLINE_DB_PASSWORD\" },\n\tdify: { dbName: \"dify\", dbUser: \"dify\", passwordEnvVar: \"DIFY_DB_PASSWORD\" },\n\ttemporal: { dbName: \"temporal\", dbUser: \"temporal\", passwordEnvVar: \"TEMPORAL_DB_PASSWORD\" },\n\tmattermost: {\n\t\tdbName: \"mattermost\",\n\t\tdbUser: \"mattermost\",\n\t\tpasswordEnvVar: \"MATTERMOST_DB_PASSWORD\",\n\t},\n\t\"matrix-synapse\": { dbName: \"synapse\", dbUser: \"synapse\", passwordEnvVar: \"SYNAPSE_DB_PASSWORD\" },\n\t\"paperless-ngx\": {\n\t\tdbName: \"paperless\",\n\t\tdbUser: \"paperless\",\n\t\tpasswordEnvVar: \"PAPERLESS_DB_PASSWORD\",\n\t},\n\tumami: { dbName: \"umami\", dbUser: \"umami\", passwordEnvVar: \"UMAMI_DB_PASSWORD\" },\n\tmatomo: { dbName: \"matomo\", dbUser: \"matomo\", passwordEnvVar: \"MATOMO_DB_PASSWORD\" },\n\tmixpost: { dbName: \"mixpost\", dbUser: \"mixpost\", passwordEnvVar: \"MIXPOST_DB_PASSWORD\" },\n\t\"cal-com\": { dbName: \"calcom\", dbUser: \"calcom\", passwordEnvVar: \"CALCOM_DB_PASSWORD\" },\n\timmich: { dbName: \"immich\", dbUser: \"immich\", passwordEnvVar: \"IMMICH_DB_PASSWORD\" },\n\tauthentik: { dbName: \"authentik\", dbUser: \"authentik\", passwordEnvVar: \"AUTHENTIK_DB_PASSWORD\" },\n\tchatwoot: { dbName: \"chatwoot\", dbUser: \"chatwoot\", passwordEnvVar: \"CHATWOOT_DB_PASSWORD\" },\n\tfirecrawl: { dbName: \"firecrawl\", dbUser: \"firecrawl\", passwordEnvVar: \"FIRECRAWL_DB_PASSWORD\" },\n\tflagsmith: { dbName: \"flagsmith\", dbUser: \"flagsmith\", passwordEnvVar: \"FLAGSMITH_DB_PASSWORD\" },\n\tinfisical: { dbName: \"infisical\", dbUser: \"infisical\", passwordEnvVar: \"INFISICAL_DB_PASSWORD\" },\n\tkeycloak: { dbName: \"keycloak\", dbUser: \"keycloak\", passwordEnvVar: \"KEYCLOAK_DB_PASSWORD\" },\n\tlistmonk: { dbName: \"listmonk\", dbUser: \"listmonk\", passwordEnvVar: \"LISTMONK_DB_PASSWORD\" },\n\t\"lasuite-meet-backend\": {\n\t\tdbName: \"meet\",\n\t\tdbUser: \"meet\",\n\t\tpasswordEnvVar: \"LASUITE_MEET_DB_PASSWORD\",\n\t},\n\topenpanel: { dbName: \"openpanel\", dbUser: \"openpanel\", passwordEnvVar: \"OPENPANEL_DB_PASSWORD\" },\n\tusesend: { dbName: \"usesend\", dbUser: \"usesend\", passwordEnvVar: \"USESEND_DB_PASSWORD\" },\n\tnextcloud: { dbName: \"nextcloud\", dbUser: \"nextcloud\", passwordEnvVar: \"NEXTCLOUD_DB_PASSWORD\" },\n};\n\n/**\n * Get the list of database requirements for all resolved services.\n * Exported so other generators (env, composer) can access the same data.\n */\nexport function getDbRequirements(resolved: ResolverOutput): DbRequirement[] {\n\tconst reqs: DbRequirement[] = [];\n\tfor (const { definition } of resolved.services) {\n\t\tconst req = DB_REQUIREMENTS[definition.id];\n\t\tif (req) {\n\t\t\treqs.push({\n\t\t\t\tserviceId: definition.id,\n\t\t\t\tserviceName: definition.name,\n\t\t\t\t...req,\n\t\t\t});\n\t\t}\n\t}\n\treturn reqs;\n}\n\n/**\n * Generates a PostgreSQL initialization script that creates databases and users\n * for all companion services that need their own DB.\n *\n * Returns null if PostgreSQL is not in the resolved stack or no services need extra DBs.\n * The script is designed to be mounted at /docker-entrypoint-initdb.d/init-databases.sh\n * and runs automatically during PostgreSQL's first initialization.\n */\nexport function generatePostgresInit(resolved: ResolverOutput): string | null {\n\tconst hasPostgres = resolved.services.some((s) => s.definition.id === \"postgresql\");\n\tif (!hasPostgres) return null;\n\n\tconst reqs = getDbRequirements(resolved);\n\tif (reqs.length === 0) return null;\n\n\tconst createCalls = reqs\n\t\t.map(\n\t\t\t(r) =>\n\t\t\t\t`create_db_and_user \"${r.dbName}\" \"${r.dbUser}\" \"\\${${r.passwordEnvVar}:-$POSTGRES_PASSWORD}\"`,\n\t\t)\n\t\t.join(\"\\n\");\n\n\treturn `#!/bin/bash\nset -e\n\n# ═══════════════════════════════════════════════════════════════════════════════\n# PostgreSQL Initialization Script\n# Generated by better-openclaw\n#\n# This script runs automatically during PostgreSQL's first initialization.\n# It creates databases and users for all companion services in your stack.\n# ═══════════════════════════════════════════════════════════════════════════════\n\ncreate_db_and_user() {\n local db=\"$1\"\n local user=\"$2\"\n local password=\"$3\"\n\n echo \">>> Creating database '$db' with user '$user'...\"\n\n psql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"$POSTGRES_DB\" <<-EOSQL\n -- Create user if not exists\n DO \\\\$\\\\$\n BEGIN\n IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$user') THEN\n CREATE ROLE \"$user\" WITH LOGIN PASSWORD '$password';\n RAISE NOTICE 'Created user: $user';\n ELSE\n -- Update password in case it changed\n ALTER ROLE \"$user\" WITH PASSWORD '$password';\n RAISE NOTICE 'User already exists, updated password: $user';\n END IF;\n END\n \\\\$\\\\$;\n\n -- Create database if not exists\n SELECT 'CREATE DATABASE \"$db\" OWNER \"$user\"'\n WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db')\\\\gexec\n\n -- Grant privileges\n GRANT ALL PRIVILEGES ON DATABASE \"$db\" TO \"$user\";\nEOSQL\n\n echo \">>> Done: database '$db' with user '$user'\"\n}\n\necho \"═══════════════════════════════════════════════════════════\"\necho \" Initializing databases for companion services...\"\necho \"═══════════════════════════════════════════════════════════\"\n\n${createCalls}\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════\"\necho \" All databases initialized successfully!\"\necho \" Services: ${reqs.map((r) => r.serviceName).join(\", \")}\"\necho \"═══════════════════════════════════════════════════════════\"\n`;\n}\n"],"mappings":";;;;;;AAiBA,MAAM,kBAAoF;CACzF,KAAK;EAAE,QAAQ;EAAO,QAAQ;EAAO,gBAAgB;EAAmB;CACxE,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,MAAM;EAAE,QAAQ;EAAQ,QAAQ;EAAQ,gBAAgB;EAAoB;CAC5E,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,YAAY;EACX,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,kBAAkB;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACjG,iBAAiB;EAChB,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,OAAO;EAAE,QAAQ;EAAS,QAAQ;EAAS,gBAAgB;EAAqB;CAChF,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,WAAW;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACvF,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,wBAAwB;EACvB,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG;;;;;AAMD,SAAgB,kBAAkB,UAA2C;CAC5E,MAAM,OAAwB,EAAE;AAChC,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;EAC/C,MAAM,MAAM,gBAAgB,WAAW;AACvC,MAAI,IACH,MAAK,KAAK;GACT,WAAW,WAAW;GACtB,aAAa,WAAW;GACxB,GAAG;GACH,CAAC;;AAGJ,QAAO;;;;;;;;;;AAWR,SAAgB,qBAAqB,UAAyC;AAE7E,KAAI,CADgB,SAAS,SAAS,MAAM,MAAM,EAAE,WAAW,OAAO,aAAa,CACjE,QAAO;CAEzB,MAAM,OAAO,kBAAkB,SAAS;AACxC,KAAI,KAAK,WAAW,EAAG,QAAO;AAS9B,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAPa,KAClB,KACC,MACA,uBAAuB,EAAE,OAAO,KAAK,EAAE,OAAO,QAAQ,EAAE,eAAe,wBACxE,CACA,KAAK,KAAK,CAkDC;;;;;mBAKK,KAAK,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-init.d.cts","names":[],"sources":["../../src/generators/postgres-init.ts"],"mappings":";;;;;AAAkD;UAKxC,aAAA;EACT,SAAA;EACA,WAAA;EACA,MAAA;EACA,MAAA;EACA,cAAA;AAAA;;;;
|
|
1
|
+
{"version":3,"file":"postgres-init.d.cts","names":[],"sources":["../../src/generators/postgres-init.ts"],"mappings":";;;;;AAAkD;UAKxC,aAAA;EACT,SAAA;EACA,WAAA;EACA,MAAA;EACA,MAAA;EACA,cAAA;AAAA;;;;AAkDD;iBAAgB,iBAAA,CAAkB,QAAA,EAAU,cAAA,GAAiB,aAAA;;;;;;;;AAuB7D;iBAAgB,oBAAA,CAAqB,QAAA,EAAU,cAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-init.d.mts","names":[],"sources":["../../src/generators/postgres-init.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"postgres-init.d.mts","names":[],"sources":["../../src/generators/postgres-init.ts"],"mappings":";;;;;;UAKU,aAAA;EACT,SAAA;EACA,WAAA;EACA,MAAA;EACA,MAAA;EACA,cAAA;AAAA;;;;;iBAkDe,iBAAA,CAAkB,QAAA,EAAU,cAAA,GAAiB,aAAA;;;;;;;;;iBAuB7C,oBAAA,CAAqB,QAAA,EAAU,cAAA"}
|
|
@@ -74,6 +74,36 @@ const DB_REQUIREMENTS = {
|
|
|
74
74
|
dbUser: "authentik",
|
|
75
75
|
passwordEnvVar: "AUTHENTIK_DB_PASSWORD"
|
|
76
76
|
},
|
|
77
|
+
chatwoot: {
|
|
78
|
+
dbName: "chatwoot",
|
|
79
|
+
dbUser: "chatwoot",
|
|
80
|
+
passwordEnvVar: "CHATWOOT_DB_PASSWORD"
|
|
81
|
+
},
|
|
82
|
+
firecrawl: {
|
|
83
|
+
dbName: "firecrawl",
|
|
84
|
+
dbUser: "firecrawl",
|
|
85
|
+
passwordEnvVar: "FIRECRAWL_DB_PASSWORD"
|
|
86
|
+
},
|
|
87
|
+
flagsmith: {
|
|
88
|
+
dbName: "flagsmith",
|
|
89
|
+
dbUser: "flagsmith",
|
|
90
|
+
passwordEnvVar: "FLAGSMITH_DB_PASSWORD"
|
|
91
|
+
},
|
|
92
|
+
infisical: {
|
|
93
|
+
dbName: "infisical",
|
|
94
|
+
dbUser: "infisical",
|
|
95
|
+
passwordEnvVar: "INFISICAL_DB_PASSWORD"
|
|
96
|
+
},
|
|
97
|
+
keycloak: {
|
|
98
|
+
dbName: "keycloak",
|
|
99
|
+
dbUser: "keycloak",
|
|
100
|
+
passwordEnvVar: "KEYCLOAK_DB_PASSWORD"
|
|
101
|
+
},
|
|
102
|
+
listmonk: {
|
|
103
|
+
dbName: "listmonk",
|
|
104
|
+
dbUser: "listmonk",
|
|
105
|
+
passwordEnvVar: "LISTMONK_DB_PASSWORD"
|
|
106
|
+
},
|
|
77
107
|
"lasuite-meet-backend": {
|
|
78
108
|
dbName: "meet",
|
|
79
109
|
dbUser: "meet",
|
|
@@ -180,7 +210,7 @@ echo " Services: ${reqs.map((r) => r.serviceName).join(", ")}"
|
|
|
180
210
|
echo "═══════════════════════════════════════════════════════════"
|
|
181
211
|
`;
|
|
182
212
|
}
|
|
183
|
-
|
|
184
213
|
//#endregion
|
|
185
214
|
export { generatePostgresInit, getDbRequirements };
|
|
215
|
+
|
|
186
216
|
//# sourceMappingURL=postgres-init.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-init.mjs","names":[],"sources":["../../src/generators/postgres-init.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Database requirement descriptor for a service.\n */\ninterface DbRequirement {\n\tserviceId: string;\n\tserviceName: string;\n\tdbName: string;\n\tdbUser: string;\n\tpasswordEnvVar: string;\n}\n\n/**\n * Known database requirements for services that need their own PostgreSQL database.\n * Maps service ID to the DB name, user, and password env var they expect.\n */\nconst DB_REQUIREMENTS: Record<string, Omit<DbRequirement, \"serviceId\" | \"serviceName\">> = {\n\tn8n: { dbName: \"n8n\", dbUser: \"n8n\", passwordEnvVar: \"N8N_DB_PASSWORD\" },\n\tpostiz: { dbName: \"postiz\", dbUser: \"postiz\", passwordEnvVar: \"POSTIZ_DB_PASSWORD\" },\n\toutline: { dbName: \"outline\", dbUser: \"outline\", passwordEnvVar: \"OUTLINE_DB_PASSWORD\" },\n\tdify: { dbName: \"dify\", dbUser: \"dify\", passwordEnvVar: \"DIFY_DB_PASSWORD\" },\n\ttemporal: { dbName: \"temporal\", dbUser: \"temporal\", passwordEnvVar: \"TEMPORAL_DB_PASSWORD\" },\n\tmattermost: {\n\t\tdbName: \"mattermost\",\n\t\tdbUser: \"mattermost\",\n\t\tpasswordEnvVar: \"MATTERMOST_DB_PASSWORD\",\n\t},\n\t\"matrix-synapse\": { dbName: \"synapse\", dbUser: \"synapse\", passwordEnvVar: \"SYNAPSE_DB_PASSWORD\" },\n\t\"paperless-ngx\": {\n\t\tdbName: \"paperless\",\n\t\tdbUser: \"paperless\",\n\t\tpasswordEnvVar: \"PAPERLESS_DB_PASSWORD\",\n\t},\n\tumami: { dbName: \"umami\", dbUser: \"umami\", passwordEnvVar: \"UMAMI_DB_PASSWORD\" },\n\tmatomo: { dbName: \"matomo\", dbUser: \"matomo\", passwordEnvVar: \"MATOMO_DB_PASSWORD\" },\n\tmixpost: { dbName: \"mixpost\", dbUser: \"mixpost\", passwordEnvVar: \"MIXPOST_DB_PASSWORD\" },\n\t\"cal-com\": { dbName: \"calcom\", dbUser: \"calcom\", passwordEnvVar: \"CALCOM_DB_PASSWORD\" },\n\timmich: { dbName: \"immich\", dbUser: \"immich\", passwordEnvVar: \"IMMICH_DB_PASSWORD\" },\n\tauthentik: { dbName: \"authentik\", dbUser: \"authentik\", passwordEnvVar: \"AUTHENTIK_DB_PASSWORD\" },\n\t\"lasuite-meet-backend\": {\n\t\tdbName: \"meet\",\n\t\tdbUser: \"meet\",\n\t\tpasswordEnvVar: \"LASUITE_MEET_DB_PASSWORD\",\n\t},\n\topenpanel: { dbName: \"openpanel\", dbUser: \"openpanel\", passwordEnvVar: \"OPENPANEL_DB_PASSWORD\" },\n\tusesend: { dbName: \"usesend\", dbUser: \"usesend\", passwordEnvVar: \"USESEND_DB_PASSWORD\" },\n\tnextcloud: { dbName: \"nextcloud\", dbUser: \"nextcloud\", passwordEnvVar: \"NEXTCLOUD_DB_PASSWORD\" },\n};\n\n/**\n * Get the list of database requirements for all resolved services.\n * Exported so other generators (env, composer) can access the same data.\n */\nexport function getDbRequirements(resolved: ResolverOutput): DbRequirement[] {\n\tconst reqs: DbRequirement[] = [];\n\tfor (const { definition } of resolved.services) {\n\t\tconst req = DB_REQUIREMENTS[definition.id];\n\t\tif (req) {\n\t\t\treqs.push({\n\t\t\t\tserviceId: definition.id,\n\t\t\t\tserviceName: definition.name,\n\t\t\t\t...req,\n\t\t\t});\n\t\t}\n\t}\n\treturn reqs;\n}\n\n/**\n * Generates a PostgreSQL initialization script that creates databases and users\n * for all companion services that need their own DB.\n *\n * Returns null if PostgreSQL is not in the resolved stack or no services need extra DBs.\n * The script is designed to be mounted at /docker-entrypoint-initdb.d/init-databases.sh\n * and runs automatically during PostgreSQL's first initialization.\n */\nexport function generatePostgresInit(resolved: ResolverOutput): string | null {\n\tconst hasPostgres = resolved.services.some((s) => s.definition.id === \"postgresql\");\n\tif (!hasPostgres) return null;\n\n\tconst reqs = getDbRequirements(resolved);\n\tif (reqs.length === 0) return null;\n\n\tconst createCalls = reqs\n\t\t.map(\n\t\t\t(r) =>\n\t\t\t\t`create_db_and_user \"${r.dbName}\" \"${r.dbUser}\" \"\\${${r.passwordEnvVar}:-$POSTGRES_PASSWORD}\"`,\n\t\t)\n\t\t.join(\"\\n\");\n\n\treturn `#!/bin/bash\nset -e\n\n# ═══════════════════════════════════════════════════════════════════════════════\n# PostgreSQL Initialization Script\n# Generated by better-openclaw\n#\n# This script runs automatically during PostgreSQL's first initialization.\n# It creates databases and users for all companion services in your stack.\n# ═══════════════════════════════════════════════════════════════════════════════\n\ncreate_db_and_user() {\n local db=\"$1\"\n local user=\"$2\"\n local password=\"$3\"\n\n echo \">>> Creating database '$db' with user '$user'...\"\n\n psql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"$POSTGRES_DB\" <<-EOSQL\n -- Create user if not exists\n DO \\\\$\\\\$\n BEGIN\n IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$user') THEN\n CREATE ROLE \"$user\" WITH LOGIN PASSWORD '$password';\n RAISE NOTICE 'Created user: $user';\n ELSE\n -- Update password in case it changed\n ALTER ROLE \"$user\" WITH PASSWORD '$password';\n RAISE NOTICE 'User already exists, updated password: $user';\n END IF;\n END\n \\\\$\\\\$;\n\n -- Create database if not exists\n SELECT 'CREATE DATABASE \"$db\" OWNER \"$user\"'\n WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db')\\\\gexec\n\n -- Grant privileges\n GRANT ALL PRIVILEGES ON DATABASE \"$db\" TO \"$user\";\nEOSQL\n\n echo \">>> Done: database '$db' with user '$user'\"\n}\n\necho \"═══════════════════════════════════════════════════════════\"\necho \" Initializing databases for companion services...\"\necho \"═══════════════════════════════════════════════════════════\"\n\n${createCalls}\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════\"\necho \" All databases initialized successfully!\"\necho \" Services: ${reqs.map((r) => r.serviceName).join(\", \")}\"\necho \"═══════════════════════════════════════════════════════════\"\n`;\n}\n"],"mappings":";;;;;AAiBA,MAAM,kBAAoF;CACzF,KAAK;EAAE,QAAQ;EAAO,QAAQ;EAAO,gBAAgB;EAAmB;CACxE,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,MAAM;EAAE,QAAQ;EAAQ,QAAQ;EAAQ,gBAAgB;EAAoB;CAC5E,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,YAAY;EACX,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,kBAAkB;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACjG,iBAAiB;EAChB,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,OAAO;EAAE,QAAQ;EAAS,QAAQ;EAAS,gBAAgB;EAAqB;CAChF,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,WAAW;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACvF,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,wBAAwB;EACvB,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG;;;;;AAMD,SAAgB,kBAAkB,UAA2C;CAC5E,MAAM,OAAwB,EAAE;AAChC,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;EAC/C,MAAM,MAAM,gBAAgB,WAAW;AACvC,MAAI,IACH,MAAK,KAAK;GACT,WAAW,WAAW;GACtB,aAAa,WAAW;GACxB,GAAG;GACH,CAAC;;AAGJ,QAAO;;;;;;;;;;AAWR,SAAgB,qBAAqB,UAAyC;AAE7E,KAAI,CADgB,SAAS,SAAS,MAAM,MAAM,EAAE,WAAW,OAAO,aAAa,CACjE,QAAO;CAEzB,MAAM,OAAO,kBAAkB,SAAS;AACxC,KAAI,KAAK,WAAW,EAAG,QAAO;AAS9B,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAPa,KAClB,KACC,MACA,uBAAuB,EAAE,OAAO,KAAK,EAAE,OAAO,QAAQ,EAAE,eAAe,wBACxE,CACA,KAAK,KAAK,CAkDC;;;;;mBAKK,KAAK,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK,CAAC"}
|
|
1
|
+
{"version":3,"file":"postgres-init.mjs","names":[],"sources":["../../src/generators/postgres-init.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Database requirement descriptor for a service.\n */\ninterface DbRequirement {\n\tserviceId: string;\n\tserviceName: string;\n\tdbName: string;\n\tdbUser: string;\n\tpasswordEnvVar: string;\n}\n\n/**\n * Known database requirements for services that need their own PostgreSQL database.\n * Maps service ID to the DB name, user, and password env var they expect.\n */\nconst DB_REQUIREMENTS: Record<string, Omit<DbRequirement, \"serviceId\" | \"serviceName\">> = {\n\tn8n: { dbName: \"n8n\", dbUser: \"n8n\", passwordEnvVar: \"N8N_DB_PASSWORD\" },\n\tpostiz: { dbName: \"postiz\", dbUser: \"postiz\", passwordEnvVar: \"POSTIZ_DB_PASSWORD\" },\n\toutline: { dbName: \"outline\", dbUser: \"outline\", passwordEnvVar: \"OUTLINE_DB_PASSWORD\" },\n\tdify: { dbName: \"dify\", dbUser: \"dify\", passwordEnvVar: \"DIFY_DB_PASSWORD\" },\n\ttemporal: { dbName: \"temporal\", dbUser: \"temporal\", passwordEnvVar: \"TEMPORAL_DB_PASSWORD\" },\n\tmattermost: {\n\t\tdbName: \"mattermost\",\n\t\tdbUser: \"mattermost\",\n\t\tpasswordEnvVar: \"MATTERMOST_DB_PASSWORD\",\n\t},\n\t\"matrix-synapse\": { dbName: \"synapse\", dbUser: \"synapse\", passwordEnvVar: \"SYNAPSE_DB_PASSWORD\" },\n\t\"paperless-ngx\": {\n\t\tdbName: \"paperless\",\n\t\tdbUser: \"paperless\",\n\t\tpasswordEnvVar: \"PAPERLESS_DB_PASSWORD\",\n\t},\n\tumami: { dbName: \"umami\", dbUser: \"umami\", passwordEnvVar: \"UMAMI_DB_PASSWORD\" },\n\tmatomo: { dbName: \"matomo\", dbUser: \"matomo\", passwordEnvVar: \"MATOMO_DB_PASSWORD\" },\n\tmixpost: { dbName: \"mixpost\", dbUser: \"mixpost\", passwordEnvVar: \"MIXPOST_DB_PASSWORD\" },\n\t\"cal-com\": { dbName: \"calcom\", dbUser: \"calcom\", passwordEnvVar: \"CALCOM_DB_PASSWORD\" },\n\timmich: { dbName: \"immich\", dbUser: \"immich\", passwordEnvVar: \"IMMICH_DB_PASSWORD\" },\n\tauthentik: { dbName: \"authentik\", dbUser: \"authentik\", passwordEnvVar: \"AUTHENTIK_DB_PASSWORD\" },\n\tchatwoot: { dbName: \"chatwoot\", dbUser: \"chatwoot\", passwordEnvVar: \"CHATWOOT_DB_PASSWORD\" },\n\tfirecrawl: { dbName: \"firecrawl\", dbUser: \"firecrawl\", passwordEnvVar: \"FIRECRAWL_DB_PASSWORD\" },\n\tflagsmith: { dbName: \"flagsmith\", dbUser: \"flagsmith\", passwordEnvVar: \"FLAGSMITH_DB_PASSWORD\" },\n\tinfisical: { dbName: \"infisical\", dbUser: \"infisical\", passwordEnvVar: \"INFISICAL_DB_PASSWORD\" },\n\tkeycloak: { dbName: \"keycloak\", dbUser: \"keycloak\", passwordEnvVar: \"KEYCLOAK_DB_PASSWORD\" },\n\tlistmonk: { dbName: \"listmonk\", dbUser: \"listmonk\", passwordEnvVar: \"LISTMONK_DB_PASSWORD\" },\n\t\"lasuite-meet-backend\": {\n\t\tdbName: \"meet\",\n\t\tdbUser: \"meet\",\n\t\tpasswordEnvVar: \"LASUITE_MEET_DB_PASSWORD\",\n\t},\n\topenpanel: { dbName: \"openpanel\", dbUser: \"openpanel\", passwordEnvVar: \"OPENPANEL_DB_PASSWORD\" },\n\tusesend: { dbName: \"usesend\", dbUser: \"usesend\", passwordEnvVar: \"USESEND_DB_PASSWORD\" },\n\tnextcloud: { dbName: \"nextcloud\", dbUser: \"nextcloud\", passwordEnvVar: \"NEXTCLOUD_DB_PASSWORD\" },\n};\n\n/**\n * Get the list of database requirements for all resolved services.\n * Exported so other generators (env, composer) can access the same data.\n */\nexport function getDbRequirements(resolved: ResolverOutput): DbRequirement[] {\n\tconst reqs: DbRequirement[] = [];\n\tfor (const { definition } of resolved.services) {\n\t\tconst req = DB_REQUIREMENTS[definition.id];\n\t\tif (req) {\n\t\t\treqs.push({\n\t\t\t\tserviceId: definition.id,\n\t\t\t\tserviceName: definition.name,\n\t\t\t\t...req,\n\t\t\t});\n\t\t}\n\t}\n\treturn reqs;\n}\n\n/**\n * Generates a PostgreSQL initialization script that creates databases and users\n * for all companion services that need their own DB.\n *\n * Returns null if PostgreSQL is not in the resolved stack or no services need extra DBs.\n * The script is designed to be mounted at /docker-entrypoint-initdb.d/init-databases.sh\n * and runs automatically during PostgreSQL's first initialization.\n */\nexport function generatePostgresInit(resolved: ResolverOutput): string | null {\n\tconst hasPostgres = resolved.services.some((s) => s.definition.id === \"postgresql\");\n\tif (!hasPostgres) return null;\n\n\tconst reqs = getDbRequirements(resolved);\n\tif (reqs.length === 0) return null;\n\n\tconst createCalls = reqs\n\t\t.map(\n\t\t\t(r) =>\n\t\t\t\t`create_db_and_user \"${r.dbName}\" \"${r.dbUser}\" \"\\${${r.passwordEnvVar}:-$POSTGRES_PASSWORD}\"`,\n\t\t)\n\t\t.join(\"\\n\");\n\n\treturn `#!/bin/bash\nset -e\n\n# ═══════════════════════════════════════════════════════════════════════════════\n# PostgreSQL Initialization Script\n# Generated by better-openclaw\n#\n# This script runs automatically during PostgreSQL's first initialization.\n# It creates databases and users for all companion services in your stack.\n# ═══════════════════════════════════════════════════════════════════════════════\n\ncreate_db_and_user() {\n local db=\"$1\"\n local user=\"$2\"\n local password=\"$3\"\n\n echo \">>> Creating database '$db' with user '$user'...\"\n\n psql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"$POSTGRES_DB\" <<-EOSQL\n -- Create user if not exists\n DO \\\\$\\\\$\n BEGIN\n IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$user') THEN\n CREATE ROLE \"$user\" WITH LOGIN PASSWORD '$password';\n RAISE NOTICE 'Created user: $user';\n ELSE\n -- Update password in case it changed\n ALTER ROLE \"$user\" WITH PASSWORD '$password';\n RAISE NOTICE 'User already exists, updated password: $user';\n END IF;\n END\n \\\\$\\\\$;\n\n -- Create database if not exists\n SELECT 'CREATE DATABASE \"$db\" OWNER \"$user\"'\n WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db')\\\\gexec\n\n -- Grant privileges\n GRANT ALL PRIVILEGES ON DATABASE \"$db\" TO \"$user\";\nEOSQL\n\n echo \">>> Done: database '$db' with user '$user'\"\n}\n\necho \"═══════════════════════════════════════════════════════════\"\necho \" Initializing databases for companion services...\"\necho \"═══════════════════════════════════════════════════════════\"\n\n${createCalls}\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════\"\necho \" All databases initialized successfully!\"\necho \" Services: ${reqs.map((r) => r.serviceName).join(\", \")}\"\necho \"═══════════════════════════════════════════════════════════\"\n`;\n}\n"],"mappings":";;;;;AAiBA,MAAM,kBAAoF;CACzF,KAAK;EAAE,QAAQ;EAAO,QAAQ;EAAO,gBAAgB;EAAmB;CACxE,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,MAAM;EAAE,QAAQ;EAAQ,QAAQ;EAAQ,gBAAgB;EAAoB;CAC5E,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,YAAY;EACX,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,kBAAkB;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACjG,iBAAiB;EAChB,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,OAAO;EAAE,QAAQ;EAAS,QAAQ;EAAS,gBAAgB;EAAqB;CAChF,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,WAAW;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACvF,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,wBAAwB;EACvB,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,WAAW;EAAE,QAAQ;EAAa,QAAQ;EAAa,gBAAgB;EAAyB;CAChG;;;;;AAMD,SAAgB,kBAAkB,UAA2C;CAC5E,MAAM,OAAwB,EAAE;AAChC,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;EAC/C,MAAM,MAAM,gBAAgB,WAAW;AACvC,MAAI,IACH,MAAK,KAAK;GACT,WAAW,WAAW;GACtB,aAAa,WAAW;GACxB,GAAG;GACH,CAAC;;AAGJ,QAAO;;;;;;;;;;AAWR,SAAgB,qBAAqB,UAAyC;AAE7E,KAAI,CADgB,SAAS,SAAS,MAAM,MAAM,EAAE,WAAW,OAAO,aAAa,CACjE,QAAO;CAEzB,MAAM,OAAO,kBAAkB,SAAS;AACxC,KAAI,KAAK,WAAW,EAAG,QAAO;AAS9B,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAPa,KAClB,KACC,MACA,uBAAuB,EAAE,OAAO,KAAK,EAAE,OAAO,QAAQ,EAAE,eAAe,wBACxE,CACA,KAAK,KAAK,CAkDC;;;;;mBAKK,KAAK,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
2
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
2
|
//#region src/generators/prometheus.ts
|
|
4
3
|
/**
|
|
5
4
|
* Well-known metrics endpoints for services.
|
|
@@ -103,7 +102,7 @@ scrape_configs:
|
|
|
103
102
|
sections.push("");
|
|
104
103
|
return sections.join("\n");
|
|
105
104
|
}
|
|
106
|
-
|
|
107
105
|
//#endregion
|
|
108
106
|
exports.generatePrometheusConfig = generatePrometheusConfig;
|
|
107
|
+
|
|
109
108
|
//# sourceMappingURL=prometheus.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prometheus.cjs","names":[],"sources":["../../src/generators/prometheus.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Well-known metrics endpoints for services.\n *\n * Services that expose Prometheus-compatible metrics are listed here\n * with their metrics path and port.\n */\nconst metricsEndpoints: Record<string, { path: string; port: number }> = {\n\tredis: { path: \"/metrics\", port: 9121 },\n\tpostgresql: { path: \"/metrics\", port: 9187 },\n\tminio: { path: \"/minio/v2/metrics/cluster\", port: 9000 },\n\tn8n: { path: \"/metrics\", port: 5678 },\n\tgrafana: { path: \"/metrics\", port: 3000 },\n\tcaddy: { path: \"/metrics\", port: 2019 },\n\ttraefik: { path: \"/metrics\", port: 8082 },\n\tqdrant: { path: \"/metrics\", port: 6333 },\n\t\"uptime-kuma\": { path: \"/metrics\", port: 3001 },\n\tollama: { path: \"/metrics\", port: 11434 },\n};\n\n/**\n * Generates a Prometheus configuration YAML file with scrape configs\n * for all services that expose metrics endpoints.\n *\n * @param resolved - The resolved service configuration\n * @returns The prometheus.yml content as a string\n */\nexport function generatePrometheusConfig(resolved: ResolverOutput): string {\n\tconst sections: string[] = [];\n\n\t// ── Header ──────────────────────────────────────────────────────────────\n\n\tsections.push(`# ═══════════════════════════════════════════════════════════════════════════════\n# Prometheus Configuration — Auto-generated by OpenClaw\n# ═══════════════════════════════════════════════════════════════════════════════\n\nglobal:\n scrape_interval: 15s\n evaluation_interval: 15s\n scrape_timeout: 10s\n\n# ─── Scrape Configs ──────────────────────────────────────────────────────────\n\nscrape_configs:\n # Prometheus self-monitoring\n - job_name: \"prometheus\"\n static_configs:\n - targets: [\"localhost:9090\"]\n labels:\n service: \"prometheus\"\n component: \"monitoring\"`);\n\n\t// ── Service Scrape Configs ───────────────────────────────────────────────\n\n\tfor (const { definition } of resolved.services) {\n\t\t// Skip prometheus itself (already included above)\n\t\tif (definition.id === \"prometheus\") continue;\n\n\t\tconst endpoint = metricsEndpoints[definition.id];\n\t\tif (!endpoint) continue;\n\n\t\tsections.push(`\n # ${definition.icon} ${definition.name}\n - job_name: \"${definition.id}\"\n metrics_path: \"${endpoint.path}\"\n static_configs:\n - targets: [\"${definition.id}:${endpoint.port}\"]\n labels:\n service: \"${definition.id}\"\n component: \"${definition.category}\"`);\n\t}\n\n\t// ── OpenClaw Gateway Metrics ────────────────────────────────────────────\n\n\tsections.push(`\n # 🐾 OpenClaw Gateway\n - job_name: \"openclaw-gateway\"\n metrics_path: \"/metrics\"\n static_configs:\n - targets: [\"openclaw:18789\"]\n labels:\n service: \"openclaw\"\n component: \"core\"`);\n\n\tsections.push(\"\");\n\n\treturn sections.join(\"\\n\");\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"prometheus.cjs","names":[],"sources":["../../src/generators/prometheus.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Well-known metrics endpoints for services.\n *\n * Services that expose Prometheus-compatible metrics are listed here\n * with their metrics path and port.\n */\nconst metricsEndpoints: Record<string, { path: string; port: number }> = {\n\tredis: { path: \"/metrics\", port: 9121 },\n\tpostgresql: { path: \"/metrics\", port: 9187 },\n\tminio: { path: \"/minio/v2/metrics/cluster\", port: 9000 },\n\tn8n: { path: \"/metrics\", port: 5678 },\n\tgrafana: { path: \"/metrics\", port: 3000 },\n\tcaddy: { path: \"/metrics\", port: 2019 },\n\ttraefik: { path: \"/metrics\", port: 8082 },\n\tqdrant: { path: \"/metrics\", port: 6333 },\n\t\"uptime-kuma\": { path: \"/metrics\", port: 3001 },\n\tollama: { path: \"/metrics\", port: 11434 },\n};\n\n/**\n * Generates a Prometheus configuration YAML file with scrape configs\n * for all services that expose metrics endpoints.\n *\n * @param resolved - The resolved service configuration\n * @returns The prometheus.yml content as a string\n */\nexport function generatePrometheusConfig(resolved: ResolverOutput): string {\n\tconst sections: string[] = [];\n\n\t// ── Header ──────────────────────────────────────────────────────────────\n\n\tsections.push(`# ═══════════════════════════════════════════════════════════════════════════════\n# Prometheus Configuration — Auto-generated by OpenClaw\n# ═══════════════════════════════════════════════════════════════════════════════\n\nglobal:\n scrape_interval: 15s\n evaluation_interval: 15s\n scrape_timeout: 10s\n\n# ─── Scrape Configs ──────────────────────────────────────────────────────────\n\nscrape_configs:\n # Prometheus self-monitoring\n - job_name: \"prometheus\"\n static_configs:\n - targets: [\"localhost:9090\"]\n labels:\n service: \"prometheus\"\n component: \"monitoring\"`);\n\n\t// ── Service Scrape Configs ───────────────────────────────────────────────\n\n\tfor (const { definition } of resolved.services) {\n\t\t// Skip prometheus itself (already included above)\n\t\tif (definition.id === \"prometheus\") continue;\n\n\t\tconst endpoint = metricsEndpoints[definition.id];\n\t\tif (!endpoint) continue;\n\n\t\tsections.push(`\n # ${definition.icon} ${definition.name}\n - job_name: \"${definition.id}\"\n metrics_path: \"${endpoint.path}\"\n static_configs:\n - targets: [\"${definition.id}:${endpoint.port}\"]\n labels:\n service: \"${definition.id}\"\n component: \"${definition.category}\"`);\n\t}\n\n\t// ── OpenClaw Gateway Metrics ────────────────────────────────────────────\n\n\tsections.push(`\n # 🐾 OpenClaw Gateway\n - job_name: \"openclaw-gateway\"\n metrics_path: \"/metrics\"\n static_configs:\n - targets: [\"openclaw:18789\"]\n labels:\n service: \"openclaw\"\n component: \"core\"`);\n\n\tsections.push(\"\");\n\n\treturn sections.join(\"\\n\");\n}\n"],"mappings":";;;;;;;;AAQA,MAAM,mBAAmE;CACxE,OAAO;EAAE,MAAM;EAAY,MAAM;EAAM;CACvC,YAAY;EAAE,MAAM;EAAY,MAAM;EAAM;CAC5C,OAAO;EAAE,MAAM;EAA6B,MAAM;EAAM;CACxD,KAAK;EAAE,MAAM;EAAY,MAAM;EAAM;CACrC,SAAS;EAAE,MAAM;EAAY,MAAM;EAAM;CACzC,OAAO;EAAE,MAAM;EAAY,MAAM;EAAM;CACvC,SAAS;EAAE,MAAM;EAAY,MAAM;EAAM;CACzC,QAAQ;EAAE,MAAM;EAAY,MAAM;EAAM;CACxC,eAAe;EAAE,MAAM;EAAY,MAAM;EAAM;CAC/C,QAAQ;EAAE,MAAM;EAAY,MAAM;EAAO;CACzC;;;;;;;;AASD,SAAgB,yBAAyB,UAAkC;CAC1E,MAAM,WAAqB,EAAE;AAI7B,UAAS,KAAK;;;;;;;;;;;;;;;;;;mCAkBoB;AAIlC,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;AAE/C,MAAI,WAAW,OAAO,aAAc;EAEpC,MAAM,WAAW,iBAAiB,WAAW;AAC7C,MAAI,CAAC,SAAU;AAEf,WAAS,KAAK;MACV,WAAW,KAAK,GAAG,WAAW,KAAK;iBACxB,WAAW,GAAG;qBACV,SAAS,KAAK;;qBAEd,WAAW,GAAG,GAAG,SAAS,KAAK;;sBAE9B,WAAW,GAAG;wBACZ,WAAW,SAAS,GAAG;;AAK9C,UAAS,KAAK;;;;;;;;6BAQc;AAE5B,UAAS,KAAK,GAAG;AAEjB,QAAO,SAAS,KAAK,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prometheus.d.mts","names":[],"sources":["../../src/generators/prometheus.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"prometheus.d.mts","names":[],"sources":["../../src/generators/prometheus.ts"],"mappings":";;;;;;AA4BA;;;;iBAAgB,wBAAA,CAAyB,QAAA,EAAU,cAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
2
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
2
|
//#region src/generators/readme.ts
|
|
4
3
|
/**
|
|
5
4
|
* Generates a comprehensive README.md for the OpenClaw project.
|
|
@@ -280,7 +279,7 @@ Generated by [OpenClaw](https://openclaw.dev) • ${(/* @__PURE__ */ new Date())
|
|
|
280
279
|
`);
|
|
281
280
|
return sections.join("\n");
|
|
282
281
|
}
|
|
283
|
-
|
|
284
282
|
//#endregion
|
|
285
283
|
exports.generateReadme = generateReadme;
|
|
284
|
+
|
|
286
285
|
//# sourceMappingURL=readme.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.cjs","names":[],"sources":["../../src/generators/readme.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Options for README generation.\n */\nexport interface ReadmeOptions {\n\tprojectName: string;\n\tdomain?: string;\n\tproxy?: string;\n\t/** When \"bare-metal\", the stack uses native + Docker hybrid. */\n\tdeploymentType?: \"docker\" | \"bare-metal\" | \"local\";\n\t/** True when some services run natively on the host (bare-metal only). */\n\thasNativeServices?: boolean;\n\t/** How OpenClaw itself is installed: docker (container) or direct (host). */\n\topenclawInstallMethod?: \"docker\" | \"direct\";\n}\n\n/**\n * Generates a comprehensive README.md for the OpenClaw project.\n *\n * Includes: project description, service table, quick start instructions,\n * service URLs, skill packs, and scripts documentation.\n */\nexport function generateReadme(resolved: ResolverOutput, options: ReadmeOptions): string {\n\tconst { projectName, domain, proxy, deploymentType, hasNativeServices, openclawInstallMethod } =\n\t\toptions;\n\tconst isDirectInstall = openclawInstallMethod === \"direct\";\n\tconst sections: string[] = [];\n\n\t// ── Title & Description ─────────────────────────────────────────────────\n\n\tsections.push(`# ${projectName}\n\n> Self-hosted AI agent infrastructure powered by [OpenClaw](https://openclaw.dev).\n\nThis project provides a fully configured Docker Compose stack with ${resolved.services.length} services, ready to deploy on any server.${isDirectInstall ? \" OpenClaw itself runs directly on the host (not in Docker).\" : \"\"}\n${deploymentType === \"bare-metal\" && hasNativeServices ? \"\\n\\n**Bare-metal (native + Docker):** Some services run natively on the host; the rest (including the OpenClaw gateway) run in Docker. Use the top-level `install.sh` or `install.ps1` to install/start native services first, then start the Docker stack.\" : \"\"}\n\n---`);\n\n\t// ── Service Table ────────────────────────────────────────────────────────\n\n\tconst serviceRows = resolved.services\n\t\t.map(({ definition }) => {\n\t\t\tconst mainPort = definition.ports.find((p) => p.exposed);\n\t\t\tconst url = mainPort\n\t\t\t\t? domain\n\t\t\t\t\t? `https://${definition.id}.${domain}`\n\t\t\t\t\t: `http://localhost:${mainPort.host}`\n\t\t\t\t: \"N/A (internal)\";\n\t\t\treturn `| ${definition.icon} | **${definition.name}** | ${url} | ${definition.description} |`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tsections.push(`## Services\n\n| | Service | URL | Description |\n|---|---------|-----|-------------|\n${serviceRows}\n`);\n\n\t// ── Quick Start ──────────────────────────────────────────────────────────\n\n\tsections.push(`## Quick Start\n\n### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/) (v24+)\n- [Docker Compose](https://docs.docker.com/compose/install/) (v2+)\n- At least ${Math.ceil(resolved.estimatedMemoryMB / 1024)}GB of RAM available\n${isDirectInstall ? \"- Node.js 22+ (installed automatically by the OpenClaw installer)\" : \"\"}\n\n### 1. Extract the ZIP\n\n\\`\\`\\`bash\nunzip ${projectName}.zip\ncd ${projectName}\n\\`\\`\\`\n\n### 2. Configure Environment\n\n\\`\\`\\`bash\ncp .env.example .env\n\\`\\`\\`\n\nEdit \\`.env\\` and update any values as needed. Secret values have been pre-generated — review and change them for production use.\n${\n\tisDirectInstall\n\t\t? `\n### 3. Install OpenClaw on the Host\n\n\\`\\`\\`bash\nchmod +x scripts/install-openclaw.sh\n./scripts/install-openclaw.sh\n\\`\\`\\`\n\nThis downloads and runs the official installer, which sets up Node.js 22+ and OpenClaw globally.\n\n### 4. Start Companion Services\n\n\\`\\`\\`bash\ndocker compose up -d\n\\`\\`\\`\n\n### 5. Run Onboarding\n\n\\`\\`\\`bash\nopenclaw onboard\n\\`\\`\\`\n`\n\t\t: `\n### 3. Start Services\n\n\\`\\`\\`bash\ndocker compose up -d\n\\`\\`\\`\n\nOr use the provided start script:\n\n\\`\\`\\`bash\nchmod +x scripts/*.sh\n./scripts/start.sh\n\\`\\`\\`\n\n### 4. Check Status\n\n\\`\\`\\`bash\ndocker compose ps\n\\`\\`\\`\n\n### 5. View Logs\n\n\\`\\`\\`bash\ndocker compose logs -f openclaw-gateway\n\\`\\`\\`\n`\n}\nAll services should show a healthy status within 1–2 minutes.\n`);\n\n\t// ── Docker Compose Profiles ──────────────────────────────────────────────\n\n\tsections.push(`## Using Docker Compose Profiles\n\nYour stack may include profile-based compose files for optional service groups. Only the base services start by default — use profiles to activate additional groups:\n\n\\`\\`\\`bash\n# Start base services only\ndocker compose up -d\n\n# Start base + AI services (Ollama, Open WebUI, etc.)\ndocker compose -f docker-compose.yml -f docker-compose.ai.yml --profile ai up -d\n\n# Start base + monitoring (Grafana, Prometheus, Uptime Kuma)\ndocker compose -f docker-compose.yml -f docker-compose.monitoring.yml --profile monitoring up -d\n\n# Start base + AI + dev tools\ndocker compose -f docker-compose.yml -f docker-compose.ai.yml -f docker-compose.tools.yml --profile ai --profile tools up -d\n\\`\\`\\`\n\nAvailable profile files (if generated):\n| File | Profile | Services |\n|------|---------|----------|\n| \\`docker-compose.ai.yml\\` | \\`ai\\` | AI models, chat UIs, LLM platforms |\n| \\`docker-compose.media.yml\\` | \\`media\\` | FFmpeg, Remotion, Motion Canvas |\n| \\`docker-compose.monitoring.yml\\` | \\`monitoring\\` | Grafana, Prometheus, Uptime Kuma, analytics |\n| \\`docker-compose.tools.yml\\` | \\`tools\\` | Gitea, code-server, Portainer, coding agents |\n| \\`docker-compose.social.yml\\` | \\`social\\` | Postiz, Mixpost |\n| \\`docker-compose.knowledge.yml\\` | \\`knowledge\\` | Outline, Paperless-ngx, NocoDB |\n| \\`docker-compose.communication.yml\\` | \\`communication\\` | Matrix, Rocket.Chat, Mattermost |\n`);\n\n\t// ── Service URLs & Ports ─────────────────────────────────────────────────\n\n\tconst portRows = resolved.services\n\t\t.filter(({ definition }) => definition.ports.length > 0)\n\t\t.map(({ definition }) => {\n\t\t\tconst ports = definition.ports\n\t\t\t\t.map((p) => `\\`${p.host}\\` → \\`${p.container}\\` (${p.description})`)\n\t\t\t\t.join(\", \");\n\t\t\treturn `| ${definition.icon} ${definition.name} | ${ports} |`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tif (portRows) {\n\t\tsections.push(`## Ports\n\n| Service | Ports |\n|---------|-------|\n${portRows}\n`);\n\t}\n\n\t// ── Skill Packs ─────────────────────────────────────────────────────────\n\n\tconst allSkills = resolved.services.flatMap(({ definition }) =>\n\t\tdefinition.skills.map((s) => ({\n\t\t\tskillId: s.skillId,\n\t\t\tserviceName: definition.name,\n\t\t\tserviceIcon: definition.icon,\n\t\t})),\n\t);\n\n\tif (allSkills.length > 0) {\n\t\tconst skillRows = allSkills\n\t\t\t.map((s) => `| \\`${s.skillId}\\` | ${s.serviceIcon} ${s.serviceName} |`)\n\t\t\t.join(\"\\n\");\n\n\t\tsections.push(`## Skills\n\nThe following OpenClaw skills are automatically installed:\n\n| Skill | Service |\n|-------|---------|\n${skillRows}\n\nSkills are located in \\`openclaw/workspace/skills/\\`. Each skill provides a \\`SKILL.md\\` with usage instructions.\n`);\n\t}\n\n\t// ── Onboarding & Channels ──────────────────────────────────────────────\n\t// Based on openclaw_docker-setup.sh post-deploy instructions\n\n\tif (isDirectInstall) {\n\t\tsections.push(`## OpenClaw Setup\n\nOpenClaw is installed directly on the host (not in Docker). After running the install script:\\n\n\\`\\`\\`bash\n# Run onboarding to configure the gateway\nopenclaw onboard\n\n# Launch the dashboard\nopenclaw dashboard\n\\`\\`\\`\n\nWhen prompted during onboarding:\n- **Gateway bind:** \\`lan\\`\n- **Gateway auth:** \\`token\\`\n- **Gateway token:** (use the value from \\`.env\\` → \\`OPENCLAW_GATEWAY_TOKEN\\`)\n\n### Connect Messaging Channels (optional)\n\n\\`\\`\\`bash\n# WhatsApp (scan QR code)\nopenclaw channels login\n\n# Telegram\nopenclaw channels add --channel telegram --token <BOT_TOKEN>\n\n# Discord\nopenclaw channels add --channel discord --token <BOT_TOKEN>\n\\`\\`\\`\n\nSee [Channel Docs](https://docs.openclaw.ai/channels) for more providers.\n`);\n\t} else {\n\t\tsections.push(`## Onboarding & Channel Setup\n\nAfter starting the stack, complete the gateway onboarding:\n\n\\`\\`\\`bash\n# Interactive onboarding (sets up gateway auth and config)\ndocker compose run --rm openclaw-cli onboard --no-install-daemon\n\\`\\`\\`\n\nWhen prompted:\n- **Gateway bind:** \\`lan\\`\n- **Gateway auth:** \\`token\\`\n- **Gateway token:** (use the value from \\`.env\\` → \\`OPENCLAW_GATEWAY_TOKEN\\`)\n- **Tailscale exposure:** Off\n- **Install Gateway daemon:** No\n\n### Connect Messaging Channels (optional)\n\n\\`\\`\\`bash\n# WhatsApp (scan QR code)\ndocker compose run --rm openclaw-cli channels login\n\n# Telegram\ndocker compose run --rm openclaw-cli channels add --channel telegram --token <BOT_TOKEN>\n\n# Discord\ndocker compose run --rm openclaw-cli channels add --channel discord --token <BOT_TOKEN>\n\\`\\`\\`\n\nSee [Channel Docs](https://docs.openclaw.ai/channels) for more providers.\n`);\n\t}\n\n\t// ── Proxy Configuration ─────────────────────────────────────────────────\n\n\tif (proxy && proxy !== \"none\") {\n\t\tconst proxyName = proxy === \"caddy\" ? \"Caddy\" : \"Traefik\";\n\t\tsections.push(`## Reverse Proxy\n\nThis stack uses **${proxyName}** as a reverse proxy.${domain ? ` All services are available under \\`${domain}\\`.` : \"\"}\n\n${proxy === \"caddy\" ? \"The Caddyfile is located at `config/Caddyfile`.\" : \"Traefik configuration is handled via Docker labels.\"}\n`);\n\t}\n\n\t// ── Scripts ──────────────────────────────────────────────────────────────\n\n\tsections.push(`## Management Scripts\n\n\\`\\`\\`bash\nchmod +x scripts/*.sh # Make scripts executable (first time only)\n\\`\\`\\`\n\n| Script | Description |\n|--------|-------------|\n| \\`./scripts/start.sh\\` | Validates .env, auto-generates gateway token, creates dirs, starts all services with health checks |\n| \\`./scripts/stop.sh\\` | Gracefully stops all services |\n| \\`./scripts/update.sh\\` | Pulls latest Docker images and restarts services |\n| \\`./scripts/backup.sh\\` | Backs up all named Docker volumes to timestamped archives |\n| \\`./scripts/status.sh\\` | Shows current service status, resource usage, and disk |\n`);\n\n\t// ── Data & Volumes ──────────────────────────────────────────────────────\n\n\tconst volumeRows = resolved.services.flatMap(({ definition }) =>\n\t\tdefinition.volumes.map((v) => ({\n\t\t\tname: v.name,\n\t\t\tpath: v.containerPath,\n\t\t\tdescription: v.description,\n\t\t\tserviceName: definition.name,\n\t\t})),\n\t);\n\n\tif (volumeRows.length > 0) {\n\t\tconst rows = volumeRows\n\t\t\t.map((v) => `| \\`${v.name}\\` | ${v.serviceName} | ${v.description} |`)\n\t\t\t.join(\"\\n\");\n\n\t\tsections.push(`## Volumes\n\n| Volume | Service | Description |\n|--------|---------|-------------|\n${rows}\n\n> **Tip:** Use \\`scripts/backup.sh\\` to back up all volumes before updates.\n`);\n\t}\n\n\t// ── Estimated Resources ─────────────────────────────────────────────────\n\n\tsections.push(`## Resource Estimates\n\n- **Services:** ${resolved.services.length}\n- **Estimated RAM:** ~${(resolved.estimatedMemoryMB / 1024).toFixed(1)}GB\n- **Recommended minimum:** ${Math.ceil(resolved.estimatedMemoryMB / 1024) + 2}GB RAM\n`);\n\n\t// ── Warnings ─────────────────────────────────────────────────────────────\n\n\tif (resolved.warnings.length > 0) {\n\t\tconst warningList = resolved.warnings.map((w) => `- ⚠️ ${w.message}`).join(\"\\n\");\n\n\t\tsections.push(`## Warnings\n\n${warningList}\n`);\n\t}\n\n\t// ── Footer ──────────────────────────────────────────────────────────────\n\n\tsections.push(`---\n\nGenerated by [OpenClaw](https://openclaw.dev) • ${new Date().toISOString().split(\"T\")[0]}\n`);\n\n\treturn sections.join(\"\\n\");\n}\n"],"mappings":";;;;;;;;;AAuBA,SAAgB,eAAe,UAA0B,SAAgC;CACxF,MAAM,EAAE,aAAa,QAAQ,OAAO,gBAAgB,mBAAmB,0BACtE;CACD,MAAM,kBAAkB,0BAA0B;CAClD,MAAM,WAAqB,EAAE;AAI7B,UAAS,KAAK,KAAK,YAAY;;;;qEAIqC,SAAS,SAAS,OAAO,2CAA2C,kBAAkB,gEAAgE,GAAG;EAC5N,mBAAmB,gBAAgB,oBAAoB,gQAAgQ,GAAG;;KAEvT;CAIJ,MAAM,cAAc,SAAS,SAC3B,KAAK,EAAE,iBAAiB;EACxB,MAAM,WAAW,WAAW,MAAM,MAAM,MAAM,EAAE,QAAQ;EACxD,MAAM,MAAM,WACT,SACC,WAAW,WAAW,GAAG,GAAG,WAC5B,oBAAoB,SAAS,SAC9B;AACH,SAAO,KAAK,WAAW,KAAK,OAAO,WAAW,KAAK,OAAO,IAAI,KAAK,WAAW,YAAY;GACzF,CACD,KAAK,KAAK;AAEZ,UAAS,KAAK;;;;EAIb,YAAY;EACZ;AAID,UAAS,KAAK;;;;;;aAMF,KAAK,KAAK,SAAS,oBAAoB,KAAK,CAAC;EACxD,kBAAkB,sEAAsE,GAAG;;;;;QAKrF,YAAY;KACf,YAAY;;;;;;;;;;EAWhB,kBACG;;;;;;;;;;;;;;;;;;;;;IAsBA;;;;;;;;;;;;;;;;;;;;;;;;;EA0BH;;EAEC;AAID,UAAS,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4Bb;CAID,MAAM,WAAW,SAAS,SACxB,QAAQ,EAAE,iBAAiB,WAAW,MAAM,SAAS,EAAE,CACvD,KAAK,EAAE,iBAAiB;EACxB,MAAM,QAAQ,WAAW,MACvB,KAAK,MAAM,KAAK,EAAE,KAAK,SAAS,EAAE,UAAU,MAAM,EAAE,YAAY,GAAG,CACnE,KAAK,KAAK;AACZ,SAAO,KAAK,WAAW,KAAK,GAAG,WAAW,KAAK,KAAK,MAAM;GACzD,CACD,KAAK,KAAK;AAEZ,KAAI,SACH,UAAS,KAAK;;;;EAId,SAAS;EACT;CAKD,MAAM,YAAY,SAAS,SAAS,SAAS,EAAE,iBAC9C,WAAW,OAAO,KAAK,OAAO;EAC7B,SAAS,EAAE;EACX,aAAa,WAAW;EACxB,aAAa,WAAW;EACxB,EAAE,CACH;AAED,KAAI,UAAU,SAAS,GAAG;EACzB,MAAM,YAAY,UAChB,KAAK,MAAM,OAAO,EAAE,QAAQ,OAAO,EAAE,YAAY,GAAG,EAAE,YAAY,IAAI,CACtE,KAAK,KAAK;AAEZ,WAAS,KAAK;;;;;;EAMd,UAAU;;;EAGV;;AAMD,KAAI,gBACH,UAAS,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8Bd;KAEA,UAAS,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8Bd;AAKD,KAAI,SAAS,UAAU,QAAQ;EAC9B,MAAM,YAAY,UAAU,UAAU,UAAU;AAChD,WAAS,KAAK;;oBAEI,UAAU,wBAAwB,SAAS,uCAAuC,OAAO,OAAO,GAAG;;EAErH,UAAU,UAAU,oDAAoD,sDAAsD;EAC9H;;AAKD,UAAS,KAAK;;;;;;;;;;;;;EAab;CAID,MAAM,aAAa,SAAS,SAAS,SAAS,EAAE,iBAC/C,WAAW,QAAQ,KAAK,OAAO;EAC9B,MAAM,EAAE;EACR,MAAM,EAAE;EACR,aAAa,EAAE;EACf,aAAa,WAAW;EACxB,EAAE,CACH;AAED,KAAI,WAAW,SAAS,GAAG;EAC1B,MAAM,OAAO,WACX,KAAK,MAAM,OAAO,EAAE,KAAK,OAAO,EAAE,YAAY,KAAK,EAAE,YAAY,IAAI,CACrE,KAAK,KAAK;AAEZ,WAAS,KAAK;;;;EAId,KAAK;;;EAGL;;AAKD,UAAS,KAAK;;kBAEG,SAAS,SAAS,OAAO;yBAClB,SAAS,oBAAoB,MAAM,QAAQ,EAAE,CAAC;6BAC1C,KAAK,KAAK,SAAS,oBAAoB,KAAK,GAAG,EAAE;EAC5E;AAID,KAAI,SAAS,SAAS,SAAS,GAAG;EACjC,MAAM,cAAc,SAAS,SAAS,KAAK,MAAM,QAAQ,EAAE,UAAU,CAAC,KAAK,KAAK;AAEhF,WAAS,KAAK;;EAEd,YAAY;EACZ;;AAKD,UAAS,KAAK;;mEAEmC,IAAI,MAAM,EAAC,aAAa,CAAC,MAAM,IAAI,CAAC,GAAG;EACvF;AAED,QAAO,SAAS,KAAK,KAAK"}
|
|
1
|
+
{"version":3,"file":"readme.cjs","names":[],"sources":["../../src/generators/readme.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Options for README generation.\n */\nexport interface ReadmeOptions {\n\tprojectName: string;\n\tdomain?: string;\n\tproxy?: string;\n\t/** When \"bare-metal\", the stack uses native + Docker hybrid. */\n\tdeploymentType?: \"docker\" | \"bare-metal\" | \"local\";\n\t/** True when some services run natively on the host (bare-metal only). */\n\thasNativeServices?: boolean;\n\t/** How OpenClaw itself is installed: docker (container) or direct (host). */\n\topenclawInstallMethod?: \"docker\" | \"direct\";\n}\n\n/**\n * Generates a comprehensive README.md for the OpenClaw project.\n *\n * Includes: project description, service table, quick start instructions,\n * service URLs, skill packs, and scripts documentation.\n */\nexport function generateReadme(resolved: ResolverOutput, options: ReadmeOptions): string {\n\tconst { projectName, domain, proxy, deploymentType, hasNativeServices, openclawInstallMethod } =\n\t\toptions;\n\tconst isDirectInstall = openclawInstallMethod === \"direct\";\n\tconst sections: string[] = [];\n\n\t// ── Title & Description ─────────────────────────────────────────────────\n\n\tsections.push(`# ${projectName}\n\n> Self-hosted AI agent infrastructure powered by [OpenClaw](https://openclaw.dev).\n\nThis project provides a fully configured Docker Compose stack with ${resolved.services.length} services, ready to deploy on any server.${isDirectInstall ? \" OpenClaw itself runs directly on the host (not in Docker).\" : \"\"}\n${deploymentType === \"bare-metal\" && hasNativeServices ? \"\\n\\n**Bare-metal (native + Docker):** Some services run natively on the host; the rest (including the OpenClaw gateway) run in Docker. Use the top-level `install.sh` or `install.ps1` to install/start native services first, then start the Docker stack.\" : \"\"}\n\n---`);\n\n\t// ── Service Table ────────────────────────────────────────────────────────\n\n\tconst serviceRows = resolved.services\n\t\t.map(({ definition }) => {\n\t\t\tconst mainPort = definition.ports.find((p) => p.exposed);\n\t\t\tconst url = mainPort\n\t\t\t\t? domain\n\t\t\t\t\t? `https://${definition.id}.${domain}`\n\t\t\t\t\t: `http://localhost:${mainPort.host}`\n\t\t\t\t: \"N/A (internal)\";\n\t\t\treturn `| ${definition.icon} | **${definition.name}** | ${url} | ${definition.description} |`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tsections.push(`## Services\n\n| | Service | URL | Description |\n|---|---------|-----|-------------|\n${serviceRows}\n`);\n\n\t// ── Quick Start ──────────────────────────────────────────────────────────\n\n\tsections.push(`## Quick Start\n\n### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/) (v24+)\n- [Docker Compose](https://docs.docker.com/compose/install/) (v2+)\n- At least ${Math.ceil(resolved.estimatedMemoryMB / 1024)}GB of RAM available\n${isDirectInstall ? \"- Node.js 22+ (installed automatically by the OpenClaw installer)\" : \"\"}\n\n### 1. Extract the ZIP\n\n\\`\\`\\`bash\nunzip ${projectName}.zip\ncd ${projectName}\n\\`\\`\\`\n\n### 2. Configure Environment\n\n\\`\\`\\`bash\ncp .env.example .env\n\\`\\`\\`\n\nEdit \\`.env\\` and update any values as needed. Secret values have been pre-generated — review and change them for production use.\n${\n\tisDirectInstall\n\t\t? `\n### 3. Install OpenClaw on the Host\n\n\\`\\`\\`bash\nchmod +x scripts/install-openclaw.sh\n./scripts/install-openclaw.sh\n\\`\\`\\`\n\nThis downloads and runs the official installer, which sets up Node.js 22+ and OpenClaw globally.\n\n### 4. Start Companion Services\n\n\\`\\`\\`bash\ndocker compose up -d\n\\`\\`\\`\n\n### 5. Run Onboarding\n\n\\`\\`\\`bash\nopenclaw onboard\n\\`\\`\\`\n`\n\t\t: `\n### 3. Start Services\n\n\\`\\`\\`bash\ndocker compose up -d\n\\`\\`\\`\n\nOr use the provided start script:\n\n\\`\\`\\`bash\nchmod +x scripts/*.sh\n./scripts/start.sh\n\\`\\`\\`\n\n### 4. Check Status\n\n\\`\\`\\`bash\ndocker compose ps\n\\`\\`\\`\n\n### 5. View Logs\n\n\\`\\`\\`bash\ndocker compose logs -f openclaw-gateway\n\\`\\`\\`\n`\n}\nAll services should show a healthy status within 1–2 minutes.\n`);\n\n\t// ── Docker Compose Profiles ──────────────────────────────────────────────\n\n\tsections.push(`## Using Docker Compose Profiles\n\nYour stack may include profile-based compose files for optional service groups. Only the base services start by default — use profiles to activate additional groups:\n\n\\`\\`\\`bash\n# Start base services only\ndocker compose up -d\n\n# Start base + AI services (Ollama, Open WebUI, etc.)\ndocker compose -f docker-compose.yml -f docker-compose.ai.yml --profile ai up -d\n\n# Start base + monitoring (Grafana, Prometheus, Uptime Kuma)\ndocker compose -f docker-compose.yml -f docker-compose.monitoring.yml --profile monitoring up -d\n\n# Start base + AI + dev tools\ndocker compose -f docker-compose.yml -f docker-compose.ai.yml -f docker-compose.tools.yml --profile ai --profile tools up -d\n\\`\\`\\`\n\nAvailable profile files (if generated):\n| File | Profile | Services |\n|------|---------|----------|\n| \\`docker-compose.ai.yml\\` | \\`ai\\` | AI models, chat UIs, LLM platforms |\n| \\`docker-compose.media.yml\\` | \\`media\\` | FFmpeg, Remotion, Motion Canvas |\n| \\`docker-compose.monitoring.yml\\` | \\`monitoring\\` | Grafana, Prometheus, Uptime Kuma, analytics |\n| \\`docker-compose.tools.yml\\` | \\`tools\\` | Gitea, code-server, Portainer, coding agents |\n| \\`docker-compose.social.yml\\` | \\`social\\` | Postiz, Mixpost |\n| \\`docker-compose.knowledge.yml\\` | \\`knowledge\\` | Outline, Paperless-ngx, NocoDB |\n| \\`docker-compose.communication.yml\\` | \\`communication\\` | Matrix, Rocket.Chat, Mattermost |\n`);\n\n\t// ── Service URLs & Ports ─────────────────────────────────────────────────\n\n\tconst portRows = resolved.services\n\t\t.filter(({ definition }) => definition.ports.length > 0)\n\t\t.map(({ definition }) => {\n\t\t\tconst ports = definition.ports\n\t\t\t\t.map((p) => `\\`${p.host}\\` → \\`${p.container}\\` (${p.description})`)\n\t\t\t\t.join(\", \");\n\t\t\treturn `| ${definition.icon} ${definition.name} | ${ports} |`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tif (portRows) {\n\t\tsections.push(`## Ports\n\n| Service | Ports |\n|---------|-------|\n${portRows}\n`);\n\t}\n\n\t// ── Skill Packs ─────────────────────────────────────────────────────────\n\n\tconst allSkills = resolved.services.flatMap(({ definition }) =>\n\t\tdefinition.skills.map((s) => ({\n\t\t\tskillId: s.skillId,\n\t\t\tserviceName: definition.name,\n\t\t\tserviceIcon: definition.icon,\n\t\t})),\n\t);\n\n\tif (allSkills.length > 0) {\n\t\tconst skillRows = allSkills\n\t\t\t.map((s) => `| \\`${s.skillId}\\` | ${s.serviceIcon} ${s.serviceName} |`)\n\t\t\t.join(\"\\n\");\n\n\t\tsections.push(`## Skills\n\nThe following OpenClaw skills are automatically installed:\n\n| Skill | Service |\n|-------|---------|\n${skillRows}\n\nSkills are located in \\`openclaw/workspace/skills/\\`. Each skill provides a \\`SKILL.md\\` with usage instructions.\n`);\n\t}\n\n\t// ── Onboarding & Channels ──────────────────────────────────────────────\n\t// Based on openclaw_docker-setup.sh post-deploy instructions\n\n\tif (isDirectInstall) {\n\t\tsections.push(`## OpenClaw Setup\n\nOpenClaw is installed directly on the host (not in Docker). After running the install script:\\n\n\\`\\`\\`bash\n# Run onboarding to configure the gateway\nopenclaw onboard\n\n# Launch the dashboard\nopenclaw dashboard\n\\`\\`\\`\n\nWhen prompted during onboarding:\n- **Gateway bind:** \\`lan\\`\n- **Gateway auth:** \\`token\\`\n- **Gateway token:** (use the value from \\`.env\\` → \\`OPENCLAW_GATEWAY_TOKEN\\`)\n\n### Connect Messaging Channels (optional)\n\n\\`\\`\\`bash\n# WhatsApp (scan QR code)\nopenclaw channels login\n\n# Telegram\nopenclaw channels add --channel telegram --token <BOT_TOKEN>\n\n# Discord\nopenclaw channels add --channel discord --token <BOT_TOKEN>\n\\`\\`\\`\n\nSee [Channel Docs](https://docs.openclaw.ai/channels) for more providers.\n`);\n\t} else {\n\t\tsections.push(`## Onboarding & Channel Setup\n\nAfter starting the stack, complete the gateway onboarding:\n\n\\`\\`\\`bash\n# Interactive onboarding (sets up gateway auth and config)\ndocker compose run --rm openclaw-cli onboard --no-install-daemon\n\\`\\`\\`\n\nWhen prompted:\n- **Gateway bind:** \\`lan\\`\n- **Gateway auth:** \\`token\\`\n- **Gateway token:** (use the value from \\`.env\\` → \\`OPENCLAW_GATEWAY_TOKEN\\`)\n- **Tailscale exposure:** Off\n- **Install Gateway daemon:** No\n\n### Connect Messaging Channels (optional)\n\n\\`\\`\\`bash\n# WhatsApp (scan QR code)\ndocker compose run --rm openclaw-cli channels login\n\n# Telegram\ndocker compose run --rm openclaw-cli channels add --channel telegram --token <BOT_TOKEN>\n\n# Discord\ndocker compose run --rm openclaw-cli channels add --channel discord --token <BOT_TOKEN>\n\\`\\`\\`\n\nSee [Channel Docs](https://docs.openclaw.ai/channels) for more providers.\n`);\n\t}\n\n\t// ── Proxy Configuration ─────────────────────────────────────────────────\n\n\tif (proxy && proxy !== \"none\") {\n\t\tconst proxyName = proxy === \"caddy\" ? \"Caddy\" : \"Traefik\";\n\t\tsections.push(`## Reverse Proxy\n\nThis stack uses **${proxyName}** as a reverse proxy.${domain ? ` All services are available under \\`${domain}\\`.` : \"\"}\n\n${proxy === \"caddy\" ? \"The Caddyfile is located at `config/Caddyfile`.\" : \"Traefik configuration is handled via Docker labels.\"}\n`);\n\t}\n\n\t// ── Scripts ──────────────────────────────────────────────────────────────\n\n\tsections.push(`## Management Scripts\n\n\\`\\`\\`bash\nchmod +x scripts/*.sh # Make scripts executable (first time only)\n\\`\\`\\`\n\n| Script | Description |\n|--------|-------------|\n| \\`./scripts/start.sh\\` | Validates .env, auto-generates gateway token, creates dirs, starts all services with health checks |\n| \\`./scripts/stop.sh\\` | Gracefully stops all services |\n| \\`./scripts/update.sh\\` | Pulls latest Docker images and restarts services |\n| \\`./scripts/backup.sh\\` | Backs up all named Docker volumes to timestamped archives |\n| \\`./scripts/status.sh\\` | Shows current service status, resource usage, and disk |\n`);\n\n\t// ── Data & Volumes ──────────────────────────────────────────────────────\n\n\tconst volumeRows = resolved.services.flatMap(({ definition }) =>\n\t\tdefinition.volumes.map((v) => ({\n\t\t\tname: v.name,\n\t\t\tpath: v.containerPath,\n\t\t\tdescription: v.description,\n\t\t\tserviceName: definition.name,\n\t\t})),\n\t);\n\n\tif (volumeRows.length > 0) {\n\t\tconst rows = volumeRows\n\t\t\t.map((v) => `| \\`${v.name}\\` | ${v.serviceName} | ${v.description} |`)\n\t\t\t.join(\"\\n\");\n\n\t\tsections.push(`## Volumes\n\n| Volume | Service | Description |\n|--------|---------|-------------|\n${rows}\n\n> **Tip:** Use \\`scripts/backup.sh\\` to back up all volumes before updates.\n`);\n\t}\n\n\t// ── Estimated Resources ─────────────────────────────────────────────────\n\n\tsections.push(`## Resource Estimates\n\n- **Services:** ${resolved.services.length}\n- **Estimated RAM:** ~${(resolved.estimatedMemoryMB / 1024).toFixed(1)}GB\n- **Recommended minimum:** ${Math.ceil(resolved.estimatedMemoryMB / 1024) + 2}GB RAM\n`);\n\n\t// ── Warnings ─────────────────────────────────────────────────────────────\n\n\tif (resolved.warnings.length > 0) {\n\t\tconst warningList = resolved.warnings.map((w) => `- ⚠️ ${w.message}`).join(\"\\n\");\n\n\t\tsections.push(`## Warnings\n\n${warningList}\n`);\n\t}\n\n\t// ── Footer ──────────────────────────────────────────────────────────────\n\n\tsections.push(`---\n\nGenerated by [OpenClaw](https://openclaw.dev) • ${new Date().toISOString().split(\"T\")[0]}\n`);\n\n\treturn sections.join(\"\\n\");\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.d.mts","names":[],"sources":["../../src/generators/readme.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"readme.d.mts","names":[],"sources":["../../src/generators/readme.ts"],"mappings":";;;;;;UAKiB,aAAA;EAChB,WAAA;EACA,MAAA;EACA,KAAA;EAFA;EAIA,cAAA;EAFA;EAIA,iBAAA;EAAA;EAEA,qBAAA;AAAA;;AASD;;;;;iBAAgB,cAAA,CAAe,QAAA,EAAU,cAAA,EAAgB,OAAA,EAAS,aAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
2
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
2
|
//#region src/generators/scripts.ts
|
|
4
3
|
/**
|
|
5
4
|
* Generates helper shell scripts for managing the OpenClaw Docker Compose stack.
|
|
@@ -347,7 +346,7 @@ docker network ls --filter "name=openclaw" --format "table {{.Name}}\\t{{.Driver
|
|
|
347
346
|
`;
|
|
348
347
|
return files;
|
|
349
348
|
}
|
|
350
|
-
|
|
351
349
|
//#endregion
|
|
352
350
|
exports.generateScripts = generateScripts;
|
|
351
|
+
|
|
353
352
|
//# sourceMappingURL=scripts.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts.cjs","names":[],"sources":["../../src/generators/scripts.ts"],"sourcesContent":["/**\n * Generates helper shell scripts for managing the OpenClaw Docker Compose stack.\n *\n * Returns a map of file paths (relative to project root) to file contents.\n */\nexport function generateScripts(): Record<string, string> {\n\tconst files: Record<string, string> = {};\n\n\t// ── scripts/start.sh ────────────────────────────────────────────────────\n\n\tfiles[\"scripts/start.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Start Script ──────────────────────────────────────────────────\n# Production-quality bootstrap: validates prerequisites, auto-generates secrets,\n# creates required directories, and starts all services via Docker Compose.\n# Modelled after the official docker-setup.sh patterns.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Starting services...\"\necho \"\"\n\n# ── Colour helpers (no-op when not a TTY) ────────────────────────────────────\nif [ -t 1 ]; then\n RED='\\\\033[0;31m'; GREEN='\\\\033[0;32m'; YELLOW='\\\\033[1;33m'; CYAN='\\\\033[0;36m'; NC='\\\\033[0m'\nelse\n RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''\nfi\n\ninfo() { echo -e \"\\${CYAN}ℹ $*\\${NC}\"; }\nok() { echo -e \"\\${GREEN}✅ $*\\${NC}\"; }\nwarn() { echo -e \"\\${YELLOW}⚠️ $*\\${NC}\"; }\nerr() { echo -e \"\\${RED}❌ $*\\${NC}\" >&2; }\n\n# ── Prerequisite checks ─────────────────────────────────────────────────────\n\nif ! command -v docker &> /dev/null; then\n err \"Docker is not installed. Please install Docker first.\"\n echo \" https://docs.docker.com/get-docker/\"\n exit 1\nfi\n\nif ! docker compose version &> /dev/null; then\n err \"Docker Compose (v2) is not available.\"\n echo \" https://docs.docker.com/compose/install/\"\n exit 1\nfi\n\nif ! docker info &> /dev/null 2>&1; then\n err \"Docker daemon is not running. Please start Docker.\"\n exit 1\nfi\n\n# ── Source .env if it exists ─────────────────────────────────────────────────\n\nif [ -f \".env\" ]; then\n info \"Loading existing .env file...\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\nelse\n warn \".env file not found — will create one from .env.example if available.\"\n if [ -f \".env.example\" ]; then\n cp .env.example .env\n info \"Created .env from .env.example\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\n fi\nfi\n\n# ── Auto-generate OPENCLAW_GATEWAY_TOKEN if missing ──────────────────────────\n\nif [ -z \"\\${OPENCLAW_GATEWAY_TOKEN:-}\" ]; then\n info \"Generating OPENCLAW_GATEWAY_TOKEN...\"\n if command -v openssl &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(openssl rand -hex 32)\"\n elif command -v python3 &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python3 -c 'import secrets; print(secrets.token_hex(32))')\"\n elif command -v python &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python -c 'import secrets; print(secrets.token_hex(32))')\"\n else\n err \"Cannot generate token: neither openssl nor python3 found.\"\n exit 1\n fi\n export OPENCLAW_GATEWAY_TOKEN\n\n # Persist into .env\n if [ -f \".env\" ]; then\n if grep -q \"^OPENCLAW_GATEWAY_TOKEN=\" .env 2>/dev/null; then\n sed -i.bak \"s|^OPENCLAW_GATEWAY_TOKEN=.*|OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}|\" .env && rm -f .env.bak\n else\n echo \"OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}\" >> .env\n fi\n fi\n ok \"Gateway token generated and saved.\"\nfi\n\n# ── Apply defaults for optional variables ────────────────────────────────────\n\nexport OPENCLAW_VERSION=\"\\${OPENCLAW_VERSION:-latest}\"\nexport OPENCLAW_GATEWAY_PORT=\"\\${OPENCLAW_GATEWAY_PORT:-18789}\"\nexport OPENCLAW_BRIDGE_PORT=\"\\${OPENCLAW_BRIDGE_PORT:-18790}\"\nexport OPENCLAW_GATEWAY_BIND=\"\\${OPENCLAW_GATEWAY_BIND:-lan}\"\nexport OPENCLAW_CONFIG_DIR=\"\\${OPENCLAW_CONFIG_DIR:-./openclaw/config}\"\nexport OPENCLAW_WORKSPACE_DIR=\"\\${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}\"\n\n# ── Create required host directories ────────────────────────────────────────\n\ninfo \"Ensuring host directories exist...\"\nmkdir -p \"\\${OPENCLAW_CONFIG_DIR}\"\nmkdir -p \"\\${OPENCLAW_WORKSPACE_DIR}\"\nok \"Directories ready: \\${OPENCLAW_CONFIG_DIR}, \\${OPENCLAW_WORKSPACE_DIR}\"\n\n# ── Check for empty secret values ────────────────────────────────────────────\n\nEMPTY_SECRETS=0\nwhile IFS='=' read -r key value; do\n [[ \"$key\" =~ ^#.*$ ]] && continue\n [[ -z \"$key\" ]] && continue\n if [[ \"$key\" =~ (PASSWORD|TOKEN|SECRET|SESSION_KEY|COOKIE) ]] && [[ -z \"\\${value:-}\" ]]; then\n warn \"Warning: $key is empty in .env\"\n EMPTY_SECRETS=$((EMPTY_SECRETS + 1))\n fi\ndone < .env 2>/dev/null || true\n\nif [ \"$EMPTY_SECRETS\" -gt 0 ]; then\n echo \"\"\n warn \"$EMPTY_SECRETS secret(s) are empty. Some services may not function until they are set.\"\n echo \"\"\nfi\n\n# ── Pull and start ───────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Pulling latest images...\"\ndocker compose pull --quiet 2>/dev/null || docker compose pull\n\necho \"\"\ninfo \"Starting services...\"\ndocker compose up -d --remove-orphans\n\n# ── Health-check loop ────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Waiting for services to become healthy...\"\nsleep 5\n\nRETRIES=0\nMAX_RETRIES=30\nwhile [ $RETRIES -lt $MAX_RETRIES ]; do\n UNHEALTHY=$(docker compose ps --format json 2>/dev/null | grep -c '\"unhealthy\"' || true)\n STARTING=$(docker compose ps --format json 2>/dev/null | grep -c '\"starting\"' || true)\n\n if [ \"$UNHEALTHY\" -eq 0 ] && [ \"$STARTING\" -eq 0 ]; then\n break\n fi\n\n RETRIES=$((RETRIES + 1))\n sleep 2\ndone\n\necho \"\"\ndocker compose ps\necho \"\"\n\nif [ $RETRIES -ge $MAX_RETRIES ]; then\n warn \"Some services may still be starting. Check: docker compose ps\"\nelse\n ok \"All services are running!\"\nfi\n\n# ── Print service URLs & token ───────────────────────────────────────────────\n\nGATEWAY_HOST=\"localhost\"\nif [ \"\\${OPENCLAW_GATEWAY_BIND}\" = \"lan\" ]; then\n GATEWAY_HOST=\"0.0.0.0\"\nfi\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \" 🐾 OpenClaw is ready!\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \"\"\necho \" Gateway URL: http://\\${GATEWAY_HOST}:\\${OPENCLAW_GATEWAY_PORT}\"\necho \" Bridge (WebSocket): ws://\\${GATEWAY_HOST}:\\${OPENCLAW_BRIDGE_PORT}\"\necho \" Config directory: \\${OPENCLAW_CONFIG_DIR}\"\necho \" Workspace directory:\\${OPENCLAW_WORKSPACE_DIR}\"\necho \"\"\necho \" Gateway Token: \\${OPENCLAW_GATEWAY_TOKEN}\"\necho \"\"\necho \" Manage:\"\necho \" Stop: ./scripts/stop.sh\"\necho \" Status: ./scripts/status.sh\"\necho \" Update: ./scripts/update.sh\"\necho \" Logs: docker compose logs -f\"\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\n`;\n\n\t// ── scripts/stop.sh ─────────────────────────────────────────────────────\n\n\tfiles[\"scripts/stop.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Stop Script ───────────────────────────────────────────────────\n# Gracefully stops all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Stopping services...\"\necho \"\"\n\n# Graceful shutdown with timeout\ndocker compose down --timeout 30\n\necho \"\"\necho \"✅ All services stopped.\"\n`;\n\n\t// ── scripts/update.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/update.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Update Script ─────────────────────────────────────────────────\n# Pulls latest images and restarts services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Updating services...\"\necho \"\"\n\n# Pull latest images\necho \"📦 Pulling latest images...\"\ndocker compose pull\n\necho \"\"\necho \"🔄 Restarting services with new images...\"\ndocker compose up -d --remove-orphans\n\necho \"\"\necho \"⏳ Waiting for services to stabilize...\"\nsleep 10\n\ndocker compose ps\n\necho \"\"\necho \"✅ Update complete!\"\n`;\n\n\t// ── scripts/backup.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/backup.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Backup Script ─────────────────────────────────────────────────\n# Backs up all named Docker volumes to a timestamped directory.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\nBACKUP_DIR=\"$PROJECT_DIR/backups/$TIMESTAMP\"\nmkdir -p \"$BACKUP_DIR\"\n\necho \"🐾 OpenClaw — Backing up volumes...\"\necho \" Backup directory: $BACKUP_DIR\"\necho \"\"\n\n# Get project name from docker compose\nPROJECT_NAME=$(docker compose config --format json 2>/dev/null | grep -o '\"name\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4 || echo \"openclaw\")\n\n# List all volumes for this project\nVOLUMES=$(docker volume ls --filter \"name=\\${PROJECT_NAME}\" --format \"{{.Name}}\" 2>/dev/null || true)\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"⚠️ No volumes found for project: $PROJECT_NAME\"\n echo \" Trying to list all openclaw volumes...\"\n VOLUMES=$(docker volume ls --filter \"name=openclaw\" --format \"{{.Name}}\" 2>/dev/null || true)\nfi\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"❌ No volumes found to back up.\"\n exit 1\nfi\n\nBACKED_UP=0\nfor VOLUME in $VOLUMES; do\n echo \"📦 Backing up: $VOLUME\"\n docker run --rm \\\\\n -v \"\\${VOLUME}:/source:ro\" \\\\\n -v \"$BACKUP_DIR:/backup\" \\\\\n alpine tar czf \"/backup/\\${VOLUME}.tar.gz\" -C /source .\n\n SIZE=$(du -sh \"$BACKUP_DIR/\\${VOLUME}.tar.gz\" | cut -f1)\n echo \" ✓ $VOLUME ($SIZE)\"\n BACKED_UP=$((BACKED_UP + 1))\ndone\n\nTOTAL_SIZE=$(du -sh \"$BACKUP_DIR\" | cut -f1)\necho \"\"\necho \"✅ Backed up $BACKED_UP volume(s) ($TOTAL_SIZE total)\"\necho \" Location: $BACKUP_DIR\"\n`;\n\n\t// ── scripts/status.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/status.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Status Script ─────────────────────────────────────────────────\n# Shows the current status of all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Service Status\"\necho \"\"\n\n# Show compose status\ndocker compose ps\n\necho \"\"\necho \"── Resource Usage ──────────────────────────────────────────────────────\"\necho \"\"\n\n# Show resource usage\ndocker compose top 2>/dev/null || true\n\necho \"\"\necho \"── Disk Usage ─────────────────────────────────────────────────────────\"\necho \"\"\n\n# Show volume sizes\ndocker system df -v 2>/dev/null | head -30 || docker system df 2>/dev/null || true\n\necho \"\"\necho \"── Network ────────────────────────────────────────────────────────────\"\necho \"\"\n\ndocker network ls --filter \"name=openclaw\" --format \"table {{.Name}}\\\\t{{.Driver}}\\\\t{{.Scope}}\" 2>/dev/null || true\n`;\n\n\treturn files;\n}\n"],"mappings":";;;;;;;;AAKA,SAAgB,kBAA0C;CACzD,MAAM,QAAgC,EAAE;AAIxC,OAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsM5B,OAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;AAuB3B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkC7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyD7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsC7B,QAAO"}
|
|
1
|
+
{"version":3,"file":"scripts.cjs","names":[],"sources":["../../src/generators/scripts.ts"],"sourcesContent":["/**\n * Generates helper shell scripts for managing the OpenClaw Docker Compose stack.\n *\n * Returns a map of file paths (relative to project root) to file contents.\n */\nexport function generateScripts(): Record<string, string> {\n\tconst files: Record<string, string> = {};\n\n\t// ── scripts/start.sh ────────────────────────────────────────────────────\n\n\tfiles[\"scripts/start.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Start Script ──────────────────────────────────────────────────\n# Production-quality bootstrap: validates prerequisites, auto-generates secrets,\n# creates required directories, and starts all services via Docker Compose.\n# Modelled after the official docker-setup.sh patterns.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Starting services...\"\necho \"\"\n\n# ── Colour helpers (no-op when not a TTY) ────────────────────────────────────\nif [ -t 1 ]; then\n RED='\\\\033[0;31m'; GREEN='\\\\033[0;32m'; YELLOW='\\\\033[1;33m'; CYAN='\\\\033[0;36m'; NC='\\\\033[0m'\nelse\n RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''\nfi\n\ninfo() { echo -e \"\\${CYAN}ℹ $*\\${NC}\"; }\nok() { echo -e \"\\${GREEN}✅ $*\\${NC}\"; }\nwarn() { echo -e \"\\${YELLOW}⚠️ $*\\${NC}\"; }\nerr() { echo -e \"\\${RED}❌ $*\\${NC}\" >&2; }\n\n# ── Prerequisite checks ─────────────────────────────────────────────────────\n\nif ! command -v docker &> /dev/null; then\n err \"Docker is not installed. Please install Docker first.\"\n echo \" https://docs.docker.com/get-docker/\"\n exit 1\nfi\n\nif ! docker compose version &> /dev/null; then\n err \"Docker Compose (v2) is not available.\"\n echo \" https://docs.docker.com/compose/install/\"\n exit 1\nfi\n\nif ! docker info &> /dev/null 2>&1; then\n err \"Docker daemon is not running. Please start Docker.\"\n exit 1\nfi\n\n# ── Source .env if it exists ─────────────────────────────────────────────────\n\nif [ -f \".env\" ]; then\n info \"Loading existing .env file...\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\nelse\n warn \".env file not found — will create one from .env.example if available.\"\n if [ -f \".env.example\" ]; then\n cp .env.example .env\n info \"Created .env from .env.example\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\n fi\nfi\n\n# ── Auto-generate OPENCLAW_GATEWAY_TOKEN if missing ──────────────────────────\n\nif [ -z \"\\${OPENCLAW_GATEWAY_TOKEN:-}\" ]; then\n info \"Generating OPENCLAW_GATEWAY_TOKEN...\"\n if command -v openssl &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(openssl rand -hex 32)\"\n elif command -v python3 &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python3 -c 'import secrets; print(secrets.token_hex(32))')\"\n elif command -v python &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python -c 'import secrets; print(secrets.token_hex(32))')\"\n else\n err \"Cannot generate token: neither openssl nor python3 found.\"\n exit 1\n fi\n export OPENCLAW_GATEWAY_TOKEN\n\n # Persist into .env\n if [ -f \".env\" ]; then\n if grep -q \"^OPENCLAW_GATEWAY_TOKEN=\" .env 2>/dev/null; then\n sed -i.bak \"s|^OPENCLAW_GATEWAY_TOKEN=.*|OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}|\" .env && rm -f .env.bak\n else\n echo \"OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}\" >> .env\n fi\n fi\n ok \"Gateway token generated and saved.\"\nfi\n\n# ── Apply defaults for optional variables ────────────────────────────────────\n\nexport OPENCLAW_VERSION=\"\\${OPENCLAW_VERSION:-latest}\"\nexport OPENCLAW_GATEWAY_PORT=\"\\${OPENCLAW_GATEWAY_PORT:-18789}\"\nexport OPENCLAW_BRIDGE_PORT=\"\\${OPENCLAW_BRIDGE_PORT:-18790}\"\nexport OPENCLAW_GATEWAY_BIND=\"\\${OPENCLAW_GATEWAY_BIND:-lan}\"\nexport OPENCLAW_CONFIG_DIR=\"\\${OPENCLAW_CONFIG_DIR:-./openclaw/config}\"\nexport OPENCLAW_WORKSPACE_DIR=\"\\${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}\"\n\n# ── Create required host directories ────────────────────────────────────────\n\ninfo \"Ensuring host directories exist...\"\nmkdir -p \"\\${OPENCLAW_CONFIG_DIR}\"\nmkdir -p \"\\${OPENCLAW_WORKSPACE_DIR}\"\nok \"Directories ready: \\${OPENCLAW_CONFIG_DIR}, \\${OPENCLAW_WORKSPACE_DIR}\"\n\n# ── Check for empty secret values ────────────────────────────────────────────\n\nEMPTY_SECRETS=0\nwhile IFS='=' read -r key value; do\n [[ \"$key\" =~ ^#.*$ ]] && continue\n [[ -z \"$key\" ]] && continue\n if [[ \"$key\" =~ (PASSWORD|TOKEN|SECRET|SESSION_KEY|COOKIE) ]] && [[ -z \"\\${value:-}\" ]]; then\n warn \"Warning: $key is empty in .env\"\n EMPTY_SECRETS=$((EMPTY_SECRETS + 1))\n fi\ndone < .env 2>/dev/null || true\n\nif [ \"$EMPTY_SECRETS\" -gt 0 ]; then\n echo \"\"\n warn \"$EMPTY_SECRETS secret(s) are empty. Some services may not function until they are set.\"\n echo \"\"\nfi\n\n# ── Pull and start ───────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Pulling latest images...\"\ndocker compose pull --quiet 2>/dev/null || docker compose pull\n\necho \"\"\ninfo \"Starting services...\"\ndocker compose up -d --remove-orphans\n\n# ── Health-check loop ────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Waiting for services to become healthy...\"\nsleep 5\n\nRETRIES=0\nMAX_RETRIES=30\nwhile [ $RETRIES -lt $MAX_RETRIES ]; do\n UNHEALTHY=$(docker compose ps --format json 2>/dev/null | grep -c '\"unhealthy\"' || true)\n STARTING=$(docker compose ps --format json 2>/dev/null | grep -c '\"starting\"' || true)\n\n if [ \"$UNHEALTHY\" -eq 0 ] && [ \"$STARTING\" -eq 0 ]; then\n break\n fi\n\n RETRIES=$((RETRIES + 1))\n sleep 2\ndone\n\necho \"\"\ndocker compose ps\necho \"\"\n\nif [ $RETRIES -ge $MAX_RETRIES ]; then\n warn \"Some services may still be starting. Check: docker compose ps\"\nelse\n ok \"All services are running!\"\nfi\n\n# ── Print service URLs & token ───────────────────────────────────────────────\n\nGATEWAY_HOST=\"localhost\"\nif [ \"\\${OPENCLAW_GATEWAY_BIND}\" = \"lan\" ]; then\n GATEWAY_HOST=\"0.0.0.0\"\nfi\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \" 🐾 OpenClaw is ready!\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \"\"\necho \" Gateway URL: http://\\${GATEWAY_HOST}:\\${OPENCLAW_GATEWAY_PORT}\"\necho \" Bridge (WebSocket): ws://\\${GATEWAY_HOST}:\\${OPENCLAW_BRIDGE_PORT}\"\necho \" Config directory: \\${OPENCLAW_CONFIG_DIR}\"\necho \" Workspace directory:\\${OPENCLAW_WORKSPACE_DIR}\"\necho \"\"\necho \" Gateway Token: \\${OPENCLAW_GATEWAY_TOKEN}\"\necho \"\"\necho \" Manage:\"\necho \" Stop: ./scripts/stop.sh\"\necho \" Status: ./scripts/status.sh\"\necho \" Update: ./scripts/update.sh\"\necho \" Logs: docker compose logs -f\"\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\n`;\n\n\t// ── scripts/stop.sh ─────────────────────────────────────────────────────\n\n\tfiles[\"scripts/stop.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Stop Script ───────────────────────────────────────────────────\n# Gracefully stops all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Stopping services...\"\necho \"\"\n\n# Graceful shutdown with timeout\ndocker compose down --timeout 30\n\necho \"\"\necho \"✅ All services stopped.\"\n`;\n\n\t// ── scripts/update.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/update.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Update Script ─────────────────────────────────────────────────\n# Pulls latest images and restarts services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Updating services...\"\necho \"\"\n\n# Pull latest images\necho \"📦 Pulling latest images...\"\ndocker compose pull\n\necho \"\"\necho \"🔄 Restarting services with new images...\"\ndocker compose up -d --remove-orphans\n\necho \"\"\necho \"⏳ Waiting for services to stabilize...\"\nsleep 10\n\ndocker compose ps\n\necho \"\"\necho \"✅ Update complete!\"\n`;\n\n\t// ── scripts/backup.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/backup.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Backup Script ─────────────────────────────────────────────────\n# Backs up all named Docker volumes to a timestamped directory.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\nBACKUP_DIR=\"$PROJECT_DIR/backups/$TIMESTAMP\"\nmkdir -p \"$BACKUP_DIR\"\n\necho \"🐾 OpenClaw — Backing up volumes...\"\necho \" Backup directory: $BACKUP_DIR\"\necho \"\"\n\n# Get project name from docker compose\nPROJECT_NAME=$(docker compose config --format json 2>/dev/null | grep -o '\"name\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4 || echo \"openclaw\")\n\n# List all volumes for this project\nVOLUMES=$(docker volume ls --filter \"name=\\${PROJECT_NAME}\" --format \"{{.Name}}\" 2>/dev/null || true)\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"⚠️ No volumes found for project: $PROJECT_NAME\"\n echo \" Trying to list all openclaw volumes...\"\n VOLUMES=$(docker volume ls --filter \"name=openclaw\" --format \"{{.Name}}\" 2>/dev/null || true)\nfi\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"❌ No volumes found to back up.\"\n exit 1\nfi\n\nBACKED_UP=0\nfor VOLUME in $VOLUMES; do\n echo \"📦 Backing up: $VOLUME\"\n docker run --rm \\\\\n -v \"\\${VOLUME}:/source:ro\" \\\\\n -v \"$BACKUP_DIR:/backup\" \\\\\n alpine tar czf \"/backup/\\${VOLUME}.tar.gz\" -C /source .\n\n SIZE=$(du -sh \"$BACKUP_DIR/\\${VOLUME}.tar.gz\" | cut -f1)\n echo \" ✓ $VOLUME ($SIZE)\"\n BACKED_UP=$((BACKED_UP + 1))\ndone\n\nTOTAL_SIZE=$(du -sh \"$BACKUP_DIR\" | cut -f1)\necho \"\"\necho \"✅ Backed up $BACKED_UP volume(s) ($TOTAL_SIZE total)\"\necho \" Location: $BACKUP_DIR\"\n`;\n\n\t// ── scripts/status.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/status.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Status Script ─────────────────────────────────────────────────\n# Shows the current status of all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Service Status\"\necho \"\"\n\n# Show compose status\ndocker compose ps\n\necho \"\"\necho \"── Resource Usage ──────────────────────────────────────────────────────\"\necho \"\"\n\n# Show resource usage\ndocker compose top 2>/dev/null || true\n\necho \"\"\necho \"── Disk Usage ─────────────────────────────────────────────────────────\"\necho \"\"\n\n# Show volume sizes\ndocker system df -v 2>/dev/null | head -30 || docker system df 2>/dev/null || true\n\necho \"\"\necho \"── Network ────────────────────────────────────────────────────────────\"\necho \"\"\n\ndocker network ls --filter \"name=openclaw\" --format \"table {{.Name}}\\\\t{{.Driver}}\\\\t{{.Scope}}\" 2>/dev/null || true\n`;\n\n\treturn files;\n}\n"],"mappings":";;;;;;;AAKA,SAAgB,kBAA0C;CACzD,MAAM,QAAgC,EAAE;AAIxC,OAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsM5B,OAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;AAuB3B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkC7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyD7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsC7B,QAAO"}
|