@better-openclaw/core 1.0.4 → 1.0.6

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 (474) hide show
  1. package/.github/workflows/publish-core.yml +32 -33
  2. package/dist/anything-llm-DIIPhz6K.mjs +44 -0
  3. package/dist/anything-llm-DIIPhz6K.mjs.map +1 -0
  4. package/dist/appflowy-DdoE-dKg.mjs +45 -0
  5. package/dist/appflowy-DdoE-dKg.mjs.map +1 -0
  6. package/dist/bare-metal-install-DpYZDoGq.mjs +224 -0
  7. package/dist/bare-metal-install-DpYZDoGq.mjs.map +1 -0
  8. package/dist/bare-metal-partition-CYlOxf9B.mjs +48 -0
  9. package/dist/bare-metal-partition-CYlOxf9B.mjs.map +1 -0
  10. package/dist/bare-metal-partition.d.mts +27 -0
  11. package/dist/bare-metal-partition.d.mts.map +1 -0
  12. package/dist/bare-metal-partition.mjs +3 -0
  13. package/dist/bare-metal-partition.test.d.mts +1 -0
  14. package/dist/bare-metal-partition.test.mjs +58 -0
  15. package/dist/bare-metal-partition.test.mjs.map +1 -0
  16. package/dist/beszel-DHAG1zl0.mjs +45 -0
  17. package/dist/beszel-DHAG1zl0.mjs.map +1 -0
  18. package/dist/browserless-gUuvGmMD.mjs +85 -0
  19. package/dist/browserless-gUuvGmMD.mjs.map +1 -0
  20. package/dist/caddy-BJDrqnmw.mjs +77 -0
  21. package/dist/caddy-BJDrqnmw.mjs.map +1 -0
  22. package/dist/caddy-_NIdWKrf.mjs +52 -0
  23. package/dist/caddy-_NIdWKrf.mjs.map +1 -0
  24. package/dist/chromadb-g4rIsfAl.mjs +63 -0
  25. package/dist/chromadb-g4rIsfAl.mjs.map +1 -0
  26. package/dist/claude-code-DPRA1fy_.mjs +52 -0
  27. package/dist/claude-code-DPRA1fy_.mjs.map +1 -0
  28. package/dist/code-server-BdZZxxm5.mjs +66 -0
  29. package/dist/code-server-BdZZxxm5.mjs.map +1 -0
  30. package/dist/codex-DFVzfrfX.mjs +45 -0
  31. package/dist/codex-DFVzfrfX.mjs.map +1 -0
  32. package/dist/composer-CSM5YycB.mjs +287 -0
  33. package/dist/composer-CSM5YycB.mjs.map +1 -0
  34. package/dist/composer.d.mts +22 -0
  35. package/dist/composer.d.mts.map +1 -0
  36. package/dist/composer.mjs +3 -0
  37. package/dist/composer.snapshot.test.d.mts +1 -0
  38. package/dist/composer.snapshot.test.mjs +92 -0
  39. package/dist/composer.snapshot.test.mjs.map +1 -0
  40. package/dist/composer.test.d.mts +1 -0
  41. package/dist/composer.test.mjs +166 -0
  42. package/dist/composer.test.mjs.map +1 -0
  43. package/dist/coolify-Z5_zDgM3.mjs +49 -0
  44. package/dist/coolify-Z5_zDgM3.mjs.map +1 -0
  45. package/dist/definitions-BXpb1kzs.mjs +138 -0
  46. package/dist/definitions-BXpb1kzs.mjs.map +1 -0
  47. package/dist/dify-jDc9U6Ku.mjs +81 -0
  48. package/dist/dify-jDc9U6Ku.mjs.map +1 -0
  49. package/dist/docsgpt-BXM1c2JC.mjs +45 -0
  50. package/dist/docsgpt-BXM1c2JC.mjs.map +1 -0
  51. package/dist/dokploy-Ci8_fb0_.mjs +49 -0
  52. package/dist/dokploy-Ci8_fb0_.mjs.map +1 -0
  53. package/dist/dozzle-fAt2sLRL.mjs +41 -0
  54. package/dist/dozzle-fAt2sLRL.mjs.map +1 -0
  55. package/dist/env-D2h46lHT.mjs +250 -0
  56. package/dist/env-D2h46lHT.mjs.map +1 -0
  57. package/dist/ffmpeg-BCtnA8m_.mjs +66 -0
  58. package/dist/ffmpeg-BCtnA8m_.mjs.map +1 -0
  59. package/dist/flowise-CJTTBa7J.mjs +45 -0
  60. package/dist/flowise-CJTTBa7J.mjs.map +1 -0
  61. package/dist/gemini-cli-Bfwv6hYe.mjs +46 -0
  62. package/dist/gemini-cli-Bfwv6hYe.mjs.map +1 -0
  63. package/dist/generate.d.mts +13 -0
  64. package/dist/generate.d.mts.map +1 -0
  65. package/dist/generate.mjs +169 -0
  66. package/dist/generate.mjs.map +1 -0
  67. package/dist/generate.test.d.mts +1 -0
  68. package/dist/generate.test.mjs +283 -0
  69. package/dist/generate.test.mjs.map +1 -0
  70. package/dist/generators/bare-metal-install.d.mts +19 -0
  71. package/dist/generators/bare-metal-install.d.mts.map +1 -0
  72. package/dist/generators/bare-metal-install.mjs +3 -0
  73. package/dist/generators/bare-metal-install.test.d.mts +1 -0
  74. package/dist/generators/bare-metal-install.test.mjs +48 -0
  75. package/dist/generators/bare-metal-install.test.mjs.map +1 -0
  76. package/dist/generators/caddy.d.mts +19 -0
  77. package/dist/generators/caddy.d.mts.map +1 -0
  78. package/dist/generators/caddy.mjs +3 -0
  79. package/dist/generators/env.d.mts +47 -0
  80. package/dist/generators/env.d.mts.map +1 -0
  81. package/dist/generators/env.mjs +3 -0
  82. package/dist/generators/grafana.d.mts +22 -0
  83. package/dist/generators/grafana.d.mts.map +1 -0
  84. package/dist/generators/grafana.mjs +3 -0
  85. package/dist/generators/n8n-workflows.d.mts +13 -0
  86. package/dist/generators/n8n-workflows.d.mts.map +1 -0
  87. package/dist/generators/n8n-workflows.mjs +3 -0
  88. package/dist/generators/native-services.d.mts +18 -0
  89. package/dist/generators/native-services.d.mts.map +1 -0
  90. package/dist/generators/native-services.mjs +3 -0
  91. package/dist/generators/postgres-init.d.mts +31 -0
  92. package/dist/generators/postgres-init.d.mts.map +1 -0
  93. package/dist/generators/postgres-init.mjs +3 -0
  94. package/dist/generators/prometheus.d.mts +16 -0
  95. package/dist/generators/prometheus.d.mts.map +1 -0
  96. package/dist/generators/prometheus.mjs +3 -0
  97. package/dist/generators/readme.d.mts +26 -0
  98. package/dist/generators/readme.d.mts.map +1 -0
  99. package/dist/generators/readme.mjs +3 -0
  100. package/dist/generators/scripts.d.mts +10 -0
  101. package/dist/generators/scripts.d.mts.map +1 -0
  102. package/dist/generators/scripts.mjs +3 -0
  103. package/dist/generators/skills.d.mts +16 -0
  104. package/dist/generators/skills.d.mts.map +1 -0
  105. package/dist/generators/skills.mjs +3 -0
  106. package/dist/gitea-BGkqa-sD.mjs +49 -0
  107. package/dist/gitea-BGkqa-sD.mjs.map +1 -0
  108. package/dist/gotify-D7p8oNM3.mjs +62 -0
  109. package/dist/gotify-D7p8oNM3.mjs.map +1 -0
  110. package/dist/grafana-BlnWc6js.mjs +63 -0
  111. package/dist/grafana-BlnWc6js.mjs.map +1 -0
  112. package/dist/grafana-D3kIm8RX.mjs +293 -0
  113. package/dist/grafana-D3kIm8RX.mjs.map +1 -0
  114. package/dist/index.d.mts +21 -0
  115. package/dist/index.mjs +22 -0
  116. package/dist/kimi-BFu1v1sU.mjs +46 -0
  117. package/dist/kimi-BFu1v1sU.mjs.map +1 -0
  118. package/dist/lasuite-meet-agents-nlPhMEaN.mjs +36 -0
  119. package/dist/lasuite-meet-agents-nlPhMEaN.mjs.map +1 -0
  120. package/dist/lasuite-meet-backend-9H7rZ8Pc.mjs +134 -0
  121. package/dist/lasuite-meet-backend-9H7rZ8Pc.mjs.map +1 -0
  122. package/dist/lasuite-meet-frontend-B4xNbnBa.mjs +48 -0
  123. package/dist/lasuite-meet-frontend-B4xNbnBa.mjs.map +1 -0
  124. package/dist/librechat-CoPIHXKK.mjs +50 -0
  125. package/dist/librechat-CoPIHXKK.mjs.map +1 -0
  126. package/dist/lightpanda-QchAPgNX.mjs +59 -0
  127. package/dist/lightpanda-QchAPgNX.mjs.map +1 -0
  128. package/dist/litellm-Dgl6iTry.mjs +47 -0
  129. package/dist/litellm-Dgl6iTry.mjs.map +1 -0
  130. package/dist/livekit-C13SxlVB.mjs +56 -0
  131. package/dist/livekit-C13SxlVB.mjs.map +1 -0
  132. package/dist/magic-string.es-Dew0Rnsa.mjs +1014 -0
  133. package/dist/magic-string.es-Dew0Rnsa.mjs.map +1 -0
  134. package/dist/matomo-CiOoggYl.mjs +80 -0
  135. package/dist/matomo-CiOoggYl.mjs.map +1 -0
  136. package/dist/matrix-synapse-CP20A7NN.mjs +88 -0
  137. package/dist/matrix-synapse-CP20A7NN.mjs.map +1 -0
  138. package/dist/mattermost-CeFVuhIr.mjs +61 -0
  139. package/dist/mattermost-CeFVuhIr.mjs.map +1 -0
  140. package/dist/meilisearch-CLiQiTdN.mjs +78 -0
  141. package/dist/meilisearch-CLiQiTdN.mjs.map +1 -0
  142. package/dist/minio-_QuguAeo.mjs +102 -0
  143. package/dist/minio-_QuguAeo.mjs.map +1 -0
  144. package/dist/mixpost-eSFPM9XK.mjs +87 -0
  145. package/dist/mixpost-eSFPM9XK.mjs.map +1 -0
  146. package/dist/motion-canvas-Bk1ruvuX.mjs +52 -0
  147. package/dist/motion-canvas-Bk1ruvuX.mjs.map +1 -0
  148. package/dist/n8n-W5qeU34C.mjs +154 -0
  149. package/dist/n8n-W5qeU34C.mjs.map +1 -0
  150. package/dist/n8n-workflows-BPmKVx8z.mjs +75 -0
  151. package/dist/n8n-workflows-BPmKVx8z.mjs.map +1 -0
  152. package/dist/native-services-CwOCM-Xz.mjs +78 -0
  153. package/dist/native-services-CwOCM-Xz.mjs.map +1 -0
  154. package/dist/nocodb-DQNbSYh_.mjs +45 -0
  155. package/dist/nocodb-DQNbSYh_.mjs.map +1 -0
  156. package/dist/ntfy-B8_cZAx2.mjs +63 -0
  157. package/dist/ntfy-B8_cZAx2.mjs.map +1 -0
  158. package/dist/ollama-BiKAypcO.mjs +66 -0
  159. package/dist/ollama-BiKAypcO.mjs.map +1 -0
  160. package/dist/open-webui-DZOG4_xL.mjs +50 -0
  161. package/dist/open-webui-DZOG4_xL.mjs.map +1 -0
  162. package/dist/opencode-Dvfh5KvA.mjs +50 -0
  163. package/dist/opencode-Dvfh5KvA.mjs.map +1 -0
  164. package/dist/openpanel-BuWHhDze.mjs +46 -0
  165. package/dist/openpanel-BuWHhDze.mjs.map +1 -0
  166. package/dist/outline-Dy-YzdYS.mjs +74 -0
  167. package/dist/outline-Dy-YzdYS.mjs.map +1 -0
  168. package/dist/paperless-ngx-DVtWWpKg.mjs +93 -0
  169. package/dist/paperless-ngx-DVtWWpKg.mjs.map +1 -0
  170. package/dist/playwright-server-Boiz8--G.mjs +42 -0
  171. package/dist/playwright-server-Boiz8--G.mjs.map +1 -0
  172. package/dist/portainer-D9MU96UI.mjs +49 -0
  173. package/dist/portainer-D9MU96UI.mjs.map +1 -0
  174. package/dist/postgres-init-BiM-xZtq.mjs +151 -0
  175. package/dist/postgres-init-BiM-xZtq.mjs.map +1 -0
  176. package/dist/postgresql-s65Z9RqR.mjs +84 -0
  177. package/dist/postgresql-s65Z9RqR.mjs.map +1 -0
  178. package/dist/postiz-U6EK23EY.mjs +83 -0
  179. package/dist/postiz-U6EK23EY.mjs.map +1 -0
  180. package/dist/presets/registry.d.mts +10 -0
  181. package/dist/presets/registry.d.mts.map +1 -0
  182. package/dist/presets/registry.mjs +159 -0
  183. package/dist/presets/registry.mjs.map +1 -0
  184. package/dist/presets/registry.test.d.mts +1 -0
  185. package/dist/presets/registry.test.mjs +34 -0
  186. package/dist/presets/registry.test.mjs.map +1 -0
  187. package/dist/prometheus-WOlk-a1G.mjs +107 -0
  188. package/dist/prometheus-WOlk-a1G.mjs.map +1 -0
  189. package/dist/prometheus-x901F67p.mjs +52 -0
  190. package/dist/prometheus-x901F67p.mjs.map +1 -0
  191. package/dist/qdrant-DZW9uW4e.mjs +77 -0
  192. package/dist/qdrant-DZW9uW4e.mjs.map +1 -0
  193. package/dist/readme-C7M3QE9a.mjs +199 -0
  194. package/dist/readme-C7M3QE9a.mjs.map +1 -0
  195. package/dist/redis-DPMOf237.mjs +91 -0
  196. package/dist/redis-DPMOf237.mjs.map +1 -0
  197. package/dist/registry-CqLarEm5.mjs +30 -0
  198. package/dist/registry-CqLarEm5.mjs.map +1 -0
  199. package/dist/registry-DLX9Q4VQ.mjs +215 -0
  200. package/dist/registry-DLX9Q4VQ.mjs.map +1 -0
  201. package/dist/remotion-COkr0wpr.mjs +55 -0
  202. package/dist/remotion-COkr0wpr.mjs.map +1 -0
  203. package/dist/resolver-Dl5clk-d.mjs +194 -0
  204. package/dist/resolver-Dl5clk-d.mjs.map +1 -0
  205. package/dist/resolver.d.mts +23 -0
  206. package/dist/resolver.d.mts.map +1 -0
  207. package/dist/resolver.mjs +3 -0
  208. package/dist/resolver.test.d.mts +1 -0
  209. package/dist/resolver.test.mjs +237 -0
  210. package/dist/resolver.test.mjs.map +1 -0
  211. package/dist/rocketchat-BebQT1MZ.mjs +57 -0
  212. package/dist/rocketchat-BebQT1MZ.mjs.map +1 -0
  213. package/dist/schema-PSUY6yJU.d.mts +700 -0
  214. package/dist/schema-PSUY6yJU.d.mts.map +1 -0
  215. package/dist/schema.d.mts +2 -0
  216. package/dist/schema.mjs +258 -0
  217. package/dist/schema.mjs.map +1 -0
  218. package/dist/schema.test.d.mts +1 -0
  219. package/dist/schema.test.mjs +264 -0
  220. package/dist/schema.test.mjs.map +1 -0
  221. package/dist/scripts-DsljWbP4.mjs +351 -0
  222. package/dist/scripts-DsljWbP4.mjs.map +1 -0
  223. package/dist/searxng-tJpBkchC.mjs +65 -0
  224. package/dist/searxng-tJpBkchC.mjs.map +1 -0
  225. package/dist/services/definitions/anything-llm.d.mts +8 -0
  226. package/dist/services/definitions/anything-llm.d.mts.map +1 -0
  227. package/dist/services/definitions/anything-llm.mjs +3 -0
  228. package/dist/services/definitions/appflowy.d.mts +8 -0
  229. package/dist/services/definitions/appflowy.d.mts.map +1 -0
  230. package/dist/services/definitions/appflowy.mjs +3 -0
  231. package/dist/services/definitions/beszel.d.mts +8 -0
  232. package/dist/services/definitions/beszel.d.mts.map +1 -0
  233. package/dist/services/definitions/beszel.mjs +3 -0
  234. package/dist/services/definitions/browserless.d.mts +8 -0
  235. package/dist/services/definitions/browserless.d.mts.map +1 -0
  236. package/dist/services/definitions/browserless.mjs +3 -0
  237. package/dist/services/definitions/caddy.d.mts +8 -0
  238. package/dist/services/definitions/caddy.d.mts.map +1 -0
  239. package/dist/services/definitions/caddy.mjs +3 -0
  240. package/dist/services/definitions/chromadb.d.mts +8 -0
  241. package/dist/services/definitions/chromadb.d.mts.map +1 -0
  242. package/dist/services/definitions/chromadb.mjs +3 -0
  243. package/dist/services/definitions/claude-code.d.mts +8 -0
  244. package/dist/services/definitions/claude-code.d.mts.map +1 -0
  245. package/dist/services/definitions/claude-code.mjs +3 -0
  246. package/dist/services/definitions/code-server.d.mts +8 -0
  247. package/dist/services/definitions/code-server.d.mts.map +1 -0
  248. package/dist/services/definitions/code-server.mjs +3 -0
  249. package/dist/services/definitions/codex.d.mts +8 -0
  250. package/dist/services/definitions/codex.d.mts.map +1 -0
  251. package/dist/services/definitions/codex.mjs +3 -0
  252. package/dist/services/definitions/coolify.d.mts +8 -0
  253. package/dist/services/definitions/coolify.d.mts.map +1 -0
  254. package/dist/services/definitions/coolify.mjs +3 -0
  255. package/dist/services/definitions/dify.d.mts +8 -0
  256. package/dist/services/definitions/dify.d.mts.map +1 -0
  257. package/dist/services/definitions/dify.mjs +3 -0
  258. package/dist/services/definitions/docsgpt.d.mts +8 -0
  259. package/dist/services/definitions/docsgpt.d.mts.map +1 -0
  260. package/dist/services/definitions/docsgpt.mjs +3 -0
  261. package/dist/services/definitions/dokploy.d.mts +8 -0
  262. package/dist/services/definitions/dokploy.d.mts.map +1 -0
  263. package/dist/services/definitions/dokploy.mjs +3 -0
  264. package/dist/services/definitions/dozzle.d.mts +8 -0
  265. package/dist/services/definitions/dozzle.d.mts.map +1 -0
  266. package/dist/services/definitions/dozzle.mjs +3 -0
  267. package/dist/services/definitions/ffmpeg.d.mts +8 -0
  268. package/dist/services/definitions/ffmpeg.d.mts.map +1 -0
  269. package/dist/services/definitions/ffmpeg.mjs +3 -0
  270. package/dist/services/definitions/flowise.d.mts +8 -0
  271. package/dist/services/definitions/flowise.d.mts.map +1 -0
  272. package/dist/services/definitions/flowise.mjs +3 -0
  273. package/dist/services/definitions/gemini-cli.d.mts +8 -0
  274. package/dist/services/definitions/gemini-cli.d.mts.map +1 -0
  275. package/dist/services/definitions/gemini-cli.mjs +3 -0
  276. package/dist/services/definitions/gitea.d.mts +8 -0
  277. package/dist/services/definitions/gitea.d.mts.map +1 -0
  278. package/dist/services/definitions/gitea.mjs +3 -0
  279. package/dist/services/definitions/gotify.d.mts +8 -0
  280. package/dist/services/definitions/gotify.d.mts.map +1 -0
  281. package/dist/services/definitions/gotify.mjs +3 -0
  282. package/dist/services/definitions/grafana.d.mts +8 -0
  283. package/dist/services/definitions/grafana.d.mts.map +1 -0
  284. package/dist/services/definitions/grafana.mjs +3 -0
  285. package/dist/services/definitions/index.d.mts +73 -0
  286. package/dist/services/definitions/index.d.mts.map +1 -0
  287. package/dist/services/definitions/index.mjs +68 -0
  288. package/dist/services/definitions/kimi.d.mts +8 -0
  289. package/dist/services/definitions/kimi.d.mts.map +1 -0
  290. package/dist/services/definitions/kimi.mjs +3 -0
  291. package/dist/services/definitions/lasuite-meet-agents.d.mts +8 -0
  292. package/dist/services/definitions/lasuite-meet-agents.d.mts.map +1 -0
  293. package/dist/services/definitions/lasuite-meet-agents.mjs +3 -0
  294. package/dist/services/definitions/lasuite-meet-backend.d.mts +8 -0
  295. package/dist/services/definitions/lasuite-meet-backend.d.mts.map +1 -0
  296. package/dist/services/definitions/lasuite-meet-backend.mjs +3 -0
  297. package/dist/services/definitions/lasuite-meet-frontend.d.mts +8 -0
  298. package/dist/services/definitions/lasuite-meet-frontend.d.mts.map +1 -0
  299. package/dist/services/definitions/lasuite-meet-frontend.mjs +3 -0
  300. package/dist/services/definitions/librechat.d.mts +8 -0
  301. package/dist/services/definitions/librechat.d.mts.map +1 -0
  302. package/dist/services/definitions/librechat.mjs +3 -0
  303. package/dist/services/definitions/lightpanda.d.mts +8 -0
  304. package/dist/services/definitions/lightpanda.d.mts.map +1 -0
  305. package/dist/services/definitions/lightpanda.mjs +3 -0
  306. package/dist/services/definitions/litellm.d.mts +8 -0
  307. package/dist/services/definitions/litellm.d.mts.map +1 -0
  308. package/dist/services/definitions/litellm.mjs +3 -0
  309. package/dist/services/definitions/livekit.d.mts +8 -0
  310. package/dist/services/definitions/livekit.d.mts.map +1 -0
  311. package/dist/services/definitions/livekit.mjs +3 -0
  312. package/dist/services/definitions/matomo.d.mts +8 -0
  313. package/dist/services/definitions/matomo.d.mts.map +1 -0
  314. package/dist/services/definitions/matomo.mjs +3 -0
  315. package/dist/services/definitions/matrix-synapse.d.mts +8 -0
  316. package/dist/services/definitions/matrix-synapse.d.mts.map +1 -0
  317. package/dist/services/definitions/matrix-synapse.mjs +3 -0
  318. package/dist/services/definitions/mattermost.d.mts +8 -0
  319. package/dist/services/definitions/mattermost.d.mts.map +1 -0
  320. package/dist/services/definitions/mattermost.mjs +3 -0
  321. package/dist/services/definitions/meilisearch.d.mts +8 -0
  322. package/dist/services/definitions/meilisearch.d.mts.map +1 -0
  323. package/dist/services/definitions/meilisearch.mjs +3 -0
  324. package/dist/services/definitions/minio.d.mts +8 -0
  325. package/dist/services/definitions/minio.d.mts.map +1 -0
  326. package/dist/services/definitions/minio.mjs +3 -0
  327. package/dist/services/definitions/mixpost.d.mts +8 -0
  328. package/dist/services/definitions/mixpost.d.mts.map +1 -0
  329. package/dist/services/definitions/mixpost.mjs +3 -0
  330. package/dist/services/definitions/motion-canvas.d.mts +8 -0
  331. package/dist/services/definitions/motion-canvas.d.mts.map +1 -0
  332. package/dist/services/definitions/motion-canvas.mjs +3 -0
  333. package/dist/services/definitions/n8n.d.mts +8 -0
  334. package/dist/services/definitions/n8n.d.mts.map +1 -0
  335. package/dist/services/definitions/n8n.mjs +3 -0
  336. package/dist/services/definitions/nocodb.d.mts +8 -0
  337. package/dist/services/definitions/nocodb.d.mts.map +1 -0
  338. package/dist/services/definitions/nocodb.mjs +3 -0
  339. package/dist/services/definitions/ntfy.d.mts +8 -0
  340. package/dist/services/definitions/ntfy.d.mts.map +1 -0
  341. package/dist/services/definitions/ntfy.mjs +3 -0
  342. package/dist/services/definitions/ollama.d.mts +8 -0
  343. package/dist/services/definitions/ollama.d.mts.map +1 -0
  344. package/dist/services/definitions/ollama.mjs +3 -0
  345. package/dist/services/definitions/open-webui.d.mts +8 -0
  346. package/dist/services/definitions/open-webui.d.mts.map +1 -0
  347. package/dist/services/definitions/open-webui.mjs +3 -0
  348. package/dist/services/definitions/opencode.d.mts +8 -0
  349. package/dist/services/definitions/opencode.d.mts.map +1 -0
  350. package/dist/services/definitions/opencode.mjs +3 -0
  351. package/dist/services/definitions/openpanel.d.mts +8 -0
  352. package/dist/services/definitions/openpanel.d.mts.map +1 -0
  353. package/dist/services/definitions/openpanel.mjs +3 -0
  354. package/dist/services/definitions/outline.d.mts +8 -0
  355. package/dist/services/definitions/outline.d.mts.map +1 -0
  356. package/dist/services/definitions/outline.mjs +3 -0
  357. package/dist/services/definitions/paperless-ngx.d.mts +8 -0
  358. package/dist/services/definitions/paperless-ngx.d.mts.map +1 -0
  359. package/dist/services/definitions/paperless-ngx.mjs +3 -0
  360. package/dist/services/definitions/playwright-server.d.mts +8 -0
  361. package/dist/services/definitions/playwright-server.d.mts.map +1 -0
  362. package/dist/services/definitions/playwright-server.mjs +3 -0
  363. package/dist/services/definitions/portainer.d.mts +8 -0
  364. package/dist/services/definitions/portainer.d.mts.map +1 -0
  365. package/dist/services/definitions/portainer.mjs +3 -0
  366. package/dist/services/definitions/postgresql.d.mts +8 -0
  367. package/dist/services/definitions/postgresql.d.mts.map +1 -0
  368. package/dist/services/definitions/postgresql.mjs +3 -0
  369. package/dist/services/definitions/postiz.d.mts +8 -0
  370. package/dist/services/definitions/postiz.d.mts.map +1 -0
  371. package/dist/services/definitions/postiz.mjs +3 -0
  372. package/dist/services/definitions/prometheus.d.mts +8 -0
  373. package/dist/services/definitions/prometheus.d.mts.map +1 -0
  374. package/dist/services/definitions/prometheus.mjs +3 -0
  375. package/dist/services/definitions/qdrant.d.mts +8 -0
  376. package/dist/services/definitions/qdrant.d.mts.map +1 -0
  377. package/dist/services/definitions/qdrant.mjs +3 -0
  378. package/dist/services/definitions/redis.d.mts +8 -0
  379. package/dist/services/definitions/redis.d.mts.map +1 -0
  380. package/dist/services/definitions/redis.mjs +3 -0
  381. package/dist/services/definitions/remotion.d.mts +8 -0
  382. package/dist/services/definitions/remotion.d.mts.map +1 -0
  383. package/dist/services/definitions/remotion.mjs +3 -0
  384. package/dist/services/definitions/rocketchat.d.mts +8 -0
  385. package/dist/services/definitions/rocketchat.d.mts.map +1 -0
  386. package/dist/services/definitions/rocketchat.mjs +3 -0
  387. package/dist/services/definitions/searxng.d.mts +8 -0
  388. package/dist/services/definitions/searxng.d.mts.map +1 -0
  389. package/dist/services/definitions/searxng.mjs +3 -0
  390. package/dist/services/definitions/stable-diffusion.d.mts +8 -0
  391. package/dist/services/definitions/stable-diffusion.d.mts.map +1 -0
  392. package/dist/services/definitions/stable-diffusion.mjs +3 -0
  393. package/dist/services/definitions/steel-browser.d.mts +8 -0
  394. package/dist/services/definitions/steel-browser.d.mts.map +1 -0
  395. package/dist/services/definitions/steel-browser.mjs +3 -0
  396. package/dist/services/definitions/tailscale.d.mts +8 -0
  397. package/dist/services/definitions/tailscale.d.mts.map +1 -0
  398. package/dist/services/definitions/tailscale.mjs +3 -0
  399. package/dist/services/definitions/temporal.d.mts +8 -0
  400. package/dist/services/definitions/temporal.d.mts.map +1 -0
  401. package/dist/services/definitions/temporal.mjs +3 -0
  402. package/dist/services/definitions/traefik.d.mts +8 -0
  403. package/dist/services/definitions/traefik.d.mts.map +1 -0
  404. package/dist/services/definitions/traefik.mjs +3 -0
  405. package/dist/services/definitions/umami.d.mts +8 -0
  406. package/dist/services/definitions/umami.d.mts.map +1 -0
  407. package/dist/services/definitions/umami.mjs +3 -0
  408. package/dist/services/definitions/uptime-kuma.d.mts +8 -0
  409. package/dist/services/definitions/uptime-kuma.d.mts.map +1 -0
  410. package/dist/services/definitions/uptime-kuma.mjs +3 -0
  411. package/dist/services/definitions/valkey.d.mts +8 -0
  412. package/dist/services/definitions/valkey.d.mts.map +1 -0
  413. package/dist/services/definitions/valkey.mjs +3 -0
  414. package/dist/services/definitions/watchtower.d.mts +8 -0
  415. package/dist/services/definitions/watchtower.d.mts.map +1 -0
  416. package/dist/services/definitions/watchtower.mjs +3 -0
  417. package/dist/services/definitions/weaviate.d.mts +8 -0
  418. package/dist/services/definitions/weaviate.d.mts.map +1 -0
  419. package/dist/services/definitions/weaviate.mjs +3 -0
  420. package/dist/services/definitions/whisper.d.mts +8 -0
  421. package/dist/services/definitions/whisper.d.mts.map +1 -0
  422. package/dist/services/definitions/whisper.mjs +3 -0
  423. package/dist/services/registry.d.mts +17 -0
  424. package/dist/services/registry.d.mts.map +1 -0
  425. package/dist/services/registry.mjs +3 -0
  426. package/dist/services/registry.test.d.mts +1 -0
  427. package/dist/services/registry.test.mjs +64 -0
  428. package/dist/services/registry.test.mjs.map +1 -0
  429. package/dist/skills/registry.d.mts +12 -0
  430. package/dist/skills/registry.d.mts.map +1 -0
  431. package/dist/skills/registry.mjs +3 -0
  432. package/dist/skills-DWG72Y3X.mjs +587 -0
  433. package/dist/skills-DWG72Y3X.mjs.map +1 -0
  434. package/dist/stable-diffusion-BulAzkyT.mjs +48 -0
  435. package/dist/stable-diffusion-BulAzkyT.mjs.map +1 -0
  436. package/dist/steel-browser-Cc0bYBjM.mjs +77 -0
  437. package/dist/steel-browser-Cc0bYBjM.mjs.map +1 -0
  438. package/dist/tailscale-CrM4EZlF.mjs +69 -0
  439. package/dist/tailscale-CrM4EZlF.mjs.map +1 -0
  440. package/dist/temporal-49gA0msh.mjs +100 -0
  441. package/dist/temporal-49gA0msh.mjs.map +1 -0
  442. package/dist/traefik-Da-c1f55.mjs +58 -0
  443. package/dist/traefik-Da-c1f55.mjs.map +1 -0
  444. package/dist/types.d.mts +64 -0
  445. package/dist/types.d.mts.map +1 -0
  446. package/dist/types.mjs +92 -0
  447. package/dist/types.mjs.map +1 -0
  448. package/dist/umami-csBSsHqO.mjs +46 -0
  449. package/dist/umami-csBSsHqO.mjs.map +1 -0
  450. package/dist/uptime-kuma-D0NvVuXD.mjs +51 -0
  451. package/dist/uptime-kuma-D0NvVuXD.mjs.map +1 -0
  452. package/dist/validator-2FspYNva.mjs +111 -0
  453. package/dist/validator-2FspYNva.mjs.map +1 -0
  454. package/dist/validator.d.mts +21 -0
  455. package/dist/validator.d.mts.map +1 -0
  456. package/dist/validator.mjs +3 -0
  457. package/dist/validator.test.d.mts +1 -0
  458. package/dist/validator.test.mjs +65 -0
  459. package/dist/validator.test.mjs.map +1 -0
  460. package/dist/valkey-BCZqGJ0L.mjs +61 -0
  461. package/dist/valkey-BCZqGJ0L.mjs.map +1 -0
  462. package/dist/version-manager.d.mts +15 -0
  463. package/dist/version-manager.d.mts.map +1 -0
  464. package/dist/version-manager.mjs +55 -0
  465. package/dist/version-manager.mjs.map +1 -0
  466. package/dist/vi.2VT5v0um-Cs3Z_fCB.mjs +12916 -0
  467. package/dist/vi.2VT5v0um-Cs3Z_fCB.mjs.map +1 -0
  468. package/dist/watchtower-BWuvFGpA.mjs +47 -0
  469. package/dist/watchtower-BWuvFGpA.mjs.map +1 -0
  470. package/dist/weaviate-DttY1Hn7.mjs +90 -0
  471. package/dist/weaviate-DttY1Hn7.mjs.map +1 -0
  472. package/dist/whisper-CLu7-Vd8.mjs +62 -0
  473. package/dist/whisper-CLu7-Vd8.mjs.map +1 -0
  474. package/package.json +27 -26
