@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zulip.cjs","names":[],"sources":["../../../src/services/definitions/zulip.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const zulipDefinition: ServiceDefinition = {\n\tid: \"zulip\",\n\tname: \"Zulip\",\n\tdescription:\n\t\t\"Threaded team chat combining the immediacy of real-time chat with email's topic-based threading for async collaboration.\",\n\tcategory: \"communication\",\n\ticon: \"💬\",\n\n\timage: \"zulip/docker-zulip\",\n\timageTag: \"9.4-0\",\n\tports: [\n\t\t{\n\t\t\thost: 8380,\n\t\t\tcontainer: 443,\n\t\t\tdescription: \"Zulip HTTPS\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"zulip-data\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Zulip persistent data and uploads\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"SETTING_EXTERNAL_HOST\",\n\t\t\tdefaultValue: \"localhost\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"External hostname for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SETTING_ZULIP_ADMINISTRATOR\",\n\t\t\tdefaultValue: \"admin@example.com\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Email address of the Zulip administrator\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SECRETS_secret_key\",\n\t\t\tdefaultValue: \"${ZULIP_SECRET_KEY}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Secret key for Zulip session signing and encryption\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SECRETS_email_password\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Email password for Zulip outbound email\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"DISABLE_HTTPS\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Disable HTTPS when running behind a reverse proxy\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_HOST\",\n\t\t\tdefaultValue: \"postgresql\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"PostgreSQL hostname for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_USER\",\n\t\t\tdefaultValue: \"zulip\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"PostgreSQL user for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_NAME\",\n\t\t\tdefaultValue: \"zulip\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"PostgreSQL database name for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SETTING_MEMCACHED_LOCATION\",\n\t\t\tdefaultValue: \"redis:11211\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Memcached-compatible cache location (Redis)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:80 || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 5,\n\t\tstartPeriod: \"120s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://zulip.readthedocs.io/en/latest/production/install.html\",\n\ttags: [\"team-chat\", \"threaded\", \"async\", \"slack-alternative\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"postgresql\", \"redis\"],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\n\tgpuRequired: false,\n};\n"],"mappings":";;AAEA,MAAa,kBAAqC;CACjD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAa;EAAY;EAAS;EAAoB;CAC7D,UAAU;CAEV,UAAU,CAAC,cAAc,QAAQ;CACjC,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zulip.d.cts","names":[],"sources":["../../../src/services/definitions/zulip.ts"],"mappings":";;;cAEa,eAAA,EAAiB,iBAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zulip.d.mts","names":[],"sources":["../../../src/services/definitions/zulip.ts"],"mappings":";;;cAEa,eAAA,EAAiB,iBAAA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
//#region src/services/definitions/zulip.ts
|
|
2
|
+
const zulipDefinition = {
|
|
3
|
+
id: "zulip",
|
|
4
|
+
name: "Zulip",
|
|
5
|
+
description: "Threaded team chat combining the immediacy of real-time chat with email's topic-based threading for async collaboration.",
|
|
6
|
+
category: "communication",
|
|
7
|
+
icon: "💬",
|
|
8
|
+
image: "zulip/docker-zulip",
|
|
9
|
+
imageTag: "9.4-0",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 8380,
|
|
12
|
+
container: 443,
|
|
13
|
+
description: "Zulip HTTPS",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "zulip-data",
|
|
18
|
+
containerPath: "/data",
|
|
19
|
+
description: "Zulip persistent data and uploads"
|
|
20
|
+
}],
|
|
21
|
+
environment: [
|
|
22
|
+
{
|
|
23
|
+
key: "SETTING_EXTERNAL_HOST",
|
|
24
|
+
defaultValue: "localhost",
|
|
25
|
+
secret: false,
|
|
26
|
+
description: "External hostname for Zulip",
|
|
27
|
+
required: true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
key: "SETTING_ZULIP_ADMINISTRATOR",
|
|
31
|
+
defaultValue: "admin@example.com",
|
|
32
|
+
secret: false,
|
|
33
|
+
description: "Email address of the Zulip administrator",
|
|
34
|
+
required: true
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
key: "SECRETS_secret_key",
|
|
38
|
+
defaultValue: "${ZULIP_SECRET_KEY}",
|
|
39
|
+
secret: true,
|
|
40
|
+
description: "Secret key for Zulip session signing and encryption",
|
|
41
|
+
required: true
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: "SECRETS_email_password",
|
|
45
|
+
defaultValue: "",
|
|
46
|
+
secret: true,
|
|
47
|
+
description: "Email password for Zulip outbound email",
|
|
48
|
+
required: false
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: "DISABLE_HTTPS",
|
|
52
|
+
defaultValue: "true",
|
|
53
|
+
secret: false,
|
|
54
|
+
description: "Disable HTTPS when running behind a reverse proxy",
|
|
55
|
+
required: false
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
key: "DB_HOST",
|
|
59
|
+
defaultValue: "postgresql",
|
|
60
|
+
secret: false,
|
|
61
|
+
description: "PostgreSQL hostname for Zulip",
|
|
62
|
+
required: true
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
key: "DB_USER",
|
|
66
|
+
defaultValue: "zulip",
|
|
67
|
+
secret: false,
|
|
68
|
+
description: "PostgreSQL user for Zulip",
|
|
69
|
+
required: true
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
key: "DB_NAME",
|
|
73
|
+
defaultValue: "zulip",
|
|
74
|
+
secret: false,
|
|
75
|
+
description: "PostgreSQL database name for Zulip",
|
|
76
|
+
required: true
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
key: "SETTING_MEMCACHED_LOCATION",
|
|
80
|
+
defaultValue: "redis:11211",
|
|
81
|
+
secret: false,
|
|
82
|
+
description: "Memcached-compatible cache location (Redis)",
|
|
83
|
+
required: true
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
healthcheck: {
|
|
87
|
+
test: "curl -sf http://localhost:80 || exit 1",
|
|
88
|
+
interval: "30s",
|
|
89
|
+
timeout: "10s",
|
|
90
|
+
retries: 5,
|
|
91
|
+
startPeriod: "120s"
|
|
92
|
+
},
|
|
93
|
+
dependsOn: [],
|
|
94
|
+
restartPolicy: "unless-stopped",
|
|
95
|
+
networks: ["openclaw-network"],
|
|
96
|
+
skills: [],
|
|
97
|
+
openclawEnvVars: [],
|
|
98
|
+
docsUrl: "https://zulip.readthedocs.io/en/latest/production/install.html",
|
|
99
|
+
tags: [
|
|
100
|
+
"team-chat",
|
|
101
|
+
"threaded",
|
|
102
|
+
"async",
|
|
103
|
+
"slack-alternative"
|
|
104
|
+
],
|
|
105
|
+
maturity: "stable",
|
|
106
|
+
requires: ["postgresql", "redis"],
|
|
107
|
+
recommends: [],
|
|
108
|
+
conflictsWith: [],
|
|
109
|
+
minMemoryMB: 1024,
|
|
110
|
+
gpuRequired: false
|
|
111
|
+
};
|
|
112
|
+
//#endregion
|
|
113
|
+
export { zulipDefinition };
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=zulip.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zulip.mjs","names":[],"sources":["../../../src/services/definitions/zulip.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const zulipDefinition: ServiceDefinition = {\n\tid: \"zulip\",\n\tname: \"Zulip\",\n\tdescription:\n\t\t\"Threaded team chat combining the immediacy of real-time chat with email's topic-based threading for async collaboration.\",\n\tcategory: \"communication\",\n\ticon: \"💬\",\n\n\timage: \"zulip/docker-zulip\",\n\timageTag: \"9.4-0\",\n\tports: [\n\t\t{\n\t\t\thost: 8380,\n\t\t\tcontainer: 443,\n\t\t\tdescription: \"Zulip HTTPS\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"zulip-data\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Zulip persistent data and uploads\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"SETTING_EXTERNAL_HOST\",\n\t\t\tdefaultValue: \"localhost\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"External hostname for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SETTING_ZULIP_ADMINISTRATOR\",\n\t\t\tdefaultValue: \"admin@example.com\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Email address of the Zulip administrator\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SECRETS_secret_key\",\n\t\t\tdefaultValue: \"${ZULIP_SECRET_KEY}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Secret key for Zulip session signing and encryption\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SECRETS_email_password\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Email password for Zulip outbound email\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"DISABLE_HTTPS\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Disable HTTPS when running behind a reverse proxy\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_HOST\",\n\t\t\tdefaultValue: \"postgresql\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"PostgreSQL hostname for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_USER\",\n\t\t\tdefaultValue: \"zulip\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"PostgreSQL user for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"DB_NAME\",\n\t\t\tdefaultValue: \"zulip\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"PostgreSQL database name for Zulip\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SETTING_MEMCACHED_LOCATION\",\n\t\t\tdefaultValue: \"redis:11211\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Memcached-compatible cache location (Redis)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:80 || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 5,\n\t\tstartPeriod: \"120s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://zulip.readthedocs.io/en/latest/production/install.html\",\n\ttags: [\"team-chat\", \"threaded\", \"async\", \"slack-alternative\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"postgresql\", \"redis\"],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,kBAAqC;CACjD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAa;EAAY;EAAS;EAAoB;CAC7D,UAAU;CAEV,UAAU,CAAC,cAAc,QAAQ;CACjC,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -4,6 +4,9 @@ const require_services_definitions_index = require("./definitions/index.cjs");
|
|
|
4
4
|
const registryMap = /* @__PURE__ */ new Map();
|
|
5
5
|
for (const def of require_services_definitions_index.allServiceDefinitions) {
|
|
6
6
|
if (registryMap.has(def.id)) throw new Error(`Duplicate service definition ID: "${def.id}". Each service must have a unique ID.`);
|
|
7
|
+
const hasImage = def.image && def.imageTag;
|
|
8
|
+
const hasGitSource = def.gitSource && def.buildContext;
|
|
9
|
+
if (!hasImage && !hasGitSource) throw new Error(`Service "${def.id}" must specify either image+imageTag or gitSource+buildContext.`);
|
|
7
10
|
registryMap.set(def.id, def);
|
|
8
11
|
}
|
|
9
12
|
/** Readonly map of all registered services indexed by ID */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.cjs","names":["allServiceDefinitions"],"sources":["../../src/services/registry.ts"],"sourcesContent":["import type { ServiceCategory, ServiceDefinition } from \"../types.js\";\nimport { allServiceDefinitions } from \"./definitions/index.js\";\n\n// Build the registry map and validate no duplicates\nconst registryMap = new Map<string, ServiceDefinition>();\n\nfor (const def of allServiceDefinitions) {\n\tif (registryMap.has(def.id)) {\n\t\tthrow new Error(\n\t\t\t`Duplicate service definition ID: \"${def.id}\". Each service must have a unique ID.`,\n\t\t);\n\t}\n\tregistryMap.set(def.id, def);\n}\n\n/** Readonly map of all registered services indexed by ID */\nexport const serviceRegistry: ReadonlyMap<string, ServiceDefinition> = registryMap;\n\n/** Look up a service by its unique ID */\nexport function getServiceById(id: string): ServiceDefinition | undefined {\n\treturn registryMap.get(id);\n}\n\n/** Get all services in a given category */\nexport function getServicesByCategory(category: ServiceCategory): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.category === category);\n}\n\n/** Get all registered services */\nexport function getAllServices(): ServiceDefinition[] {\n\treturn [...allServiceDefinitions];\n}\n\n/** Get services matching a specific tag */\nexport function getServicesByTag(tag: string): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.tags.includes(tag));\n}\n"],"mappings":";;;AAIA,MAAM,8BAAc,IAAI,KAAgC;AAExD,KAAK,MAAM,OAAOA,mCAAAA,uBAAuB;AACxC,KAAI,YAAY,IAAI,IAAI,GAAG,CAC1B,OAAM,IAAI,MACT,qCAAqC,IAAI,GAAG,wCAC5C;AAEF,aAAY,IAAI,IAAI,IAAI,IAAI;;;AAI7B,MAAa,kBAA0D;;AAGvE,SAAgB,eAAe,IAA2C;AACzE,QAAO,YAAY,IAAI,GAAG;;;AAI3B,SAAgB,sBAAsB,UAAgD;AACrF,QAAOA,mCAAAA,sBAAsB,QAAQ,MAAM,EAAE,aAAa,SAAS;;;AAIpE,SAAgB,iBAAsC;AACrD,QAAO,CAAC,GAAGA,mCAAAA,sBAAsB;;;AAIlC,SAAgB,iBAAiB,KAAkC;AAClE,QAAOA,mCAAAA,sBAAsB,QAAQ,MAAM,EAAE,KAAK,SAAS,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.cjs","names":["allServiceDefinitions"],"sources":["../../src/services/registry.ts"],"sourcesContent":["import type { ServiceCategory, ServiceDefinition } from \"../types.js\";\nimport { allServiceDefinitions } from \"./definitions/index.js\";\n\n// Build the registry map and validate no duplicates\nconst registryMap = new Map<string, ServiceDefinition>();\n\nfor (const def of allServiceDefinitions) {\n\tif (registryMap.has(def.id)) {\n\t\tthrow new Error(\n\t\t\t`Duplicate service definition ID: \"${def.id}\". Each service must have a unique ID.`,\n\t\t);\n\t}\n\tconst hasImage = def.image && def.imageTag;\n\tconst hasGitSource = def.gitSource && def.buildContext;\n\tif (!hasImage && !hasGitSource) {\n\t\tthrow new Error(\n\t\t\t`Service \"${def.id}\" must specify either image+imageTag or gitSource+buildContext.`,\n\t\t);\n\t}\n\tregistryMap.set(def.id, def);\n}\n\n/** Readonly map of all registered services indexed by ID */\nexport const serviceRegistry: ReadonlyMap<string, ServiceDefinition> = registryMap;\n\n/** Look up a service by its unique ID */\nexport function getServiceById(id: string): ServiceDefinition | undefined {\n\treturn registryMap.get(id);\n}\n\n/** Get all services in a given category */\nexport function getServicesByCategory(category: ServiceCategory): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.category === category);\n}\n\n/** Get all registered services */\nexport function getAllServices(): ServiceDefinition[] {\n\treturn [...allServiceDefinitions];\n}\n\n/** Get services matching a specific tag */\nexport function getServicesByTag(tag: string): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.tags.includes(tag));\n}\n"],"mappings":";;;AAIA,MAAM,8BAAc,IAAI,KAAgC;AAExD,KAAK,MAAM,OAAOA,mCAAAA,uBAAuB;AACxC,KAAI,YAAY,IAAI,IAAI,GAAG,CAC1B,OAAM,IAAI,MACT,qCAAqC,IAAI,GAAG,wCAC5C;CAEF,MAAM,WAAW,IAAI,SAAS,IAAI;CAClC,MAAM,eAAe,IAAI,aAAa,IAAI;AAC1C,KAAI,CAAC,YAAY,CAAC,aACjB,OAAM,IAAI,MACT,YAAY,IAAI,GAAG,iEACnB;AAEF,aAAY,IAAI,IAAI,IAAI,IAAI;;;AAI7B,MAAa,kBAA0D;;AAGvE,SAAgB,eAAe,IAA2C;AACzE,QAAO,YAAY,IAAI,GAAG;;;AAI3B,SAAgB,sBAAsB,UAAgD;AACrF,QAAOA,mCAAAA,sBAAsB,QAAQ,MAAM,EAAE,aAAa,SAAS;;;AAIpE,SAAgB,iBAAsC;AACrD,QAAO,CAAC,GAAGA,mCAAAA,sBAAsB;;;AAIlC,SAAgB,iBAAiB,KAAkC;AAClE,QAAOA,mCAAAA,sBAAsB,QAAQ,MAAM,EAAE,KAAK,SAAS,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.cts","names":[],"sources":["../../src/services/registry.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"registry.d.cts","names":[],"sources":["../../src/services/registry.ts"],"mappings":";;;;cAuBa,eAAA,EAAiB,WAAA,SAAoB,iBAAA;AAAlD;AAAA,iBAGgB,cAAA,CAAe,EAAA,WAAa,iBAAA;;iBAK5B,qBAAA,CAAsB,QAAA,EAAU,eAAA,GAAkB,iBAAA;;iBAKlD,cAAA,CAAA,GAAkB,iBAAA;;iBAKlB,gBAAA,CAAiB,GAAA,WAAc,iBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/services/registry.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/services/registry.ts"],"mappings":";;;;cAuBa,eAAA,EAAiB,WAAA,SAAoB,iBAAA;;iBAGlC,cAAA,CAAe,EAAA,WAAa,iBAAA;;iBAK5B,qBAAA,CAAsB,QAAA,EAAU,eAAA,GAAkB,iBAAA;;iBAKlD,cAAA,CAAA,GAAkB,iBAAA;AAVlC;AAAA,iBAegB,gBAAA,CAAiB,GAAA,WAAc,iBAAA"}
|
|
@@ -3,6 +3,9 @@ import { allServiceDefinitions } from "./definitions/index.mjs";
|
|
|
3
3
|
const registryMap = /* @__PURE__ */ new Map();
|
|
4
4
|
for (const def of allServiceDefinitions) {
|
|
5
5
|
if (registryMap.has(def.id)) throw new Error(`Duplicate service definition ID: "${def.id}". Each service must have a unique ID.`);
|
|
6
|
+
const hasImage = def.image && def.imageTag;
|
|
7
|
+
const hasGitSource = def.gitSource && def.buildContext;
|
|
8
|
+
if (!hasImage && !hasGitSource) throw new Error(`Service "${def.id}" must specify either image+imageTag or gitSource+buildContext.`);
|
|
6
9
|
registryMap.set(def.id, def);
|
|
7
10
|
}
|
|
8
11
|
/** Readonly map of all registered services indexed by ID */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.mjs","names":[],"sources":["../../src/services/registry.ts"],"sourcesContent":["import type { ServiceCategory, ServiceDefinition } from \"../types.js\";\nimport { allServiceDefinitions } from \"./definitions/index.js\";\n\n// Build the registry map and validate no duplicates\nconst registryMap = new Map<string, ServiceDefinition>();\n\nfor (const def of allServiceDefinitions) {\n\tif (registryMap.has(def.id)) {\n\t\tthrow new Error(\n\t\t\t`Duplicate service definition ID: \"${def.id}\". Each service must have a unique ID.`,\n\t\t);\n\t}\n\tregistryMap.set(def.id, def);\n}\n\n/** Readonly map of all registered services indexed by ID */\nexport const serviceRegistry: ReadonlyMap<string, ServiceDefinition> = registryMap;\n\n/** Look up a service by its unique ID */\nexport function getServiceById(id: string): ServiceDefinition | undefined {\n\treturn registryMap.get(id);\n}\n\n/** Get all services in a given category */\nexport function getServicesByCategory(category: ServiceCategory): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.category === category);\n}\n\n/** Get all registered services */\nexport function getAllServices(): ServiceDefinition[] {\n\treturn [...allServiceDefinitions];\n}\n\n/** Get services matching a specific tag */\nexport function getServicesByTag(tag: string): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.tags.includes(tag));\n}\n"],"mappings":";;AAIA,MAAM,8BAAc,IAAI,KAAgC;AAExD,KAAK,MAAM,OAAO,uBAAuB;AACxC,KAAI,YAAY,IAAI,IAAI,GAAG,CAC1B,OAAM,IAAI,MACT,qCAAqC,IAAI,GAAG,wCAC5C;AAEF,aAAY,IAAI,IAAI,IAAI,IAAI;;;AAI7B,MAAa,kBAA0D;;AAGvE,SAAgB,eAAe,IAA2C;AACzE,QAAO,YAAY,IAAI,GAAG;;;AAI3B,SAAgB,sBAAsB,UAAgD;AACrF,QAAO,sBAAsB,QAAQ,MAAM,EAAE,aAAa,SAAS;;;AAIpE,SAAgB,iBAAsC;AACrD,QAAO,CAAC,GAAG,sBAAsB;;;AAIlC,SAAgB,iBAAiB,KAAkC;AAClE,QAAO,sBAAsB,QAAQ,MAAM,EAAE,KAAK,SAAS,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.mjs","names":[],"sources":["../../src/services/registry.ts"],"sourcesContent":["import type { ServiceCategory, ServiceDefinition } from \"../types.js\";\nimport { allServiceDefinitions } from \"./definitions/index.js\";\n\n// Build the registry map and validate no duplicates\nconst registryMap = new Map<string, ServiceDefinition>();\n\nfor (const def of allServiceDefinitions) {\n\tif (registryMap.has(def.id)) {\n\t\tthrow new Error(\n\t\t\t`Duplicate service definition ID: \"${def.id}\". Each service must have a unique ID.`,\n\t\t);\n\t}\n\tconst hasImage = def.image && def.imageTag;\n\tconst hasGitSource = def.gitSource && def.buildContext;\n\tif (!hasImage && !hasGitSource) {\n\t\tthrow new Error(\n\t\t\t`Service \"${def.id}\" must specify either image+imageTag or gitSource+buildContext.`,\n\t\t);\n\t}\n\tregistryMap.set(def.id, def);\n}\n\n/** Readonly map of all registered services indexed by ID */\nexport const serviceRegistry: ReadonlyMap<string, ServiceDefinition> = registryMap;\n\n/** Look up a service by its unique ID */\nexport function getServiceById(id: string): ServiceDefinition | undefined {\n\treturn registryMap.get(id);\n}\n\n/** Get all services in a given category */\nexport function getServicesByCategory(category: ServiceCategory): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.category === category);\n}\n\n/** Get all registered services */\nexport function getAllServices(): ServiceDefinition[] {\n\treturn [...allServiceDefinitions];\n}\n\n/** Get services matching a specific tag */\nexport function getServicesByTag(tag: string): ServiceDefinition[] {\n\treturn allServiceDefinitions.filter((s) => s.tags.includes(tag));\n}\n"],"mappings":";;AAIA,MAAM,8BAAc,IAAI,KAAgC;AAExD,KAAK,MAAM,OAAO,uBAAuB;AACxC,KAAI,YAAY,IAAI,IAAI,GAAG,CAC1B,OAAM,IAAI,MACT,qCAAqC,IAAI,GAAG,wCAC5C;CAEF,MAAM,WAAW,IAAI,SAAS,IAAI;CAClC,MAAM,eAAe,IAAI,aAAa,IAAI;AAC1C,KAAI,CAAC,YAAY,CAAC,aACjB,OAAM,IAAI,MACT,YAAY,IAAI,GAAG,iEACnB;AAEF,aAAY,IAAI,IAAI,IAAI,IAAI;;;AAI7B,MAAa,kBAA0D;;AAGvE,SAAgB,eAAe,IAA2C;AACzE,QAAO,YAAY,IAAI,GAAG;;;AAI3B,SAAgB,sBAAsB,UAAgD;AACrF,QAAO,sBAAsB,QAAQ,MAAM,EAAE,aAAa,SAAS;;;AAIpE,SAAgB,iBAAsC;AACrD,QAAO,CAAC,GAAG,sBAAsB;;;AAIlC,SAAgB,iBAAiB,KAAkC;AAClE,QAAO,sBAAsB,QAAQ,MAAM,EAAE,KAAK,SAAS,IAAI,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_vi_2VT5v0um = require("../vi.2VT5v0um-
|
|
1
|
+
const require_vi_2VT5v0um = require("../vi.2VT5v0um-iVBt6Fyq.cjs");
|
|
2
2
|
const require_services_registry = require("./registry.cjs");
|
|
3
3
|
//#region src/services/registry.test.ts
|
|
4
4
|
require_vi_2VT5v0um.describe("service registry", () => {
|
|
@@ -20,6 +20,13 @@ require_vi_2VT5v0um.describe("service registry", () => {
|
|
|
20
20
|
require_vi_2VT5v0um.globalExpect(tailscale.id).toBe("tailscale");
|
|
21
21
|
require_vi_2VT5v0um.globalExpect(tailscale.mandatory).toBe(true);
|
|
22
22
|
});
|
|
23
|
+
require_vi_2VT5v0um.it("finds mission-control and it is mandatory with gitSource", () => {
|
|
24
|
+
const mc = require_services_registry.getServiceById("mission-control");
|
|
25
|
+
require_vi_2VT5v0um.globalExpect(mc).toBeDefined();
|
|
26
|
+
require_vi_2VT5v0um.globalExpect(mc.mandatory).toBe(true);
|
|
27
|
+
require_vi_2VT5v0um.globalExpect(mc.gitSource).toBeDefined();
|
|
28
|
+
require_vi_2VT5v0um.globalExpect(mc.gitSource.repoUrl).toContain("better-openclaw-mission-control");
|
|
29
|
+
});
|
|
23
30
|
require_vi_2VT5v0um.it("finds coolify, dokploy, livekit, and La Suite Meet services by ID", () => {
|
|
24
31
|
require_vi_2VT5v0um.globalExpect(require_services_registry.getServiceById("coolify")).toBeDefined();
|
|
25
32
|
require_vi_2VT5v0um.globalExpect(require_services_registry.getServiceById("dokploy")).toBeDefined();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.test.cjs","names":["describe","getAllServices","getServiceById","getServicesByCategory","getServicesByTag"],"sources":["../../src/services/registry.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tgetAllServices,\n\tgetServiceById,\n\tgetServicesByCategory,\n\tgetServicesByTag,\n} from \"../services/registry.js\";\n\ndescribe(\"service registry\", () => {\n\tit(\"has at least 60 services registered\", () => {\n\t\tconst services = getAllServices();\n\t\texpect(services.length).toBeGreaterThanOrEqual(60);\n\t});\n\n\tit(\"finds redis by ID\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.id).toBe(\"redis\");\n\t\texpect(redis!.name).toBe(\"Redis\");\n\t});\n\n\tit(\"returns undefined for unknown ID\", () => {\n\t\tconst result = getServiceById(\"nonexistent\");\n\t\texpect(result).toBeUndefined();\n\t});\n\n\tit(\"finds tailscale and it is mandatory\", () => {\n\t\tconst tailscale = getServiceById(\"tailscale\");\n\t\texpect(tailscale).toBeDefined();\n\t\texpect(tailscale!.id).toBe(\"tailscale\");\n\t\texpect(tailscale!.mandatory).toBe(true);\n\t});\n\n\tit(\"finds coolify, dokploy, livekit, and La Suite Meet services by ID\", () => {\n\t\texpect(getServiceById(\"coolify\")).toBeDefined();\n\t\texpect(getServiceById(\"dokploy\")).toBeDefined();\n\t\texpect(getServiceById(\"livekit\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-backend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-frontend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-agents\")).toBeDefined();\n\t});\n\n\tit(\"filters by category\", () => {\n\t\tconst databases = getServicesByCategory(\"database\");\n\t\tconst ids = databases.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(databases.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"filters by tag\", () => {\n\t\tconst cacheServices = getServicesByTag(\"cache\");\n\t\tconst ids = cacheServices.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(cacheServices.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"all service IDs are unique\", () => {\n\t\tconst services = getAllServices();\n\t\tconst ids = services.map((s) => s.id);\n\t\tconst uniqueIds = new Set(ids);\n\t\texpect(uniqueIds.size).toBe(ids.length);\n\t});\n\n\tit(\"no two services have the same exposed host port\", () => {\n\t\tconst services = getAllServices();\n\t\tconst portMap = new Map<number, string[]>();\n\n\t\tfor (const svc of services) {\n\t\t\tfor (const port of svc.ports) {\n\t\t\t\tif (!port.exposed) continue;\n\t\t\t\tconst existing = portMap.get(port.host) ?? [];\n\t\t\t\texisting.push(svc.id);\n\t\t\t\tportMap.set(port.host, existing);\n\t\t\t}\n\t\t}\n\n\t\t// Informational: log any shared ports but don't hard-fail,\n\t\t// since users may not enable all services simultaneously.\n\t\tconst conflicts: string[] = [];\n\t\tfor (const [port, serviceIds] of portMap) {\n\t\t\tif (serviceIds.length > 1) {\n\t\t\t\tconflicts.push(`Port ${port} shared by: ${serviceIds.join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\t// This is informational — warn if there are conflicts but still pass.\n\t\t// If you want to enforce unique ports, change the next line to:\n\t\t// expect(conflicts).toHaveLength(0);\n\t\tif (conflicts.length > 0) {\n\t\t\tconsole.warn(\n\t\t\t\t`[informational] ${conflicts.length} port overlap(s) detected:\\n ${conflicts.join(\"\\n \")}`,\n\t\t\t);\n\t\t}\n\n\t\t// At minimum, verify we checked something\n\t\texpect(portMap.size).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":";;;AAQAA,oBAAAA,SAAS,0BAA0B;AAClC,qBAAA,GAAG,6CAA6C;AAE/C,sBAAA,aADiBC,0BAAAA,gBAAgB,CACjB,OAAO,CAAC,uBAAuB,GAAG;GACjD;AAEF,qBAAA,GAAG,2BAA2B;EAC7B,MAAM,QAAQC,0BAAAA,eAAe,QAAQ;AACrC,sBAAA,aAAO,MAAM,CAAC,aAAa;AAC3B,sBAAA,aAAO,MAAO,GAAG,CAAC,KAAK,QAAQ;AAC/B,sBAAA,aAAO,MAAO,KAAK,CAAC,KAAK,QAAQ;GAChC;AAEF,qBAAA,GAAG,0CAA0C;AAE5C,sBAAA,aADeA,0BAAAA,eAAe,cAAc,CAC9B,CAAC,eAAe;GAC7B;AAEF,qBAAA,GAAG,6CAA6C;EAC/C,MAAM,YAAYA,0BAAAA,eAAe,YAAY;AAC7C,sBAAA,aAAO,UAAU,CAAC,aAAa;AAC/B,sBAAA,aAAO,UAAW,GAAG,CAAC,KAAK,YAAY;AACvC,sBAAA,aAAO,UAAW,UAAU,CAAC,KAAK,KAAK;GACtC;AAEF,qBAAA,GAAG,2EAA2E;AAC7E,sBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,sBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,sBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,sBAAA,aAAOA,0BAAAA,eAAe,uBAAuB,CAAC,CAAC,aAAa;AAC5D,sBAAA,aAAOA,0BAAAA,eAAe,wBAAwB,CAAC,CAAC,aAAa;AAC7D,sBAAA,aAAOA,0BAAAA,eAAe,sBAAsB,CAAC,CAAC,aAAa;GAC1D;AAEF,qBAAA,GAAG,6BAA6B;EAC/B,MAAM,YAAYC,0BAAAA,sBAAsB,WAAW;AAEnD,sBAAA,aADY,UAAU,KAAK,MAAM,EAAE,GAAG,CAC3B,CAAC,UAAU,QAAQ;AAC9B,sBAAA,aAAO,UAAU,OAAO,CAAC,uBAAuB,EAAE;GACjD;AAEF,qBAAA,GAAG,wBAAwB;EAC1B,MAAM,gBAAgBC,0BAAAA,iBAAiB,QAAQ;AAE/C,sBAAA,aADY,cAAc,KAAK,MAAM,EAAE,GAAG,CAC/B,CAAC,UAAU,QAAQ;AAC9B,sBAAA,aAAO,cAAc,OAAO,CAAC,uBAAuB,EAAE;GACrD;AAEF,qBAAA,GAAG,oCAAoC;EAEtC,MAAM,MADWH,0BAAAA,gBAAgB,CACZ,KAAK,MAAM,EAAE,GAAG;AAErC,sBAAA,aADkB,IAAI,IAAI,IAAI,CACb,KAAK,CAAC,KAAK,IAAI,OAAO;GACtC;AAEF,qBAAA,GAAG,yDAAyD;EAC3D,MAAM,WAAWA,0BAAAA,gBAAgB;EACjC,MAAM,0BAAU,IAAI,KAAuB;AAE3C,OAAK,MAAM,OAAO,SACjB,MAAK,MAAM,QAAQ,IAAI,OAAO;AAC7B,OAAI,CAAC,KAAK,QAAS;GACnB,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC7C,YAAS,KAAK,IAAI,GAAG;AACrB,WAAQ,IAAI,KAAK,MAAM,SAAS;;EAMlC,MAAM,YAAsB,EAAE;AAC9B,OAAK,MAAM,CAAC,MAAM,eAAe,QAChC,KAAI,WAAW,SAAS,EACvB,WAAU,KAAK,QAAQ,KAAK,cAAc,WAAW,KAAK,KAAK,GAAG;AAOpE,MAAI,UAAU,SAAS,EACtB,SAAQ,KACP,mBAAmB,UAAU,OAAO,gCAAgC,UAAU,KAAK,OAAO,GAC1F;AAIF,sBAAA,aAAO,QAAQ,KAAK,CAAC,gBAAgB,EAAE;GACtC;EACD"}
|
|
1
|
+
{"version":3,"file":"registry.test.cjs","names":["describe","getAllServices","getServiceById","getServicesByCategory","getServicesByTag"],"sources":["../../src/services/registry.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tgetAllServices,\n\tgetServiceById,\n\tgetServicesByCategory,\n\tgetServicesByTag,\n} from \"../services/registry.js\";\n\ndescribe(\"service registry\", () => {\n\tit(\"has at least 60 services registered\", () => {\n\t\tconst services = getAllServices();\n\t\texpect(services.length).toBeGreaterThanOrEqual(60);\n\t});\n\n\tit(\"finds redis by ID\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.id).toBe(\"redis\");\n\t\texpect(redis!.name).toBe(\"Redis\");\n\t});\n\n\tit(\"returns undefined for unknown ID\", () => {\n\t\tconst result = getServiceById(\"nonexistent\");\n\t\texpect(result).toBeUndefined();\n\t});\n\n\tit(\"finds tailscale and it is mandatory\", () => {\n\t\tconst tailscale = getServiceById(\"tailscale\");\n\t\texpect(tailscale).toBeDefined();\n\t\texpect(tailscale!.id).toBe(\"tailscale\");\n\t\texpect(tailscale!.mandatory).toBe(true);\n\t});\n\n\tit(\"finds mission-control and it is mandatory with gitSource\", () => {\n\t\tconst mc = getServiceById(\"mission-control\");\n\t\texpect(mc).toBeDefined();\n\t\texpect(mc!.mandatory).toBe(true);\n\t\texpect(mc!.gitSource).toBeDefined();\n\t\texpect(mc!.gitSource!.repoUrl).toContain(\"better-openclaw-mission-control\");\n\t});\n\n\tit(\"finds coolify, dokploy, livekit, and La Suite Meet services by ID\", () => {\n\t\texpect(getServiceById(\"coolify\")).toBeDefined();\n\t\texpect(getServiceById(\"dokploy\")).toBeDefined();\n\t\texpect(getServiceById(\"livekit\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-backend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-frontend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-agents\")).toBeDefined();\n\t});\n\n\tit(\"filters by category\", () => {\n\t\tconst databases = getServicesByCategory(\"database\");\n\t\tconst ids = databases.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(databases.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"filters by tag\", () => {\n\t\tconst cacheServices = getServicesByTag(\"cache\");\n\t\tconst ids = cacheServices.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(cacheServices.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"all service IDs are unique\", () => {\n\t\tconst services = getAllServices();\n\t\tconst ids = services.map((s) => s.id);\n\t\tconst uniqueIds = new Set(ids);\n\t\texpect(uniqueIds.size).toBe(ids.length);\n\t});\n\n\tit(\"no two services have the same exposed host port\", () => {\n\t\tconst services = getAllServices();\n\t\tconst portMap = new Map<number, string[]>();\n\n\t\tfor (const svc of services) {\n\t\t\tfor (const port of svc.ports) {\n\t\t\t\tif (!port.exposed) continue;\n\t\t\t\tconst existing = portMap.get(port.host) ?? [];\n\t\t\t\texisting.push(svc.id);\n\t\t\t\tportMap.set(port.host, existing);\n\t\t\t}\n\t\t}\n\n\t\t// Informational: log any shared ports but don't hard-fail,\n\t\t// since users may not enable all services simultaneously.\n\t\tconst conflicts: string[] = [];\n\t\tfor (const [port, serviceIds] of portMap) {\n\t\t\tif (serviceIds.length > 1) {\n\t\t\t\tconflicts.push(`Port ${port} shared by: ${serviceIds.join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\t// This is informational — warn if there are conflicts but still pass.\n\t\t// If you want to enforce unique ports, change the next line to:\n\t\t// expect(conflicts).toHaveLength(0);\n\t\tif (conflicts.length > 0) {\n\t\t\tconsole.warn(\n\t\t\t\t`[informational] ${conflicts.length} port overlap(s) detected:\\n ${conflicts.join(\"\\n \")}`,\n\t\t\t);\n\t\t}\n\n\t\t// At minimum, verify we checked something\n\t\texpect(portMap.size).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":";;;AAQAA,oBAAAA,SAAS,0BAA0B;AAClC,qBAAA,GAAG,6CAA6C;AAE/C,sBAAA,aADiBC,0BAAAA,gBAAgB,CACjB,OAAO,CAAC,uBAAuB,GAAG;GACjD;AAEF,qBAAA,GAAG,2BAA2B;EAC7B,MAAM,QAAQC,0BAAAA,eAAe,QAAQ;AACrC,sBAAA,aAAO,MAAM,CAAC,aAAa;AAC3B,sBAAA,aAAO,MAAO,GAAG,CAAC,KAAK,QAAQ;AAC/B,sBAAA,aAAO,MAAO,KAAK,CAAC,KAAK,QAAQ;GAChC;AAEF,qBAAA,GAAG,0CAA0C;AAE5C,sBAAA,aADeA,0BAAAA,eAAe,cAAc,CAC9B,CAAC,eAAe;GAC7B;AAEF,qBAAA,GAAG,6CAA6C;EAC/C,MAAM,YAAYA,0BAAAA,eAAe,YAAY;AAC7C,sBAAA,aAAO,UAAU,CAAC,aAAa;AAC/B,sBAAA,aAAO,UAAW,GAAG,CAAC,KAAK,YAAY;AACvC,sBAAA,aAAO,UAAW,UAAU,CAAC,KAAK,KAAK;GACtC;AAEF,qBAAA,GAAG,kEAAkE;EACpE,MAAM,KAAKA,0BAAAA,eAAe,kBAAkB;AAC5C,sBAAA,aAAO,GAAG,CAAC,aAAa;AACxB,sBAAA,aAAO,GAAI,UAAU,CAAC,KAAK,KAAK;AAChC,sBAAA,aAAO,GAAI,UAAU,CAAC,aAAa;AACnC,sBAAA,aAAO,GAAI,UAAW,QAAQ,CAAC,UAAU,kCAAkC;GAC1E;AAEF,qBAAA,GAAG,2EAA2E;AAC7E,sBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,sBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,sBAAA,aAAOA,0BAAAA,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,sBAAA,aAAOA,0BAAAA,eAAe,uBAAuB,CAAC,CAAC,aAAa;AAC5D,sBAAA,aAAOA,0BAAAA,eAAe,wBAAwB,CAAC,CAAC,aAAa;AAC7D,sBAAA,aAAOA,0BAAAA,eAAe,sBAAsB,CAAC,CAAC,aAAa;GAC1D;AAEF,qBAAA,GAAG,6BAA6B;EAC/B,MAAM,YAAYC,0BAAAA,sBAAsB,WAAW;AAEnD,sBAAA,aADY,UAAU,KAAK,MAAM,EAAE,GAAG,CAC3B,CAAC,UAAU,QAAQ;AAC9B,sBAAA,aAAO,UAAU,OAAO,CAAC,uBAAuB,EAAE;GACjD;AAEF,qBAAA,GAAG,wBAAwB;EAC1B,MAAM,gBAAgBC,0BAAAA,iBAAiB,QAAQ;AAE/C,sBAAA,aADY,cAAc,KAAK,MAAM,EAAE,GAAG,CAC/B,CAAC,UAAU,QAAQ;AAC9B,sBAAA,aAAO,cAAc,OAAO,CAAC,uBAAuB,EAAE;GACrD;AAEF,qBAAA,GAAG,oCAAoC;EAEtC,MAAM,MADWH,0BAAAA,gBAAgB,CACZ,KAAK,MAAM,EAAE,GAAG;AAErC,sBAAA,aADkB,IAAI,IAAI,IAAI,CACb,KAAK,CAAC,KAAK,IAAI,OAAO;GACtC;AAEF,qBAAA,GAAG,yDAAyD;EAC3D,MAAM,WAAWA,0BAAAA,gBAAgB;EACjC,MAAM,0BAAU,IAAI,KAAuB;AAE3C,OAAK,MAAM,OAAO,SACjB,MAAK,MAAM,QAAQ,IAAI,OAAO;AAC7B,OAAI,CAAC,KAAK,QAAS;GACnB,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC7C,YAAS,KAAK,IAAI,GAAG;AACrB,WAAQ,IAAI,KAAK,MAAM,SAAS;;EAMlC,MAAM,YAAsB,EAAE;AAC9B,OAAK,MAAM,CAAC,MAAM,eAAe,QAChC,KAAI,WAAW,SAAS,EACvB,WAAU,KAAK,QAAQ,KAAK,cAAc,WAAW,KAAK,KAAK,GAAG;AAOpE,MAAI,UAAU,SAAS,EACtB,SAAQ,KACP,mBAAmB,UAAU,OAAO,gCAAgC,UAAU,KAAK,OAAO,GAC1F;AAIF,sBAAA,aAAO,QAAQ,KAAK,CAAC,gBAAgB,EAAE;GACtC;EACD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
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 { getAllServices, getServiceById, getServicesByCategory, getServicesByTag } from "./registry.mjs";
|
|
3
3
|
//#region src/services/registry.test.ts
|
|
4
4
|
describe("service registry", () => {
|
|
@@ -20,6 +20,13 @@ describe("service registry", () => {
|
|
|
20
20
|
globalExpect(tailscale.id).toBe("tailscale");
|
|
21
21
|
globalExpect(tailscale.mandatory).toBe(true);
|
|
22
22
|
});
|
|
23
|
+
it("finds mission-control and it is mandatory with gitSource", () => {
|
|
24
|
+
const mc = getServiceById("mission-control");
|
|
25
|
+
globalExpect(mc).toBeDefined();
|
|
26
|
+
globalExpect(mc.mandatory).toBe(true);
|
|
27
|
+
globalExpect(mc.gitSource).toBeDefined();
|
|
28
|
+
globalExpect(mc.gitSource.repoUrl).toContain("better-openclaw-mission-control");
|
|
29
|
+
});
|
|
23
30
|
it("finds coolify, dokploy, livekit, and La Suite Meet services by ID", () => {
|
|
24
31
|
globalExpect(getServiceById("coolify")).toBeDefined();
|
|
25
32
|
globalExpect(getServiceById("dokploy")).toBeDefined();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.test.mjs","names":[],"sources":["../../src/services/registry.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tgetAllServices,\n\tgetServiceById,\n\tgetServicesByCategory,\n\tgetServicesByTag,\n} from \"../services/registry.js\";\n\ndescribe(\"service registry\", () => {\n\tit(\"has at least 60 services registered\", () => {\n\t\tconst services = getAllServices();\n\t\texpect(services.length).toBeGreaterThanOrEqual(60);\n\t});\n\n\tit(\"finds redis by ID\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.id).toBe(\"redis\");\n\t\texpect(redis!.name).toBe(\"Redis\");\n\t});\n\n\tit(\"returns undefined for unknown ID\", () => {\n\t\tconst result = getServiceById(\"nonexistent\");\n\t\texpect(result).toBeUndefined();\n\t});\n\n\tit(\"finds tailscale and it is mandatory\", () => {\n\t\tconst tailscale = getServiceById(\"tailscale\");\n\t\texpect(tailscale).toBeDefined();\n\t\texpect(tailscale!.id).toBe(\"tailscale\");\n\t\texpect(tailscale!.mandatory).toBe(true);\n\t});\n\n\tit(\"finds coolify, dokploy, livekit, and La Suite Meet services by ID\", () => {\n\t\texpect(getServiceById(\"coolify\")).toBeDefined();\n\t\texpect(getServiceById(\"dokploy\")).toBeDefined();\n\t\texpect(getServiceById(\"livekit\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-backend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-frontend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-agents\")).toBeDefined();\n\t});\n\n\tit(\"filters by category\", () => {\n\t\tconst databases = getServicesByCategory(\"database\");\n\t\tconst ids = databases.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(databases.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"filters by tag\", () => {\n\t\tconst cacheServices = getServicesByTag(\"cache\");\n\t\tconst ids = cacheServices.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(cacheServices.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"all service IDs are unique\", () => {\n\t\tconst services = getAllServices();\n\t\tconst ids = services.map((s) => s.id);\n\t\tconst uniqueIds = new Set(ids);\n\t\texpect(uniqueIds.size).toBe(ids.length);\n\t});\n\n\tit(\"no two services have the same exposed host port\", () => {\n\t\tconst services = getAllServices();\n\t\tconst portMap = new Map<number, string[]>();\n\n\t\tfor (const svc of services) {\n\t\t\tfor (const port of svc.ports) {\n\t\t\t\tif (!port.exposed) continue;\n\t\t\t\tconst existing = portMap.get(port.host) ?? [];\n\t\t\t\texisting.push(svc.id);\n\t\t\t\tportMap.set(port.host, existing);\n\t\t\t}\n\t\t}\n\n\t\t// Informational: log any shared ports but don't hard-fail,\n\t\t// since users may not enable all services simultaneously.\n\t\tconst conflicts: string[] = [];\n\t\tfor (const [port, serviceIds] of portMap) {\n\t\t\tif (serviceIds.length > 1) {\n\t\t\t\tconflicts.push(`Port ${port} shared by: ${serviceIds.join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\t// This is informational — warn if there are conflicts but still pass.\n\t\t// If you want to enforce unique ports, change the next line to:\n\t\t// expect(conflicts).toHaveLength(0);\n\t\tif (conflicts.length > 0) {\n\t\t\tconsole.warn(\n\t\t\t\t`[informational] ${conflicts.length} port overlap(s) detected:\\n ${conflicts.join(\"\\n \")}`,\n\t\t\t);\n\t\t}\n\n\t\t// At minimum, verify we checked something\n\t\texpect(portMap.size).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":";;;AAQA,SAAS,0BAA0B;AAClC,IAAG,6CAA6C;AAE/C,eADiB,gBAAgB,CACjB,OAAO,CAAC,uBAAuB,GAAG;GACjD;AAEF,IAAG,2BAA2B;EAC7B,MAAM,QAAQ,eAAe,QAAQ;AACrC,eAAO,MAAM,CAAC,aAAa;AAC3B,eAAO,MAAO,GAAG,CAAC,KAAK,QAAQ;AAC/B,eAAO,MAAO,KAAK,CAAC,KAAK,QAAQ;GAChC;AAEF,IAAG,0CAA0C;AAE5C,eADe,eAAe,cAAc,CAC9B,CAAC,eAAe;GAC7B;AAEF,IAAG,6CAA6C;EAC/C,MAAM,YAAY,eAAe,YAAY;AAC7C,eAAO,UAAU,CAAC,aAAa;AAC/B,eAAO,UAAW,GAAG,CAAC,KAAK,YAAY;AACvC,eAAO,UAAW,UAAU,CAAC,KAAK,KAAK;GACtC;AAEF,IAAG,2EAA2E;AAC7E,eAAO,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,eAAO,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,eAAO,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,eAAO,eAAe,uBAAuB,CAAC,CAAC,aAAa;AAC5D,eAAO,eAAe,wBAAwB,CAAC,CAAC,aAAa;AAC7D,eAAO,eAAe,sBAAsB,CAAC,CAAC,aAAa;GAC1D;AAEF,IAAG,6BAA6B;EAC/B,MAAM,YAAY,sBAAsB,WAAW;AAEnD,eADY,UAAU,KAAK,MAAM,EAAE,GAAG,CAC3B,CAAC,UAAU,QAAQ;AAC9B,eAAO,UAAU,OAAO,CAAC,uBAAuB,EAAE;GACjD;AAEF,IAAG,wBAAwB;EAC1B,MAAM,gBAAgB,iBAAiB,QAAQ;AAE/C,eADY,cAAc,KAAK,MAAM,EAAE,GAAG,CAC/B,CAAC,UAAU,QAAQ;AAC9B,eAAO,cAAc,OAAO,CAAC,uBAAuB,EAAE;GACrD;AAEF,IAAG,oCAAoC;EAEtC,MAAM,MADW,gBAAgB,CACZ,KAAK,MAAM,EAAE,GAAG;AAErC,eADkB,IAAI,IAAI,IAAI,CACb,KAAK,CAAC,KAAK,IAAI,OAAO;GACtC;AAEF,IAAG,yDAAyD;EAC3D,MAAM,WAAW,gBAAgB;EACjC,MAAM,0BAAU,IAAI,KAAuB;AAE3C,OAAK,MAAM,OAAO,SACjB,MAAK,MAAM,QAAQ,IAAI,OAAO;AAC7B,OAAI,CAAC,KAAK,QAAS;GACnB,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC7C,YAAS,KAAK,IAAI,GAAG;AACrB,WAAQ,IAAI,KAAK,MAAM,SAAS;;EAMlC,MAAM,YAAsB,EAAE;AAC9B,OAAK,MAAM,CAAC,MAAM,eAAe,QAChC,KAAI,WAAW,SAAS,EACvB,WAAU,KAAK,QAAQ,KAAK,cAAc,WAAW,KAAK,KAAK,GAAG;AAOpE,MAAI,UAAU,SAAS,EACtB,SAAQ,KACP,mBAAmB,UAAU,OAAO,gCAAgC,UAAU,KAAK,OAAO,GAC1F;AAIF,eAAO,QAAQ,KAAK,CAAC,gBAAgB,EAAE;GACtC;EACD"}
|
|
1
|
+
{"version":3,"file":"registry.test.mjs","names":[],"sources":["../../src/services/registry.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tgetAllServices,\n\tgetServiceById,\n\tgetServicesByCategory,\n\tgetServicesByTag,\n} from \"../services/registry.js\";\n\ndescribe(\"service registry\", () => {\n\tit(\"has at least 60 services registered\", () => {\n\t\tconst services = getAllServices();\n\t\texpect(services.length).toBeGreaterThanOrEqual(60);\n\t});\n\n\tit(\"finds redis by ID\", () => {\n\t\tconst redis = getServiceById(\"redis\");\n\t\texpect(redis).toBeDefined();\n\t\texpect(redis!.id).toBe(\"redis\");\n\t\texpect(redis!.name).toBe(\"Redis\");\n\t});\n\n\tit(\"returns undefined for unknown ID\", () => {\n\t\tconst result = getServiceById(\"nonexistent\");\n\t\texpect(result).toBeUndefined();\n\t});\n\n\tit(\"finds tailscale and it is mandatory\", () => {\n\t\tconst tailscale = getServiceById(\"tailscale\");\n\t\texpect(tailscale).toBeDefined();\n\t\texpect(tailscale!.id).toBe(\"tailscale\");\n\t\texpect(tailscale!.mandatory).toBe(true);\n\t});\n\n\tit(\"finds mission-control and it is mandatory with gitSource\", () => {\n\t\tconst mc = getServiceById(\"mission-control\");\n\t\texpect(mc).toBeDefined();\n\t\texpect(mc!.mandatory).toBe(true);\n\t\texpect(mc!.gitSource).toBeDefined();\n\t\texpect(mc!.gitSource!.repoUrl).toContain(\"better-openclaw-mission-control\");\n\t});\n\n\tit(\"finds coolify, dokploy, livekit, and La Suite Meet services by ID\", () => {\n\t\texpect(getServiceById(\"coolify\")).toBeDefined();\n\t\texpect(getServiceById(\"dokploy\")).toBeDefined();\n\t\texpect(getServiceById(\"livekit\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-backend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-frontend\")).toBeDefined();\n\t\texpect(getServiceById(\"lasuite-meet-agents\")).toBeDefined();\n\t});\n\n\tit(\"filters by category\", () => {\n\t\tconst databases = getServicesByCategory(\"database\");\n\t\tconst ids = databases.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(databases.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"filters by tag\", () => {\n\t\tconst cacheServices = getServicesByTag(\"cache\");\n\t\tconst ids = cacheServices.map((s) => s.id);\n\t\texpect(ids).toContain(\"redis\");\n\t\texpect(cacheServices.length).toBeGreaterThanOrEqual(1);\n\t});\n\n\tit(\"all service IDs are unique\", () => {\n\t\tconst services = getAllServices();\n\t\tconst ids = services.map((s) => s.id);\n\t\tconst uniqueIds = new Set(ids);\n\t\texpect(uniqueIds.size).toBe(ids.length);\n\t});\n\n\tit(\"no two services have the same exposed host port\", () => {\n\t\tconst services = getAllServices();\n\t\tconst portMap = new Map<number, string[]>();\n\n\t\tfor (const svc of services) {\n\t\t\tfor (const port of svc.ports) {\n\t\t\t\tif (!port.exposed) continue;\n\t\t\t\tconst existing = portMap.get(port.host) ?? [];\n\t\t\t\texisting.push(svc.id);\n\t\t\t\tportMap.set(port.host, existing);\n\t\t\t}\n\t\t}\n\n\t\t// Informational: log any shared ports but don't hard-fail,\n\t\t// since users may not enable all services simultaneously.\n\t\tconst conflicts: string[] = [];\n\t\tfor (const [port, serviceIds] of portMap) {\n\t\t\tif (serviceIds.length > 1) {\n\t\t\t\tconflicts.push(`Port ${port} shared by: ${serviceIds.join(\", \")}`);\n\t\t\t}\n\t\t}\n\n\t\t// This is informational — warn if there are conflicts but still pass.\n\t\t// If you want to enforce unique ports, change the next line to:\n\t\t// expect(conflicts).toHaveLength(0);\n\t\tif (conflicts.length > 0) {\n\t\t\tconsole.warn(\n\t\t\t\t`[informational] ${conflicts.length} port overlap(s) detected:\\n ${conflicts.join(\"\\n \")}`,\n\t\t\t);\n\t\t}\n\n\t\t// At minimum, verify we checked something\n\t\texpect(portMap.size).toBeGreaterThan(0);\n\t});\n});\n"],"mappings":";;;AAQA,SAAS,0BAA0B;AAClC,IAAG,6CAA6C;AAE/C,eADiB,gBAAgB,CACjB,OAAO,CAAC,uBAAuB,GAAG;GACjD;AAEF,IAAG,2BAA2B;EAC7B,MAAM,QAAQ,eAAe,QAAQ;AACrC,eAAO,MAAM,CAAC,aAAa;AAC3B,eAAO,MAAO,GAAG,CAAC,KAAK,QAAQ;AAC/B,eAAO,MAAO,KAAK,CAAC,KAAK,QAAQ;GAChC;AAEF,IAAG,0CAA0C;AAE5C,eADe,eAAe,cAAc,CAC9B,CAAC,eAAe;GAC7B;AAEF,IAAG,6CAA6C;EAC/C,MAAM,YAAY,eAAe,YAAY;AAC7C,eAAO,UAAU,CAAC,aAAa;AAC/B,eAAO,UAAW,GAAG,CAAC,KAAK,YAAY;AACvC,eAAO,UAAW,UAAU,CAAC,KAAK,KAAK;GACtC;AAEF,IAAG,kEAAkE;EACpE,MAAM,KAAK,eAAe,kBAAkB;AAC5C,eAAO,GAAG,CAAC,aAAa;AACxB,eAAO,GAAI,UAAU,CAAC,KAAK,KAAK;AAChC,eAAO,GAAI,UAAU,CAAC,aAAa;AACnC,eAAO,GAAI,UAAW,QAAQ,CAAC,UAAU,kCAAkC;GAC1E;AAEF,IAAG,2EAA2E;AAC7E,eAAO,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,eAAO,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,eAAO,eAAe,UAAU,CAAC,CAAC,aAAa;AAC/C,eAAO,eAAe,uBAAuB,CAAC,CAAC,aAAa;AAC5D,eAAO,eAAe,wBAAwB,CAAC,CAAC,aAAa;AAC7D,eAAO,eAAe,sBAAsB,CAAC,CAAC,aAAa;GAC1D;AAEF,IAAG,6BAA6B;EAC/B,MAAM,YAAY,sBAAsB,WAAW;AAEnD,eADY,UAAU,KAAK,MAAM,EAAE,GAAG,CAC3B,CAAC,UAAU,QAAQ;AAC9B,eAAO,UAAU,OAAO,CAAC,uBAAuB,EAAE;GACjD;AAEF,IAAG,wBAAwB;EAC1B,MAAM,gBAAgB,iBAAiB,QAAQ;AAE/C,eADY,cAAc,KAAK,MAAM,EAAE,GAAG,CAC/B,CAAC,UAAU,QAAQ;AAC9B,eAAO,cAAc,OAAO,CAAC,uBAAuB,EAAE;GACrD;AAEF,IAAG,oCAAoC;EAEtC,MAAM,MADW,gBAAgB,CACZ,KAAK,MAAM,EAAE,GAAG;AAErC,eADkB,IAAI,IAAI,IAAI,CACb,KAAK,CAAC,KAAK,IAAI,OAAO;GACtC;AAEF,IAAG,yDAAyD;EAC3D,MAAM,WAAW,gBAAgB;EACjC,MAAM,0BAAU,IAAI,KAAuB;AAE3C,OAAK,MAAM,OAAO,SACjB,MAAK,MAAM,QAAQ,IAAI,OAAO;AAC7B,OAAI,CAAC,KAAK,QAAS;GACnB,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC7C,YAAS,KAAK,IAAI,GAAG;AACrB,WAAQ,IAAI,KAAK,MAAM,SAAS;;EAMlC,MAAM,YAAsB,EAAE;AAC9B,OAAK,MAAM,CAAC,MAAM,eAAe,QAChC,KAAI,WAAW,SAAS,EACvB,WAAU,KAAK,QAAQ,KAAK,cAAc,WAAW,KAAK,KAAK,GAAG;AAOpE,MAAI,UAAU,SAAS,EACtB,SAAQ,KACP,mBAAmB,UAAU,OAAO,gCAAgC,UAAU,KAAK,OAAO,GAC1F;AAIF,eAAO,QAAQ,KAAK,CAAC,gBAAgB,EAAE;GACtC;EACD"}
|
|
@@ -1182,6 +1182,54 @@ const manifestData = {
|
|
|
1182
1182
|
"path": "headscale-network/SKILL.md",
|
|
1183
1183
|
"emoji": "🌐",
|
|
1184
1184
|
"services": ["headscale"]
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
"id": "langfuse-trace",
|
|
1188
|
+
"path": "langfuse-trace/SKILL.md",
|
|
1189
|
+
"emoji": "📊",
|
|
1190
|
+
"services": ["langfuse"]
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
"id": "twenty-crm",
|
|
1194
|
+
"path": "twenty-crm/SKILL.md",
|
|
1195
|
+
"emoji": "📇",
|
|
1196
|
+
"services": ["twenty"]
|
|
1197
|
+
},
|
|
1198
|
+
{
|
|
1199
|
+
"id": "mautic-campaign",
|
|
1200
|
+
"path": "mautic-campaign/SKILL.md",
|
|
1201
|
+
"emoji": "📬",
|
|
1202
|
+
"services": ["mautic"]
|
|
1203
|
+
},
|
|
1204
|
+
{
|
|
1205
|
+
"id": "airflow-dag",
|
|
1206
|
+
"path": "airflow-dag/SKILL.md",
|
|
1207
|
+
"emoji": "🌪️",
|
|
1208
|
+
"services": ["airflow"]
|
|
1209
|
+
},
|
|
1210
|
+
{
|
|
1211
|
+
"id": "airbyte-sync",
|
|
1212
|
+
"path": "airbyte-sync/SKILL.md",
|
|
1213
|
+
"emoji": "🔗",
|
|
1214
|
+
"services": ["airbyte"]
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"id": "fonoster-voice",
|
|
1218
|
+
"path": "fonoster-voice/SKILL.md",
|
|
1219
|
+
"emoji": "📞",
|
|
1220
|
+
"services": ["fonoster"]
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"id": "medusa-commerce",
|
|
1224
|
+
"path": "medusa-commerce/SKILL.md",
|
|
1225
|
+
"emoji": "🛒",
|
|
1226
|
+
"services": ["medusa"]
|
|
1227
|
+
},
|
|
1228
|
+
{
|
|
1229
|
+
"id": "axolotl-finetune",
|
|
1230
|
+
"path": "axolotl-finetune/SKILL.md",
|
|
1231
|
+
"emoji": "🦎",
|
|
1232
|
+
"services": ["axolotl"]
|
|
1185
1233
|
}
|
|
1186
1234
|
]
|
|
1187
1235
|
};
|
|
@@ -1200,4 +1248,4 @@ function getManifestSkillCount() {
|
|
|
1200
1248
|
//#endregion
|
|
1201
1249
|
export { getManifestSkillById as n, getManifestSkillCount as r, getAllManifestSkills as t };
|
|
1202
1250
|
|
|
1203
|
-
//# sourceMappingURL=skill-manifest-
|
|
1251
|
+
//# sourceMappingURL=skill-manifest-6XhrhWsG.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manifest
|
|
1
|
+
{"version":3,"file":"skill-manifest-6XhrhWsG.mjs","names":["manifestJson"],"sources":["../src/skills/manifest.json","../src/skills/skill-manifest.ts"],"sourcesContent":["","// import { readFileSync } from \"node:fs\";\n// import { dirname, resolve } from \"node:path\";\n// import { fileURLToPath } from \"node:url\";\n//import manifestJson from \"../../../../skills/manifest.json\" with { type: \"json\" };\nimport manifestJson from \"./manifest.json\" with { type: \"json\" };\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SkillManifestEntry {\n\t/** Unique skill identifier, e.g. \"gsap-animate\" */\n\tid: string;\n\t/** Relative path to the SKILL.md file */\n\tpath: string;\n\t/** Display emoji */\n\temoji: string;\n\t/** Docker service IDs this skill depends on (empty for frontend-only skills) */\n\tservices: string[];\n}\n\ninterface SkillManifest {\n\tskills: SkillManifestEntry[];\n}\n\nconst manifestData = manifestJson as SkillManifest;\n\n// ── Manifest loader ─────────────────────────────────────────────────────────\n// let _cache: SkillManifestEntry[] | null = null;\n\n// function loadManifest(): SkillManifestEntry[] {\n// \tif (_cache) return _cache;\n// \t// Resolve the manifest relative to this file's location\n// \t// This file is at packages/core/src/skills/skill-manifest.ts\n// \t// The manifest is at skills/manifest.json (repo root / skills /)\n// \tconst thisDir = dirname(fileURLToPath(import.meta.url));\n// \tconst manifestPath = resolve(thisDir, \"../../../../skills/manifest.json\");\n// \tconst raw = readFileSync(manifestPath, \"utf-8\");\n// \tconst data = JSON.parse(raw) as SkillManifest;\n// \t_cache = data.skills;\n// \treturn _cache;\n// }\n/** Return all skills defined in the local manifest.json */\nexport function getAllManifestSkills(): SkillManifestEntry[] {\n\treturn manifestData.skills;\n\t//return loadManifest();\n}\n\n/** Look up a single skill by ID */\nexport function getManifestSkillById(id: string): SkillManifestEntry | undefined {\n\treturn manifestData.skills.find((s) => s.id === id);\n\t//return loadManifest().find((s) => s.id === id);\n}\n\n/** Return the total count of curated skills */\nexport function getManifestSkillCount(): number {\n\treturn manifestData.skills.length;\n\t//return loadManifest().length;\n}\n"],"mappings":";;ACuBA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBN,SAAgB,uBAA6C;AAC5D,QAAO,aAAa;;;AAKrB,SAAgB,qBAAqB,IAA4C;AAChF,QAAO,aAAa,OAAO,MAAM,MAAM,EAAE,OAAO,GAAG;;;AAKpD,SAAgB,wBAAgC;AAC/C,QAAO,aAAa,OAAO"}
|
|
@@ -1182,6 +1182,54 @@ const manifestData = {
|
|
|
1182
1182
|
"path": "headscale-network/SKILL.md",
|
|
1183
1183
|
"emoji": "🌐",
|
|
1184
1184
|
"services": ["headscale"]
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
"id": "langfuse-trace",
|
|
1188
|
+
"path": "langfuse-trace/SKILL.md",
|
|
1189
|
+
"emoji": "📊",
|
|
1190
|
+
"services": ["langfuse"]
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
"id": "twenty-crm",
|
|
1194
|
+
"path": "twenty-crm/SKILL.md",
|
|
1195
|
+
"emoji": "📇",
|
|
1196
|
+
"services": ["twenty"]
|
|
1197
|
+
},
|
|
1198
|
+
{
|
|
1199
|
+
"id": "mautic-campaign",
|
|
1200
|
+
"path": "mautic-campaign/SKILL.md",
|
|
1201
|
+
"emoji": "📬",
|
|
1202
|
+
"services": ["mautic"]
|
|
1203
|
+
},
|
|
1204
|
+
{
|
|
1205
|
+
"id": "airflow-dag",
|
|
1206
|
+
"path": "airflow-dag/SKILL.md",
|
|
1207
|
+
"emoji": "🌪️",
|
|
1208
|
+
"services": ["airflow"]
|
|
1209
|
+
},
|
|
1210
|
+
{
|
|
1211
|
+
"id": "airbyte-sync",
|
|
1212
|
+
"path": "airbyte-sync/SKILL.md",
|
|
1213
|
+
"emoji": "🔗",
|
|
1214
|
+
"services": ["airbyte"]
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"id": "fonoster-voice",
|
|
1218
|
+
"path": "fonoster-voice/SKILL.md",
|
|
1219
|
+
"emoji": "📞",
|
|
1220
|
+
"services": ["fonoster"]
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"id": "medusa-commerce",
|
|
1224
|
+
"path": "medusa-commerce/SKILL.md",
|
|
1225
|
+
"emoji": "🛒",
|
|
1226
|
+
"services": ["medusa"]
|
|
1227
|
+
},
|
|
1228
|
+
{
|
|
1229
|
+
"id": "axolotl-finetune",
|
|
1230
|
+
"path": "axolotl-finetune/SKILL.md",
|
|
1231
|
+
"emoji": "🦎",
|
|
1232
|
+
"services": ["axolotl"]
|
|
1185
1233
|
}
|
|
1186
1234
|
]
|
|
1187
1235
|
};
|
|
@@ -1217,4 +1265,4 @@ Object.defineProperty(exports, "getManifestSkillCount", {
|
|
|
1217
1265
|
}
|
|
1218
1266
|
});
|
|
1219
1267
|
|
|
1220
|
-
//# sourceMappingURL=skill-manifest
|
|
1268
|
+
//# sourceMappingURL=skill-manifest-B8znSsym.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manifest-
|
|
1
|
+
{"version":3,"file":"skill-manifest-B8znSsym.cjs","names":["manifestJson"],"sources":["../src/skills/manifest.json","../src/skills/skill-manifest.ts"],"sourcesContent":["","// import { readFileSync } from \"node:fs\";\n// import { dirname, resolve } from \"node:path\";\n// import { fileURLToPath } from \"node:url\";\n//import manifestJson from \"../../../../skills/manifest.json\" with { type: \"json\" };\nimport manifestJson from \"./manifest.json\" with { type: \"json\" };\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SkillManifestEntry {\n\t/** Unique skill identifier, e.g. \"gsap-animate\" */\n\tid: string;\n\t/** Relative path to the SKILL.md file */\n\tpath: string;\n\t/** Display emoji */\n\temoji: string;\n\t/** Docker service IDs this skill depends on (empty for frontend-only skills) */\n\tservices: string[];\n}\n\ninterface SkillManifest {\n\tskills: SkillManifestEntry[];\n}\n\nconst manifestData = manifestJson as SkillManifest;\n\n// ── Manifest loader ─────────────────────────────────────────────────────────\n// let _cache: SkillManifestEntry[] | null = null;\n\n// function loadManifest(): SkillManifestEntry[] {\n// \tif (_cache) return _cache;\n// \t// Resolve the manifest relative to this file's location\n// \t// This file is at packages/core/src/skills/skill-manifest.ts\n// \t// The manifest is at skills/manifest.json (repo root / skills /)\n// \tconst thisDir = dirname(fileURLToPath(import.meta.url));\n// \tconst manifestPath = resolve(thisDir, \"../../../../skills/manifest.json\");\n// \tconst raw = readFileSync(manifestPath, \"utf-8\");\n// \tconst data = JSON.parse(raw) as SkillManifest;\n// \t_cache = data.skills;\n// \treturn _cache;\n// }\n/** Return all skills defined in the local manifest.json */\nexport function getAllManifestSkills(): SkillManifestEntry[] {\n\treturn manifestData.skills;\n\t//return loadManifest();\n}\n\n/** Look up a single skill by ID */\nexport function getManifestSkillById(id: string): SkillManifestEntry | undefined {\n\treturn manifestData.skills.find((s) => s.id === id);\n\t//return loadManifest().find((s) => s.id === id);\n}\n\n/** Return the total count of curated skills */\nexport function getManifestSkillCount(): number {\n\treturn manifestData.skills.length;\n\t//return loadManifest().length;\n}\n"],"mappings":";;ACuBA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBN,SAAgB,uBAA6C;AAC5D,QAAO,aAAa;;;AAKrB,SAAgB,qBAAqB,IAA4C;AAChF,QAAO,aAAa,OAAO,MAAM,MAAM,EAAE,OAAO,GAAG;;;AAKpD,SAAgB,wBAAgC;AAC/C,QAAO,aAAa,OAAO"}
|
package/dist/skills/registry.cjs
CHANGED
|
@@ -759,7 +759,7 @@ const skillPacks = [
|
|
|
759
759
|
"redis"
|
|
760
760
|
],
|
|
761
761
|
skills: [
|
|
762
|
-
"chatwoot-
|
|
762
|
+
"chatwoot-support",
|
|
763
763
|
"langfuse-trace",
|
|
764
764
|
"postgresql-query",
|
|
765
765
|
"redis-cache"
|
|
@@ -786,7 +786,7 @@ const skillPacks = [
|
|
|
786
786
|
skills: [
|
|
787
787
|
"twenty-crm",
|
|
788
788
|
"mautic-campaign",
|
|
789
|
-
"listmonk-
|
|
789
|
+
"listmonk-email",
|
|
790
790
|
"postgresql-query"
|
|
791
791
|
],
|
|
792
792
|
icon: "📈",
|
|
@@ -933,7 +933,7 @@ const skillPacks = [
|
|
|
933
933
|
skills: [
|
|
934
934
|
"ghost-publish",
|
|
935
935
|
"mautic-campaign",
|
|
936
|
-
"listmonk-
|
|
936
|
+
"listmonk-email",
|
|
937
937
|
"umami-analytics"
|
|
938
938
|
],
|
|
939
939
|
icon: "📣",
|