@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.test.cjs","names":["describe","resolve","expect"],"sources":["../src/resolver.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { resolve } from \"./resolver.js\";\n\ndescribe(\"resolve\", () => {\n\tit(\"returns empty services for empty input\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [] });\n\t\texpect(result.services).toHaveLength(0);\n\t\texpect(result.isValid).toBe(true);\n\t\texpect(result.estimatedMemoryMB).toBe(512); // base OpenClaw only\n\t});\n\n\tit(\"resolves a single service with no dependencies\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\texpect(result.services).toHaveLength(1);\n\t\texpect(result.services[0]!.definition.id).toBe(\"redis\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds PostgreSQL when n8n is selected\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(result.addedDependencies).toContainEqual(\n\t\t\texpect.objectContaining({ service: \"postgresql\" }),\n\t\t);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds Prometheus when Grafana is selected\", () => {\n\t\tconst result = resolve({ services: [\"grafana\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"detects Redis + Valkey conflict\", () => {\n\t\tconst result = resolve({ services: [\"redis\", \"valkey\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"detects Caddy + Traefik conflict\", () => {\n\t\tconst result = resolve({ services: [\"caddy\", \"traefik\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"expands research-agent skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"research-agent\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"qdrant\");\n\t\texpect(ids).toContain(\"searxng\");\n\t\texpect(ids).toContain(\"browserless\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"expands video-creator skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"video-creator\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"ffmpeg\");\n\t\texpect(ids).toContain(\"remotion\");\n\t\texpect(ids).toContain(\"minio\");\n\t});\n\n\tit(\"expands dev-ops skill pack with transitive deps\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"dev-ops\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t\t// n8n requires postgresql (transitive)\n\t\texpect(ids).toContain(\"postgresql\");\n\t});\n\n\tit(\"reports unknown service IDs\", () => {\n\t\tconst result = resolve({ services: [\"nonexistent\"], skillPacks: [] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_service\" }));\n\t});\n\n\tit(\"reports unknown skill pack IDs\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"nonexistent-pack\"] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_skill_pack\" }));\n\t});\n\n\tit(\"does not duplicate services already selected by user\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\t\tskillPacks: [\"research-agent\"],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst qdrantCount = ids.filter((id) => id === \"qdrant\").length;\n\t\texpect(qdrantCount).toBe(1);\n\t});\n\n\tit(\"estimates memory correctly\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\t// 512 (base) + 128 (redis) = 640\n\t\texpect(result.estimatedMemoryMB).toBe(640);\n\t});\n\n\tit(\"adds proxy service when specified\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], proxy: \"caddy\" });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"caddy\");\n\t});\n\n\tit(\"adds monitoring stack when flag is set\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [], monitoring: true });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"is deterministic - same input gives same output\", () => {\n\t\tconst input = { services: [\"redis\", \"qdrant\", \"n8n\"], skillPacks: [\"research-agent\"] };\n\t\tconst result1 = resolve(input);\n\t\tconst result2 = resolve(input);\n\t\tconst ids1 = result1.services.map((s) => s.definition.id);\n\t\tconst ids2 = result2.services.map((s) => s.definition.id);\n\t\texpect(ids1).toEqual(ids2);\n\t});\n\n\tit(\"topologically sorts dependencies before dependents\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIndex = ids.indexOf(\"postgresql\");\n\t\tconst n8nIndex = ids.indexOf(\"n8n\");\n\t\texpect(pgIndex).toBeLessThan(n8nIndex);\n\t});\n\n\tit(\"warns about GPU when AI services selected without gpu flag\", () => {\n\t\t// Ollama doesn't have gpuRequired=true (it's recommended not required)\n\t\t// but we should still check GPU warning logic works\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], gpu: false });\n\t\t// Redis doesn't need GPU, so no GPU warnings\n\t\tconst gpuWarnings = result.warnings.filter((w) => w.type === \"gpu\");\n\t\texpect(gpuWarnings).toHaveLength(0);\n\t});\n\n\tit(\"resolves tailscale as single service with no dependencies\", () => {\n\t\tconst result = resolve({ services: [\"tailscale\"], skillPacks: [] });\n\t\texpect(result.services).toHaveLength(1);\n\t\texpect(result.services[0]!.definition.id).toBe(\"tailscale\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves coolify and dokploy as single services\", () => {\n\t\tconst result = resolve({ services: [\"coolify\", \"dokploy\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"coolify\");\n\t\texpect(ids).toContain(\"dokploy\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds postgresql, redis, and livekit when lasuite-meet-backend is selected\", () => {\n\t\tconst result = resolve({ services: [\"lasuite-meet-backend\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"lasuite-meet-backend\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"livekit\");\n\t\texpect(result.addedDependencies.some((a) => a.service === \"postgresql\")).toBe(true);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves La Suite Meet preset (postgresql, redis, livekit, backend, frontend, agents)\", () => {\n\t\tconst lasuiteMeetServices = [\n\t\t\t\"postgresql\",\n\t\t\t\"redis\",\n\t\t\t\"livekit\",\n\t\t\t\"lasuite-meet-backend\",\n\t\t\t\"lasuite-meet-frontend\",\n\t\t\t\"lasuite-meet-agents\",\n\t\t];\n\t\tconst result = resolve({ services: lasuiteMeetServices, skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tfor (const id of lasuiteMeetServices) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"orders lasuite-meet-backend after postgresql, redis, and livekit\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"lasuite-meet-backend\", \"lasuite-meet-frontend\"],\n\t\t\tskillPacks: [],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIdx = ids.indexOf(\"postgresql\");\n\t\tconst redisIdx = ids.indexOf(\"redis\");\n\t\tconst livekitIdx = ids.indexOf(\"livekit\");\n\t\tconst backendIdx = ids.indexOf(\"lasuite-meet-backend\");\n\t\tconst frontendIdx = ids.indexOf(\"lasuite-meet-frontend\");\n\t\texpect(pgIdx).toBeGreaterThanOrEqual(0);\n\t\texpect(backendIdx).toBeGreaterThan(pgIdx);\n\t\texpect(backendIdx).toBeGreaterThan(redisIdx);\n\t\texpect(backendIdx).toBeGreaterThan(livekitIdx);\n\t\texpect(frontendIdx).toBeGreaterThan(backendIdx);\n\t});\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolver.test.cjs","names":["describe","resolve","expect"],"sources":["../src/resolver.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { resolve } from \"./resolver.js\";\n\n// Mandatory services (convex, mission-control, tailscale) are always auto-included.\n// These IDs and their combined memory are accounted for in all tests.\nconst MANDATORY_IDS = [\"convex\", \"mission-control\", \"tailscale\"];\nconst MANDATORY_MEMORY = 256 + 128 + 64; // convex + mission-control + tailscale\n\ndescribe(\"resolve\", () => {\n\tit(\"returns only mandatory services for empty input\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tfor (const id of MANDATORY_IDS) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t\t// 512 (base) + mandatory services memory\n\t\texpect(result.estimatedMemoryMB).toBe(512 + MANDATORY_MEMORY);\n\t});\n\n\tit(\"resolves a single service alongside mandatory services\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\tfor (const id of MANDATORY_IDS) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds PostgreSQL when n8n is selected\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(result.addedDependencies).toContainEqual(\n\t\t\texpect.objectContaining({ service: \"postgresql\" }),\n\t\t);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds Prometheus when Grafana is selected\", () => {\n\t\tconst result = resolve({ services: [\"grafana\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"detects Redis + Valkey conflict\", () => {\n\t\tconst result = resolve({ services: [\"redis\", \"valkey\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"detects Caddy + Traefik conflict\", () => {\n\t\tconst result = resolve({ services: [\"caddy\", \"traefik\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"expands research-agent skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"research-agent\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"qdrant\");\n\t\texpect(ids).toContain(\"searxng\");\n\t\texpect(ids).toContain(\"browserless\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"expands video-creator skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"video-creator\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"ffmpeg\");\n\t\texpect(ids).toContain(\"remotion\");\n\t\texpect(ids).toContain(\"minio\");\n\t});\n\n\tit(\"expands dev-ops skill pack with transitive deps\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"dev-ops\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t\t// n8n requires postgresql (transitive)\n\t\texpect(ids).toContain(\"postgresql\");\n\t});\n\n\tit(\"reports unknown service IDs\", () => {\n\t\tconst result = resolve({ services: [\"nonexistent\"], skillPacks: [] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_service\" }));\n\t});\n\n\tit(\"reports unknown skill pack IDs\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"nonexistent-pack\"] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_skill_pack\" }));\n\t});\n\n\tit(\"does not duplicate services already selected by user\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\t\tskillPacks: [\"research-agent\"],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst qdrantCount = ids.filter((id) => id === \"qdrant\").length;\n\t\texpect(qdrantCount).toBe(1);\n\t});\n\n\tit(\"estimates memory correctly\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\t// 512 (base) + 128 (redis) + mandatory services\n\t\texpect(result.estimatedMemoryMB).toBe(512 + 128 + MANDATORY_MEMORY);\n\t});\n\n\tit(\"adds proxy service when specified\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], proxy: \"caddy\" });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"caddy\");\n\t});\n\n\tit(\"adds monitoring stack when flag is set\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [], monitoring: true });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"is deterministic - same input gives same output\", () => {\n\t\tconst input = { services: [\"redis\", \"qdrant\", \"n8n\"], skillPacks: [\"research-agent\"] };\n\t\tconst result1 = resolve(input);\n\t\tconst result2 = resolve(input);\n\t\tconst ids1 = result1.services.map((s) => s.definition.id);\n\t\tconst ids2 = result2.services.map((s) => s.definition.id);\n\t\texpect(ids1).toEqual(ids2);\n\t});\n\n\tit(\"topologically sorts dependencies before dependents\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIndex = ids.indexOf(\"postgresql\");\n\t\tconst n8nIndex = ids.indexOf(\"n8n\");\n\t\texpect(pgIndex).toBeLessThan(n8nIndex);\n\t});\n\n\tit(\"warns about GPU when AI services selected without gpu flag\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], gpu: false });\n\t\tconst gpuWarnings = result.warnings.filter((w) => w.type === \"gpu\");\n\t\texpect(gpuWarnings).toHaveLength(0);\n\t});\n\n\tit(\"resolves tailscale (mandatory, always present)\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"tailscale\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves coolify and dokploy as single services\", () => {\n\t\tconst result = resolve({ services: [\"coolify\", \"dokploy\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"coolify\");\n\t\texpect(ids).toContain(\"dokploy\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds postgresql, redis, and livekit when lasuite-meet-backend is selected\", () => {\n\t\tconst result = resolve({ services: [\"lasuite-meet-backend\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"lasuite-meet-backend\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"livekit\");\n\t\texpect(result.addedDependencies.some((a) => a.service === \"postgresql\")).toBe(true);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves La Suite Meet preset (postgresql, redis, livekit, backend, frontend, agents)\", () => {\n\t\tconst lasuiteMeetServices = [\n\t\t\t\"postgresql\",\n\t\t\t\"redis\",\n\t\t\t\"livekit\",\n\t\t\t\"lasuite-meet-backend\",\n\t\t\t\"lasuite-meet-frontend\",\n\t\t\t\"lasuite-meet-agents\",\n\t\t];\n\t\tconst result = resolve({ services: lasuiteMeetServices, skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tfor (const id of lasuiteMeetServices) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"orders lasuite-meet-backend after postgresql, redis, and livekit\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"lasuite-meet-backend\", \"lasuite-meet-frontend\"],\n\t\t\tskillPacks: [],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIdx = ids.indexOf(\"postgresql\");\n\t\tconst redisIdx = ids.indexOf(\"redis\");\n\t\tconst livekitIdx = ids.indexOf(\"livekit\");\n\t\tconst backendIdx = ids.indexOf(\"lasuite-meet-backend\");\n\t\tconst frontendIdx = ids.indexOf(\"lasuite-meet-frontend\");\n\t\texpect(pgIdx).toBeGreaterThanOrEqual(0);\n\t\texpect(backendIdx).toBeGreaterThan(pgIdx);\n\t\texpect(backendIdx).toBeGreaterThan(redisIdx);\n\t\texpect(backendIdx).toBeGreaterThan(livekitIdx);\n\t\texpect(frontendIdx).toBeGreaterThan(backendIdx);\n\t});\n\n\t// ── Mandatory services enforcement ──────────────────────────────────────\n\n\tit(\"auto-includes mandatory services even when not selected\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"mission-control\");\n\t\texpect(ids).toContain(\"convex\");\n\t\texpect(ids).toContain(\"tailscale\");\n\t\tconst mc = result.services.find((s) => s.definition.id === \"mission-control\");\n\t\texpect(mc!.addedBy).toBe(\"mandatory\");\n\t});\n\n\tit(\"marks user-selected mandatory services as 'user' not 'mandatory'\", () => {\n\t\tconst result = resolve({ services: [\"mission-control\"], skillPacks: [] });\n\t\tconst mc = result.services.find((s) => s.definition.id === \"mission-control\");\n\t\texpect(mc!.addedBy).toBe(\"user\");\n\t\t// convex should still be auto-added as dependency of mission-control\n\t\tconst convex = result.services.find((s) => s.definition.id === \"convex\");\n\t\texpect(convex).toBeDefined();\n\t});\n\n\tit(\"orders convex before mission-control (dependency ordering)\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst convexIdx = ids.indexOf(\"convex\");\n\t\tconst mcIdx = ids.indexOf(\"mission-control\");\n\t\texpect(convexIdx).toBeLessThan(mcIdx);\n\t});\n});\n"],"mappings":"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"}
|
package/dist/resolver.test.mjs
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-C_jmO7m2.mjs";
|
|
2
2
|
import { resolve } from "./resolver.mjs";
|
|
3
3
|
//#region src/resolver.test.ts
|
|
4
|
+
const MANDATORY_IDS = [
|
|
5
|
+
"convex",
|
|
6
|
+
"mission-control",
|
|
7
|
+
"tailscale"
|
|
8
|
+
];
|
|
9
|
+
const MANDATORY_MEMORY = 448;
|
|
4
10
|
describe("resolve", () => {
|
|
5
|
-
it("returns
|
|
11
|
+
it("returns only mandatory services for empty input", () => {
|
|
6
12
|
const result = resolve({
|
|
7
13
|
services: [],
|
|
8
14
|
skillPacks: []
|
|
9
15
|
});
|
|
10
|
-
|
|
16
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
17
|
+
for (const id of MANDATORY_IDS) globalExpect(ids).toContain(id);
|
|
11
18
|
globalExpect(result.isValid).toBe(true);
|
|
12
|
-
globalExpect(result.estimatedMemoryMB).toBe(512);
|
|
19
|
+
globalExpect(result.estimatedMemoryMB).toBe(512 + MANDATORY_MEMORY);
|
|
13
20
|
});
|
|
14
|
-
it("resolves a single service
|
|
21
|
+
it("resolves a single service alongside mandatory services", () => {
|
|
15
22
|
const result = resolve({
|
|
16
23
|
services: ["redis"],
|
|
17
24
|
skillPacks: []
|
|
18
25
|
});
|
|
19
|
-
|
|
20
|
-
globalExpect(
|
|
26
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
27
|
+
globalExpect(ids).toContain("redis");
|
|
28
|
+
for (const id of MANDATORY_IDS) globalExpect(ids).toContain(id);
|
|
21
29
|
globalExpect(result.isValid).toBe(true);
|
|
22
30
|
});
|
|
23
31
|
it("auto-adds PostgreSQL when n8n is selected", () => {
|
|
@@ -114,7 +122,7 @@ describe("resolve", () => {
|
|
|
114
122
|
globalExpect(resolve({
|
|
115
123
|
services: ["redis"],
|
|
116
124
|
skillPacks: []
|
|
117
|
-
}).estimatedMemoryMB).toBe(640);
|
|
125
|
+
}).estimatedMemoryMB).toBe(640 + MANDATORY_MEMORY);
|
|
118
126
|
});
|
|
119
127
|
it("adds proxy service when specified", () => {
|
|
120
128
|
globalExpect(resolve({
|
|
@@ -164,13 +172,12 @@ describe("resolve", () => {
|
|
|
164
172
|
gpu: false
|
|
165
173
|
}).warnings.filter((w) => w.type === "gpu")).toHaveLength(0);
|
|
166
174
|
});
|
|
167
|
-
it("resolves tailscale
|
|
175
|
+
it("resolves tailscale (mandatory, always present)", () => {
|
|
168
176
|
const result = resolve({
|
|
169
|
-
services: [
|
|
177
|
+
services: [],
|
|
170
178
|
skillPacks: []
|
|
171
179
|
});
|
|
172
|
-
globalExpect(result.services).
|
|
173
|
-
globalExpect(result.services[0].definition.id).toBe("tailscale");
|
|
180
|
+
globalExpect(result.services.map((s) => s.definition.id)).toContain("tailscale");
|
|
174
181
|
globalExpect(result.isValid).toBe(true);
|
|
175
182
|
});
|
|
176
183
|
it("resolves coolify and dokploy as single services", () => {
|
|
@@ -229,6 +236,34 @@ describe("resolve", () => {
|
|
|
229
236
|
globalExpect(backendIdx).toBeGreaterThan(livekitIdx);
|
|
230
237
|
globalExpect(frontendIdx).toBeGreaterThan(backendIdx);
|
|
231
238
|
});
|
|
239
|
+
it("auto-includes mandatory services even when not selected", () => {
|
|
240
|
+
const result = resolve({
|
|
241
|
+
services: ["redis"],
|
|
242
|
+
skillPacks: []
|
|
243
|
+
});
|
|
244
|
+
const ids = result.services.map((s) => s.definition.id);
|
|
245
|
+
globalExpect(ids).toContain("mission-control");
|
|
246
|
+
globalExpect(ids).toContain("convex");
|
|
247
|
+
globalExpect(ids).toContain("tailscale");
|
|
248
|
+
globalExpect(result.services.find((s) => s.definition.id === "mission-control").addedBy).toBe("mandatory");
|
|
249
|
+
});
|
|
250
|
+
it("marks user-selected mandatory services as 'user' not 'mandatory'", () => {
|
|
251
|
+
const result = resolve({
|
|
252
|
+
services: ["mission-control"],
|
|
253
|
+
skillPacks: []
|
|
254
|
+
});
|
|
255
|
+
globalExpect(result.services.find((s) => s.definition.id === "mission-control").addedBy).toBe("user");
|
|
256
|
+
globalExpect(result.services.find((s) => s.definition.id === "convex")).toBeDefined();
|
|
257
|
+
});
|
|
258
|
+
it("orders convex before mission-control (dependency ordering)", () => {
|
|
259
|
+
const ids = resolve({
|
|
260
|
+
services: ["redis"],
|
|
261
|
+
skillPacks: []
|
|
262
|
+
}).services.map((s) => s.definition.id);
|
|
263
|
+
const convexIdx = ids.indexOf("convex");
|
|
264
|
+
const mcIdx = ids.indexOf("mission-control");
|
|
265
|
+
globalExpect(convexIdx).toBeLessThan(mcIdx);
|
|
266
|
+
});
|
|
232
267
|
});
|
|
233
268
|
//#endregion
|
|
234
269
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.test.mjs","names":["expect"],"sources":["../src/resolver.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { resolve } from \"./resolver.js\";\n\ndescribe(\"resolve\", () => {\n\tit(\"returns empty services for empty input\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [] });\n\t\texpect(result.services).toHaveLength(0);\n\t\texpect(result.isValid).toBe(true);\n\t\texpect(result.estimatedMemoryMB).toBe(512); // base OpenClaw only\n\t});\n\n\tit(\"resolves a single service with no dependencies\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\texpect(result.services).toHaveLength(1);\n\t\texpect(result.services[0]!.definition.id).toBe(\"redis\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds PostgreSQL when n8n is selected\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(result.addedDependencies).toContainEqual(\n\t\t\texpect.objectContaining({ service: \"postgresql\" }),\n\t\t);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds Prometheus when Grafana is selected\", () => {\n\t\tconst result = resolve({ services: [\"grafana\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"detects Redis + Valkey conflict\", () => {\n\t\tconst result = resolve({ services: [\"redis\", \"valkey\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"detects Caddy + Traefik conflict\", () => {\n\t\tconst result = resolve({ services: [\"caddy\", \"traefik\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"expands research-agent skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"research-agent\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"qdrant\");\n\t\texpect(ids).toContain(\"searxng\");\n\t\texpect(ids).toContain(\"browserless\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"expands video-creator skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"video-creator\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"ffmpeg\");\n\t\texpect(ids).toContain(\"remotion\");\n\t\texpect(ids).toContain(\"minio\");\n\t});\n\n\tit(\"expands dev-ops skill pack with transitive deps\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"dev-ops\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t\t// n8n requires postgresql (transitive)\n\t\texpect(ids).toContain(\"postgresql\");\n\t});\n\n\tit(\"reports unknown service IDs\", () => {\n\t\tconst result = resolve({ services: [\"nonexistent\"], skillPacks: [] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_service\" }));\n\t});\n\n\tit(\"reports unknown skill pack IDs\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"nonexistent-pack\"] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_skill_pack\" }));\n\t});\n\n\tit(\"does not duplicate services already selected by user\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\t\tskillPacks: [\"research-agent\"],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst qdrantCount = ids.filter((id) => id === \"qdrant\").length;\n\t\texpect(qdrantCount).toBe(1);\n\t});\n\n\tit(\"estimates memory correctly\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\t// 512 (base) + 128 (redis) = 640\n\t\texpect(result.estimatedMemoryMB).toBe(640);\n\t});\n\n\tit(\"adds proxy service when specified\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], proxy: \"caddy\" });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"caddy\");\n\t});\n\n\tit(\"adds monitoring stack when flag is set\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [], monitoring: true });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"is deterministic - same input gives same output\", () => {\n\t\tconst input = { services: [\"redis\", \"qdrant\", \"n8n\"], skillPacks: [\"research-agent\"] };\n\t\tconst result1 = resolve(input);\n\t\tconst result2 = resolve(input);\n\t\tconst ids1 = result1.services.map((s) => s.definition.id);\n\t\tconst ids2 = result2.services.map((s) => s.definition.id);\n\t\texpect(ids1).toEqual(ids2);\n\t});\n\n\tit(\"topologically sorts dependencies before dependents\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIndex = ids.indexOf(\"postgresql\");\n\t\tconst n8nIndex = ids.indexOf(\"n8n\");\n\t\texpect(pgIndex).toBeLessThan(n8nIndex);\n\t});\n\n\tit(\"warns about GPU when AI services selected without gpu flag\", () => {\n\t\t// Ollama doesn't have gpuRequired=true (it's recommended not required)\n\t\t// but we should still check GPU warning logic works\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], gpu: false });\n\t\t// Redis doesn't need GPU, so no GPU warnings\n\t\tconst gpuWarnings = result.warnings.filter((w) => w.type === \"gpu\");\n\t\texpect(gpuWarnings).toHaveLength(0);\n\t});\n\n\tit(\"resolves tailscale as single service with no dependencies\", () => {\n\t\tconst result = resolve({ services: [\"tailscale\"], skillPacks: [] });\n\t\texpect(result.services).toHaveLength(1);\n\t\texpect(result.services[0]!.definition.id).toBe(\"tailscale\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves coolify and dokploy as single services\", () => {\n\t\tconst result = resolve({ services: [\"coolify\", \"dokploy\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"coolify\");\n\t\texpect(ids).toContain(\"dokploy\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds postgresql, redis, and livekit when lasuite-meet-backend is selected\", () => {\n\t\tconst result = resolve({ services: [\"lasuite-meet-backend\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"lasuite-meet-backend\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"livekit\");\n\t\texpect(result.addedDependencies.some((a) => a.service === \"postgresql\")).toBe(true);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves La Suite Meet preset (postgresql, redis, livekit, backend, frontend, agents)\", () => {\n\t\tconst lasuiteMeetServices = [\n\t\t\t\"postgresql\",\n\t\t\t\"redis\",\n\t\t\t\"livekit\",\n\t\t\t\"lasuite-meet-backend\",\n\t\t\t\"lasuite-meet-frontend\",\n\t\t\t\"lasuite-meet-agents\",\n\t\t];\n\t\tconst result = resolve({ services: lasuiteMeetServices, skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tfor (const id of lasuiteMeetServices) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"orders lasuite-meet-backend after postgresql, redis, and livekit\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"lasuite-meet-backend\", \"lasuite-meet-frontend\"],\n\t\t\tskillPacks: [],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIdx = ids.indexOf(\"postgresql\");\n\t\tconst redisIdx = ids.indexOf(\"redis\");\n\t\tconst livekitIdx = ids.indexOf(\"livekit\");\n\t\tconst backendIdx = ids.indexOf(\"lasuite-meet-backend\");\n\t\tconst frontendIdx = ids.indexOf(\"lasuite-meet-frontend\");\n\t\texpect(pgIdx).toBeGreaterThanOrEqual(0);\n\t\texpect(backendIdx).toBeGreaterThan(pgIdx);\n\t\texpect(backendIdx).toBeGreaterThan(redisIdx);\n\t\texpect(backendIdx).toBeGreaterThan(livekitIdx);\n\t\texpect(frontendIdx).toBeGreaterThan(backendIdx);\n\t});\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolver.test.mjs","names":["expect"],"sources":["../src/resolver.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { resolve } from \"./resolver.js\";\n\n// Mandatory services (convex, mission-control, tailscale) are always auto-included.\n// These IDs and their combined memory are accounted for in all tests.\nconst MANDATORY_IDS = [\"convex\", \"mission-control\", \"tailscale\"];\nconst MANDATORY_MEMORY = 256 + 128 + 64; // convex + mission-control + tailscale\n\ndescribe(\"resolve\", () => {\n\tit(\"returns only mandatory services for empty input\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tfor (const id of MANDATORY_IDS) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t\t// 512 (base) + mandatory services memory\n\t\texpect(result.estimatedMemoryMB).toBe(512 + MANDATORY_MEMORY);\n\t});\n\n\tit(\"resolves a single service alongside mandatory services\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\tfor (const id of MANDATORY_IDS) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds PostgreSQL when n8n is selected\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(result.addedDependencies).toContainEqual(\n\t\t\texpect.objectContaining({ service: \"postgresql\" }),\n\t\t);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds Prometheus when Grafana is selected\", () => {\n\t\tconst result = resolve({ services: [\"grafana\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"detects Redis + Valkey conflict\", () => {\n\t\tconst result = resolve({ services: [\"redis\", \"valkey\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"detects Caddy + Traefik conflict\", () => {\n\t\tconst result = resolve({ services: [\"caddy\", \"traefik\"], skillPacks: [] });\n\t\texpect(result.isValid).toBe(false);\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"conflict\" }));\n\t});\n\n\tit(\"expands research-agent skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"research-agent\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"qdrant\");\n\t\texpect(ids).toContain(\"searxng\");\n\t\texpect(ids).toContain(\"browserless\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"expands video-creator skill pack\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"video-creator\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"ffmpeg\");\n\t\texpect(ids).toContain(\"remotion\");\n\t\texpect(ids).toContain(\"minio\");\n\t});\n\n\tit(\"expands dev-ops skill pack with transitive deps\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"dev-ops\"] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"n8n\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t\t// n8n requires postgresql (transitive)\n\t\texpect(ids).toContain(\"postgresql\");\n\t});\n\n\tit(\"reports unknown service IDs\", () => {\n\t\tconst result = resolve({ services: [\"nonexistent\"], skillPacks: [] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_service\" }));\n\t});\n\n\tit(\"reports unknown skill pack IDs\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [\"nonexistent-pack\"] });\n\t\texpect(result.errors).toContainEqual(expect.objectContaining({ type: \"unknown_skill_pack\" }));\n\t});\n\n\tit(\"does not duplicate services already selected by user\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\t\tskillPacks: [\"research-agent\"],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst qdrantCount = ids.filter((id) => id === \"qdrant\").length;\n\t\texpect(qdrantCount).toBe(1);\n\t});\n\n\tit(\"estimates memory correctly\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\t// 512 (base) + 128 (redis) + mandatory services\n\t\texpect(result.estimatedMemoryMB).toBe(512 + 128 + MANDATORY_MEMORY);\n\t});\n\n\tit(\"adds proxy service when specified\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], proxy: \"caddy\" });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"caddy\");\n\t});\n\n\tit(\"adds monitoring stack when flag is set\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [], monitoring: true });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"uptime-kuma\");\n\t\texpect(ids).toContain(\"grafana\");\n\t\texpect(ids).toContain(\"prometheus\");\n\t});\n\n\tit(\"is deterministic - same input gives same output\", () => {\n\t\tconst input = { services: [\"redis\", \"qdrant\", \"n8n\"], skillPacks: [\"research-agent\"] };\n\t\tconst result1 = resolve(input);\n\t\tconst result2 = resolve(input);\n\t\tconst ids1 = result1.services.map((s) => s.definition.id);\n\t\tconst ids2 = result2.services.map((s) => s.definition.id);\n\t\texpect(ids1).toEqual(ids2);\n\t});\n\n\tit(\"topologically sorts dependencies before dependents\", () => {\n\t\tconst result = resolve({ services: [\"n8n\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIndex = ids.indexOf(\"postgresql\");\n\t\tconst n8nIndex = ids.indexOf(\"n8n\");\n\t\texpect(pgIndex).toBeLessThan(n8nIndex);\n\t});\n\n\tit(\"warns about GPU when AI services selected without gpu flag\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [], gpu: false });\n\t\tconst gpuWarnings = result.warnings.filter((w) => w.type === \"gpu\");\n\t\texpect(gpuWarnings).toHaveLength(0);\n\t});\n\n\tit(\"resolves tailscale (mandatory, always present)\", () => {\n\t\tconst result = resolve({ services: [], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"tailscale\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves coolify and dokploy as single services\", () => {\n\t\tconst result = resolve({ services: [\"coolify\", \"dokploy\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"coolify\");\n\t\texpect(ids).toContain(\"dokploy\");\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"auto-adds postgresql, redis, and livekit when lasuite-meet-backend is selected\", () => {\n\t\tconst result = resolve({ services: [\"lasuite-meet-backend\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"lasuite-meet-backend\");\n\t\texpect(ids).toContain(\"postgresql\");\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(ids).toContain(\"livekit\");\n\t\texpect(result.addedDependencies.some((a) => a.service === \"postgresql\")).toBe(true);\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"resolves La Suite Meet preset (postgresql, redis, livekit, backend, frontend, agents)\", () => {\n\t\tconst lasuiteMeetServices = [\n\t\t\t\"postgresql\",\n\t\t\t\"redis\",\n\t\t\t\"livekit\",\n\t\t\t\"lasuite-meet-backend\",\n\t\t\t\"lasuite-meet-frontend\",\n\t\t\t\"lasuite-meet-agents\",\n\t\t];\n\t\tconst result = resolve({ services: lasuiteMeetServices, skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tfor (const id of lasuiteMeetServices) {\n\t\t\texpect(ids).toContain(id);\n\t\t}\n\t\texpect(result.isValid).toBe(true);\n\t});\n\n\tit(\"orders lasuite-meet-backend after postgresql, redis, and livekit\", () => {\n\t\tconst result = resolve({\n\t\t\tservices: [\"lasuite-meet-backend\", \"lasuite-meet-frontend\"],\n\t\t\tskillPacks: [],\n\t\t});\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst pgIdx = ids.indexOf(\"postgresql\");\n\t\tconst redisIdx = ids.indexOf(\"redis\");\n\t\tconst livekitIdx = ids.indexOf(\"livekit\");\n\t\tconst backendIdx = ids.indexOf(\"lasuite-meet-backend\");\n\t\tconst frontendIdx = ids.indexOf(\"lasuite-meet-frontend\");\n\t\texpect(pgIdx).toBeGreaterThanOrEqual(0);\n\t\texpect(backendIdx).toBeGreaterThan(pgIdx);\n\t\texpect(backendIdx).toBeGreaterThan(redisIdx);\n\t\texpect(backendIdx).toBeGreaterThan(livekitIdx);\n\t\texpect(frontendIdx).toBeGreaterThan(backendIdx);\n\t});\n\n\t// ── Mandatory services enforcement ──────────────────────────────────────\n\n\tit(\"auto-includes mandatory services even when not selected\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\texpect(ids).toContain(\"mission-control\");\n\t\texpect(ids).toContain(\"convex\");\n\t\texpect(ids).toContain(\"tailscale\");\n\t\tconst mc = result.services.find((s) => s.definition.id === \"mission-control\");\n\t\texpect(mc!.addedBy).toBe(\"mandatory\");\n\t});\n\n\tit(\"marks user-selected mandatory services as 'user' not 'mandatory'\", () => {\n\t\tconst result = resolve({ services: [\"mission-control\"], skillPacks: [] });\n\t\tconst mc = result.services.find((s) => s.definition.id === \"mission-control\");\n\t\texpect(mc!.addedBy).toBe(\"user\");\n\t\t// convex should still be auto-added as dependency of mission-control\n\t\tconst convex = result.services.find((s) => s.definition.id === \"convex\");\n\t\texpect(convex).toBeDefined();\n\t});\n\n\tit(\"orders convex before mission-control (dependency ordering)\", () => {\n\t\tconst result = resolve({ services: [\"redis\"], skillPacks: [] });\n\t\tconst ids = result.services.map((s) => s.definition.id);\n\t\tconst convexIdx = ids.indexOf(\"convex\");\n\t\tconst mcIdx = ids.indexOf(\"mission-control\");\n\t\texpect(convexIdx).toBeLessThan(mcIdx);\n\t});\n});\n"],"mappings":"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"}
|
|
@@ -33,6 +33,11 @@ declare const ServiceCategorySchema: z.ZodEnum<{
|
|
|
33
33
|
collaboration: "collaboration";
|
|
34
34
|
"ai-observability": "ai-observability";
|
|
35
35
|
"fine-tuning": "fine-tuning";
|
|
36
|
+
"project-management": "project-management";
|
|
37
|
+
"business-intelligence": "business-intelligence";
|
|
38
|
+
"dns-networking": "dns-networking";
|
|
39
|
+
iot: "iot";
|
|
40
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
36
41
|
}>;
|
|
37
42
|
declare const MaturitySchema: z.ZodEnum<{
|
|
38
43
|
stable: "stable";
|
|
@@ -179,6 +184,18 @@ declare const NativeRecipeSchema: z.ZodObject<{
|
|
|
179
184
|
configTemplate: z.ZodOptional<z.ZodString>;
|
|
180
185
|
systemdUnit: z.ZodOptional<z.ZodString>;
|
|
181
186
|
}, z.core.$strip>;
|
|
187
|
+
declare const GitSourceSchema: z.ZodObject<{
|
|
188
|
+
repoUrl: z.ZodString;
|
|
189
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
190
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
191
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
192
|
+
}, z.core.$strip>;
|
|
193
|
+
declare const BuildContextSchema: z.ZodObject<{
|
|
194
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
195
|
+
context: z.ZodDefault<z.ZodString>;
|
|
196
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
197
|
+
target: z.ZodOptional<z.ZodString>;
|
|
198
|
+
}, z.core.$strip>;
|
|
182
199
|
declare const ServiceDefinitionSchema: z.ZodObject<{
|
|
183
200
|
id: z.ZodString;
|
|
184
201
|
name: z.ZodString;
|
|
@@ -215,10 +232,27 @@ declare const ServiceDefinitionSchema: z.ZodObject<{
|
|
|
215
232
|
collaboration: "collaboration";
|
|
216
233
|
"ai-observability": "ai-observability";
|
|
217
234
|
"fine-tuning": "fine-tuning";
|
|
235
|
+
"project-management": "project-management";
|
|
236
|
+
"business-intelligence": "business-intelligence";
|
|
237
|
+
"dns-networking": "dns-networking";
|
|
238
|
+
iot: "iot";
|
|
239
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
218
240
|
}>;
|
|
219
241
|
icon: z.ZodString;
|
|
220
|
-
image: z.ZodString
|
|
221
|
-
imageTag: z.ZodString
|
|
242
|
+
image: z.ZodOptional<z.ZodString>;
|
|
243
|
+
imageTag: z.ZodOptional<z.ZodString>;
|
|
244
|
+
gitSource: z.ZodOptional<z.ZodObject<{
|
|
245
|
+
repoUrl: z.ZodString;
|
|
246
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
247
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
248
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
249
|
+
}, z.core.$strip>>;
|
|
250
|
+
buildContext: z.ZodOptional<z.ZodObject<{
|
|
251
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
252
|
+
context: z.ZodDefault<z.ZodString>;
|
|
253
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
254
|
+
target: z.ZodOptional<z.ZodString>;
|
|
255
|
+
}, z.core.$strip>>;
|
|
222
256
|
ports: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
223
257
|
host: z.ZodNumber;
|
|
224
258
|
container: z.ZodNumber;
|
|
@@ -451,10 +485,27 @@ declare const ResolvedServiceSchema: z.ZodObject<{
|
|
|
451
485
|
collaboration: "collaboration";
|
|
452
486
|
"ai-observability": "ai-observability";
|
|
453
487
|
"fine-tuning": "fine-tuning";
|
|
488
|
+
"project-management": "project-management";
|
|
489
|
+
"business-intelligence": "business-intelligence";
|
|
490
|
+
"dns-networking": "dns-networking";
|
|
491
|
+
iot: "iot";
|
|
492
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
454
493
|
}>;
|
|
455
494
|
icon: z.ZodString;
|
|
456
|
-
image: z.ZodString
|
|
457
|
-
imageTag: z.ZodString
|
|
495
|
+
image: z.ZodOptional<z.ZodString>;
|
|
496
|
+
imageTag: z.ZodOptional<z.ZodString>;
|
|
497
|
+
gitSource: z.ZodOptional<z.ZodObject<{
|
|
498
|
+
repoUrl: z.ZodString;
|
|
499
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
500
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
501
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
502
|
+
}, z.core.$strip>>;
|
|
503
|
+
buildContext: z.ZodOptional<z.ZodObject<{
|
|
504
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
505
|
+
context: z.ZodDefault<z.ZodString>;
|
|
506
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
507
|
+
target: z.ZodOptional<z.ZodString>;
|
|
508
|
+
}, z.core.$strip>>;
|
|
458
509
|
ports: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
459
510
|
host: z.ZodNumber;
|
|
460
511
|
container: z.ZodNumber;
|
|
@@ -564,6 +615,7 @@ declare const ResolvedServiceSchema: z.ZodObject<{
|
|
|
564
615
|
addedBy: z.ZodDefault<z.ZodEnum<{
|
|
565
616
|
proxy: "proxy";
|
|
566
617
|
monitoring: "monitoring";
|
|
618
|
+
mandatory: "mandatory";
|
|
567
619
|
user: "user";
|
|
568
620
|
dependency: "dependency";
|
|
569
621
|
"skill-pack": "skill-pack";
|
|
@@ -621,10 +673,27 @@ declare const ResolverOutputSchema: z.ZodObject<{
|
|
|
621
673
|
collaboration: "collaboration";
|
|
622
674
|
"ai-observability": "ai-observability";
|
|
623
675
|
"fine-tuning": "fine-tuning";
|
|
676
|
+
"project-management": "project-management";
|
|
677
|
+
"business-intelligence": "business-intelligence";
|
|
678
|
+
"dns-networking": "dns-networking";
|
|
679
|
+
iot: "iot";
|
|
680
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
624
681
|
}>;
|
|
625
682
|
icon: z.ZodString;
|
|
626
|
-
image: z.ZodString
|
|
627
|
-
imageTag: z.ZodString
|
|
683
|
+
image: z.ZodOptional<z.ZodString>;
|
|
684
|
+
imageTag: z.ZodOptional<z.ZodString>;
|
|
685
|
+
gitSource: z.ZodOptional<z.ZodObject<{
|
|
686
|
+
repoUrl: z.ZodString;
|
|
687
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
688
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
689
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
690
|
+
}, z.core.$strip>>;
|
|
691
|
+
buildContext: z.ZodOptional<z.ZodObject<{
|
|
692
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
693
|
+
context: z.ZodDefault<z.ZodString>;
|
|
694
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
695
|
+
target: z.ZodOptional<z.ZodString>;
|
|
696
|
+
}, z.core.$strip>>;
|
|
628
697
|
ports: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
629
698
|
host: z.ZodNumber;
|
|
630
699
|
container: z.ZodNumber;
|
|
@@ -734,6 +803,7 @@ declare const ResolverOutputSchema: z.ZodObject<{
|
|
|
734
803
|
addedBy: z.ZodDefault<z.ZodEnum<{
|
|
735
804
|
proxy: "proxy";
|
|
736
805
|
monitoring: "monitoring";
|
|
806
|
+
mandatory: "mandatory";
|
|
737
807
|
user: "user";
|
|
738
808
|
dependency: "dependency";
|
|
739
809
|
"skill-pack": "skill-pack";
|
|
@@ -894,5 +964,5 @@ declare const ApiErrorSchema: z.ZodObject<{
|
|
|
894
964
|
}, z.core.$strip>;
|
|
895
965
|
}, z.core.$strip>;
|
|
896
966
|
//#endregion
|
|
897
|
-
export {
|
|
898
|
-
//# sourceMappingURL=schema-
|
|
967
|
+
export { RestartPolicySchema as A, PlatformSchema as C, ResolvedServiceSchema as D, ProxyTypeSchema as E, ValidateRequestSchema as F, ValidateResponseSchema as I, VolumeMappingSchema as L, ServiceDefinitionSchema as M, SkillBindingSchema as N, ResolverOutputSchema as O, SkillPackSchema as P, WarningSchema as R, OutputFormatSchema as S, PresetSchema as T, MaturitySchema as _, ComposeOptionsSchema as a, OpenclawImageVariantSchema as b, DeployTargetSchema as c, EnvVariableSchema as d, ErrorSchema as f, HealthCheckSchema as g, GsdRuntimeSchema as h, BuildContextSchema as i, ServiceCategorySchema as j, ResourceLimitsSchema as k, DeploymentTargetSchema as l, GitSourceSchema as m, AiProviderSchema as n, ComposePlatformSchema as o, GenerationInputSchema as p, ApiErrorSchema as r, DeploySchema as s, AddedDependencySchema as t, DeploymentTypeSchema as u, NativePlatformSchema as v, PortMappingSchema as w, OpenclawInstallMethodSchema as x, NativeRecipeSchema as y };
|
|
968
|
+
//# sourceMappingURL=schema-eX44HhRp.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-eX44HhRp.d.mts","names":[],"sources":["../src/schema.ts"],"mappings":";;;cAIa,qBAAA,EAAqB,CAAA,CAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCrB,cAAA,EAAc,CAAA,CAAA,OAAA;;;;;cAEd,cAAA,EAAc,CAAA,CAAA,OAAA;;;;;;;;cASd,qBAAA,EAAqB,CAAA,CAAA,OAAA;;;;cAErB,oBAAA,EAAoB,CAAA,CAAA,OAAA;;;;;cAEpB,mBAAA,EAAmB,CAAA,CAAA,OAAA;;;;;;cAEnB,eAAA,EAAe,CAAA,CAAA,OAAA;;;;;cAEf,sBAAA,EAAsB,CAAA,CAAA,OAAA;;;;;;cAEtB,kBAAA,EAAkB,CAAA,CAAA,OAAA;;;;;cAElB,0BAAA,EAA0B,CAAA,CAAA,OAAA;;;;;cAE1B,2BAAA,EAA2B,CAAA,CAAA,OAAA;;;;cAE3B,kBAAA,EAAkB,CAAA,CAAA,OAAA;;;;cAElB,gBAAA,EAAgB,CAAA,CAAA,OAAA;;;;;;;;;;;;;;;cAgBhB,gBAAA,EAAgB,CAAA,CAAA,OAAA;;;;;;cAIhB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;cAOjB,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;;;;cAOnB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;;;cASjB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;;cAQjB,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;cAKpB,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;;;;;;cASZ,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;;;;cAOlB,oBAAA,EAAoB,CAAA,CAAA,OAAA;;;;;cAEpB,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;;;;;;;;;;;cAYlB,eAAA,EAAe,CAAA,CAAA,SAAA;;;;;;cAWf,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;;;;cAalB,uBAAA,EAAuB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4DvB,eAAA,EAAe,CAAA,CAAA,SAAA;;;;;;;;;cAef,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;;cAcZ,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoCrB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKrB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;cAOrB,aAAA,EAAa,CAAA,CAAA,SAAA;;;;cAKb,WAAA,EAAW,CAAA,CAAA,SAAA;;;;cAKX,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAcpB,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyBpB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAWrB,sBAAA,EAAsB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;cAStB,cAAA,EAAc,CAAA,CAAA,SAAA"}
|
|
@@ -33,6 +33,11 @@ declare const ServiceCategorySchema: z.ZodEnum<{
|
|
|
33
33
|
collaboration: "collaboration";
|
|
34
34
|
"ai-observability": "ai-observability";
|
|
35
35
|
"fine-tuning": "fine-tuning";
|
|
36
|
+
"project-management": "project-management";
|
|
37
|
+
"business-intelligence": "business-intelligence";
|
|
38
|
+
"dns-networking": "dns-networking";
|
|
39
|
+
iot: "iot";
|
|
40
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
36
41
|
}>;
|
|
37
42
|
declare const MaturitySchema: z.ZodEnum<{
|
|
38
43
|
stable: "stable";
|
|
@@ -179,6 +184,18 @@ declare const NativeRecipeSchema: z.ZodObject<{
|
|
|
179
184
|
configTemplate: z.ZodOptional<z.ZodString>;
|
|
180
185
|
systemdUnit: z.ZodOptional<z.ZodString>;
|
|
181
186
|
}, z.core.$strip>;
|
|
187
|
+
declare const GitSourceSchema: z.ZodObject<{
|
|
188
|
+
repoUrl: z.ZodString;
|
|
189
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
190
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
191
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
192
|
+
}, z.core.$strip>;
|
|
193
|
+
declare const BuildContextSchema: z.ZodObject<{
|
|
194
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
195
|
+
context: z.ZodDefault<z.ZodString>;
|
|
196
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
197
|
+
target: z.ZodOptional<z.ZodString>;
|
|
198
|
+
}, z.core.$strip>;
|
|
182
199
|
declare const ServiceDefinitionSchema: z.ZodObject<{
|
|
183
200
|
id: z.ZodString;
|
|
184
201
|
name: z.ZodString;
|
|
@@ -215,10 +232,27 @@ declare const ServiceDefinitionSchema: z.ZodObject<{
|
|
|
215
232
|
collaboration: "collaboration";
|
|
216
233
|
"ai-observability": "ai-observability";
|
|
217
234
|
"fine-tuning": "fine-tuning";
|
|
235
|
+
"project-management": "project-management";
|
|
236
|
+
"business-intelligence": "business-intelligence";
|
|
237
|
+
"dns-networking": "dns-networking";
|
|
238
|
+
iot: "iot";
|
|
239
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
218
240
|
}>;
|
|
219
241
|
icon: z.ZodString;
|
|
220
|
-
image: z.ZodString
|
|
221
|
-
imageTag: z.ZodString
|
|
242
|
+
image: z.ZodOptional<z.ZodString>;
|
|
243
|
+
imageTag: z.ZodOptional<z.ZodString>;
|
|
244
|
+
gitSource: z.ZodOptional<z.ZodObject<{
|
|
245
|
+
repoUrl: z.ZodString;
|
|
246
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
247
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
248
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
249
|
+
}, z.core.$strip>>;
|
|
250
|
+
buildContext: z.ZodOptional<z.ZodObject<{
|
|
251
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
252
|
+
context: z.ZodDefault<z.ZodString>;
|
|
253
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
254
|
+
target: z.ZodOptional<z.ZodString>;
|
|
255
|
+
}, z.core.$strip>>;
|
|
222
256
|
ports: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
223
257
|
host: z.ZodNumber;
|
|
224
258
|
container: z.ZodNumber;
|
|
@@ -451,10 +485,27 @@ declare const ResolvedServiceSchema: z.ZodObject<{
|
|
|
451
485
|
collaboration: "collaboration";
|
|
452
486
|
"ai-observability": "ai-observability";
|
|
453
487
|
"fine-tuning": "fine-tuning";
|
|
488
|
+
"project-management": "project-management";
|
|
489
|
+
"business-intelligence": "business-intelligence";
|
|
490
|
+
"dns-networking": "dns-networking";
|
|
491
|
+
iot: "iot";
|
|
492
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
454
493
|
}>;
|
|
455
494
|
icon: z.ZodString;
|
|
456
|
-
image: z.ZodString
|
|
457
|
-
imageTag: z.ZodString
|
|
495
|
+
image: z.ZodOptional<z.ZodString>;
|
|
496
|
+
imageTag: z.ZodOptional<z.ZodString>;
|
|
497
|
+
gitSource: z.ZodOptional<z.ZodObject<{
|
|
498
|
+
repoUrl: z.ZodString;
|
|
499
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
500
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
501
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
502
|
+
}, z.core.$strip>>;
|
|
503
|
+
buildContext: z.ZodOptional<z.ZodObject<{
|
|
504
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
505
|
+
context: z.ZodDefault<z.ZodString>;
|
|
506
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
507
|
+
target: z.ZodOptional<z.ZodString>;
|
|
508
|
+
}, z.core.$strip>>;
|
|
458
509
|
ports: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
459
510
|
host: z.ZodNumber;
|
|
460
511
|
container: z.ZodNumber;
|
|
@@ -564,6 +615,7 @@ declare const ResolvedServiceSchema: z.ZodObject<{
|
|
|
564
615
|
addedBy: z.ZodDefault<z.ZodEnum<{
|
|
565
616
|
proxy: "proxy";
|
|
566
617
|
monitoring: "monitoring";
|
|
618
|
+
mandatory: "mandatory";
|
|
567
619
|
user: "user";
|
|
568
620
|
dependency: "dependency";
|
|
569
621
|
"skill-pack": "skill-pack";
|
|
@@ -621,10 +673,27 @@ declare const ResolverOutputSchema: z.ZodObject<{
|
|
|
621
673
|
collaboration: "collaboration";
|
|
622
674
|
"ai-observability": "ai-observability";
|
|
623
675
|
"fine-tuning": "fine-tuning";
|
|
676
|
+
"project-management": "project-management";
|
|
677
|
+
"business-intelligence": "business-intelligence";
|
|
678
|
+
"dns-networking": "dns-networking";
|
|
679
|
+
iot: "iot";
|
|
680
|
+
"saas-boilerplate": "saas-boilerplate";
|
|
624
681
|
}>;
|
|
625
682
|
icon: z.ZodString;
|
|
626
|
-
image: z.ZodString
|
|
627
|
-
imageTag: z.ZodString
|
|
683
|
+
image: z.ZodOptional<z.ZodString>;
|
|
684
|
+
imageTag: z.ZodOptional<z.ZodString>;
|
|
685
|
+
gitSource: z.ZodOptional<z.ZodObject<{
|
|
686
|
+
repoUrl: z.ZodString;
|
|
687
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
688
|
+
subdirectory: z.ZodOptional<z.ZodString>;
|
|
689
|
+
postCloneCommands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
690
|
+
}, z.core.$strip>>;
|
|
691
|
+
buildContext: z.ZodOptional<z.ZodObject<{
|
|
692
|
+
dockerfile: z.ZodOptional<z.ZodString>;
|
|
693
|
+
context: z.ZodDefault<z.ZodString>;
|
|
694
|
+
args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
695
|
+
target: z.ZodOptional<z.ZodString>;
|
|
696
|
+
}, z.core.$strip>>;
|
|
628
697
|
ports: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
629
698
|
host: z.ZodNumber;
|
|
630
699
|
container: z.ZodNumber;
|
|
@@ -734,6 +803,7 @@ declare const ResolverOutputSchema: z.ZodObject<{
|
|
|
734
803
|
addedBy: z.ZodDefault<z.ZodEnum<{
|
|
735
804
|
proxy: "proxy";
|
|
736
805
|
monitoring: "monitoring";
|
|
806
|
+
mandatory: "mandatory";
|
|
737
807
|
user: "user";
|
|
738
808
|
dependency: "dependency";
|
|
739
809
|
"skill-pack": "skill-pack";
|
|
@@ -894,5 +964,5 @@ declare const ApiErrorSchema: z.ZodObject<{
|
|
|
894
964
|
}, z.core.$strip>;
|
|
895
965
|
}, z.core.$strip>;
|
|
896
966
|
//#endregion
|
|
897
|
-
export {
|
|
898
|
-
//# sourceMappingURL=schema-
|
|
967
|
+
export { RestartPolicySchema as A, PlatformSchema as C, ResolvedServiceSchema as D, ProxyTypeSchema as E, ValidateRequestSchema as F, ValidateResponseSchema as I, VolumeMappingSchema as L, ServiceDefinitionSchema as M, SkillBindingSchema as N, ResolverOutputSchema as O, SkillPackSchema as P, WarningSchema as R, OutputFormatSchema as S, PresetSchema as T, MaturitySchema as _, ComposeOptionsSchema as a, OpenclawImageVariantSchema as b, DeployTargetSchema as c, EnvVariableSchema as d, ErrorSchema as f, HealthCheckSchema as g, GsdRuntimeSchema as h, BuildContextSchema as i, ServiceCategorySchema as j, ResourceLimitsSchema as k, DeploymentTargetSchema as l, GitSourceSchema as m, AiProviderSchema as n, ComposePlatformSchema as o, GenerationInputSchema as p, ApiErrorSchema as r, DeploySchema as s, AddedDependencySchema as t, DeploymentTypeSchema as u, NativePlatformSchema as v, PortMappingSchema as w, OpenclawInstallMethodSchema as x, NativeRecipeSchema as y };
|
|
968
|
+
//# sourceMappingURL=schema-tn5RK8CM.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-tn5RK8CM.d.cts","names":[],"sources":["../src/schema.ts"],"mappings":"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"}
|
package/dist/schema.cjs
CHANGED
|
@@ -33,7 +33,12 @@ const ServiceCategorySchema = zod.z.enum([
|
|
|
33
33
|
"ecommerce",
|
|
34
34
|
"collaboration",
|
|
35
35
|
"ai-observability",
|
|
36
|
-
"fine-tuning"
|
|
36
|
+
"fine-tuning",
|
|
37
|
+
"project-management",
|
|
38
|
+
"business-intelligence",
|
|
39
|
+
"dns-networking",
|
|
40
|
+
"iot",
|
|
41
|
+
"saas-boilerplate"
|
|
37
42
|
]);
|
|
38
43
|
const MaturitySchema = zod.z.enum([
|
|
39
44
|
"stable",
|
|
@@ -159,14 +164,28 @@ const NativeRecipeSchema = zod.z.object({
|
|
|
159
164
|
configTemplate: zod.z.string().optional(),
|
|
160
165
|
systemdUnit: zod.z.string().optional()
|
|
161
166
|
});
|
|
167
|
+
const GitSourceSchema = zod.z.object({
|
|
168
|
+
repoUrl: zod.z.string().url(),
|
|
169
|
+
branch: zod.z.string().optional(),
|
|
170
|
+
subdirectory: zod.z.string().optional(),
|
|
171
|
+
postCloneCommands: zod.z.array(zod.z.string()).default([])
|
|
172
|
+
});
|
|
173
|
+
const BuildContextSchema = zod.z.object({
|
|
174
|
+
dockerfile: zod.z.string().optional(),
|
|
175
|
+
context: zod.z.string().default("."),
|
|
176
|
+
args: zod.z.record(zod.z.string(), zod.z.string()).optional(),
|
|
177
|
+
target: zod.z.string().optional()
|
|
178
|
+
});
|
|
162
179
|
const ServiceDefinitionSchema = zod.z.object({
|
|
163
180
|
id: zod.z.string().min(1).regex(/^[a-z0-9-]+$/),
|
|
164
181
|
name: zod.z.string().min(1),
|
|
165
182
|
description: zod.z.string(),
|
|
166
183
|
category: ServiceCategorySchema,
|
|
167
184
|
icon: zod.z.string(),
|
|
168
|
-
image: zod.z.string().min(1),
|
|
169
|
-
imageTag: zod.z.string().min(1),
|
|
185
|
+
image: zod.z.string().min(1).optional(),
|
|
186
|
+
imageTag: zod.z.string().min(1).optional(),
|
|
187
|
+
gitSource: GitSourceSchema.optional(),
|
|
188
|
+
buildContext: BuildContextSchema.optional(),
|
|
170
189
|
ports: zod.z.array(PortMappingSchema).default([]),
|
|
171
190
|
volumes: zod.z.array(VolumeMappingSchema).default([]),
|
|
172
191
|
environment: zod.z.array(EnvVariableSchema).default([]),
|
|
@@ -244,7 +263,8 @@ const ResolvedServiceSchema = zod.z.object({
|
|
|
244
263
|
"dependency",
|
|
245
264
|
"skill-pack",
|
|
246
265
|
"proxy",
|
|
247
|
-
"monitoring"
|
|
266
|
+
"monitoring",
|
|
267
|
+
"mandatory"
|
|
248
268
|
]).default("user")
|
|
249
269
|
});
|
|
250
270
|
const AddedDependencySchema = zod.z.object({
|
|
@@ -327,6 +347,7 @@ const ApiErrorSchema = zod.z.object({ error: zod.z.object({
|
|
|
327
347
|
exports.AddedDependencySchema = AddedDependencySchema;
|
|
328
348
|
exports.AiProviderSchema = AiProviderSchema;
|
|
329
349
|
exports.ApiErrorSchema = ApiErrorSchema;
|
|
350
|
+
exports.BuildContextSchema = BuildContextSchema;
|
|
330
351
|
exports.ComposeOptionsSchema = ComposeOptionsSchema;
|
|
331
352
|
exports.ComposePlatformSchema = ComposePlatformSchema;
|
|
332
353
|
exports.DeploySchema = DeploySchema;
|
|
@@ -336,6 +357,7 @@ exports.DeploymentTypeSchema = DeploymentTypeSchema;
|
|
|
336
357
|
exports.EnvVariableSchema = EnvVariableSchema;
|
|
337
358
|
exports.ErrorSchema = ErrorSchema;
|
|
338
359
|
exports.GenerationInputSchema = GenerationInputSchema;
|
|
360
|
+
exports.GitSourceSchema = GitSourceSchema;
|
|
339
361
|
exports.GsdRuntimeSchema = GsdRuntimeSchema;
|
|
340
362
|
exports.HealthCheckSchema = HealthCheckSchema;
|
|
341
363
|
exports.MaturitySchema = MaturitySchema;
|