@better-openclaw/core 1.0.22 → 1.0.24
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/dist/bare-metal-partition.test.cjs +3 -4
- package/dist/bare-metal-partition.test.cjs.map +1 -1
- package/dist/bare-metal-partition.test.mjs +3 -4
- package/dist/bare-metal-partition.test.mjs.map +1 -1
- package/dist/composer.cjs +40 -14
- package/dist/composer.cjs.map +1 -1
- package/dist/composer.d.cts.map +1 -1
- package/dist/composer.d.mts.map +1 -1
- package/dist/composer.mjs +40 -14
- 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 +3 -2
- package/dist/composer.test.cjs.map +1 -1
- package/dist/composer.test.mjs +3 -2
- package/dist/composer.test.mjs.map +1 -1
- package/dist/deployers/strip-host-ports.test.cjs +1 -1
- package/dist/deployers/strip-host-ports.test.mjs +1 -1
- package/dist/generate.cjs +7 -2
- package/dist/generate.cjs.map +1 -1
- package/dist/generate.d.cts.map +1 -1
- package/dist/generate.d.mts.map +1 -1
- package/dist/generate.mjs +7 -2
- package/dist/generate.mjs.map +1 -1
- package/dist/generate.test.cjs +2 -2
- package/dist/generate.test.cjs.map +1 -1
- package/dist/generate.test.mjs +2 -2
- package/dist/generate.test.mjs.map +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.test.cjs +1 -1
- package/dist/generators/caddy.test.mjs +1 -1
- package/dist/generators/clone-repos.cjs +140 -0
- package/dist/generators/clone-repos.cjs.map +1 -0
- package/dist/generators/clone-repos.d.cts +11 -0
- package/dist/generators/clone-repos.d.cts.map +1 -0
- package/dist/generators/clone-repos.d.mts +11 -0
- package/dist/generators/clone-repos.d.mts.map +1 -0
- package/dist/generators/clone-repos.mjs +139 -0
- package/dist/generators/clone-repos.mjs.map +1 -0
- package/dist/generators/clone-repos.test.cjs +140 -0
- package/dist/generators/clone-repos.test.cjs.map +1 -0
- package/dist/generators/clone-repos.test.d.cts +1 -0
- package/dist/generators/clone-repos.test.d.mts +1 -0
- package/dist/generators/clone-repos.test.mjs +141 -0
- package/dist/generators/clone-repos.test.mjs.map +1 -0
- package/dist/generators/env.cjs +146 -0
- package/dist/generators/env.cjs.map +1 -1
- package/dist/generators/env.d.cts.map +1 -1
- package/dist/generators/env.d.mts.map +1 -1
- package/dist/generators/env.mjs +146 -0
- package/dist/generators/env.mjs.map +1 -1
- package/dist/generators/env.test.cjs +1 -1
- package/dist/generators/env.test.mjs +1 -1
- package/dist/generators/health-check.test.cjs +1 -1
- package/dist/generators/health-check.test.mjs +1 -1
- package/dist/generators/openclaw-json.cjs +102 -7
- package/dist/generators/openclaw-json.cjs.map +1 -1
- package/dist/generators/openclaw-json.mjs +102 -7
- 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.map +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/readme.cjs +2 -1
- package/dist/generators/readme.cjs.map +1 -1
- package/dist/generators/readme.mjs +2 -1
- package/dist/generators/readme.mjs.map +1 -1
- package/dist/generators/scripts.cjs +332 -3
- package/dist/generators/scripts.cjs.map +1 -1
- package/dist/generators/scripts.d.cts +3 -1
- package/dist/generators/scripts.d.cts.map +1 -1
- package/dist/generators/scripts.d.mts +3 -1
- package/dist/generators/scripts.d.mts.map +1 -1
- package/dist/generators/scripts.mjs +332 -3
- package/dist/generators/scripts.mjs.map +1 -1
- package/dist/generators/scripts.test.cjs +39 -5
- package/dist/generators/scripts.test.cjs.map +1 -1
- package/dist/generators/scripts.test.mjs +39 -5
- package/dist/generators/scripts.test.mjs.map +1 -1
- package/dist/generators/stack-manifest.cjs +1 -0
- package/dist/generators/stack-manifest.cjs.map +1 -1
- package/dist/generators/stack-manifest.d.cts +3 -2
- package/dist/generators/stack-manifest.d.cts.map +1 -1
- package/dist/generators/stack-manifest.d.mts +3 -2
- package/dist/generators/stack-manifest.d.mts.map +1 -1
- package/dist/generators/stack-manifest.mjs +1 -0
- package/dist/generators/stack-manifest.mjs.map +1 -1
- package/dist/generators/traefik.test.cjs +1 -1
- package/dist/generators/traefik.test.mjs +1 -1
- package/dist/index.cjs +8 -1
- package/dist/index.d.cts +5 -3
- package/dist/index.d.mts +5 -3
- package/dist/index.mjs +5 -3
- package/dist/migrations.test.cjs +1 -1
- package/dist/migrations.test.mjs +1 -1
- package/dist/presets/registry.cjs +19 -0
- package/dist/presets/registry.cjs.map +1 -1
- package/dist/presets/registry.d.cts.map +1 -1
- package/dist/presets/registry.d.mts.map +1 -1
- package/dist/presets/registry.mjs +19 -0
- package/dist/presets/registry.mjs.map +1 -1
- package/dist/presets/registry.test.cjs +1 -1
- package/dist/presets/registry.test.mjs +1 -1
- package/dist/resolver.cjs +8 -0
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.mjs +9 -1
- package/dist/resolver.mjs.map +1 -1
- package/dist/resolver.test.cjs +47 -12
- package/dist/resolver.test.cjs.map +1 -1
- package/dist/resolver.test.mjs +47 -12
- package/dist/resolver.test.mjs.map +1 -1
- package/dist/{schema-C_hc7e4k.d.cts → schema-eX44HhRp.d.mts} +78 -8
- package/dist/schema-eX44HhRp.d.mts.map +1 -0
- package/dist/{schema-CaesJaS2.d.mts → schema-tn5RK8CM.d.cts} +78 -8
- package/dist/schema-tn5RK8CM.d.cts.map +1 -0
- package/dist/schema.cjs +26 -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 +25 -5
- package/dist/schema.mjs.map +1 -1
- package/dist/schema.test.cjs +1 -1
- package/dist/schema.test.mjs +1 -1
- package/dist/services/definitions/adguard-home.cjs +74 -0
- package/dist/services/definitions/adguard-home.cjs.map +1 -0
- package/dist/services/definitions/adguard-home.d.cts +7 -0
- package/dist/services/definitions/adguard-home.d.cts.map +1 -0
- package/dist/services/definitions/adguard-home.d.mts +7 -0
- package/dist/services/definitions/adguard-home.d.mts.map +1 -0
- package/dist/services/definitions/adguard-home.mjs +73 -0
- package/dist/services/definitions/adguard-home.mjs.map +1 -0
- package/dist/services/definitions/apptension-saas.cjs +87 -0
- package/dist/services/definitions/apptension-saas.cjs.map +1 -0
- package/dist/services/definitions/apptension-saas.d.cts +7 -0
- package/dist/services/definitions/apptension-saas.d.cts.map +1 -0
- package/dist/services/definitions/apptension-saas.d.mts +7 -0
- package/dist/services/definitions/apptension-saas.d.mts.map +1 -0
- package/dist/services/definitions/apptension-saas.mjs +86 -0
- package/dist/services/definitions/apptension-saas.mjs.map +1 -0
- package/dist/services/definitions/audiobookshelf.cjs +81 -0
- package/dist/services/definitions/audiobookshelf.cjs.map +1 -0
- package/dist/services/definitions/audiobookshelf.d.cts +7 -0
- package/dist/services/definitions/audiobookshelf.d.cts.map +1 -0
- package/dist/services/definitions/audiobookshelf.d.mts +7 -0
- package/dist/services/definitions/audiobookshelf.d.mts.map +1 -0
- package/dist/services/definitions/audiobookshelf.mjs +80 -0
- package/dist/services/definitions/audiobookshelf.mjs.map +1 -0
- package/dist/services/definitions/baserow.cjs +115 -0
- package/dist/services/definitions/baserow.cjs.map +1 -0
- package/dist/services/definitions/baserow.d.cts +7 -0
- package/dist/services/definitions/baserow.d.cts.map +1 -0
- package/dist/services/definitions/baserow.d.mts +7 -0
- package/dist/services/definitions/baserow.d.mts.map +1 -0
- package/dist/services/definitions/baserow.mjs +114 -0
- package/dist/services/definitions/baserow.mjs.map +1 -0
- package/dist/services/definitions/boxyhq-saas.cjs +88 -0
- package/dist/services/definitions/boxyhq-saas.cjs.map +1 -0
- package/dist/services/definitions/boxyhq-saas.d.cts +7 -0
- package/dist/services/definitions/boxyhq-saas.d.cts.map +1 -0
- package/dist/services/definitions/boxyhq-saas.d.mts +7 -0
- package/dist/services/definitions/boxyhq-saas.d.mts.map +1 -0
- package/dist/services/definitions/boxyhq-saas.mjs +87 -0
- package/dist/services/definitions/boxyhq-saas.mjs.map +1 -0
- package/dist/services/definitions/calibre-web.cjs +91 -0
- package/dist/services/definitions/calibre-web.cjs.map +1 -0
- package/dist/services/definitions/calibre-web.d.cts +7 -0
- package/dist/services/definitions/calibre-web.d.cts.map +1 -0
- package/dist/services/definitions/calibre-web.d.mts +7 -0
- package/dist/services/definitions/calibre-web.d.mts.map +1 -0
- package/dist/services/definitions/calibre-web.mjs +90 -0
- package/dist/services/definitions/calibre-web.mjs.map +1 -0
- package/dist/services/definitions/clickhouse.cjs +113 -0
- package/dist/services/definitions/clickhouse.cjs.map +1 -0
- package/dist/services/definitions/clickhouse.d.cts +7 -0
- package/dist/services/definitions/clickhouse.d.cts.map +1 -0
- package/dist/services/definitions/clickhouse.d.mts +7 -0
- package/dist/services/definitions/clickhouse.d.mts.map +1 -0
- package/dist/services/definitions/clickhouse.mjs +112 -0
- package/dist/services/definitions/clickhouse.mjs.map +1 -0
- package/dist/services/definitions/cloudflared.cjs +55 -0
- package/dist/services/definitions/cloudflared.cjs.map +1 -0
- package/dist/services/definitions/cloudflared.d.cts +7 -0
- package/dist/services/definitions/cloudflared.d.cts.map +1 -0
- package/dist/services/definitions/cloudflared.d.mts +7 -0
- package/dist/services/definitions/cloudflared.d.mts.map +1 -0
- package/dist/services/definitions/cloudflared.mjs +54 -0
- package/dist/services/definitions/cloudflared.mjs.map +1 -0
- package/dist/services/definitions/cmsaas-starter.cjs +86 -0
- package/dist/services/definitions/cmsaas-starter.cjs.map +1 -0
- package/dist/services/definitions/cmsaas-starter.d.cts +7 -0
- package/dist/services/definitions/cmsaas-starter.d.cts.map +1 -0
- package/dist/services/definitions/cmsaas-starter.d.mts +7 -0
- package/dist/services/definitions/cmsaas-starter.d.mts.map +1 -0
- package/dist/services/definitions/cmsaas-starter.mjs +85 -0
- package/dist/services/definitions/cmsaas-starter.mjs.map +1 -0
- package/dist/services/definitions/cockroachdb.cjs +70 -0
- package/dist/services/definitions/cockroachdb.cjs.map +1 -0
- package/dist/services/definitions/cockroachdb.d.cts +7 -0
- package/dist/services/definitions/cockroachdb.d.cts.map +1 -0
- package/dist/services/definitions/cockroachdb.d.mts +7 -0
- package/dist/services/definitions/cockroachdb.d.mts.map +1 -0
- package/dist/services/definitions/cockroachdb.mjs +69 -0
- package/dist/services/definitions/cockroachdb.mjs.map +1 -0
- package/dist/services/definitions/coder.cjs +64 -0
- package/dist/services/definitions/coder.cjs.map +1 -0
- package/dist/services/definitions/coder.d.cts +7 -0
- package/dist/services/definitions/coder.d.cts.map +1 -0
- package/dist/services/definitions/coder.d.mts +7 -0
- package/dist/services/definitions/coder.d.mts.map +1 -0
- package/dist/services/definitions/coder.mjs +63 -0
- package/dist/services/definitions/coder.mjs.map +1 -0
- package/dist/services/definitions/dragonfly.cjs +64 -0
- package/dist/services/definitions/dragonfly.cjs.map +1 -0
- package/dist/services/definitions/dragonfly.d.cts +7 -0
- package/dist/services/definitions/dragonfly.d.cts.map +1 -0
- package/dist/services/definitions/dragonfly.d.mts +7 -0
- package/dist/services/definitions/dragonfly.d.mts.map +1 -0
- package/dist/services/definitions/dragonfly.mjs +63 -0
- package/dist/services/definitions/dragonfly.mjs.map +1 -0
- package/dist/services/definitions/drone-ci.cjs +95 -0
- package/dist/services/definitions/drone-ci.cjs.map +1 -0
- package/dist/services/definitions/drone-ci.d.cts +7 -0
- package/dist/services/definitions/drone-ci.d.cts.map +1 -0
- package/dist/services/definitions/drone-ci.d.mts +7 -0
- package/dist/services/definitions/drone-ci.d.mts.map +1 -0
- package/dist/services/definitions/drone-ci.mjs +94 -0
- package/dist/services/definitions/drone-ci.mjs.map +1 -0
- package/dist/services/definitions/element-web.cjs +61 -0
- package/dist/services/definitions/element-web.cjs.map +1 -0
- package/dist/services/definitions/element-web.d.cts +7 -0
- package/dist/services/definitions/element-web.d.cts.map +1 -0
- package/dist/services/definitions/element-web.d.mts +7 -0
- package/dist/services/definitions/element-web.d.mts.map +1 -0
- package/dist/services/definitions/element-web.mjs +60 -0
- package/dist/services/definitions/element-web.mjs.map +1 -0
- package/dist/services/definitions/focalboard.cjs +65 -0
- package/dist/services/definitions/focalboard.cjs.map +1 -0
- package/dist/services/definitions/focalboard.d.cts +7 -0
- package/dist/services/definitions/focalboard.d.cts.map +1 -0
- package/dist/services/definitions/focalboard.d.mts +7 -0
- package/dist/services/definitions/focalboard.d.mts.map +1 -0
- package/dist/services/definitions/focalboard.mjs +64 -0
- package/dist/services/definitions/focalboard.mjs.map +1 -0
- package/dist/services/definitions/forgejo.cjs +108 -0
- package/dist/services/definitions/forgejo.cjs.map +1 -0
- package/dist/services/definitions/forgejo.d.cts +7 -0
- package/dist/services/definitions/forgejo.d.cts.map +1 -0
- package/dist/services/definitions/forgejo.d.mts +7 -0
- package/dist/services/definitions/forgejo.d.mts.map +1 -0
- package/dist/services/definitions/forgejo.mjs +107 -0
- package/dist/services/definitions/forgejo.mjs.map +1 -0
- package/dist/services/definitions/graylog.cjs +103 -0
- package/dist/services/definitions/graylog.cjs.map +1 -0
- package/dist/services/definitions/graylog.d.cts +7 -0
- package/dist/services/definitions/graylog.d.cts.map +1 -0
- package/dist/services/definitions/graylog.d.mts +7 -0
- package/dist/services/definitions/graylog.d.mts.map +1 -0
- package/dist/services/definitions/graylog.mjs +102 -0
- package/dist/services/definitions/graylog.mjs.map +1 -0
- package/dist/services/definitions/index.cjs +154 -1
- package/dist/services/definitions/index.cjs.map +1 -1
- package/dist/services/definitions/index.d.cts +52 -1
- package/dist/services/definitions/index.d.cts.map +1 -1
- package/dist/services/definitions/index.d.mts +52 -1
- package/dist/services/definitions/index.d.mts.map +1 -1
- package/dist/services/definitions/index.mjs +104 -2
- package/dist/services/definitions/index.mjs.map +1 -1
- package/dist/services/definitions/influxdb.cjs +105 -0
- package/dist/services/definitions/influxdb.cjs.map +1 -0
- package/dist/services/definitions/influxdb.d.cts +7 -0
- package/dist/services/definitions/influxdb.d.cts.map +1 -0
- package/dist/services/definitions/influxdb.d.mts +7 -0
- package/dist/services/definitions/influxdb.d.mts.map +1 -0
- package/dist/services/definitions/influxdb.mjs +104 -0
- package/dist/services/definitions/influxdb.mjs.map +1 -0
- package/dist/services/definitions/invoke-ai.cjs +70 -0
- package/dist/services/definitions/invoke-ai.cjs.map +1 -0
- package/dist/services/definitions/invoke-ai.d.cts +7 -0
- package/dist/services/definitions/invoke-ai.d.cts.map +1 -0
- package/dist/services/definitions/invoke-ai.d.mts +7 -0
- package/dist/services/definitions/invoke-ai.d.mts.map +1 -0
- package/dist/services/definitions/invoke-ai.mjs +69 -0
- package/dist/services/definitions/invoke-ai.mjs.map +1 -0
- package/dist/services/definitions/ixartz-saas.cjs +88 -0
- package/dist/services/definitions/ixartz-saas.cjs.map +1 -0
- package/dist/services/definitions/ixartz-saas.d.cts +7 -0
- package/dist/services/definitions/ixartz-saas.d.cts.map +1 -0
- package/dist/services/definitions/ixartz-saas.d.mts +7 -0
- package/dist/services/definitions/ixartz-saas.d.mts.map +1 -0
- package/dist/services/definitions/ixartz-saas.mjs +87 -0
- package/dist/services/definitions/ixartz-saas.mjs.map +1 -0
- package/dist/services/definitions/jaeger.cjs +95 -0
- package/dist/services/definitions/jaeger.cjs.map +1 -0
- package/dist/services/definitions/jaeger.d.cts +7 -0
- package/dist/services/definitions/jaeger.d.cts.map +1 -0
- package/dist/services/definitions/jaeger.d.mts +7 -0
- package/dist/services/definitions/jaeger.d.mts.map +1 -0
- package/dist/services/definitions/jaeger.mjs +94 -0
- package/dist/services/definitions/jaeger.mjs.map +1 -0
- package/dist/services/definitions/jan.cjs +64 -0
- package/dist/services/definitions/jan.cjs.map +1 -0
- package/dist/services/definitions/jan.d.cts +7 -0
- package/dist/services/definitions/jan.d.cts.map +1 -0
- package/dist/services/definitions/jan.d.mts +7 -0
- package/dist/services/definitions/jan.d.mts.map +1 -0
- package/dist/services/definitions/jan.mjs +63 -0
- package/dist/services/definitions/jan.mjs.map +1 -0
- package/dist/services/definitions/jitsi-meet.cjs +102 -0
- package/dist/services/definitions/jitsi-meet.cjs.map +1 -0
- package/dist/services/definitions/jitsi-meet.d.cts +7 -0
- package/dist/services/definitions/jitsi-meet.d.cts.map +1 -0
- package/dist/services/definitions/jitsi-meet.d.mts +7 -0
- package/dist/services/definitions/jitsi-meet.d.mts.map +1 -0
- package/dist/services/definitions/jitsi-meet.mjs +101 -0
- package/dist/services/definitions/jitsi-meet.mjs.map +1 -0
- package/dist/services/definitions/local-ai.cjs +86 -0
- package/dist/services/definitions/local-ai.cjs.map +1 -0
- package/dist/services/definitions/local-ai.d.cts +7 -0
- package/dist/services/definitions/local-ai.d.cts.map +1 -0
- package/dist/services/definitions/local-ai.d.mts +7 -0
- package/dist/services/definitions/local-ai.d.mts.map +1 -0
- package/dist/services/definitions/local-ai.mjs +85 -0
- package/dist/services/definitions/local-ai.mjs.map +1 -0
- package/dist/services/definitions/metabase.cjs +108 -0
- package/dist/services/definitions/metabase.cjs.map +1 -0
- package/dist/services/definitions/metabase.d.cts +7 -0
- package/dist/services/definitions/metabase.d.cts.map +1 -0
- package/dist/services/definitions/metabase.d.mts +7 -0
- package/dist/services/definitions/metabase.d.mts.map +1 -0
- package/dist/services/definitions/metabase.mjs +107 -0
- package/dist/services/definitions/metabase.mjs.map +1 -0
- package/dist/services/definitions/mission-control.cjs +16 -2
- package/dist/services/definitions/mission-control.cjs.map +1 -1
- package/dist/services/definitions/mission-control.mjs +16 -2
- package/dist/services/definitions/mission-control.mjs.map +1 -1
- package/dist/services/definitions/mosquitto.cjs +82 -0
- package/dist/services/definitions/mosquitto.cjs.map +1 -0
- package/dist/services/definitions/mosquitto.d.cts +7 -0
- package/dist/services/definitions/mosquitto.d.cts.map +1 -0
- package/dist/services/definitions/mosquitto.d.mts +7 -0
- package/dist/services/definitions/mosquitto.d.mts.map +1 -0
- package/dist/services/definitions/mosquitto.mjs +81 -0
- package/dist/services/definitions/mosquitto.mjs.map +1 -0
- package/dist/services/definitions/navidrome.cjs +90 -0
- package/dist/services/definitions/navidrome.cjs.map +1 -0
- package/dist/services/definitions/navidrome.d.cts +7 -0
- package/dist/services/definitions/navidrome.d.cts.map +1 -0
- package/dist/services/definitions/navidrome.d.mts +7 -0
- package/dist/services/definitions/navidrome.d.mts.map +1 -0
- package/dist/services/definitions/navidrome.mjs +89 -0
- package/dist/services/definitions/navidrome.mjs.map +1 -0
- package/dist/services/definitions/nginx-proxy-manager.cjs +71 -0
- package/dist/services/definitions/nginx-proxy-manager.cjs.map +1 -0
- package/dist/services/definitions/nginx-proxy-manager.d.cts +7 -0
- package/dist/services/definitions/nginx-proxy-manager.d.cts.map +1 -0
- package/dist/services/definitions/nginx-proxy-manager.d.mts +7 -0
- package/dist/services/definitions/nginx-proxy-manager.d.mts.map +1 -0
- package/dist/services/definitions/nginx-proxy-manager.mjs +70 -0
- package/dist/services/definitions/nginx-proxy-manager.mjs.map +1 -0
- package/dist/services/definitions/node-red.cjs +77 -0
- package/dist/services/definitions/node-red.cjs.map +1 -0
- package/dist/services/definitions/node-red.d.cts +7 -0
- package/dist/services/definitions/node-red.d.cts.map +1 -0
- package/dist/services/definitions/node-red.d.mts +7 -0
- package/dist/services/definitions/node-red.d.mts.map +1 -0
- package/dist/services/definitions/node-red.mjs +76 -0
- package/dist/services/definitions/node-red.mjs.map +1 -0
- package/dist/services/definitions/open-saas.cjs +81 -0
- package/dist/services/definitions/open-saas.cjs.map +1 -0
- package/dist/services/definitions/open-saas.d.cts +7 -0
- package/dist/services/definitions/open-saas.d.cts.map +1 -0
- package/dist/services/definitions/open-saas.d.mts +7 -0
- package/dist/services/definitions/open-saas.d.mts.map +1 -0
- package/dist/services/definitions/open-saas.mjs +80 -0
- package/dist/services/definitions/open-saas.mjs.map +1 -0
- package/dist/services/definitions/photoprism.cjs +126 -0
- package/dist/services/definitions/photoprism.cjs.map +1 -0
- package/dist/services/definitions/photoprism.d.cts +7 -0
- package/dist/services/definitions/photoprism.d.cts.map +1 -0
- package/dist/services/definitions/photoprism.d.mts +7 -0
- package/dist/services/definitions/photoprism.d.mts.map +1 -0
- package/dist/services/definitions/photoprism.mjs +125 -0
- package/dist/services/definitions/photoprism.mjs.map +1 -0
- package/dist/services/definitions/pihole.cjs +73 -0
- package/dist/services/definitions/pihole.cjs.map +1 -0
- package/dist/services/definitions/pihole.d.cts +7 -0
- package/dist/services/definitions/pihole.d.cts.map +1 -0
- package/dist/services/definitions/pihole.d.mts +7 -0
- package/dist/services/definitions/pihole.d.mts.map +1 -0
- package/dist/services/definitions/pihole.mjs +72 -0
- package/dist/services/definitions/pihole.mjs.map +1 -0
- package/dist/services/definitions/piper-tts.cjs +70 -0
- package/dist/services/definitions/piper-tts.cjs.map +1 -0
- package/dist/services/definitions/piper-tts.d.cts +7 -0
- package/dist/services/definitions/piper-tts.d.cts.map +1 -0
- package/dist/services/definitions/piper-tts.d.mts +7 -0
- package/dist/services/definitions/piper-tts.d.mts.map +1 -0
- package/dist/services/definitions/piper-tts.mjs +69 -0
- package/dist/services/definitions/piper-tts.mjs.map +1 -0
- package/dist/services/definitions/plane.cjs +75 -0
- package/dist/services/definitions/plane.cjs.map +1 -0
- package/dist/services/definitions/plane.d.cts +7 -0
- package/dist/services/definitions/plane.d.cts.map +1 -0
- package/dist/services/definitions/plane.d.mts +7 -0
- package/dist/services/definitions/plane.d.mts.map +1 -0
- package/dist/services/definitions/plane.mjs +74 -0
- package/dist/services/definitions/plane.mjs.map +1 -0
- package/dist/services/definitions/plausible.cjs +94 -0
- package/dist/services/definitions/plausible.cjs.map +1 -0
- package/dist/services/definitions/plausible.d.cts +7 -0
- package/dist/services/definitions/plausible.d.cts.map +1 -0
- package/dist/services/definitions/plausible.d.mts +7 -0
- package/dist/services/definitions/plausible.d.mts.map +1 -0
- package/dist/services/definitions/plausible.mjs +93 -0
- package/dist/services/definitions/plausible.mjs.map +1 -0
- package/dist/services/definitions/pocket-id.cjs +101 -0
- package/dist/services/definitions/pocket-id.cjs.map +1 -0
- package/dist/services/definitions/pocket-id.d.cts +7 -0
- package/dist/services/definitions/pocket-id.d.cts.map +1 -0
- package/dist/services/definitions/pocket-id.d.mts +7 -0
- package/dist/services/definitions/pocket-id.d.mts.map +1 -0
- package/dist/services/definitions/pocket-id.mjs +100 -0
- package/dist/services/definitions/pocket-id.mjs.map +1 -0
- package/dist/services/definitions/posthog.cjs +94 -0
- package/dist/services/definitions/posthog.cjs.map +1 -0
- package/dist/services/definitions/posthog.d.cts +7 -0
- package/dist/services/definitions/posthog.d.cts.map +1 -0
- package/dist/services/definitions/posthog.d.mts +7 -0
- package/dist/services/definitions/posthog.d.mts.map +1 -0
- package/dist/services/definitions/posthog.mjs +93 -0
- package/dist/services/definitions/posthog.mjs.map +1 -0
- package/dist/services/definitions/redis.cjs +1 -1
- package/dist/services/definitions/redis.cjs.map +1 -1
- package/dist/services/definitions/redis.mjs +1 -1
- package/dist/services/definitions/redis.mjs.map +1 -1
- package/dist/services/definitions/revolt.cjs +64 -0
- package/dist/services/definitions/revolt.cjs.map +1 -0
- package/dist/services/definitions/revolt.d.cts +7 -0
- package/dist/services/definitions/revolt.d.cts.map +1 -0
- package/dist/services/definitions/revolt.d.mts +7 -0
- package/dist/services/definitions/revolt.d.mts.map +1 -0
- package/dist/services/definitions/revolt.mjs +63 -0
- package/dist/services/definitions/revolt.mjs.map +1 -0
- package/dist/services/definitions/sentry.cjs +101 -0
- package/dist/services/definitions/sentry.cjs.map +1 -0
- package/dist/services/definitions/sentry.d.cts +7 -0
- package/dist/services/definitions/sentry.d.cts.map +1 -0
- package/dist/services/definitions/sentry.d.mts +7 -0
- package/dist/services/definitions/sentry.d.mts.map +1 -0
- package/dist/services/definitions/sentry.mjs +100 -0
- package/dist/services/definitions/sentry.mjs.map +1 -0
- package/dist/services/definitions/sonarqube.cjs +86 -0
- package/dist/services/definitions/sonarqube.cjs.map +1 -0
- package/dist/services/definitions/sonarqube.d.cts +7 -0
- package/dist/services/definitions/sonarqube.d.cts.map +1 -0
- package/dist/services/definitions/sonarqube.d.mts +7 -0
- package/dist/services/definitions/sonarqube.d.mts.map +1 -0
- package/dist/services/definitions/sonarqube.mjs +85 -0
- package/dist/services/definitions/sonarqube.mjs.map +1 -0
- package/dist/services/definitions/superset.cjs +77 -0
- package/dist/services/definitions/superset.cjs.map +1 -0
- package/dist/services/definitions/superset.d.cts +7 -0
- package/dist/services/definitions/superset.d.cts.map +1 -0
- package/dist/services/definitions/superset.d.mts +7 -0
- package/dist/services/definitions/superset.d.mts.map +1 -0
- package/dist/services/definitions/superset.mjs +76 -0
- package/dist/services/definitions/superset.mjs.map +1 -0
- package/dist/services/definitions/surrealdb.cjs +72 -0
- package/dist/services/definitions/surrealdb.cjs.map +1 -0
- package/dist/services/definitions/surrealdb.d.cts +7 -0
- package/dist/services/definitions/surrealdb.d.cts.map +1 -0
- package/dist/services/definitions/surrealdb.d.mts +7 -0
- package/dist/services/definitions/surrealdb.d.mts.map +1 -0
- package/dist/services/definitions/surrealdb.mjs +71 -0
- package/dist/services/definitions/surrealdb.mjs.map +1 -0
- package/dist/services/definitions/tabby-ml.cjs +70 -0
- package/dist/services/definitions/tabby-ml.cjs.map +1 -0
- package/dist/services/definitions/tabby-ml.d.cts +7 -0
- package/dist/services/definitions/tabby-ml.d.cts.map +1 -0
- package/dist/services/definitions/tabby-ml.d.mts +7 -0
- package/dist/services/definitions/tabby-ml.d.mts.map +1 -0
- package/dist/services/definitions/tabby-ml.mjs +69 -0
- package/dist/services/definitions/tabby-ml.mjs.map +1 -0
- package/dist/services/definitions/tempo.cjs +57 -0
- package/dist/services/definitions/tempo.cjs.map +1 -0
- package/dist/services/definitions/tempo.d.cts +7 -0
- package/dist/services/definitions/tempo.d.cts.map +1 -0
- package/dist/services/definitions/tempo.d.mts +7 -0
- package/dist/services/definitions/tempo.d.mts.map +1 -0
- package/dist/services/definitions/tempo.mjs +56 -0
- package/dist/services/definitions/tempo.mjs.map +1 -0
- package/dist/services/definitions/text-gen-webui.cjs +88 -0
- package/dist/services/definitions/text-gen-webui.cjs.map +1 -0
- package/dist/services/definitions/text-gen-webui.d.cts +7 -0
- package/dist/services/definitions/text-gen-webui.d.cts.map +1 -0
- package/dist/services/definitions/text-gen-webui.d.mts +7 -0
- package/dist/services/definitions/text-gen-webui.d.mts.map +1 -0
- package/dist/services/definitions/text-gen-webui.mjs +87 -0
- package/dist/services/definitions/text-gen-webui.mjs.map +1 -0
- package/dist/services/definitions/timescaledb.cjs +87 -0
- package/dist/services/definitions/timescaledb.cjs.map +1 -0
- package/dist/services/definitions/timescaledb.d.cts +7 -0
- package/dist/services/definitions/timescaledb.d.cts.map +1 -0
- package/dist/services/definitions/timescaledb.d.mts +7 -0
- package/dist/services/definitions/timescaledb.d.mts.map +1 -0
- package/dist/services/definitions/timescaledb.mjs +86 -0
- package/dist/services/definitions/timescaledb.mjs.map +1 -0
- package/dist/services/definitions/valkey.cjs +1 -1
- package/dist/services/definitions/valkey.cjs.map +1 -1
- package/dist/services/definitions/valkey.mjs +1 -1
- package/dist/services/definitions/valkey.mjs.map +1 -1
- package/dist/services/definitions/vector-log.cjs +59 -0
- package/dist/services/definitions/vector-log.cjs.map +1 -0
- package/dist/services/definitions/vector-log.d.cts +7 -0
- package/dist/services/definitions/vector-log.d.cts.map +1 -0
- package/dist/services/definitions/vector-log.d.mts +7 -0
- package/dist/services/definitions/vector-log.d.mts.map +1 -0
- package/dist/services/definitions/vector-log.mjs +58 -0
- package/dist/services/definitions/vector-log.mjs.map +1 -0
- package/dist/services/definitions/vikunja.cjs +96 -0
- package/dist/services/definitions/vikunja.cjs.map +1 -0
- package/dist/services/definitions/vikunja.d.cts +7 -0
- package/dist/services/definitions/vikunja.d.cts.map +1 -0
- package/dist/services/definitions/vikunja.d.mts +7 -0
- package/dist/services/definitions/vikunja.d.mts.map +1 -0
- package/dist/services/definitions/vikunja.mjs +95 -0
- package/dist/services/definitions/vikunja.mjs.map +1 -0
- package/dist/services/definitions/wireguard.cjs +88 -0
- package/dist/services/definitions/wireguard.cjs.map +1 -0
- package/dist/services/definitions/wireguard.d.cts +7 -0
- package/dist/services/definitions/wireguard.d.cts.map +1 -0
- package/dist/services/definitions/wireguard.d.mts +7 -0
- package/dist/services/definitions/wireguard.d.mts.map +1 -0
- package/dist/services/definitions/wireguard.mjs +87 -0
- package/dist/services/definitions/wireguard.mjs.map +1 -0
- package/dist/services/definitions/woodpecker-ci.cjs +93 -0
- package/dist/services/definitions/woodpecker-ci.cjs.map +1 -0
- package/dist/services/definitions/woodpecker-ci.d.cts +7 -0
- package/dist/services/definitions/woodpecker-ci.d.cts.map +1 -0
- package/dist/services/definitions/woodpecker-ci.d.mts +7 -0
- package/dist/services/definitions/woodpecker-ci.d.mts.map +1 -0
- package/dist/services/definitions/woodpecker-ci.mjs +92 -0
- package/dist/services/definitions/woodpecker-ci.mjs.map +1 -0
- package/dist/services/definitions/zulip.cjs +116 -0
- package/dist/services/definitions/zulip.cjs.map +1 -0
- package/dist/services/definitions/zulip.d.cts +7 -0
- package/dist/services/definitions/zulip.d.cts.map +1 -0
- package/dist/services/definitions/zulip.d.mts +7 -0
- package/dist/services/definitions/zulip.d.mts.map +1 -0
- package/dist/services/definitions/zulip.mjs +115 -0
- package/dist/services/definitions/zulip.mjs.map +1 -0
- package/dist/services/registry.cjs +3 -0
- package/dist/services/registry.cjs.map +1 -1
- package/dist/services/registry.d.cts.map +1 -1
- package/dist/services/registry.d.mts.map +1 -1
- package/dist/services/registry.mjs +3 -0
- package/dist/services/registry.mjs.map +1 -1
- package/dist/services/registry.test.cjs +8 -1
- package/dist/services/registry.test.cjs.map +1 -1
- package/dist/services/registry.test.mjs +8 -1
- package/dist/services/registry.test.mjs.map +1 -1
- package/dist/{skill-manifest-BVUXU0__.mjs → skill-manifest-6XhrhWsG.mjs} +49 -1
- package/dist/{skill-manifest--IgY9REK.cjs.map → skill-manifest-6XhrhWsG.mjs.map} +1 -1
- package/dist/{skill-manifest--IgY9REK.cjs → skill-manifest-B8znSsym.cjs} +49 -1
- package/dist/{skill-manifest-BVUXU0__.mjs.map → skill-manifest-B8znSsym.cjs.map} +1 -1
- package/dist/skills/registry.cjs +3 -3
- package/dist/skills/registry.cjs.map +1 -1
- package/dist/skills/registry.mjs +3 -3
- package/dist/skills/registry.mjs.map +1 -1
- package/dist/skills/skill-manifest.cjs +1 -1
- package/dist/skills/skill-manifest.mjs +1 -1
- package/dist/track-analytics.cjs +50 -0
- package/dist/track-analytics.cjs.map +1 -0
- package/dist/track-analytics.d.cts +34 -0
- package/dist/track-analytics.d.cts.map +1 -0
- package/dist/track-analytics.d.mts +34 -0
- package/dist/track-analytics.d.mts.map +1 -0
- package/dist/track-analytics.mjs +48 -0
- package/dist/track-analytics.mjs.map +1 -0
- package/dist/track-analytics.test.cjs +91 -0
- package/dist/track-analytics.test.cjs.map +1 -0
- package/dist/track-analytics.test.d.cts +1 -0
- package/dist/track-analytics.test.d.mts +1 -0
- package/dist/track-analytics.test.mjs +92 -0
- package/dist/track-analytics.test.mjs.map +1 -0
- package/dist/types.cjs +35 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +5 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +5 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +35 -0
- package/dist/types.mjs.map +1 -1
- package/dist/validator.test.cjs +1 -1
- package/dist/validator.test.mjs +1 -1
- package/dist/version-manager.cjs +1 -1
- package/dist/version-manager.cjs.map +1 -1
- package/dist/version-manager.mjs +1 -1
- package/dist/version-manager.mjs.map +1 -1
- package/dist/version-manager.test.cjs +7 -5
- package/dist/version-manager.test.cjs.map +1 -1
- package/dist/version-manager.test.mjs +7 -5
- package/dist/version-manager.test.mjs.map +1 -1
- package/dist/{vi.2VT5v0um-DvC3SVNc.mjs → vi.2VT5v0um-C_jmO7m2.mjs} +5 -5
- package/dist/{vi.2VT5v0um-DvC3SVNc.mjs.map → vi.2VT5v0um-C_jmO7m2.mjs.map} +1 -1
- package/dist/{vi.2VT5v0um-CRqXre87.cjs → vi.2VT5v0um-iVBt6Fyq.cjs} +5 -5
- package/dist/{vi.2VT5v0um-CRqXre87.cjs.map → vi.2VT5v0um-iVBt6Fyq.cjs.map} +1 -1
- package/package.json +1 -1
- package/src/__snapshots__/composer.snapshot.test.ts.snap +285 -65
- package/src/bare-metal-partition.test.ts +4 -3
- package/src/composer.test.ts +4 -2
- package/src/composer.ts +45 -16
- package/src/generate.test.ts +2 -1
- package/src/generate.ts +11 -1
- package/src/generators/clone-repos.test.ts +154 -0
- package/src/generators/clone-repos.ts +159 -0
- package/src/generators/env.ts +214 -0
- package/src/generators/openclaw-json.ts +156 -1
- package/src/generators/postgres-init.ts +17 -0
- package/src/generators/readme.ts +2 -1
- package/src/generators/scripts.test.ts +52 -4
- package/src/generators/scripts.ts +351 -3
- package/src/generators/stack-manifest.ts +4 -2
- package/src/index.ts +8 -0
- package/src/presets/registry.ts +20 -0
- package/src/resolver.test.ts +53 -15
- package/src/resolver.ts +13 -1
- package/src/schema.ts +37 -4
- package/src/services/definitions/adguard-home.ts +79 -0
- package/src/services/definitions/apptension-saas.ts +84 -0
- package/src/services/definitions/audiobookshelf.ts +83 -0
- package/src/services/definitions/baserow.ts +118 -0
- package/src/services/definitions/boxyhq-saas.ts +84 -0
- package/src/services/definitions/calibre-web.ts +95 -0
- package/src/services/definitions/clickhouse.ts +115 -0
- package/src/services/definitions/cloudflared.ts +55 -0
- package/src/services/definitions/cmsaas-starter.ts +84 -0
- package/src/services/definitions/cockroachdb.ts +75 -0
- package/src/services/definitions/coder.ts +68 -0
- package/src/services/definitions/dragonfly.ts +68 -0
- package/src/services/definitions/drone-ci.ts +96 -0
- package/src/services/definitions/element-web.ts +62 -0
- package/src/services/definitions/focalboard.ts +69 -0
- package/src/services/definitions/forgejo.ts +109 -0
- package/src/services/definitions/graylog.ts +101 -0
- package/src/services/definitions/index.ts +159 -0
- package/src/services/definitions/influxdb.ts +109 -0
- package/src/services/definitions/invoke-ai.ts +76 -0
- package/src/services/definitions/ixartz-saas.ts +84 -0
- package/src/services/definitions/jaeger.ts +94 -0
- package/src/services/definitions/jan.ts +68 -0
- package/src/services/definitions/jitsi-meet.ts +108 -0
- package/src/services/definitions/local-ai.ts +90 -0
- package/src/services/definitions/metabase.ts +111 -0
- package/src/services/definitions/mission-control.ts +19 -2
- package/src/services/definitions/mosquitto.ts +84 -0
- package/src/services/definitions/navidrome.ts +95 -0
- package/src/services/definitions/nginx-proxy-manager.ts +70 -0
- package/src/services/definitions/node-red.ts +83 -0
- package/src/services/definitions/open-saas.ts +79 -0
- package/src/services/definitions/photoprism.ts +130 -0
- package/src/services/definitions/pihole.ts +79 -0
- package/src/services/definitions/piper-tts.ts +76 -0
- package/src/services/definitions/plane.ts +75 -0
- package/src/services/definitions/plausible.ts +97 -0
- package/src/services/definitions/pocket-id.ts +98 -0
- package/src/services/definitions/posthog.ts +97 -0
- package/src/services/definitions/redis.ts +1 -1
- package/src/services/definitions/revolt.ts +68 -0
- package/src/services/definitions/sentry.ts +104 -0
- package/src/services/definitions/sonarqube.ts +85 -0
- package/src/services/definitions/superset.ts +84 -0
- package/src/services/definitions/surrealdb.ts +77 -0
- package/src/services/definitions/tabby-ml.ts +76 -0
- package/src/services/definitions/tempo.ts +59 -0
- package/src/services/definitions/text-gen-webui.ts +92 -0
- package/src/services/definitions/timescaledb.ts +90 -0
- package/src/services/definitions/valkey.ts +1 -1
- package/src/services/definitions/vector-log.ts +61 -0
- package/src/services/definitions/vikunja.ts +96 -0
- package/src/services/definitions/wireguard.ts +89 -0
- package/src/services/definitions/woodpecker-ci.ts +97 -0
- package/src/services/definitions/zulip.ts +117 -0
- package/src/services/registry.test.ts +8 -0
- package/src/services/registry.ts +7 -0
- package/src/skills/manifest.json +64 -0
- package/src/skills/registry.ts +3 -3
- package/src/track-analytics.test.ts +82 -0
- package/src/track-analytics.ts +76 -0
- package/src/types.ts +40 -0
- package/src/version-manager.test.ts +10 -5
- package/src/version-manager.ts +1 -1
- package/dist/schema-C_hc7e4k.d.cts.map +0 -1
- package/dist/schema-CaesJaS2.d.mts.map +0 -1
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Returns a map of file paths (relative to project root) to file contents.
|
|
5
5
|
*/
|
|
6
|
-
export function generateScripts(): Record<string, string> {
|
|
6
|
+
export function generateScripts(options?: { hasGitServices?: boolean }): Record<string, string> {
|
|
7
|
+
const hasGit = options?.hasGitServices ?? false;
|
|
7
8
|
const files: Record<string, string> = {};
|
|
8
9
|
|
|
9
10
|
// ── scripts/start.sh ────────────────────────────────────────────────────
|
|
@@ -136,6 +137,14 @@ if [ "$EMPTY_SECRETS" -gt 0 ]; then
|
|
|
136
137
|
echo ""
|
|
137
138
|
fi
|
|
138
139
|
|
|
140
|
+
# ── Clone git-based repositories (if any) ────────────────────────────────────
|
|
141
|
+
|
|
142
|
+
if [ -f "$SCRIPT_DIR/clone-repos.sh" ]; then
|
|
143
|
+
info "Cloning/updating SaaS boilerplate repositories..."
|
|
144
|
+
bash "$SCRIPT_DIR/clone-repos.sh"
|
|
145
|
+
ok "Repositories ready."
|
|
146
|
+
fi
|
|
147
|
+
|
|
139
148
|
# ── Pull and start ───────────────────────────────────────────────────────────
|
|
140
149
|
|
|
141
150
|
echo ""
|
|
@@ -144,7 +153,7 @@ docker compose pull --quiet 2>/dev/null || docker compose pull
|
|
|
144
153
|
|
|
145
154
|
echo ""
|
|
146
155
|
info "Starting services..."
|
|
147
|
-
docker compose up -d --remove-orphans
|
|
156
|
+
docker compose up -d --remove-orphans${hasGit ? " --build" : ""}
|
|
148
157
|
|
|
149
158
|
# ── Health-check loop ────────────────────────────────────────────────────────
|
|
150
159
|
|
|
@@ -243,13 +252,19 @@ cd "$PROJECT_DIR"
|
|
|
243
252
|
echo "🐾 OpenClaw — Updating services..."
|
|
244
253
|
echo ""
|
|
245
254
|
|
|
255
|
+
# Update git-based repositories (if any)
|
|
256
|
+
if [ -f "$SCRIPT_DIR/clone-repos.sh" ]; then
|
|
257
|
+
echo "📂 Updating SaaS boilerplate repositories..."
|
|
258
|
+
bash "$SCRIPT_DIR/clone-repos.sh"
|
|
259
|
+
fi
|
|
260
|
+
|
|
246
261
|
# Pull latest images
|
|
247
262
|
echo "📦 Pulling latest images..."
|
|
248
263
|
docker compose pull
|
|
249
264
|
|
|
250
265
|
echo ""
|
|
251
266
|
echo "🔄 Restarting services with new images..."
|
|
252
|
-
docker compose up -d --remove-orphans
|
|
267
|
+
docker compose up -d --remove-orphans${hasGit ? " --build" : ""}
|
|
253
268
|
|
|
254
269
|
echo ""
|
|
255
270
|
echo "⏳ Waiting for services to stabilize..."
|
|
@@ -356,6 +371,339 @@ echo "── Network ───────────────────
|
|
|
356
371
|
echo ""
|
|
357
372
|
|
|
358
373
|
docker network ls --filter "name=openclaw" --format "table {{.Name}}\\t{{.Driver}}\\t{{.Scope}}" 2>/dev/null || true
|
|
374
|
+
`;
|
|
375
|
+
|
|
376
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
377
|
+
// PowerShell equivalents
|
|
378
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
379
|
+
|
|
380
|
+
// ── scripts/start.ps1 ───────────────────────────────────────────────────
|
|
381
|
+
|
|
382
|
+
files["scripts/start.ps1"] = `#Requires -Version 5.1
|
|
383
|
+
<#
|
|
384
|
+
.SYNOPSIS
|
|
385
|
+
OpenClaw Start Script — validates prerequisites, auto-generates secrets,
|
|
386
|
+
creates required directories, and starts all services via Docker Compose.
|
|
387
|
+
#>
|
|
388
|
+
|
|
389
|
+
$ErrorActionPreference = 'Stop'
|
|
390
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
391
|
+
$ProjectDir = Split-Path -Parent $ScriptDir
|
|
392
|
+
Set-Location $ProjectDir
|
|
393
|
+
|
|
394
|
+
function Info { param($Msg) Write-Host " i $Msg" -ForegroundColor Cyan }
|
|
395
|
+
function Ok { param($Msg) Write-Host " + $Msg" -ForegroundColor Green }
|
|
396
|
+
function Warn { param($Msg) Write-Host " ! $Msg" -ForegroundColor Yellow }
|
|
397
|
+
function Err { param($Msg) Write-Host " x $Msg" -ForegroundColor Red }
|
|
398
|
+
|
|
399
|
+
Write-Host ""
|
|
400
|
+
Write-Host "OpenClaw - Starting services..." -ForegroundColor White
|
|
401
|
+
Write-Host ""
|
|
402
|
+
|
|
403
|
+
# ── Prerequisite checks ─────────────────────────────────────────────────
|
|
404
|
+
if (-not (Get-Command docker -ErrorAction SilentlyContinue)) {
|
|
405
|
+
Err "Docker is not installed. Please install Docker Desktop."
|
|
406
|
+
Write-Host " https://docs.docker.com/desktop/install/windows-install/"
|
|
407
|
+
exit 1
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
$composeCheck = docker compose version 2>&1
|
|
411
|
+
if ($LASTEXITCODE -ne 0) {
|
|
412
|
+
Err "Docker Compose (v2) is not available."
|
|
413
|
+
Write-Host " https://docs.docker.com/compose/install/"
|
|
414
|
+
exit 1
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
$dockerInfo = docker info 2>&1
|
|
418
|
+
if ($LASTEXITCODE -ne 0) {
|
|
419
|
+
Err "Docker daemon is not running. Please start Docker Desktop."
|
|
420
|
+
exit 1
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
# ── Source .env if it exists ─────────────────────────────────────────────
|
|
424
|
+
if (Test-Path ".env") {
|
|
425
|
+
Info "Loading existing .env file..."
|
|
426
|
+
Get-Content ".env" | ForEach-Object {
|
|
427
|
+
if ($_ -match '^([^#=]+)=(.*)$') {
|
|
428
|
+
[Environment]::SetEnvironmentVariable($Matches[1].Trim(), $Matches[2].Trim(), 'Process')
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
} else {
|
|
432
|
+
Warn ".env file not found - will create one from .env.example if available."
|
|
433
|
+
if (Test-Path ".env.example") {
|
|
434
|
+
Copy-Item ".env.example" ".env"
|
|
435
|
+
Info "Created .env from .env.example"
|
|
436
|
+
Get-Content ".env" | ForEach-Object {
|
|
437
|
+
if ($_ -match '^([^#=]+)=(.*)$') {
|
|
438
|
+
[Environment]::SetEnvironmentVariable($Matches[1].Trim(), $Matches[2].Trim(), 'Process')
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
# ── Auto-generate OPENCLAW_GATEWAY_TOKEN if missing ──────────────────────
|
|
445
|
+
if (-not $env:OPENCLAW_GATEWAY_TOKEN) {
|
|
446
|
+
Info "Generating OPENCLAW_GATEWAY_TOKEN..."
|
|
447
|
+
$bytes = New-Object byte[] 32
|
|
448
|
+
[System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($bytes)
|
|
449
|
+
$env:OPENCLAW_GATEWAY_TOKEN = ($bytes | ForEach-Object { $_.ToString("x2") }) -join ''
|
|
450
|
+
|
|
451
|
+
if (Test-Path ".env") {
|
|
452
|
+
$envContent = Get-Content ".env" -Raw
|
|
453
|
+
if ($envContent -match '(?m)^OPENCLAW_GATEWAY_TOKEN=') {
|
|
454
|
+
$envContent = $envContent -replace '(?m)^OPENCLAW_GATEWAY_TOKEN=.*', "OPENCLAW_GATEWAY_TOKEN=$($env:OPENCLAW_GATEWAY_TOKEN)"
|
|
455
|
+
Set-Content ".env" $envContent -NoNewline
|
|
456
|
+
} else {
|
|
457
|
+
Add-Content ".env" "OPENCLAW_GATEWAY_TOKEN=$($env:OPENCLAW_GATEWAY_TOKEN)"
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
Ok "Gateway token generated and saved."
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
# ── Apply defaults ───────────────────────────────────────────────────────
|
|
464
|
+
if (-not $env:OPENCLAW_VERSION) { $env:OPENCLAW_VERSION = "latest" }
|
|
465
|
+
if (-not $env:OPENCLAW_GATEWAY_PORT) { $env:OPENCLAW_GATEWAY_PORT = "18789" }
|
|
466
|
+
if (-not $env:OPENCLAW_BRIDGE_PORT) { $env:OPENCLAW_BRIDGE_PORT = "18790" }
|
|
467
|
+
if (-not $env:OPENCLAW_GATEWAY_BIND) { $env:OPENCLAW_GATEWAY_BIND = "lan" }
|
|
468
|
+
if (-not $env:OPENCLAW_CONFIG_DIR) { $env:OPENCLAW_CONFIG_DIR = "./openclaw/config" }
|
|
469
|
+
if (-not $env:OPENCLAW_WORKSPACE_DIR) { $env:OPENCLAW_WORKSPACE_DIR = "./openclaw/workspace" }
|
|
470
|
+
|
|
471
|
+
# ── Create required host directories ────────────────────────────────────
|
|
472
|
+
Info "Ensuring host directories exist..."
|
|
473
|
+
New-Item -ItemType Directory -Force -Path $env:OPENCLAW_CONFIG_DIR | Out-Null
|
|
474
|
+
New-Item -ItemType Directory -Force -Path $env:OPENCLAW_WORKSPACE_DIR | Out-Null
|
|
475
|
+
Ok "Directories ready: $($env:OPENCLAW_CONFIG_DIR), $($env:OPENCLAW_WORKSPACE_DIR)"
|
|
476
|
+
|
|
477
|
+
# ── Clone git-based repositories (if any) ─────────────────────────────
|
|
478
|
+
$cloneScript = Join-Path $ScriptDir "clone-repos.ps1"
|
|
479
|
+
if (Test-Path $cloneScript) {
|
|
480
|
+
Info "Cloning/updating SaaS boilerplate repositories..."
|
|
481
|
+
& $cloneScript
|
|
482
|
+
Ok "Repositories ready."
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
# ── Pull and start ───────────────────────────────────────────────────────
|
|
486
|
+
Write-Host ""
|
|
487
|
+
Info "Pulling latest images..."
|
|
488
|
+
docker compose pull 2>$null
|
|
489
|
+
if ($LASTEXITCODE -ne 0) { docker compose pull }
|
|
490
|
+
|
|
491
|
+
Write-Host ""
|
|
492
|
+
Info "Starting services..."
|
|
493
|
+
docker compose up -d --remove-orphans${hasGit ? " --build" : ""}
|
|
494
|
+
|
|
495
|
+
# ── Health-check loop ────────────────────────────────────────────────────
|
|
496
|
+
Write-Host ""
|
|
497
|
+
Info "Waiting for services to become healthy..."
|
|
498
|
+
Start-Sleep -Seconds 5
|
|
499
|
+
|
|
500
|
+
$retries = 0
|
|
501
|
+
$maxRetries = 30
|
|
502
|
+
while ($retries -lt $maxRetries) {
|
|
503
|
+
$psOutput = docker compose ps --format json 2>$null
|
|
504
|
+
$unhealthy = ($psOutput | Select-String -Pattern '"unhealthy"' -SimpleMatch).Count
|
|
505
|
+
$starting = ($psOutput | Select-String -Pattern '"starting"' -SimpleMatch).Count
|
|
506
|
+
if ($unhealthy -eq 0 -and $starting -eq 0) { break }
|
|
507
|
+
$retries++
|
|
508
|
+
Start-Sleep -Seconds 2
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
Write-Host ""
|
|
512
|
+
docker compose ps
|
|
513
|
+
Write-Host ""
|
|
514
|
+
|
|
515
|
+
if ($retries -ge $maxRetries) {
|
|
516
|
+
Warn "Some services may still be starting. Check: docker compose ps"
|
|
517
|
+
} else {
|
|
518
|
+
Ok "All services are running!"
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
# ── Print service URLs & token ───────────────────────────────────────────
|
|
522
|
+
$gatewayHost = if ($env:OPENCLAW_GATEWAY_BIND -eq "lan") { "0.0.0.0" } else { "localhost" }
|
|
523
|
+
|
|
524
|
+
Write-Host ""
|
|
525
|
+
Write-Host "==============================================================================="
|
|
526
|
+
Write-Host " OpenClaw is ready!"
|
|
527
|
+
Write-Host "==============================================================================="
|
|
528
|
+
Write-Host ""
|
|
529
|
+
Write-Host " Gateway URL: http://\${gatewayHost}:$($env:OPENCLAW_GATEWAY_PORT)"
|
|
530
|
+
Write-Host " Bridge (WebSocket): ws://\${gatewayHost}:$($env:OPENCLAW_BRIDGE_PORT)"
|
|
531
|
+
Write-Host " Config directory: $($env:OPENCLAW_CONFIG_DIR)"
|
|
532
|
+
Write-Host " Workspace directory: $($env:OPENCLAW_WORKSPACE_DIR)"
|
|
533
|
+
Write-Host ""
|
|
534
|
+
Write-Host " Gateway Token: $($env:OPENCLAW_GATEWAY_TOKEN)"
|
|
535
|
+
Write-Host ""
|
|
536
|
+
Write-Host " Manage:"
|
|
537
|
+
Write-Host " Stop: .\\scripts\\stop.ps1"
|
|
538
|
+
Write-Host " Status: .\\scripts\\status.ps1"
|
|
539
|
+
Write-Host " Update: .\\scripts\\update.ps1"
|
|
540
|
+
Write-Host " Logs: docker compose logs -f"
|
|
541
|
+
Write-Host ""
|
|
542
|
+
Write-Host "==============================================================================="
|
|
543
|
+
`;
|
|
544
|
+
|
|
545
|
+
// ── scripts/stop.ps1 ────────────────────────────────────────────────────
|
|
546
|
+
|
|
547
|
+
files["scripts/stop.ps1"] = `#Requires -Version 5.1
|
|
548
|
+
<#
|
|
549
|
+
.SYNOPSIS
|
|
550
|
+
OpenClaw Stop Script — gracefully stops all services.
|
|
551
|
+
#>
|
|
552
|
+
|
|
553
|
+
$ErrorActionPreference = 'Stop'
|
|
554
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
555
|
+
$ProjectDir = Split-Path -Parent $ScriptDir
|
|
556
|
+
Set-Location $ProjectDir
|
|
557
|
+
|
|
558
|
+
Write-Host ""
|
|
559
|
+
Write-Host "OpenClaw - Stopping services..." -ForegroundColor White
|
|
560
|
+
Write-Host ""
|
|
561
|
+
|
|
562
|
+
docker compose down --timeout 30
|
|
563
|
+
|
|
564
|
+
Write-Host ""
|
|
565
|
+
Write-Host " + All services stopped." -ForegroundColor Green
|
|
566
|
+
`;
|
|
567
|
+
|
|
568
|
+
// ── scripts/update.ps1 ──────────────────────────────────────────────────
|
|
569
|
+
|
|
570
|
+
files["scripts/update.ps1"] = `#Requires -Version 5.1
|
|
571
|
+
<#
|
|
572
|
+
.SYNOPSIS
|
|
573
|
+
OpenClaw Update Script — pulls latest images and restarts services.
|
|
574
|
+
#>
|
|
575
|
+
|
|
576
|
+
$ErrorActionPreference = 'Stop'
|
|
577
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
578
|
+
$ProjectDir = Split-Path -Parent $ScriptDir
|
|
579
|
+
Set-Location $ProjectDir
|
|
580
|
+
|
|
581
|
+
Write-Host ""
|
|
582
|
+
Write-Host "OpenClaw - Updating services..." -ForegroundColor White
|
|
583
|
+
Write-Host ""
|
|
584
|
+
|
|
585
|
+
# Update git-based repositories (if any)
|
|
586
|
+
$cloneScript = Join-Path $ScriptDir "clone-repos.ps1"
|
|
587
|
+
if (Test-Path $cloneScript) {
|
|
588
|
+
Write-Host " Updating SaaS boilerplate repositories..." -ForegroundColor Cyan
|
|
589
|
+
& $cloneScript
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
Write-Host " Pulling latest images..." -ForegroundColor Cyan
|
|
593
|
+
docker compose pull
|
|
594
|
+
|
|
595
|
+
Write-Host ""
|
|
596
|
+
Write-Host " Restarting services with new images..." -ForegroundColor Cyan
|
|
597
|
+
docker compose up -d --remove-orphans${hasGit ? " --build" : ""}
|
|
598
|
+
|
|
599
|
+
Write-Host ""
|
|
600
|
+
Write-Host " Waiting for services to stabilize..." -ForegroundColor Cyan
|
|
601
|
+
Start-Sleep -Seconds 10
|
|
602
|
+
|
|
603
|
+
docker compose ps
|
|
604
|
+
|
|
605
|
+
Write-Host ""
|
|
606
|
+
Write-Host " + Update complete!" -ForegroundColor Green
|
|
607
|
+
`;
|
|
608
|
+
|
|
609
|
+
// ── scripts/backup.ps1 ──────────────────────────────────────────────────
|
|
610
|
+
|
|
611
|
+
files["scripts/backup.ps1"] = `#Requires -Version 5.1
|
|
612
|
+
<#
|
|
613
|
+
.SYNOPSIS
|
|
614
|
+
OpenClaw Backup Script — backs up all named Docker volumes to a timestamped directory.
|
|
615
|
+
#>
|
|
616
|
+
|
|
617
|
+
$ErrorActionPreference = 'Stop'
|
|
618
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
619
|
+
$ProjectDir = Split-Path -Parent $ScriptDir
|
|
620
|
+
Set-Location $ProjectDir
|
|
621
|
+
|
|
622
|
+
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
|
623
|
+
$backupDir = Join-Path $ProjectDir "backups\\$timestamp"
|
|
624
|
+
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
|
|
625
|
+
|
|
626
|
+
Write-Host ""
|
|
627
|
+
Write-Host "OpenClaw - Backing up volumes..." -ForegroundColor White
|
|
628
|
+
Write-Host " Backup directory: $backupDir"
|
|
629
|
+
Write-Host ""
|
|
630
|
+
|
|
631
|
+
# Get project name from docker compose
|
|
632
|
+
$projectName = "openclaw"
|
|
633
|
+
try {
|
|
634
|
+
$configJson = docker compose config --format json 2>$null | ConvertFrom-Json
|
|
635
|
+
if ($configJson.name) { $projectName = $configJson.name }
|
|
636
|
+
} catch {}
|
|
637
|
+
|
|
638
|
+
# List all volumes for this project
|
|
639
|
+
$volumes = docker volume ls --filter "name=$projectName" --format "{{.Name}}" 2>$null
|
|
640
|
+
if (-not $volumes) {
|
|
641
|
+
Write-Host " ! No volumes found for project: $projectName" -ForegroundColor Yellow
|
|
642
|
+
Write-Host " Trying to list all openclaw volumes..."
|
|
643
|
+
$volumes = docker volume ls --filter "name=openclaw" --format "{{.Name}}" 2>$null
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
if (-not $volumes) {
|
|
647
|
+
Write-Host " x No volumes found to back up." -ForegroundColor Red
|
|
648
|
+
exit 1
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
$backedUp = 0
|
|
652
|
+
foreach ($volume in $volumes) {
|
|
653
|
+
$vol = $volume.Trim()
|
|
654
|
+
if (-not $vol) { continue }
|
|
655
|
+
Write-Host " Backing up: $vol" -ForegroundColor Cyan
|
|
656
|
+
docker run --rm -v "\${vol}:/source:ro" -v "\${backupDir}:/backup" alpine tar czf "/backup/$vol.tar.gz" -C /source .
|
|
657
|
+
$size = (Get-Item (Join-Path $backupDir "$vol.tar.gz")).Length / 1MB
|
|
658
|
+
Write-Host " + $vol ($([math]::Round($size, 1))MB)" -ForegroundColor Green
|
|
659
|
+
$backedUp++
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
$totalSize = ((Get-ChildItem $backupDir -Recurse | Measure-Object -Property Length -Sum).Sum) / 1MB
|
|
663
|
+
Write-Host ""
|
|
664
|
+
Write-Host " + Backed up $backedUp volume(s) ($([math]::Round($totalSize, 1))MB total)" -ForegroundColor Green
|
|
665
|
+
Write-Host " Location: $backupDir"
|
|
666
|
+
`;
|
|
667
|
+
|
|
668
|
+
// ── scripts/status.ps1 ──────────────────────────────────────────────────
|
|
669
|
+
|
|
670
|
+
files["scripts/status.ps1"] = `#Requires -Version 5.1
|
|
671
|
+
<#
|
|
672
|
+
.SYNOPSIS
|
|
673
|
+
OpenClaw Status Script — shows the current status of all services.
|
|
674
|
+
#>
|
|
675
|
+
|
|
676
|
+
$ErrorActionPreference = 'Stop'
|
|
677
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
678
|
+
$ProjectDir = Split-Path -Parent $ScriptDir
|
|
679
|
+
Set-Location $ProjectDir
|
|
680
|
+
|
|
681
|
+
Write-Host ""
|
|
682
|
+
Write-Host "OpenClaw - Service Status" -ForegroundColor White
|
|
683
|
+
Write-Host ""
|
|
684
|
+
|
|
685
|
+
# Show compose status
|
|
686
|
+
docker compose ps
|
|
687
|
+
|
|
688
|
+
Write-Host ""
|
|
689
|
+
Write-Host "-- Resource Usage ----------------------------------------------------------"
|
|
690
|
+
Write-Host ""
|
|
691
|
+
|
|
692
|
+
try { docker compose top 2>$null } catch {}
|
|
693
|
+
|
|
694
|
+
Write-Host ""
|
|
695
|
+
Write-Host "-- Disk Usage --------------------------------------------------------------"
|
|
696
|
+
Write-Host ""
|
|
697
|
+
|
|
698
|
+
try { docker system df 2>$null } catch {}
|
|
699
|
+
|
|
700
|
+
Write-Host ""
|
|
701
|
+
Write-Host "-- Network -----------------------------------------------------------------"
|
|
702
|
+
Write-Host ""
|
|
703
|
+
|
|
704
|
+
try {
|
|
705
|
+
docker network ls --filter "name=openclaw" --format "table {{.Name}}\\t{{.Driver}}\\t{{.Scope}}" 2>$null
|
|
706
|
+
} catch {}
|
|
359
707
|
`;
|
|
360
708
|
|
|
361
709
|
return files;
|
|
@@ -13,8 +13,9 @@ export interface StackManifestService {
|
|
|
13
13
|
name: string;
|
|
14
14
|
category: string;
|
|
15
15
|
icon: string;
|
|
16
|
-
image
|
|
17
|
-
imageTag
|
|
16
|
+
image?: string;
|
|
17
|
+
imageTag?: string;
|
|
18
|
+
gitRepoUrl?: string;
|
|
18
19
|
ports: { container: number; host?: number; exposed: boolean; description: string }[];
|
|
19
20
|
docsUrl: string;
|
|
20
21
|
addedBy: string;
|
|
@@ -72,6 +73,7 @@ export function generateStackManifest(
|
|
|
72
73
|
icon: def.icon,
|
|
73
74
|
image: def.image,
|
|
74
75
|
imageTag: def.imageTag,
|
|
76
|
+
gitRepoUrl: def.gitSource?.repoUrl,
|
|
75
77
|
ports: def.ports.map((p) => ({
|
|
76
78
|
container: p.container,
|
|
77
79
|
host: p.host,
|
package/src/index.ts
CHANGED
|
@@ -28,6 +28,7 @@ export {
|
|
|
28
28
|
export { StackConfigError, ValidationError } from "./errors.js";
|
|
29
29
|
export { generate, generateServicesDoc } from "./generate.js";
|
|
30
30
|
export { generateCaddyfile } from "./generators/caddy.js";
|
|
31
|
+
export { generateCloneScripts } from "./generators/clone-repos.js";
|
|
31
32
|
export type { EnvVarGroup } from "./generators/env.js";
|
|
32
33
|
export { generateEnvFiles, getStructuredEnvVars } from "./generators/env.js";
|
|
33
34
|
export {
|
|
@@ -44,6 +45,9 @@ export { generatePrometheusConfig } from "./generators/prometheus.js";
|
|
|
44
45
|
export { generateReadme } from "./generators/readme.js";
|
|
45
46
|
export { generateScripts } from "./generators/scripts.js";
|
|
46
47
|
export { generateSkillFiles } from "./generators/skills.js";
|
|
48
|
+
// ─── Analytics ─────────────────────────────────────────────────────────────
|
|
49
|
+
export type { AnalyticsPayload } from "./track-analytics.js";
|
|
50
|
+
export { buildAnalyticsPayload, trackAnalytics } from "./track-analytics.js";
|
|
47
51
|
export type {
|
|
48
52
|
StackManifest,
|
|
49
53
|
StackManifestService,
|
|
@@ -69,6 +73,7 @@ export { resolve } from "./resolver.js";
|
|
|
69
73
|
export {
|
|
70
74
|
AddedDependencySchema,
|
|
71
75
|
ApiErrorSchema,
|
|
76
|
+
BuildContextSchema,
|
|
72
77
|
ComposeOptionsSchema,
|
|
73
78
|
DeploymentTargetSchema,
|
|
74
79
|
DeploymentTypeSchema,
|
|
@@ -77,6 +82,7 @@ export {
|
|
|
77
82
|
EnvVariableSchema,
|
|
78
83
|
ErrorSchema,
|
|
79
84
|
GenerationInputSchema,
|
|
85
|
+
GitSourceSchema,
|
|
80
86
|
HealthCheckSchema,
|
|
81
87
|
MaturitySchema,
|
|
82
88
|
NativePlatformSchema,
|
|
@@ -127,6 +133,7 @@ export type {
|
|
|
127
133
|
AddedDependency,
|
|
128
134
|
AiProvider,
|
|
129
135
|
ApiError,
|
|
136
|
+
BuildContext,
|
|
130
137
|
CategoryInfo,
|
|
131
138
|
ComposeOptions,
|
|
132
139
|
Deploy,
|
|
@@ -138,6 +145,7 @@ export type {
|
|
|
138
145
|
GenerationInput,
|
|
139
146
|
GenerationMetadata,
|
|
140
147
|
GenerationResult,
|
|
148
|
+
GitSource,
|
|
141
149
|
GsdRuntime,
|
|
142
150
|
HealthCheck,
|
|
143
151
|
Maturity,
|
package/src/presets/registry.ts
CHANGED
|
@@ -102,6 +102,26 @@ const presets: Preset[] = [
|
|
|
102
102
|
skillPacks: ["ai-playground"],
|
|
103
103
|
estimatedMemoryMB: 4096,
|
|
104
104
|
},
|
|
105
|
+
{
|
|
106
|
+
id: "ai-virtual-desktop",
|
|
107
|
+
name: "AI Virtual Desktop",
|
|
108
|
+
description:
|
|
109
|
+
"Self-hosted autonomous AI agent with local LLM, vector memory, web search, browser automation, and workflow orchestration. The open-source alternative to Manus and Perplexity Computer.",
|
|
110
|
+
services: [
|
|
111
|
+
"ollama",
|
|
112
|
+
"qdrant",
|
|
113
|
+
"postgresql",
|
|
114
|
+
"redis",
|
|
115
|
+
"minio",
|
|
116
|
+
"n8n",
|
|
117
|
+
"browserless",
|
|
118
|
+
"open-webui",
|
|
119
|
+
"searxng",
|
|
120
|
+
"caddy",
|
|
121
|
+
],
|
|
122
|
+
skillPacks: ["research-agent", "dev-ops"],
|
|
123
|
+
estimatedMemoryMB: 6144,
|
|
124
|
+
},
|
|
105
125
|
{
|
|
106
126
|
id: "coding-team",
|
|
107
127
|
name: "Coding Team",
|
package/src/resolver.test.ts
CHANGED
|
@@ -1,18 +1,30 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { resolve } from "./resolver.js";
|
|
3
3
|
|
|
4
|
+
// Mandatory services (convex, mission-control, tailscale) are always auto-included.
|
|
5
|
+
// These IDs and their combined memory are accounted for in all tests.
|
|
6
|
+
const MANDATORY_IDS = ["convex", "mission-control", "tailscale"];
|
|
7
|
+
const MANDATORY_MEMORY = 256 + 128 + 64; // convex + mission-control + tailscale
|
|
8
|
+
|
|
4
9
|
describe("resolve", () => {
|
|
5
|
-
it("returns
|
|
10
|
+
it("returns only mandatory services for empty input", () => {
|
|
6
11
|
const result = resolve({ services: [], skillPacks: [] });
|
|
7
|
-
|
|
12
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
13
|
+
for (const id of MANDATORY_IDS) {
|
|
14
|
+
expect(ids).toContain(id);
|
|
15
|
+
}
|
|
8
16
|
expect(result.isValid).toBe(true);
|
|
9
|
-
|
|
17
|
+
// 512 (base) + mandatory services memory
|
|
18
|
+
expect(result.estimatedMemoryMB).toBe(512 + MANDATORY_MEMORY);
|
|
10
19
|
});
|
|
11
20
|
|
|
12
|
-
it("resolves a single service
|
|
21
|
+
it("resolves a single service alongside mandatory services", () => {
|
|
13
22
|
const result = resolve({ services: ["redis"], skillPacks: [] });
|
|
14
|
-
|
|
15
|
-
expect(
|
|
23
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
24
|
+
expect(ids).toContain("redis");
|
|
25
|
+
for (const id of MANDATORY_IDS) {
|
|
26
|
+
expect(ids).toContain(id);
|
|
27
|
+
}
|
|
16
28
|
expect(result.isValid).toBe(true);
|
|
17
29
|
});
|
|
18
30
|
|
|
@@ -97,8 +109,8 @@ describe("resolve", () => {
|
|
|
97
109
|
|
|
98
110
|
it("estimates memory correctly", () => {
|
|
99
111
|
const result = resolve({ services: ["redis"], skillPacks: [] });
|
|
100
|
-
// 512 (base) + 128 (redis)
|
|
101
|
-
expect(result.estimatedMemoryMB).toBe(
|
|
112
|
+
// 512 (base) + 128 (redis) + mandatory services
|
|
113
|
+
expect(result.estimatedMemoryMB).toBe(512 + 128 + MANDATORY_MEMORY);
|
|
102
114
|
});
|
|
103
115
|
|
|
104
116
|
it("adds proxy service when specified", () => {
|
|
@@ -133,18 +145,15 @@ describe("resolve", () => {
|
|
|
133
145
|
});
|
|
134
146
|
|
|
135
147
|
it("warns about GPU when AI services selected without gpu flag", () => {
|
|
136
|
-
// Ollama doesn't have gpuRequired=true (it's recommended not required)
|
|
137
|
-
// but we should still check GPU warning logic works
|
|
138
148
|
const result = resolve({ services: ["redis"], skillPacks: [], gpu: false });
|
|
139
|
-
// Redis doesn't need GPU, so no GPU warnings
|
|
140
149
|
const gpuWarnings = result.warnings.filter((w) => w.type === "gpu");
|
|
141
150
|
expect(gpuWarnings).toHaveLength(0);
|
|
142
151
|
});
|
|
143
152
|
|
|
144
|
-
it("resolves tailscale
|
|
145
|
-
const result = resolve({ services: [
|
|
146
|
-
|
|
147
|
-
expect(
|
|
153
|
+
it("resolves tailscale (mandatory, always present)", () => {
|
|
154
|
+
const result = resolve({ services: [], skillPacks: [] });
|
|
155
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
156
|
+
expect(ids).toContain("tailscale");
|
|
148
157
|
expect(result.isValid).toBe(true);
|
|
149
158
|
});
|
|
150
159
|
|
|
@@ -201,4 +210,33 @@ describe("resolve", () => {
|
|
|
201
210
|
expect(backendIdx).toBeGreaterThan(livekitIdx);
|
|
202
211
|
expect(frontendIdx).toBeGreaterThan(backendIdx);
|
|
203
212
|
});
|
|
213
|
+
|
|
214
|
+
// ── Mandatory services enforcement ──────────────────────────────────────
|
|
215
|
+
|
|
216
|
+
it("auto-includes mandatory services even when not selected", () => {
|
|
217
|
+
const result = resolve({ services: ["redis"], skillPacks: [] });
|
|
218
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
219
|
+
expect(ids).toContain("mission-control");
|
|
220
|
+
expect(ids).toContain("convex");
|
|
221
|
+
expect(ids).toContain("tailscale");
|
|
222
|
+
const mc = result.services.find((s) => s.definition.id === "mission-control");
|
|
223
|
+
expect(mc!.addedBy).toBe("mandatory");
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it("marks user-selected mandatory services as 'user' not 'mandatory'", () => {
|
|
227
|
+
const result = resolve({ services: ["mission-control"], skillPacks: [] });
|
|
228
|
+
const mc = result.services.find((s) => s.definition.id === "mission-control");
|
|
229
|
+
expect(mc!.addedBy).toBe("user");
|
|
230
|
+
// convex should still be auto-added as dependency of mission-control
|
|
231
|
+
const convex = result.services.find((s) => s.definition.id === "convex");
|
|
232
|
+
expect(convex).toBeDefined();
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
it("orders convex before mission-control (dependency ordering)", () => {
|
|
236
|
+
const result = resolve({ services: ["redis"], skillPacks: [] });
|
|
237
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
238
|
+
const convexIdx = ids.indexOf("convex");
|
|
239
|
+
const mcIdx = ids.indexOf("mission-control");
|
|
240
|
+
expect(convexIdx).toBeLessThan(mcIdx);
|
|
241
|
+
});
|
|
204
242
|
});
|
package/src/resolver.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getServiceById } from "./services/registry.js";
|
|
1
|
+
import { getAllServices, getServiceById } from "./services/registry.js";
|
|
2
2
|
import { getSkillPackById } from "./skills/registry.js";
|
|
3
3
|
import type {
|
|
4
4
|
AddedDependency,
|
|
@@ -99,6 +99,18 @@ export function resolve(input: ResolverInput): ResolverOutput {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
// Add mandatory platform services (mission-control, convex, tailscale, etc.)
|
|
103
|
+
for (const def of getAllServices()) {
|
|
104
|
+
if (def.mandatory && !serviceIds.has(def.id)) {
|
|
105
|
+
serviceIds.add(def.id);
|
|
106
|
+
serviceAddedBy.set(def.id, "mandatory");
|
|
107
|
+
addedDependencies.push({
|
|
108
|
+
service: def.id,
|
|
109
|
+
reason: "Mandatory OpenClaw platform service",
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
102
114
|
// Validate all service IDs exist
|
|
103
115
|
const unknownIds: string[] = [];
|
|
104
116
|
for (const id of serviceIds) {
|