@@ -0,0 +1,250 @@
1
+ import { n as getDbRequirements } from "./postgres-init-BiM-xZtq.mjs";
2
+ import { randomBytes } from "node:crypto";
3
+
4
+ //#region src/generators/env.ts
5
+ /**
6
+ * Generates `.env.example` and `.env` file contents from resolved services.
7
+ *
8
+ * - `.env.example`: every env var with descriptive comments, placeholders for secrets
9
+ * - `.env`: same vars but secrets filled with cryptographically random values when generateSecrets is true
10
+ */
11
+ function generateEnvFiles(resolved, options) {
12
+ const version = options.openclawVersion ?? "latest";
13
+ const lines = [];
14
+ lines.push({
15
+ comment: formatComment("OpenClaw version to deploy", "OpenClaw Core", true, false),
16
+ key: "OPENCLAW_VERSION",
17
+ exampleValue: version,
18
+ actualValue: version
19
+ });
20
+ const gatewayToken = options.generateSecrets ? randomBytes(24).toString("hex") : "";
21
+ lines.push({
22
+ comment: formatComment("Authentication token for the OpenClaw gateway API", "OpenClaw Core", true, true),
23
+ key: "OPENCLAW_GATEWAY_TOKEN",
24
+ exampleValue: "your_gateway_token_here",
25
+ actualValue: gatewayToken
26
+ });
27
+ lines.push({
28
+ comment: formatComment("Port the OpenClaw gateway listens on", "OpenClaw Core", true, false),
29
+ key: "OPENCLAW_GATEWAY_PORT",
30
+ exampleValue: "18789",
31
+ actualValue: "18789"
32
+ });
33
+ lines.push({
34
+ comment: formatComment("Port for the OpenClaw ACP bridge (WebSocket)", "OpenClaw Core", false, false),
35
+ key: "OPENCLAW_BRIDGE_PORT",
36
+ exampleValue: "18790",
37
+ actualValue: "18790"
38
+ });
39
+ lines.push({
40
+ comment: formatComment("Gateway network bind mode (lan for Docker networking, loopback for local-only)", "OpenClaw Core", false, false),
41
+ key: "OPENCLAW_GATEWAY_BIND",
42
+ exampleValue: "lan",
43
+ actualValue: "lan"
44
+ });
45
+ lines.push({
46
+ comment: formatComment("Host path to OpenClaw configuration directory", "OpenClaw Core", true, false),
47
+ key: "OPENCLAW_CONFIG_DIR",
48
+ exampleValue: "./openclaw/config",
49
+ actualValue: "./openclaw/config"
50
+ });
51
+ lines.push({
52
+ comment: formatComment("Host path to OpenClaw workspace directory", "OpenClaw Core", true, false),
53
+ key: "OPENCLAW_WORKSPACE_DIR",
54
+ exampleValue: "./openclaw/workspace",
55
+ actualValue: "./openclaw/workspace"
56
+ });
57
+ lines.push({
58
+ comment: formatComment("OpenClaw Docker image override (default uses ghcr.io/openclaw/openclaw)", "OpenClaw Core", false, false),
59
+ key: "OPENCLAW_IMAGE",
60
+ exampleValue: "",
61
+ actualValue: ""
62
+ });
63
+ if (options.domain) lines.push({
64
+ comment: formatComment("Primary domain for service routing", "OpenClaw Core", false, false),
65
+ key: "OPENCLAW_DOMAIN",
66
+ exampleValue: "example.com",
67
+ actualValue: options.domain
68
+ });
69
+ lines.push({
70
+ comment: "\n# ═══════════════════════════════════════════════════════════════════════════════\n# Claude Web Provider (optional)\n# ═══════════════════════════════════════════════════════════════════════════════",
71
+ key: "",
72
+ exampleValue: "",
73
+ actualValue: ""
74
+ });
75
+ lines.push({
76
+ comment: formatComment("Claude AI session key for web provider authentication", "OpenClaw Core", false, true),
77
+ key: "CLAUDE_AI_SESSION_KEY",
78
+ exampleValue: "your_claude_ai_session_key_here",
79
+ actualValue: ""
80
+ });
81
+ lines.push({
82
+ comment: formatComment("Claude web session key for web provider authentication", "OpenClaw Core", false, true),
83
+ key: "CLAUDE_WEB_SESSION_KEY",
84
+ exampleValue: "your_claude_web_session_key_here",
85
+ actualValue: ""
86
+ });
87
+ lines.push({
88
+ comment: formatComment("Claude web cookie for web provider authentication", "OpenClaw Core", false, true),
89
+ key: "CLAUDE_WEB_COOKIE",
90
+ exampleValue: "your_claude_web_cookie_here",
91
+ actualValue: ""
92
+ });
93
+ const dbReqs = getDbRequirements(resolved);
94
+ if (dbReqs.length > 0) {
95
+ lines.push({
96
+ comment: "\n# ═══════════════════════════════════════════════════════════════════════════════\n# Per-Service Database Passwords\n# Each service gets its own PostgreSQL database and credentials\n# ═══════════════════════════════════════════════════════════════════════════════",
97
+ key: "",
98
+ exampleValue: "",
99
+ actualValue: ""
100
+ });
101
+ for (const req of dbReqs) {
102
+ const secretValue = options.generateSecrets ? randomBytes(24).toString("hex") : "";
103
+ lines.push({
104
+ comment: formatComment(`PostgreSQL password for ${req.serviceName} (database: ${req.dbName}, user: ${req.dbUser})`, req.serviceName, true, true),
105
+ key: req.passwordEnvVar,
106
+ exampleValue: `your_${req.passwordEnvVar.toLowerCase()}_here`,
107
+ actualValue: secretValue
108
+ });
109
+ }
110
+ }
111
+ const dbPasswordKeys = dbReqs.map((r) => r.passwordEnvVar);
112
+ const seenKeys = new Set([
113
+ "OPENCLAW_VERSION",
114
+ "OPENCLAW_GATEWAY_TOKEN",
115
+ "OPENCLAW_GATEWAY_PORT",
116
+ "OPENCLAW_BRIDGE_PORT",
117
+ "OPENCLAW_GATEWAY_BIND",
118
+ "OPENCLAW_CONFIG_DIR",
119
+ "OPENCLAW_WORKSPACE_DIR",
120
+ "OPENCLAW_IMAGE",
121
+ "OPENCLAW_DOMAIN",
122
+ "CLAUDE_AI_SESSION_KEY",
123
+ "CLAUDE_WEB_SESSION_KEY",
124
+ "CLAUDE_WEB_COOKIE",
125
+ ...dbPasswordKeys
126
+ ]);
127
+ for (const { definition } of resolved.services) {
128
+ const allEnvVars = [...definition.environment, ...definition.openclawEnvVars];
129
+ if (allEnvVars.length === 0) continue;
130
+ lines.push({
131
+ comment: `\n# ═══════════════════════════════════════════════════════════════════════════════\n# ${definition.icon} ${definition.name}\n# ═══════════════════════════════════════════════════════════════════════════════`,
132
+ key: "",
133
+ exampleValue: "",
134
+ actualValue: ""
135
+ });
136
+ const isNative = options.nativeServiceIds?.has(definition.id);
137
+ for (const envVar of allEnvVars) {
138
+ if (seenKeys.has(envVar.key)) continue;
139
+ seenKeys.add(envVar.key);
140
+ const secretValue = options.generateSecrets ? randomBytes(24).toString("hex") : "";
141
+ const isHostVar = envVar.key.endsWith("_HOST");
142
+ const hostValue = isNative && isHostVar ? "host.docker.internal" : null;
143
+ const exampleValue = hostValue ? hostValue : envVar.secret ? `your_${envVar.key.toLowerCase()}_here` : envVar.defaultValue;
144
+ let actualValue;
145
+ if (hostValue) actualValue = hostValue;
146
+ else if (envVar.secret) actualValue = envVar.defaultValue.startsWith("${") ? envVar.defaultValue : secretValue;
147
+ else actualValue = envVar.defaultValue;
148
+ lines.push({
149
+ comment: formatComment(envVar.description, definition.name, envVar.required, envVar.secret),
150
+ key: envVar.key,
151
+ exampleValue,
152
+ actualValue
153
+ });
154
+ }
155
+ }
156
+ const header = [
157
+ "# ═══════════════════════════════════════════════════════════════════════════════",
158
+ "# OpenClaw Environment Configuration",
159
+ `# Generated at ${(/* @__PURE__ */ new Date()).toISOString()}`,
160
+ "# ═══════════════════════════════════════════════════════════════════════════════",
161
+ ""
162
+ ].join("\n");
163
+ let envExample = header;
164
+ let env = header;
165
+ for (const line of lines) if (line.key === "") {
166
+ envExample += `${line.comment}\n`;
167
+ env += `${line.comment}\n`;
168
+ } else {
169
+ envExample += `${line.comment}\n${line.key}=${line.exampleValue}\n\n`;
170
+ env += `${line.comment}\n${line.key}=${line.actualValue}\n\n`;
171
+ }
172
+ return {
173
+ envExample,
174
+ env
175
+ };
176
+ }
177
+ /**
178
+ * Format a descriptive comment block for an environment variable.
179
+ */
180
+ function formatComment(description, serviceName, required, secret) {
181
+ return [`# ${description}`, `# Service: ${serviceName} | Required: ${required ? "Yes" : "No"} | Secret: ${secret ? "Yes" : "No"}`].join("\n");
182
+ }
183
+ /**
184
+ * Returns environment variables grouped by service, suitable for UI rendering.
185
+ *
186
+ * - First group is always "OpenClaw Core" with base variables.
187
+ * - Subsequent groups correspond to each resolved service.
188
+ * - Variables are deduplicated across groups (first occurrence wins).
189
+ */
190
+ function getStructuredEnvVars(resolved) {
191
+ const groups = [];
192
+ const seenKeys = /* @__PURE__ */ new Set();
193
+ const coreVars = [
194
+ {
195
+ key: "OPENCLAW_VERSION",
196
+ description: "OpenClaw version to deploy",
197
+ secret: false,
198
+ required: true,
199
+ defaultValue: "latest"
200
+ },
201
+ {
202
+ key: "OPENCLAW_GATEWAY_TOKEN",
203
+ description: "Authentication token for the OpenClaw gateway API",
204
+ secret: true,
205
+ required: true,
206
+ defaultValue: ""
207
+ },
208
+ {
209
+ key: "OPENCLAW_GATEWAY_PORT",
210
+ description: "Port the OpenClaw gateway listens on",
211
+ secret: false,
212
+ required: true,
213
+ defaultValue: "18789"
214
+ }
215
+ ];
216
+ for (const v of coreVars) seenKeys.add(v.key);
217
+ groups.push({
218
+ serviceName: "OpenClaw Core",
219
+ serviceIcon: "⚙️",
220
+ serviceId: "openclaw-core",
221
+ vars: coreVars
222
+ });
223
+ for (const { definition } of resolved.services) {
224
+ const allEnvVars = [...definition.environment, ...definition.openclawEnvVars];
225
+ const vars = [];
226
+ for (const envVar of allEnvVars) {
227
+ if (seenKeys.has(envVar.key)) continue;
228
+ seenKeys.add(envVar.key);
229
+ vars.push({
230
+ key: envVar.key,
231
+ description: envVar.description,
232
+ secret: envVar.secret,
233
+ required: envVar.required,
234
+ defaultValue: envVar.defaultValue
235
+ });
236
+ }
237
+ if (vars.length === 0) continue;
238
+ groups.push({
239
+ serviceName: definition.name,
240
+ serviceIcon: definition.icon,
241
+ serviceId: definition.id,
242
+ vars
243
+ });
244
+ }
245
+ return groups;
246
+ }
247
+
248
+ //#endregion
249
+ export { getStructuredEnvVars as n, generateEnvFiles as t };
250
+ //# sourceMappingURL=env-D2h46lHT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-D2h46lHT.mjs","names":[],"sources":["../src/generators/env.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport type { ResolverOutput } from \"../types.js\";\nimport { getDbRequirements } from \"./postgres-init.js\";\n\n/**\n * Options for environment file generation.\n */\nexport interface EnvGeneratorOptions {\n\tgenerateSecrets: boolean;\n\tdomain?: string;\n\topenclawVersion?: string;\n\t/** When set, host-like vars (e.g. REDIS_HOST) for these services use host.docker.internal so gateway in Docker can reach native services on host. */\n\tnativeServiceIds?: Set<string>;\n}\n\n/**\n * Generates `.env.example` and `.env` file contents from resolved services.\n *\n * - `.env.example`: every env var with descriptive comments, placeholders for secrets\n * - `.env`: same vars but secrets filled with cryptographically random values when generateSecrets is true\n */\nexport function generateEnvFiles(\n\tresolved: ResolverOutput,\n\toptions: EnvGeneratorOptions,\n): { envExample: string; env: string } {\n\tconst version = options.openclawVersion ?? \"latest\";\n\tconst lines: { comment: string; key: string; exampleValue: string; actualValue: string }[] = [];\n\n\t// ── Base OpenClaw Variables ──────────────────────────────────────────────\n\n\tlines.push({\n\t\tcomment: formatComment(\"OpenClaw version to deploy\", \"OpenClaw Core\", true, false),\n\t\tkey: \"OPENCLAW_VERSION\",\n\t\texampleValue: version,\n\t\tactualValue: version,\n\t});\n\n\tconst gatewayToken = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Authentication token for the OpenClaw gateway API\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"OPENCLAW_GATEWAY_TOKEN\",\n\t\texampleValue: \"your_gateway_token_here\",\n\t\tactualValue: gatewayToken,\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\"Port the OpenClaw gateway listens on\", \"OpenClaw Core\", true, false),\n\t\tkey: \"OPENCLAW_GATEWAY_PORT\",\n\t\texampleValue: \"18789\",\n\t\tactualValue: \"18789\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Port for the OpenClaw ACP bridge (WebSocket)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_BRIDGE_PORT\",\n\t\texampleValue: \"18790\",\n\t\tactualValue: \"18790\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Gateway network bind mode (lan for Docker networking, loopback for local-only)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_GATEWAY_BIND\",\n\t\texampleValue: \"lan\",\n\t\tactualValue: \"lan\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Host path to OpenClaw configuration directory\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_CONFIG_DIR\",\n\t\texampleValue: \"./openclaw/config\",\n\t\tactualValue: \"./openclaw/config\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Host path to OpenClaw workspace directory\",\n\t\t\t\"OpenClaw Core\",\n\t\t\ttrue,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_WORKSPACE_DIR\",\n\t\texampleValue: \"./openclaw/workspace\",\n\t\tactualValue: \"./openclaw/workspace\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"OpenClaw Docker image override (default uses ghcr.io/openclaw/openclaw)\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\tfalse,\n\t\t),\n\t\tkey: \"OPENCLAW_IMAGE\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tif (options.domain) {\n\t\tlines.push({\n\t\t\tcomment: formatComment(\"Primary domain for service routing\", \"OpenClaw Core\", false, false),\n\t\t\tkey: \"OPENCLAW_DOMAIN\",\n\t\t\texampleValue: \"example.com\",\n\t\t\tactualValue: options.domain,\n\t\t});\n\t}\n\n\t// Claude web-provider session variables (optional)\n\tlines.push({\n\t\tcomment:\n\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# Claude Web Provider (optional)\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\tkey: \"\",\n\t\texampleValue: \"\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude AI session key for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_AI_SESSION_KEY\",\n\t\texampleValue: \"your_claude_ai_session_key_here\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude web session key for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_WEB_SESSION_KEY\",\n\t\texampleValue: \"your_claude_web_session_key_here\",\n\t\tactualValue: \"\",\n\t});\n\n\tlines.push({\n\t\tcomment: formatComment(\n\t\t\t\"Claude web cookie for web provider authentication\",\n\t\t\t\"OpenClaw Core\",\n\t\t\tfalse,\n\t\t\ttrue,\n\t\t),\n\t\tkey: \"CLAUDE_WEB_COOKIE\",\n\t\texampleValue: \"your_claude_web_cookie_here\",\n\t\tactualValue: \"\",\n\t});\n\n\t// ── Per-Service Database Passwords ──────────────────────────────────────\n\n\tconst dbReqs = getDbRequirements(resolved);\n\n\tif (dbReqs.length > 0) {\n\t\tlines.push({\n\t\t\tcomment:\n\t\t\t\t\"\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# Per-Service Database Passwords\\n# Each service gets its own PostgreSQL database and credentials\\n# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tfor (const req of dbReqs) {\n\t\t\tconst secretValue = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(\n\t\t\t\t\t`PostgreSQL password for ${req.serviceName} (database: ${req.dbName}, user: ${req.dbUser})`,\n\t\t\t\t\treq.serviceName,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tkey: req.passwordEnvVar,\n\t\t\t\texampleValue: `your_${req.passwordEnvVar.toLowerCase()}_here`,\n\t\t\t\tactualValue: secretValue,\n\t\t\t});\n\t\t}\n\t}\n\n\t// ── Service-Specific Variables ───────────────────────────────────────────\n\n\tconst dbPasswordKeys = dbReqs.map((r) => r.passwordEnvVar);\n\tconst seenKeys = new Set<string>([\n\t\t\"OPENCLAW_VERSION\",\n\t\t\"OPENCLAW_GATEWAY_TOKEN\",\n\t\t\"OPENCLAW_GATEWAY_PORT\",\n\t\t\"OPENCLAW_BRIDGE_PORT\",\n\t\t\"OPENCLAW_GATEWAY_BIND\",\n\t\t\"OPENCLAW_CONFIG_DIR\",\n\t\t\"OPENCLAW_WORKSPACE_DIR\",\n\t\t\"OPENCLAW_IMAGE\",\n\t\t\"OPENCLAW_DOMAIN\",\n\t\t\"CLAUDE_AI_SESSION_KEY\",\n\t\t\"CLAUDE_WEB_SESSION_KEY\",\n\t\t\"CLAUDE_WEB_COOKIE\",\n\t\t...dbPasswordKeys,\n\t]);\n\n\tfor (const { definition } of resolved.services) {\n\t\tconst allEnvVars = [...definition.environment, ...definition.openclawEnvVars];\n\n\t\tif (allEnvVars.length === 0) continue;\n\n\t\t// Section separator for this service\n\t\tlines.push({\n\t\t\tcomment: `\\n# ═══════════════════════════════════════════════════════════════════════════════\\n# ${definition.icon} ${definition.name}\\n# ═══════════════════════════════════════════════════════════════════════════════`,\n\t\t\tkey: \"\",\n\t\t\texampleValue: \"\",\n\t\t\tactualValue: \"\",\n\t\t});\n\n\t\tconst isNative = options.nativeServiceIds?.has(definition.id);\n\n\t\tfor (const envVar of allEnvVars) {\n\t\t\tif (seenKeys.has(envVar.key)) continue;\n\t\t\tseenKeys.add(envVar.key);\n\n\t\t\tconst secretValue = options.generateSecrets ? randomBytes(24).toString(\"hex\") : \"\";\n\n\t\t\t// For native services, host-like vars must point to host so gateway (in Docker) can reach them\n\t\t\tconst isHostVar = envVar.key.endsWith(\"_HOST\");\n\t\t\tconst hostValue = isNative && isHostVar ? \"host.docker.internal\" : null;\n\n\t\t\tconst exampleValue = hostValue\n\t\t\t\t? hostValue\n\t\t\t\t: envVar.secret\n\t\t\t\t\t? `your_${envVar.key.toLowerCase()}_here`\n\t\t\t\t\t: envVar.defaultValue;\n\n\t\t\tlet actualValue: string;\n\t\t\tif (hostValue) {\n\t\t\t\tactualValue = hostValue;\n\t\t\t} else if (envVar.secret) {\n\t\t\t\tactualValue = envVar.defaultValue.startsWith(\"${\") ? envVar.defaultValue : secretValue;\n\t\t\t} else {\n\t\t\t\tactualValue = envVar.defaultValue;\n\t\t\t}\n\n\t\t\tlines.push({\n\t\t\t\tcomment: formatComment(envVar.description, definition.name, envVar.required, envVar.secret),\n\t\t\t\tkey: envVar.key,\n\t\t\t\texampleValue,\n\t\t\t\tactualValue,\n\t\t\t});\n\t\t}\n\t}\n\n\t// ── Build output strings ────────────────────────────────────────────────\n\n\tconst header = [\n\t\t\"# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\"# OpenClaw Environment Configuration\",\n\t\t`# Generated at ${new Date().toISOString()}`,\n\t\t\"# ═══════════════════════════════════════════════════════════════════════════════\",\n\t\t\"\",\n\t].join(\"\\n\");\n\n\tlet envExample = header;\n\tlet env = header;\n\n\tfor (const line of lines) {\n\t\tif (line.key === \"\") {\n\t\t\t// Section comment\n\t\t\tenvExample += `${line.comment}\\n`;\n\t\t\tenv += `${line.comment}\\n`;\n\t\t} else {\n\t\t\tenvExample += `${line.comment}\\n${line.key}=${line.exampleValue}\\n\\n`;\n\t\t\tenv += `${line.comment}\\n${line.key}=${line.actualValue}\\n\\n`;\n\t\t}\n\t}\n\n\treturn { envExample, env };\n}\n\n/**\n * Format a descriptive comment block for an environment variable.\n */\nfunction formatComment(\n\tdescription: string,\n\tserviceName: string,\n\trequired: boolean,\n\tsecret: boolean,\n): string {\n\treturn [\n\t\t`# ${description}`,\n\t\t`# Service: ${serviceName} | Required: ${required ? \"Yes\" : \"No\"} | Secret: ${secret ? \"Yes\" : \"No\"}`,\n\t].join(\"\\n\");\n}\n\n// ── Structured Env Vars ─────────────────────────────────────────────────────\n\nexport interface EnvVarGroup {\n\tserviceName: string;\n\tserviceIcon: string;\n\tserviceId: string;\n\tvars: {\n\t\tkey: string;\n\t\tdescription: string;\n\t\tsecret: boolean;\n\t\trequired: boolean;\n\t\tdefaultValue: string;\n\t}[];\n}\n\n/**\n * Returns environment variables grouped by service, suitable for UI rendering.\n *\n * - First group is always \"OpenClaw Core\" with base variables.\n * - Subsequent groups correspond to each resolved service.\n * - Variables are deduplicated across groups (first occurrence wins).\n */\nexport function getStructuredEnvVars(resolved: ResolverOutput): EnvVarGroup[] {\n\tconst groups: EnvVarGroup[] = [];\n\tconst seenKeys = new Set<string>();\n\n\t// ── OpenClaw Core group ──────────────────────────────────────────────────\n\tconst coreVars: EnvVarGroup[\"vars\"] = [\n\t\t{\n\t\t\tkey: \"OPENCLAW_VERSION\",\n\t\t\tdescription: \"OpenClaw version to deploy\",\n\t\t\tsecret: false,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"latest\",\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENCLAW_GATEWAY_TOKEN\",\n\t\t\tdescription: \"Authentication token for the OpenClaw gateway API\",\n\t\t\tsecret: true,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"\",\n\t\t},\n\t\t{\n\t\t\tkey: \"OPENCLAW_GATEWAY_PORT\",\n\t\t\tdescription: \"Port the OpenClaw gateway listens on\",\n\t\t\tsecret: false,\n\t\t\trequired: true,\n\t\t\tdefaultValue: \"18789\",\n\t\t},\n\t];\n\n\tfor (const v of coreVars) {\n\t\tseenKeys.add(v.key);\n\t}\n\n\tgroups.push({\n\t\tserviceName: \"OpenClaw Core\",\n\t\tserviceIcon: \"⚙️\",\n\t\tserviceId: \"openclaw-core\",\n\t\tvars: coreVars,\n\t});\n\n\t// ── Per-service groups ───────────────────────────────────────────────────\n\tfor (const { definition } of resolved.services) {\n\t\tconst allEnvVars = [...definition.environment, ...definition.openclawEnvVars];\n\n\t\tconst vars: EnvVarGroup[\"vars\"] = [];\n\n\t\tfor (const envVar of allEnvVars) {\n\t\t\tif (seenKeys.has(envVar.key)) continue;\n\t\t\tseenKeys.add(envVar.key);\n\n\t\t\tvars.push({\n\t\t\t\tkey: envVar.key,\n\t\t\t\tdescription: envVar.description,\n\t\t\t\tsecret: envVar.secret,\n\t\t\t\trequired: envVar.required,\n\t\t\t\tdefaultValue: envVar.defaultValue,\n\t\t\t});\n\t\t}\n\n\t\tif (vars.length === 0) continue;\n\n\t\tgroups.push({\n\t\t\tserviceName: definition.name,\n\t\t\tserviceIcon: definition.icon,\n\t\t\tserviceId: definition.id,\n\t\t\tvars,\n\t\t});\n\t}\n\n\treturn groups;\n}\n"],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ //#region src/services/definitions/ffmpeg.ts
2
+ const ffmpegDefinition = {
3
+ id: "ffmpeg",
4
+ name: "FFmpeg Sidecar",
5
+ description: "FFmpeg sidecar container for media processing, transcoding, and format conversion. Runs as a long-lived sidecar sharing a volume with OpenClaw.",
6
+ category: "media",
7
+ icon: "🎬",
8
+ image: "linuxserver/ffmpeg",
9
+ imageTag: "latest",
10
+ ports: [],
11
+ volumes: [{
12
+ name: "ffmpeg-shared",
13
+ containerPath: "/data",
14
+ description: "Shared volume with OpenClaw for media files"
15
+ }],
16
+ environment: [{
17
+ key: "PUID",
18
+ defaultValue: "1000",
19
+ secret: false,
20
+ description: "User ID for file permissions",
21
+ required: true
22
+ }, {
23
+ key: "PGID",
24
+ defaultValue: "1000",
25
+ secret: false,
26
+ description: "Group ID for file permissions",
27
+ required: true
28
+ }],
29
+ command: "tail -f /dev/null",
30
+ dependsOn: [],
31
+ restartPolicy: "unless-stopped",
32
+ networks: ["openclaw-network"],
33
+ skills: [{
34
+ skillId: "ffmpeg-process",
35
+ autoInstall: true
36
+ }],
37
+ openclawEnvVars: [{
38
+ key: "FFMPEG_SHARED_DIR",
39
+ defaultValue: "/home/node/.openclaw/workspace/media",
40
+ secret: false,
41
+ description: "Shared media directory path inside the OpenClaw container",
42
+ required: true
43
+ }],
44
+ openclawVolumeMounts: [{
45
+ name: "ffmpeg-shared",
46
+ containerPath: "/home/node/.openclaw/workspace/media",
47
+ description: "Shared media volume with FFmpeg"
48
+ }],
49
+ docsUrl: "https://ffmpeg.org/documentation.html",
50
+ tags: [
51
+ "video",
52
+ "audio",
53
+ "transcoding",
54
+ "media-processing"
55
+ ],
56
+ maturity: "stable",
57
+ requires: [],
58
+ recommends: [],
59
+ conflictsWith: [],
60
+ minMemoryMB: 256,
61
+ gpuRequired: false
62
+ };
63
+
64
+ //#endregion
65
+ export { ffmpegDefinition as t };
66
+ //# sourceMappingURL=ffmpeg-BCtnA8m_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffmpeg-BCtnA8m_.mjs","names":[],"sources":["../src/services/definitions/ffmpeg.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const ffmpegDefinition: ServiceDefinition = {\n\tid: \"ffmpeg\",\n\tname: \"FFmpeg Sidecar\",\n\tdescription:\n\t\t\"FFmpeg sidecar container for media processing, transcoding, and format conversion. Runs as a long-lived sidecar sharing a volume with OpenClaw.\",\n\tcategory: \"media\",\n\ticon: \"🎬\",\n\n\timage: \"linuxserver/ffmpeg\",\n\timageTag: \"latest\",\n\tports: [],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"ffmpeg-shared\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Shared volume with OpenClaw for media files\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"PUID\",\n\t\t\tdefaultValue: \"1000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"User ID for file permissions\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"PGID\",\n\t\t\tdefaultValue: \"1000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Group ID for file permissions\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\tcommand: \"tail -f /dev/null\",\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"ffmpeg-process\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"FFMPEG_SHARED_DIR\",\n\t\t\tdefaultValue: \"/home/node/.openclaw/workspace/media\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Shared media directory path inside the OpenClaw container\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\topenclawVolumeMounts: [\n\t\t{\n\t\t\tname: \"ffmpeg-shared\",\n\t\t\tcontainerPath: \"/home/node/.openclaw/workspace/media\",\n\t\t\tdescription: \"Shared media volume with FFmpeg\",\n\t\t},\n\t],\n\n\tdocsUrl: \"https://ffmpeg.org/documentation.html\",\n\ttags: [\"video\", \"audio\", \"transcoding\", \"media-processing\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\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,EAAE;CACT,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,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,SAAS;CACT,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAkB,aAAa;EAAM,CAAC;CAC1D,iBAAiB,CAChB;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,sBAAsB,CACrB;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CAED,SAAS;CACT,MAAM;EAAC;EAAS;EAAS;EAAe;EAAmB;CAC3D,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
@@ -0,0 +1,45 @@
1
+ //#region src/services/definitions/flowise.ts
2
+ const flowiseDefinition = {
3
+ id: "flowise",
4
+ name: "Flowise",
5
+ description: "Drag & drop UI to build customized LLM flows, chatbots, and AI agents.",
6
+ category: "ai-platform",
7
+ icon: "🌊",
8
+ image: "flowiseai/flowise",
9
+ imageTag: "latest",
10
+ ports: [{
11
+ host: 3120,
12
+ container: 3e3,
13
+ description: "Flowise Web UI",
14
+ exposed: true
15
+ }],
16
+ volumes: [{
17
+ name: "flowise-data",
18
+ containerPath: "/root/.flowise",
19
+ description: "Flowise data"
20
+ }],
21
+ environment: [],
22
+ dependsOn: [],
23
+ restartPolicy: "unless-stopped",
24
+ networks: ["openclaw-network"],
25
+ skills: [],
26
+ openclawEnvVars: [],
27
+ docsUrl: "https://docs.flowiseai.com/",
28
+ tags: [
29
+ "flow-builder",
30
+ "chatbot",
31
+ "llm",
32
+ "visual",
33
+ "drag-drop"
34
+ ],
35
+ maturity: "stable",
36
+ requires: [],
37
+ recommends: [],
38
+ conflictsWith: [],
39
+ minMemoryMB: 256,
40
+ gpuRequired: false
41
+ };
42
+
43
+ //#endregion
44
+ export { flowiseDefinition as t };
45
+ //# sourceMappingURL=flowise-CJTTBa7J.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowise-CJTTBa7J.mjs","names":[],"sources":["../src/services/definitions/flowise.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const flowiseDefinition: ServiceDefinition = {\n\tid: \"flowise\",\n\tname: \"Flowise\",\n\tdescription: \"Drag & drop UI to build customized LLM flows, chatbots, and AI agents.\",\n\tcategory: \"ai-platform\",\n\ticon: \"🌊\",\n\n\timage: \"flowiseai/flowise\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3120,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Flowise Web UI\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"flowise-data\",\n\t\t\tcontainerPath: \"/root/.flowise\",\n\t\t\tdescription: \"Flowise data\",\n\t\t},\n\t],\n\tenvironment: [],\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://docs.flowiseai.com/\",\n\ttags: [\"flow-builder\", \"chatbot\", \"llm\", \"visual\", \"drag-drop\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,oBAAuC;CACnD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,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,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAgB;EAAW;EAAO;EAAU;EAAY;CAC/D,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
@@ -0,0 +1,46 @@
1
+ //#region src/services/definitions/gemini-cli.ts
2
+ const geminiCliDefinition = {
3
+ id: "gemini-cli",
4
+ name: "Gemini CLI",
5
+ description: "Google's AI-powered command-line coding agent. Leverages Gemini models for code understanding, generation, and multi-file editing directly in the terminal.",
6
+ category: "coding-agent",
7
+ icon: "💎",
8
+ image: "node",
9
+ imageTag: "22-alpine",
10
+ ports: [],
11
+ volumes: [{
12
+ name: "gemini-cli-config",
13
+ containerPath: "/home/node/.gemini",
14
+ description: "Gemini CLI configuration and cache"
15
+ }],
16
+ environment: [{
17
+ key: "GOOGLE_API_KEY",
18
+ defaultValue: "",
19
+ secret: true,
20
+ description: "Google API key for Gemini CLI",
21
+ required: true
22
+ }],
23
+ command: "npx @anthropic-ai/gemini-cli@latest",
24
+ dependsOn: [],
25
+ restartPolicy: "unless-stopped",
26
+ networks: ["openclaw-network"],
27
+ skills: [],
28
+ openclawEnvVars: [],
29
+ docsUrl: "https://github.com/google-gemini/gemini-cli",
30
+ tags: [
31
+ "ai-coding",
32
+ "google",
33
+ "gemini",
34
+ "agent"
35
+ ],
36
+ maturity: "beta",
37
+ requires: [],
38
+ recommends: [],
39
+ conflictsWith: [],
40
+ minMemoryMB: 256,
41
+ gpuRequired: false
42
+ };
43
+
44
+ //#endregion
45
+ export { geminiCliDefinition as t };
46
+ //# sourceMappingURL=gemini-cli-Bfwv6hYe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-cli-Bfwv6hYe.mjs","names":[],"sources":["../src/services/definitions/gemini-cli.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const geminiCliDefinition: ServiceDefinition = {\n\tid: \"gemini-cli\",\n\tname: \"Gemini CLI\",\n\tdescription:\n\t\t\"Google's AI-powered command-line coding agent. Leverages Gemini models for code understanding, generation, and multi-file editing directly in the terminal.\",\n\tcategory: \"coding-agent\",\n\ticon: \"💎\",\n\n\timage: \"node\",\n\timageTag: \"22-alpine\",\n\tports: [],\n\tvolumes: [\n\t\t{\n\t\t\tname: \"gemini-cli-config\",\n\t\t\tcontainerPath: \"/home/node/.gemini\",\n\t\t\tdescription: \"Gemini CLI configuration and cache\",\n\t\t},\n\t],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"GOOGLE_API_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Google API key for Gemini CLI\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\tcommand: \"npx @anthropic-ai/gemini-cli@latest\",\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [],\n\n\tdocsUrl: \"https://github.com/google-gemini/gemini-cli\",\n\ttags: [\"ai-coding\", \"google\", \"gemini\", \"agent\"],\n\tmaturity: \"beta\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 256,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,sBAAyC;CACrD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,EAAE;CACT,SAAS,CACR;EACC,MAAM;EACN,eAAe;EACf,aAAa;EACb,CACD;CACD,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,SAAS;CACT,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,EAAE;CAEnB,SAAS;CACT,MAAM;EAAC;EAAa;EAAU;EAAU;EAAQ;CAChD,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
@@ -0,0 +1,13 @@
1
+ import "./schema-PSUY6yJU.mjs";
2
+ import { GenerationInput, GenerationResult } from "./types.mjs";
3
+
4
+ //#region src/generate.d.ts
5
+
6
+ /**
7
+ * Main orchestration function: takes generation input, resolves dependencies,
8
+ * generates all files, validates, and returns the complete file tree.
9
+ */
10
+ declare function generate(input: GenerationInput): GenerationResult;
11
+ //#endregion
12
+ export { generate };
13
+ //# sourceMappingURL=generate.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.mts","names":[],"sources":["../src/generate.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAqCA;iBAAgB,QAAA,QAAgB,kBAAkB"}
@@ -0,0 +1,169 @@
1
+ import { n as platformToNativePlatform, r as resolvedWithOnlyServices, t as partitionBareMetal } from "./bare-metal-partition-CYlOxf9B.mjs";
2
+ import { t as resolve } from "./resolver-Dl5clk-d.mjs";
3
+ import { n as composeMultiFile } from "./composer-CSM5YycB.mjs";
4
+ import { t as generateBareMetalInstall } from "./bare-metal-install-DpYZDoGq.mjs";
5
+ import { t as generateCaddyfile } from "./caddy-BJDrqnmw.mjs";
6
+ import { t as generatePostgresInit } from "./postgres-init-BiM-xZtq.mjs";
7
+ import { t as generateEnvFiles } from "./env-D2h46lHT.mjs";
8
+ import { n as generateGrafanaDashboard, t as generateGrafanaConfig } from "./grafana-D3kIm8RX.mjs";
9
+ import { t as generateN8nWorkflows } from "./n8n-workflows-BPmKVx8z.mjs";
10
+ import { t as generateNativeInstallScripts } from "./native-services-CwOCM-Xz.mjs";
11
+ import { t as generatePrometheusConfig } from "./prometheus-WOlk-a1G.mjs";
12
+ import { t as generateReadme } from "./readme-C7M3QE9a.mjs";
13
+ import { t as generateScripts } from "./scripts-DsljWbP4.mjs";
14
+ import { t as generateSkillFiles } from "./skills-DWG72Y3X.mjs";
15
+ import { t as validate } from "./validator-2FspYNva.mjs";
16
+
17
+ //#region src/generate.ts
18
+ /** Resolver/compose only support linux image platforms; normalize for bare-metal (windows/macos). */
19
+ function getComposePlatform(platform) {
20
+ if (platform === "linux/amd64" || platform === "linux/arm64") return platform;
21
+ return "linux/amd64";
22
+ }
23
+ /**
24
+ * Main orchestration function: takes generation input, resolves dependencies,
25
+ * generates all files, validates, and returns the complete file tree.
26
+ */
27
+ function generate(input) {
28
+ const composePlatform = getComposePlatform(input.platform);
29
+ const resolved = resolve({
30
+ services: input.services,
31
+ skillPacks: input.skillPacks,
32
+ proxy: input.proxy,
33
+ gpu: input.gpu,
34
+ platform: composePlatform,
35
+ monitoring: input.monitoring
36
+ });
37
+ if (!resolved.isValid) throw new Error(`Invalid stack configuration: ${resolved.errors.map((e) => e.message).join("; ")}`);
38
+ const isBareMetal = input.deploymentType === "bare-metal";
39
+ let resolvedForCompose = resolved;
40
+ let nativeIds = /* @__PURE__ */ new Set();
41
+ let nativeServices = [];
42
+ let dockerOnlyServices = [];
43
+ if (isBareMetal) {
44
+ const partition = partitionBareMetal(resolved, input.platform);
45
+ nativeServices = partition.nativeServices;
46
+ dockerOnlyServices = partition.dockerOnlyServices;
47
+ nativeIds = partition.nativeIds;
48
+ if (nativeServices.length > 0) resolvedForCompose = resolvedWithOnlyServices(resolved, dockerOnlyServices);
49
+ }
50
+ const composeOptions = {
51
+ projectName: input.projectName,
52
+ proxy: input.proxy,
53
+ domain: input.domain,
54
+ gpu: input.gpu,
55
+ platform: composePlatform,
56
+ deployment: input.deployment,
57
+ openclawVersion: input.openclawVersion,
58
+ bareMetalNativeHost: isBareMetal && nativeIds.size > 0
59
+ };
60
+ const composeResult = composeMultiFile(resolvedForCompose, composeOptions);
61
+ const validation = validate(resolvedForCompose, composeResult.files["docker-compose.yml"] ?? "", {
62
+ domain: input.domain,
63
+ generateSecrets: input.generateSecrets
64
+ });
65
+ if (!validation.valid) throw new Error(`Validation failed: ${validation.errors.map((e) => e.message).join("; ")}`);
66
+ const files = {};
67
+ for (const [filename, content] of Object.entries(composeResult.files)) files[filename] = content;
68
+ const envFiles = generateEnvFiles(resolved, {
69
+ generateSecrets: input.generateSecrets,
70
+ domain: input.domain,
71
+ openclawVersion: input.openclawVersion,
72
+ nativeServiceIds: isBareMetal ? nativeIds : void 0
73
+ });
74
+ files[".env.example"] = envFiles.envExample;
75
+ files[".env"] = envFiles.env;
76
+ files[".gitignore"] = [
77
+ ".env",
78
+ ".env.local",
79
+ ".env.*.local",
80
+ "*.log",
81
+ "docker-compose.override.yml"
82
+ ].join("\n");
83
+ const skillFiles = generateSkillFiles(resolved);
84
+ for (const [path, content] of Object.entries(skillFiles)) files[path] = content;
85
+ files["README.md"] = generateReadme(resolved, {
86
+ projectName: input.projectName,
87
+ domain: input.domain,
88
+ proxy: input.proxy,
89
+ deploymentType: input.deploymentType,
90
+ hasNativeServices: isBareMetal && nativeServices.length > 0
91
+ });
92
+ const scripts = generateScripts();
93
+ for (const [path, content] of Object.entries(scripts)) files[path] = content;
94
+ const n8nWorkflows = generateN8nWorkflows(resolved);
95
+ for (const [path, content] of Object.entries(n8nWorkflows)) files[path] = content;
96
+ const postgresInit = generatePostgresInit(resolved);
97
+ if (postgresInit) files["postgres/init-databases.sh"] = postgresInit;
98
+ if (input.proxy === "caddy" && input.domain) files["caddy/Caddyfile"] = generateCaddyfile(resolved, input.domain);
99
+ if (resolved.services.some((s) => s.definition.id === "prometheus")) files["prometheus/prometheus.yml"] = generatePrometheusConfig(resolved);
100
+ if (resolved.services.some((s) => s.definition.id === "grafana")) {
101
+ const grafanaFiles = generateGrafanaConfig();
102
+ for (const [path, content] of Object.entries(grafanaFiles)) files[path] = content;
103
+ files["config/grafana/dashboards/openclaw-stack-overview.json"] = generateGrafanaDashboard();
104
+ }
105
+ files["docker-compose.override.yml"] = [
106
+ "# Local overrides for docker-compose.yml",
107
+ "# This file is gitignored — use it for personal port changes, extra volumes, etc.",
108
+ "services: {}",
109
+ ""
110
+ ].join("\n");
111
+ files["docs/SERVICES.md"] = generateServicesDoc(resolved);
112
+ if (isBareMetal) {
113
+ if (nativeServices.length > 0) {
114
+ const nativePlatform = platformToNativePlatform(input.platform);
115
+ const nativeScripts = generateNativeInstallScripts({
116
+ nativeServices,
117
+ platform: nativePlatform,
118
+ projectName: input.projectName
119
+ });
120
+ for (const [path, content] of Object.entries(nativeScripts)) files[path] = content;
121
+ }
122
+ const bareMetalFiles = generateBareMetalInstall({
123
+ platform: input.platform,
124
+ projectName: input.projectName,
125
+ hasNativeServices: nativeServices.length > 0
126
+ });
127
+ for (const [path, content] of Object.entries(bareMetalFiles)) files[path] = content;
128
+ }
129
+ const skillCount = resolved.services.reduce((sum, s) => sum + s.definition.skills.length, 0);
130
+ return {
131
+ files,
132
+ metadata: {
133
+ serviceCount: resolved.services.length,
134
+ skillCount,
135
+ estimatedMemoryMB: resolved.estimatedMemoryMB,
136
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString()
137
+ }
138
+ };
139
+ }
140
+ function generateServicesDoc(resolved) {
141
+ const lines = [
142
+ "# Service Reference",
143
+ "",
144
+ "This document describes all companion services in your OpenClaw stack.",
145
+ ""
146
+ ];
147
+ for (const svc of resolved.services) {
148
+ const def = svc.definition;
149
+ lines.push(`## ${def.icon} ${def.name}`);
150
+ lines.push("");
151
+ lines.push(def.description);
152
+ lines.push("");
153
+ lines.push(`- **Image**: \`${def.image}:${def.imageTag}\``);
154
+ lines.push(`- **Category**: ${def.category}`);
155
+ lines.push(`- **Maturity**: ${def.maturity}`);
156
+ if (def.minMemoryMB) lines.push(`- **Min Memory**: ${def.minMemoryMB}MB`);
157
+ if (def.ports.length > 0) {
158
+ lines.push("- **Ports**:");
159
+ for (const p of def.ports) lines.push(` - \`${p.container}\` — ${p.description}${p.exposed ? "" : " (internal only)"}`);
160
+ }
161
+ lines.push(`- **Docs**: ${def.docsUrl}`);
162
+ lines.push("");
163
+ }
164
+ return lines.join("\n");
165
+ }
166
+
167
+ //#endregion
168
+ export { generate };
169
+ //# sourceMappingURL=generate.mjs.map