@better-openclaw/core 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish-core.yml +32 -34
- package/dist/bare-metal-partition.d.mts +26 -0
- package/dist/bare-metal-partition.d.mts.map +1 -0
- package/dist/bare-metal-partition.mjs +48 -0
- package/dist/bare-metal-partition.mjs.map +1 -0
- package/dist/bare-metal-partition.test.d.mts +1 -0
- package/dist/bare-metal-partition.test.mjs +58 -0
- package/dist/bare-metal-partition.test.mjs.map +1 -0
- package/dist/composer.d.mts +21 -0
- package/dist/composer.d.mts.map +1 -0
- package/dist/composer.mjs +287 -0
- package/dist/composer.mjs.map +1 -0
- package/dist/composer.snapshot.test.d.mts +1 -0
- package/dist/composer.snapshot.test.mjs +92 -0
- package/dist/composer.snapshot.test.mjs.map +1 -0
- package/dist/composer.test.d.mts +1 -0
- package/dist/composer.test.mjs +166 -0
- package/dist/composer.test.mjs.map +1 -0
- package/dist/generate.d.mts +11 -0
- package/dist/generate.d.mts.map +1 -0
- package/dist/generate.mjs +169 -0
- package/dist/generate.mjs.map +1 -0
- package/dist/generate.test.d.mts +1 -0
- package/dist/generate.test.mjs +283 -0
- package/dist/generate.test.mjs.map +1 -0
- package/dist/generators/bare-metal-install.d.mts +17 -0
- package/dist/generators/bare-metal-install.d.mts.map +1 -0
- package/dist/generators/bare-metal-install.mjs +224 -0
- package/dist/generators/bare-metal-install.mjs.map +1 -0
- package/dist/generators/bare-metal-install.test.d.mts +1 -0
- package/dist/generators/bare-metal-install.test.mjs +48 -0
- package/dist/generators/bare-metal-install.test.mjs.map +1 -0
- package/dist/generators/caddy.d.mts +17 -0
- package/dist/generators/caddy.d.mts.map +1 -0
- package/dist/generators/caddy.mjs +77 -0
- package/dist/generators/caddy.mjs.map +1 -0
- package/dist/generators/env.d.mts +46 -0
- package/dist/generators/env.d.mts.map +1 -0
- package/dist/generators/env.mjs +250 -0
- package/dist/generators/env.mjs.map +1 -0
- package/dist/generators/grafana.d.mts +22 -0
- package/dist/generators/grafana.d.mts.map +1 -0
- package/dist/generators/grafana.mjs +293 -0
- package/dist/generators/grafana.mjs.map +1 -0
- package/dist/generators/n8n-workflows.d.mts +11 -0
- package/dist/generators/n8n-workflows.d.mts.map +1 -0
- package/dist/generators/n8n-workflows.mjs +75 -0
- package/dist/generators/n8n-workflows.mjs.map +1 -0
- package/dist/generators/native-services.d.mts +17 -0
- package/dist/generators/native-services.d.mts.map +1 -0
- package/dist/generators/native-services.mjs +78 -0
- package/dist/generators/native-services.mjs.map +1 -0
- package/dist/generators/postgres-init.d.mts +30 -0
- package/dist/generators/postgres-init.d.mts.map +1 -0
- package/dist/generators/postgres-init.mjs +151 -0
- package/dist/generators/postgres-init.mjs.map +1 -0
- package/dist/generators/prometheus.d.mts +14 -0
- package/dist/generators/prometheus.d.mts.map +1 -0
- package/dist/generators/prometheus.mjs +107 -0
- package/dist/generators/prometheus.mjs.map +1 -0
- package/dist/generators/readme.d.mts +25 -0
- package/dist/generators/readme.d.mts.map +1 -0
- package/dist/generators/readme.mjs +199 -0
- package/dist/generators/readme.mjs.map +1 -0
- package/dist/generators/scripts.d.mts +10 -0
- package/dist/generators/scripts.d.mts.map +1 -0
- package/dist/generators/scripts.mjs +351 -0
- package/dist/generators/scripts.mjs.map +1 -0
- package/dist/generators/skills.d.mts +14 -0
- package/dist/generators/skills.d.mts.map +1 -0
- package/dist/generators/skills.mjs +587 -0
- package/dist/generators/skills.mjs.map +1 -0
- package/dist/index.d.mts +21 -0
- package/dist/index.mjs +22 -0
- package/dist/magic-string.es-1uTtupLe.mjs +1014 -0
- package/dist/magic-string.es-1uTtupLe.mjs.map +1 -0
- package/dist/presets/registry.d.mts +9 -0
- package/dist/presets/registry.d.mts.map +1 -0
- package/dist/presets/registry.mjs +159 -0
- package/dist/presets/registry.mjs.map +1 -0
- package/dist/presets/registry.test.d.mts +1 -0
- package/dist/presets/registry.test.mjs +34 -0
- package/dist/presets/registry.test.mjs.map +1 -0
- package/dist/resolver.d.mts +21 -0
- package/dist/resolver.d.mts.map +1 -0
- package/dist/resolver.mjs +194 -0
- package/dist/resolver.mjs.map +1 -0
- package/dist/resolver.test.d.mts +1 -0
- package/dist/resolver.test.mjs +237 -0
- package/dist/resolver.test.mjs.map +1 -0
- package/dist/schema.d.mts +706 -0
- package/dist/schema.d.mts.map +1 -0
- package/dist/schema.mjs +260 -0
- package/dist/schema.mjs.map +1 -0
- package/dist/schema.test.d.mts +1 -0
- package/dist/schema.test.mjs +264 -0
- package/dist/schema.test.mjs.map +1 -0
- package/dist/services/definitions/anything-llm.d.mts +7 -0
- package/dist/services/definitions/anything-llm.d.mts.map +1 -0
- package/dist/services/definitions/anything-llm.mjs +44 -0
- package/dist/services/definitions/anything-llm.mjs.map +1 -0
- package/dist/services/definitions/appflowy.d.mts +7 -0
- package/dist/services/definitions/appflowy.d.mts.map +1 -0
- package/dist/services/definitions/appflowy.mjs +45 -0
- package/dist/services/definitions/appflowy.mjs.map +1 -0
- package/dist/services/definitions/beszel.d.mts +7 -0
- package/dist/services/definitions/beszel.d.mts.map +1 -0
- package/dist/services/definitions/beszel.mjs +45 -0
- package/dist/services/definitions/beszel.mjs.map +1 -0
- package/dist/services/definitions/browserless.d.mts +7 -0
- package/dist/services/definitions/browserless.d.mts.map +1 -0
- package/dist/services/definitions/browserless.mjs +85 -0
- package/dist/services/definitions/browserless.mjs.map +1 -0
- package/dist/services/definitions/caddy.d.mts +7 -0
- package/dist/services/definitions/caddy.d.mts.map +1 -0
- package/dist/services/definitions/caddy.mjs +52 -0
- package/dist/services/definitions/caddy.mjs.map +1 -0
- package/dist/services/definitions/chromadb.d.mts +7 -0
- package/dist/services/definitions/chromadb.d.mts.map +1 -0
- package/dist/services/definitions/chromadb.mjs +63 -0
- package/dist/services/definitions/chromadb.mjs.map +1 -0
- package/dist/services/definitions/claude-code.d.mts +7 -0
- package/dist/services/definitions/claude-code.d.mts.map +1 -0
- package/dist/services/definitions/claude-code.mjs +52 -0
- package/dist/services/definitions/claude-code.mjs.map +1 -0
- package/dist/services/definitions/code-server.d.mts +7 -0
- package/dist/services/definitions/code-server.d.mts.map +1 -0
- package/dist/services/definitions/code-server.mjs +66 -0
- package/dist/services/definitions/code-server.mjs.map +1 -0
- package/dist/services/definitions/codex.d.mts +7 -0
- package/dist/services/definitions/codex.d.mts.map +1 -0
- package/dist/services/definitions/codex.mjs +45 -0
- package/dist/services/definitions/codex.mjs.map +1 -0
- package/dist/services/definitions/convex-dashboard.d.mts +7 -0
- package/dist/services/definitions/convex-dashboard.d.mts.map +1 -0
- package/dist/services/definitions/convex-dashboard.mjs +46 -0
- package/dist/services/definitions/convex-dashboard.mjs.map +1 -0
- package/dist/services/definitions/convex.d.mts +7 -0
- package/dist/services/definitions/convex.d.mts.map +1 -0
- package/dist/services/definitions/convex.mjs +118 -0
- package/dist/services/definitions/convex.mjs.map +1 -0
- package/dist/services/definitions/coolify.d.mts +7 -0
- package/dist/services/definitions/coolify.d.mts.map +1 -0
- package/dist/services/definitions/coolify.mjs +49 -0
- package/dist/services/definitions/coolify.mjs.map +1 -0
- package/dist/services/definitions/dify.d.mts +7 -0
- package/dist/services/definitions/dify.d.mts.map +1 -0
- package/dist/services/definitions/dify.mjs +81 -0
- package/dist/services/definitions/dify.mjs.map +1 -0
- package/dist/services/definitions/docsgpt.d.mts +7 -0
- package/dist/services/definitions/docsgpt.d.mts.map +1 -0
- package/dist/services/definitions/docsgpt.mjs +45 -0
- package/dist/services/definitions/docsgpt.mjs.map +1 -0
- package/dist/services/definitions/dokploy.d.mts +7 -0
- package/dist/services/definitions/dokploy.d.mts.map +1 -0
- package/dist/services/definitions/dokploy.mjs +49 -0
- package/dist/services/definitions/dokploy.mjs.map +1 -0
- package/dist/services/definitions/dozzle.d.mts +7 -0
- package/dist/services/definitions/dozzle.d.mts.map +1 -0
- package/dist/services/definitions/dozzle.mjs +41 -0
- package/dist/services/definitions/dozzle.mjs.map +1 -0
- package/dist/services/definitions/ffmpeg.d.mts +7 -0
- package/dist/services/definitions/ffmpeg.d.mts.map +1 -0
- package/dist/services/definitions/ffmpeg.mjs +66 -0
- package/dist/services/definitions/ffmpeg.mjs.map +1 -0
- package/dist/services/definitions/flowise.d.mts +7 -0
- package/dist/services/definitions/flowise.d.mts.map +1 -0
- package/dist/services/definitions/flowise.mjs +45 -0
- package/dist/services/definitions/flowise.mjs.map +1 -0
- package/dist/services/definitions/gemini-cli.d.mts +7 -0
- package/dist/services/definitions/gemini-cli.d.mts.map +1 -0
- package/dist/services/definitions/gemini-cli.mjs +46 -0
- package/dist/services/definitions/gemini-cli.mjs.map +1 -0
- package/dist/services/definitions/gitea.d.mts +7 -0
- package/dist/services/definitions/gitea.d.mts.map +1 -0
- package/dist/services/definitions/gitea.mjs +49 -0
- package/dist/services/definitions/gitea.mjs.map +1 -0
- package/dist/services/definitions/gotify.d.mts +7 -0
- package/dist/services/definitions/gotify.d.mts.map +1 -0
- package/dist/services/definitions/gotify.mjs +62 -0
- package/dist/services/definitions/gotify.mjs.map +1 -0
- package/dist/services/definitions/grafana.d.mts +7 -0
- package/dist/services/definitions/grafana.d.mts.map +1 -0
- package/dist/services/definitions/grafana.mjs +63 -0
- package/dist/services/definitions/grafana.mjs.map +1 -0
- package/dist/services/definitions/index.d.mts +76 -0
- package/dist/services/definitions/index.d.mts.map +1 -0
- package/dist/services/definitions/index.mjs +146 -0
- package/dist/services/definitions/index.mjs.map +1 -0
- package/dist/services/definitions/kimi.d.mts +7 -0
- package/dist/services/definitions/kimi.d.mts.map +1 -0
- package/dist/services/definitions/kimi.mjs +46 -0
- package/dist/services/definitions/kimi.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.d.mts +7 -0
- package/dist/services/definitions/lasuite-meet-agents.d.mts.map +1 -0
- package/dist/services/definitions/lasuite-meet-agents.mjs +36 -0
- package/dist/services/definitions/lasuite-meet-agents.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-backend.d.mts +7 -0
- package/dist/services/definitions/lasuite-meet-backend.d.mts.map +1 -0
- package/dist/services/definitions/lasuite-meet-backend.mjs +134 -0
- package/dist/services/definitions/lasuite-meet-backend.mjs.map +1 -0
- package/dist/services/definitions/lasuite-meet-frontend.d.mts +7 -0
- package/dist/services/definitions/lasuite-meet-frontend.d.mts.map +1 -0
- package/dist/services/definitions/lasuite-meet-frontend.mjs +48 -0
- package/dist/services/definitions/lasuite-meet-frontend.mjs.map +1 -0
- package/dist/services/definitions/librechat.d.mts +7 -0
- package/dist/services/definitions/librechat.d.mts.map +1 -0
- package/dist/services/definitions/librechat.mjs +50 -0
- package/dist/services/definitions/librechat.mjs.map +1 -0
- package/dist/services/definitions/lightpanda.d.mts +7 -0
- package/dist/services/definitions/lightpanda.d.mts.map +1 -0
- package/dist/services/definitions/lightpanda.mjs +59 -0
- package/dist/services/definitions/lightpanda.mjs.map +1 -0
- package/dist/services/definitions/litellm.d.mts +7 -0
- package/dist/services/definitions/litellm.d.mts.map +1 -0
- package/dist/services/definitions/litellm.mjs +47 -0
- package/dist/services/definitions/litellm.mjs.map +1 -0
- package/dist/services/definitions/livekit.d.mts +7 -0
- package/dist/services/definitions/livekit.d.mts.map +1 -0
- package/dist/services/definitions/livekit.mjs +56 -0
- package/dist/services/definitions/livekit.mjs.map +1 -0
- package/dist/services/definitions/matomo.d.mts +7 -0
- package/dist/services/definitions/matomo.d.mts.map +1 -0
- package/dist/services/definitions/matomo.mjs +80 -0
- package/dist/services/definitions/matomo.mjs.map +1 -0
- package/dist/services/definitions/matrix-synapse.d.mts +7 -0
- package/dist/services/definitions/matrix-synapse.d.mts.map +1 -0
- package/dist/services/definitions/matrix-synapse.mjs +88 -0
- package/dist/services/definitions/matrix-synapse.mjs.map +1 -0
- package/dist/services/definitions/mattermost.d.mts +7 -0
- package/dist/services/definitions/mattermost.d.mts.map +1 -0
- package/dist/services/definitions/mattermost.mjs +61 -0
- package/dist/services/definitions/mattermost.mjs.map +1 -0
- package/dist/services/definitions/meilisearch.d.mts +7 -0
- package/dist/services/definitions/meilisearch.d.mts.map +1 -0
- package/dist/services/definitions/meilisearch.mjs +78 -0
- package/dist/services/definitions/meilisearch.mjs.map +1 -0
- package/dist/services/definitions/minio.d.mts +7 -0
- package/dist/services/definitions/minio.d.mts.map +1 -0
- package/dist/services/definitions/minio.mjs +102 -0
- package/dist/services/definitions/minio.mjs.map +1 -0
- package/dist/services/definitions/mission-control.d.mts +7 -0
- package/dist/services/definitions/mission-control.d.mts.map +1 -0
- package/dist/services/definitions/mission-control.mjs +67 -0
- package/dist/services/definitions/mission-control.mjs.map +1 -0
- package/dist/services/definitions/mixpost.d.mts +7 -0
- package/dist/services/definitions/mixpost.d.mts.map +1 -0
- package/dist/services/definitions/mixpost.mjs +87 -0
- package/dist/services/definitions/mixpost.mjs.map +1 -0
- package/dist/services/definitions/motion-canvas.d.mts +7 -0
- package/dist/services/definitions/motion-canvas.d.mts.map +1 -0
- package/dist/services/definitions/motion-canvas.mjs +52 -0
- package/dist/services/definitions/motion-canvas.mjs.map +1 -0
- package/dist/services/definitions/n8n.d.mts +7 -0
- package/dist/services/definitions/n8n.d.mts.map +1 -0
- package/dist/services/definitions/n8n.mjs +154 -0
- package/dist/services/definitions/n8n.mjs.map +1 -0
- package/dist/services/definitions/nocodb.d.mts +7 -0
- package/dist/services/definitions/nocodb.d.mts.map +1 -0
- package/dist/services/definitions/nocodb.mjs +45 -0
- package/dist/services/definitions/nocodb.mjs.map +1 -0
- package/dist/services/definitions/ntfy.d.mts +7 -0
- package/dist/services/definitions/ntfy.d.mts.map +1 -0
- package/dist/services/definitions/ntfy.mjs +63 -0
- package/dist/services/definitions/ntfy.mjs.map +1 -0
- package/dist/services/definitions/ollama.d.mts +7 -0
- package/dist/services/definitions/ollama.d.mts.map +1 -0
- package/dist/services/definitions/ollama.mjs +66 -0
- package/dist/services/definitions/ollama.mjs.map +1 -0
- package/dist/services/definitions/open-webui.d.mts +7 -0
- package/dist/services/definitions/open-webui.d.mts.map +1 -0
- package/dist/services/definitions/open-webui.mjs +50 -0
- package/dist/services/definitions/open-webui.mjs.map +1 -0
- package/dist/services/definitions/opencode.d.mts +7 -0
- package/dist/services/definitions/opencode.d.mts.map +1 -0
- package/dist/services/definitions/opencode.mjs +50 -0
- package/dist/services/definitions/opencode.mjs.map +1 -0
- package/dist/services/definitions/openpanel.d.mts +7 -0
- package/dist/services/definitions/openpanel.d.mts.map +1 -0
- package/dist/services/definitions/openpanel.mjs +46 -0
- package/dist/services/definitions/openpanel.mjs.map +1 -0
- package/dist/services/definitions/outline.d.mts +7 -0
- package/dist/services/definitions/outline.d.mts.map +1 -0
- package/dist/services/definitions/outline.mjs +74 -0
- package/dist/services/definitions/outline.mjs.map +1 -0
- package/dist/services/definitions/paperless-ngx.d.mts +7 -0
- package/dist/services/definitions/paperless-ngx.d.mts.map +1 -0
- package/dist/services/definitions/paperless-ngx.mjs +93 -0
- package/dist/services/definitions/paperless-ngx.mjs.map +1 -0
- package/dist/services/definitions/playwright-server.d.mts +7 -0
- package/dist/services/definitions/playwright-server.d.mts.map +1 -0
- package/dist/services/definitions/playwright-server.mjs +42 -0
- package/dist/services/definitions/playwright-server.mjs.map +1 -0
- package/dist/services/definitions/portainer.d.mts +7 -0
- package/dist/services/definitions/portainer.d.mts.map +1 -0
- package/dist/services/definitions/portainer.mjs +49 -0
- package/dist/services/definitions/portainer.mjs.map +1 -0
- package/dist/services/definitions/postgresql.d.mts +7 -0
- package/dist/services/definitions/postgresql.d.mts.map +1 -0
- package/dist/services/definitions/postgresql.mjs +84 -0
- package/dist/services/definitions/postgresql.mjs.map +1 -0
- package/dist/services/definitions/postiz.d.mts +7 -0
- package/dist/services/definitions/postiz.d.mts.map +1 -0
- package/dist/services/definitions/postiz.mjs +83 -0
- package/dist/services/definitions/postiz.mjs.map +1 -0
- package/dist/services/definitions/prometheus.d.mts +7 -0
- package/dist/services/definitions/prometheus.d.mts.map +1 -0
- package/dist/services/definitions/prometheus.mjs +52 -0
- package/dist/services/definitions/prometheus.mjs.map +1 -0
- package/dist/services/definitions/qdrant.d.mts +7 -0
- package/dist/services/definitions/qdrant.d.mts.map +1 -0
- package/dist/services/definitions/qdrant.mjs +77 -0
- package/dist/services/definitions/qdrant.mjs.map +1 -0
- package/dist/services/definitions/redis.d.mts +7 -0
- package/dist/services/definitions/redis.d.mts.map +1 -0
- package/dist/services/definitions/redis.mjs +91 -0
- package/dist/services/definitions/redis.mjs.map +1 -0
- package/dist/services/definitions/remotion.d.mts +7 -0
- package/dist/services/definitions/remotion.d.mts.map +1 -0
- package/dist/services/definitions/remotion.mjs +55 -0
- package/dist/services/definitions/remotion.mjs.map +1 -0
- package/dist/services/definitions/rocketchat.d.mts +7 -0
- package/dist/services/definitions/rocketchat.d.mts.map +1 -0
- package/dist/services/definitions/rocketchat.mjs +57 -0
- package/dist/services/definitions/rocketchat.mjs.map +1 -0
- package/dist/services/definitions/searxng.d.mts +7 -0
- package/dist/services/definitions/searxng.d.mts.map +1 -0
- package/dist/services/definitions/searxng.mjs +65 -0
- package/dist/services/definitions/searxng.mjs.map +1 -0
- package/dist/services/definitions/stable-diffusion.d.mts +7 -0
- package/dist/services/definitions/stable-diffusion.d.mts.map +1 -0
- package/dist/services/definitions/stable-diffusion.mjs +48 -0
- package/dist/services/definitions/stable-diffusion.mjs.map +1 -0
- package/dist/services/definitions/steel-browser.d.mts +7 -0
- package/dist/services/definitions/steel-browser.d.mts.map +1 -0
- package/dist/services/definitions/steel-browser.mjs +77 -0
- package/dist/services/definitions/steel-browser.mjs.map +1 -0
- package/dist/services/definitions/tailscale.d.mts +7 -0
- package/dist/services/definitions/tailscale.d.mts.map +1 -0
- package/dist/services/definitions/tailscale.mjs +70 -0
- package/dist/services/definitions/tailscale.mjs.map +1 -0
- package/dist/services/definitions/temporal.d.mts +7 -0
- package/dist/services/definitions/temporal.d.mts.map +1 -0
- package/dist/services/definitions/temporal.mjs +100 -0
- package/dist/services/definitions/temporal.mjs.map +1 -0
- package/dist/services/definitions/traefik.d.mts +7 -0
- package/dist/services/definitions/traefik.d.mts.map +1 -0
- package/dist/services/definitions/traefik.mjs +58 -0
- package/dist/services/definitions/traefik.mjs.map +1 -0
- package/dist/services/definitions/umami.d.mts +7 -0
- package/dist/services/definitions/umami.d.mts.map +1 -0
- package/dist/services/definitions/umami.mjs +46 -0
- package/dist/services/definitions/umami.mjs.map +1 -0
- package/dist/services/definitions/uptime-kuma.d.mts +7 -0
- package/dist/services/definitions/uptime-kuma.d.mts.map +1 -0
- package/dist/services/definitions/uptime-kuma.mjs +51 -0
- package/dist/services/definitions/uptime-kuma.mjs.map +1 -0
- package/dist/services/definitions/usesend.d.mts +7 -0
- package/dist/services/definitions/usesend.d.mts.map +1 -0
- package/dist/services/definitions/usesend.mjs +99 -0
- package/dist/services/definitions/usesend.mjs.map +1 -0
- package/dist/services/definitions/valkey.d.mts +7 -0
- package/dist/services/definitions/valkey.d.mts.map +1 -0
- package/dist/services/definitions/valkey.mjs +61 -0
- package/dist/services/definitions/valkey.mjs.map +1 -0
- package/dist/services/definitions/watchtower.d.mts +7 -0
- package/dist/services/definitions/watchtower.d.mts.map +1 -0
- package/dist/services/definitions/watchtower.mjs +47 -0
- package/dist/services/definitions/watchtower.mjs.map +1 -0
- package/dist/services/definitions/weaviate.d.mts +7 -0
- package/dist/services/definitions/weaviate.d.mts.map +1 -0
- package/dist/services/definitions/weaviate.mjs +90 -0
- package/dist/services/definitions/weaviate.mjs.map +1 -0
- package/dist/services/definitions/whisper.d.mts +7 -0
- package/dist/services/definitions/whisper.d.mts.map +1 -0
- package/dist/services/definitions/whisper.mjs +62 -0
- package/dist/services/definitions/whisper.mjs.map +1 -0
- package/dist/services/registry.d.mts +16 -0
- package/dist/services/registry.d.mts.map +1 -0
- package/dist/services/registry.mjs +30 -0
- package/dist/services/registry.mjs.map +1 -0
- package/dist/services/registry.test.d.mts +1 -0
- package/dist/services/registry.test.mjs +64 -0
- package/dist/services/registry.test.mjs.map +1 -0
- package/dist/skills/registry.d.mts +11 -0
- package/dist/skills/registry.d.mts.map +1 -0
- package/dist/skills/registry.mjs +215 -0
- package/dist/skills/registry.mjs.map +1 -0
- package/dist/types.d.mts +64 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +92 -0
- package/dist/types.mjs.map +1 -0
- package/dist/validator.d.mts +20 -0
- package/dist/validator.d.mts.map +1 -0
- package/dist/validator.mjs +111 -0
- package/dist/validator.mjs.map +1 -0
- package/dist/validator.test.d.mts +1 -0
- package/dist/validator.test.mjs +65 -0
- package/dist/validator.test.mjs.map +1 -0
- package/dist/version-manager.d.mts +14 -0
- package/dist/version-manager.d.mts.map +1 -0
- package/dist/version-manager.mjs +55 -0
- package/dist/version-manager.mjs.map +1 -0
- package/dist/vi.2VT5v0um-Qk6MgAnK.mjs +12916 -0
- package/dist/vi.2VT5v0um-Qk6MgAnK.mjs.map +1 -0
- package/package.json +17 -17
- package/src/schema.ts +2 -1
- package/src/services/definitions/convex-dashboard.ts +48 -0
- package/src/services/definitions/convex.ts +123 -0
- package/src/services/definitions/index.ts +12 -0
- package/src/services/definitions/mission-control.ts +71 -0
- package/src/services/definitions/tailscale.ts +2 -0
- package/src/services/definitions/usesend.ts +98 -0
- package/tsdown.config.ts +1 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
//#region src/services/definitions/usesend.ts
|
|
2
|
+
const usesendDefinition = {
|
|
3
|
+
id: "usesend",
|
|
4
|
+
name: "useSend",
|
|
5
|
+
description: "Self-hosted sending infrastructure for developers. Email via AWS SES/SNS, GitHub auth, Postgres and Redis. Open-source alternative for transactional and status emails.",
|
|
6
|
+
category: "communication",
|
|
7
|
+
icon: "📧",
|
|
8
|
+
image: "usesend/usesend",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 3e3,
|
|
12
|
+
container: 3e3,
|
|
13
|
+
description: "useSend web UI",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [],
|
|
17
|
+
environment: [
|
|
18
|
+
{
|
|
19
|
+
key: "DATABASE_URL",
|
|
20
|
+
defaultValue: "postgres://user:password@postgresql:5432/usesend",
|
|
21
|
+
secret: true,
|
|
22
|
+
description: "PostgreSQL connection URL",
|
|
23
|
+
required: true
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
key: "REDIS_URL",
|
|
27
|
+
defaultValue: "redis://:password@redis:6379",
|
|
28
|
+
secret: true,
|
|
29
|
+
description: "Redis connection URL",
|
|
30
|
+
required: true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
key: "AWS_ACCESS_KEY",
|
|
34
|
+
defaultValue: "",
|
|
35
|
+
secret: true,
|
|
36
|
+
description: "AWS access key for SES/SNS",
|
|
37
|
+
required: true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: "AWS_SECRET_KEY",
|
|
41
|
+
defaultValue: "",
|
|
42
|
+
secret: true,
|
|
43
|
+
description: "AWS secret key for SES/SNS",
|
|
44
|
+
required: true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
key: "GITHUB_ID",
|
|
48
|
+
defaultValue: "",
|
|
49
|
+
secret: false,
|
|
50
|
+
description: "GitHub OAuth app client ID",
|
|
51
|
+
required: true
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: "GITHUB_SECRET",
|
|
55
|
+
defaultValue: "",
|
|
56
|
+
secret: true,
|
|
57
|
+
description: "GitHub OAuth app client secret",
|
|
58
|
+
required: true
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
key: "NEXTAUTH_URL",
|
|
62
|
+
defaultValue: "https://your-usesend-instance",
|
|
63
|
+
secret: false,
|
|
64
|
+
description: "Public URL of your useSend instance",
|
|
65
|
+
required: true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
key: "NEXTAUTH_SECRET",
|
|
69
|
+
defaultValue: "",
|
|
70
|
+
secret: true,
|
|
71
|
+
description: "Random secret for NextAuth (e.g. openssl rand -base64 32)",
|
|
72
|
+
required: true
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
dependsOn: ["postgresql", "redis"],
|
|
76
|
+
restartPolicy: "unless-stopped",
|
|
77
|
+
networks: ["openclaw-network"],
|
|
78
|
+
skills: [],
|
|
79
|
+
openclawEnvVars: [],
|
|
80
|
+
docsUrl: "https://docs.usesend.com/self-hosting/overview",
|
|
81
|
+
selfHostedDocsUrl: "https://docs.usesend.com/self-hosting/overview",
|
|
82
|
+
tags: [
|
|
83
|
+
"email",
|
|
84
|
+
"ses",
|
|
85
|
+
"smtp",
|
|
86
|
+
"transactional",
|
|
87
|
+
"self-hosted"
|
|
88
|
+
],
|
|
89
|
+
maturity: "stable",
|
|
90
|
+
requires: [],
|
|
91
|
+
recommends: [],
|
|
92
|
+
conflictsWith: [],
|
|
93
|
+
minMemoryMB: 512,
|
|
94
|
+
gpuRequired: false
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
//#endregion
|
|
98
|
+
export { usesendDefinition };
|
|
99
|
+
//# sourceMappingURL=usesend.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usesend.mjs","names":[],"sources":["../../../src/services/definitions/usesend.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const usesendDefinition: ServiceDefinition = {\n\tid: \"usesend\",\n\tname: \"useSend\",\n\tdescription:\n\t\t\"Self-hosted sending infrastructure for developers. Email via AWS SES/SNS, GitHub auth, Postgres and Redis. Open-source alternative for transactional and status emails.\",\n\tcategory: \"communication\",\n\ticon: \"📧\",\n\n\timage: \"usesend/usesend\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3000,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"useSend web UI\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"DATABASE_URL\",\n\t\t\tdefaultValue: \"postgres://user:password@postgresql:5432/usesend\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"PostgreSQL connection URL\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"REDIS_URL\",\n\t\t\tdefaultValue: \"redis://:password@redis:6379\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Redis connection URL\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AWS_ACCESS_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"AWS access key for SES/SNS\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AWS_SECRET_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"AWS secret key for SES/SNS\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"GITHUB_ID\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"GitHub OAuth app client ID\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"GITHUB_SECRET\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"GitHub OAuth app client secret\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"NEXTAUTH_URL\",\n\t\t\tdefaultValue: \"https://your-usesend-instance\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Public URL of your useSend instance\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"NEXTAUTH_SECRET\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Random secret for NextAuth (e.g. openssl rand -base64 32)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\tdependsOn: [\"postgresql\", \"redis\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://docs.usesend.com/self-hosting/overview\",\n\tselfHostedDocsUrl: \"https://docs.usesend.com/self-hosting/overview\",\n\ttags: [\"email\", \"ses\", \"smtp\", \"transactional\", \"self-hosted\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,oBAAuC;CACnD,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,EAAE;CACX,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;CACD,WAAW,CAAC,cAAc,QAAQ;CAClC,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,mBAAmB;CACnB,MAAM;EAAC;EAAS;EAAO;EAAQ;EAAiB;EAAc;CAC9D,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"valkey.d.mts","names":[],"sources":["../../../src/services/definitions/valkey.ts"],"mappings":";;;cAEa,gBAAA,EAAkB,iBAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region src/services/definitions/valkey.ts
|
|
2
|
+
const valkeyDefinition = {
|
|
3
|
+
id: "valkey",
|
|
4
|
+
name: "Valkey",
|
|
5
|
+
description: "Open-source, high-performance key-value store and Redis-compatible fork maintained by the Linux Foundation for caching and data structures.",
|
|
6
|
+
category: "database",
|
|
7
|
+
icon: "🔑",
|
|
8
|
+
image: "valkey/valkey",
|
|
9
|
+
imageTag: "8-alpine",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 6379,
|
|
12
|
+
container: 6379,
|
|
13
|
+
description: "Valkey server port",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [{
|
|
17
|
+
name: "valkey-data",
|
|
18
|
+
containerPath: "/data",
|
|
19
|
+
description: "Persistent Valkey data"
|
|
20
|
+
}],
|
|
21
|
+
environment: [],
|
|
22
|
+
healthcheck: {
|
|
23
|
+
test: "valkey-cli ping",
|
|
24
|
+
interval: "10s",
|
|
25
|
+
timeout: "5s",
|
|
26
|
+
retries: 3
|
|
27
|
+
},
|
|
28
|
+
dependsOn: [],
|
|
29
|
+
restartPolicy: "unless-stopped",
|
|
30
|
+
networks: ["openclaw-network"],
|
|
31
|
+
skills: [],
|
|
32
|
+
openclawEnvVars: [{
|
|
33
|
+
key: "REDIS_HOST",
|
|
34
|
+
defaultValue: "valkey",
|
|
35
|
+
secret: false,
|
|
36
|
+
description: "Redis-compatible hostname for OpenClaw (points to Valkey)",
|
|
37
|
+
required: true
|
|
38
|
+
}, {
|
|
39
|
+
key: "REDIS_PORT",
|
|
40
|
+
defaultValue: "6379",
|
|
41
|
+
secret: false,
|
|
42
|
+
description: "Redis-compatible port for OpenClaw",
|
|
43
|
+
required: true
|
|
44
|
+
}],
|
|
45
|
+
docsUrl: "https://valkey.io/docs/",
|
|
46
|
+
tags: [
|
|
47
|
+
"cache",
|
|
48
|
+
"key-value",
|
|
49
|
+
"redis-compatible"
|
|
50
|
+
],
|
|
51
|
+
maturity: "stable",
|
|
52
|
+
requires: [],
|
|
53
|
+
recommends: [],
|
|
54
|
+
conflictsWith: ["redis"],
|
|
55
|
+
minMemoryMB: 128,
|
|
56
|
+
gpuRequired: false
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { valkeyDefinition };
|
|
61
|
+
//# sourceMappingURL=valkey.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"valkey.mjs","names":[],"sources":["../../../src/services/definitions/valkey.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const valkeyDefinition: ServiceDefinition = {\n\tid: \"valkey\",\n\tname: \"Valkey\",\n\tdescription:\n\t\t\"Open-source, high-performance key-value store and Redis-compatible fork maintained by the Linux Foundation for caching and data structures.\",\n\tcategory: \"database\",\n\ticon: \"🔑\",\n\n\timage: \"valkey/valkey\",\n\timageTag: \"8-alpine\",\n\tports: [\n\t\t{\n\t\t\thost: 6379,\n\t\t\tcontainer: 6379,\n\t\t\tdescription: \"Valkey server port\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"valkey-data\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Persistent Valkey data\",\n\t\t},\n\t],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"valkey-cli ping\",\n\t\tinterval: \"10s\",\n\t\ttimeout: \"5s\",\n\t\tretries: 3,\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"REDIS_HOST\",\n\t\t\tdefaultValue: \"valkey\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Redis-compatible hostname for OpenClaw (points to Valkey)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"REDIS_PORT\",\n\t\t\tdefaultValue: \"6379\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Redis-compatible port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://valkey.io/docs/\",\n\ttags: [\"cache\", \"key-value\", \"redis-compatible\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [\"redis\"],\n\n\tminMemoryMB: 128,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,mBAAsC;CAClD,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,EAAE;CACf,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,CAChB;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CAED,SAAS;CACT,MAAM;EAAC;EAAS;EAAa;EAAmB;CAChD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,CAAC,QAAQ;CAExB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchtower.d.mts","names":[],"sources":["../../../src/services/definitions/watchtower.ts"],"mappings":";;;cAEa,oBAAA,EAAsB,iBAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/services/definitions/watchtower.ts
|
|
2
|
+
const watchtowerDefinition = {
|
|
3
|
+
id: "watchtower",
|
|
4
|
+
name: "Watchtower",
|
|
5
|
+
description: "Automatically update Docker container images when new versions are released.",
|
|
6
|
+
category: "dev-tools",
|
|
7
|
+
icon: "🗼",
|
|
8
|
+
image: "containrrr/watchtower",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [],
|
|
11
|
+
volumes: [],
|
|
12
|
+
environment: [{
|
|
13
|
+
key: "WATCHTOWER_CLEANUP",
|
|
14
|
+
defaultValue: "true",
|
|
15
|
+
secret: false,
|
|
16
|
+
description: "Remove old images after update",
|
|
17
|
+
required: false
|
|
18
|
+
}, {
|
|
19
|
+
key: "WATCHTOWER_POLL_INTERVAL",
|
|
20
|
+
defaultValue: "86400",
|
|
21
|
+
secret: false,
|
|
22
|
+
description: "Check interval in seconds (default 24h)",
|
|
23
|
+
required: false
|
|
24
|
+
}],
|
|
25
|
+
dependsOn: [],
|
|
26
|
+
restartPolicy: "unless-stopped",
|
|
27
|
+
networks: ["openclaw-network"],
|
|
28
|
+
skills: [],
|
|
29
|
+
openclawEnvVars: [],
|
|
30
|
+
docsUrl: "https://containrrr.dev/watchtower/",
|
|
31
|
+
tags: [
|
|
32
|
+
"auto-update",
|
|
33
|
+
"docker",
|
|
34
|
+
"maintenance",
|
|
35
|
+
"devops"
|
|
36
|
+
],
|
|
37
|
+
maturity: "stable",
|
|
38
|
+
requires: [],
|
|
39
|
+
recommends: [],
|
|
40
|
+
conflictsWith: [],
|
|
41
|
+
minMemoryMB: 32,
|
|
42
|
+
gpuRequired: false
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
export { watchtowerDefinition };
|
|
47
|
+
//# sourceMappingURL=watchtower.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchtower.mjs","names":[],"sources":["../../../src/services/definitions/watchtower.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const watchtowerDefinition: ServiceDefinition = {\n\tid: \"watchtower\",\n\tname: \"Watchtower\",\n\tdescription: \"Automatically update Docker container images when new versions are released.\",\n\tcategory: \"dev-tools\",\n\ticon: \"🗼\",\n\n\timage: \"containrrr/watchtower\",\n\timageTag: \"latest\",\n\tports: [],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"WATCHTOWER_CLEANUP\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Remove old images after update\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"WATCHTOWER_POLL_INTERVAL\",\n\t\t\tdefaultValue: \"86400\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Check interval in seconds (default 24h)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://containrrr.dev/watchtower/\",\n\ttags: [\"auto-update\", \"docker\", \"maintenance\", \"devops\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 32,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,uBAA0C;CACtD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,EAAE;CACT,SAAS,EAAE;CACX,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAe;EAAU;EAAe;EAAS;CACxD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weaviate.d.mts","names":[],"sources":["../../../src/services/definitions/weaviate.ts"],"mappings":";;;cAEa,kBAAA,EAAoB,iBAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
//#region src/services/definitions/weaviate.ts
|
|
2
|
+
const weaviateDefinition = {
|
|
3
|
+
id: "weaviate",
|
|
4
|
+
name: "Weaviate",
|
|
5
|
+
description: "Cloud-native vector database for scalable AI applications with built-in vectorization modules, hybrid search, and GraphQL API.",
|
|
6
|
+
category: "vector-db",
|
|
7
|
+
icon: "🔷",
|
|
8
|
+
image: "semitechnologies/weaviate",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 8082,
|
|
12
|
+
container: 8080,
|
|
13
|
+
description: "Weaviate REST and GraphQL API",
|
|
14
|
+
exposed: true
|
|
15
|
+
}, {
|
|
16
|
+
host: 50051,
|
|
17
|
+
container: 50051,
|
|
18
|
+
description: "Weaviate gRPC API",
|
|
19
|
+
exposed: false
|
|
20
|
+
}],
|
|
21
|
+
volumes: [{
|
|
22
|
+
name: "weaviate-data",
|
|
23
|
+
containerPath: "/var/lib/weaviate",
|
|
24
|
+
description: "Persistent Weaviate vector and object storage"
|
|
25
|
+
}],
|
|
26
|
+
environment: [
|
|
27
|
+
{
|
|
28
|
+
key: "QUERY_DEFAULTS__LIMIT",
|
|
29
|
+
defaultValue: "25",
|
|
30
|
+
secret: false,
|
|
31
|
+
description: "Default query result limit",
|
|
32
|
+
required: true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
key: "AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED",
|
|
36
|
+
defaultValue: "true",
|
|
37
|
+
secret: false,
|
|
38
|
+
description: "Enable anonymous access (disable in production)",
|
|
39
|
+
required: true
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
key: "PERSISTENCE_DATA_PATH",
|
|
43
|
+
defaultValue: "/var/lib/weaviate",
|
|
44
|
+
secret: false,
|
|
45
|
+
description: "Path for persistent data storage",
|
|
46
|
+
required: true
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
healthcheck: {
|
|
50
|
+
test: "wget -q --spider http://localhost:8080/v1/.well-known/ready || exit 1",
|
|
51
|
+
interval: "30s",
|
|
52
|
+
timeout: "10s",
|
|
53
|
+
retries: 3,
|
|
54
|
+
startPeriod: "15s"
|
|
55
|
+
},
|
|
56
|
+
dependsOn: [],
|
|
57
|
+
restartPolicy: "unless-stopped",
|
|
58
|
+
networks: ["openclaw-network"],
|
|
59
|
+
skills: [],
|
|
60
|
+
openclawEnvVars: [{
|
|
61
|
+
key: "WEAVIATE_HOST",
|
|
62
|
+
defaultValue: "weaviate",
|
|
63
|
+
secret: false,
|
|
64
|
+
description: "Weaviate hostname for OpenClaw",
|
|
65
|
+
required: true
|
|
66
|
+
}, {
|
|
67
|
+
key: "WEAVIATE_PORT",
|
|
68
|
+
defaultValue: "8080",
|
|
69
|
+
secret: false,
|
|
70
|
+
description: "Weaviate port for OpenClaw",
|
|
71
|
+
required: true
|
|
72
|
+
}],
|
|
73
|
+
docsUrl: "https://weaviate.io/developers/weaviate",
|
|
74
|
+
tags: [
|
|
75
|
+
"vector",
|
|
76
|
+
"graphql",
|
|
77
|
+
"hybrid-search",
|
|
78
|
+
"ai-native"
|
|
79
|
+
],
|
|
80
|
+
maturity: "stable",
|
|
81
|
+
requires: [],
|
|
82
|
+
recommends: [],
|
|
83
|
+
conflictsWith: [],
|
|
84
|
+
minMemoryMB: 1024,
|
|
85
|
+
gpuRequired: false
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
//#endregion
|
|
89
|
+
export { weaviateDefinition };
|
|
90
|
+
//# sourceMappingURL=weaviate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weaviate.mjs","names":[],"sources":["../../../src/services/definitions/weaviate.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const weaviateDefinition: ServiceDefinition = {\n\tid: \"weaviate\",\n\tname: \"Weaviate\",\n\tdescription:\n\t\t\"Cloud-native vector database for scalable AI applications with built-in vectorization modules, hybrid search, and GraphQL API.\",\n\tcategory: \"vector-db\",\n\ticon: \"🔷\",\n\n\timage: \"semitechnologies/weaviate\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 8082,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"Weaviate REST and GraphQL API\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 50051,\n\t\t\tcontainer: 50051,\n\t\t\tdescription: \"Weaviate gRPC API\",\n\t\t\texposed: false,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"weaviate-data\",\n\t\t\tcontainerPath: \"/var/lib/weaviate\",\n\t\t\tdescription: \"Persistent Weaviate vector and object storage\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"QUERY_DEFAULTS__LIMIT\",\n\t\t\tdefaultValue: \"25\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Default query result limit\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED\",\n\t\t\tdefaultValue: \"true\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Enable anonymous access (disable in production)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"PERSISTENCE_DATA_PATH\",\n\t\t\tdefaultValue: \"/var/lib/weaviate\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Path for persistent data storage\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:8080/v1/.well-known/ready || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"WEAVIATE_HOST\",\n\t\t\tdefaultValue: \"weaviate\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Weaviate hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"WEAVIATE_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Weaviate port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://weaviate.io/developers/weaviate\",\n\ttags: [\"vector\", \"graphql\", \"hybrid-search\", \"ai-native\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,qBAAwC;CACpD,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,EACD;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;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,CAChB;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CAED,SAAS;CACT,MAAM;EAAC;EAAU;EAAW;EAAiB;EAAY;CACzD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper.d.mts","names":[],"sources":["../../../src/services/definitions/whisper.ts"],"mappings":";;;cAEa,iBAAA,EAAmB,iBAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//#region src/services/definitions/whisper.ts
|
|
2
|
+
const whisperDefinition = {
|
|
3
|
+
id: "whisper",
|
|
4
|
+
name: "Faster Whisper Server",
|
|
5
|
+
description: "Self-hosted speech-to-text transcription service using the Faster Whisper engine for high-performance audio transcription.",
|
|
6
|
+
category: "ai",
|
|
7
|
+
icon: "🎙️",
|
|
8
|
+
image: "fedirz/faster-whisper-server",
|
|
9
|
+
imageTag: "latest",
|
|
10
|
+
ports: [{
|
|
11
|
+
host: 8001,
|
|
12
|
+
container: 8e3,
|
|
13
|
+
description: "Whisper transcription API",
|
|
14
|
+
exposed: true
|
|
15
|
+
}],
|
|
16
|
+
volumes: [],
|
|
17
|
+
environment: [],
|
|
18
|
+
healthcheck: {
|
|
19
|
+
test: "wget -q --spider http://localhost:8000/health || exit 1",
|
|
20
|
+
interval: "30s",
|
|
21
|
+
timeout: "10s",
|
|
22
|
+
retries: 3,
|
|
23
|
+
startPeriod: "30s"
|
|
24
|
+
},
|
|
25
|
+
dependsOn: [],
|
|
26
|
+
restartPolicy: "unless-stopped",
|
|
27
|
+
networks: ["openclaw-network"],
|
|
28
|
+
skills: [{
|
|
29
|
+
skillId: "whisper-transcribe",
|
|
30
|
+
autoInstall: true
|
|
31
|
+
}],
|
|
32
|
+
openclawEnvVars: [{
|
|
33
|
+
key: "WHISPER_HOST",
|
|
34
|
+
defaultValue: "whisper",
|
|
35
|
+
secret: false,
|
|
36
|
+
description: "Whisper hostname for OpenClaw",
|
|
37
|
+
required: true
|
|
38
|
+
}, {
|
|
39
|
+
key: "WHISPER_PORT",
|
|
40
|
+
defaultValue: "8000",
|
|
41
|
+
secret: false,
|
|
42
|
+
description: "Whisper port for OpenClaw",
|
|
43
|
+
required: true
|
|
44
|
+
}],
|
|
45
|
+
docsUrl: "https://github.com/fedirz/faster-whisper-server",
|
|
46
|
+
tags: [
|
|
47
|
+
"speech-to-text",
|
|
48
|
+
"transcription",
|
|
49
|
+
"audio",
|
|
50
|
+
"whisper"
|
|
51
|
+
],
|
|
52
|
+
maturity: "beta",
|
|
53
|
+
requires: [],
|
|
54
|
+
recommends: [],
|
|
55
|
+
conflictsWith: [],
|
|
56
|
+
minMemoryMB: 1024,
|
|
57
|
+
gpuRequired: false
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
export { whisperDefinition };
|
|
62
|
+
//# sourceMappingURL=whisper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper.mjs","names":[],"sources":["../../../src/services/definitions/whisper.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const whisperDefinition: ServiceDefinition = {\n\tid: \"whisper\",\n\tname: \"Faster Whisper Server\",\n\tdescription:\n\t\t\"Self-hosted speech-to-text transcription service using the Faster Whisper engine for high-performance audio transcription.\",\n\tcategory: \"ai\",\n\ticon: \"🎙️\",\n\n\timage: \"fedirz/faster-whisper-server\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 8001,\n\t\t\tcontainer: 8000,\n\t\t\tdescription: \"Whisper transcription API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:8000/health || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"30s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"whisper-transcribe\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"WHISPER_HOST\",\n\t\t\tdefaultValue: \"whisper\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Whisper hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"WHISPER_PORT\",\n\t\t\tdefaultValue: \"8000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Whisper port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/fedirz/faster-whisper-server\",\n\ttags: [\"speech-to-text\", \"transcription\", \"audio\", \"whisper\"],\n\tmaturity: \"beta\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 1024,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,oBAAuC;CACnD,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,EAAE;CACX,aAAa,EAAE;CACf,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAsB,aAAa;EAAM,CAAC;CAC9D,iBAAiB,CAChB;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CAED,SAAS;CACT,MAAM;EAAC;EAAkB;EAAiB;EAAS;EAAU;CAC7D,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ServiceCategory, ServiceDefinition } from "../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/registry.d.ts
|
|
4
|
+
/** Readonly map of all registered services indexed by ID */
|
|
5
|
+
declare const serviceRegistry: ReadonlyMap<string, ServiceDefinition>;
|
|
6
|
+
/** Look up a service by its unique ID */
|
|
7
|
+
declare function getServiceById(id: string): ServiceDefinition | undefined;
|
|
8
|
+
/** Get all services in a given category */
|
|
9
|
+
declare function getServicesByCategory(category: ServiceCategory): ServiceDefinition[];
|
|
10
|
+
/** Get all registered services */
|
|
11
|
+
declare function getAllServices(): ServiceDefinition[];
|
|
12
|
+
/** Get services matching a specific tag */
|
|
13
|
+
declare function getServicesByTag(tag: string): ServiceDefinition[];
|
|
14
|
+
//#endregion
|
|
15
|
+
export { getAllServices, getServiceById, getServicesByCategory, getServicesByTag, serviceRegistry };
|
|
16
|
+
//# sourceMappingURL=registry.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/services/registry.ts"],"mappings":";;;;cAgBa,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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { allServiceDefinitions } from "./definitions/index.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/registry.ts
|
|
4
|
+
const registryMap = /* @__PURE__ */ new Map();
|
|
5
|
+
for (const def of allServiceDefinitions) {
|
|
6
|
+
if (registryMap.has(def.id)) throw new Error(`Duplicate service definition ID: "${def.id}". Each service must have a unique ID.`);
|
|
7
|
+
registryMap.set(def.id, def);
|
|
8
|
+
}
|
|
9
|
+
/** Readonly map of all registered services indexed by ID */
|
|
10
|
+
const serviceRegistry = registryMap;
|
|
11
|
+
/** Look up a service by its unique ID */
|
|
12
|
+
function getServiceById(id) {
|
|
13
|
+
return registryMap.get(id);
|
|
14
|
+
}
|
|
15
|
+
/** Get all services in a given category */
|
|
16
|
+
function getServicesByCategory(category) {
|
|
17
|
+
return allServiceDefinitions.filter((s) => s.category === category);
|
|
18
|
+
}
|
|
19
|
+
/** Get all registered services */
|
|
20
|
+
function getAllServices() {
|
|
21
|
+
return [...allServiceDefinitions];
|
|
22
|
+
}
|
|
23
|
+
/** Get services matching a specific tag */
|
|
24
|
+
function getServicesByTag(tag) {
|
|
25
|
+
return allServiceDefinitions.filter((s) => s.tags.includes(tag));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { getAllServices, getServiceById, getServicesByCategory, getServicesByTag, serviceRegistry };
|
|
30
|
+
//# sourceMappingURL=registry.mjs.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-Qk6MgAnK.mjs";
|
|
2
|
+
import { getAllServices, getServiceById, getServicesByCategory, getServicesByTag } from "./registry.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/services/registry.test.ts
|
|
5
|
+
describe("service registry", () => {
|
|
6
|
+
it("has at least 60 services registered", () => {
|
|
7
|
+
globalExpect(getAllServices().length).toBeGreaterThanOrEqual(60);
|
|
8
|
+
});
|
|
9
|
+
it("finds redis by ID", () => {
|
|
10
|
+
const redis = getServiceById("redis");
|
|
11
|
+
globalExpect(redis).toBeDefined();
|
|
12
|
+
globalExpect(redis.id).toBe("redis");
|
|
13
|
+
globalExpect(redis.name).toBe("Redis");
|
|
14
|
+
});
|
|
15
|
+
it("returns undefined for unknown ID", () => {
|
|
16
|
+
globalExpect(getServiceById("nonexistent")).toBeUndefined();
|
|
17
|
+
});
|
|
18
|
+
it("finds tailscale and it is mandatory", () => {
|
|
19
|
+
const tailscale = getServiceById("tailscale");
|
|
20
|
+
globalExpect(tailscale).toBeDefined();
|
|
21
|
+
globalExpect(tailscale.id).toBe("tailscale");
|
|
22
|
+
globalExpect(tailscale.mandatory).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
it("finds coolify, dokploy, livekit, and La Suite Meet services by ID", () => {
|
|
25
|
+
globalExpect(getServiceById("coolify")).toBeDefined();
|
|
26
|
+
globalExpect(getServiceById("dokploy")).toBeDefined();
|
|
27
|
+
globalExpect(getServiceById("livekit")).toBeDefined();
|
|
28
|
+
globalExpect(getServiceById("lasuite-meet-backend")).toBeDefined();
|
|
29
|
+
globalExpect(getServiceById("lasuite-meet-frontend")).toBeDefined();
|
|
30
|
+
globalExpect(getServiceById("lasuite-meet-agents")).toBeDefined();
|
|
31
|
+
});
|
|
32
|
+
it("filters by category", () => {
|
|
33
|
+
const databases = getServicesByCategory("database");
|
|
34
|
+
globalExpect(databases.map((s) => s.id)).toContain("redis");
|
|
35
|
+
globalExpect(databases.length).toBeGreaterThanOrEqual(1);
|
|
36
|
+
});
|
|
37
|
+
it("filters by tag", () => {
|
|
38
|
+
const cacheServices = getServicesByTag("cache");
|
|
39
|
+
globalExpect(cacheServices.map((s) => s.id)).toContain("redis");
|
|
40
|
+
globalExpect(cacheServices.length).toBeGreaterThanOrEqual(1);
|
|
41
|
+
});
|
|
42
|
+
it("all service IDs are unique", () => {
|
|
43
|
+
const ids = getAllServices().map((s) => s.id);
|
|
44
|
+
globalExpect(new Set(ids).size).toBe(ids.length);
|
|
45
|
+
});
|
|
46
|
+
it("no two services have the same exposed host port", () => {
|
|
47
|
+
const services = getAllServices();
|
|
48
|
+
const portMap = /* @__PURE__ */ new Map();
|
|
49
|
+
for (const svc of services) for (const port of svc.ports) {
|
|
50
|
+
if (!port.exposed) continue;
|
|
51
|
+
const existing = portMap.get(port.host) ?? [];
|
|
52
|
+
existing.push(svc.id);
|
|
53
|
+
portMap.set(port.host, existing);
|
|
54
|
+
}
|
|
55
|
+
const conflicts = [];
|
|
56
|
+
for (const [port, serviceIds] of portMap) if (serviceIds.length > 1) conflicts.push(`Port ${port} shared by: ${serviceIds.join(", ")}`);
|
|
57
|
+
if (conflicts.length > 0) console.warn(`[informational] ${conflicts.length} port overlap(s) detected:\n ${conflicts.join("\n ")}`);
|
|
58
|
+
globalExpect(portMap.size).toBeGreaterThan(0);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
export { };
|
|
64
|
+
//# sourceMappingURL=registry.test.mjs.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SkillPack } from "../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/skills/registry.d.ts
|
|
4
|
+
declare const skillPackRegistry: ReadonlyMap<string, SkillPack>;
|
|
5
|
+
declare function getSkillPackById(id: string): SkillPack | undefined;
|
|
6
|
+
declare function getAllSkillPacks(): SkillPack[];
|
|
7
|
+
/** Get skill packs whose required services are all present in the given service list */
|
|
8
|
+
declare function getCompatibleSkillPacks(availableServiceIds: string[]): SkillPack[];
|
|
9
|
+
//#endregion
|
|
10
|
+
export { getAllSkillPacks, getCompatibleSkillPacks, getSkillPackById, skillPackRegistry };
|
|
11
|
+
//# sourceMappingURL=registry.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/skills/registry.ts"],"mappings":";;;cA8Ga,iBAAA,EAAmB,WAAA,SAAoB,SAAA;AAAA,iBAEpC,gBAAA,CAAiB,EAAA,WAAa,SAAA;AAAA,iBAI9B,gBAAA,CAAA,GAAoB,SAAA;;iBAKpB,uBAAA,CAAwB,mBAAA,aAAgC,SAAA"}
|