@better-openclaw/core 1.0.6 → 1.0.8

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 (574) hide show
  1. package/.github/workflows/publish-core.yml +1 -1
  2. package/dist/bare-metal-partition.d.mts +0 -1
  3. package/dist/bare-metal-partition.d.mts.map +1 -1
  4. package/dist/bare-metal-partition.mjs +47 -2
  5. package/dist/bare-metal-partition.mjs.map +1 -0
  6. package/dist/bare-metal-partition.test.mjs +3 -3
  7. package/dist/composer.d.mts +0 -1
  8. package/dist/composer.d.mts.map +1 -1
  9. package/dist/composer.mjs +286 -2
  10. package/dist/composer.mjs.map +1 -0
  11. package/dist/composer.snapshot.test.mjs +3 -3
  12. package/dist/composer.test.mjs +3 -3
  13. package/dist/generate.d.mts +0 -2
  14. package/dist/generate.d.mts.map +1 -1
  15. package/dist/generate.mjs +15 -15
  16. package/dist/generate.test.mjs +1 -1
  17. package/dist/generators/bare-metal-install.d.mts +0 -2
  18. package/dist/generators/bare-metal-install.d.mts.map +1 -1
  19. package/dist/generators/bare-metal-install.mjs +223 -2
  20. package/dist/generators/bare-metal-install.mjs.map +1 -0
  21. package/dist/generators/bare-metal-install.test.mjs +2 -2
  22. package/dist/generators/caddy.d.mts +0 -2
  23. package/dist/generators/caddy.d.mts.map +1 -1
  24. package/dist/generators/caddy.mjs +76 -2
  25. package/dist/generators/caddy.mjs.map +1 -0
  26. package/dist/generators/env.d.mts +0 -1
  27. package/dist/generators/env.d.mts.map +1 -1
  28. package/dist/generators/env.mjs +249 -2
  29. package/dist/generators/env.mjs.map +1 -0
  30. package/dist/generators/grafana.d.mts.map +1 -1
  31. package/dist/generators/grafana.mjs +292 -2
  32. package/dist/generators/grafana.mjs.map +1 -0
  33. package/dist/generators/n8n-workflows.d.mts +0 -2
  34. package/dist/generators/n8n-workflows.d.mts.map +1 -1
  35. package/dist/generators/n8n-workflows.mjs +74 -2
  36. package/dist/generators/n8n-workflows.mjs.map +1 -0
  37. package/dist/generators/native-services.d.mts +0 -1
  38. package/dist/generators/native-services.d.mts.map +1 -1
  39. package/dist/generators/native-services.mjs +77 -2
  40. package/dist/generators/native-services.mjs.map +1 -0
  41. package/dist/generators/postgres-init.d.mts +0 -1
  42. package/dist/generators/postgres-init.d.mts.map +1 -1
  43. package/dist/generators/postgres-init.mjs +150 -2
  44. package/dist/generators/postgres-init.mjs.map +1 -0
  45. package/dist/generators/prometheus.d.mts +0 -2
  46. package/dist/generators/prometheus.d.mts.map +1 -1
  47. package/dist/generators/prometheus.mjs +106 -2
  48. package/dist/generators/prometheus.mjs.map +1 -0
  49. package/dist/generators/readme.d.mts +0 -1
  50. package/dist/generators/readme.d.mts.map +1 -1
  51. package/dist/generators/readme.mjs +198 -2
  52. package/dist/generators/readme.mjs.map +1 -0
  53. package/dist/generators/scripts.d.mts.map +1 -1
  54. package/dist/generators/scripts.mjs +350 -2
  55. package/dist/generators/scripts.mjs.map +1 -0
  56. package/dist/generators/skills.d.mts +0 -2
  57. package/dist/generators/skills.d.mts.map +1 -1
  58. package/dist/generators/skills.mjs +586 -2
  59. package/dist/generators/skills.mjs.map +1 -0
  60. package/dist/index.d.mts +1 -1
  61. package/dist/index.mjs +15 -15
  62. package/dist/{magic-string.es-Dew0Rnsa.mjs → magic-string.es-1uTtupLe.mjs} +14 -14
  63. package/dist/magic-string.es-1uTtupLe.mjs.map +1 -0
  64. package/dist/presets/registry.d.mts +0 -1
  65. package/dist/presets/registry.d.mts.map +1 -1
  66. package/dist/presets/registry.test.mjs +1 -1
  67. package/dist/resolver.d.mts +0 -2
  68. package/dist/resolver.d.mts.map +1 -1
  69. package/dist/resolver.mjs +193 -2
  70. package/dist/resolver.mjs.map +1 -0
  71. package/dist/resolver.test.mjs +2 -2
  72. package/dist/schema.d.mts +714 -2
  73. package/dist/schema.d.mts.map +1 -0
  74. package/dist/schema.mjs +6 -2
  75. package/dist/schema.mjs.map +1 -1
  76. package/dist/schema.test.mjs +1 -1
  77. package/dist/services/definitions/anything-llm.d.mts +0 -1
  78. package/dist/services/definitions/anything-llm.d.mts.map +1 -1
  79. package/dist/services/definitions/anything-llm.mjs +43 -2
  80. package/dist/services/definitions/anything-llm.mjs.map +1 -0
  81. package/dist/services/definitions/appflowy.d.mts +0 -1
  82. package/dist/services/definitions/appflowy.d.mts.map +1 -1
  83. package/dist/services/definitions/appflowy.mjs +44 -2
  84. package/dist/services/definitions/appflowy.mjs.map +1 -0
  85. package/dist/services/definitions/beszel.d.mts +0 -1
  86. package/dist/services/definitions/beszel.d.mts.map +1 -1
  87. package/dist/services/definitions/beszel.mjs +44 -2
  88. package/dist/services/definitions/beszel.mjs.map +1 -0
  89. package/dist/services/definitions/browserless.d.mts +0 -1
  90. package/dist/services/definitions/browserless.d.mts.map +1 -1
  91. package/dist/services/definitions/browserless.mjs +84 -2
  92. package/dist/services/definitions/browserless.mjs.map +1 -0
  93. package/dist/services/definitions/caddy.d.mts +0 -1
  94. package/dist/services/definitions/caddy.d.mts.map +1 -1
  95. package/dist/services/definitions/caddy.mjs +51 -2
  96. package/dist/services/definitions/caddy.mjs.map +1 -0
  97. package/dist/services/definitions/chromadb.d.mts +0 -1
  98. package/dist/services/definitions/chromadb.d.mts.map +1 -1
  99. package/dist/services/definitions/chromadb.mjs +62 -2
  100. package/dist/services/definitions/chromadb.mjs.map +1 -0
  101. package/dist/services/definitions/claude-code.d.mts +0 -1
  102. package/dist/services/definitions/claude-code.d.mts.map +1 -1
  103. package/dist/services/definitions/claude-code.mjs +51 -2
  104. package/dist/services/definitions/claude-code.mjs.map +1 -0
  105. package/dist/services/definitions/code-server.d.mts +0 -1
  106. package/dist/services/definitions/code-server.d.mts.map +1 -1
  107. package/dist/services/definitions/code-server.mjs +65 -2
  108. package/dist/services/definitions/code-server.mjs.map +1 -0
  109. package/dist/services/definitions/codex.d.mts +0 -1
  110. package/dist/services/definitions/codex.d.mts.map +1 -1
  111. package/dist/services/definitions/codex.mjs +44 -2
  112. package/dist/services/definitions/codex.mjs.map +1 -0
  113. package/dist/services/definitions/comfyui.d.mts +7 -0
  114. package/dist/services/definitions/comfyui.d.mts.map +1 -0
  115. package/dist/services/definitions/comfyui.mjs +83 -0
  116. package/dist/services/definitions/comfyui.mjs.map +1 -0
  117. package/dist/services/definitions/convex-dashboard.d.mts +7 -0
  118. package/dist/services/definitions/convex-dashboard.d.mts.map +1 -0
  119. package/dist/services/definitions/convex-dashboard.mjs +46 -0
  120. package/dist/services/definitions/convex-dashboard.mjs.map +1 -0
  121. package/dist/services/definitions/convex.d.mts +7 -0
  122. package/dist/services/definitions/convex.d.mts.map +1 -0
  123. package/dist/services/definitions/convex.mjs +118 -0
  124. package/dist/services/definitions/convex.mjs.map +1 -0
  125. package/dist/services/definitions/coolify.d.mts +0 -1
  126. package/dist/services/definitions/coolify.d.mts.map +1 -1
  127. package/dist/services/definitions/coolify.mjs +48 -2
  128. package/dist/services/definitions/coolify.mjs.map +1 -0
  129. package/dist/services/definitions/desktop-environment.d.mts +7 -0
  130. package/dist/services/definitions/desktop-environment.d.mts.map +1 -0
  131. package/dist/services/definitions/desktop-environment.mjs +153 -0
  132. package/dist/services/definitions/desktop-environment.mjs.map +1 -0
  133. package/dist/services/definitions/dify.d.mts +0 -1
  134. package/dist/services/definitions/dify.d.mts.map +1 -1
  135. package/dist/services/definitions/dify.mjs +80 -2
  136. package/dist/services/definitions/dify.mjs.map +1 -0
  137. package/dist/services/definitions/docsgpt.d.mts +0 -1
  138. package/dist/services/definitions/docsgpt.d.mts.map +1 -1
  139. package/dist/services/definitions/docsgpt.mjs +44 -2
  140. package/dist/services/definitions/docsgpt.mjs.map +1 -0
  141. package/dist/services/definitions/dokploy.d.mts +0 -1
  142. package/dist/services/definitions/dokploy.d.mts.map +1 -1
  143. package/dist/services/definitions/dokploy.mjs +48 -2
  144. package/dist/services/definitions/dokploy.mjs.map +1 -0
  145. package/dist/services/definitions/dozzle.d.mts +0 -1
  146. package/dist/services/definitions/dozzle.d.mts.map +1 -1
  147. package/dist/services/definitions/dozzle.mjs +40 -2
  148. package/dist/services/definitions/dozzle.mjs.map +1 -0
  149. package/dist/services/definitions/ffmpeg.d.mts +0 -1
  150. package/dist/services/definitions/ffmpeg.d.mts.map +1 -1
  151. package/dist/services/definitions/ffmpeg.mjs +65 -2
  152. package/dist/services/definitions/ffmpeg.mjs.map +1 -0
  153. package/dist/services/definitions/flowise.d.mts +0 -1
  154. package/dist/services/definitions/flowise.d.mts.map +1 -1
  155. package/dist/services/definitions/flowise.mjs +44 -2
  156. package/dist/services/definitions/flowise.mjs.map +1 -0
  157. package/dist/services/definitions/gemini-cli.d.mts +0 -1
  158. package/dist/services/definitions/gemini-cli.d.mts.map +1 -1
  159. package/dist/services/definitions/gemini-cli.mjs +45 -2
  160. package/dist/services/definitions/gemini-cli.mjs.map +1 -0
  161. package/dist/services/definitions/gitea.d.mts +0 -1
  162. package/dist/services/definitions/gitea.d.mts.map +1 -1
  163. package/dist/services/definitions/gitea.mjs +48 -2
  164. package/dist/services/definitions/gitea.mjs.map +1 -0
  165. package/dist/services/definitions/gotify.d.mts +0 -1
  166. package/dist/services/definitions/gotify.d.mts.map +1 -1
  167. package/dist/services/definitions/gotify.mjs +61 -2
  168. package/dist/services/definitions/gotify.mjs.map +1 -0
  169. package/dist/services/definitions/grafana.d.mts +0 -1
  170. package/dist/services/definitions/grafana.d.mts.map +1 -1
  171. package/dist/services/definitions/grafana.mjs +62 -2
  172. package/dist/services/definitions/grafana.mjs.map +1 -0
  173. package/dist/services/definitions/index.d.mts +8 -2
  174. package/dist/services/definitions/index.d.mts.map +1 -1
  175. package/dist/services/definitions/index.mjs +151 -67
  176. package/dist/services/definitions/index.mjs.map +1 -0
  177. package/dist/services/definitions/kimi.d.mts +0 -1
  178. package/dist/services/definitions/kimi.d.mts.map +1 -1
  179. package/dist/services/definitions/kimi.mjs +45 -2
  180. package/dist/services/definitions/kimi.mjs.map +1 -0
  181. package/dist/services/definitions/lasuite-meet-agents.d.mts +0 -1
  182. package/dist/services/definitions/lasuite-meet-agents.d.mts.map +1 -1
  183. package/dist/services/definitions/lasuite-meet-agents.mjs +35 -2
  184. package/dist/services/definitions/lasuite-meet-agents.mjs.map +1 -0
  185. package/dist/services/definitions/lasuite-meet-backend.d.mts +0 -1
  186. package/dist/services/definitions/lasuite-meet-backend.d.mts.map +1 -1
  187. package/dist/services/definitions/lasuite-meet-backend.mjs +133 -2
  188. package/dist/services/definitions/lasuite-meet-backend.mjs.map +1 -0
  189. package/dist/services/definitions/lasuite-meet-frontend.d.mts +0 -1
  190. package/dist/services/definitions/lasuite-meet-frontend.d.mts.map +1 -1
  191. package/dist/services/definitions/lasuite-meet-frontend.mjs +47 -2
  192. package/dist/services/definitions/lasuite-meet-frontend.mjs.map +1 -0
  193. package/dist/services/definitions/librechat.d.mts +0 -1
  194. package/dist/services/definitions/librechat.d.mts.map +1 -1
  195. package/dist/services/definitions/librechat.mjs +49 -2
  196. package/dist/services/definitions/librechat.mjs.map +1 -0
  197. package/dist/services/definitions/lightpanda.d.mts +0 -1
  198. package/dist/services/definitions/lightpanda.d.mts.map +1 -1
  199. package/dist/services/definitions/lightpanda.mjs +58 -2
  200. package/dist/services/definitions/lightpanda.mjs.map +1 -0
  201. package/dist/services/definitions/litellm.d.mts +0 -1
  202. package/dist/services/definitions/litellm.d.mts.map +1 -1
  203. package/dist/services/definitions/litellm.mjs +46 -2
  204. package/dist/services/definitions/litellm.mjs.map +1 -0
  205. package/dist/services/definitions/livekit.d.mts +0 -1
  206. package/dist/services/definitions/livekit.d.mts.map +1 -1
  207. package/dist/services/definitions/livekit.mjs +55 -2
  208. package/dist/services/definitions/livekit.mjs.map +1 -0
  209. package/dist/services/definitions/matomo.d.mts +0 -1
  210. package/dist/services/definitions/matomo.d.mts.map +1 -1
  211. package/dist/services/definitions/matomo.mjs +79 -2
  212. package/dist/services/definitions/matomo.mjs.map +1 -0
  213. package/dist/services/definitions/matrix-synapse.d.mts +0 -1
  214. package/dist/services/definitions/matrix-synapse.d.mts.map +1 -1
  215. package/dist/services/definitions/matrix-synapse.mjs +87 -2
  216. package/dist/services/definitions/matrix-synapse.mjs.map +1 -0
  217. package/dist/services/definitions/mattermost.d.mts +0 -1
  218. package/dist/services/definitions/mattermost.d.mts.map +1 -1
  219. package/dist/services/definitions/mattermost.mjs +60 -2
  220. package/dist/services/definitions/mattermost.mjs.map +1 -0
  221. package/dist/services/definitions/meilisearch.d.mts +0 -1
  222. package/dist/services/definitions/meilisearch.d.mts.map +1 -1
  223. package/dist/services/definitions/meilisearch.mjs +77 -2
  224. package/dist/services/definitions/meilisearch.mjs.map +1 -0
  225. package/dist/services/definitions/minio.d.mts +0 -1
  226. package/dist/services/definitions/minio.d.mts.map +1 -1
  227. package/dist/services/definitions/minio.mjs +101 -2
  228. package/dist/services/definitions/minio.mjs.map +1 -0
  229. package/dist/services/definitions/mission-control.d.mts +7 -0
  230. package/dist/services/definitions/mission-control.d.mts.map +1 -0
  231. package/dist/services/definitions/mission-control.mjs +67 -0
  232. package/dist/services/definitions/mission-control.mjs.map +1 -0
  233. package/dist/services/definitions/mixpost.d.mts +0 -1
  234. package/dist/services/definitions/mixpost.d.mts.map +1 -1
  235. package/dist/services/definitions/mixpost.mjs +86 -2
  236. package/dist/services/definitions/mixpost.mjs.map +1 -0
  237. package/dist/services/definitions/motion-canvas.d.mts +0 -1
  238. package/dist/services/definitions/motion-canvas.d.mts.map +1 -1
  239. package/dist/services/definitions/motion-canvas.mjs +51 -2
  240. package/dist/services/definitions/motion-canvas.mjs.map +1 -0
  241. package/dist/services/definitions/n8n.d.mts +0 -1
  242. package/dist/services/definitions/n8n.d.mts.map +1 -1
  243. package/dist/services/definitions/n8n.mjs +153 -2
  244. package/dist/services/definitions/n8n.mjs.map +1 -0
  245. package/dist/services/definitions/nocodb.d.mts +0 -1
  246. package/dist/services/definitions/nocodb.d.mts.map +1 -1
  247. package/dist/services/definitions/nocodb.mjs +44 -2
  248. package/dist/services/definitions/nocodb.mjs.map +1 -0
  249. package/dist/services/definitions/ntfy.d.mts +0 -1
  250. package/dist/services/definitions/ntfy.d.mts.map +1 -1
  251. package/dist/services/definitions/ntfy.mjs +62 -2
  252. package/dist/services/definitions/ntfy.mjs.map +1 -0
  253. package/dist/services/definitions/ollama.d.mts +0 -1
  254. package/dist/services/definitions/ollama.d.mts.map +1 -1
  255. package/dist/services/definitions/ollama.mjs +65 -2
  256. package/dist/services/definitions/ollama.mjs.map +1 -0
  257. package/dist/services/definitions/open-webui.d.mts +0 -1
  258. package/dist/services/definitions/open-webui.d.mts.map +1 -1
  259. package/dist/services/definitions/open-webui.mjs +49 -2
  260. package/dist/services/definitions/open-webui.mjs.map +1 -0
  261. package/dist/services/definitions/opencode.d.mts +0 -1
  262. package/dist/services/definitions/opencode.d.mts.map +1 -1
  263. package/dist/services/definitions/opencode.mjs +49 -2
  264. package/dist/services/definitions/opencode.mjs.map +1 -0
  265. package/dist/services/definitions/openpanel.d.mts +0 -1
  266. package/dist/services/definitions/openpanel.d.mts.map +1 -1
  267. package/dist/services/definitions/openpanel.mjs +45 -2
  268. package/dist/services/definitions/openpanel.mjs.map +1 -0
  269. package/dist/services/definitions/outline.d.mts +0 -1
  270. package/dist/services/definitions/outline.d.mts.map +1 -1
  271. package/dist/services/definitions/outline.mjs +73 -2
  272. package/dist/services/definitions/outline.mjs.map +1 -0
  273. package/dist/services/definitions/paperless-ngx.d.mts +0 -1
  274. package/dist/services/definitions/paperless-ngx.d.mts.map +1 -1
  275. package/dist/services/definitions/paperless-ngx.mjs +92 -2
  276. package/dist/services/definitions/paperless-ngx.mjs.map +1 -0
  277. package/dist/services/definitions/playwright-server.d.mts +0 -1
  278. package/dist/services/definitions/playwright-server.d.mts.map +1 -1
  279. package/dist/services/definitions/playwright-server.mjs +41 -2
  280. package/dist/services/definitions/playwright-server.mjs.map +1 -0
  281. package/dist/services/definitions/portainer.d.mts +0 -1
  282. package/dist/services/definitions/portainer.d.mts.map +1 -1
  283. package/dist/services/definitions/portainer.mjs +48 -2
  284. package/dist/services/definitions/portainer.mjs.map +1 -0
  285. package/dist/services/definitions/postgresql.d.mts +0 -1
  286. package/dist/services/definitions/postgresql.d.mts.map +1 -1
  287. package/dist/services/definitions/postgresql.mjs +83 -2
  288. package/dist/services/definitions/postgresql.mjs.map +1 -0
  289. package/dist/services/definitions/postiz.d.mts +0 -1
  290. package/dist/services/definitions/postiz.d.mts.map +1 -1
  291. package/dist/services/definitions/postiz.mjs +82 -2
  292. package/dist/services/definitions/postiz.mjs.map +1 -0
  293. package/dist/services/definitions/prometheus.d.mts +0 -1
  294. package/dist/services/definitions/prometheus.d.mts.map +1 -1
  295. package/dist/services/definitions/prometheus.mjs +51 -2
  296. package/dist/services/definitions/prometheus.mjs.map +1 -0
  297. package/dist/services/definitions/qdrant.d.mts +0 -1
  298. package/dist/services/definitions/qdrant.d.mts.map +1 -1
  299. package/dist/services/definitions/qdrant.mjs +76 -2
  300. package/dist/services/definitions/qdrant.mjs.map +1 -0
  301. package/dist/services/definitions/redis.d.mts +0 -1
  302. package/dist/services/definitions/redis.d.mts.map +1 -1
  303. package/dist/services/definitions/redis.mjs +90 -2
  304. package/dist/services/definitions/redis.mjs.map +1 -0
  305. package/dist/services/definitions/remotion.d.mts +0 -1
  306. package/dist/services/definitions/remotion.d.mts.map +1 -1
  307. package/dist/services/definitions/remotion.mjs +54 -2
  308. package/dist/services/definitions/remotion.mjs.map +1 -0
  309. package/dist/services/definitions/rocketchat.d.mts +0 -1
  310. package/dist/services/definitions/rocketchat.d.mts.map +1 -1
  311. package/dist/services/definitions/rocketchat.mjs +56 -2
  312. package/dist/services/definitions/rocketchat.mjs.map +1 -0
  313. package/dist/services/definitions/searxng.d.mts +0 -1
  314. package/dist/services/definitions/searxng.d.mts.map +1 -1
  315. package/dist/services/definitions/searxng.mjs +64 -2
  316. package/dist/services/definitions/searxng.mjs.map +1 -0
  317. package/dist/services/definitions/stable-diffusion.d.mts +0 -1
  318. package/dist/services/definitions/stable-diffusion.d.mts.map +1 -1
  319. package/dist/services/definitions/stable-diffusion.mjs +47 -2
  320. package/dist/services/definitions/stable-diffusion.mjs.map +1 -0
  321. package/dist/services/definitions/steel-browser.d.mts +0 -1
  322. package/dist/services/definitions/steel-browser.d.mts.map +1 -1
  323. package/dist/services/definitions/steel-browser.mjs +76 -2
  324. package/dist/services/definitions/steel-browser.mjs.map +1 -0
  325. package/dist/services/definitions/stream-gateway.d.mts +7 -0
  326. package/dist/services/definitions/stream-gateway.d.mts.map +1 -0
  327. package/dist/services/definitions/stream-gateway.mjs +133 -0
  328. package/dist/services/definitions/stream-gateway.mjs.map +1 -0
  329. package/dist/services/definitions/tailscale.d.mts +0 -1
  330. package/dist/services/definitions/tailscale.d.mts.map +1 -1
  331. package/dist/services/definitions/tailscale.mjs +69 -2
  332. package/dist/services/definitions/tailscale.mjs.map +1 -0
  333. package/dist/services/definitions/temporal.d.mts +0 -1
  334. package/dist/services/definitions/temporal.d.mts.map +1 -1
  335. package/dist/services/definitions/temporal.mjs +99 -2
  336. package/dist/services/definitions/temporal.mjs.map +1 -0
  337. package/dist/services/definitions/traefik.d.mts +0 -1
  338. package/dist/services/definitions/traefik.d.mts.map +1 -1
  339. package/dist/services/definitions/traefik.mjs +57 -2
  340. package/dist/services/definitions/traefik.mjs.map +1 -0
  341. package/dist/services/definitions/umami.d.mts +0 -1
  342. package/dist/services/definitions/umami.d.mts.map +1 -1
  343. package/dist/services/definitions/umami.mjs +45 -2
  344. package/dist/services/definitions/umami.mjs.map +1 -0
  345. package/dist/services/definitions/uptime-kuma.d.mts +0 -1
  346. package/dist/services/definitions/uptime-kuma.d.mts.map +1 -1
  347. package/dist/services/definitions/uptime-kuma.mjs +50 -2
  348. package/dist/services/definitions/uptime-kuma.mjs.map +1 -0
  349. package/dist/services/definitions/usesend.d.mts +7 -0
  350. package/dist/services/definitions/usesend.d.mts.map +1 -0
  351. package/dist/services/definitions/usesend.mjs +99 -0
  352. package/dist/services/definitions/usesend.mjs.map +1 -0
  353. package/dist/services/definitions/valkey.d.mts +0 -1
  354. package/dist/services/definitions/valkey.d.mts.map +1 -1
  355. package/dist/services/definitions/valkey.mjs +60 -2
  356. package/dist/services/definitions/valkey.mjs.map +1 -0
  357. package/dist/services/definitions/watchtower.d.mts +0 -1
  358. package/dist/services/definitions/watchtower.d.mts.map +1 -1
  359. package/dist/services/definitions/watchtower.mjs +46 -2
  360. package/dist/services/definitions/watchtower.mjs.map +1 -0
  361. package/dist/services/definitions/weaviate.d.mts +0 -1
  362. package/dist/services/definitions/weaviate.d.mts.map +1 -1
  363. package/dist/services/definitions/weaviate.mjs +89 -2
  364. package/dist/services/definitions/weaviate.mjs.map +1 -0
  365. package/dist/services/definitions/whisper.d.mts +0 -1
  366. package/dist/services/definitions/whisper.d.mts.map +1 -1
  367. package/dist/services/definitions/whisper.mjs +61 -2
  368. package/dist/services/definitions/whisper.mjs.map +1 -0
  369. package/dist/services/registry.d.mts +0 -1
  370. package/dist/services/registry.d.mts.map +1 -1
  371. package/dist/services/registry.mjs +29 -2
  372. package/dist/services/registry.mjs.map +1 -0
  373. package/dist/services/registry.test.mjs +2 -2
  374. package/dist/skills/registry.d.mts +0 -1
  375. package/dist/skills/registry.d.mts.map +1 -1
  376. package/dist/skills/registry.mjs +214 -2
  377. package/dist/skills/registry.mjs.map +1 -0
  378. package/dist/types.d.mts +1 -1
  379. package/dist/types.d.mts.map +1 -1
  380. package/dist/types.mjs +10 -0
  381. package/dist/types.mjs.map +1 -1
  382. package/dist/validator.d.mts +0 -1
  383. package/dist/validator.d.mts.map +1 -1
  384. package/dist/validator.mjs +110 -2
  385. package/dist/validator.mjs.map +1 -0
  386. package/dist/validator.test.mjs +4 -4
  387. package/dist/version-manager.d.mts +0 -1
  388. package/dist/version-manager.d.mts.map +1 -1
  389. package/dist/version-manager.mjs +1 -1
  390. package/dist/{vi.2VT5v0um-Cs3Z_fCB.mjs → vi.2VT5v0um-Qk6MgAnK.mjs} +1183 -1183
  391. package/dist/vi.2VT5v0um-Qk6MgAnK.mjs.map +1 -0
  392. package/package.json +14 -13
  393. package/src/schema.ts +4 -1
  394. package/src/services/definitions/comfyui.ts +90 -0
  395. package/src/services/definitions/convex-dashboard.ts +48 -0
  396. package/src/services/definitions/convex.ts +123 -0
  397. package/src/services/definitions/desktop-environment.ts +163 -0
  398. package/src/services/definitions/index.ts +21 -0
  399. package/src/services/definitions/mission-control.ts +71 -0
  400. package/src/services/definitions/stream-gateway.ts +148 -0
  401. package/src/services/definitions/tailscale.ts +2 -0
  402. package/src/services/definitions/usesend.ts +98 -0
  403. package/src/types.ts +2 -0
  404. package/tsdown.config.ts +1 -0
  405. package/dist/anything-llm-DIIPhz6K.mjs +0 -44
  406. package/dist/anything-llm-DIIPhz6K.mjs.map +0 -1
  407. package/dist/appflowy-DdoE-dKg.mjs +0 -45
  408. package/dist/appflowy-DdoE-dKg.mjs.map +0 -1
  409. package/dist/bare-metal-install-DpYZDoGq.mjs +0 -224
  410. package/dist/bare-metal-install-DpYZDoGq.mjs.map +0 -1
  411. package/dist/bare-metal-partition-CYlOxf9B.mjs +0 -48
  412. package/dist/bare-metal-partition-CYlOxf9B.mjs.map +0 -1
  413. package/dist/beszel-DHAG1zl0.mjs +0 -45
  414. package/dist/beszel-DHAG1zl0.mjs.map +0 -1
  415. package/dist/browserless-gUuvGmMD.mjs +0 -85
  416. package/dist/browserless-gUuvGmMD.mjs.map +0 -1
  417. package/dist/caddy-BJDrqnmw.mjs +0 -77
  418. package/dist/caddy-BJDrqnmw.mjs.map +0 -1
  419. package/dist/caddy-_NIdWKrf.mjs +0 -52
  420. package/dist/caddy-_NIdWKrf.mjs.map +0 -1
  421. package/dist/chromadb-g4rIsfAl.mjs +0 -63
  422. package/dist/chromadb-g4rIsfAl.mjs.map +0 -1
  423. package/dist/claude-code-DPRA1fy_.mjs +0 -52
  424. package/dist/claude-code-DPRA1fy_.mjs.map +0 -1
  425. package/dist/code-server-BdZZxxm5.mjs +0 -66
  426. package/dist/code-server-BdZZxxm5.mjs.map +0 -1
  427. package/dist/codex-DFVzfrfX.mjs +0 -45
  428. package/dist/codex-DFVzfrfX.mjs.map +0 -1
  429. package/dist/composer-CSM5YycB.mjs +0 -287
  430. package/dist/composer-CSM5YycB.mjs.map +0 -1
  431. package/dist/coolify-Z5_zDgM3.mjs +0 -49
  432. package/dist/coolify-Z5_zDgM3.mjs.map +0 -1
  433. package/dist/definitions-BXpb1kzs.mjs +0 -138
  434. package/dist/definitions-BXpb1kzs.mjs.map +0 -1
  435. package/dist/dify-jDc9U6Ku.mjs +0 -81
  436. package/dist/dify-jDc9U6Ku.mjs.map +0 -1
  437. package/dist/docsgpt-BXM1c2JC.mjs +0 -45
  438. package/dist/docsgpt-BXM1c2JC.mjs.map +0 -1
  439. package/dist/dokploy-Ci8_fb0_.mjs +0 -49
  440. package/dist/dokploy-Ci8_fb0_.mjs.map +0 -1
  441. package/dist/dozzle-fAt2sLRL.mjs +0 -41
  442. package/dist/dozzle-fAt2sLRL.mjs.map +0 -1
  443. package/dist/env-D2h46lHT.mjs +0 -250
  444. package/dist/env-D2h46lHT.mjs.map +0 -1
  445. package/dist/ffmpeg-BCtnA8m_.mjs +0 -66
  446. package/dist/ffmpeg-BCtnA8m_.mjs.map +0 -1
  447. package/dist/flowise-CJTTBa7J.mjs +0 -45
  448. package/dist/flowise-CJTTBa7J.mjs.map +0 -1
  449. package/dist/gemini-cli-Bfwv6hYe.mjs +0 -46
  450. package/dist/gemini-cli-Bfwv6hYe.mjs.map +0 -1
  451. package/dist/gitea-BGkqa-sD.mjs +0 -49
  452. package/dist/gitea-BGkqa-sD.mjs.map +0 -1
  453. package/dist/gotify-D7p8oNM3.mjs +0 -62
  454. package/dist/gotify-D7p8oNM3.mjs.map +0 -1
  455. package/dist/grafana-BlnWc6js.mjs +0 -63
  456. package/dist/grafana-BlnWc6js.mjs.map +0 -1
  457. package/dist/grafana-D3kIm8RX.mjs +0 -293
  458. package/dist/grafana-D3kIm8RX.mjs.map +0 -1
  459. package/dist/kimi-BFu1v1sU.mjs +0 -46
  460. package/dist/kimi-BFu1v1sU.mjs.map +0 -1
  461. package/dist/lasuite-meet-agents-nlPhMEaN.mjs +0 -36
  462. package/dist/lasuite-meet-agents-nlPhMEaN.mjs.map +0 -1
  463. package/dist/lasuite-meet-backend-9H7rZ8Pc.mjs +0 -134
  464. package/dist/lasuite-meet-backend-9H7rZ8Pc.mjs.map +0 -1
  465. package/dist/lasuite-meet-frontend-B4xNbnBa.mjs +0 -48
  466. package/dist/lasuite-meet-frontend-B4xNbnBa.mjs.map +0 -1
  467. package/dist/librechat-CoPIHXKK.mjs +0 -50
  468. package/dist/librechat-CoPIHXKK.mjs.map +0 -1
  469. package/dist/lightpanda-QchAPgNX.mjs +0 -59
  470. package/dist/lightpanda-QchAPgNX.mjs.map +0 -1
  471. package/dist/litellm-Dgl6iTry.mjs +0 -47
  472. package/dist/litellm-Dgl6iTry.mjs.map +0 -1
  473. package/dist/livekit-C13SxlVB.mjs +0 -56
  474. package/dist/livekit-C13SxlVB.mjs.map +0 -1
  475. package/dist/magic-string.es-Dew0Rnsa.mjs.map +0 -1
  476. package/dist/matomo-CiOoggYl.mjs +0 -80
  477. package/dist/matomo-CiOoggYl.mjs.map +0 -1
  478. package/dist/matrix-synapse-CP20A7NN.mjs +0 -88
  479. package/dist/matrix-synapse-CP20A7NN.mjs.map +0 -1
  480. package/dist/mattermost-CeFVuhIr.mjs +0 -61
  481. package/dist/mattermost-CeFVuhIr.mjs.map +0 -1
  482. package/dist/meilisearch-CLiQiTdN.mjs +0 -78
  483. package/dist/meilisearch-CLiQiTdN.mjs.map +0 -1
  484. package/dist/minio-_QuguAeo.mjs +0 -102
  485. package/dist/minio-_QuguAeo.mjs.map +0 -1
  486. package/dist/mixpost-eSFPM9XK.mjs +0 -87
  487. package/dist/mixpost-eSFPM9XK.mjs.map +0 -1
  488. package/dist/motion-canvas-Bk1ruvuX.mjs +0 -52
  489. package/dist/motion-canvas-Bk1ruvuX.mjs.map +0 -1
  490. package/dist/n8n-W5qeU34C.mjs +0 -154
  491. package/dist/n8n-W5qeU34C.mjs.map +0 -1
  492. package/dist/n8n-workflows-BPmKVx8z.mjs +0 -75
  493. package/dist/n8n-workflows-BPmKVx8z.mjs.map +0 -1
  494. package/dist/native-services-CwOCM-Xz.mjs +0 -78
  495. package/dist/native-services-CwOCM-Xz.mjs.map +0 -1
  496. package/dist/nocodb-DQNbSYh_.mjs +0 -45
  497. package/dist/nocodb-DQNbSYh_.mjs.map +0 -1
  498. package/dist/ntfy-B8_cZAx2.mjs +0 -63
  499. package/dist/ntfy-B8_cZAx2.mjs.map +0 -1
  500. package/dist/ollama-BiKAypcO.mjs +0 -66
  501. package/dist/ollama-BiKAypcO.mjs.map +0 -1
  502. package/dist/open-webui-DZOG4_xL.mjs +0 -50
  503. package/dist/open-webui-DZOG4_xL.mjs.map +0 -1
  504. package/dist/opencode-Dvfh5KvA.mjs +0 -50
  505. package/dist/opencode-Dvfh5KvA.mjs.map +0 -1
  506. package/dist/openpanel-BuWHhDze.mjs +0 -46
  507. package/dist/openpanel-BuWHhDze.mjs.map +0 -1
  508. package/dist/outline-Dy-YzdYS.mjs +0 -74
  509. package/dist/outline-Dy-YzdYS.mjs.map +0 -1
  510. package/dist/paperless-ngx-DVtWWpKg.mjs +0 -93
  511. package/dist/paperless-ngx-DVtWWpKg.mjs.map +0 -1
  512. package/dist/playwright-server-Boiz8--G.mjs +0 -42
  513. package/dist/playwright-server-Boiz8--G.mjs.map +0 -1
  514. package/dist/portainer-D9MU96UI.mjs +0 -49
  515. package/dist/portainer-D9MU96UI.mjs.map +0 -1
  516. package/dist/postgres-init-BiM-xZtq.mjs +0 -151
  517. package/dist/postgres-init-BiM-xZtq.mjs.map +0 -1
  518. package/dist/postgresql-s65Z9RqR.mjs +0 -84
  519. package/dist/postgresql-s65Z9RqR.mjs.map +0 -1
  520. package/dist/postiz-U6EK23EY.mjs +0 -83
  521. package/dist/postiz-U6EK23EY.mjs.map +0 -1
  522. package/dist/prometheus-WOlk-a1G.mjs +0 -107
  523. package/dist/prometheus-WOlk-a1G.mjs.map +0 -1
  524. package/dist/prometheus-x901F67p.mjs +0 -52
  525. package/dist/prometheus-x901F67p.mjs.map +0 -1
  526. package/dist/qdrant-DZW9uW4e.mjs +0 -77
  527. package/dist/qdrant-DZW9uW4e.mjs.map +0 -1
  528. package/dist/readme-C7M3QE9a.mjs +0 -199
  529. package/dist/readme-C7M3QE9a.mjs.map +0 -1
  530. package/dist/redis-DPMOf237.mjs +0 -91
  531. package/dist/redis-DPMOf237.mjs.map +0 -1
  532. package/dist/registry-CqLarEm5.mjs +0 -30
  533. package/dist/registry-CqLarEm5.mjs.map +0 -1
  534. package/dist/registry-DLX9Q4VQ.mjs +0 -215
  535. package/dist/registry-DLX9Q4VQ.mjs.map +0 -1
  536. package/dist/remotion-COkr0wpr.mjs +0 -55
  537. package/dist/remotion-COkr0wpr.mjs.map +0 -1
  538. package/dist/resolver-Dl5clk-d.mjs +0 -194
  539. package/dist/resolver-Dl5clk-d.mjs.map +0 -1
  540. package/dist/rocketchat-BebQT1MZ.mjs +0 -57
  541. package/dist/rocketchat-BebQT1MZ.mjs.map +0 -1
  542. package/dist/schema-PSUY6yJU.d.mts +0 -700
  543. package/dist/schema-PSUY6yJU.d.mts.map +0 -1
  544. package/dist/scripts-DsljWbP4.mjs +0 -351
  545. package/dist/scripts-DsljWbP4.mjs.map +0 -1
  546. package/dist/searxng-tJpBkchC.mjs +0 -65
  547. package/dist/searxng-tJpBkchC.mjs.map +0 -1
  548. package/dist/skills-DWG72Y3X.mjs +0 -587
  549. package/dist/skills-DWG72Y3X.mjs.map +0 -1
  550. package/dist/stable-diffusion-BulAzkyT.mjs +0 -48
  551. package/dist/stable-diffusion-BulAzkyT.mjs.map +0 -1
  552. package/dist/steel-browser-Cc0bYBjM.mjs +0 -77
  553. package/dist/steel-browser-Cc0bYBjM.mjs.map +0 -1
  554. package/dist/tailscale-CrM4EZlF.mjs +0 -69
  555. package/dist/tailscale-CrM4EZlF.mjs.map +0 -1
  556. package/dist/temporal-49gA0msh.mjs +0 -100
  557. package/dist/temporal-49gA0msh.mjs.map +0 -1
  558. package/dist/traefik-Da-c1f55.mjs +0 -58
  559. package/dist/traefik-Da-c1f55.mjs.map +0 -1
  560. package/dist/umami-csBSsHqO.mjs +0 -46
  561. package/dist/umami-csBSsHqO.mjs.map +0 -1
  562. package/dist/uptime-kuma-D0NvVuXD.mjs +0 -51
  563. package/dist/uptime-kuma-D0NvVuXD.mjs.map +0 -1
  564. package/dist/validator-2FspYNva.mjs +0 -111
  565. package/dist/validator-2FspYNva.mjs.map +0 -1
  566. package/dist/valkey-BCZqGJ0L.mjs +0 -61
  567. package/dist/valkey-BCZqGJ0L.mjs.map +0 -1
  568. package/dist/vi.2VT5v0um-Cs3Z_fCB.mjs.map +0 -1
  569. package/dist/watchtower-BWuvFGpA.mjs +0 -47
  570. package/dist/watchtower-BWuvFGpA.mjs.map +0 -1
  571. package/dist/weaviate-DttY1Hn7.mjs +0 -90
  572. package/dist/weaviate-DttY1Hn7.mjs.map +0 -1
  573. package/dist/whisper-CLu7-Vd8.mjs +0 -62
  574. package/dist/whisper-CLu7-Vd8.mjs.map +0 -1
