@better-openclaw/core 1.0.9 → 1.0.11

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.
Files changed (75) hide show
  1. package/dist/bare-metal-partition.test.mjs +1 -1
  2. package/dist/composer.snapshot.test.mjs +1 -1
  3. package/dist/composer.test.mjs +1 -1
  4. package/dist/generate.d.mts.map +1 -1
  5. package/dist/generate.mjs +7 -1
  6. package/dist/generate.mjs.map +1 -1
  7. package/dist/generate.test.mjs +1 -1
  8. package/dist/generators/bare-metal-install.test.mjs +1 -1
  9. package/dist/generators/caddy.test.d.mts +1 -0
  10. package/dist/generators/caddy.test.mjs +45 -0
  11. package/dist/generators/caddy.test.mjs.map +1 -0
  12. package/dist/generators/env.test.d.mts +1 -0
  13. package/dist/generators/env.test.mjs +60 -0
  14. package/dist/generators/env.test.mjs.map +1 -0
  15. package/dist/generators/health-check.d.mts +18 -0
  16. package/dist/generators/health-check.d.mts.map +1 -0
  17. package/dist/generators/health-check.mjs +705 -0
  18. package/dist/generators/health-check.mjs.map +1 -0
  19. package/dist/generators/health-check.test.d.mts +1 -0
  20. package/dist/generators/health-check.test.mjs +85 -0
  21. package/dist/generators/health-check.test.mjs.map +1 -0
  22. package/dist/generators/scripts.test.d.mts +1 -0
  23. package/dist/generators/scripts.test.mjs +52 -0
  24. package/dist/generators/scripts.test.mjs.map +1 -0
  25. package/dist/generators/traefik.test.mjs +1 -1
  26. package/dist/generators/traefik.test.mjs.map +1 -1
  27. package/dist/index.d.mts +4 -2
  28. package/dist/index.mjs +3 -1
  29. package/dist/migrations.d.mts.map +1 -1
  30. package/dist/migrations.mjs.map +1 -1
  31. package/dist/migrations.test.mjs +1 -1
  32. package/dist/migrations.test.mjs.map +1 -1
  33. package/dist/presets/registry.test.mjs +1 -1
  34. package/dist/resolver.test.mjs +1 -1
  35. package/dist/schema.test.mjs +1 -1
  36. package/dist/services/definitions/convex.mjs.map +1 -1
  37. package/dist/services/definitions/desktop-environment.mjs.map +1 -1
  38. package/dist/services/definitions/index.d.mts +2 -2
  39. package/dist/services/definitions/index.mjs +3 -3
  40. package/dist/services/definitions/index.mjs.map +1 -1
  41. package/dist/services/definitions/mission-control.mjs.map +1 -1
  42. package/dist/services/definitions/stream-gateway.mjs.map +1 -1
  43. package/dist/services/registry.test.mjs +1 -1
  44. package/dist/skills/registry.d.mts.map +1 -1
  45. package/dist/skills/registry.mjs +498 -6
  46. package/dist/skills/registry.mjs.map +1 -1
  47. package/dist/skills/skill-manifest.d.mts +20 -0
  48. package/dist/skills/skill-manifest.d.mts.map +1 -0
  49. package/dist/skills/skill-manifest.mjs +28 -0
  50. package/dist/skills/skill-manifest.mjs.map +1 -0
  51. package/dist/validator.test.mjs +1 -1
  52. package/dist/version-manager.test.mjs +1 -1
  53. package/dist/version-manager.test.mjs.map +1 -1
  54. package/dist/{vi.2VT5v0um-Qk6MgAnK.mjs → vi.2VT5v0um-YSByewHe.mjs} +5 -5
  55. package/dist/{vi.2VT5v0um-Qk6MgAnK.mjs.map → vi.2VT5v0um-YSByewHe.mjs.map} +1 -1
  56. package/package.json +1 -1
  57. package/src/generate.ts +15 -3
  58. package/src/generators/caddy.test.ts +56 -0
  59. package/src/generators/env.test.ts +73 -0
  60. package/src/generators/health-check.test.ts +118 -0
  61. package/src/generators/health-check.ts +774 -0
  62. package/src/generators/scripts.test.ts +60 -0
  63. package/src/generators/traefik.test.ts +9 -17
  64. package/src/index.ts +12 -6
  65. package/src/migrations.test.ts +1 -1
  66. package/src/migrations.ts +1 -4
  67. package/src/services/definitions/convex.ts +2 -4
  68. package/src/services/definitions/desktop-environment.ts +1 -9
  69. package/src/services/definitions/index.ts +6 -6
  70. package/src/services/definitions/mission-control.ts +2 -4
  71. package/src/services/definitions/stream-gateway.ts +1 -2
  72. package/src/skills/registry.ts +336 -6
  73. package/src/skills/skill-manifest.ts +52 -0
  74. package/src/version-manager.test.ts +15 -4
  75. package/tsdown.config.ts +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/definitions/index.ts"],"sourcesContent":["export { anythingLlmDefinition } from \"./anything-llm.js\";\nexport { appflowyDefinition } from \"./appflowy.js\";\nexport { beszelDefinition } from \"./beszel.js\";\nexport { browserlessDefinition } from \"./browserless.js\";\nexport { caddyDefinition } from \"./caddy.js\";\nexport { calComDefinition } from \"./cal-com.js\";\nexport { chromadbDefinition } from \"./chromadb.js\";\nexport { claudeCodeDefinition } from \"./claude-code.js\";\nexport { codeServerDefinition } from \"./code-server.js\";\nexport { comfyuiDefinition } from \"./comfyui.js\";\nexport { convexDefinition } from \"./convex.js\";\nexport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nexport { codexDefinition } from \"./codex.js\";\nexport { coolifyDefinition } from \"./coolify.js\";\nexport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nexport { difyDefinition } from \"./dify.js\";\nexport { docsgptDefinition } from \"./docsgpt.js\";\nexport { dokployDefinition } from \"./dokploy.js\";\nexport { dozzleDefinition } from \"./dozzle.js\";\nexport { ffmpegDefinition } from \"./ffmpeg.js\";\nexport { flowiseDefinition } from \"./flowise.js\";\nexport { geminiCliDefinition } from \"./gemini-cli.js\";\nexport { giteaDefinition } from \"./gitea.js\";\nexport { gotifyDefinition } from \"./gotify.js\";\nexport { grafanaDefinition } from \"./grafana.js\";\nexport { kimiDefinition } from \"./kimi.js\";\nexport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nexport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nexport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nexport { librechatDefinition } from \"./librechat.js\";\nexport { lightpandaDefinition } from \"./lightpanda.js\";\nexport { litellmDefinition } from \"./litellm.js\";\nexport { livekitDefinition } from \"./livekit.js\";\nexport { matomoDefinition } from \"./matomo.js\";\nexport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nexport { mattermostDefinition } from \"./mattermost.js\";\nexport { meilisearchDefinition } from \"./meilisearch.js\";\nexport { missionControlDefinition } from \"./mission-control.js\";\nexport { minioDefinition } from \"./minio.js\";\nexport { mixpostDefinition } from \"./mixpost.js\";\nexport { motionCanvasDefinition } from \"./motion-canvas.js\";\nexport { n8nDefinition } from \"./n8n.js\";\nexport { neo4jDefinition } from \"./neo4j.js\";\nexport { nocodbDefinition } from \"./nocodb.js\";\nexport { ntfyDefinition } from \"./ntfy.js\";\nexport { ollamaDefinition } from \"./ollama.js\";\nexport { openWebuiDefinition } from \"./open-webui.js\";\nexport { opencodeDefinition } from \"./opencode.js\";\nexport { openpanelDefinition } from \"./openpanel.js\";\nexport { outlineDefinition } from \"./outline.js\";\nexport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nexport { playwrightServerDefinition } from \"./playwright-server.js\";\nexport { portainerDefinition } from \"./portainer.js\";\nexport { postgresqlDefinition } from \"./postgresql.js\";\nexport { postizDefinition } from \"./postiz.js\";\nexport { prometheusDefinition } from \"./prometheus.js\";\nexport { qdrantDefinition } from \"./qdrant.js\";\nexport { redisDefinition } from \"./redis.js\";\nexport { remotionDefinition } from \"./remotion.js\";\nexport { rocketchatDefinition } from \"./rocketchat.js\";\nexport { searxngDefinition } from \"./searxng.js\";\nexport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nexport { steelBrowserDefinition } from \"./steel-browser.js\";\nexport { streamGatewayDefinition } from \"./stream-gateway.js\";\nexport { tailscaleDefinition } from \"./tailscale.js\";\nexport { temporalDefinition } from \"./temporal.js\";\nexport { traefikDefinition } from \"./traefik.js\";\nexport { umamiDefinition } from \"./umami.js\";\nexport { usesendDefinition } from \"./usesend.js\";\nexport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nexport { valkeyDefinition } from \"./valkey.js\";\nexport { watchtowerDefinition } from \"./watchtower.js\";\nexport { weaviateDefinition } from \"./weaviate.js\";\nexport { whisperDefinition } from \"./whisper.js\";\nexport { xyopsDefinition } from \"./xyops.js\";\n\nimport type { ServiceDefinition } from \"../../types.js\";\nimport { anythingLlmDefinition } from \"./anything-llm.js\";\nimport { appflowyDefinition } from \"./appflowy.js\";\nimport { beszelDefinition } from \"./beszel.js\";\nimport { browserlessDefinition } from \"./browserless.js\";\nimport { caddyDefinition } from \"./caddy.js\";\nimport { calComDefinition } from \"./cal-com.js\";\nimport { chromadbDefinition } from \"./chromadb.js\";\nimport { claudeCodeDefinition } from \"./claude-code.js\";\nimport { codeServerDefinition } from \"./code-server.js\";\nimport { comfyuiDefinition } from \"./comfyui.js\";\nimport { convexDefinition } from \"./convex.js\";\nimport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nimport { codexDefinition } from \"./codex.js\";\nimport { coolifyDefinition } from \"./coolify.js\";\nimport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nimport { difyDefinition } from \"./dify.js\";\nimport { docsgptDefinition } from \"./docsgpt.js\";\nimport { dokployDefinition } from \"./dokploy.js\";\nimport { dozzleDefinition } from \"./dozzle.js\";\nimport { ffmpegDefinition } from \"./ffmpeg.js\";\nimport { flowiseDefinition } from \"./flowise.js\";\nimport { geminiCliDefinition } from \"./gemini-cli.js\";\nimport { giteaDefinition } from \"./gitea.js\";\nimport { gotifyDefinition } from \"./gotify.js\";\nimport { grafanaDefinition } from \"./grafana.js\";\nimport { kimiDefinition } from \"./kimi.js\";\nimport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nimport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nimport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nimport { librechatDefinition } from \"./librechat.js\";\nimport { lightpandaDefinition } from \"./lightpanda.js\";\nimport { litellmDefinition } from \"./litellm.js\";\nimport { livekitDefinition } from \"./livekit.js\";\nimport { matomoDefinition } from \"./matomo.js\";\nimport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nimport { mattermostDefinition } from \"./mattermost.js\";\nimport { meilisearchDefinition } from \"./meilisearch.js\";\nimport { missionControlDefinition } from \"./mission-control.js\";\nimport { minioDefinition } from \"./minio.js\";\nimport { mixpostDefinition } from \"./mixpost.js\";\nimport { motionCanvasDefinition } from \"./motion-canvas.js\";\nimport { n8nDefinition } from \"./n8n.js\";\nimport { neo4jDefinition } from \"./neo4j.js\";\nimport { nocodbDefinition } from \"./nocodb.js\";\nimport { ntfyDefinition } from \"./ntfy.js\";\nimport { ollamaDefinition } from \"./ollama.js\";\nimport { openWebuiDefinition } from \"./open-webui.js\";\nimport { opencodeDefinition } from \"./opencode.js\";\nimport { openpanelDefinition } from \"./openpanel.js\";\nimport { outlineDefinition } from \"./outline.js\";\nimport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nimport { playwrightServerDefinition } from \"./playwright-server.js\";\nimport { portainerDefinition } from \"./portainer.js\";\nimport { postgresqlDefinition } from \"./postgresql.js\";\nimport { postizDefinition } from \"./postiz.js\";\nimport { prometheusDefinition } from \"./prometheus.js\";\nimport { qdrantDefinition } from \"./qdrant.js\";\nimport { redisDefinition } from \"./redis.js\";\nimport { remotionDefinition } from \"./remotion.js\";\nimport { rocketchatDefinition } from \"./rocketchat.js\";\nimport { searxngDefinition } from \"./searxng.js\";\nimport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nimport { steelBrowserDefinition } from \"./steel-browser.js\";\nimport { streamGatewayDefinition } from \"./stream-gateway.js\";\nimport { tailscaleDefinition } from \"./tailscale.js\";\nimport { temporalDefinition } from \"./temporal.js\";\nimport { traefikDefinition } from \"./traefik.js\";\nimport { umamiDefinition } from \"./umami.js\";\nimport { usesendDefinition } from \"./usesend.js\";\nimport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nimport { valkeyDefinition } from \"./valkey.js\";\nimport { watchtowerDefinition } from \"./watchtower.js\";\nimport { weaviateDefinition } from \"./weaviate.js\";\nimport { whisperDefinition } from \"./whisper.js\";\nimport { xyopsDefinition } from \"./xyops.js\";\n\nexport const allServiceDefinitions: ServiceDefinition[] = [\n\tredisDefinition,\n\tqdrantDefinition,\n\tn8nDefinition,\n\tffmpegDefinition,\n\tminioDefinition,\n\tpostgresqlDefinition,\n\tcaddyDefinition,\n\ttraefikDefinition,\n\tuptimeKumaDefinition,\n\tgrafanaDefinition,\n\tprometheusDefinition,\n\tbrowserlessDefinition,\n\tsearxngDefinition,\n\tmeilisearchDefinition,\n\tollamaDefinition,\n\twhisperDefinition,\n\tchromadbDefinition,\n\tweaviateDefinition,\n\tvalkeyDefinition,\n\tgotifyDefinition,\n\tntfyDefinition,\n\tremotionDefinition,\n\tmotionCanvasDefinition,\n\ttemporalDefinition,\n\toutlineDefinition,\n\tdocsgptDefinition,\n\tpaperlessNgxDefinition,\n\tnocodbDefinition,\n\tappflowyDefinition,\n\tmatrixSynapseDefinition,\n\trocketchatDefinition,\n\tmattermostDefinition,\n\tstableDiffusionDefinition,\n\tcomfyuiDefinition,\n\tplaywrightServerDefinition,\n\topenWebuiDefinition,\n\tlibrechatDefinition,\n\tanythingLlmDefinition,\n\tdifyDefinition,\n\tflowiseDefinition,\n\tlitellmDefinition,\n\tgiteaDefinition,\n\tcodeServerDefinition,\n\tportainerDefinition,\n\twatchtowerDefinition,\n\tdozzleDefinition,\n\tbeszelDefinition,\n\tconvexDefinition,\n\tconvexDashboardDefinition,\n\tclaudeCodeDefinition,\n\topencodeDefinition,\n\tcodexDefinition,\n\tgeminiCliDefinition,\n\tkimiDefinition,\n\tpostizDefinition,\n\tmixpostDefinition,\n\tmatomoDefinition,\n\tumamiDefinition,\n\tusesendDefinition,\n\tmissionControlDefinition,\n\topenpanelDefinition,\n\tlightpandaDefinition,\n\tsteelBrowserDefinition,\n\tcoolifyDefinition,\n\tdokployDefinition,\n\ttailscaleDefinition,\n\tlivekitDefinition,\n\tlasuiteMeetBackendDefinition,\n\tlasuiteMeetFrontendDefinition,\n\tlasuiteMeetAgentsDefinition,\n\tdesktopEnvironmentDefinition,\n\tstreamGatewayDefinition,\n\tneo4jDefinition,\n\tcalComDefinition,\n\txyopsDefinition,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA,MAAa,wBAA6C;CACzD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/definitions/index.ts"],"sourcesContent":["export { anythingLlmDefinition } from \"./anything-llm.js\";\nexport { appflowyDefinition } from \"./appflowy.js\";\nexport { beszelDefinition } from \"./beszel.js\";\nexport { browserlessDefinition } from \"./browserless.js\";\nexport { caddyDefinition } from \"./caddy.js\";\nexport { calComDefinition } from \"./cal-com.js\";\nexport { chromadbDefinition } from \"./chromadb.js\";\nexport { claudeCodeDefinition } from \"./claude-code.js\";\nexport { codeServerDefinition } from \"./code-server.js\";\nexport { codexDefinition } from \"./codex.js\";\nexport { comfyuiDefinition } from \"./comfyui.js\";\nexport { convexDefinition } from \"./convex.js\";\nexport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nexport { coolifyDefinition } from \"./coolify.js\";\nexport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nexport { difyDefinition } from \"./dify.js\";\nexport { docsgptDefinition } from \"./docsgpt.js\";\nexport { dokployDefinition } from \"./dokploy.js\";\nexport { dozzleDefinition } from \"./dozzle.js\";\nexport { ffmpegDefinition } from \"./ffmpeg.js\";\nexport { flowiseDefinition } from \"./flowise.js\";\nexport { geminiCliDefinition } from \"./gemini-cli.js\";\nexport { giteaDefinition } from \"./gitea.js\";\nexport { gotifyDefinition } from \"./gotify.js\";\nexport { grafanaDefinition } from \"./grafana.js\";\nexport { kimiDefinition } from \"./kimi.js\";\nexport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nexport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nexport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nexport { librechatDefinition } from \"./librechat.js\";\nexport { lightpandaDefinition } from \"./lightpanda.js\";\nexport { litellmDefinition } from \"./litellm.js\";\nexport { livekitDefinition } from \"./livekit.js\";\nexport { matomoDefinition } from \"./matomo.js\";\nexport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nexport { mattermostDefinition } from \"./mattermost.js\";\nexport { meilisearchDefinition } from \"./meilisearch.js\";\nexport { minioDefinition } from \"./minio.js\";\nexport { missionControlDefinition } from \"./mission-control.js\";\nexport { mixpostDefinition } from \"./mixpost.js\";\nexport { motionCanvasDefinition } from \"./motion-canvas.js\";\nexport { n8nDefinition } from \"./n8n.js\";\nexport { neo4jDefinition } from \"./neo4j.js\";\nexport { nocodbDefinition } from \"./nocodb.js\";\nexport { ntfyDefinition } from \"./ntfy.js\";\nexport { ollamaDefinition } from \"./ollama.js\";\nexport { openWebuiDefinition } from \"./open-webui.js\";\nexport { opencodeDefinition } from \"./opencode.js\";\nexport { openpanelDefinition } from \"./openpanel.js\";\nexport { outlineDefinition } from \"./outline.js\";\nexport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nexport { playwrightServerDefinition } from \"./playwright-server.js\";\nexport { portainerDefinition } from \"./portainer.js\";\nexport { postgresqlDefinition } from \"./postgresql.js\";\nexport { postizDefinition } from \"./postiz.js\";\nexport { prometheusDefinition } from \"./prometheus.js\";\nexport { qdrantDefinition } from \"./qdrant.js\";\nexport { redisDefinition } from \"./redis.js\";\nexport { remotionDefinition } from \"./remotion.js\";\nexport { rocketchatDefinition } from \"./rocketchat.js\";\nexport { searxngDefinition } from \"./searxng.js\";\nexport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nexport { steelBrowserDefinition } from \"./steel-browser.js\";\nexport { streamGatewayDefinition } from \"./stream-gateway.js\";\nexport { tailscaleDefinition } from \"./tailscale.js\";\nexport { temporalDefinition } from \"./temporal.js\";\nexport { traefikDefinition } from \"./traefik.js\";\nexport { umamiDefinition } from \"./umami.js\";\nexport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nexport { usesendDefinition } from \"./usesend.js\";\nexport { valkeyDefinition } from \"./valkey.js\";\nexport { watchtowerDefinition } from \"./watchtower.js\";\nexport { weaviateDefinition } from \"./weaviate.js\";\nexport { whisperDefinition } from \"./whisper.js\";\nexport { xyopsDefinition } from \"./xyops.js\";\n\nimport type { ServiceDefinition } from \"../../types.js\";\nimport { anythingLlmDefinition } from \"./anything-llm.js\";\nimport { appflowyDefinition } from \"./appflowy.js\";\nimport { beszelDefinition } from \"./beszel.js\";\nimport { browserlessDefinition } from \"./browserless.js\";\nimport { caddyDefinition } from \"./caddy.js\";\nimport { calComDefinition } from \"./cal-com.js\";\nimport { chromadbDefinition } from \"./chromadb.js\";\nimport { claudeCodeDefinition } from \"./claude-code.js\";\nimport { codeServerDefinition } from \"./code-server.js\";\nimport { codexDefinition } from \"./codex.js\";\nimport { comfyuiDefinition } from \"./comfyui.js\";\nimport { convexDefinition } from \"./convex.js\";\nimport { convexDashboardDefinition } from \"./convex-dashboard.js\";\nimport { coolifyDefinition } from \"./coolify.js\";\nimport { desktopEnvironmentDefinition } from \"./desktop-environment.js\";\nimport { difyDefinition } from \"./dify.js\";\nimport { docsgptDefinition } from \"./docsgpt.js\";\nimport { dokployDefinition } from \"./dokploy.js\";\nimport { dozzleDefinition } from \"./dozzle.js\";\nimport { ffmpegDefinition } from \"./ffmpeg.js\";\nimport { flowiseDefinition } from \"./flowise.js\";\nimport { geminiCliDefinition } from \"./gemini-cli.js\";\nimport { giteaDefinition } from \"./gitea.js\";\nimport { gotifyDefinition } from \"./gotify.js\";\nimport { grafanaDefinition } from \"./grafana.js\";\nimport { kimiDefinition } from \"./kimi.js\";\nimport { lasuiteMeetAgentsDefinition } from \"./lasuite-meet-agents.js\";\nimport { lasuiteMeetBackendDefinition } from \"./lasuite-meet-backend.js\";\nimport { lasuiteMeetFrontendDefinition } from \"./lasuite-meet-frontend.js\";\nimport { librechatDefinition } from \"./librechat.js\";\nimport { lightpandaDefinition } from \"./lightpanda.js\";\nimport { litellmDefinition } from \"./litellm.js\";\nimport { livekitDefinition } from \"./livekit.js\";\nimport { matomoDefinition } from \"./matomo.js\";\nimport { matrixSynapseDefinition } from \"./matrix-synapse.js\";\nimport { mattermostDefinition } from \"./mattermost.js\";\nimport { meilisearchDefinition } from \"./meilisearch.js\";\nimport { minioDefinition } from \"./minio.js\";\nimport { missionControlDefinition } from \"./mission-control.js\";\nimport { mixpostDefinition } from \"./mixpost.js\";\nimport { motionCanvasDefinition } from \"./motion-canvas.js\";\nimport { n8nDefinition } from \"./n8n.js\";\nimport { neo4jDefinition } from \"./neo4j.js\";\nimport { nocodbDefinition } from \"./nocodb.js\";\nimport { ntfyDefinition } from \"./ntfy.js\";\nimport { ollamaDefinition } from \"./ollama.js\";\nimport { openWebuiDefinition } from \"./open-webui.js\";\nimport { opencodeDefinition } from \"./opencode.js\";\nimport { openpanelDefinition } from \"./openpanel.js\";\nimport { outlineDefinition } from \"./outline.js\";\nimport { paperlessNgxDefinition } from \"./paperless-ngx.js\";\nimport { playwrightServerDefinition } from \"./playwright-server.js\";\nimport { portainerDefinition } from \"./portainer.js\";\nimport { postgresqlDefinition } from \"./postgresql.js\";\nimport { postizDefinition } from \"./postiz.js\";\nimport { prometheusDefinition } from \"./prometheus.js\";\nimport { qdrantDefinition } from \"./qdrant.js\";\nimport { redisDefinition } from \"./redis.js\";\nimport { remotionDefinition } from \"./remotion.js\";\nimport { rocketchatDefinition } from \"./rocketchat.js\";\nimport { searxngDefinition } from \"./searxng.js\";\nimport { stableDiffusionDefinition } from \"./stable-diffusion.js\";\nimport { steelBrowserDefinition } from \"./steel-browser.js\";\nimport { streamGatewayDefinition } from \"./stream-gateway.js\";\nimport { tailscaleDefinition } from \"./tailscale.js\";\nimport { temporalDefinition } from \"./temporal.js\";\nimport { traefikDefinition } from \"./traefik.js\";\nimport { umamiDefinition } from \"./umami.js\";\nimport { uptimeKumaDefinition } from \"./uptime-kuma.js\";\nimport { usesendDefinition } from \"./usesend.js\";\nimport { valkeyDefinition } from \"./valkey.js\";\nimport { watchtowerDefinition } from \"./watchtower.js\";\nimport { weaviateDefinition } from \"./weaviate.js\";\nimport { whisperDefinition } from \"./whisper.js\";\nimport { xyopsDefinition } from \"./xyops.js\";\n\nexport const allServiceDefinitions: ServiceDefinition[] = [\n\tredisDefinition,\n\tqdrantDefinition,\n\tn8nDefinition,\n\tffmpegDefinition,\n\tminioDefinition,\n\tpostgresqlDefinition,\n\tcaddyDefinition,\n\ttraefikDefinition,\n\tuptimeKumaDefinition,\n\tgrafanaDefinition,\n\tprometheusDefinition,\n\tbrowserlessDefinition,\n\tsearxngDefinition,\n\tmeilisearchDefinition,\n\tollamaDefinition,\n\twhisperDefinition,\n\tchromadbDefinition,\n\tweaviateDefinition,\n\tvalkeyDefinition,\n\tgotifyDefinition,\n\tntfyDefinition,\n\tremotionDefinition,\n\tmotionCanvasDefinition,\n\ttemporalDefinition,\n\toutlineDefinition,\n\tdocsgptDefinition,\n\tpaperlessNgxDefinition,\n\tnocodbDefinition,\n\tappflowyDefinition,\n\tmatrixSynapseDefinition,\n\trocketchatDefinition,\n\tmattermostDefinition,\n\tstableDiffusionDefinition,\n\tcomfyuiDefinition,\n\tplaywrightServerDefinition,\n\topenWebuiDefinition,\n\tlibrechatDefinition,\n\tanythingLlmDefinition,\n\tdifyDefinition,\n\tflowiseDefinition,\n\tlitellmDefinition,\n\tgiteaDefinition,\n\tcodeServerDefinition,\n\tportainerDefinition,\n\twatchtowerDefinition,\n\tdozzleDefinition,\n\tbeszelDefinition,\n\tconvexDefinition,\n\tconvexDashboardDefinition,\n\tclaudeCodeDefinition,\n\topencodeDefinition,\n\tcodexDefinition,\n\tgeminiCliDefinition,\n\tkimiDefinition,\n\tpostizDefinition,\n\tmixpostDefinition,\n\tmatomoDefinition,\n\tumamiDefinition,\n\tusesendDefinition,\n\tmissionControlDefinition,\n\topenpanelDefinition,\n\tlightpandaDefinition,\n\tsteelBrowserDefinition,\n\tcoolifyDefinition,\n\tdokployDefinition,\n\ttailscaleDefinition,\n\tlivekitDefinition,\n\tlasuiteMeetBackendDefinition,\n\tlasuiteMeetFrontendDefinition,\n\tlasuiteMeetAgentsDefinition,\n\tdesktopEnvironmentDefinition,\n\tstreamGatewayDefinition,\n\tneo4jDefinition,\n\tcalComDefinition,\n\txyopsDefinition,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA,MAAa,wBAA6C;CACzD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mission-control.mjs","names":[],"sources":["../../../src/services/definitions/mission-control.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const missionControlDefinition: ServiceDefinition = {\n\tid: \"mission-control\",\n\tname: \"Mission Control\",\n\tdescription:\n\t\t\"Real-time agent oversight dashboard for OpenClaw. Kanban task board, live activity feed, document browser, and message threads — powered by Convex.\",\n\tcategory: \"dev-tools\",\n\ticon: \"🛸\",\n\n\timage: \"ghcr.io/bidewio/mission-control\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3660,\n\t\t\tcontainer: 3660,\n\t\t\tdescription: \"Mission Control Web UI\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"VITE_CONVEX_URL\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Convex backend URL as seen from the browser (build-time, embedded in JS bundle)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_URL\",\n\t\t\tdefaultValue: \"http://convex:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Internal Docker URL for pushing Convex functions during build\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_ADMIN_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Admin key for the self-hosted Convex backend. Generate with: docker compose exec convex ./generate_admin_key.sh\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\tdependsOn: [\"convex\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl:\n\t\t\"https://github.com/bidewio/better-openclaw/tree/main/packages/mission-control\",\n\tselfHostedDocsUrl:\n\t\t\"https://github.com/bidewio/better-openclaw/tree/main/packages/mission-control\",\n\ttags: [\"openclaw\", \"dashboard\", \"monitoring\", \"agents\", \"analytics\", \"convex\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"convex\"],\n\trecommends: [\"convex-dashboard\"],\n\tconflictsWith: [],\n\tmandatory: true,\n\tremovalWarning:\n\t\t\"Mission Control is the primary dashboard for monitoring your OpenClaw agents. Removing it will eliminate real-time agent oversight, task management, and activity tracking.\",\n\n\tminMemoryMB: 128,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,2BAA8C;CAC1D,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,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;CACD,WAAW,CAAC,SAAS;CACrB,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SACC;CACD,mBACC;CACD,MAAM;EAAC;EAAY;EAAa;EAAc;EAAU;EAAa;EAAS;CAC9E,UAAU;CAEV,UAAU,CAAC,SAAS;CACpB,YAAY,CAAC,mBAAmB;CAChC,eAAe,EAAE;CACjB,WAAW;CACX,gBACC;CAED,aAAa;CACb,aAAa;CACb"}
1
+ {"version":3,"file":"mission-control.mjs","names":[],"sources":["../../../src/services/definitions/mission-control.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const missionControlDefinition: ServiceDefinition = {\n\tid: \"mission-control\",\n\tname: \"Mission Control\",\n\tdescription:\n\t\t\"Real-time agent oversight dashboard for OpenClaw. Kanban task board, live activity feed, document browser, and message threads — powered by Convex.\",\n\tcategory: \"dev-tools\",\n\ticon: \"🛸\",\n\n\timage: \"ghcr.io/bidewio/mission-control\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3660,\n\t\t\tcontainer: 3660,\n\t\t\tdescription: \"Mission Control Web UI\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"VITE_CONVEX_URL\",\n\t\t\tdefaultValue: \"http://127.0.0.1:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription:\n\t\t\t\t\"Convex backend URL as seen from the browser (build-time, embedded in JS bundle)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_URL\",\n\t\t\tdefaultValue: \"http://convex:3210\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Internal Docker URL for pushing Convex functions during build\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CONVEX_SELF_HOSTED_ADMIN_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Admin key for the self-hosted Convex backend. Generate with: docker compose exec convex ./generate_admin_key.sh\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\tdependsOn: [\"convex\"],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://github.com/bidewio/better-openclaw/tree/main/packages/mission-control\",\n\tselfHostedDocsUrl:\n\t\t\"https://github.com/bidewio/better-openclaw/tree/main/packages/mission-control\",\n\ttags: [\"openclaw\", \"dashboard\", \"monitoring\", \"agents\", \"analytics\", \"convex\"],\n\tmaturity: \"stable\",\n\n\trequires: [\"convex\"],\n\trecommends: [\"convex-dashboard\"],\n\tconflictsWith: [],\n\tmandatory: true,\n\tremovalWarning:\n\t\t\"Mission Control is the primary dashboard for monitoring your OpenClaw agents. Removing it will eliminate real-time agent oversight, task management, and activity tracking.\",\n\n\tminMemoryMB: 128,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,2BAA8C;CAC1D,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,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;CACD,WAAW,CAAC,SAAS;CACrB,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,mBACC;CACD,MAAM;EAAC;EAAY;EAAa;EAAc;EAAU;EAAa;EAAS;CAC9E,UAAU;CAEV,UAAU,CAAC,SAAS;CACpB,YAAY,CAAC,mBAAmB;CAChC,eAAe,EAAE;CACjB,WAAW;CACX,gBACC;CAED,aAAa;CACb,aAAa;CACb"}
@@ -1 +1 @@
1
- {"version":3,"file":"stream-gateway.mjs","names":[],"sources":["../../../src/services/definitions/stream-gateway.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const streamGatewayDefinition: ServiceDefinition = {\n\tid: \"stream-gateway\",\n\tname: \"Stream Gateway\",\n\tdescription:\n\t\t\"NGINX-RTMP relay server that receives a local RTMP stream (e.g. from OBS in the desktop-environment) and fans it out to YouTube, Twitch, TikTok, and Telegram simultaneously. Also serves an HLS preview on HTTP for local viewing.\",\n\tcategory: \"streaming\",\n\ticon: \"📺\",\n\n\timage: \"tiangolo/nginx-rtmp\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 1935,\n\t\t\tcontainer: 1935,\n\t\t\tdescription: \"RTMP ingest (receives stream from OBS or ffmpeg)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"HTTP server for HLS preview and stats\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"stream-gateway-hls\",\n\t\t\tcontainerPath: \"/tmp/hls\",\n\t\t\tdescription: \"HLS segment storage for live preview playback\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"YOUTUBE_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"YouTube Live stream key (leave empty to skip YouTube relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TWITCH_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Twitch stream key (leave empty to skip Twitch relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TIKTOK_STREAM_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Full TikTok RTMP URL from TikTok Studio (leave empty to skip TikTok relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TELEGRAM_STREAM_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Full Telegram RTMPS URL including stream key (leave empty to skip Telegram relay)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:8080/health || exit 1\",\n\t\tinterval: \"15s\",\n\t\ttimeout: \"5s\",\n\t\tretries: 3,\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tdeploy: {\n\t\tresources: {\n\t\t\tlimits: { cpus: \"2.0\", memory: \"2G\" },\n\t\t\treservations: { cpus: \"0.5\", memory: \"512M\" },\n\t\t},\n\t},\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_HOST\",\n\t\t\tdefaultValue: \"stream-gateway\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Hostname of the stream-gateway container\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_RTMP_PORT\",\n\t\t\tdefaultValue: \"1935\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"RTMP ingest port on the stream-gateway\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_HLS_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"HTTP port for HLS preview on the stream-gateway\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/tiangolo/nginx-rtmp-docker\",\n\ttags: [\n\t\t\"streaming\",\n\t\t\"rtmp\",\n\t\t\"hls\",\n\t\t\"relay\",\n\t\t\"youtube\",\n\t\t\"twitch\",\n\t\t\"tiktok\",\n\t\t\"telegram\",\n\t\t\"obs\",\n\t\t\"nginx\",\n\t],\n\tmaturity: \"experimental\",\n\n\trequires: [],\n\trecommends: [\"desktop-environment\"],\n\tconflictsWith: [],\n\n\tremovalWarning:\n\t\t\"⚠️ STREAMING KEYS REQUIRED: To relay to platforms you must provide at least one stream key. Without any keys configured the gateway will still accept RTMP input and serve HLS locally but nothing will be forwarded.\",\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n\n\tnativeSupported: true,\n\tnativeRecipes: [\n\t\t{\n\t\t\tplatform: \"linux\",\n\t\t\tinstallSteps: [\n\t\t\t\t\"command -v nginx >/dev/null 2>&1 || (command -v apt-get >/dev/null 2>&1 && sudo apt-get update -qq && sudo apt-get install -y -qq nginx libnginx-mod-rtmp ffmpeg)\",\n\t\t\t\t\"command -v nginx >/dev/null 2>&1 || (command -v dnf >/dev/null 2>&1 && sudo dnf install -y nginx nginx-mod-rtmp ffmpeg)\",\n\t\t\t],\n\t\t\tstartCommand: \"sudo systemctl start nginx\",\n\t\t\tstopCommand: \"sudo systemctl stop nginx\",\n\t\t\tconfigPath: \"/etc/nginx/nginx.conf\",\n\t\t\tconfigTemplate:\n\t\t\t\t'# Generated for OpenClaw bare-metal\\nworker_processes auto;\\nrtmp_auto_push on;\\n\\nevents { worker_connections 1024; }\\n\\nrtmp {\\n server {\\n listen 1935;\\n chunk_size 4096;\\n application live {\\n live on;\\n record off;\\n hls on;\\n hls_path /tmp/hls;\\n hls_fragment 3;\\n hls_playlist_length 60;\\n }\\n }\\n}\\n\\nhttp {\\n server {\\n listen 8080;\\n location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; }\\n location /health { return 200 \"OK\"; }\\n }\\n}\\n',\n\t\t\tsystemdUnit: \"nginx\",\n\t\t},\n\t],\n};\n"],"mappings":";AAEA,MAAa,0BAA6C;CACzD,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,aACC;GACD,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EACP,WAAW;EACV,QAAQ;GAAE,MAAM;GAAO,QAAQ;GAAM;EACrC,cAAc;GAAE,MAAM;GAAO,QAAQ;GAAQ;EAC7C,EACD;CAED,QAAQ,EAAE;CACV,iBAAiB;EAChB;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;CAED,SAAS;CACT,MAAM;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,sBAAsB;CACnC,eAAe,EAAE;CAEjB,gBACC;CACD,aAAa;CACb,aAAa;CAEb,iBAAiB;CACjB,eAAe,CACd;EACC,UAAU;EACV,cAAc,CACb,qKACA,0HACA;EACD,cAAc;EACd,aAAa;EACb,YAAY;EACZ,gBACC;EACD,aAAa;EACb,CACD;CACD"}
1
+ {"version":3,"file":"stream-gateway.mjs","names":[],"sources":["../../../src/services/definitions/stream-gateway.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const streamGatewayDefinition: ServiceDefinition = {\n\tid: \"stream-gateway\",\n\tname: \"Stream Gateway\",\n\tdescription:\n\t\t\"NGINX-RTMP relay server that receives a local RTMP stream (e.g. from OBS in the desktop-environment) and fans it out to YouTube, Twitch, TikTok, and Telegram simultaneously. Also serves an HLS preview on HTTP for local viewing.\",\n\tcategory: \"streaming\",\n\ticon: \"📺\",\n\n\timage: \"tiangolo/nginx-rtmp\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 1935,\n\t\t\tcontainer: 1935,\n\t\t\tdescription: \"RTMP ingest (receives stream from OBS or ffmpeg)\",\n\t\t\texposed: true,\n\t\t},\n\t\t{\n\t\t\thost: 8080,\n\t\t\tcontainer: 8080,\n\t\t\tdescription: \"HTTP server for HLS preview and stats\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"stream-gateway-hls\",\n\t\t\tcontainerPath: \"/tmp/hls\",\n\t\t\tdescription: \"HLS segment storage for live preview playback\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"YOUTUBE_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"YouTube Live stream key (leave empty to skip YouTube relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TWITCH_STREAM_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Twitch stream key (leave empty to skip Twitch relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TIKTOK_STREAM_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Full TikTok RTMP URL from TikTok Studio (leave empty to skip TikTok relay)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"TELEGRAM_STREAM_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription:\n\t\t\t\t\"Full Telegram RTMPS URL including stream key (leave empty to skip Telegram relay)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:8080/health || exit 1\",\n\t\tinterval: \"15s\",\n\t\ttimeout: \"5s\",\n\t\tretries: 3,\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tdeploy: {\n\t\tresources: {\n\t\t\tlimits: { cpus: \"2.0\", memory: \"2G\" },\n\t\t\treservations: { cpus: \"0.5\", memory: \"512M\" },\n\t\t},\n\t},\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_HOST\",\n\t\t\tdefaultValue: \"stream-gateway\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Hostname of the stream-gateway container\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_RTMP_PORT\",\n\t\t\tdefaultValue: \"1935\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"RTMP ingest port on the stream-gateway\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"STREAM_GATEWAY_HLS_PORT\",\n\t\t\tdefaultValue: \"8080\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"HTTP port for HLS preview on the stream-gateway\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/tiangolo/nginx-rtmp-docker\",\n\ttags: [\n\t\t\"streaming\",\n\t\t\"rtmp\",\n\t\t\"hls\",\n\t\t\"relay\",\n\t\t\"youtube\",\n\t\t\"twitch\",\n\t\t\"tiktok\",\n\t\t\"telegram\",\n\t\t\"obs\",\n\t\t\"nginx\",\n\t],\n\tmaturity: \"experimental\",\n\n\trequires: [],\n\trecommends: [\"desktop-environment\"],\n\tconflictsWith: [],\n\n\tremovalWarning:\n\t\t\"⚠️ STREAMING KEYS REQUIRED: To relay to platforms you must provide at least one stream key. Without any keys configured the gateway will still accept RTMP input and serve HLS locally but nothing will be forwarded.\",\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n\n\tnativeSupported: true,\n\tnativeRecipes: [\n\t\t{\n\t\t\tplatform: \"linux\",\n\t\t\tinstallSteps: [\n\t\t\t\t\"command -v nginx >/dev/null 2>&1 || (command -v apt-get >/dev/null 2>&1 && sudo apt-get update -qq && sudo apt-get install -y -qq nginx libnginx-mod-rtmp ffmpeg)\",\n\t\t\t\t\"command -v nginx >/dev/null 2>&1 || (command -v dnf >/dev/null 2>&1 && sudo dnf install -y nginx nginx-mod-rtmp ffmpeg)\",\n\t\t\t],\n\t\t\tstartCommand: \"sudo systemctl start nginx\",\n\t\t\tstopCommand: \"sudo systemctl stop nginx\",\n\t\t\tconfigPath: \"/etc/nginx/nginx.conf\",\n\t\t\tconfigTemplate:\n\t\t\t\t'# Generated for OpenClaw bare-metal\\nworker_processes auto;\\nrtmp_auto_push on;\\n\\nevents { worker_connections 1024; }\\n\\nrtmp {\\n server {\\n listen 1935;\\n chunk_size 4096;\\n application live {\\n live on;\\n record off;\\n hls on;\\n hls_path /tmp/hls;\\n hls_fragment 3;\\n hls_playlist_length 60;\\n }\\n }\\n}\\n\\nhttp {\\n server {\\n listen 8080;\\n location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; }\\n location /health { return 200 \"OK\"; }\\n }\\n}\\n',\n\t\t\tsystemdUnit: \"nginx\",\n\t\t},\n\t],\n};\n"],"mappings":";AAEA,MAAa,0BAA6C;CACzD,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;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aACC;GACD,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EACP,WAAW;EACV,QAAQ;GAAE,MAAM;GAAO,QAAQ;GAAM;EACrC,cAAc;GAAE,MAAM;GAAO,QAAQ;GAAQ;EAC7C,EACD;CAED,QAAQ,EAAE;CACV,iBAAiB;EAChB;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;CAED,SAAS;CACT,MAAM;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,sBAAsB;CACnC,eAAe,EAAE;CAEjB,gBACC;CACD,aAAa;CACb,aAAa;CAEb,iBAAiB;CACjB,eAAe,CACd;EACC,UAAU;EACV,cAAc,CACb,qKACA,0HACA;EACD,cAAc;EACd,aAAa;EACb,YAAY;EACZ,gBACC;EACD,aAAa;EACb,CACD;CACD"}
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-Qk6MgAnK.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-YSByewHe.mjs";
2
2
  import { getAllServices, getServiceById, getServicesByCategory, getServicesByTag } from "./registry.mjs";
3
3
 
4
4
  //#region src/services/registry.test.ts
@@ -1 +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"}
1
+ {"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/skills/registry.ts"],"mappings":";;;cAwba,iBAAA,EAAmB,WAAA,SAAoB,SAAA;AAAA,iBAEpC,gBAAA,CAAiB,EAAA,WAAa,SAAA;AAAA,iBAI9B,gBAAA,CAAA,GAAoB,SAAA;;iBAKpB,uBAAA,CAAwB,mBAAA,aAAgC,SAAA"}
@@ -74,7 +74,13 @@ const skillPacks = [
74
74
  "grafana",
75
75
  "prometheus"
76
76
  ],
77
- skills: ["n8n-trigger", "redis-cache"],
77
+ skills: [
78
+ "n8n-trigger",
79
+ "redis-cache",
80
+ "grafana-dashboard",
81
+ "prometheus-query",
82
+ "uptime-kuma-monitor"
83
+ ],
78
84
  icon: "⚙️",
79
85
  tags: [
80
86
  "devops",
@@ -91,7 +97,11 @@ const skillPacks = [
91
97
  "postgresql",
92
98
  "meilisearch"
93
99
  ],
94
- skills: ["qdrant-memory"],
100
+ skills: [
101
+ "qdrant-memory",
102
+ "postgresql-query",
103
+ "meilisearch-index"
104
+ ],
95
105
  icon: "📚",
96
106
  tags: [
97
107
  "knowledge",
@@ -126,7 +136,8 @@ const skillPacks = [
126
136
  skills: [
127
137
  "ffmpeg-process",
128
138
  "minio-storage",
129
- "redis-cache"
139
+ "redis-cache",
140
+ "postiz-schedule"
130
141
  ],
131
142
  icon: "📱",
132
143
  tags: [
@@ -145,7 +156,11 @@ const skillPacks = [
145
156
  "open-webui",
146
157
  "litellm"
147
158
  ],
148
- skills: ["ollama-local-llm"],
159
+ skills: [
160
+ "ollama-local-llm",
161
+ "open-webui-chat",
162
+ "litellm-gateway"
163
+ ],
149
164
  icon: "🧪",
150
165
  tags: [
151
166
  "ai",
@@ -163,7 +178,11 @@ const skillPacks = [
163
178
  "gitea",
164
179
  "code-server"
165
180
  ],
166
- skills: [],
181
+ skills: [
182
+ "claude-code-assist",
183
+ "gitea-repo",
184
+ "code-server-develop"
185
+ ],
167
186
  icon: "💻",
168
187
  tags: [
169
188
  "coding",
@@ -183,7 +202,13 @@ const skillPacks = [
183
202
  "postgresql",
184
203
  "redis"
185
204
  ],
186
- skills: ["qdrant-memory"],
205
+ skills: [
206
+ "qdrant-memory",
207
+ "outline-wiki",
208
+ "paperless-archive",
209
+ "postgresql-query",
210
+ "redis-cache"
211
+ ],
187
212
  icon: "📚",
188
213
  tags: [
189
214
  "knowledge",
@@ -191,6 +216,473 @@ const skillPacks = [
191
216
  "documents",
192
217
  "search"
193
218
  ]
219
+ },
220
+ {
221
+ id: "data-engineer",
222
+ name: "Data Engineer",
223
+ description: "Process and transform data with PostgreSQL, CSV/JSON/XML transforms, and PDF extraction",
224
+ requiredServices: ["postgresql"],
225
+ skills: [
226
+ "postgresql-query",
227
+ "csv-transform",
228
+ "json-transform",
229
+ "xml-parse",
230
+ "pdf-extract",
231
+ "excel-process",
232
+ "markdown-convert"
233
+ ],
234
+ icon: "🔧",
235
+ tags: [
236
+ "data",
237
+ "etl",
238
+ "transform",
239
+ "processing"
240
+ ]
241
+ },
242
+ {
243
+ id: "nlp-pipeline",
244
+ name: "NLP Pipeline",
245
+ description: "Natural language processing with summarization, translation, classification, and embeddings via Ollama",
246
+ requiredServices: ["ollama"],
247
+ skills: [
248
+ "text-summarize",
249
+ "text-translate",
250
+ "text-classify",
251
+ "text-embed",
252
+ "ollama-local-llm"
253
+ ],
254
+ icon: "🧠",
255
+ tags: [
256
+ "nlp",
257
+ "text",
258
+ "embeddings",
259
+ "translation"
260
+ ]
261
+ },
262
+ {
263
+ id: "image-processor",
264
+ name: "Image Processor",
265
+ description: "Resize, convert, and OCR images with ImageMagick and Tesseract",
266
+ requiredServices: ["ffmpeg"],
267
+ skills: [
268
+ "image-resize",
269
+ "image-convert",
270
+ "image-ocr",
271
+ "ffmpeg-process"
272
+ ],
273
+ icon: "🖼️",
274
+ tags: [
275
+ "image",
276
+ "ocr",
277
+ "media",
278
+ "conversion"
279
+ ]
280
+ },
281
+ {
282
+ id: "api-integrator",
283
+ name: "API Integrator",
284
+ description: "HTTP requests, webhooks, and GraphQL queries for external API integration",
285
+ requiredServices: [],
286
+ skills: [
287
+ "http-request",
288
+ "api-webhook",
289
+ "graphql-query"
290
+ ],
291
+ icon: "🌐",
292
+ tags: [
293
+ "api",
294
+ "http",
295
+ "webhook",
296
+ "graphql"
297
+ ]
298
+ },
299
+ {
300
+ id: "security-ops",
301
+ name: "Security Ops",
302
+ description: "JWT validation, hashing, SSL checks, port scanning, and network diagnostics",
303
+ requiredServices: [],
304
+ skills: [
305
+ "jwt-manage",
306
+ "hash-generate",
307
+ "ssl-check",
308
+ "dns-lookup",
309
+ "port-scan",
310
+ "ping-check"
311
+ ],
312
+ icon: "🛡️",
313
+ tags: [
314
+ "security",
315
+ "networking",
316
+ "diagnostics"
317
+ ]
318
+ },
319
+ {
320
+ id: "communication-hub",
321
+ name: "Communication Hub",
322
+ description: "Multi-channel messaging with Matrix, Mattermost, Rocket.Chat, email, and push notifications",
323
+ requiredServices: ["matrix-synapse", "gotify"],
324
+ skills: [
325
+ "matrix-message",
326
+ "mattermost-post",
327
+ "rocketchat-send",
328
+ "gotify-notify",
329
+ "ntfy-publish",
330
+ "email-send"
331
+ ],
332
+ icon: "📨",
333
+ tags: [
334
+ "messaging",
335
+ "notifications",
336
+ "email",
337
+ "chat"
338
+ ]
339
+ },
340
+ {
341
+ id: "analytics-suite",
342
+ name: "Analytics Suite",
343
+ description: "Web and product analytics with Matomo, Umami, OpenPanel, Grafana, and Prometheus",
344
+ requiredServices: ["grafana", "prometheus"],
345
+ skills: [
346
+ "matomo-track",
347
+ "umami-analytics",
348
+ "openpanel-analyze",
349
+ "grafana-dashboard",
350
+ "prometheus-query"
351
+ ],
352
+ icon: "📊",
353
+ tags: [
354
+ "analytics",
355
+ "monitoring",
356
+ "metrics",
357
+ "dashboards"
358
+ ]
359
+ },
360
+ {
361
+ id: "full-devops",
362
+ name: "Full DevOps",
363
+ description: "Complete DevOps toolkit with Git hosting, container management, deployments, monitoring, and log viewing",
364
+ requiredServices: [
365
+ "gitea",
366
+ "portainer",
367
+ "coolify",
368
+ "grafana",
369
+ "prometheus"
370
+ ],
371
+ skills: [
372
+ "gitea-repo",
373
+ "portainer-manage",
374
+ "coolify-deploy",
375
+ "dokploy-deploy",
376
+ "watchtower-update",
377
+ "dozzle-logs",
378
+ "grafana-dashboard",
379
+ "prometheus-query",
380
+ "uptime-kuma-monitor",
381
+ "beszel-monitor"
382
+ ],
383
+ icon: "🏗️",
384
+ tags: [
385
+ "devops",
386
+ "ci-cd",
387
+ "containers",
388
+ "deployment"
389
+ ]
390
+ },
391
+ {
392
+ id: "document-manager",
393
+ name: "Document Manager",
394
+ description: "Document processing pipeline with wiki, archival, OCR, Q&A, and PDF extraction",
395
+ requiredServices: ["outline", "paperless-ngx"],
396
+ skills: [
397
+ "outline-wiki",
398
+ "paperless-archive",
399
+ "docsgpt-ask",
400
+ "pdf-extract",
401
+ "image-ocr"
402
+ ],
403
+ icon: "📑",
404
+ tags: [
405
+ "documents",
406
+ "wiki",
407
+ "ocr",
408
+ "archive"
409
+ ]
410
+ },
411
+ {
412
+ id: "ai-coding-team",
413
+ name: "AI Coding Team",
414
+ description: "Multi-agent AI coding ensemble with Claude Code, Codex, Gemini CLI, OpenCode, and browser IDE",
415
+ requiredServices: ["code-server", "gitea"],
416
+ skills: [
417
+ "claude-code-assist",
418
+ "codex-generate",
419
+ "gemini-cli-query",
420
+ "opencode-develop",
421
+ "code-server-develop",
422
+ "gitea-repo"
423
+ ],
424
+ icon: "🤖",
425
+ tags: [
426
+ "ai-coding",
427
+ "agents",
428
+ "development",
429
+ "ide"
430
+ ]
431
+ },
432
+ {
433
+ id: "rag-pipeline",
434
+ name: "RAG Pipeline",
435
+ description: "Build retrieval-augmented generation systems with LangChain, LlamaIndex, Haystack, and vector databases",
436
+ requiredServices: ["milvus"],
437
+ skills: [
438
+ "langchain-agent",
439
+ "llamaindex-query",
440
+ "haystack-rag",
441
+ "ragflow-pipeline",
442
+ "milvus-vectors",
443
+ "firecrawl-scrape"
444
+ ],
445
+ icon: "🧠",
446
+ tags: [
447
+ "rag",
448
+ "ai",
449
+ "embeddings",
450
+ "search",
451
+ "llm"
452
+ ]
453
+ },
454
+ {
455
+ id: "self-hosted-cloud",
456
+ name: "Self-Hosted Cloud",
457
+ description: "Complete self-hosted infrastructure with cloud storage, photos, media streaming, and password management",
458
+ requiredServices: [
459
+ "nextcloud",
460
+ "immich",
461
+ "jellyfin",
462
+ "vaultwarden"
463
+ ],
464
+ skills: [
465
+ "nextcloud-files",
466
+ "immich-photos",
467
+ "jellyfin-media",
468
+ "vaultwarden-manage"
469
+ ],
470
+ icon: "☁️",
471
+ tags: [
472
+ "self-hosted",
473
+ "cloud",
474
+ "storage",
475
+ "media",
476
+ "security"
477
+ ]
478
+ },
479
+ {
480
+ id: "ai-agent-orchestra",
481
+ name: "AI Agent Orchestra",
482
+ description: "Multi-agent AI orchestration with CrewAI, AutoGPT, LangChain, Langflow, and Open Interpreter",
483
+ requiredServices: [],
484
+ skills: [
485
+ "crewai-orchestrate",
486
+ "autogpt-autonomous",
487
+ "langchain-agent",
488
+ "langflow-build",
489
+ "open-interpreter-run"
490
+ ],
491
+ icon: "🎭",
492
+ tags: [
493
+ "ai",
494
+ "agents",
495
+ "multi-agent",
496
+ "orchestration",
497
+ "autonomous"
498
+ ]
499
+ },
500
+ {
501
+ id: "cicd-pipeline",
502
+ name: "CI/CD Pipeline",
503
+ description: "Full CI/CD pipeline with Jenkins, ArgoCD, Woodpecker, and infrastructure as code",
504
+ requiredServices: ["jenkins"],
505
+ skills: [
506
+ "jenkins-pipeline",
507
+ "argocd-deploy",
508
+ "woodpecker-ci",
509
+ "terraform-provision",
510
+ "ansible-configure"
511
+ ],
512
+ icon: "🔄",
513
+ tags: [
514
+ "ci-cd",
515
+ "devops",
516
+ "gitops",
517
+ "infrastructure"
518
+ ]
519
+ },
520
+ {
521
+ id: "zero-trust-security",
522
+ name: "Zero-Trust Security",
523
+ description: "Enterprise security with SSO, secrets management, VPN, intrusion detection, and feature flags",
524
+ requiredServices: ["authentik", "crowdsec"],
525
+ skills: [
526
+ "authentik-auth",
527
+ "keycloak-auth",
528
+ "vault-secrets",
529
+ "infisical-secrets",
530
+ "netbird-vpn",
531
+ "teleport-access",
532
+ "crowdsec-protect"
533
+ ],
534
+ icon: "🔒",
535
+ tags: [
536
+ "security",
537
+ "zero-trust",
538
+ "sso",
539
+ "secrets",
540
+ "vpn"
541
+ ]
542
+ },
543
+ {
544
+ id: "content-platform",
545
+ name: "Content Platform",
546
+ description: "Publishing and CMS platform with Ghost, Strapi, Directus, and newsletter management",
547
+ requiredServices: ["ghost"],
548
+ skills: [
549
+ "ghost-publish",
550
+ "strapi-cms",
551
+ "directus-cms",
552
+ "listmonk-email",
553
+ "plausible-analytics"
554
+ ],
555
+ icon: "📝",
556
+ tags: [
557
+ "cms",
558
+ "publishing",
559
+ "blog",
560
+ "newsletter",
561
+ "analytics"
562
+ ]
563
+ },
564
+ {
565
+ id: "backend-platform",
566
+ name: "Backend Platform",
567
+ description: "Backend-as-a-service with Supabase, Appwrite, PocketBase, and API gateway",
568
+ requiredServices: ["supabase"],
569
+ skills: [
570
+ "supabase-query",
571
+ "appwrite-backend",
572
+ "pocketbase-backend",
573
+ "kong-gateway",
574
+ "rabbitmq-queue"
575
+ ],
576
+ icon: "⚡",
577
+ tags: [
578
+ "backend",
579
+ "baas",
580
+ "api",
581
+ "database",
582
+ "messaging"
583
+ ]
584
+ },
585
+ {
586
+ id: "observability-stack",
587
+ name: "Observability Stack",
588
+ description: "Full observability with Loki logs, SigNoz APM, Sentry errors, Gatus health, and Elasticsearch",
589
+ requiredServices: ["loki", "signoz"],
590
+ skills: [
591
+ "loki-logs",
592
+ "signoz-observe",
593
+ "sentry-errors",
594
+ "gatus-health",
595
+ "elasticsearch-search"
596
+ ],
597
+ icon: "📡",
598
+ tags: [
599
+ "observability",
600
+ "logs",
601
+ "apm",
602
+ "errors",
603
+ "health"
604
+ ]
605
+ },
606
+ {
607
+ id: "document-hub",
608
+ name: "Document Hub",
609
+ description: "Document management with Paperless-ngx, BookStack wiki, Stirling PDF tools, and Excalidraw",
610
+ requiredServices: ["paperless-ngx"],
611
+ skills: [
612
+ "paperless-ngx-docs",
613
+ "bookstack-wiki",
614
+ "stirling-pdf-tools",
615
+ "excalidraw-draw"
616
+ ],
617
+ icon: "📑",
618
+ tags: [
619
+ "documents",
620
+ "wiki",
621
+ "pdf",
622
+ "collaboration"
623
+ ]
624
+ },
625
+ {
626
+ id: "smart-home",
627
+ name: "Smart Home",
628
+ description: "Home automation and event-driven workflows with Home Assistant, Huginn, and Activepieces",
629
+ requiredServices: ["homeassistant"],
630
+ skills: [
631
+ "home-assistant-automate",
632
+ "huginn-automate",
633
+ "activepieces-flow"
634
+ ],
635
+ icon: "🏠",
636
+ tags: [
637
+ "iot",
638
+ "automation",
639
+ "smart-home",
640
+ "workflows"
641
+ ]
642
+ },
643
+ {
644
+ id: "frontend-design",
645
+ name: "Frontend Design",
646
+ description: "Front-end design skills for UI systems, web animations, responsive layouts, copywriting, and asset management — sourced from Aura Build",
647
+ requiredServices: [],
648
+ skills: [
649
+ "ui-prompting",
650
+ "pricing-page-design",
651
+ "landing-page-design",
652
+ "gsap-animate",
653
+ "threejs-scene",
654
+ "matterjs-physics",
655
+ "globe-gl-visualize",
656
+ "tailwindcss-style",
657
+ "css-border-gradient",
658
+ "progressive-blur",
659
+ "animation-on-scroll",
660
+ "css-alpha-masking",
661
+ "vantajs-background",
662
+ "cobejs-globe",
663
+ "unicorn-studio-embed",
664
+ "ui-design-system",
665
+ "tailwind-design-system-v4",
666
+ "interaction-design",
667
+ "responsive-design",
668
+ "web-interface-guidelines",
669
+ "threejs-animation",
670
+ "copywriting",
671
+ "frontend-distinctive-design",
672
+ "canvas-design",
673
+ "web-design-reviewer",
674
+ "animejs-animate",
675
+ "aura-asset-images"
676
+ ],
677
+ icon: "🎨",
678
+ tags: [
679
+ "frontend",
680
+ "design",
681
+ "animation",
682
+ "css",
683
+ "ui",
684
+ "web-design"
685
+ ]
194
686
  }
195
687
  ];
196
688
  const packMap = /* @__PURE__ */ new Map();