@better-openclaw/core 1.0.0

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 (461) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-lint.log +360 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/dist/bare-metal-partition.d.ts +22 -0
  5. package/dist/bare-metal-partition.d.ts.map +1 -0
  6. package/dist/bare-metal-partition.js +49 -0
  7. package/dist/bare-metal-partition.js.map +1 -0
  8. package/dist/composer.d.ts +17 -0
  9. package/dist/composer.d.ts.map +1 -0
  10. package/dist/composer.js +305 -0
  11. package/dist/composer.js.map +1 -0
  12. package/dist/generate.d.ts +7 -0
  13. package/dist/generate.d.ts.map +1 -0
  14. package/dist/generate.js +218 -0
  15. package/dist/generate.js.map +1 -0
  16. package/dist/generators/bare-metal-install.d.ts +18 -0
  17. package/dist/generators/bare-metal-install.d.ts.map +1 -0
  18. package/dist/generators/bare-metal-install.js +228 -0
  19. package/dist/generators/bare-metal-install.js.map +1 -0
  20. package/dist/generators/caddy.d.ts +13 -0
  21. package/dist/generators/caddy.d.ts.map +1 -0
  22. package/dist/generators/caddy.js +85 -0
  23. package/dist/generators/caddy.js.map +1 -0
  24. package/dist/generators/env.d.ts +42 -0
  25. package/dist/generators/env.d.ts.map +1 -0
  26. package/dist/generators/env.js +276 -0
  27. package/dist/generators/env.js.map +1 -0
  28. package/dist/generators/grafana.d.ts +19 -0
  29. package/dist/generators/grafana.d.ts.map +1 -0
  30. package/dist/generators/grafana.js +247 -0
  31. package/dist/generators/grafana.js.map +1 -0
  32. package/dist/generators/n8n-workflows.d.ts +7 -0
  33. package/dist/generators/n8n-workflows.d.ts.map +1 -0
  34. package/dist/generators/n8n-workflows.js +78 -0
  35. package/dist/generators/n8n-workflows.js.map +1 -0
  36. package/dist/generators/native-services.d.ts +13 -0
  37. package/dist/generators/native-services.d.ts.map +1 -0
  38. package/dist/generators/native-services.js +85 -0
  39. package/dist/generators/native-services.js.map +1 -0
  40. package/dist/generators/postgres-init.d.ts +27 -0
  41. package/dist/generators/postgres-init.d.ts.map +1 -0
  42. package/dist/generators/postgres-init.js +119 -0
  43. package/dist/generators/postgres-init.js.map +1 -0
  44. package/dist/generators/prometheus.d.ts +10 -0
  45. package/dist/generators/prometheus.d.ts.map +1 -0
  46. package/dist/generators/prometheus.js +79 -0
  47. package/dist/generators/prometheus.js.map +1 -0
  48. package/dist/generators/readme.d.ts +21 -0
  49. package/dist/generators/readme.d.ts.map +1 -0
  50. package/dist/generators/readme.js +224 -0
  51. package/dist/generators/readme.js.map +1 -0
  52. package/dist/generators/scripts.d.ts +7 -0
  53. package/dist/generators/scripts.d.ts.map +1 -0
  54. package/dist/generators/scripts.js +352 -0
  55. package/dist/generators/scripts.js.map +1 -0
  56. package/dist/generators/skills.d.ts +10 -0
  57. package/dist/generators/skills.d.ts.map +1 -0
  58. package/dist/generators/skills.js +596 -0
  59. package/dist/generators/skills.js.map +1 -0
  60. package/dist/index.d.ts +24 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +27 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/presets/registry.d.ts +5 -0
  65. package/dist/presets/registry.d.ts.map +1 -0
  66. package/dist/presets/registry.js +121 -0
  67. package/dist/presets/registry.js.map +1 -0
  68. package/dist/resolver.d.ts +17 -0
  69. package/dist/resolver.d.ts.map +1 -0
  70. package/dist/resolver.js +254 -0
  71. package/dist/resolver.js.map +1 -0
  72. package/dist/schema.d.ts +2426 -0
  73. package/dist/schema.d.ts.map +1 -0
  74. package/dist/schema.js +259 -0
  75. package/dist/schema.js.map +1 -0
  76. package/dist/services/definitions/anything-llm.d.ts +3 -0
  77. package/dist/services/definitions/anything-llm.d.ts.map +1 -0
  78. package/dist/services/definitions/anything-llm.js +39 -0
  79. package/dist/services/definitions/anything-llm.js.map +1 -0
  80. package/dist/services/definitions/appflowy.d.ts +3 -0
  81. package/dist/services/definitions/appflowy.d.ts.map +1 -0
  82. package/dist/services/definitions/appflowy.js +39 -0
  83. package/dist/services/definitions/appflowy.js.map +1 -0
  84. package/dist/services/definitions/beszel.d.ts +3 -0
  85. package/dist/services/definitions/beszel.d.ts.map +1 -0
  86. package/dist/services/definitions/beszel.js +39 -0
  87. package/dist/services/definitions/beszel.js.map +1 -0
  88. package/dist/services/definitions/browserless.d.ts +3 -0
  89. package/dist/services/definitions/browserless.d.ts.map +1 -0
  90. package/dist/services/definitions/browserless.js +77 -0
  91. package/dist/services/definitions/browserless.js.map +1 -0
  92. package/dist/services/definitions/caddy.d.ts +3 -0
  93. package/dist/services/definitions/caddy.d.ts.map +1 -0
  94. package/dist/services/definitions/caddy.js +50 -0
  95. package/dist/services/definitions/caddy.js.map +1 -0
  96. package/dist/services/definitions/chromadb.d.ts +3 -0
  97. package/dist/services/definitions/chromadb.d.ts.map +1 -0
  98. package/dist/services/definitions/chromadb.js +61 -0
  99. package/dist/services/definitions/chromadb.js.map +1 -0
  100. package/dist/services/definitions/claude-code.d.ts +3 -0
  101. package/dist/services/definitions/claude-code.d.ts.map +1 -0
  102. package/dist/services/definitions/claude-code.js +49 -0
  103. package/dist/services/definitions/claude-code.js.map +1 -0
  104. package/dist/services/definitions/code-server.d.ts +3 -0
  105. package/dist/services/definitions/code-server.d.ts.map +1 -0
  106. package/dist/services/definitions/code-server.js +61 -0
  107. package/dist/services/definitions/code-server.js.map +1 -0
  108. package/dist/services/definitions/codex.d.ts +3 -0
  109. package/dist/services/definitions/codex.d.ts.map +1 -0
  110. package/dist/services/definitions/codex.js +41 -0
  111. package/dist/services/definitions/codex.js.map +1 -0
  112. package/dist/services/definitions/coolify.d.ts +3 -0
  113. package/dist/services/definitions/coolify.d.ts.map +1 -0
  114. package/dist/services/definitions/coolify.js +44 -0
  115. package/dist/services/definitions/coolify.js.map +1 -0
  116. package/dist/services/definitions/dify.d.ts +3 -0
  117. package/dist/services/definitions/dify.d.ts.map +1 -0
  118. package/dist/services/definitions/dify.js +75 -0
  119. package/dist/services/definitions/dify.js.map +1 -0
  120. package/dist/services/definitions/docsgpt.d.ts +3 -0
  121. package/dist/services/definitions/docsgpt.d.ts.map +1 -0
  122. package/dist/services/definitions/docsgpt.js +39 -0
  123. package/dist/services/definitions/docsgpt.js.map +1 -0
  124. package/dist/services/definitions/dokploy.d.ts +3 -0
  125. package/dist/services/definitions/dokploy.d.ts.map +1 -0
  126. package/dist/services/definitions/dokploy.js +44 -0
  127. package/dist/services/definitions/dokploy.js.map +1 -0
  128. package/dist/services/definitions/dozzle.d.ts +3 -0
  129. package/dist/services/definitions/dozzle.d.ts.map +1 -0
  130. package/dist/services/definitions/dozzle.js +33 -0
  131. package/dist/services/definitions/dozzle.js.map +1 -0
  132. package/dist/services/definitions/ffmpeg.d.ts +3 -0
  133. package/dist/services/definitions/ffmpeg.d.ts.map +1 -0
  134. package/dist/services/definitions/ffmpeg.js +63 -0
  135. package/dist/services/definitions/ffmpeg.js.map +1 -0
  136. package/dist/services/definitions/flowise.d.ts +3 -0
  137. package/dist/services/definitions/flowise.d.ts.map +1 -0
  138. package/dist/services/definitions/flowise.js +39 -0
  139. package/dist/services/definitions/flowise.js.map +1 -0
  140. package/dist/services/definitions/gemini-cli.d.ts +3 -0
  141. package/dist/services/definitions/gemini-cli.d.ts.map +1 -0
  142. package/dist/services/definitions/gemini-cli.js +41 -0
  143. package/dist/services/definitions/gemini-cli.js.map +1 -0
  144. package/dist/services/definitions/gitea.d.ts +3 -0
  145. package/dist/services/definitions/gitea.d.ts.map +1 -0
  146. package/dist/services/definitions/gitea.js +45 -0
  147. package/dist/services/definitions/gitea.js.map +1 -0
  148. package/dist/services/definitions/gotify.d.ts +3 -0
  149. package/dist/services/definitions/gotify.d.ts.map +1 -0
  150. package/dist/services/definitions/gotify.js +60 -0
  151. package/dist/services/definitions/gotify.js.map +1 -0
  152. package/dist/services/definitions/grafana.d.ts +3 -0
  153. package/dist/services/definitions/grafana.d.ts.map +1 -0
  154. package/dist/services/definitions/grafana.js +61 -0
  155. package/dist/services/definitions/grafana.js.map +1 -0
  156. package/dist/services/definitions/index.d.ts +68 -0
  157. package/dist/services/definitions/index.d.ts.map +1 -0
  158. package/dist/services/definitions/index.js +198 -0
  159. package/dist/services/definitions/index.js.map +1 -0
  160. package/dist/services/definitions/kimi.d.ts +3 -0
  161. package/dist/services/definitions/kimi.d.ts.map +1 -0
  162. package/dist/services/definitions/kimi.js +41 -0
  163. package/dist/services/definitions/kimi.js.map +1 -0
  164. package/dist/services/definitions/lasuite-meet-agents.d.ts +3 -0
  165. package/dist/services/definitions/lasuite-meet-agents.d.ts.map +1 -0
  166. package/dist/services/definitions/lasuite-meet-agents.js +26 -0
  167. package/dist/services/definitions/lasuite-meet-agents.js.map +1 -0
  168. package/dist/services/definitions/lasuite-meet-backend.d.ts +3 -0
  169. package/dist/services/definitions/lasuite-meet-backend.d.ts.map +1 -0
  170. package/dist/services/definitions/lasuite-meet-backend.js +118 -0
  171. package/dist/services/definitions/lasuite-meet-backend.js.map +1 -0
  172. package/dist/services/definitions/lasuite-meet-frontend.d.ts +3 -0
  173. package/dist/services/definitions/lasuite-meet-frontend.d.ts.map +1 -0
  174. package/dist/services/definitions/lasuite-meet-frontend.js +31 -0
  175. package/dist/services/definitions/lasuite-meet-frontend.js.map +1 -0
  176. package/dist/services/definitions/librechat.d.ts +3 -0
  177. package/dist/services/definitions/librechat.d.ts.map +1 -0
  178. package/dist/services/definitions/librechat.js +47 -0
  179. package/dist/services/definitions/librechat.js.map +1 -0
  180. package/dist/services/definitions/lightpanda.d.ts +3 -0
  181. package/dist/services/definitions/lightpanda.d.ts.map +1 -0
  182. package/dist/services/definitions/lightpanda.js +59 -0
  183. package/dist/services/definitions/lightpanda.js.map +1 -0
  184. package/dist/services/definitions/litellm.d.ts +3 -0
  185. package/dist/services/definitions/litellm.d.ts.map +1 -0
  186. package/dist/services/definitions/litellm.js +41 -0
  187. package/dist/services/definitions/litellm.js.map +1 -0
  188. package/dist/services/definitions/livekit.d.ts +3 -0
  189. package/dist/services/definitions/livekit.d.ts.map +1 -0
  190. package/dist/services/definitions/livekit.js +31 -0
  191. package/dist/services/definitions/livekit.js.map +1 -0
  192. package/dist/services/definitions/matomo.d.ts +3 -0
  193. package/dist/services/definitions/matomo.d.ts.map +1 -0
  194. package/dist/services/definitions/matomo.js +75 -0
  195. package/dist/services/definitions/matomo.js.map +1 -0
  196. package/dist/services/definitions/matrix-synapse.d.ts +3 -0
  197. package/dist/services/definitions/matrix-synapse.d.ts.map +1 -0
  198. package/dist/services/definitions/matrix-synapse.js +82 -0
  199. package/dist/services/definitions/matrix-synapse.js.map +1 -0
  200. package/dist/services/definitions/mattermost.d.ts +3 -0
  201. package/dist/services/definitions/mattermost.d.ts.map +1 -0
  202. package/dist/services/definitions/mattermost.js +59 -0
  203. package/dist/services/definitions/mattermost.js.map +1 -0
  204. package/dist/services/definitions/meilisearch.d.ts +3 -0
  205. package/dist/services/definitions/meilisearch.d.ts.map +1 -0
  206. package/dist/services/definitions/meilisearch.js +76 -0
  207. package/dist/services/definitions/meilisearch.js.map +1 -0
  208. package/dist/services/definitions/minio.d.ts +3 -0
  209. package/dist/services/definitions/minio.d.ts.map +1 -0
  210. package/dist/services/definitions/minio.js +98 -0
  211. package/dist/services/definitions/minio.js.map +1 -0
  212. package/dist/services/definitions/mixpost.d.ts +3 -0
  213. package/dist/services/definitions/mixpost.d.ts.map +1 -0
  214. package/dist/services/definitions/mixpost.js +82 -0
  215. package/dist/services/definitions/mixpost.js.map +1 -0
  216. package/dist/services/definitions/motion-canvas.d.ts +3 -0
  217. package/dist/services/definitions/motion-canvas.d.ts.map +1 -0
  218. package/dist/services/definitions/motion-canvas.js +48 -0
  219. package/dist/services/definitions/motion-canvas.js.map +1 -0
  220. package/dist/services/definitions/n8n.d.ts +3 -0
  221. package/dist/services/definitions/n8n.d.ts.map +1 -0
  222. package/dist/services/definitions/n8n.js +146 -0
  223. package/dist/services/definitions/n8n.js.map +1 -0
  224. package/dist/services/definitions/nocodb.d.ts +3 -0
  225. package/dist/services/definitions/nocodb.d.ts.map +1 -0
  226. package/dist/services/definitions/nocodb.js +39 -0
  227. package/dist/services/definitions/nocodb.js.map +1 -0
  228. package/dist/services/definitions/ntfy.d.ts +3 -0
  229. package/dist/services/definitions/ntfy.d.ts.map +1 -0
  230. package/dist/services/definitions/ntfy.js +61 -0
  231. package/dist/services/definitions/ntfy.js.map +1 -0
  232. package/dist/services/definitions/ollama.d.ts +3 -0
  233. package/dist/services/definitions/ollama.d.ts.map +1 -0
  234. package/dist/services/definitions/ollama.js +61 -0
  235. package/dist/services/definitions/ollama.js.map +1 -0
  236. package/dist/services/definitions/open-webui.d.ts +3 -0
  237. package/dist/services/definitions/open-webui.d.ts.map +1 -0
  238. package/dist/services/definitions/open-webui.js +47 -0
  239. package/dist/services/definitions/open-webui.js.map +1 -0
  240. package/dist/services/definitions/opencode.d.ts +3 -0
  241. package/dist/services/definitions/opencode.d.ts.map +1 -0
  242. package/dist/services/definitions/opencode.js +47 -0
  243. package/dist/services/definitions/opencode.js.map +1 -0
  244. package/dist/services/definitions/openpanel.d.ts +3 -0
  245. package/dist/services/definitions/openpanel.d.ts.map +1 -0
  246. package/dist/services/definitions/openpanel.js +41 -0
  247. package/dist/services/definitions/openpanel.js.map +1 -0
  248. package/dist/services/definitions/outline.d.ts +3 -0
  249. package/dist/services/definitions/outline.d.ts.map +1 -0
  250. package/dist/services/definitions/outline.js +68 -0
  251. package/dist/services/definitions/outline.js.map +1 -0
  252. package/dist/services/definitions/paperless-ngx.d.ts +3 -0
  253. package/dist/services/definitions/paperless-ngx.d.ts.map +1 -0
  254. package/dist/services/definitions/paperless-ngx.js +85 -0
  255. package/dist/services/definitions/paperless-ngx.js.map +1 -0
  256. package/dist/services/definitions/playwright-server.d.ts +3 -0
  257. package/dist/services/definitions/playwright-server.d.ts.map +1 -0
  258. package/dist/services/definitions/playwright-server.js +34 -0
  259. package/dist/services/definitions/playwright-server.js.map +1 -0
  260. package/dist/services/definitions/portainer.d.ts +3 -0
  261. package/dist/services/definitions/portainer.d.ts.map +1 -0
  262. package/dist/services/definitions/portainer.js +44 -0
  263. package/dist/services/definitions/portainer.js.map +1 -0
  264. package/dist/services/definitions/postgresql.d.ts +3 -0
  265. package/dist/services/definitions/postgresql.d.ts.map +1 -0
  266. package/dist/services/definitions/postgresql.js +83 -0
  267. package/dist/services/definitions/postgresql.js.map +1 -0
  268. package/dist/services/definitions/postiz.d.ts +3 -0
  269. package/dist/services/definitions/postiz.d.ts.map +1 -0
  270. package/dist/services/definitions/postiz.js +79 -0
  271. package/dist/services/definitions/postiz.js.map +1 -0
  272. package/dist/services/definitions/prometheus.d.ts +3 -0
  273. package/dist/services/definitions/prometheus.d.ts.map +1 -0
  274. package/dist/services/definitions/prometheus.js +47 -0
  275. package/dist/services/definitions/prometheus.js.map +1 -0
  276. package/dist/services/definitions/qdrant.d.ts +3 -0
  277. package/dist/services/definitions/qdrant.d.ts.map +1 -0
  278. package/dist/services/definitions/qdrant.js +75 -0
  279. package/dist/services/definitions/qdrant.js.map +1 -0
  280. package/dist/services/definitions/redis.d.ts +3 -0
  281. package/dist/services/definitions/redis.d.ts.map +1 -0
  282. package/dist/services/definitions/redis.js +90 -0
  283. package/dist/services/definitions/redis.js.map +1 -0
  284. package/dist/services/definitions/remotion.d.ts +3 -0
  285. package/dist/services/definitions/remotion.d.ts.map +1 -0
  286. package/dist/services/definitions/remotion.js +48 -0
  287. package/dist/services/definitions/remotion.js.map +1 -0
  288. package/dist/services/definitions/rocketchat.d.ts +3 -0
  289. package/dist/services/definitions/rocketchat.d.ts.map +1 -0
  290. package/dist/services/definitions/rocketchat.js +54 -0
  291. package/dist/services/definitions/rocketchat.js.map +1 -0
  292. package/dist/services/definitions/searxng.d.ts +3 -0
  293. package/dist/services/definitions/searxng.d.ts.map +1 -0
  294. package/dist/services/definitions/searxng.js +61 -0
  295. package/dist/services/definitions/searxng.js.map +1 -0
  296. package/dist/services/definitions/stable-diffusion.d.ts +3 -0
  297. package/dist/services/definitions/stable-diffusion.d.ts.map +1 -0
  298. package/dist/services/definitions/stable-diffusion.js +44 -0
  299. package/dist/services/definitions/stable-diffusion.js.map +1 -0
  300. package/dist/services/definitions/steel-browser.d.ts +3 -0
  301. package/dist/services/definitions/steel-browser.d.ts.map +1 -0
  302. package/dist/services/definitions/steel-browser.js +68 -0
  303. package/dist/services/definitions/steel-browser.js.map +1 -0
  304. package/dist/services/definitions/tailscale.d.ts +3 -0
  305. package/dist/services/definitions/tailscale.d.ts.map +1 -0
  306. package/dist/services/definitions/tailscale.js +62 -0
  307. package/dist/services/definitions/tailscale.js.map +1 -0
  308. package/dist/services/definitions/temporal.d.ts +3 -0
  309. package/dist/services/definitions/temporal.d.ts.map +1 -0
  310. package/dist/services/definitions/temporal.js +97 -0
  311. package/dist/services/definitions/temporal.js.map +1 -0
  312. package/dist/services/definitions/traefik.d.ts +3 -0
  313. package/dist/services/definitions/traefik.d.ts.map +1 -0
  314. package/dist/services/definitions/traefik.js +52 -0
  315. package/dist/services/definitions/traefik.js.map +1 -0
  316. package/dist/services/definitions/umami.d.ts +3 -0
  317. package/dist/services/definitions/umami.d.ts.map +1 -0
  318. package/dist/services/definitions/umami.js +41 -0
  319. package/dist/services/definitions/umami.js.map +1 -0
  320. package/dist/services/definitions/uptime-kuma.d.ts +3 -0
  321. package/dist/services/definitions/uptime-kuma.d.ts.map +1 -0
  322. package/dist/services/definitions/uptime-kuma.js +46 -0
  323. package/dist/services/definitions/uptime-kuma.js.map +1 -0
  324. package/dist/services/definitions/valkey.d.ts +3 -0
  325. package/dist/services/definitions/valkey.d.ts.map +1 -0
  326. package/dist/services/definitions/valkey.js +60 -0
  327. package/dist/services/definitions/valkey.js.map +1 -0
  328. package/dist/services/definitions/watchtower.d.ts +3 -0
  329. package/dist/services/definitions/watchtower.d.ts.map +1 -0
  330. package/dist/services/definitions/watchtower.js +41 -0
  331. package/dist/services/definitions/watchtower.js.map +1 -0
  332. package/dist/services/definitions/weaviate.d.ts +3 -0
  333. package/dist/services/definitions/weaviate.d.ts.map +1 -0
  334. package/dist/services/definitions/weaviate.js +89 -0
  335. package/dist/services/definitions/weaviate.js.map +1 -0
  336. package/dist/services/definitions/whisper.d.ts +3 -0
  337. package/dist/services/definitions/whisper.d.ts.map +1 -0
  338. package/dist/services/definitions/whisper.js +55 -0
  339. package/dist/services/definitions/whisper.js.map +1 -0
  340. package/dist/services/registry.d.ts +12 -0
  341. package/dist/services/registry.d.ts.map +1 -0
  342. package/dist/services/registry.js +28 -0
  343. package/dist/services/registry.js.map +1 -0
  344. package/dist/skills/registry.d.ts +7 -0
  345. package/dist/skills/registry.d.ts.map +1 -0
  346. package/dist/skills/registry.js +111 -0
  347. package/dist/skills/registry.js.map +1 -0
  348. package/dist/types.d.ts +60 -0
  349. package/dist/types.d.ts.map +1 -0
  350. package/dist/types.js +20 -0
  351. package/dist/types.js.map +1 -0
  352. package/dist/validator.d.ts +16 -0
  353. package/dist/validator.d.ts.map +1 -0
  354. package/dist/validator.js +142 -0
  355. package/dist/validator.js.map +1 -0
  356. package/dist/version-manager.d.ts +10 -0
  357. package/dist/version-manager.d.ts.map +1 -0
  358. package/dist/version-manager.js +60 -0
  359. package/dist/version-manager.js.map +1 -0
  360. package/package.json +37 -0
  361. package/src/__snapshots__/composer.snapshot.test.ts.snap +903 -0
  362. package/src/bare-metal-partition.test.ts +63 -0
  363. package/src/bare-metal-partition.ts +64 -0
  364. package/src/composer.snapshot.test.ts +87 -0
  365. package/src/composer.test.ts +224 -0
  366. package/src/composer.ts +403 -0
  367. package/src/generate.test.ts +349 -0
  368. package/src/generate.ts +259 -0
  369. package/src/generators/bare-metal-install.test.ts +43 -0
  370. package/src/generators/bare-metal-install.ts +249 -0
  371. package/src/generators/caddy.ts +99 -0
  372. package/src/generators/env.ts +405 -0
  373. package/src/generators/grafana.ts +255 -0
  374. package/src/generators/n8n-workflows.ts +88 -0
  375. package/src/generators/native-services.ts +103 -0
  376. package/src/generators/postgres-init.ts +137 -0
  377. package/src/generators/prometheus.ts +89 -0
  378. package/src/generators/readme.ts +274 -0
  379. package/src/generators/scripts.ts +362 -0
  380. package/src/generators/skills.ts +628 -0
  381. package/src/index.ts +118 -0
  382. package/src/presets/registry.test.ts +32 -0
  383. package/src/presets/registry.ts +126 -0
  384. package/src/resolver.test.ts +204 -0
  385. package/src/resolver.ts +282 -0
  386. package/src/schema.test.ts +295 -0
  387. package/src/schema.ts +307 -0
  388. package/src/services/definitions/anything-llm.ts +46 -0
  389. package/src/services/definitions/appflowy.ts +46 -0
  390. package/src/services/definitions/beszel.ts +46 -0
  391. package/src/services/definitions/browserless.ts +84 -0
  392. package/src/services/definitions/caddy.ts +57 -0
  393. package/src/services/definitions/chromadb.ts +68 -0
  394. package/src/services/definitions/claude-code.ts +56 -0
  395. package/src/services/definitions/code-server.ts +67 -0
  396. package/src/services/definitions/codex.ts +48 -0
  397. package/src/services/definitions/coolify.ts +51 -0
  398. package/src/services/definitions/dify.ts +82 -0
  399. package/src/services/definitions/docsgpt.ts +45 -0
  400. package/src/services/definitions/dokploy.ts +51 -0
  401. package/src/services/definitions/dozzle.ts +40 -0
  402. package/src/services/definitions/ffmpeg.ts +70 -0
  403. package/src/services/definitions/flowise.ts +45 -0
  404. package/src/services/definitions/gemini-cli.ts +48 -0
  405. package/src/services/definitions/gitea.ts +52 -0
  406. package/src/services/definitions/gotify.ts +67 -0
  407. package/src/services/definitions/grafana.ts +68 -0
  408. package/src/services/definitions/index.ts +200 -0
  409. package/src/services/definitions/kimi.ts +48 -0
  410. package/src/services/definitions/lasuite-meet-agents.ts +33 -0
  411. package/src/services/definitions/lasuite-meet-backend.ts +125 -0
  412. package/src/services/definitions/lasuite-meet-frontend.ts +38 -0
  413. package/src/services/definitions/librechat.ts +54 -0
  414. package/src/services/definitions/lightpanda.ts +61 -0
  415. package/src/services/definitions/litellm.ts +48 -0
  416. package/src/services/definitions/livekit.ts +38 -0
  417. package/src/services/definitions/matomo.ts +82 -0
  418. package/src/services/definitions/matrix-synapse.ts +89 -0
  419. package/src/services/definitions/mattermost.ts +67 -0
  420. package/src/services/definitions/meilisearch.ts +83 -0
  421. package/src/services/definitions/minio.ts +105 -0
  422. package/src/services/definitions/mixpost.ts +89 -0
  423. package/src/services/definitions/motion-canvas.ts +55 -0
  424. package/src/services/definitions/n8n.ts +153 -0
  425. package/src/services/definitions/nocodb.ts +46 -0
  426. package/src/services/definitions/ntfy.ts +68 -0
  427. package/src/services/definitions/ollama.ts +68 -0
  428. package/src/services/definitions/open-webui.ts +54 -0
  429. package/src/services/definitions/opencode.ts +54 -0
  430. package/src/services/definitions/openpanel.ts +48 -0
  431. package/src/services/definitions/outline.ts +75 -0
  432. package/src/services/definitions/paperless-ngx.ts +92 -0
  433. package/src/services/definitions/playwright-server.ts +41 -0
  434. package/src/services/definitions/portainer.ts +50 -0
  435. package/src/services/definitions/postgresql.ts +90 -0
  436. package/src/services/definitions/postiz.ts +86 -0
  437. package/src/services/definitions/prometheus.ts +54 -0
  438. package/src/services/definitions/qdrant.ts +82 -0
  439. package/src/services/definitions/redis.ts +99 -0
  440. package/src/services/definitions/remotion.ts +55 -0
  441. package/src/services/definitions/rocketchat.ts +61 -0
  442. package/src/services/definitions/searxng.ts +68 -0
  443. package/src/services/definitions/stable-diffusion.ts +50 -0
  444. package/src/services/definitions/steel-browser.ts +70 -0
  445. package/src/services/definitions/tailscale.ts +69 -0
  446. package/src/services/definitions/temporal.ts +104 -0
  447. package/src/services/definitions/traefik.ts +60 -0
  448. package/src/services/definitions/umami.ts +48 -0
  449. package/src/services/definitions/uptime-kuma.ts +53 -0
  450. package/src/services/definitions/valkey.ts +67 -0
  451. package/src/services/definitions/watchtower.ts +47 -0
  452. package/src/services/definitions/weaviate.ts +96 -0
  453. package/src/services/definitions/whisper.ts +62 -0
  454. package/src/services/registry.test.ts +98 -0
  455. package/src/services/registry.ts +37 -0
  456. package/src/skills/registry.ts +126 -0
  457. package/src/types.ts +123 -0
  458. package/src/validator.test.ts +66 -0
  459. package/src/validator.ts +166 -0
  460. package/src/version-manager.ts +65 -0
  461. package/tsconfig.json +9 -0