@@ -1,3 +1,151 @@
1
- import { n as getDbRequirements, t as generatePostgresInit } from "../postgres-init-BiM-xZtq.mjs";
1
+ //#region src/generators/postgres-init.ts
2
+ /**
3
+ * Known database requirements for services that need their own PostgreSQL database.
4
+ * Maps service ID to the DB name, user, and password env var they expect.
5
+ */
6
+ const DB_REQUIREMENTS = {
7
+ n8n: {
8
+ dbName: "n8n",
9
+ dbUser: "n8n",
10
+ passwordEnvVar: "N8N_DB_PASSWORD"
11
+ },
12
+ postiz: {
13
+ dbName: "postiz",
14
+ dbUser: "postiz",
15
+ passwordEnvVar: "POSTIZ_DB_PASSWORD"
16
+ },
17
+ outline: {
18
+ dbName: "outline",
19
+ dbUser: "outline",
20
+ passwordEnvVar: "OUTLINE_DB_PASSWORD"
21
+ },
22
+ dify: {
23
+ dbName: "dify",
24
+ dbUser: "dify",
25
+ passwordEnvVar: "DIFY_DB_PASSWORD"
26
+ },
27
+ temporal: {
28
+ dbName: "temporal",
29
+ dbUser: "temporal",
30
+ passwordEnvVar: "TEMPORAL_DB_PASSWORD"
31
+ },
32
+ mattermost: {
33
+ dbName: "mattermost",
34
+ dbUser: "mattermost",
35
+ passwordEnvVar: "MATTERMOST_DB_PASSWORD"
36
+ },
37
+ "matrix-synapse": {
38
+ dbName: "synapse",
39
+ dbUser: "synapse",
40
+ passwordEnvVar: "SYNAPSE_DB_PASSWORD"
41
+ },
42
+ "paperless-ngx": {
43
+ dbName: "paperless",
44
+ dbUser: "paperless",
45
+ passwordEnvVar: "PAPERLESS_DB_PASSWORD"
46
+ },
47
+ umami: {
48
+ dbName: "umami",
49
+ dbUser: "umami",
50
+ passwordEnvVar: "UMAMI_DB_PASSWORD"
51
+ },
52
+ matomo: {
53
+ dbName: "matomo",
54
+ dbUser: "matomo",
55
+ passwordEnvVar: "MATOMO_DB_PASSWORD"
56
+ },
57
+ mixpost: {
58
+ dbName: "mixpost",
59
+ dbUser: "mixpost",
60
+ passwordEnvVar: "MIXPOST_DB_PASSWORD"
61
+ }
62
+ };
63
+ /**
64
+ * Get the list of database requirements for all resolved services.
65
+ * Exported so other generators (env, composer) can access the same data.
66
+ */
67
+ function getDbRequirements(resolved) {
68
+ const reqs = [];
69
+ for (const { definition } of resolved.services) {
70
+ const req = DB_REQUIREMENTS[definition.id];
71
+ if (req) reqs.push({
72
+ serviceId: definition.id,
73
+ serviceName: definition.name,
74
+ ...req
75
+ });
76
+ }
77
+ return reqs;
78
+ }
79
+ /**
80
+ * Generates a PostgreSQL initialization script that creates databases and users
81
+ * for all companion services that need their own DB.
82
+ *
83
+ * Returns null if PostgreSQL is not in the resolved stack or no services need extra DBs.
84
+ * The script is designed to be mounted at /docker-entrypoint-initdb.d/init-databases.sh
85
+ * and runs automatically during PostgreSQL's first initialization.
86
+ */
87
+ function generatePostgresInit(resolved) {
88
+ if (!resolved.services.some((s) => s.definition.id === "postgresql")) return null;
89
+ const reqs = getDbRequirements(resolved);
90
+ if (reqs.length === 0) return null;
91
+ return `#!/bin/bash
92
+ set -e
2
93
 
3
- export { generatePostgresInit, getDbRequirements };
94
+ # ═══════════════════════════════════════════════════════════════════════════════
95
+ # PostgreSQL Initialization Script
96
+ # Generated by better-openclaw
97
+ #
98
+ # This script runs automatically during PostgreSQL's first initialization.
99
+ # It creates databases and users for all companion services in your stack.
100
+ # ═══════════════════════════════════════════════════════════════════════════════
101
+
102
+ create_db_and_user() {
103
+ local db="$1"
104
+ local user="$2"
105
+ local password="$3"
106
+
107
+ echo ">>> Creating database '$db' with user '$user'..."
108
+
109
+ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
110
+ -- Create user if not exists
111
+ DO \\$\\$
112
+ BEGIN
113
+ IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$user') THEN
114
+ CREATE ROLE "$user" WITH LOGIN PASSWORD '$password';
115
+ RAISE NOTICE 'Created user: $user';
116
+ ELSE
117
+ -- Update password in case it changed
118
+ ALTER ROLE "$user" WITH PASSWORD '$password';
119
+ RAISE NOTICE 'User already exists, updated password: $user';
120
+ END IF;
121
+ END
122
+ \\$\\$;
123
+
124
+ -- Create database if not exists
125
+ SELECT 'CREATE DATABASE "$db" OWNER "$user"'
126
+ WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db')\\gexec
127
+
128
+ -- Grant privileges
129
+ GRANT ALL PRIVILEGES ON DATABASE "$db" TO "$user";
130
+ EOSQL
131
+
132
+ echo ">>> Done: database '$db' with user '$user'"
133
+ }
134
+
135
+ echo "═══════════════════════════════════════════════════════════"
136
+ echo " Initializing databases for companion services..."
137
+ echo "═══════════════════════════════════════════════════════════"
138
+
139
+ ${reqs.map((r) => `create_db_and_user "${r.dbName}" "${r.dbUser}" "\${${r.passwordEnvVar}:-$POSTGRES_PASSWORD}"`).join("\n")}
140
+
141
+ echo ""
142
+ echo "═══════════════════════════════════════════════════════════"
143
+ echo " All databases initialized successfully!"
144
+ echo " Services: ${reqs.map((r) => r.serviceName).join(", ")}"
145
+ echo "═══════════════════════════════════════════════════════════"
146
+ `;
147
+ }
148
+
149
+ //#endregion
150
+ export { generatePostgresInit, getDbRequirements };
151
+ //# sourceMappingURL=postgres-init.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-init.mjs","names":[],"sources":["../../src/generators/postgres-init.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Database requirement descriptor for a service.\n */\ninterface DbRequirement {\n\tserviceId: string;\n\tserviceName: string;\n\tdbName: string;\n\tdbUser: string;\n\tpasswordEnvVar: string;\n}\n\n/**\n * Known database requirements for services that need their own PostgreSQL database.\n * Maps service ID to the DB name, user, and password env var they expect.\n */\nconst DB_REQUIREMENTS: Record<string, Omit<DbRequirement, \"serviceId\" | \"serviceName\">> = {\n\tn8n: { dbName: \"n8n\", dbUser: \"n8n\", passwordEnvVar: \"N8N_DB_PASSWORD\" },\n\tpostiz: { dbName: \"postiz\", dbUser: \"postiz\", passwordEnvVar: \"POSTIZ_DB_PASSWORD\" },\n\toutline: { dbName: \"outline\", dbUser: \"outline\", passwordEnvVar: \"OUTLINE_DB_PASSWORD\" },\n\tdify: { dbName: \"dify\", dbUser: \"dify\", passwordEnvVar: \"DIFY_DB_PASSWORD\" },\n\ttemporal: { dbName: \"temporal\", dbUser: \"temporal\", passwordEnvVar: \"TEMPORAL_DB_PASSWORD\" },\n\tmattermost: {\n\t\tdbName: \"mattermost\",\n\t\tdbUser: \"mattermost\",\n\t\tpasswordEnvVar: \"MATTERMOST_DB_PASSWORD\",\n\t},\n\t\"matrix-synapse\": { dbName: \"synapse\", dbUser: \"synapse\", passwordEnvVar: \"SYNAPSE_DB_PASSWORD\" },\n\t\"paperless-ngx\": {\n\t\tdbName: \"paperless\",\n\t\tdbUser: \"paperless\",\n\t\tpasswordEnvVar: \"PAPERLESS_DB_PASSWORD\",\n\t},\n\tumami: { dbName: \"umami\", dbUser: \"umami\", passwordEnvVar: \"UMAMI_DB_PASSWORD\" },\n\tmatomo: { dbName: \"matomo\", dbUser: \"matomo\", passwordEnvVar: \"MATOMO_DB_PASSWORD\" },\n\tmixpost: { dbName: \"mixpost\", dbUser: \"mixpost\", passwordEnvVar: \"MIXPOST_DB_PASSWORD\" },\n};\n\n/**\n * Get the list of database requirements for all resolved services.\n * Exported so other generators (env, composer) can access the same data.\n */\nexport function getDbRequirements(resolved: ResolverOutput): DbRequirement[] {\n\tconst reqs: DbRequirement[] = [];\n\tfor (const { definition } of resolved.services) {\n\t\tconst req = DB_REQUIREMENTS[definition.id];\n\t\tif (req) {\n\t\t\treqs.push({\n\t\t\t\tserviceId: definition.id,\n\t\t\t\tserviceName: definition.name,\n\t\t\t\t...req,\n\t\t\t});\n\t\t}\n\t}\n\treturn reqs;\n}\n\n/**\n * Generates a PostgreSQL initialization script that creates databases and users\n * for all companion services that need their own DB.\n *\n * Returns null if PostgreSQL is not in the resolved stack or no services need extra DBs.\n * The script is designed to be mounted at /docker-entrypoint-initdb.d/init-databases.sh\n * and runs automatically during PostgreSQL's first initialization.\n */\nexport function generatePostgresInit(resolved: ResolverOutput): string | null {\n\tconst hasPostgres = resolved.services.some((s) => s.definition.id === \"postgresql\");\n\tif (!hasPostgres) return null;\n\n\tconst reqs = getDbRequirements(resolved);\n\tif (reqs.length === 0) return null;\n\n\tconst createCalls = reqs\n\t\t.map(\n\t\t\t(r) =>\n\t\t\t\t`create_db_and_user \"${r.dbName}\" \"${r.dbUser}\" \"\\${${r.passwordEnvVar}:-$POSTGRES_PASSWORD}\"`,\n\t\t)\n\t\t.join(\"\\n\");\n\n\treturn `#!/bin/bash\nset -e\n\n# ═══════════════════════════════════════════════════════════════════════════════\n# PostgreSQL Initialization Script\n# Generated by better-openclaw\n#\n# This script runs automatically during PostgreSQL's first initialization.\n# It creates databases and users for all companion services in your stack.\n# ═══════════════════════════════════════════════════════════════════════════════\n\ncreate_db_and_user() {\n local db=\"$1\"\n local user=\"$2\"\n local password=\"$3\"\n\n echo \">>> Creating database '$db' with user '$user'...\"\n\n psql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"$POSTGRES_DB\" <<-EOSQL\n -- Create user if not exists\n DO \\\\$\\\\$\n BEGIN\n IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$user') THEN\n CREATE ROLE \"$user\" WITH LOGIN PASSWORD '$password';\n RAISE NOTICE 'Created user: $user';\n ELSE\n -- Update password in case it changed\n ALTER ROLE \"$user\" WITH PASSWORD '$password';\n RAISE NOTICE 'User already exists, updated password: $user';\n END IF;\n END\n \\\\$\\\\$;\n\n -- Create database if not exists\n SELECT 'CREATE DATABASE \"$db\" OWNER \"$user\"'\n WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db')\\\\gexec\n\n -- Grant privileges\n GRANT ALL PRIVILEGES ON DATABASE \"$db\" TO \"$user\";\nEOSQL\n\n echo \">>> Done: database '$db' with user '$user'\"\n}\n\necho \"═══════════════════════════════════════════════════════════\"\necho \" Initializing databases for companion services...\"\necho \"═══════════════════════════════════════════════════════════\"\n\n${createCalls}\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════\"\necho \" All databases initialized successfully!\"\necho \" Services: ${reqs.map((r) => r.serviceName).join(\", \")}\"\necho \"═══════════════════════════════════════════════════════════\"\n`;\n}\n"],"mappings":";;;;;AAiBA,MAAM,kBAAoF;CACzF,KAAK;EAAE,QAAQ;EAAO,QAAQ;EAAO,gBAAgB;EAAmB;CACxE,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF,MAAM;EAAE,QAAQ;EAAQ,QAAQ;EAAQ,gBAAgB;EAAoB;CAC5E,UAAU;EAAE,QAAQ;EAAY,QAAQ;EAAY,gBAAgB;EAAwB;CAC5F,YAAY;EACX,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,kBAAkB;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACjG,iBAAiB;EAChB,QAAQ;EACR,QAAQ;EACR,gBAAgB;EAChB;CACD,OAAO;EAAE,QAAQ;EAAS,QAAQ;EAAS,gBAAgB;EAAqB;CAChF,QAAQ;EAAE,QAAQ;EAAU,QAAQ;EAAU,gBAAgB;EAAsB;CACpF,SAAS;EAAE,QAAQ;EAAW,QAAQ;EAAW,gBAAgB;EAAuB;CACxF;;;;;AAMD,SAAgB,kBAAkB,UAA2C;CAC5E,MAAM,OAAwB,EAAE;AAChC,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;EAC/C,MAAM,MAAM,gBAAgB,WAAW;AACvC,MAAI,IACH,MAAK,KAAK;GACT,WAAW,WAAW;GACtB,aAAa,WAAW;GACxB,GAAG;GACH,CAAC;;AAGJ,QAAO;;;;;;;;;;AAWR,SAAgB,qBAAqB,UAAyC;AAE7E,KAAI,CADgB,SAAS,SAAS,MAAM,MAAM,EAAE,WAAW,OAAO,aAAa,CACjE,QAAO;CAEzB,MAAM,OAAO,kBAAkB,SAAS;AACxC,KAAI,KAAK,WAAW,EAAG,QAAO;AAS9B,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAPa,KAClB,KACC,MACA,uBAAuB,EAAE,OAAO,KAAK,EAAE,OAAO,QAAQ,EAAE,eAAe,wBACxE,CACA,KAAK,KAAK,CAkDC;;;;;mBAKK,KAAK,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK,CAAC"}
@@ -1,8 +1,6 @@
1
- import "../schema-PSUY6yJU.mjs";
2
1
  import { ResolverOutput } from "../types.mjs";
