@better-openclaw/core 1.0.26 → 1.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -7
- package/dist/addon-stack.cjs +41 -28
- package/dist/addon-stack.cjs.map +1 -1
- package/dist/addon-stack.d.cts +1 -1
- package/dist/addon-stack.d.cts.map +1 -1
- package/dist/addon-stack.d.mts +1 -1
- package/dist/addon-stack.d.mts.map +1 -1
- package/dist/addon-stack.mjs +40 -27
- package/dist/addon-stack.mjs.map +1 -1
- package/dist/addon-stack.test.cjs +14 -14
- package/dist/addon-stack.test.cjs.map +1 -1
- package/dist/addon-stack.test.mjs +13 -13
- package/dist/addon-stack.test.mjs.map +1 -1
- package/dist/bare-metal-partition.d.cts +1 -1
- package/dist/bare-metal-partition.d.mts +1 -1
- package/dist/bare-metal-partition.test.cjs +1 -1
- package/dist/bare-metal-partition.test.mjs +1 -1
- package/dist/callback-sink-CdMKYayY.d.mts +15 -0
- package/dist/callback-sink-CdMKYayY.d.mts.map +1 -0
- package/dist/callback-sink-iNThWRnQ.d.cts +15 -0
- package/dist/callback-sink-iNThWRnQ.d.cts.map +1 -0
- package/dist/claude-code-fw-CrbAlzTM.d.mts +7 -0
- package/dist/claude-code-fw-CrbAlzTM.d.mts.map +1 -0
- package/dist/claude-code-fw-dKYH2prH.d.cts +7 -0
- package/dist/claude-code-fw-dKYH2prH.d.cts.map +1 -0
- package/dist/codex-fw-Ct8q4pzo.d.mts +7 -0
- package/dist/codex-fw-Ct8q4pzo.d.mts.map +1 -0
- package/dist/codex-fw-l7Ku8ZI8.d.cts +7 -0
- package/dist/codex-fw-l7Ku8ZI8.d.cts.map +1 -0
- package/dist/compose-validation.test.cjs +1 -1
- package/dist/composer.cjs +89 -129
- package/dist/composer.cjs.map +1 -1
- package/dist/composer.d.cts +3 -3
- package/dist/composer.d.cts.map +1 -1
- package/dist/composer.d.mts +3 -3
- package/dist/composer.d.mts.map +1 -1
- package/dist/composer.mjs +88 -128
- package/dist/composer.mjs.map +1 -1
- package/dist/composer.snapshot.test.cjs +1 -1
- package/dist/composer.snapshot.test.mjs +1 -1
- package/dist/composer.test.cjs +53 -2
- package/dist/composer.test.cjs.map +1 -1
- package/dist/composer.test.mjs +52 -1
- package/dist/composer.test.mjs.map +1 -1
- package/dist/console-sink-BHQpRyCt.d.cts +13 -0
- package/dist/console-sink-BHQpRyCt.d.cts.map +1 -0
- package/dist/console-sink-bouG_M1K.d.mts +13 -0
- package/dist/console-sink-bouG_M1K.d.mts.map +1 -0
- package/dist/{coolify-BVGGcMrT.d.mts → coolify-D5E0z01M.d.mts} +2 -2
- package/dist/{coolify-BVGGcMrT.d.mts.map → coolify-D5E0z01M.d.mts.map} +1 -1
- package/dist/{coolify-vlb1G9V2.d.cts → coolify-DjHecHCr.d.cts} +2 -2
- package/dist/{coolify-vlb1G9V2.d.cts.map → coolify-DjHecHCr.d.cts.map} +1 -1
- package/dist/copaw-BQyjioz7.d.cts +7 -0
- package/dist/copaw-BQyjioz7.d.cts.map +1 -0
- package/dist/copaw-C_3N7eQu.d.mts +7 -0
- package/dist/copaw-C_3N7eQu.d.mts.map +1 -0
- package/dist/deployers/coolify.cjs +25 -0
- package/dist/deployers/coolify.cjs.map +1 -1
- package/dist/deployers/coolify.d.cts +1 -1
- package/dist/deployers/coolify.d.mts +1 -1
- package/dist/deployers/coolify.mjs +25 -0
- package/dist/deployers/coolify.mjs.map +1 -1
- package/dist/deployers/coolify.test.cjs +156 -0
- package/dist/deployers/coolify.test.cjs.map +1 -0
- package/dist/deployers/coolify.test.d.cts +1 -0
- package/dist/deployers/coolify.test.d.mts +1 -0
- package/dist/deployers/coolify.test.mjs +157 -0
- package/dist/deployers/coolify.test.mjs.map +1 -0
- package/dist/deployers/dokploy.cjs +25 -0
- package/dist/deployers/dokploy.cjs.map +1 -1
- package/dist/deployers/dokploy.d.cts +1 -1
- package/dist/deployers/dokploy.d.mts +1 -1
- package/dist/deployers/dokploy.mjs +25 -0
- package/dist/deployers/dokploy.mjs.map +1 -1
- package/dist/deployers/dokploy.test.cjs +108 -0
- package/dist/deployers/dokploy.test.cjs.map +1 -0
- package/dist/deployers/dokploy.test.d.cts +1 -0
- package/dist/deployers/dokploy.test.d.mts +1 -0
- package/dist/deployers/dokploy.test.mjs +109 -0
- package/dist/deployers/dokploy.test.mjs.map +1 -0
- package/dist/deployers/index.d.cts +3 -3
- package/dist/deployers/index.d.mts +3 -3
- package/dist/deployers/strip-host-ports.cjs +1 -1
- package/dist/deployers/strip-host-ports.test.cjs +1 -1
- package/dist/deployers/strip-host-ports.test.mjs +1 -1
- package/dist/deployers/types.d.cts +1 -1
- package/dist/deployers/types.d.mts +1 -1
- package/dist/{dokploy-8cbrxUun.d.cts → dokploy-BnVDjWCV.d.cts} +2 -2
- package/dist/{dokploy-8cbrxUun.d.cts.map → dokploy-BnVDjWCV.d.cts.map} +1 -1
- package/dist/{dokploy-BTflLhTM.d.mts → dokploy-BqLdCfyR.d.mts} +2 -2
- package/dist/{dokploy-BTflLhTM.d.mts.map → dokploy-BqLdCfyR.d.mts.map} +1 -1
- package/dist/frameworks/claude-code-fw.cjs +79 -0
- package/dist/frameworks/claude-code-fw.cjs.map +1 -0
- package/dist/frameworks/claude-code-fw.d.cts +2 -0
- package/dist/frameworks/claude-code-fw.d.mts +2 -0
- package/dist/frameworks/claude-code-fw.mjs +78 -0
- package/dist/frameworks/claude-code-fw.mjs.map +1 -0
- package/dist/frameworks/codex-fw.cjs +67 -0
- package/dist/frameworks/codex-fw.cjs.map +1 -0
- package/dist/frameworks/codex-fw.d.cts +2 -0
- package/dist/frameworks/codex-fw.d.mts +2 -0
- package/dist/frameworks/codex-fw.mjs +66 -0
- package/dist/frameworks/codex-fw.mjs.map +1 -0
- package/dist/frameworks/copaw.cjs +118 -0
- package/dist/frameworks/copaw.cjs.map +1 -0
- package/dist/frameworks/copaw.d.cts +2 -0
- package/dist/frameworks/copaw.d.mts +2 -0
- package/dist/frameworks/copaw.mjs +117 -0
- package/dist/frameworks/copaw.mjs.map +1 -0
- package/dist/frameworks/frameworks.test.cjs +94 -0
- package/dist/frameworks/frameworks.test.cjs.map +1 -0
- package/dist/frameworks/frameworks.test.d.cts +1 -0
- package/dist/frameworks/frameworks.test.d.mts +1 -0
- package/dist/frameworks/frameworks.test.mjs +94 -0
- package/dist/frameworks/frameworks.test.mjs.map +1 -0
- package/dist/frameworks/index.cjs +35 -0
- package/dist/frameworks/index.cjs.map +1 -0
- package/dist/frameworks/index.d.cts +11 -0
- package/dist/frameworks/index.d.mts +11 -0
- package/dist/frameworks/index.mjs +22 -0
- package/dist/frameworks/index.mjs.map +1 -0
- package/dist/frameworks/memu.cjs +118 -0
- package/dist/frameworks/memu.cjs.map +1 -0
- package/dist/frameworks/memu.d.cts +2 -0
- package/dist/frameworks/memu.d.mts +2 -0
- package/dist/frameworks/memu.mjs +117 -0
- package/dist/frameworks/memu.mjs.map +1 -0
- package/dist/frameworks/nanobot.cjs +126 -0
- package/dist/frameworks/nanobot.cjs.map +1 -0
- package/dist/frameworks/nanobot.d.cts +2 -0
- package/dist/frameworks/nanobot.d.mts +2 -0
- package/dist/frameworks/nanobot.mjs +125 -0
- package/dist/frameworks/nanobot.mjs.map +1 -0
- package/dist/frameworks/nanoclaw.cjs +99 -0
- package/dist/frameworks/nanoclaw.cjs.map +1 -0
- package/dist/frameworks/nanoclaw.d.cts +2 -0
- package/dist/frameworks/nanoclaw.d.mts +2 -0
- package/dist/frameworks/nanoclaw.mjs +98 -0
- package/dist/frameworks/nanoclaw.mjs.map +1 -0
- package/dist/frameworks/openclaw.cjs +253 -0
- package/dist/frameworks/openclaw.cjs.map +1 -0
- package/dist/frameworks/openclaw.d.cts +2 -0
- package/dist/frameworks/openclaw.d.mts +2 -0
- package/dist/frameworks/openclaw.mjs +251 -0
- package/dist/frameworks/openclaw.mjs.map +1 -0
- package/dist/frameworks/registry.cjs +31 -0
- package/dist/frameworks/registry.cjs.map +1 -0
- package/dist/frameworks/registry.d.cts +2 -0
- package/dist/frameworks/registry.d.mts +2 -0
- package/dist/frameworks/registry.mjs +26 -0
- package/dist/frameworks/registry.mjs.map +1 -0
- package/dist/frameworks/registry.test.cjs +110 -0
- package/dist/frameworks/registry.test.cjs.map +1 -0
- package/dist/frameworks/registry.test.d.cts +1 -0
- package/dist/frameworks/registry.test.d.mts +1 -0
- package/dist/frameworks/registry.test.mjs +111 -0
- package/dist/frameworks/registry.test.mjs.map +1 -0
- package/dist/frameworks/types.cjs +0 -0
- package/dist/frameworks/types.d.cts +2 -0
- package/dist/frameworks/types.d.mts +2 -0
- package/dist/frameworks/types.mjs +1 -0
- package/dist/frameworks/zeroclaw.cjs +123 -0
- package/dist/frameworks/zeroclaw.cjs.map +1 -0
- package/dist/frameworks/zeroclaw.d.cts +2 -0
- package/dist/frameworks/zeroclaw.d.mts +2 -0
- package/dist/frameworks/zeroclaw.mjs +122 -0
- package/dist/frameworks/zeroclaw.mjs.map +1 -0
- package/dist/generate.cjs +64 -13
- package/dist/generate.cjs.map +1 -1
- package/dist/generate.d.cts +5 -2
- package/dist/generate.d.cts.map +1 -1
- package/dist/generate.d.mts +5 -2
- package/dist/generate.d.mts.map +1 -1
- package/dist/generate.mjs +63 -12
- package/dist/generate.mjs.map +1 -1
- package/dist/generate.test.cjs +42 -6
- package/dist/generate.test.cjs.map +1 -1
- package/dist/generate.test.mjs +41 -5
- package/dist/generate.test.mjs.map +1 -1
- package/dist/generators/bare-metal-install.d.cts +1 -1
- package/dist/generators/bare-metal-install.d.mts +1 -1
- package/dist/generators/bare-metal-install.test.cjs +1 -1
- package/dist/generators/bare-metal-install.test.mjs +1 -1
- package/dist/generators/caddy.cjs +9 -3
- package/dist/generators/caddy.cjs.map +1 -1
- package/dist/generators/caddy.d.cts +1 -1
- package/dist/generators/caddy.d.mts +1 -1
- package/dist/generators/caddy.mjs +9 -3
- package/dist/generators/caddy.mjs.map +1 -1
- package/dist/generators/caddy.test.cjs +30 -2
- package/dist/generators/caddy.test.cjs.map +1 -1
- package/dist/generators/caddy.test.mjs +30 -2
- package/dist/generators/caddy.test.mjs.map +1 -1
- package/dist/generators/clone-repos.cjs.map +1 -1
- package/dist/generators/clone-repos.d.cts +1 -1
- package/dist/generators/clone-repos.d.mts +1 -1
- package/dist/generators/clone-repos.mjs.map +1 -1
- package/dist/generators/clone-repos.test.cjs +1 -1
- package/dist/generators/clone-repos.test.cjs.map +1 -1
- package/dist/generators/clone-repos.test.mjs +1 -1
- package/dist/generators/clone-repos.test.mjs.map +1 -1
- package/dist/generators/cloud-init.test.cjs +58 -0
- package/dist/generators/cloud-init.test.cjs.map +1 -0
- package/dist/generators/cloud-init.test.d.cts +1 -0
- package/dist/generators/cloud-init.test.d.mts +1 -0
- package/dist/generators/cloud-init.test.mjs +59 -0
- package/dist/generators/cloud-init.test.mjs.map +1 -0
- package/dist/generators/env.cjs +28 -103
- package/dist/generators/env.cjs.map +1 -1
- package/dist/generators/env.d.cts +4 -1
- package/dist/generators/env.d.cts.map +1 -1
- package/dist/generators/env.d.mts +4 -1
- package/dist/generators/env.d.mts.map +1 -1
- package/dist/generators/env.mjs +27 -102
- package/dist/generators/env.mjs.map +1 -1
- package/dist/generators/env.test.cjs +3 -3
- package/dist/generators/env.test.cjs.map +1 -1
- package/dist/generators/env.test.mjs +3 -3
- package/dist/generators/env.test.mjs.map +1 -1
- package/dist/generators/get-shit-done.d.cts +1 -1
- package/dist/generators/get-shit-done.d.mts +1 -1
- package/dist/generators/get-shit-done.test.cjs +48 -0
- package/dist/generators/get-shit-done.test.cjs.map +1 -0
- package/dist/generators/get-shit-done.test.d.cts +1 -0
- package/dist/generators/get-shit-done.test.d.mts +1 -0
- package/dist/generators/get-shit-done.test.mjs +49 -0
- package/dist/generators/get-shit-done.test.mjs.map +1 -0
- package/dist/generators/grafana.test.cjs +74 -0
- package/dist/generators/grafana.test.cjs.map +1 -0
- package/dist/generators/grafana.test.d.cts +1 -0
- package/dist/generators/grafana.test.d.mts +1 -0
- package/dist/generators/grafana.test.mjs +74 -0
- package/dist/generators/grafana.test.mjs.map +1 -0
- package/dist/generators/health-check.cjs +6 -6
- package/dist/generators/health-check.cjs.map +1 -1
- package/dist/generators/health-check.d.cts +1 -1
- package/dist/generators/health-check.d.mts +1 -1
- package/dist/generators/health-check.mjs +6 -6
- package/dist/generators/health-check.mjs.map +1 -1
- package/dist/generators/health-check.test.cjs +1 -1
- package/dist/generators/health-check.test.mjs +1 -1
- package/dist/generators/n8n-workflows.d.cts +1 -1
- package/dist/generators/n8n-workflows.d.mts +1 -1
- package/dist/generators/n8n-workflows.test.cjs +75 -0
- package/dist/generators/n8n-workflows.test.cjs.map +1 -0
- package/dist/generators/n8n-workflows.test.d.cts +1 -0
- package/dist/generators/n8n-workflows.test.d.mts +1 -0
- package/dist/generators/n8n-workflows.test.mjs +76 -0
- package/dist/generators/n8n-workflows.test.mjs.map +1 -0
- package/dist/generators/native-services.d.cts +1 -1
- package/dist/generators/native-services.d.mts +1 -1
- package/dist/generators/openclaw-install-script.test.cjs +35 -0
- package/dist/generators/openclaw-install-script.test.cjs.map +1 -0
- package/dist/generators/openclaw-install-script.test.d.cts +1 -0
- package/dist/generators/openclaw-install-script.test.d.mts +1 -0
- package/dist/generators/openclaw-install-script.test.mjs +36 -0
- package/dist/generators/openclaw-install-script.test.mjs.map +1 -0
- package/dist/generators/openclaw-json.cjs +60 -4
- package/dist/generators/openclaw-json.cjs.map +1 -1
- package/dist/generators/openclaw-json.d.cts +1 -5
- package/dist/generators/openclaw-json.d.cts.map +1 -1
- package/dist/generators/openclaw-json.d.mts +1 -5
- package/dist/generators/openclaw-json.d.mts.map +1 -1
- package/dist/generators/openclaw-json.mjs +60 -4
- package/dist/generators/openclaw-json.mjs.map +1 -1
- package/dist/generators/postgres-init.cjs +20 -0
- package/dist/generators/postgres-init.cjs.map +1 -1
- package/dist/generators/postgres-init.d.cts +1 -1
- package/dist/generators/postgres-init.d.cts.map +1 -1
- package/dist/generators/postgres-init.d.mts +1 -1
- package/dist/generators/postgres-init.d.mts.map +1 -1
- package/dist/generators/postgres-init.mjs +20 -0
- package/dist/generators/postgres-init.mjs.map +1 -1
- package/dist/generators/postgres-init.test.cjs +111 -0
- package/dist/generators/postgres-init.test.cjs.map +1 -0
- package/dist/generators/postgres-init.test.d.cts +1 -0
- package/dist/generators/postgres-init.test.d.mts +1 -0
- package/dist/generators/postgres-init.test.mjs +112 -0
- package/dist/generators/postgres-init.test.mjs.map +1 -0
- package/dist/generators/prometheus.d.cts +1 -1
- package/dist/generators/prometheus.d.mts +1 -1
- package/dist/generators/prometheus.test.cjs +99 -0
- package/dist/generators/prometheus.test.cjs.map +1 -0
- package/dist/generators/prometheus.test.d.cts +1 -0
- package/dist/generators/prometheus.test.d.mts +1 -0
- package/dist/generators/prometheus.test.mjs +99 -0
- package/dist/generators/prometheus.test.mjs.map +1 -0
- package/dist/generators/readme.cjs +50 -7
- package/dist/generators/readme.cjs.map +1 -1
- package/dist/generators/readme.d.cts +3 -1
- package/dist/generators/readme.d.cts.map +1 -1
- package/dist/generators/readme.d.mts +3 -1
- package/dist/generators/readme.d.mts.map +1 -1
- package/dist/generators/readme.mjs +50 -7
- package/dist/generators/readme.mjs.map +1 -1
- package/dist/generators/scripts.test.cjs +2 -2
- package/dist/generators/scripts.test.cjs.map +1 -1
- package/dist/generators/scripts.test.mjs +2 -2
- package/dist/generators/scripts.test.mjs.map +1 -1
- package/dist/generators/skills.cjs +1 -1
- package/dist/generators/skills.d.cts +1 -1
- package/dist/generators/skills.d.cts.map +1 -1
- package/dist/generators/skills.d.mts +1 -1
- package/dist/generators/skills.d.mts.map +1 -1
- package/dist/generators/skills.mjs +310 -0
- package/dist/generators/skills.mjs.map +1 -1
- package/dist/generators/stack-manifest.d.cts +1 -1
- package/dist/generators/stack-manifest.d.mts +1 -1
- package/dist/generators/stack-manifest.test.cjs +97 -0
- package/dist/generators/stack-manifest.test.cjs.map +1 -0
- package/dist/generators/stack-manifest.test.d.cts +1 -0
- package/dist/generators/stack-manifest.test.d.mts +1 -0
- package/dist/generators/stack-manifest.test.mjs +98 -0
- package/dist/generators/stack-manifest.test.mjs.map +1 -0
- package/dist/generators/traefik.d.cts +1 -1
- package/dist/generators/traefik.d.mts +1 -1
- package/dist/generators/traefik.test.cjs +12 -12
- package/dist/generators/traefik.test.cjs.map +1 -1
- package/dist/generators/traefik.test.mjs +12 -12
- package/dist/generators/traefik.test.mjs.map +1 -1
- package/dist/index.cjs +18 -2
- package/dist/index.d.cts +13 -7
- package/dist/index.d.mts +13 -7
- package/dist/index.mjs +9 -3
- package/dist/logger/__tests__/logger.test.cjs +308 -0
- package/dist/logger/__tests__/logger.test.cjs.map +1 -0
- package/dist/logger/__tests__/logger.test.d.cts +1 -0
- package/dist/logger/__tests__/logger.test.d.mts +1 -0
- package/dist/logger/__tests__/logger.test.mjs +308 -0
- package/dist/logger/__tests__/logger.test.mjs.map +1 -0
- package/dist/logger/index.cjs +8 -0
- package/dist/logger/index.d.cts +5 -0
- package/dist/logger/index.d.mts +5 -0
- package/dist/logger/index.mjs +4 -0
- package/dist/logger/logger.cjs +270 -0
- package/dist/logger/logger.cjs.map +1 -0
- package/dist/logger/logger.d.cts +2 -0
- package/dist/logger/logger.d.mts +2 -0
- package/dist/logger/logger.mjs +267 -0
- package/dist/logger/logger.mjs.map +1 -0
- package/dist/logger/sinks/callback-sink.cjs +18 -0
- package/dist/logger/sinks/callback-sink.cjs.map +1 -0
- package/dist/logger/sinks/callback-sink.d.cts +2 -0
- package/dist/logger/sinks/callback-sink.d.mts +2 -0
- package/dist/logger/sinks/callback-sink.mjs +17 -0
- package/dist/logger/sinks/callback-sink.mjs.map +1 -0
- package/dist/logger/sinks/console-sink.cjs +39 -0
- package/dist/logger/sinks/console-sink.cjs.map +1 -0
- package/dist/logger/sinks/console-sink.d.cts +2 -0
- package/dist/logger/sinks/console-sink.d.mts +2 -0
- package/dist/logger/sinks/console-sink.mjs +38 -0
- package/dist/logger/sinks/console-sink.mjs.map +1 -0
- package/dist/logger/sinks/file-sink.cjs +72 -0
- package/dist/logger/sinks/file-sink.cjs.map +1 -0
- package/dist/logger/sinks/file-sink.d.cts +36 -0
- package/dist/logger/sinks/file-sink.d.cts.map +1 -0
- package/dist/logger/sinks/file-sink.d.mts +36 -0
- package/dist/logger/sinks/file-sink.d.mts.map +1 -0
- package/dist/logger/sinks/file-sink.mjs +70 -0
- package/dist/logger/sinks/file-sink.mjs.map +1 -0
- package/dist/logger/types.cjs +0 -0
- package/dist/logger/types.d.cts +2 -0
- package/dist/logger/types.d.mts +2 -0
- package/dist/logger/types.mjs +1 -0
- package/dist/logger-CZ0Qnyiu.d.mts +66 -0
- package/dist/logger-CZ0Qnyiu.d.mts.map +1 -0
- package/dist/logger-DDfwai-A.d.cts +66 -0
- package/dist/logger-DDfwai-A.d.cts.map +1 -0
- package/dist/memu-BfRXtwmL.d.cts +7 -0
- package/dist/memu-BfRXtwmL.d.cts.map +1 -0
- package/dist/memu-C-fXbWr-.d.mts +7 -0
- package/dist/memu-C-fXbWr-.d.mts.map +1 -0
- package/dist/migrations.cjs +17 -9
- package/dist/migrations.cjs.map +1 -1
- package/dist/migrations.d.cts +1 -1
- package/dist/migrations.d.cts.map +1 -1
- package/dist/migrations.d.mts +1 -1
- package/dist/migrations.d.mts.map +1 -1
- package/dist/migrations.mjs +17 -9
- package/dist/migrations.mjs.map +1 -1
- package/dist/migrations.test.cjs +4 -4
- package/dist/migrations.test.mjs +4 -4
- package/dist/nanobot-2c0bS4lu.d.cts +7 -0
- package/dist/nanobot-2c0bS4lu.d.cts.map +1 -0
- package/dist/nanobot-BUO6pVQc.d.mts +7 -0
- package/dist/nanobot-BUO6pVQc.d.mts.map +1 -0
- package/dist/nanoclaw-CgHubEig.d.mts +7 -0
- package/dist/nanoclaw-CgHubEig.d.mts.map +1 -0
- package/dist/nanoclaw-Dvz0ef6J.d.cts +7 -0
- package/dist/nanoclaw-Dvz0ef6J.d.cts.map +1 -0
- package/dist/openclaw-D8lVecjC.d.mts +7 -0
- package/dist/openclaw-D8lVecjC.d.mts.map +1 -0
- package/dist/openclaw-DThj8i3N.d.cts +7 -0
- package/dist/openclaw-DThj8i3N.d.cts.map +1 -0
- package/dist/port-scanner.d.cts +1 -1
- package/dist/port-scanner.d.mts +1 -1
- package/dist/port-scanner.test.cjs +155 -0
- package/dist/port-scanner.test.cjs.map +1 -0
- package/dist/port-scanner.test.d.cts +1 -0
- package/dist/port-scanner.test.d.mts +1 -0
- package/dist/port-scanner.test.mjs +156 -0
- package/dist/port-scanner.test.mjs.map +1 -0
- package/dist/presets/presets.test.cjs +5 -5
- package/dist/presets/presets.test.cjs.map +1 -1
- package/dist/presets/presets.test.mjs +4 -4
- package/dist/presets/presets.test.mjs.map +1 -1
- package/dist/presets/registry.d.cts +1 -1
- package/dist/presets/registry.d.mts +1 -1
- package/dist/presets/registry.test.cjs +7 -7
- package/dist/presets/registry.test.cjs.map +1 -1
- package/dist/presets/registry.test.mjs +7 -7
- package/dist/presets/registry.test.mjs.map +1 -1
- package/dist/registry-DHX7vnVo.d.cts +16 -0
- package/dist/registry-DHX7vnVo.d.cts.map +1 -0
- package/dist/registry-DTAILnga.d.mts +16 -0
- package/dist/registry-DTAILnga.d.mts.map +1 -0
- package/dist/resolver.cjs +13 -3
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +1 -1
- package/dist/resolver.d.cts.map +1 -1
- package/dist/resolver.d.mts +1 -1
- package/dist/resolver.d.mts.map +1 -1
- package/dist/resolver.mjs +13 -3
- package/dist/resolver.mjs.map +1 -1
- package/dist/resolver.test.cjs +35 -3
- package/dist/resolver.test.cjs.map +1 -1
- package/dist/resolver.test.mjs +35 -3
- package/dist/resolver.test.mjs.map +1 -1
- package/dist/{schema-BQnZrcw8.d.cts → schema-BSl9wiFe.d.mts} +134 -2
- package/dist/schema-BSl9wiFe.d.mts.map +1 -0
- package/dist/{schema-SBpL0bdI.d.mts → schema-Bd9l2r7p.d.cts} +134 -2
- package/dist/schema-Bd9l2r7p.d.cts.map +1 -0
- package/dist/schema.cjs +28 -4
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +2 -2
- package/dist/schema.d.mts +2 -2
- package/dist/schema.mjs +27 -4
- package/dist/schema.mjs.map +1 -1
- package/dist/schema.test.cjs +3 -3
- package/dist/schema.test.cjs.map +1 -1
- package/dist/schema.test.mjs +3 -3
- package/dist/schema.test.mjs.map +1 -1
- package/dist/services/definitions/adguard-home.d.cts +1 -1
- package/dist/services/definitions/adguard-home.d.mts +1 -1
- package/dist/services/definitions/agent-browser.cjs +161 -0
- package/dist/services/definitions/agent-browser.cjs.map +1 -0
- package/dist/services/definitions/agent-browser.d.cts +7 -0
- package/dist/services/definitions/agent-browser.d.cts.map +1 -0
- package/dist/services/definitions/agent-browser.d.mts +7 -0
- package/dist/services/definitions/agent-browser.d.mts.map +1 -0
- package/dist/services/definitions/agent-browser.mjs +160 -0
- package/dist/services/definitions/agent-browser.mjs.map +1 -0
- package/dist/services/definitions/airbyte.d.cts +1 -1
- package/dist/services/definitions/airbyte.d.mts +1 -1
- package/dist/services/definitions/airflow.d.cts +1 -1
- package/dist/services/definitions/airflow.d.mts +1 -1
- package/dist/services/definitions/anything-llm.d.cts +1 -1
- package/dist/services/definitions/anything-llm.d.mts +1 -1
- package/dist/services/definitions/appflowy.d.cts +1 -1
- package/dist/services/definitions/appflowy.d.mts +1 -1
- package/dist/services/definitions/apptension-saas.cjs.map +1 -1
- package/dist/services/definitions/apptension-saas.d.cts +1 -1
- package/dist/services/definitions/apptension-saas.d.mts +1 -1
- package/dist/services/definitions/apptension-saas.mjs.map +1 -1
- package/dist/services/definitions/appwrite.d.cts +1 -1
- package/dist/services/definitions/appwrite.d.mts +1 -1
- package/dist/services/definitions/audiobookshelf.d.cts +1 -1
- package/dist/services/definitions/audiobookshelf.d.mts +1 -1
- package/dist/services/definitions/authelia.d.cts +1 -1
- package/dist/services/definitions/authelia.d.mts +1 -1
- package/dist/services/definitions/authentik.d.cts +1 -1
- package/dist/services/definitions/authentik.d.mts +1 -1
- package/dist/services/definitions/axolotl.d.cts +1 -1
- package/dist/services/definitions/axolotl.d.mts +1 -1
- package/dist/services/definitions/baserow.d.cts +1 -1
- package/dist/services/definitions/baserow.d.mts +1 -1
- package/dist/services/definitions/beszel.d.cts +1 -1
- package/dist/services/definitions/beszel.d.mts +1 -1
- package/dist/services/definitions/boxyhq-saas.d.cts +1 -1
- package/dist/services/definitions/boxyhq-saas.d.mts +1 -1
- package/dist/services/definitions/browserless.d.cts +1 -1
- package/dist/services/definitions/browserless.d.mts +1 -1
- package/dist/services/definitions/burnlink.d.cts +1 -1
- package/dist/services/definitions/burnlink.d.mts +1 -1
- package/dist/services/definitions/caddy.d.cts +1 -1
- package/dist/services/definitions/caddy.d.mts +1 -1
- package/dist/services/definitions/cal-com.d.cts +1 -1
- package/dist/services/definitions/cal-com.d.mts +1 -1
- package/dist/services/definitions/calibre-web.d.cts +1 -1
- package/dist/services/definitions/calibre-web.d.mts +1 -1
- package/dist/services/definitions/chatwoot-worker.d.cts +1 -1
- package/dist/services/definitions/chatwoot-worker.d.mts +1 -1
- package/dist/services/definitions/chatwoot.d.cts +1 -1
- package/dist/services/definitions/chatwoot.d.mts +1 -1
- package/dist/services/definitions/chromadb.cjs +4 -1
- package/dist/services/definitions/chromadb.cjs.map +1 -1
- package/dist/services/definitions/chromadb.d.cts +1 -1
- package/dist/services/definitions/chromadb.d.mts +1 -1
- package/dist/services/definitions/chromadb.mjs +4 -1
- package/dist/services/definitions/chromadb.mjs.map +1 -1
- package/dist/services/definitions/claude-code.cjs +1 -1
- package/dist/services/definitions/claude-code.cjs.map +1 -1
- package/dist/services/definitions/claude-code.d.cts +1 -1
- package/dist/services/definitions/claude-code.d.mts +1 -1
- package/dist/services/definitions/claude-code.mjs +1 -1
- package/dist/services/definitions/claude-code.mjs.map +1 -1
- package/dist/services/definitions/clawrouter.cjs +138 -0
- package/dist/services/definitions/clawrouter.cjs.map +1 -0
- package/dist/services/definitions/clawrouter.d.cts +7 -0
- package/dist/services/definitions/clawrouter.d.cts.map +1 -0
- package/dist/services/definitions/clawrouter.d.mts +7 -0
- package/dist/services/definitions/clawrouter.d.mts.map +1 -0
- package/dist/services/definitions/clawrouter.mjs +137 -0
- package/dist/services/definitions/clawrouter.mjs.map +1 -0
- package/dist/services/definitions/clickhouse.d.cts +1 -1
- package/dist/services/definitions/clickhouse.d.mts +1 -1
- package/dist/services/definitions/cloudflared.d.cts +1 -1
- package/dist/services/definitions/cloudflared.d.mts +1 -1
- package/dist/services/definitions/cmsaas-starter.d.cts +1 -1
- package/dist/services/definitions/cmsaas-starter.d.mts +1 -1
- package/dist/services/definitions/cockroachdb.d.cts +1 -1
- package/dist/services/definitions/cockroachdb.d.mts +1 -1
- package/dist/services/definitions/code-server.d.cts +1 -1
- package/dist/services/definitions/code-server.d.mts +1 -1
- package/dist/services/definitions/coder.d.cts +1 -1
- package/dist/services/definitions/coder.d.mts +1 -1
- package/dist/services/definitions/codex.cjs +1 -1
- package/dist/services/definitions/codex.cjs.map +1 -1
- package/dist/services/definitions/codex.d.cts +1 -1
- package/dist/services/definitions/codex.d.mts +1 -1
- package/dist/services/definitions/codex.mjs +1 -1
- package/dist/services/definitions/codex.mjs.map +1 -1
- package/dist/services/definitions/comfyui.d.cts +1 -1
- package/dist/services/definitions/comfyui.d.mts +1 -1
- package/dist/services/definitions/convex-dashboard.d.cts +1 -1
- package/dist/services/definitions/convex-dashboard.d.mts +1 -1
- package/dist/services/definitions/convex.cjs.map +1 -1
- package/dist/services/definitions/convex.d.cts +1 -1
- package/dist/services/definitions/convex.d.mts +1 -1
- package/dist/services/definitions/convex.mjs.map +1 -1
- package/dist/services/definitions/coolify.d.cts +1 -1
- package/dist/services/definitions/coolify.d.mts +1 -1
- package/dist/services/definitions/copaw.cjs +97 -0
- package/dist/services/definitions/copaw.cjs.map +1 -0
- package/dist/services/definitions/copaw.d.cts +7 -0
- package/dist/services/definitions/copaw.d.cts.map +1 -0
- package/dist/services/definitions/copaw.d.mts +7 -0
- package/dist/services/definitions/copaw.d.mts.map +1 -0
- package/dist/services/definitions/copaw.mjs +96 -0
- package/dist/services/definitions/copaw.mjs.map +1 -0
- package/dist/services/definitions/crowdsec.d.cts +1 -1
- package/dist/services/definitions/crowdsec.d.mts +1 -1
- package/dist/services/definitions/dagster.d.cts +1 -1
- package/dist/services/definitions/dagster.d.mts +1 -1
- package/dist/services/definitions/desktop-environment.cjs +2 -1
- package/dist/services/definitions/desktop-environment.cjs.map +1 -1
- package/dist/services/definitions/desktop-environment.d.cts +1 -1
- package/dist/services/definitions/desktop-environment.d.mts +1 -1
- package/dist/services/definitions/desktop-environment.mjs +2 -1
- package/dist/services/definitions/desktop-environment.mjs.map +1 -1
- package/dist/services/definitions/dify.d.cts +1 -1
- package/dist/services/definitions/dify.d.mts +1 -1
- package/dist/services/definitions/directus.d.cts +1 -1
- package/dist/services/definitions/directus.d.mts +1 -1
- package/dist/services/definitions/docsgpt.d.cts +1 -1
- package/dist/services/definitions/docsgpt.d.mts +1 -1
- package/dist/services/definitions/dokploy.d.cts +1 -1
- package/dist/services/definitions/dokploy.d.mts +1 -1
- package/dist/services/definitions/dozzle.d.cts +1 -1
- package/dist/services/definitions/dozzle.d.mts +1 -1
- package/dist/services/definitions/dragonfly.d.cts +1 -1
- package/dist/services/definitions/dragonfly.d.mts +1 -1
- package/dist/services/definitions/drone-ci.d.cts +1 -1
- package/dist/services/definitions/drone-ci.d.mts +1 -1
- package/dist/services/definitions/duplicati.d.cts +1 -1
- package/dist/services/definitions/duplicati.d.mts +1 -1
- package/dist/services/definitions/element-web.d.cts +1 -1
- package/dist/services/definitions/element-web.d.mts +1 -1
- package/dist/services/definitions/excalidraw.d.cts +1 -1
- package/dist/services/definitions/excalidraw.d.mts +1 -1
- package/dist/services/definitions/ffmpeg.d.cts +1 -1
- package/dist/services/definitions/ffmpeg.d.mts +1 -1
- package/dist/services/definitions/firecrawl-playwright.d.cts +1 -1
- package/dist/services/definitions/firecrawl-playwright.d.mts +1 -1
- package/dist/services/definitions/firecrawl.d.cts +1 -1
- package/dist/services/definitions/firecrawl.d.mts +1 -1
- package/dist/services/definitions/flagsmith.d.cts +1 -1
- package/dist/services/definitions/flagsmith.d.mts +1 -1
- package/dist/services/definitions/flowise.d.cts +1 -1
- package/dist/services/definitions/flowise.d.mts +1 -1
- package/dist/services/definitions/focalboard.d.cts +1 -1
- package/dist/services/definitions/focalboard.d.mts +1 -1
- package/dist/services/definitions/fonoster.d.cts +1 -1
- package/dist/services/definitions/fonoster.d.mts +1 -1
- package/dist/services/definitions/forgejo.d.cts +1 -1
- package/dist/services/definitions/forgejo.d.mts +1 -1
- package/dist/services/definitions/formbricks.d.cts +1 -1
- package/dist/services/definitions/formbricks.d.mts +1 -1
- package/dist/services/definitions/gemini-cli.d.cts +1 -1
- package/dist/services/definitions/gemini-cli.d.mts +1 -1
- package/dist/services/definitions/ghost.d.cts +1 -1
- package/dist/services/definitions/ghost.d.mts +1 -1
- package/dist/services/definitions/gitea.d.cts +1 -1
- package/dist/services/definitions/gitea.d.mts +1 -1
- package/dist/services/definitions/gotify.d.cts +1 -1
- package/dist/services/definitions/gotify.d.mts +1 -1
- package/dist/services/definitions/grafana.d.cts +1 -1
- package/dist/services/definitions/grafana.d.mts +1 -1
- package/dist/services/definitions/graylog.d.cts +1 -1
- package/dist/services/definitions/graylog.d.mts +1 -1
- package/dist/services/definitions/headscale.d.cts +1 -1
- package/dist/services/definitions/headscale.d.mts +1 -1
- package/dist/services/definitions/hedgedoc.d.cts +1 -1
- package/dist/services/definitions/hedgedoc.d.mts +1 -1
- package/dist/services/definitions/hexstrike.d.cts +1 -1
- package/dist/services/definitions/hexstrike.d.mts +1 -1
- package/dist/services/definitions/heyform.d.cts +1 -1
- package/dist/services/definitions/heyform.d.mts +1 -1
- package/dist/services/definitions/hindsight.cjs +4 -1
- package/dist/services/definitions/hindsight.cjs.map +1 -1
- package/dist/services/definitions/hindsight.d.cts +1 -1
- package/dist/services/definitions/hindsight.d.mts +1 -1
- package/dist/services/definitions/hindsight.mjs +4 -1
- package/dist/services/definitions/hindsight.mjs.map +1 -1
- package/dist/services/definitions/homeassistant.d.cts +1 -1
- package/dist/services/definitions/homeassistant.d.mts +1 -1
- package/dist/services/definitions/hoppscotch.d.cts +1 -1
- package/dist/services/definitions/hoppscotch.d.mts +1 -1
- package/dist/services/definitions/immich.d.cts +1 -1
- package/dist/services/definitions/immich.d.mts +1 -1
- package/dist/services/definitions/index.cjs +42 -6
- package/dist/services/definitions/index.cjs.map +1 -1
- package/dist/services/definitions/index.d.cts +16 -4
- package/dist/services/definitions/index.d.cts.map +1 -1
- package/dist/services/definitions/index.d.mts +16 -4
- package/dist/services/definitions/index.d.mts.map +1 -1
- package/dist/services/definitions/index.mjs +31 -7
- package/dist/services/definitions/index.mjs.map +1 -1
- package/dist/services/definitions/infisical.d.cts +1 -1
- package/dist/services/definitions/infisical.d.mts +1 -1
- package/dist/services/definitions/influxdb.d.cts +1 -1
- package/dist/services/definitions/influxdb.d.mts +1 -1
- package/dist/services/definitions/invoke-ai.d.cts +1 -1
- package/dist/services/definitions/invoke-ai.d.mts +1 -1
- package/dist/services/definitions/ixartz-saas.d.cts +1 -1
- package/dist/services/definitions/ixartz-saas.d.mts +1 -1
- package/dist/services/definitions/jaeger.d.cts +1 -1
- package/dist/services/definitions/jaeger.d.mts +1 -1
- package/dist/services/definitions/jan.d.cts +1 -1
- package/dist/services/definitions/jan.d.mts +1 -1
- package/dist/services/definitions/jellyfin.d.cts +1 -1
- package/dist/services/definitions/jellyfin.d.mts +1 -1
- package/dist/services/definitions/jenkins.d.cts +1 -1
- package/dist/services/definitions/jenkins.d.mts +1 -1
- package/dist/services/definitions/jitsi-meet.d.cts +1 -1
- package/dist/services/definitions/jitsi-meet.d.mts +1 -1
- package/dist/services/definitions/keycloak.d.cts +1 -1
- package/dist/services/definitions/keycloak.d.mts +1 -1
- package/dist/services/definitions/kimi.d.cts +1 -1
- package/dist/services/definitions/kimi.d.mts +1 -1
- package/dist/services/definitions/kong.d.cts +1 -1
- package/dist/services/definitions/kong.d.mts +1 -1
- package/dist/services/definitions/lago.d.cts +1 -1
- package/dist/services/definitions/lago.d.mts +1 -1
- package/dist/services/definitions/langflow.d.cts +1 -1
- package/dist/services/definitions/langflow.d.mts +1 -1
- package/dist/services/definitions/langfuse.d.cts +1 -1
- package/dist/services/definitions/langfuse.d.mts +1 -1
- package/dist/services/definitions/lasuite-meet-agents.d.cts +1 -1
- package/dist/services/definitions/lasuite-meet-agents.d.mts +1 -1
- package/dist/services/definitions/lasuite-meet-backend.d.cts +1 -1
- package/dist/services/definitions/lasuite-meet-backend.d.mts +1 -1
- package/dist/services/definitions/lasuite-meet-frontend.d.cts +1 -1
- package/dist/services/definitions/lasuite-meet-frontend.d.mts +1 -1
- package/dist/services/definitions/librechat.d.cts +1 -1
- package/dist/services/definitions/librechat.d.mts +1 -1
- package/dist/services/definitions/lightpanda.d.cts +1 -1
- package/dist/services/definitions/lightpanda.d.mts +1 -1
- package/dist/services/definitions/listmonk.d.cts +1 -1
- package/dist/services/definitions/listmonk.d.mts +1 -1
- package/dist/services/definitions/litellm.d.cts +1 -1
- package/dist/services/definitions/litellm.d.mts +1 -1
- package/dist/services/definitions/livekit.d.cts +1 -1
- package/dist/services/definitions/livekit.d.mts +1 -1
- package/dist/services/definitions/local-ai.d.cts +1 -1
- package/dist/services/definitions/local-ai.d.mts +1 -1
- package/dist/services/definitions/loki.d.cts +1 -1
- package/dist/services/definitions/loki.d.mts +1 -1
- package/dist/services/definitions/mariadb.d.cts +1 -1
- package/dist/services/definitions/mariadb.d.mts +1 -1
- package/dist/services/definitions/matomo.d.cts +1 -1
- package/dist/services/definitions/matomo.d.mts +1 -1
- package/dist/services/definitions/matrix-synapse.d.cts +1 -1
- package/dist/services/definitions/matrix-synapse.d.mts +1 -1
- package/dist/services/definitions/mattermost.d.cts +1 -1
- package/dist/services/definitions/mattermost.d.mts +1 -1
- package/dist/services/definitions/mautic.d.cts +1 -1
- package/dist/services/definitions/mautic.d.mts +1 -1
- package/dist/services/definitions/medusa.d.cts +1 -1
- package/dist/services/definitions/medusa.d.mts +1 -1
- package/dist/services/definitions/meilisearch.d.cts +1 -1
- package/dist/services/definitions/meilisearch.d.mts +1 -1
- package/dist/services/definitions/mem0.cjs +133 -0
- package/dist/services/definitions/mem0.cjs.map +1 -0
- package/dist/services/definitions/mem0.d.cts +7 -0
- package/dist/services/definitions/mem0.d.cts.map +1 -0
- package/dist/services/definitions/mem0.d.mts +7 -0
- package/dist/services/definitions/mem0.d.mts.map +1 -0
- package/dist/services/definitions/mem0.mjs +132 -0
- package/dist/services/definitions/mem0.mjs.map +1 -0
- package/dist/services/definitions/memu.cjs +96 -0
- package/dist/services/definitions/memu.cjs.map +1 -0
- package/dist/services/definitions/memu.d.cts +7 -0
- package/dist/services/definitions/memu.d.cts.map +1 -0
- package/dist/services/definitions/memu.d.mts +7 -0
- package/dist/services/definitions/memu.d.mts.map +1 -0
- package/dist/services/definitions/memu.mjs +95 -0
- package/dist/services/definitions/memu.mjs.map +1 -0
- package/dist/services/definitions/metabase.d.cts +1 -1
- package/dist/services/definitions/metabase.d.mts +1 -1
- package/dist/services/definitions/milvus.cjs +4 -1
- package/dist/services/definitions/milvus.cjs.map +1 -1
- package/dist/services/definitions/milvus.d.cts +1 -1
- package/dist/services/definitions/milvus.d.mts +1 -1
- package/dist/services/definitions/milvus.mjs +4 -1
- package/dist/services/definitions/milvus.mjs.map +1 -1
- package/dist/services/definitions/minio.d.cts +1 -1
- package/dist/services/definitions/minio.d.mts +1 -1
- package/dist/services/definitions/mission-control.d.cts +1 -1
- package/dist/services/definitions/mission-control.d.mts +1 -1
- package/dist/services/definitions/mixpost.d.cts +1 -1
- package/dist/services/definitions/mixpost.d.mts +1 -1
- package/dist/services/definitions/mosquitto.d.cts +1 -1
- package/dist/services/definitions/mosquitto.d.mts +1 -1
- package/dist/services/definitions/motion-canvas.d.cts +1 -1
- package/dist/services/definitions/motion-canvas.d.mts +1 -1
- package/dist/services/definitions/mysql.d.cts +1 -1
- package/dist/services/definitions/mysql.d.mts +1 -1
- package/dist/services/definitions/n8n.d.cts +1 -1
- package/dist/services/definitions/n8n.d.mts +1 -1
- package/dist/services/definitions/nanobot.cjs +86 -0
- package/dist/services/definitions/nanobot.cjs.map +1 -0
- package/dist/services/definitions/nanobot.d.cts +7 -0
- package/dist/services/definitions/nanobot.d.cts.map +1 -0
- package/dist/services/definitions/nanobot.d.mts +7 -0
- package/dist/services/definitions/nanobot.d.mts.map +1 -0
- package/dist/services/definitions/nanobot.mjs +85 -0
- package/dist/services/definitions/nanobot.mjs.map +1 -0
- package/dist/services/definitions/nanoclaw.cjs +79 -0
- package/dist/services/definitions/nanoclaw.cjs.map +1 -0
- package/dist/services/definitions/nanoclaw.d.cts +7 -0
- package/dist/services/definitions/nanoclaw.d.cts.map +1 -0
- package/dist/services/definitions/nanoclaw.d.mts +7 -0
- package/dist/services/definitions/nanoclaw.d.mts.map +1 -0
- package/dist/services/definitions/nanoclaw.mjs +78 -0
- package/dist/services/definitions/nanoclaw.mjs.map +1 -0
- package/dist/services/definitions/navidrome.d.cts +1 -1
- package/dist/services/definitions/navidrome.d.mts +1 -1
- package/dist/services/definitions/neo4j.d.cts +1 -1
- package/dist/services/definitions/neo4j.d.mts +1 -1
- package/dist/services/definitions/nextcloud.d.cts +1 -1
- package/dist/services/definitions/nextcloud.d.mts +1 -1
- package/dist/services/definitions/nginx-proxy-manager.d.cts +1 -1
- package/dist/services/definitions/nginx-proxy-manager.d.mts +1 -1
- package/dist/services/definitions/nocodb.d.cts +1 -1
- package/dist/services/definitions/nocodb.d.mts +1 -1
- package/dist/services/definitions/node-red.d.cts +1 -1
- package/dist/services/definitions/node-red.d.mts +1 -1
- package/dist/services/definitions/ntfy.d.cts +1 -1
- package/dist/services/definitions/ntfy.d.mts +1 -1
- package/dist/services/definitions/ollama.d.cts +1 -1
- package/dist/services/definitions/ollama.d.mts +1 -1
- package/dist/services/definitions/open-saas.d.cts +1 -1
- package/dist/services/definitions/open-saas.d.mts +1 -1
- package/dist/services/definitions/open-webui.d.cts +1 -1
- package/dist/services/definitions/open-webui.d.mts +1 -1
- package/dist/services/definitions/opencode.d.cts +1 -1
- package/dist/services/definitions/opencode.d.mts +1 -1
- package/dist/services/definitions/openhands.d.cts +1 -1
- package/dist/services/definitions/openhands.d.mts +1 -1
- package/dist/services/definitions/openpanel.d.cts +1 -1
- package/dist/services/definitions/openpanel.d.mts +1 -1
- package/dist/services/definitions/opensandbox.cjs +2 -1
- package/dist/services/definitions/opensandbox.cjs.map +1 -1
- package/dist/services/definitions/opensandbox.d.cts +1 -1
- package/dist/services/definitions/opensandbox.d.mts +1 -1
- package/dist/services/definitions/opensandbox.mjs +2 -1
- package/dist/services/definitions/opensandbox.mjs.map +1 -1
- package/dist/services/definitions/opensearch.d.cts +1 -1
- package/dist/services/definitions/opensearch.d.mts +1 -1
- package/dist/services/definitions/outline.d.cts +1 -1
- package/dist/services/definitions/outline.d.mts +1 -1
- package/dist/services/definitions/paperless-ngx.d.cts +1 -1
- package/dist/services/definitions/paperless-ngx.d.mts +1 -1
- package/dist/services/definitions/pentagi.d.cts +1 -1
- package/dist/services/definitions/pentagi.d.mts +1 -1
- package/dist/services/definitions/pentestagent.d.cts +1 -1
- package/dist/services/definitions/pentestagent.d.mts +1 -1
- package/dist/services/definitions/photoprism.d.cts +1 -1
- package/dist/services/definitions/photoprism.d.mts +1 -1
- package/dist/services/definitions/pihole.d.cts +1 -1
- package/dist/services/definitions/pihole.d.mts +1 -1
- package/dist/services/definitions/piper-tts.d.cts +1 -1
- package/dist/services/definitions/piper-tts.d.mts +1 -1
- package/dist/services/definitions/plane.d.cts +1 -1
- package/dist/services/definitions/plane.d.mts +1 -1
- package/dist/services/definitions/plausible.d.cts +1 -1
- package/dist/services/definitions/plausible.d.mts +1 -1
- package/dist/services/definitions/playwright-server.d.cts +1 -1
- package/dist/services/definitions/playwright-server.d.mts +1 -1
- package/dist/services/definitions/pocket-id.d.cts +1 -1
- package/dist/services/definitions/pocket-id.d.mts +1 -1
- package/dist/services/definitions/pocketbase.d.cts +1 -1
- package/dist/services/definitions/pocketbase.d.mts +1 -1
- package/dist/services/definitions/portainer.d.cts +1 -1
- package/dist/services/definitions/portainer.d.mts +1 -1
- package/dist/services/definitions/postgresql.d.cts +1 -1
- package/dist/services/definitions/postgresql.d.mts +1 -1
- package/dist/services/definitions/posthog.d.cts +1 -1
- package/dist/services/definitions/posthog.d.mts +1 -1
- package/dist/services/definitions/postiz.d.cts +1 -1
- package/dist/services/definitions/postiz.d.mts +1 -1
- package/dist/services/definitions/prometheus.d.cts +1 -1
- package/dist/services/definitions/prometheus.d.mts +1 -1
- package/dist/services/definitions/qdrant.d.cts +1 -1
- package/dist/services/definitions/qdrant.d.mts +1 -1
- package/dist/services/definitions/rabbitmq.d.cts +1 -1
- package/dist/services/definitions/rabbitmq.d.mts +1 -1
- package/dist/services/definitions/ragflow.d.cts +1 -1
- package/dist/services/definitions/ragflow.d.mts +1 -1
- package/dist/services/definitions/redis.d.cts +1 -1
- package/dist/services/definitions/redis.d.mts +1 -1
- package/dist/services/definitions/relaticle-horizon.cjs +48 -0
- package/dist/services/definitions/relaticle-horizon.cjs.map +1 -0
- package/dist/services/definitions/relaticle-horizon.d.cts +7 -0
- package/dist/services/definitions/relaticle-horizon.d.cts.map +1 -0
- package/dist/services/definitions/relaticle-horizon.d.mts +7 -0
- package/dist/services/definitions/relaticle-horizon.d.mts.map +1 -0
- package/dist/services/definitions/relaticle-horizon.mjs +48 -0
- package/dist/services/definitions/relaticle-horizon.mjs.map +1 -0
- package/dist/services/definitions/relaticle-scheduler.cjs +44 -0
- package/dist/services/definitions/relaticle-scheduler.cjs.map +1 -0
- package/dist/services/definitions/relaticle-scheduler.d.cts +7 -0
- package/dist/services/definitions/relaticle-scheduler.d.cts.map +1 -0
- package/dist/services/definitions/relaticle-scheduler.d.mts +7 -0
- package/dist/services/definitions/relaticle-scheduler.d.mts.map +1 -0
- package/dist/services/definitions/relaticle-scheduler.mjs +44 -0
- package/dist/services/definitions/relaticle-scheduler.mjs.map +1 -0
- package/dist/services/definitions/relaticle.cjs +151 -0
- package/dist/services/definitions/relaticle.cjs.map +1 -0
- package/dist/services/definitions/relaticle.d.cts +80 -0
- package/dist/services/definitions/relaticle.d.cts.map +1 -0
- package/dist/services/definitions/relaticle.d.mts +80 -0
- package/dist/services/definitions/relaticle.d.mts.map +1 -0
- package/dist/services/definitions/relaticle.mjs +149 -0
- package/dist/services/definitions/relaticle.mjs.map +1 -0
- package/dist/services/definitions/remotion.d.cts +1 -1
- package/dist/services/definitions/remotion.d.mts +1 -1
- package/dist/services/definitions/restic.d.cts +1 -1
- package/dist/services/definitions/restic.d.mts +1 -1
- package/dist/services/definitions/revolt.d.cts +1 -1
- package/dist/services/definitions/revolt.d.mts +1 -1
- package/dist/services/definitions/rocketchat.d.cts +1 -1
- package/dist/services/definitions/rocketchat.d.mts +1 -1
- package/dist/services/definitions/saleor.d.cts +1 -1
- package/dist/services/definitions/saleor.d.mts +1 -1
- package/dist/services/definitions/scrapling.d.cts +1 -1
- package/dist/services/definitions/scrapling.d.mts +1 -1
- package/dist/services/definitions/searxng.d.cts +1 -1
- package/dist/services/definitions/searxng.d.mts +1 -1
- package/dist/services/definitions/sentry.d.cts +1 -1
- package/dist/services/definitions/sentry.d.mts +1 -1
- package/dist/services/definitions/signoz.d.cts +1 -1
- package/dist/services/definitions/signoz.d.mts +1 -1
- package/dist/services/definitions/solidityguard.d.cts +1 -1
- package/dist/services/definitions/solidityguard.d.mts +1 -1
- package/dist/services/definitions/sonarqube.d.cts +1 -1
- package/dist/services/definitions/sonarqube.d.mts +1 -1
- package/dist/services/definitions/stable-diffusion.d.cts +1 -1
- package/dist/services/definitions/stable-diffusion.d.mts +1 -1
- package/dist/services/definitions/steel-browser.d.cts +1 -1
- package/dist/services/definitions/steel-browser.d.mts +1 -1
- package/dist/services/definitions/stirling-pdf.d.cts +1 -1
- package/dist/services/definitions/stirling-pdf.d.mts +1 -1
- package/dist/services/definitions/strapi.d.cts +1 -1
- package/dist/services/definitions/strapi.d.mts +1 -1
- package/dist/services/definitions/stream-gateway.d.cts +1 -1
- package/dist/services/definitions/stream-gateway.d.mts +1 -1
- package/dist/services/definitions/supabase.d.cts +1 -1
- package/dist/services/definitions/supabase.d.mts +1 -1
- package/dist/services/definitions/superset.d.cts +1 -1
- package/dist/services/definitions/superset.d.mts +1 -1
- package/dist/services/definitions/surrealdb.d.cts +1 -1
- package/dist/services/definitions/surrealdb.d.mts +1 -1
- package/dist/services/definitions/tabby-ml.d.cts +1 -1
- package/dist/services/definitions/tabby-ml.d.mts +1 -1
- package/dist/services/definitions/tailscale.d.cts +1 -1
- package/dist/services/definitions/tailscale.d.mts +1 -1
- package/dist/services/definitions/tempo.d.cts +1 -1
- package/dist/services/definitions/tempo.d.mts +1 -1
- package/dist/services/definitions/temporal.d.cts +1 -1
- package/dist/services/definitions/temporal.d.mts +1 -1
- package/dist/services/definitions/text-gen-webui.d.cts +1 -1
- package/dist/services/definitions/text-gen-webui.d.mts +1 -1
- package/dist/services/definitions/timescaledb.d.cts +1 -1
- package/dist/services/definitions/timescaledb.d.mts +1 -1
- package/dist/services/definitions/traefik.d.cts +1 -1
- package/dist/services/definitions/traefik.d.mts +1 -1
- package/dist/services/definitions/twenty-worker.cjs +73 -0
- package/dist/services/definitions/twenty-worker.cjs.map +1 -0
- package/dist/services/definitions/twenty-worker.d.cts +7 -0
- package/dist/services/definitions/twenty-worker.d.cts.map +1 -0
- package/dist/services/definitions/twenty-worker.d.mts +7 -0
- package/dist/services/definitions/twenty-worker.d.mts.map +1 -0
- package/dist/services/definitions/twenty-worker.mjs +72 -0
- package/dist/services/definitions/twenty-worker.mjs.map +1 -0
- package/dist/services/definitions/twenty.cjs +24 -2
- package/dist/services/definitions/twenty.cjs.map +1 -1
- package/dist/services/definitions/twenty.d.cts +1 -1
- package/dist/services/definitions/twenty.d.mts +1 -1
- package/dist/services/definitions/twenty.mjs +24 -2
- package/dist/services/definitions/twenty.mjs.map +1 -1
- package/dist/services/definitions/umami.d.cts +1 -1
- package/dist/services/definitions/umami.d.mts +1 -1
- package/dist/services/definitions/uptime-kuma.d.cts +1 -1
- package/dist/services/definitions/uptime-kuma.d.mts +1 -1
- package/dist/services/definitions/usesend.d.cts +1 -1
- package/dist/services/definitions/usesend.d.mts +1 -1
- package/dist/services/definitions/valkey.d.cts +1 -1
- package/dist/services/definitions/valkey.d.mts +1 -1
- package/dist/services/definitions/vault.d.cts +1 -1
- package/dist/services/definitions/vault.d.mts +1 -1
- package/dist/services/definitions/vaultwarden.d.cts +1 -1
- package/dist/services/definitions/vaultwarden.d.mts +1 -1
- package/dist/services/definitions/vector-log.d.cts +1 -1
- package/dist/services/definitions/vector-log.d.mts +1 -1
- package/dist/services/definitions/vikunja.d.cts +1 -1
- package/dist/services/definitions/vikunja.d.mts +1 -1
- package/dist/services/definitions/watchtower.d.cts +1 -1
- package/dist/services/definitions/watchtower.d.mts +1 -1
- package/dist/services/definitions/weaviate.cjs +4 -1
- package/dist/services/definitions/weaviate.cjs.map +1 -1
- package/dist/services/definitions/weaviate.d.cts +1 -1
- package/dist/services/definitions/weaviate.d.mts +1 -1
- package/dist/services/definitions/weaviate.mjs +4 -1
- package/dist/services/definitions/weaviate.mjs.map +1 -1
- package/dist/services/definitions/whisper.d.cts +1 -1
- package/dist/services/definitions/whisper.d.mts +1 -1
- package/dist/services/definitions/wireguard.d.cts +1 -1
- package/dist/services/definitions/wireguard.d.mts +1 -1
- package/dist/services/definitions/woodpecker-ci.d.cts +1 -1
- package/dist/services/definitions/woodpecker-ci.d.mts +1 -1
- package/dist/services/definitions/xyops.d.cts +1 -1
- package/dist/services/definitions/xyops.d.mts +1 -1
- package/dist/services/definitions/zeroclaw.cjs +103 -0
- package/dist/services/definitions/zeroclaw.cjs.map +1 -0
- package/dist/services/definitions/zeroclaw.d.cts +7 -0
- package/dist/services/definitions/zeroclaw.d.cts.map +1 -0
- package/dist/services/definitions/zeroclaw.d.mts +7 -0
- package/dist/services/definitions/zeroclaw.d.mts.map +1 -0
- package/dist/services/definitions/zeroclaw.mjs +102 -0
- package/dist/services/definitions/zeroclaw.mjs.map +1 -0
- package/dist/services/definitions/zulip.d.cts +1 -1
- package/dist/services/definitions/zulip.d.mts +1 -1
- package/dist/services/registry.d.cts +1 -1
- package/dist/services/registry.d.mts +1 -1
- package/dist/services/registry.test.cjs +8 -8
- package/dist/services/registry.test.cjs.map +1 -1
- package/dist/services/registry.test.mjs +8 -8
- package/dist/services/registry.test.mjs.map +1 -1
- package/dist/skills/registry.cjs +19 -0
- package/dist/skills/registry.cjs.map +1 -1
- package/dist/skills/registry.d.cts +1 -1
- package/dist/skills/registry.d.cts.map +1 -1
- package/dist/skills/registry.d.mts +1 -1
- package/dist/skills/registry.d.mts.map +1 -1
- package/dist/skills/registry.mjs +19 -0
- package/dist/skills/registry.mjs.map +1 -1
- package/dist/{skills-BSF7iNa4.cjs → skills-uPxJVmKk.cjs} +311 -1
- package/dist/skills-uPxJVmKk.cjs.map +1 -0
- package/dist/{test.CTcmp4Su-ClCHJ3FA.mjs → test.CTcmp4Su-BRa7-bTj.mjs} +2 -2
- package/dist/{test.CTcmp4Su-ClCHJ3FA.mjs.map → test.CTcmp4Su-BRa7-bTj.mjs.map} +1 -1
- package/dist/{test.CTcmp4Su-DlzTarwH.cjs → test.CTcmp4Su-BWSPM8ZQ.cjs} +19 -1
- package/dist/{test.CTcmp4Su-DlzTarwH.cjs.map → test.CTcmp4Su-BWSPM8ZQ.cjs.map} +1 -1
- package/dist/track-analytics.d.cts +1 -1
- package/dist/track-analytics.d.mts +1 -1
- package/dist/track-analytics.test.cjs +1 -1
- package/dist/track-analytics.test.mjs +1 -1
- package/dist/types-BREUfzzq.d.mts +77 -0
- package/dist/types-BREUfzzq.d.mts.map +1 -0
- package/dist/types-Bsn0XzSP.d.cts +95 -0
- package/dist/types-Bsn0XzSP.d.cts.map +1 -0
- package/dist/types-CyZ5mn6w.d.cts +77 -0
- package/dist/types-CyZ5mn6w.d.cts.map +1 -0
- package/dist/types-DIsPc-hb.d.cts +100 -0
- package/dist/types-DIsPc-hb.d.cts.map +1 -0
- package/dist/types-DbXajvYq.d.mts +100 -0
- package/dist/types-DbXajvYq.d.mts.map +1 -0
- package/dist/types-DwTKyCZ9.d.mts +95 -0
- package/dist/types-DwTKyCZ9.d.mts.map +1 -0
- package/dist/{types-CR83OJiq.d.cts → types-dyBnrHm9.d.cts} +5 -1
- package/dist/types-dyBnrHm9.d.cts.map +1 -0
- package/dist/{types-zYjGTuyn.d.mts → types-fRSnaZTX.d.mts} +5 -1
- package/dist/types-fRSnaZTX.d.mts.map +1 -0
- package/dist/types.cjs +7 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +2 -93
- package/dist/types.d.mts +2 -93
- package/dist/types.mjs +7 -0
- package/dist/types.mjs.map +1 -1
- package/dist/validator.cjs +1 -1
- package/dist/validator.d.cts +1 -1
- package/dist/validator.d.mts +1 -1
- package/dist/validator.test.cjs +1 -1
- package/dist/validator.test.mjs +1 -1
- package/dist/version-manager.d.cts +1 -1
- package/dist/version-manager.d.mts +1 -1
- package/dist/version-manager.test.cjs +3 -3
- package/dist/version-manager.test.cjs.map +1 -1
- package/dist/version-manager.test.mjs +3 -3
- package/dist/version-manager.test.mjs.map +1 -1
- package/dist/zeroclaw-B-0TuOfZ.d.mts +7 -0
- package/dist/zeroclaw-B-0TuOfZ.d.mts.map +1 -0
- package/dist/zeroclaw-BvKpDHKe.d.cts +7 -0
- package/dist/zeroclaw-BvKpDHKe.d.cts.map +1 -0
- package/package.json +6 -2
- package/src/addon-stack.test.ts +19 -23
- package/src/addon-stack.ts +67 -44
- package/src/composer.test.ts +59 -0
- package/src/composer.ts +135 -194
- package/src/deployers/coolify.test.ts +180 -0
- package/src/deployers/coolify.ts +38 -0
- package/src/deployers/dokploy.test.ts +120 -0
- package/src/deployers/dokploy.ts +38 -0
- package/src/deployers/types.ts +2 -0
- package/src/frameworks/claude-code-fw.ts +118 -0
- package/src/frameworks/codex-fw.ts +102 -0
- package/src/frameworks/copaw.ts +154 -0
- package/src/frameworks/frameworks.test.ts +119 -0
- package/src/frameworks/index.ts +46 -0
- package/src/frameworks/memu.ts +149 -0
- package/src/frameworks/nanobot.ts +156 -0
- package/src/frameworks/nanoclaw.ts +126 -0
- package/src/frameworks/openclaw.ts +325 -0
- package/src/frameworks/registry.test.ts +131 -0
- package/src/frameworks/registry.ts +28 -0
- package/src/frameworks/types.ts +146 -0
- package/src/frameworks/zeroclaw.ts +148 -0
- package/src/generate.test.ts +55 -4
- package/src/generate.ts +67 -14
- package/src/generators/caddy.test.ts +41 -1
- package/src/generators/caddy.ts +16 -2
- package/src/generators/clone-repos.test.ts +1 -1
- package/src/generators/clone-repos.ts +7 -2
- package/src/generators/cloud-init.test.ts +70 -0
- package/src/generators/env.test.ts +2 -2
- package/src/generators/env.ts +30 -180
- package/src/generators/get-shit-done.test.ts +54 -0
- package/src/generators/grafana.test.ts +90 -0
- package/src/generators/health-check.ts +4 -4
- package/src/generators/n8n-workflows.test.ts +80 -0
- package/src/generators/openclaw-install-script.test.ts +42 -0
- package/src/generators/openclaw-json.ts +57 -5
- package/src/generators/postgres-init.test.ts +116 -0
- package/src/generators/postgres-init.ts +9 -0
- package/src/generators/prometheus.test.ts +108 -0
- package/src/generators/readme.ts +75 -9
- package/src/generators/scripts.test.ts +1 -1
- package/src/generators/skills.ts +316 -0
- package/src/generators/stack-manifest.test.ts +104 -0
- package/src/generators/traefik.test.ts +13 -13
- package/src/index.ts +47 -7
- package/src/logger/__tests__/logger.test.ts +388 -0
- package/src/logger/index.ts +15 -0
- package/src/logger/logger.ts +326 -0
- package/src/logger/sinks/callback-sink.ts +13 -0
- package/src/logger/sinks/console-sink.ts +51 -0
- package/src/logger/sinks/file-sink.ts +121 -0
- package/src/logger/types.ts +90 -0
- package/src/migrations.ts +8 -1
- package/src/port-scanner.test.ts +167 -0
- package/src/presets/presets.test.ts +4 -4
- package/src/presets/registry.test.ts +6 -6
- package/src/resolver.test.ts +31 -3
- package/src/resolver.ts +19 -3
- package/src/schema.test.ts +2 -2
- package/src/schema.ts +58 -17
- package/src/services/definitions/agent-browser.ts +177 -0
- package/src/services/definitions/apptension-saas.ts +2 -1
- package/src/services/definitions/chromadb.ts +1 -1
- package/src/services/definitions/claude-code.ts +1 -1
- package/src/services/definitions/clawrouter.ts +141 -0
- package/src/services/definitions/codex.ts +1 -1
- package/src/services/definitions/convex.ts +1 -2
- package/src/services/definitions/copaw.ts +101 -0
- package/src/services/definitions/desktop-environment.ts +1 -0
- package/src/services/definitions/hindsight.ts +3 -2
- package/src/services/definitions/index.ts +53 -16
- package/src/services/definitions/mem0.ts +132 -0
- package/src/services/definitions/memu.ts +96 -0
- package/src/services/definitions/milvus.ts +1 -1
- package/src/services/definitions/nanobot.ts +89 -0
- package/src/services/definitions/nanoclaw.ts +78 -0
- package/src/services/definitions/opensandbox.ts +6 -15
- package/src/services/definitions/relaticle-horizon.ts +48 -0
- package/src/services/definitions/relaticle-scheduler.ts +42 -0
- package/src/services/definitions/relaticle.ts +142 -0
- package/src/services/definitions/twenty-worker.ts +70 -0
- package/src/services/definitions/twenty.ts +16 -2
- package/src/services/definitions/weaviate.ts +1 -1
- package/src/services/definitions/zeroclaw.ts +102 -0
- package/src/services/registry.test.ts +7 -7
- package/src/skills/registry.ts +10 -0
- package/src/types.ts +11 -1
- package/src/version-manager.test.ts +2 -2
- package/dist/schema-BQnZrcw8.d.cts.map +0 -1
- package/dist/schema-SBpL0bdI.d.mts.map +0 -1
- package/dist/skills-BSF7iNa4.cjs.map +0 -1
- package/dist/types-CR83OJiq.d.cts.map +0 -1
- package/dist/types-zYjGTuyn.d.mts.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as describe, o as it, t as globalExpect } from "../test.CTcmp4Su-BRa7-bTj.mjs";
|
|
2
2
|
import { generate } from "../generate.mjs";
|
|
3
3
|
//#region src/generators/health-check.test.ts
|
|
4
4
|
describe("generateHealthCheck (via generate)", () => {
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const require_test_CTcmp4Su = require("../test.CTcmp4Su-BWSPM8ZQ.cjs");
|
|
2
|
+
const require_generators_n8n_workflows = require("./n8n-workflows.cjs");
|
|
3
|
+
//#region src/generators/n8n-workflows.test.ts
|
|
4
|
+
function makeResolved(serviceIds) {
|
|
5
|
+
return {
|
|
6
|
+
services: serviceIds.map((id) => ({
|
|
7
|
+
definition: {
|
|
8
|
+
id,
|
|
9
|
+
name: id.charAt(0).toUpperCase() + id.slice(1),
|
|
10
|
+
description: "",
|
|
11
|
+
icon: "",
|
|
12
|
+
category: "test",
|
|
13
|
+
image: `${id}:latest`,
|
|
14
|
+
ports: [],
|
|
15
|
+
volumes: [],
|
|
16
|
+
environment: [],
|
|
17
|
+
dependencies: [],
|
|
18
|
+
conflicts: [],
|
|
19
|
+
skills: [],
|
|
20
|
+
memoryMB: 256,
|
|
21
|
+
docsUrl: ""
|
|
22
|
+
},
|
|
23
|
+
addedBy: "user"
|
|
24
|
+
})),
|
|
25
|
+
addedDependencies: [],
|
|
26
|
+
estimatedMemoryMB: 512
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
require_test_CTcmp4Su.describe("generateN8nWorkflows", () => {
|
|
30
|
+
require_test_CTcmp4Su.it("returns empty object when n8n is not in the stack", () => {
|
|
31
|
+
const result = require_generators_n8n_workflows.generateN8nWorkflows(makeResolved(["redis", "postgresql"]));
|
|
32
|
+
require_test_CTcmp4Su.globalExpect(Object.keys(result)).toHaveLength(0);
|
|
33
|
+
});
|
|
34
|
+
require_test_CTcmp4Su.it("generates workflow file when n8n is present", () => {
|
|
35
|
+
require_test_CTcmp4Su.globalExpect(require_generators_n8n_workflows.generateN8nWorkflows(makeResolved(["n8n", "redis"]))).toHaveProperty("n8n/workflows/openclaw-webhook-handler.json");
|
|
36
|
+
});
|
|
37
|
+
require_test_CTcmp4Su.it("generates valid JSON workflow", () => {
|
|
38
|
+
const result = require_generators_n8n_workflows.generateN8nWorkflows(makeResolved(["n8n"]));
|
|
39
|
+
const workflow = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]);
|
|
40
|
+
require_test_CTcmp4Su.globalExpect(workflow).toBeDefined();
|
|
41
|
+
require_test_CTcmp4Su.globalExpect(workflow.name).toBe("OpenClaw Webhook Handler");
|
|
42
|
+
});
|
|
43
|
+
require_test_CTcmp4Su.it("workflow has three nodes (webhook, process, respond)", () => {
|
|
44
|
+
const result = require_generators_n8n_workflows.generateN8nWorkflows(makeResolved(["n8n", "redis"]));
|
|
45
|
+
const workflow = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]);
|
|
46
|
+
require_test_CTcmp4Su.globalExpect(workflow.nodes).toHaveLength(3);
|
|
47
|
+
const types = workflow.nodes.map((n) => n.type);
|
|
48
|
+
require_test_CTcmp4Su.globalExpect(types).toContain("n8n-nodes-base.webhook");
|
|
49
|
+
require_test_CTcmp4Su.globalExpect(types).toContain("n8n-nodes-base.code");
|
|
50
|
+
require_test_CTcmp4Su.globalExpect(types).toContain("n8n-nodes-base.respondToWebhook");
|
|
51
|
+
});
|
|
52
|
+
require_test_CTcmp4Su.it("workflow has correct connections", () => {
|
|
53
|
+
const result = require_generators_n8n_workflows.generateN8nWorkflows(makeResolved(["n8n"]));
|
|
54
|
+
const workflow = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]);
|
|
55
|
+
require_test_CTcmp4Su.globalExpect(workflow.connections).toHaveProperty("Webhook");
|
|
56
|
+
require_test_CTcmp4Su.globalExpect(workflow.connections).toHaveProperty("Process Payload");
|
|
57
|
+
});
|
|
58
|
+
require_test_CTcmp4Su.it("workflow is not active by default", () => {
|
|
59
|
+
const result = require_generators_n8n_workflows.generateN8nWorkflows(makeResolved(["n8n"]));
|
|
60
|
+
require_test_CTcmp4Su.globalExpect(JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]).active).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
require_test_CTcmp4Su.it("includes service names in the code node comment", () => {
|
|
63
|
+
const result = require_generators_n8n_workflows.generateN8nWorkflows(makeResolved([
|
|
64
|
+
"n8n",
|
|
65
|
+
"redis",
|
|
66
|
+
"postgresql"
|
|
67
|
+
]));
|
|
68
|
+
const codeNode = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]).nodes.find((n) => n.type === "n8n-nodes-base.code");
|
|
69
|
+
require_test_CTcmp4Su.globalExpect(codeNode.parameters.jsCode).toContain("Redis");
|
|
70
|
+
require_test_CTcmp4Su.globalExpect(codeNode.parameters.jsCode).toContain("Postgresql");
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//#endregion
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=n8n-workflows.test.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-workflows.test.cjs","names":["describe","generateN8nWorkflows"],"sources":["../../src/generators/n8n-workflows.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { generateN8nWorkflows } from \"./n8n-workflows.js\";\n\nfunction makeResolved(serviceIds: string[]): ResolverOutput {\n\treturn {\n\t\tservices: serviceIds.map((id) => ({\n\t\t\tdefinition: {\n\t\t\t\tid,\n\t\t\t\tname: id.charAt(0).toUpperCase() + id.slice(1),\n\t\t\t\tdescription: \"\",\n\t\t\t\ticon: \"\",\n\t\t\t\tcategory: \"test\",\n\t\t\t\timage: `${id}:latest`,\n\t\t\t\tports: [],\n\t\t\t\tvolumes: [],\n\t\t\t\tenvironment: [],\n\t\t\t\tdependencies: [],\n\t\t\t\tconflicts: [],\n\t\t\t\tskills: [],\n\t\t\t\tmemoryMB: 256,\n\t\t\t\tdocsUrl: \"\",\n\t\t\t},\n\t\t\taddedBy: \"user\" as const,\n\t\t})),\n\t\taddedDependencies: [],\n\t\testimatedMemoryMB: 512,\n\t} as unknown as ResolverOutput;\n}\n\ndescribe(\"generateN8nWorkflows\", () => {\n\tit(\"returns empty object when n8n is not in the stack\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"redis\", \"postgresql\"]));\n\t\texpect(Object.keys(result)).toHaveLength(0);\n\t});\n\n\tit(\"generates workflow file when n8n is present\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\", \"redis\"]));\n\t\texpect(result).toHaveProperty(\"n8n/workflows/openclaw-webhook-handler.json\");\n\t});\n\n\tit(\"generates valid JSON workflow\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow).toBeDefined();\n\t\texpect(workflow.name).toBe(\"OpenClaw Webhook Handler\");\n\t});\n\n\tit(\"workflow has three nodes (webhook, process, respond)\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\", \"redis\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow.nodes).toHaveLength(3);\n\n\t\tconst types = workflow.nodes.map((n: { type: string }) => n.type);\n\t\texpect(types).toContain(\"n8n-nodes-base.webhook\");\n\t\texpect(types).toContain(\"n8n-nodes-base.code\");\n\t\texpect(types).toContain(\"n8n-nodes-base.respondToWebhook\");\n\t});\n\n\tit(\"workflow has correct connections\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow.connections).toHaveProperty(\"Webhook\");\n\t\texpect(workflow.connections).toHaveProperty(\"Process Payload\");\n\t});\n\n\tit(\"workflow is not active by default\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow.active).toBe(false);\n\t});\n\n\tit(\"includes service names in the code node comment\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\", \"redis\", \"postgresql\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\tconst codeNode = workflow.nodes.find((n: { type: string }) => n.type === \"n8n-nodes-base.code\");\n\t\texpect(codeNode.parameters.jsCode).toContain(\"Redis\");\n\t\texpect(codeNode.parameters.jsCode).toContain(\"Postgresql\");\n\t});\n});\n"],"mappings":";;;AAIA,SAAS,aAAa,YAAsC;AAC3D,QAAO;EACN,UAAU,WAAW,KAAK,QAAQ;GACjC,YAAY;IACX;IACA,MAAM,GAAG,OAAO,EAAE,CAAC,aAAa,GAAG,GAAG,MAAM,EAAE;IAC9C,aAAa;IACb,MAAM;IACN,UAAU;IACV,OAAO,GAAG,GAAG;IACb,OAAO,EAAE;IACT,SAAS,EAAE;IACX,aAAa,EAAE;IACf,cAAc,EAAE;IAChB,WAAW,EAAE;IACb,QAAQ,EAAE;IACV,UAAU;IACV,SAAS;IACT;GACD,SAAS;GACT,EAAE;EACH,mBAAmB,EAAE;EACrB,mBAAmB;EACnB;;AAGFA,sBAAAA,SAAS,8BAA8B;AACtC,uBAAA,GAAG,2DAA2D;EAC7D,MAAM,SAASC,iCAAAA,qBAAqB,aAAa,CAAC,SAAS,aAAa,CAAC,CAAC;AAC1E,wBAAA,aAAO,OAAO,KAAK,OAAO,CAAC,CAAC,aAAa,EAAE;GAC1C;AAEF,uBAAA,GAAG,qDAAqD;AAEvD,wBAAA,aADeA,iCAAAA,qBAAqB,aAAa,CAAC,OAAO,QAAQ,CAAC,CAAC,CACrD,CAAC,eAAe,8CAA8C;GAC3E;AAEF,uBAAA,GAAG,uCAAuC;EACzC,MAAM,SAASA,iCAAAA,qBAAqB,aAAa,CAAC,MAAM,CAAC,CAAC;EAC1D,MAAM,WAAW,KAAK,MAAM,OAAO,+CAAgD;AACnF,wBAAA,aAAO,SAAS,CAAC,aAAa;AAC9B,wBAAA,aAAO,SAAS,KAAK,CAAC,KAAK,2BAA2B;GACrD;AAEF,uBAAA,GAAG,8DAA8D;EAChE,MAAM,SAASA,iCAAAA,qBAAqB,aAAa,CAAC,OAAO,QAAQ,CAAC,CAAC;EACnE,MAAM,WAAW,KAAK,MAAM,OAAO,+CAAgD;AACnF,wBAAA,aAAO,SAAS,MAAM,CAAC,aAAa,EAAE;EAEtC,MAAM,QAAQ,SAAS,MAAM,KAAK,MAAwB,EAAE,KAAK;AACjE,wBAAA,aAAO,MAAM,CAAC,UAAU,yBAAyB;AACjD,wBAAA,aAAO,MAAM,CAAC,UAAU,sBAAsB;AAC9C,wBAAA,aAAO,MAAM,CAAC,UAAU,kCAAkC;GACzD;AAEF,uBAAA,GAAG,0CAA0C;EAC5C,MAAM,SAASA,iCAAAA,qBAAqB,aAAa,CAAC,MAAM,CAAC,CAAC;EAC1D,MAAM,WAAW,KAAK,MAAM,OAAO,+CAAgD;AACnF,wBAAA,aAAO,SAAS,YAAY,CAAC,eAAe,UAAU;AACtD,wBAAA,aAAO,SAAS,YAAY,CAAC,eAAe,kBAAkB;GAC7D;AAEF,uBAAA,GAAG,2CAA2C;EAC7C,MAAM,SAASA,iCAAAA,qBAAqB,aAAa,CAAC,MAAM,CAAC,CAAC;AAE1D,wBAAA,aADiB,KAAK,MAAM,OAAO,+CAAgD,CACnE,OAAO,CAAC,KAAK,MAAM;GAClC;AAEF,uBAAA,GAAG,yDAAyD;EAC3D,MAAM,SAASA,iCAAAA,qBAAqB,aAAa;GAAC;GAAO;GAAS;GAAa,CAAC,CAAC;EAEjF,MAAM,WADW,KAAK,MAAM,OAAO,+CAAgD,CACzD,MAAM,MAAM,MAAwB,EAAE,SAAS,sBAAsB;AAC/F,wBAAA,aAAO,SAAS,WAAW,OAAO,CAAC,UAAU,QAAQ;AACrD,wBAAA,aAAO,SAAS,WAAW,OAAO,CAAC,UAAU,aAAa;GACzD;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { a as describe, o as it, t as globalExpect } from "../test.CTcmp4Su-BRa7-bTj.mjs";
|
|
2
|
+
import { generateN8nWorkflows } from "./n8n-workflows.mjs";
|
|
3
|
+
//#region src/generators/n8n-workflows.test.ts
|
|
4
|
+
function makeResolved(serviceIds) {
|
|
5
|
+
return {
|
|
6
|
+
services: serviceIds.map((id) => ({
|
|
7
|
+
definition: {
|
|
8
|
+
id,
|
|
9
|
+
name: id.charAt(0).toUpperCase() + id.slice(1),
|
|
10
|
+
description: "",
|
|
11
|
+
icon: "",
|
|
12
|
+
category: "test",
|
|
13
|
+
image: `${id}:latest`,
|
|
14
|
+
ports: [],
|
|
15
|
+
volumes: [],
|
|
16
|
+
environment: [],
|
|
17
|
+
dependencies: [],
|
|
18
|
+
conflicts: [],
|
|
19
|
+
skills: [],
|
|
20
|
+
memoryMB: 256,
|
|
21
|
+
docsUrl: ""
|
|
22
|
+
},
|
|
23
|
+
addedBy: "user"
|
|
24
|
+
})),
|
|
25
|
+
addedDependencies: [],
|
|
26
|
+
estimatedMemoryMB: 512
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
describe("generateN8nWorkflows", () => {
|
|
30
|
+
it("returns empty object when n8n is not in the stack", () => {
|
|
31
|
+
const result = generateN8nWorkflows(makeResolved(["redis", "postgresql"]));
|
|
32
|
+
globalExpect(Object.keys(result)).toHaveLength(0);
|
|
33
|
+
});
|
|
34
|
+
it("generates workflow file when n8n is present", () => {
|
|
35
|
+
globalExpect(generateN8nWorkflows(makeResolved(["n8n", "redis"]))).toHaveProperty("n8n/workflows/openclaw-webhook-handler.json");
|
|
36
|
+
});
|
|
37
|
+
it("generates valid JSON workflow", () => {
|
|
38
|
+
const result = generateN8nWorkflows(makeResolved(["n8n"]));
|
|
39
|
+
const workflow = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]);
|
|
40
|
+
globalExpect(workflow).toBeDefined();
|
|
41
|
+
globalExpect(workflow.name).toBe("OpenClaw Webhook Handler");
|
|
42
|
+
});
|
|
43
|
+
it("workflow has three nodes (webhook, process, respond)", () => {
|
|
44
|
+
const result = generateN8nWorkflows(makeResolved(["n8n", "redis"]));
|
|
45
|
+
const workflow = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]);
|
|
46
|
+
globalExpect(workflow.nodes).toHaveLength(3);
|
|
47
|
+
const types = workflow.nodes.map((n) => n.type);
|
|
48
|
+
globalExpect(types).toContain("n8n-nodes-base.webhook");
|
|
49
|
+
globalExpect(types).toContain("n8n-nodes-base.code");
|
|
50
|
+
globalExpect(types).toContain("n8n-nodes-base.respondToWebhook");
|
|
51
|
+
});
|
|
52
|
+
it("workflow has correct connections", () => {
|
|
53
|
+
const result = generateN8nWorkflows(makeResolved(["n8n"]));
|
|
54
|
+
const workflow = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]);
|
|
55
|
+
globalExpect(workflow.connections).toHaveProperty("Webhook");
|
|
56
|
+
globalExpect(workflow.connections).toHaveProperty("Process Payload");
|
|
57
|
+
});
|
|
58
|
+
it("workflow is not active by default", () => {
|
|
59
|
+
const result = generateN8nWorkflows(makeResolved(["n8n"]));
|
|
60
|
+
globalExpect(JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]).active).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
it("includes service names in the code node comment", () => {
|
|
63
|
+
const result = generateN8nWorkflows(makeResolved([
|
|
64
|
+
"n8n",
|
|
65
|
+
"redis",
|
|
66
|
+
"postgresql"
|
|
67
|
+
]));
|
|
68
|
+
const codeNode = JSON.parse(result["n8n/workflows/openclaw-webhook-handler.json"]).nodes.find((n) => n.type === "n8n-nodes-base.code");
|
|
69
|
+
globalExpect(codeNode.parameters.jsCode).toContain("Redis");
|
|
70
|
+
globalExpect(codeNode.parameters.jsCode).toContain("Postgresql");
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//#endregion
|
|
74
|
+
export {};
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=n8n-workflows.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-workflows.test.mjs","names":[],"sources":["../../src/generators/n8n-workflows.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { generateN8nWorkflows } from \"./n8n-workflows.js\";\n\nfunction makeResolved(serviceIds: string[]): ResolverOutput {\n\treturn {\n\t\tservices: serviceIds.map((id) => ({\n\t\t\tdefinition: {\n\t\t\t\tid,\n\t\t\t\tname: id.charAt(0).toUpperCase() + id.slice(1),\n\t\t\t\tdescription: \"\",\n\t\t\t\ticon: \"\",\n\t\t\t\tcategory: \"test\",\n\t\t\t\timage: `${id}:latest`,\n\t\t\t\tports: [],\n\t\t\t\tvolumes: [],\n\t\t\t\tenvironment: [],\n\t\t\t\tdependencies: [],\n\t\t\t\tconflicts: [],\n\t\t\t\tskills: [],\n\t\t\t\tmemoryMB: 256,\n\t\t\t\tdocsUrl: \"\",\n\t\t\t},\n\t\t\taddedBy: \"user\" as const,\n\t\t})),\n\t\taddedDependencies: [],\n\t\testimatedMemoryMB: 512,\n\t} as unknown as ResolverOutput;\n}\n\ndescribe(\"generateN8nWorkflows\", () => {\n\tit(\"returns empty object when n8n is not in the stack\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"redis\", \"postgresql\"]));\n\t\texpect(Object.keys(result)).toHaveLength(0);\n\t});\n\n\tit(\"generates workflow file when n8n is present\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\", \"redis\"]));\n\t\texpect(result).toHaveProperty(\"n8n/workflows/openclaw-webhook-handler.json\");\n\t});\n\n\tit(\"generates valid JSON workflow\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow).toBeDefined();\n\t\texpect(workflow.name).toBe(\"OpenClaw Webhook Handler\");\n\t});\n\n\tit(\"workflow has three nodes (webhook, process, respond)\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\", \"redis\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow.nodes).toHaveLength(3);\n\n\t\tconst types = workflow.nodes.map((n: { type: string }) => n.type);\n\t\texpect(types).toContain(\"n8n-nodes-base.webhook\");\n\t\texpect(types).toContain(\"n8n-nodes-base.code\");\n\t\texpect(types).toContain(\"n8n-nodes-base.respondToWebhook\");\n\t});\n\n\tit(\"workflow has correct connections\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow.connections).toHaveProperty(\"Webhook\");\n\t\texpect(workflow.connections).toHaveProperty(\"Process Payload\");\n\t});\n\n\tit(\"workflow is not active by default\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\texpect(workflow.active).toBe(false);\n\t});\n\n\tit(\"includes service names in the code node comment\", () => {\n\t\tconst result = generateN8nWorkflows(makeResolved([\"n8n\", \"redis\", \"postgresql\"]));\n\t\tconst workflow = JSON.parse(result[\"n8n/workflows/openclaw-webhook-handler.json\"]!);\n\t\tconst codeNode = workflow.nodes.find((n: { type: string }) => n.type === \"n8n-nodes-base.code\");\n\t\texpect(codeNode.parameters.jsCode).toContain(\"Redis\");\n\t\texpect(codeNode.parameters.jsCode).toContain(\"Postgresql\");\n\t});\n});\n"],"mappings":";;;AAIA,SAAS,aAAa,YAAsC;AAC3D,QAAO;EACN,UAAU,WAAW,KAAK,QAAQ;GACjC,YAAY;IACX;IACA,MAAM,GAAG,OAAO,EAAE,CAAC,aAAa,GAAG,GAAG,MAAM,EAAE;IAC9C,aAAa;IACb,MAAM;IACN,UAAU;IACV,OAAO,GAAG,GAAG;IACb,OAAO,EAAE;IACT,SAAS,EAAE;IACX,aAAa,EAAE;IACf,cAAc,EAAE;IAChB,WAAW,EAAE;IACb,QAAQ,EAAE;IACV,UAAU;IACV,SAAS;IACT;GACD,SAAS;GACT,EAAE;EACH,mBAAmB,EAAE;EACrB,mBAAmB;EACnB;;AAGF,SAAS,8BAA8B;AACtC,IAAG,2DAA2D;EAC7D,MAAM,SAAS,qBAAqB,aAAa,CAAC,SAAS,aAAa,CAAC,CAAC;AAC1E,eAAO,OAAO,KAAK,OAAO,CAAC,CAAC,aAAa,EAAE;GAC1C;AAEF,IAAG,qDAAqD;AAEvD,eADe,qBAAqB,aAAa,CAAC,OAAO,QAAQ,CAAC,CAAC,CACrD,CAAC,eAAe,8CAA8C;GAC3E;AAEF,IAAG,uCAAuC;EACzC,MAAM,SAAS,qBAAqB,aAAa,CAAC,MAAM,CAAC,CAAC;EAC1D,MAAM,WAAW,KAAK,MAAM,OAAO,+CAAgD;AACnF,eAAO,SAAS,CAAC,aAAa;AAC9B,eAAO,SAAS,KAAK,CAAC,KAAK,2BAA2B;GACrD;AAEF,IAAG,8DAA8D;EAChE,MAAM,SAAS,qBAAqB,aAAa,CAAC,OAAO,QAAQ,CAAC,CAAC;EACnE,MAAM,WAAW,KAAK,MAAM,OAAO,+CAAgD;AACnF,eAAO,SAAS,MAAM,CAAC,aAAa,EAAE;EAEtC,MAAM,QAAQ,SAAS,MAAM,KAAK,MAAwB,EAAE,KAAK;AACjE,eAAO,MAAM,CAAC,UAAU,yBAAyB;AACjD,eAAO,MAAM,CAAC,UAAU,sBAAsB;AAC9C,eAAO,MAAM,CAAC,UAAU,kCAAkC;GACzD;AAEF,IAAG,0CAA0C;EAC5C,MAAM,SAAS,qBAAqB,aAAa,CAAC,MAAM,CAAC,CAAC;EAC1D,MAAM,WAAW,KAAK,MAAM,OAAO,+CAAgD;AACnF,eAAO,SAAS,YAAY,CAAC,eAAe,UAAU;AACtD,eAAO,SAAS,YAAY,CAAC,eAAe,kBAAkB;GAC7D;AAEF,IAAG,2CAA2C;EAC7C,MAAM,SAAS,qBAAqB,aAAa,CAAC,MAAM,CAAC,CAAC;AAE1D,eADiB,KAAK,MAAM,OAAO,+CAAgD,CACnE,OAAO,CAAC,KAAK,MAAM;GAClC;AAEF,IAAG,yDAAyD;EAC3D,MAAM,SAAS,qBAAqB,aAAa;GAAC;GAAO;GAAS;GAAa,CAAC,CAAC;EAEjF,MAAM,WADW,KAAK,MAAM,OAAO,+CAAgD,CACzD,MAAM,MAAM,MAAwB,EAAE,SAAS,sBAAsB;AAC/F,eAAO,SAAS,WAAW,OAAO,CAAC,UAAU,QAAQ;AACrD,eAAO,SAAS,WAAW,OAAO,CAAC,UAAU,aAAa;GACzD;EACD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const require_test_CTcmp4Su = require("../test.CTcmp4Su-BWSPM8ZQ.cjs");
|
|
2
|
+
const require_generators_openclaw_install_script = require("./openclaw-install-script.cjs");
|
|
3
|
+
//#region src/generators/openclaw-install-script.test.ts
|
|
4
|
+
require_test_CTcmp4Su.describe("generateOpenclawInstallScript", () => {
|
|
5
|
+
require_test_CTcmp4Su.it("generates both sh and ps1 scripts", () => {
|
|
6
|
+
const files = require_generators_openclaw_install_script.generateOpenclawInstallScript({ projectName: "test-project" });
|
|
7
|
+
require_test_CTcmp4Su.globalExpect(files).toHaveProperty("scripts/install-openclaw.sh");
|
|
8
|
+
require_test_CTcmp4Su.globalExpect(files).toHaveProperty("scripts/install-openclaw.ps1");
|
|
9
|
+
});
|
|
10
|
+
require_test_CTcmp4Su.it("sh script starts with shebang", () => {
|
|
11
|
+
require_test_CTcmp4Su.globalExpect(require_generators_openclaw_install_script.generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.sh"]).toMatch(/^#!/);
|
|
12
|
+
});
|
|
13
|
+
require_test_CTcmp4Su.it("sh script uses set -euo pipefail", () => {
|
|
14
|
+
require_test_CTcmp4Su.globalExpect(require_generators_openclaw_install_script.generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.sh"]).toContain("set -euo pipefail");
|
|
15
|
+
});
|
|
16
|
+
require_test_CTcmp4Su.it("includes project name in scripts", () => {
|
|
17
|
+
const files = require_generators_openclaw_install_script.generateOpenclawInstallScript({ projectName: "my-project" });
|
|
18
|
+
require_test_CTcmp4Su.globalExpect(files["scripts/install-openclaw.sh"]).toContain("my-project");
|
|
19
|
+
require_test_CTcmp4Su.globalExpect(files["scripts/install-openclaw.ps1"]).toContain("my-project");
|
|
20
|
+
});
|
|
21
|
+
require_test_CTcmp4Su.it("uses official installer URL", () => {
|
|
22
|
+
require_test_CTcmp4Su.globalExpect(require_generators_openclaw_install_script.generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.sh"]).toContain("openclaw.ai/install.sh");
|
|
23
|
+
});
|
|
24
|
+
require_test_CTcmp4Su.it("ps1 script checks for WSL", () => {
|
|
25
|
+
require_test_CTcmp4Su.globalExpect(require_generators_openclaw_install_script.generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.ps1"]).toContain("wsl");
|
|
26
|
+
});
|
|
27
|
+
require_test_CTcmp4Su.it("includes next steps in output", () => {
|
|
28
|
+
const files = require_generators_openclaw_install_script.generateOpenclawInstallScript({ projectName: "test" });
|
|
29
|
+
require_test_CTcmp4Su.globalExpect(files["scripts/install-openclaw.sh"]).toContain("Next steps");
|
|
30
|
+
require_test_CTcmp4Su.globalExpect(files["scripts/install-openclaw.ps1"]).toContain("Next steps");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//#endregion
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=openclaw-install-script.test.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-install-script.test.cjs","names":["describe","generateOpenclawInstallScript"],"sources":["../../src/generators/openclaw-install-script.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generateOpenclawInstallScript } from \"./openclaw-install-script.js\";\n\ndescribe(\"generateOpenclawInstallScript\", () => {\n\tit(\"generates both sh and ps1 scripts\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test-project\" });\n\t\texpect(files).toHaveProperty(\"scripts/install-openclaw.sh\");\n\t\texpect(files).toHaveProperty(\"scripts/install-openclaw.ps1\");\n\t});\n\n\tit(\"sh script starts with shebang\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toMatch(/^#!/);\n\t});\n\n\tit(\"sh script uses set -euo pipefail\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"set -euo pipefail\");\n\t});\n\n\tit(\"includes project name in scripts\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"my-project\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"my-project\");\n\t\texpect(files[\"scripts/install-openclaw.ps1\"]).toContain(\"my-project\");\n\t});\n\n\tit(\"uses official installer URL\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"openclaw.ai/install.sh\");\n\t});\n\n\tit(\"ps1 script checks for WSL\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.ps1\"]).toContain(\"wsl\");\n\t});\n\n\tit(\"includes next steps in output\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"Next steps\");\n\t\texpect(files[\"scripts/install-openclaw.ps1\"]).toContain(\"Next steps\");\n\t});\n});\n"],"mappings":";;;AAGAA,sBAAAA,SAAS,uCAAuC;AAC/C,uBAAA,GAAG,2CAA2C;EAC7C,MAAM,QAAQC,2CAAAA,8BAA8B,EAAE,aAAa,gBAAgB,CAAC;AAC5E,wBAAA,aAAO,MAAM,CAAC,eAAe,8BAA8B;AAC3D,wBAAA,aAAO,MAAM,CAAC,eAAe,+BAA+B;GAC3D;AAEF,uBAAA,GAAG,uCAAuC;AAEzC,wBAAA,aADcA,2CAAAA,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,+BAA+B,CAAC,QAAQ,MAAM;GAC1D;AAEF,uBAAA,GAAG,0CAA0C;AAE5C,wBAAA,aADcA,2CAAAA,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,+BAA+B,CAAC,UAAU,oBAAoB;GAC1E;AAEF,uBAAA,GAAG,0CAA0C;EAC5C,MAAM,QAAQA,2CAAAA,8BAA8B,EAAE,aAAa,cAAc,CAAC;AAC1E,wBAAA,aAAO,MAAM,+BAA+B,CAAC,UAAU,aAAa;AACpE,wBAAA,aAAO,MAAM,gCAAgC,CAAC,UAAU,aAAa;GACpE;AAEF,uBAAA,GAAG,qCAAqC;AAEvC,wBAAA,aADcA,2CAAAA,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,+BAA+B,CAAC,UAAU,yBAAyB;GAC/E;AAEF,uBAAA,GAAG,mCAAmC;AAErC,wBAAA,aADcA,2CAAAA,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,gCAAgC,CAAC,UAAU,MAAM;GAC7D;AAEF,uBAAA,GAAG,uCAAuC;EACzC,MAAM,QAAQA,2CAAAA,8BAA8B,EAAE,aAAa,QAAQ,CAAC;AACpE,wBAAA,aAAO,MAAM,+BAA+B,CAAC,UAAU,aAAa;AACpE,wBAAA,aAAO,MAAM,gCAAgC,CAAC,UAAU,aAAa;GACpE;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { a as describe, o as it, t as globalExpect } from "../test.CTcmp4Su-BRa7-bTj.mjs";
|
|
2
|
+
import { generateOpenclawInstallScript } from "./openclaw-install-script.mjs";
|
|
3
|
+
//#region src/generators/openclaw-install-script.test.ts
|
|
4
|
+
describe("generateOpenclawInstallScript", () => {
|
|
5
|
+
it("generates both sh and ps1 scripts", () => {
|
|
6
|
+
const files = generateOpenclawInstallScript({ projectName: "test-project" });
|
|
7
|
+
globalExpect(files).toHaveProperty("scripts/install-openclaw.sh");
|
|
8
|
+
globalExpect(files).toHaveProperty("scripts/install-openclaw.ps1");
|
|
9
|
+
});
|
|
10
|
+
it("sh script starts with shebang", () => {
|
|
11
|
+
globalExpect(generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.sh"]).toMatch(/^#!/);
|
|
12
|
+
});
|
|
13
|
+
it("sh script uses set -euo pipefail", () => {
|
|
14
|
+
globalExpect(generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.sh"]).toContain("set -euo pipefail");
|
|
15
|
+
});
|
|
16
|
+
it("includes project name in scripts", () => {
|
|
17
|
+
const files = generateOpenclawInstallScript({ projectName: "my-project" });
|
|
18
|
+
globalExpect(files["scripts/install-openclaw.sh"]).toContain("my-project");
|
|
19
|
+
globalExpect(files["scripts/install-openclaw.ps1"]).toContain("my-project");
|
|
20
|
+
});
|
|
21
|
+
it("uses official installer URL", () => {
|
|
22
|
+
globalExpect(generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.sh"]).toContain("openclaw.ai/install.sh");
|
|
23
|
+
});
|
|
24
|
+
it("ps1 script checks for WSL", () => {
|
|
25
|
+
globalExpect(generateOpenclawInstallScript({ projectName: "test" })["scripts/install-openclaw.ps1"]).toContain("wsl");
|
|
26
|
+
});
|
|
27
|
+
it("includes next steps in output", () => {
|
|
28
|
+
const files = generateOpenclawInstallScript({ projectName: "test" });
|
|
29
|
+
globalExpect(files["scripts/install-openclaw.sh"]).toContain("Next steps");
|
|
30
|
+
globalExpect(files["scripts/install-openclaw.ps1"]).toContain("Next steps");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//#endregion
|
|
34
|
+
export {};
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=openclaw-install-script.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-install-script.test.mjs","names":[],"sources":["../../src/generators/openclaw-install-script.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generateOpenclawInstallScript } from \"./openclaw-install-script.js\";\n\ndescribe(\"generateOpenclawInstallScript\", () => {\n\tit(\"generates both sh and ps1 scripts\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test-project\" });\n\t\texpect(files).toHaveProperty(\"scripts/install-openclaw.sh\");\n\t\texpect(files).toHaveProperty(\"scripts/install-openclaw.ps1\");\n\t});\n\n\tit(\"sh script starts with shebang\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toMatch(/^#!/);\n\t});\n\n\tit(\"sh script uses set -euo pipefail\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"set -euo pipefail\");\n\t});\n\n\tit(\"includes project name in scripts\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"my-project\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"my-project\");\n\t\texpect(files[\"scripts/install-openclaw.ps1\"]).toContain(\"my-project\");\n\t});\n\n\tit(\"uses official installer URL\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"openclaw.ai/install.sh\");\n\t});\n\n\tit(\"ps1 script checks for WSL\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.ps1\"]).toContain(\"wsl\");\n\t});\n\n\tit(\"includes next steps in output\", () => {\n\t\tconst files = generateOpenclawInstallScript({ projectName: \"test\" });\n\t\texpect(files[\"scripts/install-openclaw.sh\"]).toContain(\"Next steps\");\n\t\texpect(files[\"scripts/install-openclaw.ps1\"]).toContain(\"Next steps\");\n\t});\n});\n"],"mappings":";;;AAGA,SAAS,uCAAuC;AAC/C,IAAG,2CAA2C;EAC7C,MAAM,QAAQ,8BAA8B,EAAE,aAAa,gBAAgB,CAAC;AAC5E,eAAO,MAAM,CAAC,eAAe,8BAA8B;AAC3D,eAAO,MAAM,CAAC,eAAe,+BAA+B;GAC3D;AAEF,IAAG,uCAAuC;AAEzC,eADc,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,+BAA+B,CAAC,QAAQ,MAAM;GAC1D;AAEF,IAAG,0CAA0C;AAE5C,eADc,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,+BAA+B,CAAC,UAAU,oBAAoB;GAC1E;AAEF,IAAG,0CAA0C;EAC5C,MAAM,QAAQ,8BAA8B,EAAE,aAAa,cAAc,CAAC;AAC1E,eAAO,MAAM,+BAA+B,CAAC,UAAU,aAAa;AACpE,eAAO,MAAM,gCAAgC,CAAC,UAAU,aAAa;GACpE;AAEF,IAAG,qCAAqC;AAEvC,eADc,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,+BAA+B,CAAC,UAAU,yBAAyB;GAC/E;AAEF,IAAG,mCAAmC;AAErC,eADc,8BAA8B,EAAE,aAAa,QAAQ,CAAC,CACvD,gCAAgC,CAAC,UAAU,MAAM;GAC7D;AAEF,IAAG,uCAAuC;EACzC,MAAM,QAAQ,8BAA8B,EAAE,aAAa,QAAQ,CAAC;AACpE,eAAO,MAAM,+BAA+B,CAAC,UAAU,aAAa;AACpE,eAAO,MAAM,gCAAgC,CAAC,UAAU,aAAa;GACpE;EACD"}
|
|
@@ -406,6 +406,65 @@ const LOCAL_PROVIDER_PORTS = {
|
|
|
406
406
|
* Generates a default `openclaw/config/openclaw.json` tailored
|
|
407
407
|
* to the services installed in the stack.
|
|
408
408
|
*/
|
|
409
|
+
/**
|
|
410
|
+
* Builds the memory configuration based on installed services.
|
|
411
|
+
* Priority: mem0 > memu > hindsight > builtin.
|
|
412
|
+
* Also detects vector databases and adds vectorStore config.
|
|
413
|
+
*/
|
|
414
|
+
function buildMemoryConfig(resolved) {
|
|
415
|
+
const has = (id) => resolved.services.some((s) => s.definition.id === id);
|
|
416
|
+
const vectorStore = has("qdrant") ? {
|
|
417
|
+
provider: "qdrant",
|
|
418
|
+
host: "qdrant",
|
|
419
|
+
port: 6333
|
|
420
|
+
} : has("chromadb") ? {
|
|
421
|
+
provider: "chromadb",
|
|
422
|
+
host: "chromadb",
|
|
423
|
+
port: 8e3
|
|
424
|
+
} : has("weaviate") ? {
|
|
425
|
+
provider: "weaviate",
|
|
426
|
+
host: "weaviate",
|
|
427
|
+
port: 8080
|
|
428
|
+
} : has("milvus") ? {
|
|
429
|
+
provider: "milvus",
|
|
430
|
+
uri: "http://milvus:19530"
|
|
431
|
+
} : null;
|
|
432
|
+
if (has("mem0")) return {
|
|
433
|
+
backend: "mem0",
|
|
434
|
+
citations: "auto",
|
|
435
|
+
mem0: {
|
|
436
|
+
host: "mem0",
|
|
437
|
+
port: 8e3,
|
|
438
|
+
userId: "openclaw-agent"
|
|
439
|
+
},
|
|
440
|
+
...vectorStore ? { vectorStore } : {}
|
|
441
|
+
};
|
|
442
|
+
if (has("memu")) return {
|
|
443
|
+
backend: "memu",
|
|
444
|
+
citations: "auto",
|
|
445
|
+
memu: {
|
|
446
|
+
host: "memu",
|
|
447
|
+
port: 8e3,
|
|
448
|
+
agentId: "openclaw-agent"
|
|
449
|
+
},
|
|
450
|
+
...vectorStore ? { vectorStore } : {}
|
|
451
|
+
};
|
|
452
|
+
if (has("hindsight")) return {
|
|
453
|
+
backend: "hindsight",
|
|
454
|
+
citations: "auto",
|
|
455
|
+
hindsight: {
|
|
456
|
+
host: "hindsight",
|
|
457
|
+
port: 8888,
|
|
458
|
+
namespace: "openclaw"
|
|
459
|
+
},
|
|
460
|
+
...vectorStore ? { vectorStore } : {}
|
|
461
|
+
};
|
|
462
|
+
return {
|
|
463
|
+
backend: "builtin",
|
|
464
|
+
citations: "auto",
|
|
465
|
+
...vectorStore ? { vectorStore } : {}
|
|
466
|
+
};
|
|
467
|
+
}
|
|
409
468
|
function generateOpenClawConfig(resolved, options) {
|
|
410
469
|
const isDocker = options.deploymentType === "docker";
|
|
411
470
|
const localInferenceHost = isDocker ? "host.docker.internal" : "localhost";
|
|
@@ -607,10 +666,7 @@ function generateOpenClawConfig(resolved, options) {
|
|
|
607
666
|
}
|
|
608
667
|
},
|
|
609
668
|
session: { agentToAgent: { maxPingPongTurns: 5 } },
|
|
610
|
-
memory:
|
|
611
|
-
backend: "builtin",
|
|
612
|
-
citations: "auto"
|
|
613
|
-
},
|
|
669
|
+
memory: buildMemoryConfig(resolved),
|
|
614
670
|
ui: { assistant: { name: "OpenClaw" } },
|
|
615
671
|
media: {
|
|
616
672
|
preserveFilenames: true,
|
|
@@ -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: {\n\t\t\t\t\tmaxConcurrent: 8,\n\t\t\t\t\t// Allow spawning sub-agents under any agent ID (essential for swarm collaboration)\n\t\t\t\t\tallowAgents: [\"*\"],\n\t\t\t\t},\n\t\t\t\t// Sandbox defaults for agent exec isolation\n\t\t\t\t...(isDocker\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tsandbox: {\n\t\t\t\t\t\t\t\tdocker: {\n\t\t\t\t\t\t\t\t\tcontainerPrefix: \"openclaw-sandbox\",\n\t\t\t\t\t\t\t\t\tworkdir: \"/workspace\",\n\t\t\t\t\t\t\t\t\treadOnlyRoot: true,\n\t\t\t\t\t\t\t\t\tnetwork: \"none\",\n\t\t\t\t\t\t\t\t\tcapDrop: [\"ALL\"],\n\t\t\t\t\t\t\t\t\tpidsLimit: 256,\n\t\t\t\t\t\t\t\t\tmemory: \"512m\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tbrowser: {\n\t\t\t\t\t\t\t\t\tenabled: false,\n\t\t\t\t\t\t\t\t\tautoStart: false,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\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\t// mDNS/Bonjour for local-network instance discovery (swarm auto-discovery)\n\t\t\t// \"minimal\" hides sensitive metadata; \"full\" exposes cliPath/sshPort for easier discovery\n\t\t\tmdns: {\n\t\t\t\tmode: isDocker ? \"off\" : \"minimal\",\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\t// Node host config — controls how this instance exposes services to other gateway nodes\n\t\tnodeHost: {\n\t\t\tbrowserProxy: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t},\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\treload: {\n\t\t\t\tmode: \"hybrid\",\n\t\t\t},\n\t\t\thttp: {\n\t\t\t\tendpoints: {\n\t\t\t\t\tchatCompletions: { enabled: false },\n\t\t\t\t\tresponses: { enabled: false },\n\t\t\t\t},\n\t\t\t},\n\t\t\tnodes: {\n\t\t\t\tbrowser: {\n\t\t\t\t\t// \"auto\" lets gateway pick best node for browser proxying; \"manual\" pins to specific node\n\t\t\t\t\tmode: \"auto\",\n\t\t\t\t},\n\t\t\t\t// Allowlist/denylist for node.invoke commands across the swarm\n\t\t\t\tallowCommands: [],\n\t\t\t\tdenyCommands: [\"camera.snap\", \"camera.clip\", \"screen.record\"],\n\t\t\t},\n\t\t\t// Remote gateway connection — enables this instance to connect to another OpenClaw gateway\n\t\t\t// Configure for swarm topologies: each instance can connect to one upstream gateway\n\t\t\t// Transport: \"direct\" = WebSocket (ws/wss), \"ssh\" = SSH tunnel for secure remote access\n\t\t\tremote: {\n\t\t\t\t// url: \"wss://gateway.example.com:18789\", // Remote gateway WebSocket URL\n\t\t\t\ttransport: \"direct\",\n\t\t\t\t// token: \"${OPENCLAW_REMOTE_GATEWAY_TOKEN}\", // Auth token for the remote gateway\n\t\t\t\t// sshTarget: \"user@gateway-host\", // For SSH tunnel transport\n\t\t\t\t// sshIdentity: \"~/.ssh/id_ed25519\", // SSH key for tunnel\n\t\t\t\t// tlsFingerprint: \"\", // Pin remote gateway TLS cert (sha256)\n\t\t\t},\n\t\t\tchannelHealthCheckMinutes: 5,\n\t\t},\n\t\tbrowser: {\n\t\t\tenabled: true,\n\t\t\t// WSL2 users may need relayBindHost: \"0.0.0.0\" for cross-namespace access\n\t\t\t...(isDocker ? {} : { relayBindHost: \"127.0.0.1\" }),\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\t// ACP (Agent Client Protocol) — external agents can connect to the gateway\n\t\t// Disabled by default; enable when using ACP-compatible agents (e.g. acpx)\n\t\tacp: {\n\t\t\tenabled: false,\n\t\t\tdispatch: { enabled: false },\n\t\t\tmaxConcurrentSessions: 4,\n\t\t\tstream: {\n\t\t\t\tdeliveryMode: \"live\",\n\t\t\t\trepeatSuppression: true,\n\t\t\t},\n\t\t\truntime: {\n\t\t\t\tttlMinutes: 30,\n\t\t\t},\n\t\t},\n\t\t// Tools configuration — web search, fetch, exec security, loop detection\n\t\ttools: {\n\t\t\tweb: {\n\t\t\t\tsearch: {\n\t\t\t\t\t// Enabled when a search API key is available (BRAVE_API_KEY, etc.)\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tprovider: \"brave\",\n\t\t\t\t\tmaxResults: 5,\n\t\t\t\t\ttimeoutSeconds: 10,\n\t\t\t\t\tcacheTtlMinutes: 60,\n\t\t\t\t},\n\t\t\t\tfetch: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tmaxChars: 30000,\n\t\t\t\t\ttimeoutSeconds: 15,\n\t\t\t\t\tcacheTtlMinutes: 30,\n\t\t\t\t\treadability: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\texec: {\n\t\t\t\t// Docker: sandbox exec inside a nested container; bare-metal: deny by default\n\t\t\t\thost: isDocker ? \"sandbox\" : \"gateway\",\n\t\t\t\tsecurity: \"allowlist\",\n\t\t\t\task: \"on-miss\",\n\t\t\t\tbackgroundMs: 30000,\n\t\t\t\ttimeoutSec: 300,\n\t\t\t},\n\t\t\t// Filesystem path guards\n\t\t\tfs: {\n\t\t\t\t// In Docker the workspace is already isolated; on bare-metal restrict to workspace\n\t\t\t\tworkspaceOnly: !isDocker,\n\t\t\t},\n\t\t\t// Prevent stuck tool-call loops\n\t\t\tloopDetection: {\n\t\t\t\tenabled: true,\n\t\t\t\thistorySize: 30,\n\t\t\t\twarningThreshold: 10,\n\t\t\t\tcriticalThreshold: 20,\n\t\t\t\tglobalCircuitBreakerThreshold: 30,\n\t\t\t},\n\t\t\tsessions: {\n\t\t\t\tvisibility: \"tree\",\n\t\t\t},\n\t\t\t// Agent-to-agent messaging — allows agents to invoke each other at runtime\n\t\t\t// Essential for swarm architectures where multiple OpenClaw instances collaborate\n\t\t\tagentToAgent: {\n\t\t\t\tenabled: true,\n\t\t\t\t// Allowlist of agent IDs or patterns that can be reached; \"*\" = any agent\n\t\t\t\tallow: [\"*\"],\n\t\t\t},\n\t\t},\n\t\t// Session-level agent-to-agent safety limits\n\t\tsession: {\n\t\t\tagentToAgent: {\n\t\t\t\t// Max ping-pong turns between requester and target agent (prevents infinite loops)\n\t\t\t\tmaxPingPongTurns: 5,\n\t\t\t},\n\t\t},\n\t\t// Memory — vector search over session history and markdown notes\n\t\tmemory: {\n\t\t\tbackend: \"builtin\",\n\t\t\tcitations: \"auto\",\n\t\t},\n\t\t// UI customization\n\t\tui: {\n\t\t\tassistant: {\n\t\t\t\tname: \"OpenClaw\",\n\t\t\t},\n\t\t},\n\t\t// Media retention\n\t\tmedia: {\n\t\t\tpreserveFilenames: true,\n\t\t\tttlHours: 168, // 7 days\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 */\n/**\n * Builds the memory configuration based on installed services.\n * Priority: mem0 > memu > hindsight > builtin.\n * Also detects vector databases and adds vectorStore config.\n */\nfunction buildMemoryConfig(resolved: ResolverOutput): Record<string, unknown> {\n\tconst has = (id: string) => resolved.services.some((s) => s.definition.id === id);\n\n\t// Detect vector databases (priority order)\n\tconst vectorStore = has(\"qdrant\")\n\t\t? { provider: \"qdrant\", host: \"qdrant\", port: 6333 }\n\t\t: has(\"chromadb\")\n\t\t\t? { provider: \"chromadb\", host: \"chromadb\", port: 8000 }\n\t\t\t: has(\"weaviate\")\n\t\t\t\t? { provider: \"weaviate\", host: \"weaviate\", port: 8080 }\n\t\t\t\t: has(\"milvus\")\n\t\t\t\t\t? { provider: \"milvus\", uri: \"http://milvus:19530\" }\n\t\t\t\t\t: null;\n\n\t// Detect memory services (priority order)\n\tif (has(\"mem0\")) {\n\t\treturn {\n\t\t\tbackend: \"mem0\",\n\t\t\tcitations: \"auto\",\n\t\t\tmem0: { host: \"mem0\", port: 8000, userId: \"openclaw-agent\" },\n\t\t\t...(vectorStore ? { vectorStore } : {}),\n\t\t};\n\t}\n\n\tif (has(\"memu\")) {\n\t\treturn {\n\t\t\tbackend: \"memu\",\n\t\t\tcitations: \"auto\",\n\t\t\tmemu: { host: \"memu\", port: 8000, agentId: \"openclaw-agent\" },\n\t\t\t...(vectorStore ? { vectorStore } : {}),\n\t\t};\n\t}\n\n\tif (has(\"hindsight\")) {\n\t\treturn {\n\t\t\tbackend: \"hindsight\",\n\t\t\tcitations: \"auto\",\n\t\t\thindsight: { host: \"hindsight\", port: 8888, namespace: \"openclaw\" },\n\t\t\t...(vectorStore ? { vectorStore } : {}),\n\t\t};\n\t}\n\n\t// No memory service — use builtin, optionally with a vector store\n\treturn {\n\t\tbackend: \"builtin\",\n\t\tcitations: \"auto\",\n\t\t...(vectorStore ? { vectorStore } : {}),\n\t};\n}\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: {\n\t\t\t\t\tmaxConcurrent: 8,\n\t\t\t\t\t// Allow spawning sub-agents under any agent ID (essential for swarm collaboration)\n\t\t\t\t\tallowAgents: [\"*\"],\n\t\t\t\t},\n\t\t\t\t// Sandbox defaults for agent exec isolation\n\t\t\t\t...(isDocker\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tsandbox: {\n\t\t\t\t\t\t\t\tdocker: {\n\t\t\t\t\t\t\t\t\tcontainerPrefix: \"openclaw-sandbox\",\n\t\t\t\t\t\t\t\t\tworkdir: \"/workspace\",\n\t\t\t\t\t\t\t\t\treadOnlyRoot: true,\n\t\t\t\t\t\t\t\t\tnetwork: \"none\",\n\t\t\t\t\t\t\t\t\tcapDrop: [\"ALL\"],\n\t\t\t\t\t\t\t\t\tpidsLimit: 256,\n\t\t\t\t\t\t\t\t\tmemory: \"512m\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tbrowser: {\n\t\t\t\t\t\t\t\t\tenabled: false,\n\t\t\t\t\t\t\t\t\tautoStart: false,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\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\t// mDNS/Bonjour for local-network instance discovery (swarm auto-discovery)\n\t\t\t// \"minimal\" hides sensitive metadata; \"full\" exposes cliPath/sshPort for easier discovery\n\t\t\tmdns: {\n\t\t\t\tmode: isDocker ? \"off\" : \"minimal\",\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\t// Node host config — controls how this instance exposes services to other gateway nodes\n\t\tnodeHost: {\n\t\t\tbrowserProxy: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t},\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\treload: {\n\t\t\t\tmode: \"hybrid\",\n\t\t\t},\n\t\t\thttp: {\n\t\t\t\tendpoints: {\n\t\t\t\t\tchatCompletions: { enabled: false },\n\t\t\t\t\tresponses: { enabled: false },\n\t\t\t\t},\n\t\t\t},\n\t\t\tnodes: {\n\t\t\t\tbrowser: {\n\t\t\t\t\t// \"auto\" lets gateway pick best node for browser proxying; \"manual\" pins to specific node\n\t\t\t\t\tmode: \"auto\",\n\t\t\t\t},\n\t\t\t\t// Allowlist/denylist for node.invoke commands across the swarm\n\t\t\t\tallowCommands: [],\n\t\t\t\tdenyCommands: [\"camera.snap\", \"camera.clip\", \"screen.record\"],\n\t\t\t},\n\t\t\t// Remote gateway connection — enables this instance to connect to another OpenClaw gateway\n\t\t\t// Configure for swarm topologies: each instance can connect to one upstream gateway\n\t\t\t// Transport: \"direct\" = WebSocket (ws/wss), \"ssh\" = SSH tunnel for secure remote access\n\t\t\tremote: {\n\t\t\t\t// url: \"wss://gateway.example.com:18789\", // Remote gateway WebSocket URL\n\t\t\t\ttransport: \"direct\",\n\t\t\t\t// token: \"${OPENCLAW_REMOTE_GATEWAY_TOKEN}\", // Auth token for the remote gateway\n\t\t\t\t// sshTarget: \"user@gateway-host\", // For SSH tunnel transport\n\t\t\t\t// sshIdentity: \"~/.ssh/id_ed25519\", // SSH key for tunnel\n\t\t\t\t// tlsFingerprint: \"\", // Pin remote gateway TLS cert (sha256)\n\t\t\t},\n\t\t\tchannelHealthCheckMinutes: 5,\n\t\t},\n\t\tbrowser: {\n\t\t\tenabled: true,\n\t\t\t// WSL2 users may need relayBindHost: \"0.0.0.0\" for cross-namespace access\n\t\t\t...(isDocker ? {} : { relayBindHost: \"127.0.0.1\" }),\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\t// ACP (Agent Client Protocol) — external agents can connect to the gateway\n\t\t// Disabled by default; enable when using ACP-compatible agents (e.g. acpx)\n\t\tacp: {\n\t\t\tenabled: false,\n\t\t\tdispatch: { enabled: false },\n\t\t\tmaxConcurrentSessions: 4,\n\t\t\tstream: {\n\t\t\t\tdeliveryMode: \"live\",\n\t\t\t\trepeatSuppression: true,\n\t\t\t},\n\t\t\truntime: {\n\t\t\t\tttlMinutes: 30,\n\t\t\t},\n\t\t},\n\t\t// Tools configuration — web search, fetch, exec security, loop detection\n\t\ttools: {\n\t\t\tweb: {\n\t\t\t\tsearch: {\n\t\t\t\t\t// Enabled when a search API key is available (BRAVE_API_KEY, etc.)\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tprovider: \"brave\",\n\t\t\t\t\tmaxResults: 5,\n\t\t\t\t\ttimeoutSeconds: 10,\n\t\t\t\t\tcacheTtlMinutes: 60,\n\t\t\t\t},\n\t\t\t\tfetch: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tmaxChars: 30000,\n\t\t\t\t\ttimeoutSeconds: 15,\n\t\t\t\t\tcacheTtlMinutes: 30,\n\t\t\t\t\treadability: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\texec: {\n\t\t\t\t// Docker: sandbox exec inside a nested container; bare-metal: deny by default\n\t\t\t\thost: isDocker ? \"sandbox\" : \"gateway\",\n\t\t\t\tsecurity: \"allowlist\",\n\t\t\t\task: \"on-miss\",\n\t\t\t\tbackgroundMs: 30000,\n\t\t\t\ttimeoutSec: 300,\n\t\t\t},\n\t\t\t// Filesystem path guards\n\t\t\tfs: {\n\t\t\t\t// In Docker the workspace is already isolated; on bare-metal restrict to workspace\n\t\t\t\tworkspaceOnly: !isDocker,\n\t\t\t},\n\t\t\t// Prevent stuck tool-call loops\n\t\t\tloopDetection: {\n\t\t\t\tenabled: true,\n\t\t\t\thistorySize: 30,\n\t\t\t\twarningThreshold: 10,\n\t\t\t\tcriticalThreshold: 20,\n\t\t\t\tglobalCircuitBreakerThreshold: 30,\n\t\t\t},\n\t\t\tsessions: {\n\t\t\t\tvisibility: \"tree\",\n\t\t\t},\n\t\t\t// Agent-to-agent messaging — allows agents to invoke each other at runtime\n\t\t\t// Essential for swarm architectures where multiple OpenClaw instances collaborate\n\t\t\tagentToAgent: {\n\t\t\t\tenabled: true,\n\t\t\t\t// Allowlist of agent IDs or patterns that can be reached; \"*\" = any agent\n\t\t\t\tallow: [\"*\"],\n\t\t\t},\n\t\t},\n\t\t// Session-level agent-to-agent safety limits\n\t\tsession: {\n\t\t\tagentToAgent: {\n\t\t\t\t// Max ping-pong turns between requester and target agent (prevents infinite loops)\n\t\t\t\tmaxPingPongTurns: 5,\n\t\t\t},\n\t\t},\n\t\t// Memory — dynamically configured based on installed services\n\t\tmemory: buildMemoryConfig(resolved),\n\t\t// UI customization\n\t\tui: {\n\t\t\tassistant: {\n\t\t\t\tname: \"OpenClaw\",\n\t\t\t},\n\t\t},\n\t\t// Media retention\n\t\tmedia: {\n\t\t\tpreserveFilenames: true,\n\t\t\tttlHours: 168, // 7 days\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":";;AAQA,MAAM,mBAA4C;CACjD,QAAQ;EACP,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ;GACP;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,QAAQ,QAAQ;IACxB,MAAM;KAAE,OAAO;KAAK,QAAQ;KAAI,WAAW;KAAM,YAAY;KAAK;IAClE,eAAe;IACf,WAAW;IACX;GACD;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,OAAO;IACf,MAAM;KAAE,OAAO;KAAK,QAAQ;KAAK,WAAW;KAAM,YAAY;KAAK;IACnE,eAAe;IACf,WAAW;IACX;GACD;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,QAAQ,QAAQ;IACxB,MAAM;KAAE,OAAO;KAAM,QAAQ;KAAK,WAAW;KAAO,YAAY;KAAM;IACtE,eAAe;IACf,WAAW;IACX;GACD;EACD;CACD,WAAW;EACV,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAM,WAAW;IAAK,YAAY;IAAO;GACtE,eAAe;GACf,WAAW;GACX,EACD;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAK,QAAQ;IAAM,WAAW;IAAK,YAAY;IAAM;GACpE,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,QAAQ;EACP,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAK,QAAQ;IAAK,WAAW;IAAK,YAAY;IAAK;GAClE,eAAe;GACf,WAAW;GACX,EACD;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAK,WAAW;IAAQ,YAAY;IAAM;GACvE,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,KAAK;EACJ,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAK,QAAQ;IAAM,WAAW;IAAK,YAAY;IAAK;GACnE,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,UAAU;EACT,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,OAAO;GACf,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAM,WAAW;IAAO,YAAY;IAAM;GACvE,eAAe;GACf,WAAW;GACX,EACD;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,OAAO;GACf,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAM,WAAW;IAAM,YAAY;IAAM;GACtE,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,MAAM;EACL,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAM;GACnC,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,YAAY;EACX,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAM;GACnC,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,SAAS;EACR,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,OAAO;GACf,MAAM;IAAE,OAAO;IAAK,QAAQ;IAAK;GACjC,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,UAAU;EACT,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,QAAQ,QAAQ;GACxB,MAAM;IAAE,OAAO;IAAM,QAAQ;IAAM;GACnC,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,QAAQ;EACP,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,OAAO;GACf,MAAM;IAAE,OAAO;IAAG,QAAQ;IAAG;GAC7B,eAAe;GACf,WAAW;GACX,EACD;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,OAAO;GACf,MAAM;IAAE,OAAO;IAAG,QAAQ;IAAG;GAC7B,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,gBAAgB;EACf,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ;GACP;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,OAAO;IACf,MAAM;KAAE,OAAO;KAAG,QAAQ;KAAG;IAC7B,eAAe;IACf,WAAW;IACX;GACD;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,OAAO;IACf,MAAM;KAAE,OAAO;KAAG,QAAQ;KAAG;IAC7B,eAAe;IACf,WAAW;IACX;GACD;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,OAAO;IACf,MAAM;KAAE,OAAO;KAAG,QAAQ;KAAG;IAC7B,eAAe;IACf,WAAW;IACX;GACD;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,OAAO;IACf,MAAM;KAAE,OAAO;KAAG,QAAQ;KAAG;IAC7B,eAAe;IACf,WAAW;IACX;GACD;IACC,IAAI;IACJ,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO,CAAC,QAAQ,QAAQ;IACxB,MAAM;KAAE,OAAO;KAAG,QAAQ;KAAG;IAC7B,eAAe;IACf,WAAW;IACX;GACD;EACD;CACD,UAAU;EACT,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,OAAO;GACf,MAAM;IAAE,OAAO;IAAG,QAAQ;IAAG;GAC7B,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD,MAAM;EACL,SAAS;EACT,KAAK;EACL,MAAM;EACN,QAAQ,CACP;GACC,IAAI;GACJ,MAAM;GACN,KAAK;GACL,WAAW;GACX,OAAO,CAAC,OAAO;GACf,MAAM;IAAE,OAAO;IAAG,QAAQ;IAAG;GAC7B,eAAe;GACf,WAAW;GACX,CACD;EACD;CACD;;AAGD,MAAM,uBAA+C;CACpD,QAAQ;CACR,UAAU;CACV,MAAM;CACN;;;;;;;;;;AAWD,SAAS,kBAAkB,UAAmD;CAC7E,MAAM,OAAO,OAAe,SAAS,SAAS,MAAM,MAAM,EAAE,WAAW,OAAO,GAAG;CAGjF,MAAM,cAAc,IAAI,SAAS,GAC9B;EAAE,UAAU;EAAU,MAAM;EAAU,MAAM;EAAM,GAClD,IAAI,WAAW,GACd;EAAE,UAAU;EAAY,MAAM;EAAY,MAAM;EAAM,GACtD,IAAI,WAAW,GACd;EAAE,UAAU;EAAY,MAAM;EAAY,MAAM;EAAM,GACtD,IAAI,SAAS,GACZ;EAAE,UAAU;EAAU,KAAK;EAAuB,GAClD;AAGN,KAAI,IAAI,OAAO,CACd,QAAO;EACN,SAAS;EACT,WAAW;EACX,MAAM;GAAE,MAAM;GAAQ,MAAM;GAAM,QAAQ;GAAkB;EAC5D,GAAI,cAAc,EAAE,aAAa,GAAG,EAAE;EACtC;AAGF,KAAI,IAAI,OAAO,CACd,QAAO;EACN,SAAS;EACT,WAAW;EACX,MAAM;GAAE,MAAM;GAAQ,MAAM;GAAM,SAAS;GAAkB;EAC7D,GAAI,cAAc,EAAE,aAAa,GAAG,EAAE;EACtC;AAGF,KAAI,IAAI,YAAY,CACnB,QAAO;EACN,SAAS;EACT,WAAW;EACX,WAAW;GAAE,MAAM;GAAa,MAAM;GAAM,WAAW;GAAY;EACnE,GAAI,cAAc,EAAE,aAAa,GAAG,EAAE;EACtC;AAIF,QAAO;EACN,SAAS;EACT,WAAW;EACX,GAAI,cAAc,EAAE,aAAa,GAAG,EAAE;EACtC;;AAGF,SAAgB,uBACf,UACA,SACS;CACT,MAAM,WAAW,QAAQ,mBAAmB;CAE5C,MAAM,qBAAqB,WAAW,yBAAyB;CAG/D,MAAM,cAAc,WAAW,QAAQ;CACvC,MAAM,gBAAsD,EAAE;AAG9D,MAAK,MAAM,EAAE,gBAAgB,SAAS,SACrC,MAAK,MAAM,SAAS,WAAW,OAC9B,KAAI,MAAM,YACT,eAAc,MAAM,WAAW,EAAE,SAAS,MAAM;CAKnD,MAAM,YAAiC,EAAE;CACzC,MAAM,eAAkD,EAAE;CAC1D,IAAI,eAAe;CAGnB,MAAM,oBACL,SAAS,eAAe,SAAS,YAAY,SAAS,IACnD,SAAS,cACR,CAAC,SAAS;AAEf,MAAK,MAAM,YAAY,mBAAmB;EACzC,MAAM,OAAO,iBAAiB;AAC9B,MAAI,CAAC,KAAM;AAMX,YAAU,YAAY;GACrB,SAHA,KAAK,WAAW,UAAU,mBAAmB,GAAG,qBAAqB,aAAa,IAAK;GAIvF,KAAK,KAAK;GACV,MAAM,KAAK;GACX,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE;GAC9C,QAAQ,KAAK;GACb;AAED,OAAK,MAAM,KAAK,KAAK,QAAQ;GAC5B,MAAM,SAAS,GAAG,SAAS,GAAG,EAAE;AAChC,gBAAa,UAAU,EAAE,OAAO,EAAE,MAAM;AACxC,OAAI,CAAC,aAAc,gBAAe;;;CAIpC,MAAM,eAAoC,EACzC,iBAAiB;EAChB,UAAU;EACV,MAAM;EACN,EACD;AAGD,MAAK,MAAM,YAAY,OAAO,KAAK,UAAU,CAC5C,cAAa,GAAG,SAAS,aAAa;EAC3B;EACV,MAAM;EACN;CAGF,MAAM,SAAS;EACd,MAAM;GACL,oBAAoB,QAAQ;GAC5B,gCAAe,IAAI,MAAM,EAAC,aAAa;GACvC;EACD,KAAK;GACJ,UAAU,EACT,SAAS,MACT;GACD,MAAM,EAAE;GACR;EACD,QAAQ;GACP,4BAAW,IAAI,MAAM,EAAC,aAAa;GACnC,gBAAgB,QAAQ;GACxB,gBAAgB;GAChB,aAAa;GACb;EACD,SAAS,EACR,iBAAiB,SACjB;EACD,QAAQ,EACP,cAAc,MACd;EACD,MAAM,EACL,UAAU,cACV;EACD,QAAQ;GACP,MAAM;GACN;GACA;EACD,QAAQ,EACP,UAAU;GACT,OAAO,EACN,SAAS,cACT;GACD,QAAQ;GACR,WAAW,WAAW,mCAAmC;GACzD,YAAY,EAAE,MAAM,aAAa;GACjC,eAAe;GACf,WAAW;IACV,eAAe;IAEf,aAAa,CAAC,IAAI;IAClB;GAED,GAAI,WACD,EACA,SAAS;IACR,QAAQ;KACP,iBAAiB;KACjB,SAAS;KACT,cAAc;KACd,SAAS;KACT,SAAS,CAAC,MAAM;KAChB,WAAW;KACX,QAAQ;KACR;IACD,SAAS;KACR,SAAS;KACT,WAAW;KACX;IACD,EACD,GACA,EAAE;GACL,EACD;EACD,UAAU,EACT,kBAAkB,kBAClB;EACD,UAAU;GACT,QAAQ;GACR,cAAc;GACd;EACD,MAAM,EACL,SAAS,MACT;EACD,OAAO,EACN,UAAU;GACT,SAAS;GACT,SAAS;IACR,WAAW,EAAE,SAAS,MAAM;IAC5B,yBAAyB,EAAE,SAAS,MAAM;IAC1C,kBAAkB,EAAE,SAAS,MAAM;IACnC,kBAAkB,EAAE,SAAS,MAAM;IACnC;GACD,EACD;EACD,KAAK,EACJ,SAAS,MACT;EACD,WAAW;GACV,UAAU,EACT,SAAS,MACT;GAGD,MAAM,EACL,MAAM,WAAW,QAAQ,WACzB;GACD;EACD,YAAY;GACX,SAAS;GACT,YAAY;GACZ;EACD,UAAU,EAAE;EAEZ,UAAU,EACT,cAAc,EACb,SAAS,MACT,EACD;EACD,SAAS;GACR,MAAM,QAAQ;GACd,MAAM;GACN,MAAM;GACN,WAAW;IACV,SAAS;IAET,GAAI,WAAW,EAAE,mBAAmB,MAAM,GAAG,EAAE;IAG/C,GAAI,gBAAgB,aACjB,EAAE,gBAAgB,CAAC,oBAAoB,QAAQ,cAAc,EAAE,GAC/D,EAAE;IACL;GACD,MAAM;IACL,MAAM;IACN,OAAO;IACP,GAAI,WAAW,EAAE,GAAG,EAAE,gBAAgB,MAAM;IAC5C;GAED,GAAI,WAAW,EAAE,GAAG,EAAE,WAAW;IAAE,MAAM;IAAS,aAAa;IAAM,EAAE;GACvE,QAAQ,EACP,MAAM,UACN;GACD,MAAM,EACL,WAAW;IACV,iBAAiB,EAAE,SAAS,OAAO;IACnC,WAAW,EAAE,SAAS,OAAO;IAC7B,EACD;GACD,OAAO;IACN,SAAS,EAER,MAAM,QACN;IAED,eAAe,EAAE;IACjB,cAAc;KAAC;KAAe;KAAe;KAAgB;IAC7D;GAID,QAAQ,EAEP,WAAW,UAKX;GACD,2BAA2B;GAC3B;EACD,SAAS;GACR,SAAS;GAET,GAAI,WAAW,EAAE,GAAG,EAAE,eAAe,aAAa;GAClD;EACD,QAAQ;GACP,SAAS,EAAE,aAAa,QAAQ;GAChC,MAAM,EACL,OAAO,MACP;GACD,GAAI,OAAO,KAAK,cAAc,CAAC,SAAS,IAAI,EAAE,SAAS,eAAe,GAAG,EAAE;GAC3E;EAGD,KAAK;GACJ,SAAS;GACT,UAAU,EAAE,SAAS,OAAO;GAC5B,uBAAuB;GACvB,QAAQ;IACP,cAAc;IACd,mBAAmB;IACnB;GACD,SAAS,EACR,YAAY,IACZ;GACD;EAED,OAAO;GACN,KAAK;IACJ,QAAQ;KAEP,SAAS;KACT,UAAU;KACV,YAAY;KACZ,gBAAgB;KAChB,iBAAiB;KACjB;IACD,OAAO;KACN,SAAS;KACT,UAAU;KACV,gBAAgB;KAChB,iBAAiB;KACjB,aAAa;KACb;IACD;GACD,MAAM;IAEL,MAAM,WAAW,YAAY;IAC7B,UAAU;IACV,KAAK;IACL,cAAc;IACd,YAAY;IACZ;GAED,IAAI,EAEH,eAAe,CAAC,UAChB;GAED,eAAe;IACd,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,+BAA+B;IAC/B;GACD,UAAU,EACT,YAAY,QACZ;GAGD,cAAc;IACb,SAAS;IAET,OAAO,CAAC,IAAI;IACZ;GACD;EAED,SAAS,EACR,cAAc,EAEb,kBAAkB,GAClB,EACD;EAED,QAAQ,kBAAkB,SAAS;EAEnC,IAAI,EACH,WAAW,EACV,MAAM,YACN,EACD;EAED,OAAO;GACN,mBAAmB;GACnB,UAAU;GACV;EACD,SAAS;GACR,SAAS;GACT,SAAS;IACR,UAAU,EAAE,SAAS,MAAM;IAC3B,UAAU,EAAE,SAAS,MAAM;IAC3B,SAAS,EAAE,SAAS,MAAM;IAC1B,eAAe,EAAE,SAAS,MAAM;IAChC;GACD;EACD;AAED,QAAO,KAAK,UAAU,QAAQ,MAAM,EAAE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { B as ResolverOutput, h as DeploymentType } from "../types-Bsn0XzSP.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/generators/openclaw-json.d.ts
|
|
4
4
|
interface OpenClawConfigOptions {
|
|
@@ -6,10 +6,6 @@ interface OpenClawConfigOptions {
|
|
|
6
6
|
gatewayPort: number;
|
|
7
7
|
openclawVersion: string;
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Generates a default `openclaw/config/openclaw.json` tailored
|
|
11
|
-
* to the services installed in the stack.
|
|
12
|
-
*/
|
|
13
9
|
declare function generateOpenClawConfig(resolved: ResolverOutput, options: OpenClawConfigOptions): string;
|
|
14
10
|
//#endregion
|
|
15
11
|
export { OpenClawConfigOptions, generateOpenClawConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-json.d.cts","names":[],"sources":["../../src/generators/openclaw-json.ts"],"mappings":";;;UAEiB,qBAAA;EAChB,cAAA,EAAgB,cAAA;EAChB,WAAA;EACA,eAAA;AAAA
|
|
1
|
+
{"version":3,"file":"openclaw-json.d.cts","names":[],"sources":["../../src/generators/openclaw-json.ts"],"mappings":";;;UAEiB,qBAAA;EAChB,cAAA,EAAgB,cAAA;EAChB,WAAA;EACA,eAAA;AAAA;AAAA,iBAmZe,sBAAA,CACf,QAAA,EAAU,cAAA,EACV,OAAA,EAAS,qBAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { B as ResolverOutput, h as DeploymentType } from "../types-DwTKyCZ9.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/generators/openclaw-json.d.ts
|
|
4
4
|
interface OpenClawConfigOptions {
|
|
@@ -6,10 +6,6 @@ interface OpenClawConfigOptions {
|
|
|
6
6
|
gatewayPort: number;
|
|
7
7
|
openclawVersion: string;
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Generates a default `openclaw/config/openclaw.json` tailored
|
|
11
|
-
* to the services installed in the stack.
|
|
12
|
-
*/
|
|
13
9
|
declare function generateOpenClawConfig(resolved: ResolverOutput, options: OpenClawConfigOptions): string;
|
|
14
10
|
//#endregion
|
|
15
11
|
export { OpenClawConfigOptions, generateOpenClawConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-json.d.mts","names":[],"sources":["../../src/generators/openclaw-json.ts"],"mappings":";;;UAEiB,qBAAA;EAChB,cAAA,EAAgB,cAAA;EAChB,WAAA;EACA,eAAA;AAAA
|
|
1
|
+
{"version":3,"file":"openclaw-json.d.mts","names":[],"sources":["../../src/generators/openclaw-json.ts"],"mappings":";;;UAEiB,qBAAA;EAChB,cAAA,EAAgB,cAAA;EAChB,WAAA;EACA,eAAA;AAAA;AAAA,iBAmZe,sBAAA,CACf,QAAA,EAAU,cAAA,EACV,OAAA,EAAS,qBAAA"}
|