@@ -0,0 +1,228 @@
1
+ const LINUX_SCRIPT_PREFIX_NATIVE = `
2
+ # Native services (install/start on host first)
3
+ if [ -f "native/install-linux.sh" ]; then
4
+ info "Installing and starting native services..."
5
+ bash native/install-linux.sh
6
+ ok "Native services ready."
7
+ fi
8
+ `;
9
+ const LINUX_SCRIPT = `#!/usr/bin/env bash
10
+ set -euo pipefail
11
+
12
+ # OpenClaw bare-metal installer (Linux)
13
+ # Optionally runs native services script, then Docker + Compose.
14
+ # Idempotent: safe to re-run.
15
+
16
+ SCRIPT_DIR="$(cd "$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
17
+ cd "$SCRIPT_DIR"
18
+
19
+ if [ -t 1 ]; then
20
+ RED='\\033[0;31m'; GREEN='\\033[0;32m'; YELLOW='\\033[1;33m'; CYAN='\\033[0;36m'; NC='\\033[0m'
21
+ else
22
+ RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''
23
+ fi
24
+ info() { echo -e "\${CYAN}ℹ $*\${NC}"; }
25
+ ok() { echo -e "\${GREEN}✅ $*\${NC}"; }
26
+ warn() { echo -e "\${YELLOW}⚠️ $*\${NC}"; }
27
+ err() { echo -e "\${RED}❌ $*\${NC}" >&2; }
28
+ __NATIVE_BLOCK__
29
+ # Install Docker if missing
30
+ if ! command -v docker &> /dev/null; then
31
+ info "Installing Docker..."
32
+ if command -v apt-get &> /dev/null; then
33
+ sudo apt-get update -qq
34
+ sudo apt-get install -y -qq ca-certificates curl
35
+ curl -fsSL https://get.docker.com | sudo sh
36
+ sudo usermod -aG docker "$USER" 2>/dev/null || true
37
+ ok "Docker installed. You may need to log out and back in for group changes."
38
+ elif command -v dnf &> /dev/null || command -v yum &> /dev/null; then
39
+ sudo dnf install -y dnf-plugins-core 2>/dev/null || sudo yum install -y yum-utils
40
+ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 2>/dev/null || sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
41
+ sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin 2>/dev/null || sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
42
+ sudo systemctl enable --now docker
43
+ sudo usermod -aG docker "$USER" 2>/dev/null || true
44
+ ok "Docker installed."
45
+ else
46
+ err "Unsupported package manager. Install Docker manually: https://docs.docker.com/engine/install/"
47
+ exit 1
48
+ fi
49
+ else
50
+ ok "Docker already installed."
51
+ fi
52
+
53
+ if ! docker compose version &> /dev/null; then
54
+ err "Docker Compose (v2) plugin not found. Install it: https://docs.docker.com/compose/install/"
55
+ exit 1
56
+ fi
57
+
58
+ if ! docker info &> /dev/null 2>&1; then
59
+ err "Docker daemon not running. Start it (e.g. sudo systemctl start docker) and re-run this script."
60
+ exit 1
61
+ fi
62
+
63
+ # Use project start script if present, else docker compose up
64
+ if [ -f "scripts/start.sh" ]; then
65
+ info "Starting stack via scripts/start.sh..."
66
+ bash scripts/start.sh
67
+ else
68
+ if [ -f ".env.example" ] && [ ! -f ".env" ]; then cp .env.example .env; fi
69
+ info "Starting stack..."
70
+ docker compose up -d --remove-orphans
71
+ echo ""
72
+ ok "Stack started. Gateway: http://localhost:\${OPENCLAW_GATEWAY_PORT:-18789}"
73
+ fi
74
+ `;
75
+ const MACOS_SCRIPT_PREFIX_NATIVE = `
76
+ if [ -f "native/install-macos.sh" ]; then
77
+ info "Installing and starting native services..."
78
+ bash native/install-macos.sh
79
+ ok "Native services ready."
80
+ fi
81
+ `;
82
+ const MACOS_SCRIPT = `#!/usr/bin/env bash
83
+ set -euo pipefail
84
+
85
+ # OpenClaw bare-metal installer (macOS)
86
+ # Optionally runs native services, then Docker Desktop + compose.
87
+ # Idempotent: safe to re-run.
88
+
89
+ SCRIPT_DIR="$(cd "$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
90
+ cd "$SCRIPT_DIR"
91
+
92
+ if [ -t 1 ]; then
93
+ RED='\\033[0;31m'; GREEN='\\033[0;32m'; YELLOW='\\033[1;33m'; CYAN='\\033[0;36m'; NC='\\033[0m'
94
+ else
95
+ RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''
96
+ fi
97
+ info() { echo -e "\${CYAN}ℹ $*\${NC}"; }
98
+ ok() { echo -e "\${GREEN}✅ $*\${NC}"; }
99
+ warn() { echo -e "\${YELLOW}⚠️ $*\${NC}"; }
100
+ err() { echo -e "\${RED}❌ $*\${NC}" >&2; }
101
+ __NATIVE_BLOCK__
102
+ if ! command -v docker &> /dev/null; then
103
+ if command -v brew &> /dev/null; then
104
+ info "Installing Docker via Homebrew..."
105
+ brew install --cask docker
106
+ warn "Docker Desktop was installed. Please open Docker from Applications, then re-run this script."
107
+ exit 0
108
+ else
109
+ err "Docker not found. Install Docker Desktop from https://docs.docker.com/desktop/install/mac-install/ or run: brew install --cask docker"
110
+ exit 1
111
+ fi
112
+ fi
113
+
114
+ if ! docker info &> /dev/null 2>&1; then
115
+ err "Docker daemon not running. Open Docker Desktop from Applications, then re-run this script."
116
+ exit 1
117
+ fi
118
+
119
+ if ! docker compose version &> /dev/null; then
120
+ err "Docker Compose (v2) not available. Ensure Docker Desktop is up to date."
121
+ exit 1
122
+ fi
123
+
124
+ if [ -f "scripts/start.sh" ]; then
125
+ info "Starting stack via scripts/start.sh..."
126
+ bash scripts/start.sh
127
+ else
128
+ if [ -f ".env.example" ] && [ ! -f ".env" ]; then cp .env.example .env; fi
129
+ info "Starting stack..."
130
+ docker compose up -d --remove-orphans
131
+ echo ""
132
+ ok "Stack started. Gateway: http://localhost:\${OPENCLAW_GATEWAY_PORT:-18789}"
133
+ fi
134
+ `;
135
+ const WINDOWS_SCRIPT_PREFIX_NATIVE = `
136
+ if (Test-Path "native/install-windows.ps1") {
137
+ Info "Installing and starting native services..."
138
+ & .\\native\\install-windows.ps1
139
+ Ok "Native services ready."
140
+ }
141
+ `;
142
+ const WINDOWS_SCRIPT = `# OpenClaw bare-metal installer (Windows PowerShell)
143
+ # Optionally runs native services, then Docker Desktop + compose.
144
+ # Idempotent: safe to re-run. Run in PowerShell as Administrator if installing Docker.
145
+
146
+ $ErrorActionPreference = "Stop"
147
+ $ProjectDir = $PSScriptRoot
148
+ Set-Location $ProjectDir
149
+
150
+ function Info { Write-Host " $args" -ForegroundColor Cyan }
151
+ function Ok { Write-Host " $args" -ForegroundColor Green }
152
+ function Warn { Write-Host " $args" -ForegroundColor Yellow }
153
+ function Err { Write-Host " $args" -ForegroundColor Red; exit 1 }
154
+ __NATIVE_BLOCK__
155
+ # Check Docker
156
+ $docker = Get-Command docker -ErrorAction SilentlyContinue
157
+ if (-not $docker) {
158
+ Write-Host ""
159
+ Write-Host " Docker not found." -ForegroundColor Red
160
+ Write-Host " Install Docker Desktop from: https://docs.docker.com/desktop/install/windows-install/"
161
+ Write-Host " Then restart PowerShell and run this script again."
162
+ exit 1
163
+ }
164
+
165
+ try { docker info 2>$null | Out-Null } catch {
166
+ Write-Host ""
167
+ Write-Host " Docker daemon is not running." -ForegroundColor Red
168
+ Write-Host " Start Docker Desktop from the Start menu, then run this script again."
169
+ exit 1
170
+ }
171
+
172
+ try { docker compose version 2>$null | Out-Null } catch {
173
+ Write-Host ""
174
+ Write-Host " Docker Compose (v2) not available. Update Docker Desktop." -ForegroundColor Red
175
+ exit 1
176
+ }
177
+
178
+ Ok "Docker is ready."
179
+
180
+ # Prepare .env
181
+ if (-not (Test-Path ".env")) {
182
+ if (Test-Path ".env.example") {
183
+ Copy-Item ".env.example" ".env"
184
+ Info "Created .env from .env.example"
185
+ }
186
+ }
187
+
188
+ # Create dirs
189
+ $configDir = if ($env:OPENCLAW_CONFIG_DIR) { $env:OPENCLAW_CONFIG_DIR } else { "./openclaw/config" }
190
+ $workspaceDir = if ($env:OPENCLAW_WORKSPACE_DIR) { $env:OPENCLAW_WORKSPACE_DIR } else { "./openclaw/workspace" }
191
+ New-Item -ItemType Directory -Force -Path $configDir | Out-Null
192
+ New-Item -ItemType Directory -Force -Path $workspaceDir | Out-Null
193
+ Ok "Directories ready."
194
+
195
+ # Start stack
196
+ Info "Starting stack..."
197
+ docker compose up -d --remove-orphans
198
+
199
+ $port = if ($env:OPENCLAW_GATEWAY_PORT) { $env:OPENCLAW_GATEWAY_PORT } else { "18789" }
200
+ Write-Host ""
201
+ Ok "Stack started. Gateway: http://localhost:$port"
202
+ `;
203
+ /**
204
+ * Returns one file: install.sh (Linux/macOS) or install.ps1 (Windows).
205
+ * When hasNativeServices is true, the script runs the native installer first, then Docker + compose.
206
+ */
207
+ export function generateBareMetalInstall(options) {
208
+ const { platform, hasNativeServices } = options;
209
+ const files = {};
210
+ if (platform === "windows/amd64") {
211
+ const script = hasNativeServices
212
+ ? WINDOWS_SCRIPT.replace("__NATIVE_BLOCK__", WINDOWS_SCRIPT_PREFIX_NATIVE)
213
+ : WINDOWS_SCRIPT.replace("__NATIVE_BLOCK__", "");
214
+ files["install.ps1"] = script;
215
+ return files;
216
+ }
217
+ const isMac = platform.startsWith("macos/");
218
+ const baseScript = isMac ? MACOS_SCRIPT : LINUX_SCRIPT;
219
+ const prefix = hasNativeServices
220
+ ? isMac
221
+ ? MACOS_SCRIPT_PREFIX_NATIVE
222
+ : LINUX_SCRIPT_PREFIX_NATIVE
223
+ : "";
224
+ const script = baseScript.replace("__NATIVE_BLOCK__", prefix);
225
+ files["install.sh"] = script;
226
+ return files;
227
+ }
228
+ //# sourceMappingURL=bare-metal-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bare-metal-install.js","sourceRoot":"","sources":["../../src/generators/bare-metal-install.ts"],"names":[],"mappings":"AAOA,MAAM,0BAA0B,GAAG;;;;;;;CAOlC,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEpB,CAAC;AAEF,MAAM,0BAA0B,GAAG;;;;;;CAMlC,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDpB,CAAC;AAEF,MAAM,4BAA4B,GAAG;;;;;;CAMpC,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DtB,CAAC;AASF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAgC;IACxE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAChD,MAAM,KAAK,GAA2B,EAAE,CAAC;IAEzC,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,iBAAiB;YAC/B,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;YAC1E,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;QAC9B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IACvD,MAAM,MAAM,GAAG,iBAAiB;QAC/B,CAAC,CAAC,KAAK;YACN,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,0BAA0B;QAC7B,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC9D,KAAK,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;IAC7B,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ResolverOutput } from "../types.js";
2
+ /**
3
+ * Generates a Caddyfile with reverse proxy entries for each exposed service.
4
+ *
5
+ * Each service with exposed ports gets a subdomain route under the provided domain.
6
+ * Services without exposed ports are skipped.
7
+ *
8
+ * @param resolved - The resolved service configuration
9
+ * @param domain - The main domain for routing (e.g. "example.com")
10
+ * @returns The Caddyfile content as a string
11
+ */
12
+ export declare function generateCaddyfile(resolved: ResolverOutput, domain: string): string;
13
+ //# sourceMappingURL=caddy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caddy.d.ts","sourceRoot":"","sources":["../../src/generators/caddy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsFlF"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Generates a Caddyfile with reverse proxy entries for each exposed service.
3
+ *
4
+ * Each service with exposed ports gets a subdomain route under the provided domain.
5
+ * Services without exposed ports are skipped.
6
+ *
7
+ * @param resolved - The resolved service configuration
8
+ * @param domain - The main domain for routing (e.g. "example.com")
9
+ * @returns The Caddyfile content as a string
10
+ */
11
+ export function generateCaddyfile(resolved, domain) {
12
+ const sections = [];
13
+ // ── Global Options ──────────────────────────────────────────────────────
14
+ sections.push(`# ═══════════════════════════════════════════════════════════════════════════════
15
+ # OpenClaw Caddyfile — Auto-generated reverse proxy configuration
16
+ # Domain: ${domain}
17
+ # ═══════════════════════════════════════════════════════════════════════════════
18
+
19
+ {
20
+ # Global options
21
+ email admin@${domain}
22
+ acme_ca https://acme-v02.api.letsencrypt.org/directory
23
+ }
24
+ `);
25
+ // ── Per-Service Reverse Proxy Blocks ─────────────────────────────────────
26
+ for (const { definition } of resolved.services) {
27
+ // Skip the proxy service itself
28
+ if (definition.id === "caddy" || definition.id === "traefik")
29
+ continue;
30
+ const exposedPorts = definition.ports.filter((p) => p.exposed);
31
+ if (exposedPorts.length === 0)
32
+ continue;
33
+ // Use the first exposed port as the primary route target
34
+ const primaryPort = exposedPorts[0];
35
+ const subdomain = `${definition.id}.${domain}`;
36
+ const block = [
37
+ `# ${definition.icon} ${definition.name}`,
38
+ `# ${definition.description}`,
39
+ `${subdomain} {`,
40
+ ` reverse_proxy ${definition.id}:${primaryPort.container} {`,
41
+ ` header_up Host {host}`,
42
+ ` header_up X-Real-IP {remote_host}`,
43
+ ` header_up X-Forwarded-For {remote_host}`,
44
+ ` header_up X-Forwarded-Proto {scheme}`,
45
+ ` }`,
46
+ ];
47
+ // Add health check if service has one
48
+ if (definition.healthcheck) {
49
+ block.push("");
50
+ block.push(` # Health check`);
51
+ block.push(` handle /health {`);
52
+ block.push(` reverse_proxy ${definition.id}:${primaryPort.container}`);
53
+ block.push(` }`);
54
+ }
55
+ block.push(`}`);
56
+ block.push("");
57
+ // If there are additional exposed ports, add them as separate entries
58
+ for (let i = 1; i < exposedPorts.length; i++) {
59
+ const port = exposedPorts[i];
60
+ const portSubdomain = `${definition.id}-${port.description
61
+ .toLowerCase()
62
+ .replace(/[^a-z0-9]+/g, "-")
63
+ .replace(/-+$/, "")}.${domain}`;
64
+ block.push(`# ${definition.name} — ${port.description}`);
65
+ block.push(`${portSubdomain} {`);
66
+ block.push(` reverse_proxy ${definition.id}:${port.container}`);
67
+ block.push(`}`);
68
+ block.push("");
69
+ }
70
+ sections.push(block.join("\n"));
71
+ }
72
+ // ── Fallback / Root Domain ──────────────────────────────────────────────
73
+ sections.push(`# Root domain — serves the OpenClaw gateway
74
+ ${domain} {
75
+ reverse_proxy openclaw:18789 {
76
+ header_up Host {host}
77
+ header_up X-Real-IP {remote_host}
78
+ header_up X-Forwarded-For {remote_host}
79
+ header_up X-Forwarded-Proto {scheme}
80
+ }
81
+ }
82
+ `);
83
+ return sections.join("\n");
84
+ }
85
+ //# sourceMappingURL=caddy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caddy.js","sourceRoot":"","sources":["../../src/generators/caddy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAwB,EAAE,MAAc;IACzE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,2EAA2E;IAE3E,QAAQ,CAAC,IAAI,CAAC;;YAEH,MAAM;;;;;eAKH,MAAM;;;CAGpB,CAAC,CAAC;IAEF,4EAA4E;IAE5E,KAAK,MAAM,EAAE,UAAU,EAAE,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAChD,gCAAgC;QAChC,IAAI,UAAU,CAAC,EAAE,KAAK,OAAO,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS;YAAE,SAAS;QAEvE,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAExC,yDAAyD;QACzD,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;QACrC,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;QAE/C,MAAM,KAAK,GAAG;YACb,KAAK,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE;YACzC,KAAK,UAAU,CAAC,WAAW,EAAE;YAC7B,GAAG,SAAS,IAAI;YAChB,kBAAkB,UAAU,CAAC,EAAE,IAAI,WAAW,CAAC,SAAS,IAAI;YAC5D,yBAAyB;YACzB,qCAAqC;YACrC,2CAA2C;YAC3C,wCAAwC;YACxC,IAAI;SACJ,CAAC;QAEF,sCAAsC;QACtC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,EAAE,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,sEAAsE;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;YAC9B,MAAM,aAAa,GAAG,GAAG,UAAU,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;iBACxD,WAAW,EAAE;iBACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;iBAC3B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;YAEjC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,2EAA2E;IAE3E,QAAQ,CAAC,IAAI,CAAC;EACb,MAAM;;;;;;;;CAQP,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { ResolverOutput } from "../types.js";
2
+ /**
3
+ * Options for environment file generation.
4
+ */
5
+ export interface EnvGeneratorOptions {
6
+ generateSecrets: boolean;
7
+ domain?: string;
8
+ openclawVersion?: string;
9
+ /** 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. */
10
+ nativeServiceIds?: Set<string>;
11
+ }
12
+ /**
13
+ * Generates `.env.example` and `.env` file contents from resolved services.
14
+ *
15
+ * - `.env.example`: every env var with descriptive comments, placeholders for secrets
16
+ * - `.env`: same vars but secrets filled with cryptographically random values when generateSecrets is true
17
+ */
18
+ export declare function generateEnvFiles(resolved: ResolverOutput, options: EnvGeneratorOptions): {
19
+ envExample: string;
20
+ env: string;
21
+ };
22
+ export interface EnvVarGroup {
23
+ serviceName: string;
24
+ serviceIcon: string;
25
+ serviceId: string;
26
+ vars: {
27
+ key: string;
28
+ description: string;
29
+ secret: boolean;
30
+ required: boolean;
31
+ defaultValue: string;
32
+ }[];
33
+ }
34
+ /**
35
+ * Returns environment variables grouped by service, suitable for UI rendering.
36
+ *
37
+ * - First group is always "OpenClaw Core" with base variables.
38
+ * - Subsequent groups correspond to each resolved service.
39
+ * - Variables are deduplicated across groups (first occurrence wins).
40
+ */
41
+ export declare function getStructuredEnvVars(resolved: ResolverOutput): EnvVarGroup[];
42
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/generators/env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qJAAqJ;IACrJ,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,mBAAmB,GAC1B;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CA+QrC;AAmBD,MAAM,WAAW,WAAW;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACJ;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,EAAE,CAsE5E"}
@@ -0,0 +1,276 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { getDbRequirements } from "./postgres-init.js";
3
+ /**
4
+ * Generates `.env.example` and `.env` file contents from resolved services.
5
+ *
6
+ * - `.env.example`: every env var with descriptive comments, placeholders for secrets
7
+ * - `.env`: same vars but secrets filled with cryptographically random values when generateSecrets is true
8
+ */
9
+ export function generateEnvFiles(resolved, options) {
10
+ const version = options.openclawVersion ?? "latest";
11
+ const lines = [];
12
+ // ── Base OpenClaw Variables ──────────────────────────────────────────────
13
+ lines.push({
14
+ comment: formatComment("OpenClaw version to deploy", "OpenClaw Core", true, false),
15
+ key: "OPENCLAW_VERSION",
16
+ exampleValue: version,
17
+ actualValue: version,
18
+ });
19
+ const gatewayToken = options.generateSecrets ? randomBytes(24).toString("hex") : "";
20
+ lines.push({
21
+ comment: formatComment("Authentication token for the OpenClaw gateway API", "OpenClaw Core", true, true),
22
+ key: "OPENCLAW_GATEWAY_TOKEN",
23
+ exampleValue: "your_gateway_token_here",
24
+ actualValue: gatewayToken,
25
+ });
26
+ lines.push({
27
+ comment: formatComment("Port the OpenClaw gateway listens on", "OpenClaw Core", true, false),
28
+ key: "OPENCLAW_GATEWAY_PORT",
29
+ exampleValue: "18789",
30
+ actualValue: "18789",
31
+ });
32
+ lines.push({
33
+ comment: formatComment("Port for the OpenClaw ACP bridge (WebSocket)", "OpenClaw Core", false, false),
34
+ key: "OPENCLAW_BRIDGE_PORT",
35
+ exampleValue: "18790",
36
+ actualValue: "18790",
37
+ });
38
+ lines.push({
39
+ comment: formatComment("Gateway network bind mode (lan for Docker networking, loopback for local-only)", "OpenClaw Core", false, false),
40
+ key: "OPENCLAW_GATEWAY_BIND",
41
+ exampleValue: "lan",
42
+ actualValue: "lan",
43
+ });
44
+ lines.push({
45
+ comment: formatComment("Host path to OpenClaw configuration directory", "OpenClaw Core", true, false),
46
+ key: "OPENCLAW_CONFIG_DIR",
47
+ exampleValue: "./openclaw/config",
48
+ actualValue: "./openclaw/config",
49
+ });
50
+ lines.push({
51
+ comment: formatComment("Host path to OpenClaw workspace directory", "OpenClaw Core", true, false),
52
+ key: "OPENCLAW_WORKSPACE_DIR",
53
+ exampleValue: "./openclaw/workspace",
54
+ actualValue: "./openclaw/workspace",
55
+ });
56
+ lines.push({
57
+ comment: formatComment("OpenClaw Docker image override (default uses ghcr.io/openclaw/openclaw)", "OpenClaw Core", false, false),
58
+ key: "OPENCLAW_IMAGE",
59
+ exampleValue: "",
60
+ actualValue: "",
61
+ });
62
+ if (options.domain) {
63
+ 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
+ }
70
+ // Claude web-provider session variables (optional)
71
+ lines.push({
72
+ comment: "\n# ═══════════════════════════════════════════════════════════════════════════════\n# Claude Web Provider (optional)\n# ═══════════════════════════════════════════════════════════════════════════════",
73
+ key: "",
74
+ exampleValue: "",
75
+ actualValue: "",
76
+ });
77
+ lines.push({
78
+ comment: formatComment("Claude AI session key for web provider authentication", "OpenClaw Core", false, true),
79
+ key: "CLAUDE_AI_SESSION_KEY",
80
+ exampleValue: "your_claude_ai_session_key_here",
81
+ actualValue: "",
82
+ });
83
+ lines.push({
84
+ comment: formatComment("Claude web session key for web provider authentication", "OpenClaw Core", false, true),
85
+ key: "CLAUDE_WEB_SESSION_KEY",
86
+ exampleValue: "your_claude_web_session_key_here",
87
+ actualValue: "",
88
+ });
89
+ lines.push({
90
+ comment: formatComment("Claude web cookie for web provider authentication", "OpenClaw Core", false, true),
91
+ key: "CLAUDE_WEB_COOKIE",
92
+ exampleValue: "your_claude_web_cookie_here",
93
+ actualValue: "",
94
+ });
95
+ // ── Per-Service Database Passwords ──────────────────────────────────────
96
+ const dbReqs = getDbRequirements(resolved);
97
+ if (dbReqs.length > 0) {
98
+ lines.push({
99
+ comment: "\n# ═══════════════════════════════════════════════════════════════════════════════\n# Per-Service Database Passwords\n# Each service gets its own PostgreSQL database and credentials\n# ═══════════════════════════════════════════════════════════════════════════════",
100
+ key: "",
101
+ exampleValue: "",
102
+ actualValue: "",
103
+ });
104
+ for (const req of dbReqs) {
105
+ const secretValue = options.generateSecrets ? randomBytes(24).toString("hex") : "";
106
+ lines.push({
107
+ comment: formatComment(`PostgreSQL password for ${req.serviceName} (database: ${req.dbName}, user: ${req.dbUser})`, req.serviceName, true, true),
108
+ key: req.passwordEnvVar,
109
+ exampleValue: `your_${req.passwordEnvVar.toLowerCase()}_here`,
110
+ actualValue: secretValue,
111
+ });
112
+ }
113
+ }
114
+ // ── Service-Specific Variables ───────────────────────────────────────────
115
+ const dbPasswordKeys = dbReqs.map((r) => r.passwordEnvVar);
116
+ const seenKeys = new Set([
117
+ "OPENCLAW_VERSION",
118
+ "OPENCLAW_GATEWAY_TOKEN",
119
+ "OPENCLAW_GATEWAY_PORT",
120
+ "OPENCLAW_BRIDGE_PORT",
121
+ "OPENCLAW_GATEWAY_BIND",
122
+ "OPENCLAW_CONFIG_DIR",
123
+ "OPENCLAW_WORKSPACE_DIR",
124
+ "OPENCLAW_IMAGE",
125
+ "OPENCLAW_DOMAIN",
126
+ "CLAUDE_AI_SESSION_KEY",
127
+ "CLAUDE_WEB_SESSION_KEY",
128
+ "CLAUDE_WEB_COOKIE",
129
+ ...dbPasswordKeys,
130
+ ]);
131
+ for (const { definition } of resolved.services) {
132
+ const allEnvVars = [...definition.environment, ...definition.openclawEnvVars];
133
+ if (allEnvVars.length === 0)
134
+ continue;
135
+ // Section separator for this service
136
+ lines.push({
137
+ comment: `\n# ═══════════════════════════════════════════════════════════════════════════════\n# ${definition.icon} ${definition.name}\n# ═══════════════════════════════════════════════════════════════════════════════`,
138
+ key: "",
139
+ exampleValue: "",
140
+ actualValue: "",
141
+ });
142
+ const isNative = options.nativeServiceIds?.has(definition.id);
143
+ for (const envVar of allEnvVars) {
144
+ if (seenKeys.has(envVar.key))
145
+ continue;
146
+ seenKeys.add(envVar.key);
147
+ const secretValue = options.generateSecrets ? randomBytes(24).toString("hex") : "";
148
+ // For native services, host-like vars must point to host so gateway (in Docker) can reach them
149
+ const isHostVar = envVar.key.endsWith("_HOST");
150
+ const hostValue = isNative && isHostVar ? "host.docker.internal" : null;
151
+ const exampleValue = hostValue
152
+ ? hostValue
153
+ : envVar.secret
154
+ ? `your_${envVar.key.toLowerCase()}_here`
155
+ : envVar.defaultValue;
156
+ let actualValue;
157
+ if (hostValue) {
158
+ actualValue = hostValue;
159
+ }
160
+ else if (envVar.secret) {
161
+ actualValue = envVar.defaultValue.startsWith("${") ? envVar.defaultValue : secretValue;
162
+ }
163
+ else {
164
+ actualValue = envVar.defaultValue;
165
+ }
166
+ lines.push({
167
+ comment: formatComment(envVar.description, definition.name, envVar.required, envVar.secret),
168
+ key: envVar.key,
169
+ exampleValue,
170
+ actualValue,
171
+ });
172
+ }
173
+ }
174
+ // ── Build output strings ────────────────────────────────────────────────
175
+ const header = [
176
+ "# ═══════════════════════════════════════════════════════════════════════════════",
177
+ "# OpenClaw Environment Configuration",
178
+ `# Generated at ${new Date().toISOString()}`,
179
+ "# ═══════════════════════════════════════════════════════════════════════════════",
180
+ "",
181
+ ].join("\n");
182
+ let envExample = header;
183
+ let env = header;
184
+ for (const line of lines) {
185
+ if (line.key === "") {
186
+ // Section comment
187
+ envExample += `${line.comment}\n`;
188
+ env += `${line.comment}\n`;
189
+ }
190
+ else {
191
+ envExample += `${line.comment}\n${line.key}=${line.exampleValue}\n\n`;
192
+ env += `${line.comment}\n${line.key}=${line.actualValue}\n\n`;
193
+ }
194
+ }
195
+ return { envExample, env };
196
+ }
197
+ /**
198
+ * Format a descriptive comment block for an environment variable.
199
+ */
200
+ function formatComment(description, serviceName, required, secret) {
201
+ return [
202
+ `# ${description}`,
203
+ `# Service: ${serviceName} | Required: ${required ? "Yes" : "No"} | Secret: ${secret ? "Yes" : "No"}`,
204
+ ].join("\n");
205
+ }
206
+ /**
207
+ * Returns environment variables grouped by service, suitable for UI rendering.
208
+ *
209
+ * - First group is always "OpenClaw Core" with base variables.
210
+ * - Subsequent groups correspond to each resolved service.
211
+ * - Variables are deduplicated across groups (first occurrence wins).
212
+ */
213
+ export function getStructuredEnvVars(resolved) {
214
+ const groups = [];
215
+ const seenKeys = new Set();
216
+ // ── OpenClaw Core group ──────────────────────────────────────────────────
217
+ const coreVars = [
218
+ {
219
+ key: "OPENCLAW_VERSION",
220
+ description: "OpenClaw version to deploy",
221
+ secret: false,
222
+ required: true,
223
+ defaultValue: "latest",
224
+ },
225
+ {
226
+ key: "OPENCLAW_GATEWAY_TOKEN",
227
+ description: "Authentication token for the OpenClaw gateway API",
228
+ secret: true,
229
+ required: true,
230
+ defaultValue: "",
231
+ },
232
+ {
233
+ key: "OPENCLAW_GATEWAY_PORT",
234
+ description: "Port the OpenClaw gateway listens on",
235
+ secret: false,
236
+ required: true,
237
+ defaultValue: "18789",
238
+ },
239
+ ];
240
+ for (const v of coreVars) {
241
+ seenKeys.add(v.key);
242
+ }
243
+ groups.push({
244
+ serviceName: "OpenClaw Core",
245
+ serviceIcon: "⚙️",
246
+ serviceId: "openclaw-core",
247
+ vars: coreVars,
248
+ });
249
+ // ── Per-service groups ───────────────────────────────────────────────────
250
+ for (const { definition } of resolved.services) {
251
+ const allEnvVars = [...definition.environment, ...definition.openclawEnvVars];
252
+ const vars = [];
253
+ for (const envVar of allEnvVars) {
254
+ if (seenKeys.has(envVar.key))
255
+ continue;
256
+ seenKeys.add(envVar.key);
257
+ vars.push({
258
+ key: envVar.key,
259
+ description: envVar.description,
260
+ secret: envVar.secret,
261
+ required: envVar.required,
262
+ defaultValue: envVar.defaultValue,
263
+ });
264
+ }
265
+ if (vars.length === 0)
266
+ continue;
267
+ groups.push({
268
+ serviceName: definition.name,
269
+ serviceIcon: definition.icon,
270
+ serviceId: definition.id,
271
+ vars,
272
+ });
273
+ }
274
+ return groups;
275
+ }
276
+ //# sourceMappingURL=env.js.map