3
2
 
4
3
  //#region src/generators/prometheus.d.ts
5
-
6
4
  /**
7
5
  * Generates a Prometheus configuration YAML file with scrape configs
8
6
  * for all services that expose metrics endpoints.
@@ -1 +1 @@
1
- {"version":3,"file":"prometheus.d.mts","names":[],"sources":["../../src/generators/prometheus.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA4BA;;;;iBAAgB,wBAAA,WAAmC"}
1
+ {"version":3,"file":"prometheus.d.mts","names":[],"sources":["../../src/generators/prometheus.ts"],"mappings":";;;;;AA4BA;;;;;iBAAgB,wBAAA,CAAyB,QAAA,EAAU,cAAA"}
@@ -1,3 +1,107 @@
1
- import { t as generatePrometheusConfig } from "../prometheus-WOlk-a1G.mjs";
1
+ //#region src/generators/prometheus.ts
2
+ /**
3
+ * Well-known metrics endpoints for services.
4
+ *
5
+ * Services that expose Prometheus-compatible metrics are listed here
6
+ * with their metrics path and port.
7
+ */
8
+ const metricsEndpoints = {
9
+ redis: {
10
+ path: "/metrics",
11
+ port: 9121
12
+ },
13
+ postgresql: {
14
+ path: "/metrics",
15
+ port: 9187
16
+ },
17
+ minio: {
18
+ path: "/minio/v2/metrics/cluster",
19
+ port: 9e3
20
+ },
21
+ n8n: {
22
+ path: "/metrics",
23
+ port: 5678
24
+ },
25
+ grafana: {
26
+ path: "/metrics",
27
+ port: 3e3
28
+ },
29
+ caddy: {
30
+ path: "/metrics",
31
+ port: 2019
32
+ },
33
+ traefik: {
34
+ path: "/metrics",
35
+ port: 8082
36
+ },
37
+ qdrant: {
38
+ path: "/metrics",
39
+ port: 6333
40
+ },
41
+ "uptime-kuma": {
42
+ path: "/metrics",
43
+ port: 3001
44
+ },
45
+ ollama: {
46
+ path: "/metrics",
47
+ port: 11434
48
+ }
49
+ };
50
+ /**
51
+ * Generates a Prometheus configuration YAML file with scrape configs
52
+ * for all services that expose metrics endpoints.
53
+ *
54
+ * @param resolved - The resolved service configuration
55
+ * @returns The prometheus.yml content as a string
56
+ */
57
+ function generatePrometheusConfig(resolved) {
58
+ const sections = [];
59
+ sections.push(`# ═══════════════════════════════════════════════════════════════════════════════
60
+ # Prometheus Configuration — Auto-generated by OpenClaw
61
+ # ═══════════════════════════════════════════════════════════════════════════════
2
62
 
3
- export { generatePrometheusConfig };
63
+ global:
64
+ scrape_interval: 15s
65
+ evaluation_interval: 15s
66
+ scrape_timeout: 10s
67
+
68
+ # ─── Scrape Configs ──────────────────────────────────────────────────────────
69
+
70
+ scrape_configs:
71
+ # Prometheus self-monitoring
72
+ - job_name: "prometheus"
73
+ static_configs:
74
+ - targets: ["localhost:9090"]
75
+ labels:
76
+ service: "prometheus"
77
+ component: "monitoring"`);
78
+ for (const { definition } of resolved.services) {
79
+ if (definition.id === "prometheus") continue;
80
+ const endpoint = metricsEndpoints[definition.id];
81
+ if (!endpoint) continue;
82
+ sections.push(`
83
+ # ${definition.icon} ${definition.name}
84
+ - job_name: "${definition.id}"
85
+ metrics_path: "${endpoint.path}"
86
+ static_configs:
87
+ - targets: ["${definition.id}:${endpoint.port}"]
88
+ labels:
89
+ service: "${definition.id}"
90
+ component: "${definition.category}"`);
91
+ }
92
+ sections.push(`
93
+ # 🐾 OpenClaw Gateway
94
+ - job_name: "openclaw-gateway"
95
+ metrics_path: "/metrics"
96
+ static_configs:
97
+ - targets: ["openclaw:18789"]
98
+ labels:
99
+ service: "openclaw"
100
+ component: "core"`);
101
+ sections.push("");
102
+ return sections.join("\n");
103
+ }
104
+
105
+ //#endregion
106
+ export { generatePrometheusConfig };
107
+ //# sourceMappingURL=prometheus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prometheus.mjs","names":[],"sources":["../../src/generators/prometheus.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Well-known metrics endpoints for services.\n *\n * Services that expose Prometheus-compatible metrics are listed here\n * with their metrics path and port.\n */\nconst metricsEndpoints: Record<string, { path: string; port: number }> = {\n\tredis: { path: \"/metrics\", port: 9121 },\n\tpostgresql: { path: \"/metrics\", port: 9187 },\n\tminio: { path: \"/minio/v2/metrics/cluster\", port: 9000 },\n\tn8n: { path: \"/metrics\", port: 5678 },\n\tgrafana: { path: \"/metrics\", port: 3000 },\n\tcaddy: { path: \"/metrics\", port: 2019 },\n\ttraefik: { path: \"/metrics\", port: 8082 },\n\tqdrant: { path: \"/metrics\", port: 6333 },\n\t\"uptime-kuma\": { path: \"/metrics\", port: 3001 },\n\tollama: { path: \"/metrics\", port: 11434 },\n};\n\n/**\n * Generates a Prometheus configuration YAML file with scrape configs\n * for all services that expose metrics endpoints.\n *\n * @param resolved - The resolved service configuration\n * @returns The prometheus.yml content as a string\n */\nexport function generatePrometheusConfig(resolved: ResolverOutput): string {\n\tconst sections: string[] = [];\n\n\t// ── Header ──────────────────────────────────────────────────────────────\n\n\tsections.push(`# ═══════════════════════════════════════════════════════════════════════════════\n# Prometheus Configuration — Auto-generated by OpenClaw\n# ═══════════════════════════════════════════════════════════════════════════════\n\nglobal:\n scrape_interval: 15s\n evaluation_interval: 15s\n scrape_timeout: 10s\n\n# ─── Scrape Configs ──────────────────────────────────────────────────────────\n\nscrape_configs:\n # Prometheus self-monitoring\n - job_name: \"prometheus\"\n static_configs:\n - targets: [\"localhost:9090\"]\n labels:\n service: \"prometheus\"\n component: \"monitoring\"`);\n\n\t// ── Service Scrape Configs ───────────────────────────────────────────────\n\n\tfor (const { definition } of resolved.services) {\n\t\t// Skip prometheus itself (already included above)\n\t\tif (definition.id === \"prometheus\") continue;\n\n\t\tconst endpoint = metricsEndpoints[definition.id];\n\t\tif (!endpoint) continue;\n\n\t\tsections.push(`\n # ${definition.icon} ${definition.name}\n - job_name: \"${definition.id}\"\n metrics_path: \"${endpoint.path}\"\n static_configs:\n - targets: [\"${definition.id}:${endpoint.port}\"]\n labels:\n service: \"${definition.id}\"\n component: \"${definition.category}\"`);\n\t}\n\n\t// ── OpenClaw Gateway Metrics ────────────────────────────────────────────\n\n\tsections.push(`\n # 🐾 OpenClaw Gateway\n - job_name: \"openclaw-gateway\"\n metrics_path: \"/metrics\"\n static_configs:\n - targets: [\"openclaw:18789\"]\n labels:\n service: \"openclaw\"\n component: \"core\"`);\n\n\tsections.push(\"\");\n\n\treturn sections.join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAQA,MAAM,mBAAmE;CACxE,OAAO;EAAE,MAAM;EAAY,MAAM;EAAM;CACvC,YAAY;EAAE,MAAM;EAAY,MAAM;EAAM;CAC5C,OAAO;EAAE,MAAM;EAA6B,MAAM;EAAM;CACxD,KAAK;EAAE,MAAM;EAAY,MAAM;EAAM;CACrC,SAAS;EAAE,MAAM;EAAY,MAAM;EAAM;CACzC,OAAO;EAAE,MAAM;EAAY,MAAM;EAAM;CACvC,SAAS;EAAE,MAAM;EAAY,MAAM;EAAM;CACzC,QAAQ;EAAE,MAAM;EAAY,MAAM;EAAM;CACxC,eAAe;EAAE,MAAM;EAAY,MAAM;EAAM;CAC/C,QAAQ;EAAE,MAAM;EAAY,MAAM;EAAO;CACzC;;;;;;;;AASD,SAAgB,yBAAyB,UAAkC;CAC1E,MAAM,WAAqB,EAAE;AAI7B,UAAS,KAAK;;;;;;;;;;;;;;;;;;mCAkBoB;AAIlC,MAAK,MAAM,EAAE,gBAAgB,SAAS,UAAU;AAE/C,MAAI,WAAW,OAAO,aAAc;EAEpC,MAAM,WAAW,iBAAiB,WAAW;AAC7C,MAAI,CAAC,SAAU;AAEf,WAAS,KAAK;MACV,WAAW,KAAK,GAAG,WAAW,KAAK;iBACxB,WAAW,GAAG;qBACV,SAAS,KAAK;;qBAEd,WAAW,GAAG,GAAG,SAAS,KAAK;;sBAE9B,WAAW,GAAG;wBACZ,WAAW,SAAS,GAAG;;AAK9C,UAAS,KAAK;;;;;;;;6BAQc;AAE5B,UAAS,KAAK,GAAG;AAEjB,QAAO,SAAS,KAAK,KAAK"}
@@ -1,4 +1,3 @@
1
- import "../schema-PSUY6yJU.mjs";
2
1
  import { ResolverOutput } from "../types.mjs";
