@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.
Files changed (414) hide show
  1. package/.github/workflows/publish-core.yml +32 -34
  2. package/dist/bare-metal-partition.d.mts +26 -0
  3. package/dist/bare-metal-partition.d.mts.map +1 -0
  4. package/dist/bare-metal-partition.mjs +48 -0
  5. package/dist/bare-metal-partition.mjs.map +1 -0
  6. package/dist/bare-metal-partition.test.d.mts +1 -0
  7. package/dist/bare-metal-partition.test.mjs +58 -0
  8. package/dist/bare-metal-partition.test.mjs.map +1 -0
  9. package/dist/composer.d.mts +21 -0
  10. package/dist/composer.d.mts.map +1 -0
  11. package/dist/composer.mjs +287 -0
  12. package/dist/composer.mjs.map +1 -0
  13. package/dist/composer.snapshot.test.d.mts +1 -0
  14. package/dist/composer.snapshot.test.mjs +92 -0
  15. package/dist/composer.snapshot.test.mjs.map +1 -0
  16. package/dist/composer.test.d.mts +1 -0
  17. package/dist/composer.test.mjs +166 -0
  18. package/dist/composer.test.mjs.map +1 -0
  19. package/dist/generate.d.mts +11 -0
  20. package/dist/generate.d.mts.map +1 -0
  21. package/dist/generate.mjs +169 -0
  22. package/dist/generate.mjs.map +1 -0
  23. package/dist/generate.test.d.mts +1 -0
  24. package/dist/generate.test.mjs +283 -0
  25. package/dist/generate.test.mjs.map +1 -0
  26. package/dist/generators/bare-metal-install.d.mts +17 -0
  27. package/dist/generators/bare-metal-install.d.mts.map +1 -0
  28. package/dist/generators/bare-metal-install.mjs +224 -0
  29. package/dist/generators/bare-metal-install.mjs.map +1 -0
  30. package/dist/generators/bare-metal-install.test.d.mts +1 -0
  31. package/dist/generators/bare-metal-install.test.mjs +48 -0
  32. package/dist/generators/bare-metal-install.test.mjs.map +1 -0
  33. package/dist/generators/caddy.d.mts +17 -0
  34. package/dist/generators/caddy.d.mts.map +1 -0
  35. package/dist/generators/caddy.mjs +77 -0
  36. package/dist/generators/caddy.mjs.map +1 -0
  37. package/dist/generators/env.d.mts +46 -0
  38. package/dist/generators/env.d.mts.map +1 -0
  39. package/dist/generators/env.mjs +250 -0
  40. package/dist/generators/env.mjs.map +1 -0
  41. package/dist/generators/grafana.d.mts +22 -0
  42. package/dist/generators/grafana.d.mts.map +1 -0
  43. package/dist/generators/grafana.mjs +293 -0
  44. package/dist/generators/grafana.mjs.map +1 -0
  45. package/dist/generators/n8n-workflows.d.mts +11 -0
  46. package/dist/generators/n8n-workflows.d.mts.map +1 -0
  47. package/dist/generators/n8n-workflows.mjs +75 -0
  48. package/dist/generators/n8n-workflows.mjs.map +1 -0
  49. package/dist/generators/native-services.d.mts +17 -0
  50. package/dist/generators/native-services.d.mts.map +1 -0
  51. package/dist/generators/native-services.mjs +78 -0
  52. package/dist/generators/native-services.mjs.map +1 -0
  53. package/dist/generators/postgres-init.d.mts +30 -0
  54. package/dist/generators/postgres-init.d.mts.map +1 -0
  55. package/dist/generators/postgres-init.mjs +151 -0
  56. package/dist/generators/postgres-init.mjs.map +1 -0
  57. package/dist/generators/prometheus.d.mts +14 -0
  58. package/dist/generators/prometheus.d.mts.map +1 -0
  59. package/dist/generators/prometheus.mjs +107 -0
  60. package/dist/generators/prometheus.mjs.map +1 -0
  61. package/dist/generators/readme.d.mts +25 -0
  62. package/dist/generators/readme.d.mts.map +1 -0
  63. package/dist/generators/readme.mjs +199 -0
  64. package/dist/generators/readme.mjs.map +1 -0
  65. package/dist/generators/scripts.d.mts +10 -0
  66. package/dist/generators/scripts.d.mts.map +1 -0
  67. package/dist/generators/scripts.mjs +351 -0
  68. package/dist/generators/scripts.mjs.map +1 -0
  69. package/dist/generators/skills.d.mts +14 -0
  70. package/dist/generators/skills.d.mts.map +1 -0
  71. package/dist/generators/skills.mjs +587 -0
  72. package/dist/generators/skills.mjs.map +1 -0
  73. package/dist/index.d.mts +21 -0
  74. package/dist/index.mjs +22 -0
  75. package/dist/magic-string.es-1uTtupLe.mjs +1014 -0
  76. package/dist/magic-string.es-1uTtupLe.mjs.map +1 -0
  77. package/dist/presets/registry.d.mts +9 -0
  78. package/dist/presets/registry.d.mts.map +1 -0
  79. package/dist/presets/registry.mjs +159 -0
  80. package/dist/presets/registry.mjs.map +1 -0
  81. package/dist/presets/registry.test.d.mts +1 -0
  82. package/dist/presets/registry.test.mjs +34 -0
  83. package/dist/presets/registry.test.mjs.map +1 -0
  84. package/dist/resolver.d.mts +21 -0
  85. package/dist/resolver.d.mts.map +1 -0
  86. package/dist/resolver.mjs +194 -0
  87. package/dist/resolver.mjs.map +1 -0
  88. package/dist/resolver.test.d.mts +1 -0
  89. package/dist/resolver.test.mjs +237 -0
  90. package/dist/resolver.test.mjs.map +1 -0
  91. package/dist/schema.d.mts +706 -0
  92. package/dist/schema.d.mts.map +1 -0
  93. package/dist/schema.mjs +260 -0
  94. package/dist/schema.mjs.map +1 -0
  95. package/dist/schema.test.d.mts +1 -0
  96. package/dist/schema.test.mjs +264 -0
  97. package/dist/schema.test.mjs.map +1 -0
  98. package/dist/services/definitions/anything-llm.d.mts +7 -0
  99. package/dist/services/definitions/anything-llm.d.mts.map +1 -0
  100. package/dist/services/definitions/anything-llm.mjs +44 -0
  101. package/dist/services/definitions/anything-llm.mjs.map +1 -0
  102. package/dist/services/definitions/appflowy.d.mts +7 -0
  103. package/dist/services/definitions/appflowy.d.mts.map +1 -0
  104. package/dist/services/definitions/appflowy.mjs +45 -0
  105. package/dist/services/definitions/appflowy.mjs.map +1 -0
  106. package/dist/services/definitions/beszel.d.mts +7 -0
  107. package/dist/services/definitions/beszel.d.mts.map +1 -0
  108. package/dist/services/definitions/beszel.mjs +45 -0
  109. package/dist/services/definitions/beszel.mjs.map +1 -0
  110. package/dist/services/definitions/browserless.d.mts +7 -0
  111. package/dist/services/definitions/browserless.d.mts.map +1 -0
  112. package/dist/services/definitions/browserless.mjs +85 -0
  113. package/dist/services/definitions/browserless.mjs.map +1 -0
  114. package/dist/services/definitions/caddy.d.mts +7 -0
  115. package/dist/services/definitions/caddy.d.mts.map +1 -0
  116. package/dist/services/definitions/caddy.mjs +52 -0
  117. package/dist/services/definitions/caddy.mjs.map +1 -0
  118. package/dist/services/definitions/chromadb.d.mts +7 -0
  119. package/dist/services/definitions/chromadb.d.mts.map +1 -0
  120. package/dist/services/definitions/chromadb.mjs +63 -0
  121. package/dist/services/definitions/chromadb.mjs.map +1 -0
  122. package/dist/services/definitions/claude-code.d.mts +7 -0
  123. package/dist/services/definitions/claude-code.d.mts.map +1 -0
  124. package/dist/services/definitions/claude-code.mjs +52 -0
  125. package/dist/services/definitions/claude-code.mjs.map +1 -0
  126. package/dist/services/definitions/code-server.d.mts +7 -0
  127. package/dist/services/definitions/code-server.d.mts.map +1 -0
  128. package/dist/services/definitions/code-server.mjs +66 -0
  129. package/dist/services/definitions/code-server.mjs.map +1 -0
  130. package/dist/services/definitions/codex.d.mts +7 -0
  131. package/dist/services/definitions/codex.d.mts.map +1 -0
  132. package/dist/services/definitions/codex.mjs +45 -0
  133. package/dist/services/definitions/codex.mjs.map +1 -0
  134. package/dist/services/definitions/convex-dashboard.d.mts +7 -0
  135. package/dist/services/definitions/convex-dashboard.d.mts.map +1 -0
  136. package/dist/services/definitions/convex-dashboard.mjs +46 -0
  137. package/dist/services/definitions/convex-dashboard.mjs.map +1 -0
  138. package/dist/services/definitions/convex.d.mts +7 -0
  139. package/dist/services/definitions/convex.d.mts.map +1 -0
  140. package/dist/services/definitions/convex.mjs +118 -0
  141. package/dist/services/definitions/convex.mjs.map +1 -0
  142. package/dist/services/definitions/coolify.d.mts +7 -0
  143. package/dist/services/definitions/coolify.d.mts.map +1 -0
  144. package/dist/services/definitions/coolify.mjs +49 -0
  145. package/dist/services/definitions/coolify.mjs.map +1 -0
  146. package/dist/services/definitions/dify.d.mts +7 -0
  147. package/dist/services/definitions/dify.d.mts.map +1 -0
  148. package/dist/services/definitions/dify.mjs +81 -0
  149. package/dist/services/definitions/dify.mjs.map +1 -0
  150. package/dist/services/definitions/docsgpt.d.mts +7 -0
  151. package/dist/services/definitions/docsgpt.d.mts.map +1 -0
  152. package/dist/services/definitions/docsgpt.mjs +45 -0
  153. package/dist/services/definitions/docsgpt.mjs.map +1 -0
  154. package/dist/services/definitions/dokploy.d.mts +7 -0
  155. package/dist/services/definitions/dokploy.d.mts.map +1 -0
  156. package/dist/services/definitions/dokploy.mjs +49 -0
  157. package/dist/services/definitions/dokploy.mjs.map +1 -0
  158. package/dist/services/definitions/dozzle.d.mts +7 -0
  159. package/dist/services/definitions/dozzle.d.mts.map +1 -0
  160. package/dist/services/definitions/dozzle.mjs +41 -0
  161. package/dist/services/definitions/dozzle.mjs.map +1 -0
  162. package/dist/services/definitions/ffmpeg.d.mts +7 -0
  163. package/dist/services/definitions/ffmpeg.d.mts.map +1 -0
  164. package/dist/services/definitions/ffmpeg.mjs +66 -0
  165. package/dist/services/definitions/ffmpeg.mjs.map +1 -0
  166. package/dist/services/definitions/flowise.d.mts +7 -0
  167. package/dist/services/definitions/flowise.d.mts.map +1 -0
  168. package/dist/services/definitions/flowise.mjs +45 -0
  169. package/dist/services/definitions/flowise.mjs.map +1 -0
  170. package/dist/services/definitions/gemini-cli.d.mts +7 -0
  171. package/dist/services/definitions/gemini-cli.d.mts.map +1 -0
  172. package/dist/services/definitions/gemini-cli.mjs +46 -0
  173. package/dist/services/definitions/gemini-cli.mjs.map +1 -0
  174. package/dist/services/definitions/gitea.d.mts +7 -0
  175. package/dist/services/definitions/gitea.d.mts.map +1 -0
  176. package/dist/services/definitions/gitea.mjs +49 -0
  177. package/dist/services/definitions/gitea.mjs.map +1 -0
  178. package/dist/services/definitions/gotify.d.mts +7 -0
  179. package/dist/services/definitions/gotify.d.mts.map +1 -0
  180. package/dist/services/definitions/gotify.mjs +62 -0
  181. package/dist/services/definitions/gotify.mjs.map +1 -0
  182. package/dist/services/definitions/grafana.d.mts +7 -0
  183. package/dist/services/definitions/grafana.d.mts.map +1 -0
  184. package/dist/services/definitions/grafana.mjs +63 -0
  185. package/dist/services/definitions/grafana.mjs.map +1 -0
  186. package/dist/services/definitions/index.d.mts +76 -0
  187. package/dist/services/definitions/index.d.mts.map +1 -0
  188. package/dist/services/definitions/index.mjs +146 -0
  189. package/dist/services/definitions/index.mjs.map +1 -0
  190. package/dist/services/definitions/kimi.d.mts +7 -0
  191. package/dist/services/definitions/kimi.d.mts.map +1 -0
  192. package/dist/services/definitions/kimi.mjs +46 -0
  193. package/dist/services/definitions/kimi.mjs.map +1 -0
  194. package/dist/services/definitions/lasuite-meet-agents.d.mts +7 -0
  195. package/dist/services/definitions/lasuite-meet-agents.d.mts.map +1 -0
  196. package/dist/services/definitions/lasuite-meet-agents.mjs +36 -0
  197. package/dist/services/definitions/lasuite-meet-agents.mjs.map +1 -0
  198. package/dist/services/definitions/lasuite-meet-backend.d.mts +7 -0
  199. package/dist/services/definitions/lasuite-meet-backend.d.mts.map +1 -0
  200. package/dist/services/definitions/lasuite-meet-backend.mjs +134 -0
  201. package/dist/services/definitions/lasuite-meet-backend.mjs.map +1 -0
  202. package/dist/services/definitions/lasuite-meet-frontend.d.mts +7 -0
  203. package/dist/services/definitions/lasuite-meet-frontend.d.mts.map +1 -0
  204. package/dist/services/definitions/lasuite-meet-frontend.mjs +48 -0
  205. package/dist/services/definitions/lasuite-meet-frontend.mjs.map +1 -0
  206. package/dist/services/definitions/librechat.d.mts +7 -0
  207. package/dist/services/definitions/librechat.d.mts.map +1 -0
  208. package/dist/services/definitions/librechat.mjs +50 -0
  209. package/dist/services/definitions/librechat.mjs.map +1 -0
  210. package/dist/services/definitions/lightpanda.d.mts +7 -0
  211. package/dist/services/definitions/lightpanda.d.mts.map +1 -0
  212. package/dist/services/definitions/lightpanda.mjs +59 -0
  213. package/dist/services/definitions/lightpanda.mjs.map +1 -0
  214. package/dist/services/definitions/litellm.d.mts +7 -0
  215. package/dist/services/definitions/litellm.d.mts.map +1 -0
  216. package/dist/services/definitions/litellm.mjs +47 -0
  217. package/dist/services/definitions/litellm.mjs.map +1 -0
  218. package/dist/services/definitions/livekit.d.mts +7 -0
  219. package/dist/services/definitions/livekit.d.mts.map +1 -0
  220. package/dist/services/definitions/livekit.mjs +56 -0
  221. package/dist/services/definitions/livekit.mjs.map +1 -0
  222. package/dist/services/definitions/matomo.d.mts +7 -0
  223. package/dist/services/definitions/matomo.d.mts.map +1 -0
  224. package/dist/services/definitions/matomo.mjs +80 -0
  225. package/dist/services/definitions/matomo.mjs.map +1 -0
  226. package/dist/services/definitions/matrix-synapse.d.mts +7 -0
  227. package/dist/services/definitions/matrix-synapse.d.mts.map +1 -0
  228. package/dist/services/definitions/matrix-synapse.mjs +88 -0
  229. package/dist/services/definitions/matrix-synapse.mjs.map +1 -0
  230. package/dist/services/definitions/mattermost.d.mts +7 -0
  231. package/dist/services/definitions/mattermost.d.mts.map +1 -0
  232. package/dist/services/definitions/mattermost.mjs +61 -0
  233. package/dist/services/definitions/mattermost.mjs.map +1 -0
  234. package/dist/services/definitions/meilisearch.d.mts +7 -0
  235. package/dist/services/definitions/meilisearch.d.mts.map +1 -0
  236. package/dist/services/definitions/meilisearch.mjs +78 -0
  237. package/dist/services/definitions/meilisearch.mjs.map +1 -0
  238. package/dist/services/definitions/minio.d.mts +7 -0
  239. package/dist/services/definitions/minio.d.mts.map +1 -0
  240. package/dist/services/definitions/minio.mjs +102 -0
  241. package/dist/services/definitions/minio.mjs.map +1 -0
  242. package/dist/services/definitions/mission-control.d.mts +7 -0
  243. package/dist/services/definitions/mission-control.d.mts.map +1 -0
  244. package/dist/services/definitions/mission-control.mjs +67 -0
  245. package/dist/services/definitions/mission-control.mjs.map +1 -0
  246. package/dist/services/definitions/mixpost.d.mts +7 -0
  247. package/dist/services/definitions/mixpost.d.mts.map +1 -0
  248. package/dist/services/definitions/mixpost.mjs +87 -0
  249. package/dist/services/definitions/mixpost.mjs.map +1 -0
  250. package/dist/services/definitions/motion-canvas.d.mts +7 -0
  251. package/dist/services/definitions/motion-canvas.d.mts.map +1 -0
  252. package/dist/services/definitions/motion-canvas.mjs +52 -0
  253. package/dist/services/definitions/motion-canvas.mjs.map +1 -0
  254. package/dist/services/definitions/n8n.d.mts +7 -0
  255. package/dist/services/definitions/n8n.d.mts.map +1 -0
  256. package/dist/services/definitions/n8n.mjs +154 -0
  257. package/dist/services/definitions/n8n.mjs.map +1 -0
  258. package/dist/services/definitions/nocodb.d.mts +7 -0
  259. package/dist/services/definitions/nocodb.d.mts.map +1 -0
  260. package/dist/services/definitions/nocodb.mjs +45 -0
  261. package/dist/services/definitions/nocodb.mjs.map +1 -0
  262. package/dist/services/definitions/ntfy.d.mts +7 -0
  263. package/dist/services/definitions/ntfy.d.mts.map +1 -0
  264. package/dist/services/definitions/ntfy.mjs +63 -0
  265. package/dist/services/definitions/ntfy.mjs.map +1 -0
  266. package/dist/services/definitions/ollama.d.mts +7 -0
  267. package/dist/services/definitions/ollama.d.mts.map +1 -0
  268. package/dist/services/definitions/ollama.mjs +66 -0
  269. package/dist/services/definitions/ollama.mjs.map +1 -0
  270. package/dist/services/definitions/open-webui.d.mts +7 -0
  271. package/dist/services/definitions/open-webui.d.mts.map +1 -0
  272. package/dist/services/definitions/open-webui.mjs +50 -0
  273. package/dist/services/definitions/open-webui.mjs.map +1 -0
  274. package/dist/services/definitions/opencode.d.mts +7 -0
  275. package/dist/services/definitions/opencode.d.mts.map +1 -0
  276. package/dist/services/definitions/opencode.mjs +50 -0
  277. package/dist/services/definitions/opencode.mjs.map +1 -0
  278. package/dist/services/definitions/openpanel.d.mts +7 -0
  279. package/dist/services/definitions/openpanel.d.mts.map +1 -0
  280. package/dist/services/definitions/openpanel.mjs +46 -0
  281. package/dist/services/definitions/openpanel.mjs.map +1 -0
  282. package/dist/services/definitions/outline.d.mts +7 -0
  283. package/dist/services/definitions/outline.d.mts.map +1 -0
  284. package/dist/services/definitions/outline.mjs +74 -0
  285. package/dist/services/definitions/outline.mjs.map +1 -0
  286. package/dist/services/definitions/paperless-ngx.d.mts +7 -0
  287. package/dist/services/definitions/paperless-ngx.d.mts.map +1 -0
  288. package/dist/services/definitions/paperless-ngx.mjs +93 -0
  289. package/dist/services/definitions/paperless-ngx.mjs.map +1 -0
  290. package/dist/services/definitions/playwright-server.d.mts +7 -0
  291. package/dist/services/definitions/playwright-server.d.mts.map +1 -0
  292. package/dist/services/definitions/playwright-server.mjs +42 -0
  293. package/dist/services/definitions/playwright-server.mjs.map +1 -0
  294. package/dist/services/definitions/portainer.d.mts +7 -0
  295. package/dist/services/definitions/portainer.d.mts.map +1 -0
  296. package/dist/services/definitions/portainer.mjs +49 -0
  297. package/dist/services/definitions/portainer.mjs.map +1 -0
  298. package/dist/services/definitions/postgresql.d.mts +7 -0
  299. package/dist/services/definitions/postgresql.d.mts.map +1 -0
  300. package/dist/services/definitions/postgresql.mjs +84 -0
  301. package/dist/services/definitions/postgresql.mjs.map +1 -0
  302. package/dist/services/definitions/postiz.d.mts +7 -0
  303. package/dist/services/definitions/postiz.d.mts.map +1 -0
  304. package/dist/services/definitions/postiz.mjs +83 -0
  305. package/dist/services/definitions/postiz.mjs.map +1 -0
  306. package/dist/services/definitions/prometheus.d.mts +7 -0
  307. package/dist/services/definitions/prometheus.d.mts.map +1 -0
  308. package/dist/services/definitions/prometheus.mjs +52 -0
  309. package/dist/services/definitions/prometheus.mjs.map +1 -0
  310. package/dist/services/definitions/qdrant.d.mts +7 -0
  311. package/dist/services/definitions/qdrant.d.mts.map +1 -0
  312. package/dist/services/definitions/qdrant.mjs +77 -0
  313. package/dist/services/definitions/qdrant.mjs.map +1 -0
  314. package/dist/services/definitions/redis.d.mts +7 -0
  315. package/dist/services/definitions/redis.d.mts.map +1 -0
  316. package/dist/services/definitions/redis.mjs +91 -0
  317. package/dist/services/definitions/redis.mjs.map +1 -0
  318. package/dist/services/definitions/remotion.d.mts +7 -0
  319. package/dist/services/definitions/remotion.d.mts.map +1 -0
  320. package/dist/services/definitions/remotion.mjs +55 -0
  321. package/dist/services/definitions/remotion.mjs.map +1 -0
  322. package/dist/services/definitions/rocketchat.d.mts +7 -0
  323. package/dist/services/definitions/rocketchat.d.mts.map +1 -0
  324. package/dist/services/definitions/rocketchat.mjs +57 -0
  325. package/dist/services/definitions/rocketchat.mjs.map +1 -0
  326. package/dist/services/definitions/searxng.d.mts +7 -0
  327. package/dist/services/definitions/searxng.d.mts.map +1 -0
  328. package/dist/services/definitions/searxng.mjs +65 -0
  329. package/dist/services/definitions/searxng.mjs.map +1 -0
  330. package/dist/services/definitions/stable-diffusion.d.mts +7 -0
  331. package/dist/services/definitions/stable-diffusion.d.mts.map +1 -0
  332. package/dist/services/definitions/stable-diffusion.mjs +48 -0
  333. package/dist/services/definitions/stable-diffusion.mjs.map +1 -0
  334. package/dist/services/definitions/steel-browser.d.mts +7 -0
  335. package/dist/services/definitions/steel-browser.d.mts.map +1 -0
  336. package/dist/services/definitions/steel-browser.mjs +77 -0
  337. package/dist/services/definitions/steel-browser.mjs.map +1 -0
  338. package/dist/services/definitions/tailscale.d.mts +7 -0
  339. package/dist/services/definitions/tailscale.d.mts.map +1 -0
  340. package/dist/services/definitions/tailscale.mjs +70 -0
  341. package/dist/services/definitions/tailscale.mjs.map +1 -0
  342. package/dist/services/definitions/temporal.d.mts +7 -0
  343. package/dist/services/definitions/temporal.d.mts.map +1 -0
  344. package/dist/services/definitions/temporal.mjs +100 -0
  345. package/dist/services/definitions/temporal.mjs.map +1 -0
  346. package/dist/services/definitions/traefik.d.mts +7 -0
  347. package/dist/services/definitions/traefik.d.mts.map +1 -0
  348. package/dist/services/definitions/traefik.mjs +58 -0
  349. package/dist/services/definitions/traefik.mjs.map +1 -0
  350. package/dist/services/definitions/umami.d.mts +7 -0
  351. package/dist/services/definitions/umami.d.mts.map +1 -0
  352. package/dist/services/definitions/umami.mjs +46 -0
  353. package/dist/services/definitions/umami.mjs.map +1 -0
  354. package/dist/services/definitions/uptime-kuma.d.mts +7 -0
  355. package/dist/services/definitions/uptime-kuma.d.mts.map +1 -0
  356. package/dist/services/definitions/uptime-kuma.mjs +51 -0
  357. package/dist/services/definitions/uptime-kuma.mjs.map +1 -0
  358. package/dist/services/definitions/usesend.d.mts +7 -0
  359. package/dist/services/definitions/usesend.d.mts.map +1 -0
  360. package/dist/services/definitions/usesend.mjs +99 -0
  361. package/dist/services/definitions/usesend.mjs.map +1 -0
  362. package/dist/services/definitions/valkey.d.mts +7 -0
  363. package/dist/services/definitions/valkey.d.mts.map +1 -0
  364. package/dist/services/definitions/valkey.mjs +61 -0
  365. package/dist/services/definitions/valkey.mjs.map +1 -0
  366. package/dist/services/definitions/watchtower.d.mts +7 -0
  367. package/dist/services/definitions/watchtower.d.mts.map +1 -0
  368. package/dist/services/definitions/watchtower.mjs +47 -0
  369. package/dist/services/definitions/watchtower.mjs.map +1 -0
  370. package/dist/services/definitions/weaviate.d.mts +7 -0
  371. package/dist/services/definitions/weaviate.d.mts.map +1 -0
  372. package/dist/services/definitions/weaviate.mjs +90 -0
  373. package/dist/services/definitions/weaviate.mjs.map +1 -0
  374. package/dist/services/definitions/whisper.d.mts +7 -0
  375. package/dist/services/definitions/whisper.d.mts.map +1 -0
  376. package/dist/services/definitions/whisper.mjs +62 -0
  377. package/dist/services/definitions/whisper.mjs.map +1 -0
  378. package/dist/services/registry.d.mts +16 -0
  379. package/dist/services/registry.d.mts.map +1 -0
  380. package/dist/services/registry.mjs +30 -0
  381. package/dist/services/registry.mjs.map +1 -0
  382. package/dist/services/registry.test.d.mts +1 -0
  383. package/dist/services/registry.test.mjs +64 -0
  384. package/dist/services/registry.test.mjs.map +1 -0
  385. package/dist/skills/registry.d.mts +11 -0
  386. package/dist/skills/registry.d.mts.map +1 -0
  387. package/dist/skills/registry.mjs +215 -0
  388. package/dist/skills/registry.mjs.map +1 -0
  389. package/dist/types.d.mts +64 -0
  390. package/dist/types.d.mts.map +1 -0
  391. package/dist/types.mjs +92 -0
  392. package/dist/types.mjs.map +1 -0
  393. package/dist/validator.d.mts +20 -0
  394. package/dist/validator.d.mts.map +1 -0
  395. package/dist/validator.mjs +111 -0
  396. package/dist/validator.mjs.map +1 -0
  397. package/dist/validator.test.d.mts +1 -0
  398. package/dist/validator.test.mjs +65 -0
  399. package/dist/validator.test.mjs.map +1 -0
  400. package/dist/version-manager.d.mts +14 -0
  401. package/dist/version-manager.d.mts.map +1 -0
  402. package/dist/version-manager.mjs +55 -0
  403. package/dist/version-manager.mjs.map +1 -0
  404. package/dist/vi.2VT5v0um-Qk6MgAnK.mjs +12916 -0
  405. package/dist/vi.2VT5v0um-Qk6MgAnK.mjs.map +1 -0
  406. package/package.json +17 -17
  407. package/src/schema.ts +2 -1
  408. package/src/services/definitions/convex-dashboard.ts +48 -0
  409. package/src/services/definitions/convex.ts +123 -0
  410. package/src/services/definitions/index.ts +12 -0
  411. package/src/services/definitions/mission-control.ts +71 -0
  412. package/src/services/definitions/tailscale.ts +2 -0
  413. package/src/services/definitions/usesend.ts +98 -0
  414. 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,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/valkey.d.ts
4
+ declare const valkeyDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { valkeyDefinition };
7
+ //# sourceMappingURL=valkey.d.mts.map
@@ -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,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/watchtower.d.ts
4
+ declare const watchtowerDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { watchtowerDefinition };
7
+ //# sourceMappingURL=watchtower.d.mts.map
@@ -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,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/weaviate.d.ts
4
+ declare const weaviateDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { weaviateDefinition };
7
+ //# sourceMappingURL=weaviate.d.mts.map
@@ -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,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/whisper.d.ts
4
+ declare const whisperDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { whisperDefinition };
7
+ //# sourceMappingURL=whisper.d.mts.map
@@ -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"}