3
2
 
4
3
  //#region src/generators/readme.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"readme.d.mts","names":[],"sources":["../../src/generators/readme.ts"],"sourcesContent":[],"mappings":";;;;;;;AAKiB,UAAA,aAAA,CAAa;EAgBd,WAAA,EAAA,MAAc;;;;;;;;;;;;;;iBAAd,cAAA,WAAyB,yBAAyB"}
1
+ {"version":3,"file":"readme.d.mts","names":[],"sources":["../../src/generators/readme.ts"],"mappings":";;;;;AAKA;UAAiB,aAAA;EAChB,WAAA;EACA,MAAA;EACA,KAAA;EADA;EAGA,cAAA;EAAA;EAEA,iBAAA;AAAA;;AASD;;;;;iBAAgB,cAAA,CAAe,QAAA,EAAU,cAAA,EAAgB,OAAA,EAAS,aAAA"}
@@ -1,3 +1,199 @@
1
- import { t as generateReadme } from "../readme-C7M3QE9a.mjs";
1
+ //#region src/generators/readme.ts
2
+ /**
3
+ * Generates a comprehensive README.md for the OpenClaw project.
4
+ *
5
+ * Includes: project description, service table, quick start instructions,
6
+ * service URLs, skill packs, and scripts documentation.
7
+ */
8
+ function generateReadme(resolved, options) {
9
+ const { projectName, domain, proxy, deploymentType, hasNativeServices } = options;
10
+ const sections = [];
11
+ sections.push(`# ${projectName}
2
12
 
3
- export { generateReadme };
13
+ > Self-hosted AI agent infrastructure powered by [OpenClaw](https://openclaw.dev).
14
+
15
+ This project provides a fully configured Docker Compose stack with ${resolved.services.length} services, ready to deploy on any server.
16
+ ${deploymentType === "bare-metal" && hasNativeServices ? "\n\n**Bare-metal (native + Docker):** Some services run natively on the host; the rest (including the OpenClaw gateway) run in Docker. Use the top-level `install.sh` or `install.ps1` to install/start native services first, then start the Docker stack." : ""}
17
+
18
+ ---`);
19
+ const serviceRows = resolved.services.map(({ definition }) => {
20
+ const mainPort = definition.ports.find((p) => p.exposed);
21
+ const url = mainPort ? domain ? `https://${definition.id}.${domain}` : `http://localhost:${mainPort.host}` : "N/A (internal)";
22
+ return `| ${definition.icon} | **${definition.name}** | ${url} | ${definition.description} |`;
23
+ }).join("\n");
24
+ sections.push(`## Services
25
+
26
+ | | Service | URL | Description |
27
+ |---|---------|-----|-------------|
28
+ ${serviceRows}
29
+ `);
30
+ sections.push(`## Quick Start
31
+
32
+ ### Prerequisites
33
+
34
+ - [Docker](https://docs.docker.com/get-docker/) (v24+)
35
+ - [Docker Compose](https://docs.docker.com/compose/install/) (v2+)
36
+ - At least ${Math.ceil(resolved.estimatedMemoryMB / 1024)}GB of RAM available
37
+
38
+ ### 1. Extract the ZIP
39
+
40
+ \`\`\`bash
41
+ unzip ${projectName}.zip
42
+ cd ${projectName}
43
+ \`\`\`
44
+
45
+ ### 2. Configure Environment
46
+
47
+ \`\`\`bash
48
+ cp .env.example .env
49
+ \`\`\`
50
+
51
+ Edit \`.env\` and update any values as needed. Secret values have been pre-generated — review and change them for production use.
52
+
53
+ ### 3. Start Services
54
+
55
+ \`\`\`bash
56
+ docker compose up -d
57
+ \`\`\`
58
+
59
+ Or use the provided start script:
60
+
61
+ \`\`\`bash
62
+ chmod +x scripts/*.sh
63
+ ./scripts/start.sh
64
+ \`\`\`
65
+
66
+ ### 4. Check Status
67
+
68
+ \`\`\`bash
69
+ docker compose ps
70
+ \`\`\`
71
+
72
+ ### 5. View Logs
73
+
74
+ \`\`\`bash
75
+ docker compose logs -f openclaw-gateway
76
+ \`\`\`
77
+
78
+ All services should show a healthy status within 1–2 minutes.
79
+ `);
80
+ sections.push(`## Using Docker Compose Profiles
81
+
82
+ Your stack may include profile-based compose files for optional service groups. Only the base services start by default — use profiles to activate additional groups:
83
+
84
+ \`\`\`bash
85
+ # Start base services only
86
+ docker compose up -d
87
+
88
+ # Start base + AI services (Ollama, Open WebUI, etc.)
89
+ docker compose -f docker-compose.yml -f docker-compose.ai.yml --profile ai up -d
90
+
91
+ # Start base + monitoring (Grafana, Prometheus, Uptime Kuma)
92
+ docker compose -f docker-compose.yml -f docker-compose.monitoring.yml --profile monitoring up -d
93
+
94
+ # Start base + AI + dev tools
95
+ docker compose -f docker-compose.yml -f docker-compose.ai.yml -f docker-compose.tools.yml --profile ai --profile tools up -d
96
+ \`\`\`
97
+
98
+ Available profile files (if generated):
99
+ | File | Profile | Services |
100
+ |------|---------|----------|
101
+ | \`docker-compose.ai.yml\` | \`ai\` | AI models, chat UIs, LLM platforms |
102
+ | \`docker-compose.media.yml\` | \`media\` | FFmpeg, Remotion, Motion Canvas |
103
+ | \`docker-compose.monitoring.yml\` | \`monitoring\` | Grafana, Prometheus, Uptime Kuma, analytics |
104
+ | \`docker-compose.tools.yml\` | \`tools\` | Gitea, code-server, Portainer, coding agents |
105
+ | \`docker-compose.social.yml\` | \`social\` | Postiz, Mixpost |
106
+ | \`docker-compose.knowledge.yml\` | \`knowledge\` | Outline, Paperless-ngx, NocoDB |
107
+ | \`docker-compose.communication.yml\` | \`communication\` | Matrix, Rocket.Chat, Mattermost |
108
+ `);
109
+ const portRows = resolved.services.filter(({ definition }) => definition.ports.length > 0).map(({ definition }) => {
110
+ const ports = definition.ports.map((p) => `\`${p.host}\` → \`${p.container}\` (${p.description})`).join(", ");
111
+ return `| ${definition.icon} ${definition.name} | ${ports} |`;
112
+ }).join("\n");
113
+ if (portRows) sections.push(`## Ports
114
+
115
+ | Service | Ports |
116
+ |---------|-------|
117
+ ${portRows}
118
+ `);
119
+ const allSkills = resolved.services.flatMap(({ definition }) => definition.skills.map((s) => ({
120
+ skillId: s.skillId,
121
+ serviceName: definition.name,
122
+ serviceIcon: definition.icon
123
+ })));
124
+ if (allSkills.length > 0) {
125
+ const skillRows = allSkills.map((s) => `| \`${s.skillId}\` | ${s.serviceIcon} ${s.serviceName} |`).join("\n");
126
+ sections.push(`## Skills
127
+
128
+ The following OpenClaw skills are automatically installed:
129
+
130
+ | Skill | Service |
131
+ |-------|---------|
132
+ ${skillRows}
133
+
134
+ Skills are located in \`openclaw/workspace/skills/\`. Each skill provides a \`SKILL.md\` with usage instructions.
135
+ `);
136
+ }
137
+ if (proxy && proxy !== "none") {
138
+ const proxyName = proxy === "caddy" ? "Caddy" : "Traefik";
139
+ sections.push(`## Reverse Proxy
140
+
141
+ This stack uses **${proxyName}** as a reverse proxy.${domain ? ` All services are available under \`${domain}\`.` : ""}
142
+
143
+ ${proxy === "caddy" ? "The Caddyfile is located at `config/Caddyfile`." : "Traefik configuration is handled via Docker labels."}
144
+ `);
145
+ }
146
+ sections.push(`## Management Scripts
147
+
148
+ \`\`\`bash
149
+ chmod +x scripts/*.sh # Make scripts executable (first time only)
150
+ \`\`\`
151
+
152
+ | Script | Description |
153
+ |--------|-------------|
154
+ | \`./scripts/start.sh\` | Validates .env, auto-generates gateway token, creates dirs, starts all services with health checks |
155
+ | \`./scripts/stop.sh\` | Gracefully stops all services |
156
+ | \`./scripts/update.sh\` | Pulls latest Docker images and restarts services |
157
+ | \`./scripts/backup.sh\` | Backs up all named Docker volumes to timestamped archives |
158
+ | \`./scripts/status.sh\` | Shows current service status, resource usage, and disk |
159
+ `);
160
+ const volumeRows = resolved.services.flatMap(({ definition }) => definition.volumes.map((v) => ({
161
+ name: v.name,
162
+ path: v.containerPath,
163
+ description: v.description,
164
+ serviceName: definition.name
165
+ })));
166
+ if (volumeRows.length > 0) {
167
+ const rows = volumeRows.map((v) => `| \`${v.name}\` | ${v.serviceName} | ${v.description} |`).join("\n");
168
+ sections.push(`## Volumes
169
+
170
+ | Volume | Service | Description |
171
+ |--------|---------|-------------|
172
+ ${rows}
173
+
174
+ > **Tip:** Use \`scripts/backup.sh\` to back up all volumes before updates.
175
+ `);
176
+ }
177
+ sections.push(`## Resource Estimates
178
+
179
+ - **Services:** ${resolved.services.length}
180
+ - **Estimated RAM:** ~${(resolved.estimatedMemoryMB / 1024).toFixed(1)}GB
181
+ - **Recommended minimum:** ${Math.ceil(resolved.estimatedMemoryMB / 1024) + 2}GB RAM
182
+ `);
183
+ if (resolved.warnings.length > 0) {
184
+ const warningList = resolved.warnings.map((w) => `- ⚠️ ${w.message}`).join("\n");
185
+ sections.push(`## Warnings
186
+
187
+ ${warningList}
188
+ `);
189
+ }
190
+ sections.push(`---
191
+
192
+ Generated by [OpenClaw](https://openclaw.dev) • ${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}
193
+ `);
194
+ return sections.join("\n");
195
+ }
196
+
197
+ //#endregion
198
+ export { generateReadme };
199
+ //# sourceMappingURL=readme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.mjs","names":[],"sources":["../../src/generators/readme.ts"],"sourcesContent":["import type { ResolverOutput } from \"../types.js\";\n\n/**\n * Options for README generation.\n */\nexport interface ReadmeOptions {\n\tprojectName: string;\n\tdomain?: string;\n\tproxy?: string;\n\t/** When \"bare-metal\", the stack uses native + Docker hybrid. */\n\tdeploymentType?: \"docker\" | \"bare-metal\";\n\t/** True when some services run natively on the host (bare-metal only). */\n\thasNativeServices?: boolean;\n}\n\n/**\n * Generates a comprehensive README.md for the OpenClaw project.\n *\n * Includes: project description, service table, quick start instructions,\n * service URLs, skill packs, and scripts documentation.\n */\nexport function generateReadme(resolved: ResolverOutput, options: ReadmeOptions): string {\n\tconst { projectName, domain, proxy, deploymentType, hasNativeServices } = options;\n\tconst sections: string[] = [];\n\n\t// ── Title & Description ─────────────────────────────────────────────────\n\n\tsections.push(`# ${projectName}\n\n> Self-hosted AI agent infrastructure powered by [OpenClaw](https://openclaw.dev).\n\nThis project provides a fully configured Docker Compose stack with ${resolved.services.length} services, ready to deploy on any server.\n${deploymentType === \"bare-metal\" && hasNativeServices ? \"\\n\\n**Bare-metal (native + Docker):** Some services run natively on the host; the rest (including the OpenClaw gateway) run in Docker. Use the top-level `install.sh` or `install.ps1` to install/start native services first, then start the Docker stack.\" : \"\"}\n\n---`);\n\n\t// ── Service Table ────────────────────────────────────────────────────────\n\n\tconst serviceRows = resolved.services\n\t\t.map(({ definition }) => {\n\t\t\tconst mainPort = definition.ports.find((p) => p.exposed);\n\t\t\tconst url = mainPort\n\t\t\t\t? domain\n\t\t\t\t\t? `https://${definition.id}.${domain}`\n\t\t\t\t\t: `http://localhost:${mainPort.host}`\n\t\t\t\t: \"N/A (internal)\";\n\t\t\treturn `| ${definition.icon} | **${definition.name}** | ${url} | ${definition.description} |`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tsections.push(`## Services\n\n| | Service | URL | Description |\n|---|---------|-----|-------------|\n${serviceRows}\n`);\n\n\t// ── Quick Start ──────────────────────────────────────────────────────────\n\n\tsections.push(`## Quick Start\n\n### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/) (v24+)\n- [Docker Compose](https://docs.docker.com/compose/install/) (v2+)\n- At least ${Math.ceil(resolved.estimatedMemoryMB / 1024)}GB of RAM available\n\n### 1. Extract the ZIP\n\n\\`\\`\\`bash\nunzip ${projectName}.zip\ncd ${projectName}\n\\`\\`\\`\n\n### 2. Configure Environment\n\n\\`\\`\\`bash\ncp .env.example .env\n\\`\\`\\`\n\nEdit \\`.env\\` and update any values as needed. Secret values have been pre-generated — review and change them for production use.\n\n### 3. Start Services\n\n\\`\\`\\`bash\ndocker compose up -d\n\\`\\`\\`\n\nOr use the provided start script:\n\n\\`\\`\\`bash\nchmod +x scripts/*.sh\n./scripts/start.sh\n\\`\\`\\`\n\n### 4. Check Status\n\n\\`\\`\\`bash\ndocker compose ps\n\\`\\`\\`\n\n### 5. View Logs\n\n\\`\\`\\`bash\ndocker compose logs -f openclaw-gateway\n\\`\\`\\`\n\nAll services should show a healthy status within 1–2 minutes.\n`);\n\n\t// ── Docker Compose Profiles ──────────────────────────────────────────────\n\n\tsections.push(`## Using Docker Compose Profiles\n\nYour stack may include profile-based compose files for optional service groups. Only the base services start by default — use profiles to activate additional groups:\n\n\\`\\`\\`bash\n# Start base services only\ndocker compose up -d\n\n# Start base + AI services (Ollama, Open WebUI, etc.)\ndocker compose -f docker-compose.yml -f docker-compose.ai.yml --profile ai up -d\n\n# Start base + monitoring (Grafana, Prometheus, Uptime Kuma)\ndocker compose -f docker-compose.yml -f docker-compose.monitoring.yml --profile monitoring up -d\n\n# Start base + AI + dev tools\ndocker compose -f docker-compose.yml -f docker-compose.ai.yml -f docker-compose.tools.yml --profile ai --profile tools up -d\n\\`\\`\\`\n\nAvailable profile files (if generated):\n| File | Profile | Services |\n|------|---------|----------|\n| \\`docker-compose.ai.yml\\` | \\`ai\\` | AI models, chat UIs, LLM platforms |\n| \\`docker-compose.media.yml\\` | \\`media\\` | FFmpeg, Remotion, Motion Canvas |\n| \\`docker-compose.monitoring.yml\\` | \\`monitoring\\` | Grafana, Prometheus, Uptime Kuma, analytics |\n| \\`docker-compose.tools.yml\\` | \\`tools\\` | Gitea, code-server, Portainer, coding agents |\n| \\`docker-compose.social.yml\\` | \\`social\\` | Postiz, Mixpost |\n| \\`docker-compose.knowledge.yml\\` | \\`knowledge\\` | Outline, Paperless-ngx, NocoDB |\n| \\`docker-compose.communication.yml\\` | \\`communication\\` | Matrix, Rocket.Chat, Mattermost |\n`);\n\n\t// ── Service URLs & Ports ─────────────────────────────────────────────────\n\n\tconst portRows = resolved.services\n\t\t.filter(({ definition }) => definition.ports.length > 0)\n\t\t.map(({ definition }) => {\n\t\t\tconst ports = definition.ports\n\t\t\t\t.map((p) => `\\`${p.host}\\` → \\`${p.container}\\` (${p.description})`)\n\t\t\t\t.join(\", \");\n\t\t\treturn `| ${definition.icon} ${definition.name} | ${ports} |`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tif (portRows) {\n\t\tsections.push(`## Ports\n\n| Service | Ports |\n|---------|-------|\n${portRows}\n`);\n\t}\n\n\t// ── Skill Packs ─────────────────────────────────────────────────────────\n\n\tconst allSkills = resolved.services.flatMap(({ definition }) =>\n\t\tdefinition.skills.map((s) => ({\n\t\t\tskillId: s.skillId,\n\t\t\tserviceName: definition.name,\n\t\t\tserviceIcon: definition.icon,\n\t\t})),\n\t);\n\n\tif (allSkills.length > 0) {\n\t\tconst skillRows = allSkills\n\t\t\t.map((s) => `| \\`${s.skillId}\\` | ${s.serviceIcon} ${s.serviceName} |`)\n\t\t\t.join(\"\\n\");\n\n\t\tsections.push(`## Skills\n\nThe following OpenClaw skills are automatically installed:\n\n| Skill | Service |\n|-------|---------|\n${skillRows}\n\nSkills are located in \\`openclaw/workspace/skills/\\`. Each skill provides a \\`SKILL.md\\` with usage instructions.\n`);\n\t}\n\n\t// ── Proxy Configuration ─────────────────────────────────────────────────\n\n\tif (proxy && proxy !== \"none\") {\n\t\tconst proxyName = proxy === \"caddy\" ? \"Caddy\" : \"Traefik\";\n\t\tsections.push(`## Reverse Proxy\n\nThis stack uses **${proxyName}** as a reverse proxy.${domain ? ` All services are available under \\`${domain}\\`.` : \"\"}\n\n${proxy === \"caddy\" ? \"The Caddyfile is located at `config/Caddyfile`.\" : \"Traefik configuration is handled via Docker labels.\"}\n`);\n\t}\n\n\t// ── Scripts ──────────────────────────────────────────────────────────────\n\n\tsections.push(`## Management Scripts\n\n\\`\\`\\`bash\nchmod +x scripts/*.sh # Make scripts executable (first time only)\n\\`\\`\\`\n\n| Script | Description |\n|--------|-------------|\n| \\`./scripts/start.sh\\` | Validates .env, auto-generates gateway token, creates dirs, starts all services with health checks |\n| \\`./scripts/stop.sh\\` | Gracefully stops all services |\n| \\`./scripts/update.sh\\` | Pulls latest Docker images and restarts services |\n| \\`./scripts/backup.sh\\` | Backs up all named Docker volumes to timestamped archives |\n| \\`./scripts/status.sh\\` | Shows current service status, resource usage, and disk |\n`);\n\n\t// ── Data & Volumes ──────────────────────────────────────────────────────\n\n\tconst volumeRows = resolved.services.flatMap(({ definition }) =>\n\t\tdefinition.volumes.map((v) => ({\n\t\t\tname: v.name,\n\t\t\tpath: v.containerPath,\n\t\t\tdescription: v.description,\n\t\t\tserviceName: definition.name,\n\t\t})),\n\t);\n\n\tif (volumeRows.length > 0) {\n\t\tconst rows = volumeRows\n\t\t\t.map((v) => `| \\`${v.name}\\` | ${v.serviceName} | ${v.description} |`)\n\t\t\t.join(\"\\n\");\n\n\t\tsections.push(`## Volumes\n\n| Volume | Service | Description |\n|--------|---------|-------------|\n${rows}\n\n> **Tip:** Use \\`scripts/backup.sh\\` to back up all volumes before updates.\n`);\n\t}\n\n\t// ── Estimated Resources ─────────────────────────────────────────────────\n\n\tsections.push(`## Resource Estimates\n\n- **Services:** ${resolved.services.length}\n- **Estimated RAM:** ~${(resolved.estimatedMemoryMB / 1024).toFixed(1)}GB\n- **Recommended minimum:** ${Math.ceil(resolved.estimatedMemoryMB / 1024) + 2}GB RAM\n`);\n\n\t// ── Warnings ─────────────────────────────────────────────────────────────\n\n\tif (resolved.warnings.length > 0) {\n\t\tconst warningList = resolved.warnings.map((w) => `- ⚠️ ${w.message}`).join(\"\\n\");\n\n\t\tsections.push(`## Warnings\n\n${warningList}\n`);\n\t}\n\n\t// ── Footer ──────────────────────────────────────────────────────────────\n\n\tsections.push(`---\n\nGenerated by [OpenClaw](https://openclaw.dev) • ${new Date().toISOString().split(\"T\")[0]}\n`);\n\n\treturn sections.join(\"\\n\");\n}\n"],"mappings":";;;;;;;AAqBA,SAAgB,eAAe,UAA0B,SAAgC;CACxF,MAAM,EAAE,aAAa,QAAQ,OAAO,gBAAgB,sBAAsB;CAC1E,MAAM,WAAqB,EAAE;AAI7B,UAAS,KAAK,KAAK,YAAY;;;;qEAIqC,SAAS,SAAS,OAAO;EAC5F,mBAAmB,gBAAgB,oBAAoB,gQAAgQ,GAAG;;KAEvT;CAIJ,MAAM,cAAc,SAAS,SAC3B,KAAK,EAAE,iBAAiB;EACxB,MAAM,WAAW,WAAW,MAAM,MAAM,MAAM,EAAE,QAAQ;EACxD,MAAM,MAAM,WACT,SACC,WAAW,WAAW,GAAG,GAAG,WAC5B,oBAAoB,SAAS,SAC9B;AACH,SAAO,KAAK,WAAW,KAAK,OAAO,WAAW,KAAK,OAAO,IAAI,KAAK,WAAW,YAAY;GACzF,CACD,KAAK,KAAK;AAEZ,UAAS,KAAK;;;;EAIb,YAAY;EACZ;AAID,UAAS,KAAK;;;;;;aAMF,KAAK,KAAK,SAAS,oBAAoB,KAAK,CAAC;;;;;QAKlD,YAAY;KACf,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCf;AAID,UAAS,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4Bb;CAID,MAAM,WAAW,SAAS,SACxB,QAAQ,EAAE,iBAAiB,WAAW,MAAM,SAAS,EAAE,CACvD,KAAK,EAAE,iBAAiB;EACxB,MAAM,QAAQ,WAAW,MACvB,KAAK,MAAM,KAAK,EAAE,KAAK,SAAS,EAAE,UAAU,MAAM,EAAE,YAAY,GAAG,CACnE,KAAK,KAAK;AACZ,SAAO,KAAK,WAAW,KAAK,GAAG,WAAW,KAAK,KAAK,MAAM;GACzD,CACD,KAAK,KAAK;AAEZ,KAAI,SACH,UAAS,KAAK;;;;EAId,SAAS;EACT;CAKD,MAAM,YAAY,SAAS,SAAS,SAAS,EAAE,iBAC9C,WAAW,OAAO,KAAK,OAAO;EAC7B,SAAS,EAAE;EACX,aAAa,WAAW;EACxB,aAAa,WAAW;EACxB,EAAE,CACH;AAED,KAAI,UAAU,SAAS,GAAG;EACzB,MAAM,YAAY,UAChB,KAAK,MAAM,OAAO,EAAE,QAAQ,OAAO,EAAE,YAAY,GAAG,EAAE,YAAY,IAAI,CACtE,KAAK,KAAK;AAEZ,WAAS,KAAK;;;;;;EAMd,UAAU;;;EAGV;;AAKD,KAAI,SAAS,UAAU,QAAQ;EAC9B,MAAM,YAAY,UAAU,UAAU,UAAU;AAChD,WAAS,KAAK;;oBAEI,UAAU,wBAAwB,SAAS,uCAAuC,OAAO,OAAO,GAAG;;EAErH,UAAU,UAAU,oDAAoD,sDAAsD;EAC9H;;AAKD,UAAS,KAAK;;;;;;;;;;;;;EAab;CAID,MAAM,aAAa,SAAS,SAAS,SAAS,EAAE,iBAC/C,WAAW,QAAQ,KAAK,OAAO;EAC9B,MAAM,EAAE;EACR,MAAM,EAAE;EACR,aAAa,EAAE;EACf,aAAa,WAAW;EACxB,EAAE,CACH;AAED,KAAI,WAAW,SAAS,GAAG;EAC1B,MAAM,OAAO,WACX,KAAK,MAAM,OAAO,EAAE,KAAK,OAAO,EAAE,YAAY,KAAK,EAAE,YAAY,IAAI,CACrE,KAAK,KAAK;AAEZ,WAAS,KAAK;;;;EAId,KAAK;;;EAGL;;AAKD,UAAS,KAAK;;kBAEG,SAAS,SAAS,OAAO;yBAClB,SAAS,oBAAoB,MAAM,QAAQ,EAAE,CAAC;6BAC1C,KAAK,KAAK,SAAS,oBAAoB,KAAK,GAAG,EAAE;EAC5E;AAID,KAAI,SAAS,SAAS,SAAS,GAAG;EACjC,MAAM,cAAc,SAAS,SAAS,KAAK,MAAM,QAAQ,EAAE,UAAU,CAAC,KAAK,KAAK;AAEhF,WAAS,KAAK;;EAEd,YAAY;EACZ;;AAKD,UAAS,KAAK;;mEAEmC,IAAI,MAAM,EAAC,aAAa,CAAC,MAAM,IAAI,CAAC,GAAG;EACvF;AAED,QAAO,SAAS,KAAK,KAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.d.mts","names":[],"sources":["../../src/generators/scripts.ts"],"sourcesContent":[],"mappings":";;AAKA;;;;iBAAgB,eAAA,CAAA,GAAmB"}
1
+ {"version":3,"file":"scripts.d.mts","names":[],"sources":["../../src/generators/scripts.ts"],"mappings":";;AAKA;;;;iBAAgB,eAAA,CAAA,GAAmB,MAAA"}