@better-openclaw/core 1.0.22 → 1.0.24

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 (697) hide show
  1. package/dist/bare-metal-partition.test.cjs +3 -4
  2. package/dist/bare-metal-partition.test.cjs.map +1 -1
  3. package/dist/bare-metal-partition.test.mjs +3 -4
  4. package/dist/bare-metal-partition.test.mjs.map +1 -1
  5. package/dist/composer.cjs +40 -14
  6. package/dist/composer.cjs.map +1 -1
  7. package/dist/composer.d.cts.map +1 -1
  8. package/dist/composer.d.mts.map +1 -1
  9. package/dist/composer.mjs +40 -14
  10. package/dist/composer.mjs.map +1 -1
  11. package/dist/composer.snapshot.test.cjs +1 -1
  12. package/dist/composer.snapshot.test.mjs +1 -1
  13. package/dist/composer.test.cjs +3 -2
  14. package/dist/composer.test.cjs.map +1 -1
  15. package/dist/composer.test.mjs +3 -2
  16. package/dist/composer.test.mjs.map +1 -1
  17. package/dist/deployers/strip-host-ports.test.cjs +1 -1
  18. package/dist/deployers/strip-host-ports.test.mjs +1 -1
  19. package/dist/generate.cjs +7 -2
  20. package/dist/generate.cjs.map +1 -1
  21. package/dist/generate.d.cts.map +1 -1
  22. package/dist/generate.d.mts.map +1 -1
  23. package/dist/generate.mjs +7 -2
  24. package/dist/generate.mjs.map +1 -1
  25. package/dist/generate.test.cjs +2 -2
  26. package/dist/generate.test.cjs.map +1 -1
  27. package/dist/generate.test.mjs +2 -2
  28. package/dist/generate.test.mjs.map +1 -1
  29. package/dist/generators/bare-metal-install.test.cjs +1 -1
  30. package/dist/generators/bare-metal-install.test.mjs +1 -1
  31. package/dist/generators/caddy.test.cjs +1 -1
  32. package/dist/generators/caddy.test.mjs +1 -1
  33. package/dist/generators/clone-repos.cjs +140 -0
  34. package/dist/generators/clone-repos.cjs.map +1 -0
  35. package/dist/generators/clone-repos.d.cts +11 -0
  36. package/dist/generators/clone-repos.d.cts.map +1 -0
  37. package/dist/generators/clone-repos.d.mts +11 -0
  38. package/dist/generators/clone-repos.d.mts.map +1 -0
  39. package/dist/generators/clone-repos.mjs +139 -0
  40. package/dist/generators/clone-repos.mjs.map +1 -0
  41. package/dist/generators/clone-repos.test.cjs +140 -0
  42. package/dist/generators/clone-repos.test.cjs.map +1 -0
  43. package/dist/generators/clone-repos.test.d.cts +1 -0
  44. package/dist/generators/clone-repos.test.d.mts +1 -0
  45. package/dist/generators/clone-repos.test.mjs +141 -0
  46. package/dist/generators/clone-repos.test.mjs.map +1 -0
  47. package/dist/generators/env.cjs +146 -0
  48. package/dist/generators/env.cjs.map +1 -1
  49. package/dist/generators/env.d.cts.map +1 -1
  50. package/dist/generators/env.d.mts.map +1 -1
  51. package/dist/generators/env.mjs +146 -0
  52. package/dist/generators/env.mjs.map +1 -1
  53. package/dist/generators/env.test.cjs +1 -1
  54. package/dist/generators/env.test.mjs +1 -1
  55. package/dist/generators/health-check.test.cjs +1 -1
  56. package/dist/generators/health-check.test.mjs +1 -1
  57. package/dist/generators/openclaw-json.cjs +102 -7
  58. package/dist/generators/openclaw-json.cjs.map +1 -1
  59. package/dist/generators/openclaw-json.mjs +102 -7
  60. package/dist/generators/openclaw-json.mjs.map +1 -1
  61. package/dist/generators/postgres-init.cjs +20 -0
  62. package/dist/generators/postgres-init.cjs.map +1 -1
  63. package/dist/generators/postgres-init.d.cts.map +1 -1
  64. package/dist/generators/postgres-init.d.mts.map +1 -1
  65. package/dist/generators/postgres-init.mjs +20 -0
  66. package/dist/generators/postgres-init.mjs.map +1 -1
  67. package/dist/generators/readme.cjs +2 -1
  68. package/dist/generators/readme.cjs.map +1 -1
  69. package/dist/generators/readme.mjs +2 -1
  70. package/dist/generators/readme.mjs.map +1 -1
  71. package/dist/generators/scripts.cjs +332 -3
  72. package/dist/generators/scripts.cjs.map +1 -1
  73. package/dist/generators/scripts.d.cts +3 -1
  74. package/dist/generators/scripts.d.cts.map +1 -1
  75. package/dist/generators/scripts.d.mts +3 -1
  76. package/dist/generators/scripts.d.mts.map +1 -1
  77. package/dist/generators/scripts.mjs +332 -3
  78. package/dist/generators/scripts.mjs.map +1 -1
  79. package/dist/generators/scripts.test.cjs +39 -5
  80. package/dist/generators/scripts.test.cjs.map +1 -1
  81. package/dist/generators/scripts.test.mjs +39 -5
  82. package/dist/generators/scripts.test.mjs.map +1 -1
  83. package/dist/generators/stack-manifest.cjs +1 -0
  84. package/dist/generators/stack-manifest.cjs.map +1 -1
  85. package/dist/generators/stack-manifest.d.cts +3 -2
  86. package/dist/generators/stack-manifest.d.cts.map +1 -1
  87. package/dist/generators/stack-manifest.d.mts +3 -2
  88. package/dist/generators/stack-manifest.d.mts.map +1 -1
  89. package/dist/generators/stack-manifest.mjs +1 -0
  90. package/dist/generators/stack-manifest.mjs.map +1 -1
  91. package/dist/generators/traefik.test.cjs +1 -1
  92. package/dist/generators/traefik.test.mjs +1 -1
  93. package/dist/index.cjs +8 -1
  94. package/dist/index.d.cts +5 -3
  95. package/dist/index.d.mts +5 -3
  96. package/dist/index.mjs +5 -3
  97. package/dist/migrations.test.cjs +1 -1
  98. package/dist/migrations.test.mjs +1 -1
  99. package/dist/presets/registry.cjs +19 -0
  100. package/dist/presets/registry.cjs.map +1 -1
  101. package/dist/presets/registry.d.cts.map +1 -1
  102. package/dist/presets/registry.d.mts.map +1 -1
  103. package/dist/presets/registry.mjs +19 -0
  104. package/dist/presets/registry.mjs.map +1 -1
  105. package/dist/presets/registry.test.cjs +1 -1
  106. package/dist/presets/registry.test.mjs +1 -1
  107. package/dist/resolver.cjs +8 -0
  108. package/dist/resolver.cjs.map +1 -1
  109. package/dist/resolver.mjs +9 -1
  110. package/dist/resolver.mjs.map +1 -1
  111. package/dist/resolver.test.cjs +47 -12
  112. package/dist/resolver.test.cjs.map +1 -1
  113. package/dist/resolver.test.mjs +47 -12
  114. package/dist/resolver.test.mjs.map +1 -1
  115. package/dist/{schema-C_hc7e4k.d.cts → schema-eX44HhRp.d.mts} +78 -8
  116. package/dist/schema-eX44HhRp.d.mts.map +1 -0
  117. package/dist/{schema-CaesJaS2.d.mts → schema-tn5RK8CM.d.cts} +78 -8
  118. package/dist/schema-tn5RK8CM.d.cts.map +1 -0
  119. package/dist/schema.cjs +26 -4
  120. package/dist/schema.cjs.map +1 -1
  121. package/dist/schema.d.cts +2 -2
  122. package/dist/schema.d.mts +2 -2
  123. package/dist/schema.mjs +25 -5
  124. package/dist/schema.mjs.map +1 -1
  125. package/dist/schema.test.cjs +1 -1
  126. package/dist/schema.test.mjs +1 -1
  127. package/dist/services/definitions/adguard-home.cjs +74 -0
  128. package/dist/services/definitions/adguard-home.cjs.map +1 -0
  129. package/dist/services/definitions/adguard-home.d.cts +7 -0
  130. package/dist/services/definitions/adguard-home.d.cts.map +1 -0
  131. package/dist/services/definitions/adguard-home.d.mts +7 -0
  132. package/dist/services/definitions/adguard-home.d.mts.map +1 -0
  133. package/dist/services/definitions/adguard-home.mjs +73 -0
  134. package/dist/services/definitions/adguard-home.mjs.map +1 -0
  135. package/dist/services/definitions/apptension-saas.cjs +87 -0
  136. package/dist/services/definitions/apptension-saas.cjs.map +1 -0
  137. package/dist/services/definitions/apptension-saas.d.cts +7 -0
  138. package/dist/services/definitions/apptension-saas.d.cts.map +1 -0
  139. package/dist/services/definitions/apptension-saas.d.mts +7 -0
  140. package/dist/services/definitions/apptension-saas.d.mts.map +1 -0
  141. package/dist/services/definitions/apptension-saas.mjs +86 -0
  142. package/dist/services/definitions/apptension-saas.mjs.map +1 -0
  143. package/dist/services/definitions/audiobookshelf.cjs +81 -0
  144. package/dist/services/definitions/audiobookshelf.cjs.map +1 -0
  145. package/dist/services/definitions/audiobookshelf.d.cts +7 -0
  146. package/dist/services/definitions/audiobookshelf.d.cts.map +1 -0
  147. package/dist/services/definitions/audiobookshelf.d.mts +7 -0
  148. package/dist/services/definitions/audiobookshelf.d.mts.map +1 -0
  149. package/dist/services/definitions/audiobookshelf.mjs +80 -0
  150. package/dist/services/definitions/audiobookshelf.mjs.map +1 -0
  151. package/dist/services/definitions/baserow.cjs +115 -0
  152. package/dist/services/definitions/baserow.cjs.map +1 -0
  153. package/dist/services/definitions/baserow.d.cts +7 -0
  154. package/dist/services/definitions/baserow.d.cts.map +1 -0
  155. package/dist/services/definitions/baserow.d.mts +7 -0
  156. package/dist/services/definitions/baserow.d.mts.map +1 -0
  157. package/dist/services/definitions/baserow.mjs +114 -0
  158. package/dist/services/definitions/baserow.mjs.map +1 -0
  159. package/dist/services/definitions/boxyhq-saas.cjs +88 -0
  160. package/dist/services/definitions/boxyhq-saas.cjs.map +1 -0
  161. package/dist/services/definitions/boxyhq-saas.d.cts +7 -0
  162. package/dist/services/definitions/boxyhq-saas.d.cts.map +1 -0
  163. package/dist/services/definitions/boxyhq-saas.d.mts +7 -0
  164. package/dist/services/definitions/boxyhq-saas.d.mts.map +1 -0
  165. package/dist/services/definitions/boxyhq-saas.mjs +87 -0
  166. package/dist/services/definitions/boxyhq-saas.mjs.map +1 -0
  167. package/dist/services/definitions/calibre-web.cjs +91 -0
  168. package/dist/services/definitions/calibre-web.cjs.map +1 -0
  169. package/dist/services/definitions/calibre-web.d.cts +7 -0
  170. package/dist/services/definitions/calibre-web.d.cts.map +1 -0
  171. package/dist/services/definitions/calibre-web.d.mts +7 -0
  172. package/dist/services/definitions/calibre-web.d.mts.map +1 -0
  173. package/dist/services/definitions/calibre-web.mjs +90 -0
  174. package/dist/services/definitions/calibre-web.mjs.map +1 -0
  175. package/dist/services/definitions/clickhouse.cjs +113 -0
  176. package/dist/services/definitions/clickhouse.cjs.map +1 -0
  177. package/dist/services/definitions/clickhouse.d.cts +7 -0
  178. package/dist/services/definitions/clickhouse.d.cts.map +1 -0
  179. package/dist/services/definitions/clickhouse.d.mts +7 -0
  180. package/dist/services/definitions/clickhouse.d.mts.map +1 -0
  181. package/dist/services/definitions/clickhouse.mjs +112 -0
  182. package/dist/services/definitions/clickhouse.mjs.map +1 -0
  183. package/dist/services/definitions/cloudflared.cjs +55 -0
  184. package/dist/services/definitions/cloudflared.cjs.map +1 -0
  185. package/dist/services/definitions/cloudflared.d.cts +7 -0
  186. package/dist/services/definitions/cloudflared.d.cts.map +1 -0
  187. package/dist/services/definitions/cloudflared.d.mts +7 -0
  188. package/dist/services/definitions/cloudflared.d.mts.map +1 -0
  189. package/dist/services/definitions/cloudflared.mjs +54 -0
  190. package/dist/services/definitions/cloudflared.mjs.map +1 -0
  191. package/dist/services/definitions/cmsaas-starter.cjs +86 -0
  192. package/dist/services/definitions/cmsaas-starter.cjs.map +1 -0
  193. package/dist/services/definitions/cmsaas-starter.d.cts +7 -0
  194. package/dist/services/definitions/cmsaas-starter.d.cts.map +1 -0
  195. package/dist/services/definitions/cmsaas-starter.d.mts +7 -0
  196. package/dist/services/definitions/cmsaas-starter.d.mts.map +1 -0
  197. package/dist/services/definitions/cmsaas-starter.mjs +85 -0
  198. package/dist/services/definitions/cmsaas-starter.mjs.map +1 -0
  199. package/dist/services/definitions/cockroachdb.cjs +70 -0
  200. package/dist/services/definitions/cockroachdb.cjs.map +1 -0
  201. package/dist/services/definitions/cockroachdb.d.cts +7 -0
  202. package/dist/services/definitions/cockroachdb.d.cts.map +1 -0
  203. package/dist/services/definitions/cockroachdb.d.mts +7 -0
  204. package/dist/services/definitions/cockroachdb.d.mts.map +1 -0
  205. package/dist/services/definitions/cockroachdb.mjs +69 -0
  206. package/dist/services/definitions/cockroachdb.mjs.map +1 -0
  207. package/dist/services/definitions/coder.cjs +64 -0
  208. package/dist/services/definitions/coder.cjs.map +1 -0
  209. package/dist/services/definitions/coder.d.cts +7 -0
  210. package/dist/services/definitions/coder.d.cts.map +1 -0
  211. package/dist/services/definitions/coder.d.mts +7 -0
  212. package/dist/services/definitions/coder.d.mts.map +1 -0
  213. package/dist/services/definitions/coder.mjs +63 -0
  214. package/dist/services/definitions/coder.mjs.map +1 -0
  215. package/dist/services/definitions/dragonfly.cjs +64 -0
  216. package/dist/services/definitions/dragonfly.cjs.map +1 -0
  217. package/dist/services/definitions/dragonfly.d.cts +7 -0
  218. package/dist/services/definitions/dragonfly.d.cts.map +1 -0
  219. package/dist/services/definitions/dragonfly.d.mts +7 -0
  220. package/dist/services/definitions/dragonfly.d.mts.map +1 -0
  221. package/dist/services/definitions/dragonfly.mjs +63 -0
  222. package/dist/services/definitions/dragonfly.mjs.map +1 -0
  223. package/dist/services/definitions/drone-ci.cjs +95 -0
  224. package/dist/services/definitions/drone-ci.cjs.map +1 -0
  225. package/dist/services/definitions/drone-ci.d.cts +7 -0
  226. package/dist/services/definitions/drone-ci.d.cts.map +1 -0
  227. package/dist/services/definitions/drone-ci.d.mts +7 -0
  228. package/dist/services/definitions/drone-ci.d.mts.map +1 -0
  229. package/dist/services/definitions/drone-ci.mjs +94 -0
  230. package/dist/services/definitions/drone-ci.mjs.map +1 -0
  231. package/dist/services/definitions/element-web.cjs +61 -0
  232. package/dist/services/definitions/element-web.cjs.map +1 -0
  233. package/dist/services/definitions/element-web.d.cts +7 -0
  234. package/dist/services/definitions/element-web.d.cts.map +1 -0
  235. package/dist/services/definitions/element-web.d.mts +7 -0
  236. package/dist/services/definitions/element-web.d.mts.map +1 -0
  237. package/dist/services/definitions/element-web.mjs +60 -0
  238. package/dist/services/definitions/element-web.mjs.map +1 -0
  239. package/dist/services/definitions/focalboard.cjs +65 -0
  240. package/dist/services/definitions/focalboard.cjs.map +1 -0
  241. package/dist/services/definitions/focalboard.d.cts +7 -0
  242. package/dist/services/definitions/focalboard.d.cts.map +1 -0
  243. package/dist/services/definitions/focalboard.d.mts +7 -0
  244. package/dist/services/definitions/focalboard.d.mts.map +1 -0
  245. package/dist/services/definitions/focalboard.mjs +64 -0
  246. package/dist/services/definitions/focalboard.mjs.map +1 -0
  247. package/dist/services/definitions/forgejo.cjs +108 -0
  248. package/dist/services/definitions/forgejo.cjs.map +1 -0
  249. package/dist/services/definitions/forgejo.d.cts +7 -0
  250. package/dist/services/definitions/forgejo.d.cts.map +1 -0
  251. package/dist/services/definitions/forgejo.d.mts +7 -0
  252. package/dist/services/definitions/forgejo.d.mts.map +1 -0
  253. package/dist/services/definitions/forgejo.mjs +107 -0
  254. package/dist/services/definitions/forgejo.mjs.map +1 -0
  255. package/dist/services/definitions/graylog.cjs +103 -0
  256. package/dist/services/definitions/graylog.cjs.map +1 -0
  257. package/dist/services/definitions/graylog.d.cts +7 -0
  258. package/dist/services/definitions/graylog.d.cts.map +1 -0
  259. package/dist/services/definitions/graylog.d.mts +7 -0
  260. package/dist/services/definitions/graylog.d.mts.map +1 -0
  261. package/dist/services/definitions/graylog.mjs +102 -0
  262. package/dist/services/definitions/graylog.mjs.map +1 -0
  263. package/dist/services/definitions/index.cjs +154 -1
  264. package/dist/services/definitions/index.cjs.map +1 -1
  265. package/dist/services/definitions/index.d.cts +52 -1
  266. package/dist/services/definitions/index.d.cts.map +1 -1
  267. package/dist/services/definitions/index.d.mts +52 -1
  268. package/dist/services/definitions/index.d.mts.map +1 -1
  269. package/dist/services/definitions/index.mjs +104 -2
  270. package/dist/services/definitions/index.mjs.map +1 -1
  271. package/dist/services/definitions/influxdb.cjs +105 -0
  272. package/dist/services/definitions/influxdb.cjs.map +1 -0
  273. package/dist/services/definitions/influxdb.d.cts +7 -0
  274. package/dist/services/definitions/influxdb.d.cts.map +1 -0
  275. package/dist/services/definitions/influxdb.d.mts +7 -0
  276. package/dist/services/definitions/influxdb.d.mts.map +1 -0
  277. package/dist/services/definitions/influxdb.mjs +104 -0
  278. package/dist/services/definitions/influxdb.mjs.map +1 -0
  279. package/dist/services/definitions/invoke-ai.cjs +70 -0
  280. package/dist/services/definitions/invoke-ai.cjs.map +1 -0
  281. package/dist/services/definitions/invoke-ai.d.cts +7 -0
  282. package/dist/services/definitions/invoke-ai.d.cts.map +1 -0
  283. package/dist/services/definitions/invoke-ai.d.mts +7 -0
  284. package/dist/services/definitions/invoke-ai.d.mts.map +1 -0
  285. package/dist/services/definitions/invoke-ai.mjs +69 -0
  286. package/dist/services/definitions/invoke-ai.mjs.map +1 -0
  287. package/dist/services/definitions/ixartz-saas.cjs +88 -0
  288. package/dist/services/definitions/ixartz-saas.cjs.map +1 -0
  289. package/dist/services/definitions/ixartz-saas.d.cts +7 -0
  290. package/dist/services/definitions/ixartz-saas.d.cts.map +1 -0
  291. package/dist/services/definitions/ixartz-saas.d.mts +7 -0
  292. package/dist/services/definitions/ixartz-saas.d.mts.map +1 -0
  293. package/dist/services/definitions/ixartz-saas.mjs +87 -0
  294. package/dist/services/definitions/ixartz-saas.mjs.map +1 -0
  295. package/dist/services/definitions/jaeger.cjs +95 -0
  296. package/dist/services/definitions/jaeger.cjs.map +1 -0
  297. package/dist/services/definitions/jaeger.d.cts +7 -0
  298. package/dist/services/definitions/jaeger.d.cts.map +1 -0
  299. package/dist/services/definitions/jaeger.d.mts +7 -0
  300. package/dist/services/definitions/jaeger.d.mts.map +1 -0
  301. package/dist/services/definitions/jaeger.mjs +94 -0
  302. package/dist/services/definitions/jaeger.mjs.map +1 -0
  303. package/dist/services/definitions/jan.cjs +64 -0
  304. package/dist/services/definitions/jan.cjs.map +1 -0
  305. package/dist/services/definitions/jan.d.cts +7 -0
  306. package/dist/services/definitions/jan.d.cts.map +1 -0
  307. package/dist/services/definitions/jan.d.mts +7 -0
  308. package/dist/services/definitions/jan.d.mts.map +1 -0
  309. package/dist/services/definitions/jan.mjs +63 -0
  310. package/dist/services/definitions/jan.mjs.map +1 -0
  311. package/dist/services/definitions/jitsi-meet.cjs +102 -0
  312. package/dist/services/definitions/jitsi-meet.cjs.map +1 -0
  313. package/dist/services/definitions/jitsi-meet.d.cts +7 -0
  314. package/dist/services/definitions/jitsi-meet.d.cts.map +1 -0
  315. package/dist/services/definitions/jitsi-meet.d.mts +7 -0
  316. package/dist/services/definitions/jitsi-meet.d.mts.map +1 -0
  317. package/dist/services/definitions/jitsi-meet.mjs +101 -0
  318. package/dist/services/definitions/jitsi-meet.mjs.map +1 -0
  319. package/dist/services/definitions/local-ai.cjs +86 -0
  320. package/dist/services/definitions/local-ai.cjs.map +1 -0
  321. package/dist/services/definitions/local-ai.d.cts +7 -0
  322. package/dist/services/definitions/local-ai.d.cts.map +1 -0
  323. package/dist/services/definitions/local-ai.d.mts +7 -0
  324. package/dist/services/definitions/local-ai.d.mts.map +1 -0
  325. package/dist/services/definitions/local-ai.mjs +85 -0
  326. package/dist/services/definitions/local-ai.mjs.map +1 -0
  327. package/dist/services/definitions/metabase.cjs +108 -0
  328. package/dist/services/definitions/metabase.cjs.map +1 -0
  329. package/dist/services/definitions/metabase.d.cts +7 -0
  330. package/dist/services/definitions/metabase.d.cts.map +1 -0
  331. package/dist/services/definitions/metabase.d.mts +7 -0
  332. package/dist/services/definitions/metabase.d.mts.map +1 -0
  333. package/dist/services/definitions/metabase.mjs +107 -0
  334. package/dist/services/definitions/metabase.mjs.map +1 -0
  335. package/dist/services/definitions/mission-control.cjs +16 -2
  336. package/dist/services/definitions/mission-control.cjs.map +1 -1
  337. package/dist/services/definitions/mission-control.mjs +16 -2
  338. package/dist/services/definitions/mission-control.mjs.map +1 -1
  339. package/dist/services/definitions/mosquitto.cjs +82 -0
  340. package/dist/services/definitions/mosquitto.cjs.map +1 -0
  341. package/dist/services/definitions/mosquitto.d.cts +7 -0
  342. package/dist/services/definitions/mosquitto.d.cts.map +1 -0
  343. package/dist/services/definitions/mosquitto.d.mts +7 -0
  344. package/dist/services/definitions/mosquitto.d.mts.map +1 -0
  345. package/dist/services/definitions/mosquitto.mjs +81 -0
  346. package/dist/services/definitions/mosquitto.mjs.map +1 -0
  347. package/dist/services/definitions/navidrome.cjs +90 -0
  348. package/dist/services/definitions/navidrome.cjs.map +1 -0
  349. package/dist/services/definitions/navidrome.d.cts +7 -0
  350. package/dist/services/definitions/navidrome.d.cts.map +1 -0
  351. package/dist/services/definitions/navidrome.d.mts +7 -0
  352. package/dist/services/definitions/navidrome.d.mts.map +1 -0
  353. package/dist/services/definitions/navidrome.mjs +89 -0
  354. package/dist/services/definitions/navidrome.mjs.map +1 -0
  355. package/dist/services/definitions/nginx-proxy-manager.cjs +71 -0
  356. package/dist/services/definitions/nginx-proxy-manager.cjs.map +1 -0
  357. package/dist/services/definitions/nginx-proxy-manager.d.cts +7 -0
  358. package/dist/services/definitions/nginx-proxy-manager.d.cts.map +1 -0
  359. package/dist/services/definitions/nginx-proxy-manager.d.mts +7 -0
  360. package/dist/services/definitions/nginx-proxy-manager.d.mts.map +1 -0
  361. package/dist/services/definitions/nginx-proxy-manager.mjs +70 -0
  362. package/dist/services/definitions/nginx-proxy-manager.mjs.map +1 -0
  363. package/dist/services/definitions/node-red.cjs +77 -0
  364. package/dist/services/definitions/node-red.cjs.map +1 -0
  365. package/dist/services/definitions/node-red.d.cts +7 -0
  366. package/dist/services/definitions/node-red.d.cts.map +1 -0
  367. package/dist/services/definitions/node-red.d.mts +7 -0
  368. package/dist/services/definitions/node-red.d.mts.map +1 -0
  369. package/dist/services/definitions/node-red.mjs +76 -0
  370. package/dist/services/definitions/node-red.mjs.map +1 -0
  371. package/dist/services/definitions/open-saas.cjs +81 -0
  372. package/dist/services/definitions/open-saas.cjs.map +1 -0
  373. package/dist/services/definitions/open-saas.d.cts +7 -0
  374. package/dist/services/definitions/open-saas.d.cts.map +1 -0
  375. package/dist/services/definitions/open-saas.d.mts +7 -0
  376. package/dist/services/definitions/open-saas.d.mts.map +1 -0
  377. package/dist/services/definitions/open-saas.mjs +80 -0
  378. package/dist/services/definitions/open-saas.mjs.map +1 -0
  379. package/dist/services/definitions/photoprism.cjs +126 -0
  380. package/dist/services/definitions/photoprism.cjs.map +1 -0
  381. package/dist/services/definitions/photoprism.d.cts +7 -0
  382. package/dist/services/definitions/photoprism.d.cts.map +1 -0
  383. package/dist/services/definitions/photoprism.d.mts +7 -0
  384. package/dist/services/definitions/photoprism.d.mts.map +1 -0
  385. package/dist/services/definitions/photoprism.mjs +125 -0
  386. package/dist/services/definitions/photoprism.mjs.map +1 -0
  387. package/dist/services/definitions/pihole.cjs +73 -0
  388. package/dist/services/definitions/pihole.cjs.map +1 -0
  389. package/dist/services/definitions/pihole.d.cts +7 -0
  390. package/dist/services/definitions/pihole.d.cts.map +1 -0
  391. package/dist/services/definitions/pihole.d.mts +7 -0
  392. package/dist/services/definitions/pihole.d.mts.map +1 -0
  393. package/dist/services/definitions/pihole.mjs +72 -0
  394. package/dist/services/definitions/pihole.mjs.map +1 -0
  395. package/dist/services/definitions/piper-tts.cjs +70 -0
  396. package/dist/services/definitions/piper-tts.cjs.map +1 -0
  397. package/dist/services/definitions/piper-tts.d.cts +7 -0
  398. package/dist/services/definitions/piper-tts.d.cts.map +1 -0
  399. package/dist/services/definitions/piper-tts.d.mts +7 -0
  400. package/dist/services/definitions/piper-tts.d.mts.map +1 -0
  401. package/dist/services/definitions/piper-tts.mjs +69 -0
  402. package/dist/services/definitions/piper-tts.mjs.map +1 -0
  403. package/dist/services/definitions/plane.cjs +75 -0
  404. package/dist/services/definitions/plane.cjs.map +1 -0
  405. package/dist/services/definitions/plane.d.cts +7 -0
  406. package/dist/services/definitions/plane.d.cts.map +1 -0
  407. package/dist/services/definitions/plane.d.mts +7 -0
  408. package/dist/services/definitions/plane.d.mts.map +1 -0
  409. package/dist/services/definitions/plane.mjs +74 -0
  410. package/dist/services/definitions/plane.mjs.map +1 -0
  411. package/dist/services/definitions/plausible.cjs +94 -0
  412. package/dist/services/definitions/plausible.cjs.map +1 -0
  413. package/dist/services/definitions/plausible.d.cts +7 -0
  414. package/dist/services/definitions/plausible.d.cts.map +1 -0
  415. package/dist/services/definitions/plausible.d.mts +7 -0
  416. package/dist/services/definitions/plausible.d.mts.map +1 -0
  417. package/dist/services/definitions/plausible.mjs +93 -0
  418. package/dist/services/definitions/plausible.mjs.map +1 -0
  419. package/dist/services/definitions/pocket-id.cjs +101 -0
  420. package/dist/services/definitions/pocket-id.cjs.map +1 -0
  421. package/dist/services/definitions/pocket-id.d.cts +7 -0
  422. package/dist/services/definitions/pocket-id.d.cts.map +1 -0
  423. package/dist/services/definitions/pocket-id.d.mts +7 -0
  424. package/dist/services/definitions/pocket-id.d.mts.map +1 -0
  425. package/dist/services/definitions/pocket-id.mjs +100 -0
  426. package/dist/services/definitions/pocket-id.mjs.map +1 -0
  427. package/dist/services/definitions/posthog.cjs +94 -0
  428. package/dist/services/definitions/posthog.cjs.map +1 -0
  429. package/dist/services/definitions/posthog.d.cts +7 -0
  430. package/dist/services/definitions/posthog.d.cts.map +1 -0
  431. package/dist/services/definitions/posthog.d.mts +7 -0
  432. package/dist/services/definitions/posthog.d.mts.map +1 -0
  433. package/dist/services/definitions/posthog.mjs +93 -0
  434. package/dist/services/definitions/posthog.mjs.map +1 -0
  435. package/dist/services/definitions/redis.cjs +1 -1
  436. package/dist/services/definitions/redis.cjs.map +1 -1
  437. package/dist/services/definitions/redis.mjs +1 -1
  438. package/dist/services/definitions/redis.mjs.map +1 -1
  439. package/dist/services/definitions/revolt.cjs +64 -0
  440. package/dist/services/definitions/revolt.cjs.map +1 -0
  441. package/dist/services/definitions/revolt.d.cts +7 -0
  442. package/dist/services/definitions/revolt.d.cts.map +1 -0
  443. package/dist/services/definitions/revolt.d.mts +7 -0
  444. package/dist/services/definitions/revolt.d.mts.map +1 -0
  445. package/dist/services/definitions/revolt.mjs +63 -0
  446. package/dist/services/definitions/revolt.mjs.map +1 -0
  447. package/dist/services/definitions/sentry.cjs +101 -0
  448. package/dist/services/definitions/sentry.cjs.map +1 -0
  449. package/dist/services/definitions/sentry.d.cts +7 -0
  450. package/dist/services/definitions/sentry.d.cts.map +1 -0
  451. package/dist/services/definitions/sentry.d.mts +7 -0
  452. package/dist/services/definitions/sentry.d.mts.map +1 -0
  453. package/dist/services/definitions/sentry.mjs +100 -0
  454. package/dist/services/definitions/sentry.mjs.map +1 -0
  455. package/dist/services/definitions/sonarqube.cjs +86 -0
  456. package/dist/services/definitions/sonarqube.cjs.map +1 -0
  457. package/dist/services/definitions/sonarqube.d.cts +7 -0
  458. package/dist/services/definitions/sonarqube.d.cts.map +1 -0
  459. package/dist/services/definitions/sonarqube.d.mts +7 -0
  460. package/dist/services/definitions/sonarqube.d.mts.map +1 -0
  461. package/dist/services/definitions/sonarqube.mjs +85 -0
  462. package/dist/services/definitions/sonarqube.mjs.map +1 -0
  463. package/dist/services/definitions/superset.cjs +77 -0
  464. package/dist/services/definitions/superset.cjs.map +1 -0
  465. package/dist/services/definitions/superset.d.cts +7 -0
  466. package/dist/services/definitions/superset.d.cts.map +1 -0
  467. package/dist/services/definitions/superset.d.mts +7 -0
  468. package/dist/services/definitions/superset.d.mts.map +1 -0
  469. package/dist/services/definitions/superset.mjs +76 -0
  470. package/dist/services/definitions/superset.mjs.map +1 -0
  471. package/dist/services/definitions/surrealdb.cjs +72 -0
  472. package/dist/services/definitions/surrealdb.cjs.map +1 -0
  473. package/dist/services/definitions/surrealdb.d.cts +7 -0
  474. package/dist/services/definitions/surrealdb.d.cts.map +1 -0
  475. package/dist/services/definitions/surrealdb.d.mts +7 -0
  476. package/dist/services/definitions/surrealdb.d.mts.map +1 -0
  477. package/dist/services/definitions/surrealdb.mjs +71 -0
  478. package/dist/services/definitions/surrealdb.mjs.map +1 -0
  479. package/dist/services/definitions/tabby-ml.cjs +70 -0
  480. package/dist/services/definitions/tabby-ml.cjs.map +1 -0
  481. package/dist/services/definitions/tabby-ml.d.cts +7 -0
  482. package/dist/services/definitions/tabby-ml.d.cts.map +1 -0
  483. package/dist/services/definitions/tabby-ml.d.mts +7 -0
  484. package/dist/services/definitions/tabby-ml.d.mts.map +1 -0
  485. package/dist/services/definitions/tabby-ml.mjs +69 -0
  486. package/dist/services/definitions/tabby-ml.mjs.map +1 -0
  487. package/dist/services/definitions/tempo.cjs +57 -0
  488. package/dist/services/definitions/tempo.cjs.map +1 -0
  489. package/dist/services/definitions/tempo.d.cts +7 -0
  490. package/dist/services/definitions/tempo.d.cts.map +1 -0
  491. package/dist/services/definitions/tempo.d.mts +7 -0
  492. package/dist/services/definitions/tempo.d.mts.map +1 -0
  493. package/dist/services/definitions/tempo.mjs +56 -0
  494. package/dist/services/definitions/tempo.mjs.map +1 -0
  495. package/dist/services/definitions/text-gen-webui.cjs +88 -0
  496. package/dist/services/definitions/text-gen-webui.cjs.map +1 -0
  497. package/dist/services/definitions/text-gen-webui.d.cts +7 -0
  498. package/dist/services/definitions/text-gen-webui.d.cts.map +1 -0
  499. package/dist/services/definitions/text-gen-webui.d.mts +7 -0
  500. package/dist/services/definitions/text-gen-webui.d.mts.map +1 -0
  501. package/dist/services/definitions/text-gen-webui.mjs +87 -0
  502. package/dist/services/definitions/text-gen-webui.mjs.map +1 -0
  503. package/dist/services/definitions/timescaledb.cjs +87 -0
  504. package/dist/services/definitions/timescaledb.cjs.map +1 -0
  505. package/dist/services/definitions/timescaledb.d.cts +7 -0
  506. package/dist/services/definitions/timescaledb.d.cts.map +1 -0
  507. package/dist/services/definitions/timescaledb.d.mts +7 -0
  508. package/dist/services/definitions/timescaledb.d.mts.map +1 -0
  509. package/dist/services/definitions/timescaledb.mjs +86 -0
  510. package/dist/services/definitions/timescaledb.mjs.map +1 -0
  511. package/dist/services/definitions/valkey.cjs +1 -1
  512. package/dist/services/definitions/valkey.cjs.map +1 -1
  513. package/dist/services/definitions/valkey.mjs +1 -1
  514. package/dist/services/definitions/valkey.mjs.map +1 -1
  515. package/dist/services/definitions/vector-log.cjs +59 -0
  516. package/dist/services/definitions/vector-log.cjs.map +1 -0
  517. package/dist/services/definitions/vector-log.d.cts +7 -0
  518. package/dist/services/definitions/vector-log.d.cts.map +1 -0
  519. package/dist/services/definitions/vector-log.d.mts +7 -0
  520. package/dist/services/definitions/vector-log.d.mts.map +1 -0
  521. package/dist/services/definitions/vector-log.mjs +58 -0
  522. package/dist/services/definitions/vector-log.mjs.map +1 -0
  523. package/dist/services/definitions/vikunja.cjs +96 -0
  524. package/dist/services/definitions/vikunja.cjs.map +1 -0
  525. package/dist/services/definitions/vikunja.d.cts +7 -0
  526. package/dist/services/definitions/vikunja.d.cts.map +1 -0
  527. package/dist/services/definitions/vikunja.d.mts +7 -0
  528. package/dist/services/definitions/vikunja.d.mts.map +1 -0
  529. package/dist/services/definitions/vikunja.mjs +95 -0
  530. package/dist/services/definitions/vikunja.mjs.map +1 -0
  531. package/dist/services/definitions/wireguard.cjs +88 -0
  532. package/dist/services/definitions/wireguard.cjs.map +1 -0
  533. package/dist/services/definitions/wireguard.d.cts +7 -0
  534. package/dist/services/definitions/wireguard.d.cts.map +1 -0
  535. package/dist/services/definitions/wireguard.d.mts +7 -0
  536. package/dist/services/definitions/wireguard.d.mts.map +1 -0
  537. package/dist/services/definitions/wireguard.mjs +87 -0
  538. package/dist/services/definitions/wireguard.mjs.map +1 -0
  539. package/dist/services/definitions/woodpecker-ci.cjs +93 -0
  540. package/dist/services/definitions/woodpecker-ci.cjs.map +1 -0
  541. package/dist/services/definitions/woodpecker-ci.d.cts +7 -0
  542. package/dist/services/definitions/woodpecker-ci.d.cts.map +1 -0
  543. package/dist/services/definitions/woodpecker-ci.d.mts +7 -0
  544. package/dist/services/definitions/woodpecker-ci.d.mts.map +1 -0
  545. package/dist/services/definitions/woodpecker-ci.mjs +92 -0
  546. package/dist/services/definitions/woodpecker-ci.mjs.map +1 -0
  547. package/dist/services/definitions/zulip.cjs +116 -0
  548. package/dist/services/definitions/zulip.cjs.map +1 -0
  549. package/dist/services/definitions/zulip.d.cts +7 -0
  550. package/dist/services/definitions/zulip.d.cts.map +1 -0
  551. package/dist/services/definitions/zulip.d.mts +7 -0
  552. package/dist/services/definitions/zulip.d.mts.map +1 -0
  553. package/dist/services/definitions/zulip.mjs +115 -0
  554. package/dist/services/definitions/zulip.mjs.map +1 -0
  555. package/dist/services/registry.cjs +3 -0
  556. package/dist/services/registry.cjs.map +1 -1
  557. package/dist/services/registry.d.cts.map +1 -1
  558. package/dist/services/registry.d.mts.map +1 -1
  559. package/dist/services/registry.mjs +3 -0
  560. package/dist/services/registry.mjs.map +1 -1
  561. package/dist/services/registry.test.cjs +8 -1
  562. package/dist/services/registry.test.cjs.map +1 -1
  563. package/dist/services/registry.test.mjs +8 -1
  564. package/dist/services/registry.test.mjs.map +1 -1
  565. package/dist/{skill-manifest-BVUXU0__.mjs → skill-manifest-6XhrhWsG.mjs} +49 -1
  566. package/dist/{skill-manifest--IgY9REK.cjs.map → skill-manifest-6XhrhWsG.mjs.map} +1 -1
  567. package/dist/{skill-manifest--IgY9REK.cjs → skill-manifest-B8znSsym.cjs} +49 -1
  568. package/dist/{skill-manifest-BVUXU0__.mjs.map → skill-manifest-B8znSsym.cjs.map} +1 -1
  569. package/dist/skills/registry.cjs +3 -3
  570. package/dist/skills/registry.cjs.map +1 -1
  571. package/dist/skills/registry.mjs +3 -3
  572. package/dist/skills/registry.mjs.map +1 -1
  573. package/dist/skills/skill-manifest.cjs +1 -1
  574. package/dist/skills/skill-manifest.mjs +1 -1
  575. package/dist/track-analytics.cjs +50 -0
  576. package/dist/track-analytics.cjs.map +1 -0
  577. package/dist/track-analytics.d.cts +34 -0
  578. package/dist/track-analytics.d.cts.map +1 -0
  579. package/dist/track-analytics.d.mts +34 -0
  580. package/dist/track-analytics.d.mts.map +1 -0
  581. package/dist/track-analytics.mjs +48 -0
  582. package/dist/track-analytics.mjs.map +1 -0
  583. package/dist/track-analytics.test.cjs +91 -0
  584. package/dist/track-analytics.test.cjs.map +1 -0
  585. package/dist/track-analytics.test.d.cts +1 -0
  586. package/dist/track-analytics.test.d.mts +1 -0
  587. package/dist/track-analytics.test.mjs +92 -0
  588. package/dist/track-analytics.test.mjs.map +1 -0
  589. package/dist/types.cjs +35 -0
  590. package/dist/types.cjs.map +1 -1
  591. package/dist/types.d.cts +5 -2
  592. package/dist/types.d.cts.map +1 -1
  593. package/dist/types.d.mts +5 -2
  594. package/dist/types.d.mts.map +1 -1
  595. package/dist/types.mjs +35 -0
  596. package/dist/types.mjs.map +1 -1
  597. package/dist/validator.test.cjs +1 -1
  598. package/dist/validator.test.mjs +1 -1
  599. package/dist/version-manager.cjs +1 -1
  600. package/dist/version-manager.cjs.map +1 -1
  601. package/dist/version-manager.mjs +1 -1
  602. package/dist/version-manager.mjs.map +1 -1
  603. package/dist/version-manager.test.cjs +7 -5
  604. package/dist/version-manager.test.cjs.map +1 -1
  605. package/dist/version-manager.test.mjs +7 -5
  606. package/dist/version-manager.test.mjs.map +1 -1
  607. package/dist/{vi.2VT5v0um-DvC3SVNc.mjs → vi.2VT5v0um-C_jmO7m2.mjs} +5 -5
  608. package/dist/{vi.2VT5v0um-DvC3SVNc.mjs.map → vi.2VT5v0um-C_jmO7m2.mjs.map} +1 -1
  609. package/dist/{vi.2VT5v0um-CRqXre87.cjs → vi.2VT5v0um-iVBt6Fyq.cjs} +5 -5
  610. package/dist/{vi.2VT5v0um-CRqXre87.cjs.map → vi.2VT5v0um-iVBt6Fyq.cjs.map} +1 -1
  611. package/package.json +1 -1
  612. package/src/__snapshots__/composer.snapshot.test.ts.snap +285 -65
  613. package/src/bare-metal-partition.test.ts +4 -3
  614. package/src/composer.test.ts +4 -2
  615. package/src/composer.ts +45 -16
  616. package/src/generate.test.ts +2 -1
  617. package/src/generate.ts +11 -1
  618. package/src/generators/clone-repos.test.ts +154 -0
  619. package/src/generators/clone-repos.ts +159 -0
  620. package/src/generators/env.ts +214 -0
  621. package/src/generators/openclaw-json.ts +156 -1
  622. package/src/generators/postgres-init.ts +17 -0
  623. package/src/generators/readme.ts +2 -1
  624. package/src/generators/scripts.test.ts +52 -4
  625. package/src/generators/scripts.ts +351 -3
  626. package/src/generators/stack-manifest.ts +4 -2
  627. package/src/index.ts +8 -0
  628. package/src/presets/registry.ts +20 -0
  629. package/src/resolver.test.ts +53 -15
  630. package/src/resolver.ts +13 -1
  631. package/src/schema.ts +37 -4
  632. package/src/services/definitions/adguard-home.ts +79 -0
  633. package/src/services/definitions/apptension-saas.ts +84 -0
  634. package/src/services/definitions/audiobookshelf.ts +83 -0
  635. package/src/services/definitions/baserow.ts +118 -0
  636. package/src/services/definitions/boxyhq-saas.ts +84 -0
  637. package/src/services/definitions/calibre-web.ts +95 -0
  638. package/src/services/definitions/clickhouse.ts +115 -0
  639. package/src/services/definitions/cloudflared.ts +55 -0
  640. package/src/services/definitions/cmsaas-starter.ts +84 -0
  641. package/src/services/definitions/cockroachdb.ts +75 -0
  642. package/src/services/definitions/coder.ts +68 -0
  643. package/src/services/definitions/dragonfly.ts +68 -0
  644. package/src/services/definitions/drone-ci.ts +96 -0
  645. package/src/services/definitions/element-web.ts +62 -0
  646. package/src/services/definitions/focalboard.ts +69 -0
  647. package/src/services/definitions/forgejo.ts +109 -0
  648. package/src/services/definitions/graylog.ts +101 -0
  649. package/src/services/definitions/index.ts +159 -0
  650. package/src/services/definitions/influxdb.ts +109 -0
  651. package/src/services/definitions/invoke-ai.ts +76 -0
  652. package/src/services/definitions/ixartz-saas.ts +84 -0
  653. package/src/services/definitions/jaeger.ts +94 -0
  654. package/src/services/definitions/jan.ts +68 -0
  655. package/src/services/definitions/jitsi-meet.ts +108 -0
  656. package/src/services/definitions/local-ai.ts +90 -0
  657. package/src/services/definitions/metabase.ts +111 -0
  658. package/src/services/definitions/mission-control.ts +19 -2
  659. package/src/services/definitions/mosquitto.ts +84 -0
  660. package/src/services/definitions/navidrome.ts +95 -0
  661. package/src/services/definitions/nginx-proxy-manager.ts +70 -0
  662. package/src/services/definitions/node-red.ts +83 -0
  663. package/src/services/definitions/open-saas.ts +79 -0
  664. package/src/services/definitions/photoprism.ts +130 -0
  665. package/src/services/definitions/pihole.ts +79 -0
  666. package/src/services/definitions/piper-tts.ts +76 -0
  667. package/src/services/definitions/plane.ts +75 -0
  668. package/src/services/definitions/plausible.ts +97 -0
  669. package/src/services/definitions/pocket-id.ts +98 -0
  670. package/src/services/definitions/posthog.ts +97 -0
  671. package/src/services/definitions/redis.ts +1 -1
  672. package/src/services/definitions/revolt.ts +68 -0
  673. package/src/services/definitions/sentry.ts +104 -0
  674. package/src/services/definitions/sonarqube.ts +85 -0
  675. package/src/services/definitions/superset.ts +84 -0
  676. package/src/services/definitions/surrealdb.ts +77 -0
  677. package/src/services/definitions/tabby-ml.ts +76 -0
  678. package/src/services/definitions/tempo.ts +59 -0
  679. package/src/services/definitions/text-gen-webui.ts +92 -0
  680. package/src/services/definitions/timescaledb.ts +90 -0
  681. package/src/services/definitions/valkey.ts +1 -1
  682. package/src/services/definitions/vector-log.ts +61 -0
  683. package/src/services/definitions/vikunja.ts +96 -0
  684. package/src/services/definitions/wireguard.ts +89 -0
  685. package/src/services/definitions/woodpecker-ci.ts +97 -0
  686. package/src/services/definitions/zulip.ts +117 -0
  687. package/src/services/registry.test.ts +8 -0
  688. package/src/services/registry.ts +7 -0
  689. package/src/skills/manifest.json +64 -0
  690. package/src/skills/registry.ts +3 -3
  691. package/src/track-analytics.test.ts +82 -0
  692. package/src/track-analytics.ts +76 -0
  693. package/src/types.ts +40 -0
  694. package/src/version-manager.test.ts +10 -5
  695. package/src/version-manager.ts +1 -1
  696. package/dist/schema-C_hc7e4k.d.cts.map +0 -1
  697. package/dist/schema-CaesJaS2.d.mts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.mjs","names":[],"sources":["../../src/generators/scripts.ts"],"sourcesContent":["/**\n * Generates helper shell scripts for managing the OpenClaw Docker Compose stack.\n *\n * Returns a map of file paths (relative to project root) to file contents.\n */\nexport function generateScripts(): Record<string, string> {\n\tconst files: Record<string, string> = {};\n\n\t// ── scripts/start.sh ────────────────────────────────────────────────────\n\n\tfiles[\"scripts/start.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Start Script ──────────────────────────────────────────────────\n# Production-quality bootstrap: validates prerequisites, auto-generates secrets,\n# creates required directories, and starts all services via Docker Compose.\n# Modelled after the official docker-setup.sh patterns.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Starting services...\"\necho \"\"\n\n# ── Colour helpers (no-op when not a TTY) ────────────────────────────────────\nif [ -t 1 ]; then\n RED='\\\\033[0;31m'; GREEN='\\\\033[0;32m'; YELLOW='\\\\033[1;33m'; CYAN='\\\\033[0;36m'; NC='\\\\033[0m'\nelse\n RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''\nfi\n\ninfo() { echo -e \"\\${CYAN}ℹ $*\\${NC}\"; }\nok() { echo -e \"\\${GREEN}✅ $*\\${NC}\"; }\nwarn() { echo -e \"\\${YELLOW}⚠️ $*\\${NC}\"; }\nerr() { echo -e \"\\${RED}❌ $*\\${NC}\" >&2; }\n\n# ── Prerequisite checks ─────────────────────────────────────────────────────\n\nif ! command -v docker &> /dev/null; then\n err \"Docker is not installed. Please install Docker first.\"\n echo \" https://docs.docker.com/get-docker/\"\n exit 1\nfi\n\nif ! docker compose version &> /dev/null; then\n err \"Docker Compose (v2) is not available.\"\n echo \" https://docs.docker.com/compose/install/\"\n exit 1\nfi\n\nif ! docker info &> /dev/null 2>&1; then\n err \"Docker daemon is not running. Please start Docker.\"\n exit 1\nfi\n\n# ── Source .env if it exists ─────────────────────────────────────────────────\n\nif [ -f \".env\" ]; then\n info \"Loading existing .env file...\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\nelse\n warn \".env file not found — will create one from .env.example if available.\"\n if [ -f \".env.example\" ]; then\n cp .env.example .env\n info \"Created .env from .env.example\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\n fi\nfi\n\n# ── Auto-generate OPENCLAW_GATEWAY_TOKEN if missing ──────────────────────────\n\nif [ -z \"\\${OPENCLAW_GATEWAY_TOKEN:-}\" ]; then\n info \"Generating OPENCLAW_GATEWAY_TOKEN...\"\n if command -v openssl &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(openssl rand -hex 32)\"\n elif command -v python3 &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python3 -c 'import secrets; print(secrets.token_hex(32))')\"\n elif command -v python &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python -c 'import secrets; print(secrets.token_hex(32))')\"\n else\n err \"Cannot generate token: neither openssl nor python3 found.\"\n exit 1\n fi\n export OPENCLAW_GATEWAY_TOKEN\n\n # Persist into .env\n if [ -f \".env\" ]; then\n if grep -q \"^OPENCLAW_GATEWAY_TOKEN=\" .env 2>/dev/null; then\n sed -i.bak \"s|^OPENCLAW_GATEWAY_TOKEN=.*|OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}|\" .env && rm -f .env.bak\n else\n echo \"OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}\" >> .env\n fi\n fi\n ok \"Gateway token generated and saved.\"\nfi\n\n# ── Apply defaults for optional variables ────────────────────────────────────\n\nexport OPENCLAW_VERSION=\"\\${OPENCLAW_VERSION:-latest}\"\nexport OPENCLAW_GATEWAY_PORT=\"\\${OPENCLAW_GATEWAY_PORT:-18789}\"\nexport OPENCLAW_BRIDGE_PORT=\"\\${OPENCLAW_BRIDGE_PORT:-18790}\"\nexport OPENCLAW_GATEWAY_BIND=\"\\${OPENCLAW_GATEWAY_BIND:-lan}\"\nexport OPENCLAW_CONFIG_DIR=\"\\${OPENCLAW_CONFIG_DIR:-./openclaw/config}\"\nexport OPENCLAW_WORKSPACE_DIR=\"\\${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}\"\n\n# ── Create required host directories ────────────────────────────────────────\n\ninfo \"Ensuring host directories exist...\"\nmkdir -p \"\\${OPENCLAW_CONFIG_DIR}\"\nmkdir -p \"\\${OPENCLAW_WORKSPACE_DIR}\"\nok \"Directories ready: \\${OPENCLAW_CONFIG_DIR}, \\${OPENCLAW_WORKSPACE_DIR}\"\n\n# ── Check for empty secret values ────────────────────────────────────────────\n\nEMPTY_SECRETS=0\nwhile IFS='=' read -r key value; do\n [[ \"$key\" =~ ^#.*$ ]] && continue\n [[ -z \"$key\" ]] && continue\n if [[ \"$key\" =~ (PASSWORD|TOKEN|SECRET|SESSION_KEY|COOKIE) ]] && [[ -z \"\\${value:-}\" ]]; then\n warn \"Warning: $key is empty in .env\"\n EMPTY_SECRETS=$((EMPTY_SECRETS + 1))\n fi\ndone < .env 2>/dev/null || true\n\nif [ \"$EMPTY_SECRETS\" -gt 0 ]; then\n echo \"\"\n warn \"$EMPTY_SECRETS secret(s) are empty. Some services may not function until they are set.\"\n echo \"\"\nfi\n\n# ── Pull and start ───────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Pulling latest images...\"\ndocker compose pull --quiet 2>/dev/null || docker compose pull\n\necho \"\"\ninfo \"Starting services...\"\ndocker compose up -d --remove-orphans\n\n# ── Health-check loop ────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Waiting for services to become healthy...\"\nsleep 5\n\nRETRIES=0\nMAX_RETRIES=30\nwhile [ $RETRIES -lt $MAX_RETRIES ]; do\n UNHEALTHY=$(docker compose ps --format json 2>/dev/null | grep -c '\"unhealthy\"' || true)\n STARTING=$(docker compose ps --format json 2>/dev/null | grep -c '\"starting\"' || true)\n\n if [ \"$UNHEALTHY\" -eq 0 ] && [ \"$STARTING\" -eq 0 ]; then\n break\n fi\n\n RETRIES=$((RETRIES + 1))\n sleep 2\ndone\n\necho \"\"\ndocker compose ps\necho \"\"\n\nif [ $RETRIES -ge $MAX_RETRIES ]; then\n warn \"Some services may still be starting. Check: docker compose ps\"\nelse\n ok \"All services are running!\"\nfi\n\n# ── Print service URLs & token ───────────────────────────────────────────────\n\nGATEWAY_HOST=\"localhost\"\nif [ \"\\${OPENCLAW_GATEWAY_BIND}\" = \"lan\" ]; then\n GATEWAY_HOST=\"0.0.0.0\"\nfi\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \" 🐾 OpenClaw is ready!\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \"\"\necho \" Gateway URL: http://\\${GATEWAY_HOST}:\\${OPENCLAW_GATEWAY_PORT}\"\necho \" Bridge (WebSocket): ws://\\${GATEWAY_HOST}:\\${OPENCLAW_BRIDGE_PORT}\"\necho \" Config directory: \\${OPENCLAW_CONFIG_DIR}\"\necho \" Workspace directory:\\${OPENCLAW_WORKSPACE_DIR}\"\necho \"\"\necho \" Gateway Token: \\${OPENCLAW_GATEWAY_TOKEN}\"\necho \"\"\necho \" Manage:\"\necho \" Stop: ./scripts/stop.sh\"\necho \" Status: ./scripts/status.sh\"\necho \" Update: ./scripts/update.sh\"\necho \" Logs: docker compose logs -f\"\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\n`;\n\n\t// ── scripts/stop.sh ─────────────────────────────────────────────────────\n\n\tfiles[\"scripts/stop.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Stop Script ───────────────────────────────────────────────────\n# Gracefully stops all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Stopping services...\"\necho \"\"\n\n# Graceful shutdown with timeout\ndocker compose down --timeout 30\n\necho \"\"\necho \"✅ All services stopped.\"\n`;\n\n\t// ── scripts/update.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/update.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Update Script ─────────────────────────────────────────────────\n# Pulls latest images and restarts services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Updating services...\"\necho \"\"\n\n# Pull latest images\necho \"📦 Pulling latest images...\"\ndocker compose pull\n\necho \"\"\necho \"🔄 Restarting services with new images...\"\ndocker compose up -d --remove-orphans\n\necho \"\"\necho \"⏳ Waiting for services to stabilize...\"\nsleep 10\n\ndocker compose ps\n\necho \"\"\necho \"✅ Update complete!\"\n`;\n\n\t// ── scripts/backup.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/backup.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Backup Script ─────────────────────────────────────────────────\n# Backs up all named Docker volumes to a timestamped directory.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\nBACKUP_DIR=\"$PROJECT_DIR/backups/$TIMESTAMP\"\nmkdir -p \"$BACKUP_DIR\"\n\necho \"🐾 OpenClaw — Backing up volumes...\"\necho \" Backup directory: $BACKUP_DIR\"\necho \"\"\n\n# Get project name from docker compose\nPROJECT_NAME=$(docker compose config --format json 2>/dev/null | grep -o '\"name\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4 || echo \"openclaw\")\n\n# List all volumes for this project\nVOLUMES=$(docker volume ls --filter \"name=\\${PROJECT_NAME}\" --format \"{{.Name}}\" 2>/dev/null || true)\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"⚠️ No volumes found for project: $PROJECT_NAME\"\n echo \" Trying to list all openclaw volumes...\"\n VOLUMES=$(docker volume ls --filter \"name=openclaw\" --format \"{{.Name}}\" 2>/dev/null || true)\nfi\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"❌ No volumes found to back up.\"\n exit 1\nfi\n\nBACKED_UP=0\nfor VOLUME in $VOLUMES; do\n echo \"📦 Backing up: $VOLUME\"\n docker run --rm \\\\\n -v \"\\${VOLUME}:/source:ro\" \\\\\n -v \"$BACKUP_DIR:/backup\" \\\\\n alpine tar czf \"/backup/\\${VOLUME}.tar.gz\" -C /source .\n\n SIZE=$(du -sh \"$BACKUP_DIR/\\${VOLUME}.tar.gz\" | cut -f1)\n echo \" ✓ $VOLUME ($SIZE)\"\n BACKED_UP=$((BACKED_UP + 1))\ndone\n\nTOTAL_SIZE=$(du -sh \"$BACKUP_DIR\" | cut -f1)\necho \"\"\necho \"✅ Backed up $BACKED_UP volume(s) ($TOTAL_SIZE total)\"\necho \" Location: $BACKUP_DIR\"\n`;\n\n\t// ── scripts/status.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/status.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Status Script ─────────────────────────────────────────────────\n# Shows the current status of all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Service Status\"\necho \"\"\n\n# Show compose status\ndocker compose ps\n\necho \"\"\necho \"── Resource Usage ──────────────────────────────────────────────────────\"\necho \"\"\n\n# Show resource usage\ndocker compose top 2>/dev/null || true\n\necho \"\"\necho \"── Disk Usage ─────────────────────────────────────────────────────────\"\necho \"\"\n\n# Show volume sizes\ndocker system df -v 2>/dev/null | head -30 || docker system df 2>/dev/null || true\n\necho \"\"\necho \"── Network ────────────────────────────────────────────────────────────\"\necho \"\"\n\ndocker network ls --filter \"name=openclaw\" --format \"table {{.Name}}\\\\t{{.Driver}}\\\\t{{.Scope}}\" 2>/dev/null || true\n`;\n\n\treturn files;\n}\n"],"mappings":";;;;;;AAKA,SAAgB,kBAA0C;CACzD,MAAM,QAAgC,EAAE;AAIxC,OAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsM5B,OAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;AAuB3B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkC7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyD7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsC7B,QAAO"}
1
+ {"version":3,"file":"scripts.mjs","names":[],"sources":["../../src/generators/scripts.ts"],"sourcesContent":["/**\n * Generates helper shell scripts for managing the OpenClaw Docker Compose stack.\n *\n * Returns a map of file paths (relative to project root) to file contents.\n */\nexport function generateScripts(options?: { hasGitServices?: boolean }): Record<string, string> {\n\tconst hasGit = options?.hasGitServices ?? false;\n\tconst files: Record<string, string> = {};\n\n\t// ── scripts/start.sh ────────────────────────────────────────────────────\n\n\tfiles[\"scripts/start.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Start Script ──────────────────────────────────────────────────\n# Production-quality bootstrap: validates prerequisites, auto-generates secrets,\n# creates required directories, and starts all services via Docker Compose.\n# Modelled after the official docker-setup.sh patterns.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Starting services...\"\necho \"\"\n\n# ── Colour helpers (no-op when not a TTY) ────────────────────────────────────\nif [ -t 1 ]; then\n RED='\\\\033[0;31m'; GREEN='\\\\033[0;32m'; YELLOW='\\\\033[1;33m'; CYAN='\\\\033[0;36m'; NC='\\\\033[0m'\nelse\n RED=''; GREEN=''; YELLOW=''; CYAN=''; NC=''\nfi\n\ninfo() { echo -e \"\\${CYAN}ℹ $*\\${NC}\"; }\nok() { echo -e \"\\${GREEN}✅ $*\\${NC}\"; }\nwarn() { echo -e \"\\${YELLOW}⚠️ $*\\${NC}\"; }\nerr() { echo -e \"\\${RED}❌ $*\\${NC}\" >&2; }\n\n# ── Prerequisite checks ─────────────────────────────────────────────────────\n\nif ! command -v docker &> /dev/null; then\n err \"Docker is not installed. Please install Docker first.\"\n echo \" https://docs.docker.com/get-docker/\"\n exit 1\nfi\n\nif ! docker compose version &> /dev/null; then\n err \"Docker Compose (v2) is not available.\"\n echo \" https://docs.docker.com/compose/install/\"\n exit 1\nfi\n\nif ! docker info &> /dev/null 2>&1; then\n err \"Docker daemon is not running. Please start Docker.\"\n exit 1\nfi\n\n# ── Source .env if it exists ─────────────────────────────────────────────────\n\nif [ -f \".env\" ]; then\n info \"Loading existing .env file...\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\nelse\n warn \".env file not found — will create one from .env.example if available.\"\n if [ -f \".env.example\" ]; then\n cp .env.example .env\n info \"Created .env from .env.example\"\n set -a\n # shellcheck disable=SC1091\n source .env\n set +a\n fi\nfi\n\n# ── Auto-generate OPENCLAW_GATEWAY_TOKEN if missing ──────────────────────────\n\nif [ -z \"\\${OPENCLAW_GATEWAY_TOKEN:-}\" ]; then\n info \"Generating OPENCLAW_GATEWAY_TOKEN...\"\n if command -v openssl &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(openssl rand -hex 32)\"\n elif command -v python3 &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python3 -c 'import secrets; print(secrets.token_hex(32))')\"\n elif command -v python &> /dev/null; then\n OPENCLAW_GATEWAY_TOKEN=\"$(python -c 'import secrets; print(secrets.token_hex(32))')\"\n else\n err \"Cannot generate token: neither openssl nor python3 found.\"\n exit 1\n fi\n export OPENCLAW_GATEWAY_TOKEN\n\n # Persist into .env\n if [ -f \".env\" ]; then\n if grep -q \"^OPENCLAW_GATEWAY_TOKEN=\" .env 2>/dev/null; then\n sed -i.bak \"s|^OPENCLAW_GATEWAY_TOKEN=.*|OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}|\" .env && rm -f .env.bak\n else\n echo \"OPENCLAW_GATEWAY_TOKEN=\\${OPENCLAW_GATEWAY_TOKEN}\" >> .env\n fi\n fi\n ok \"Gateway token generated and saved.\"\nfi\n\n# ── Apply defaults for optional variables ────────────────────────────────────\n\nexport OPENCLAW_VERSION=\"\\${OPENCLAW_VERSION:-latest}\"\nexport OPENCLAW_GATEWAY_PORT=\"\\${OPENCLAW_GATEWAY_PORT:-18789}\"\nexport OPENCLAW_BRIDGE_PORT=\"\\${OPENCLAW_BRIDGE_PORT:-18790}\"\nexport OPENCLAW_GATEWAY_BIND=\"\\${OPENCLAW_GATEWAY_BIND:-lan}\"\nexport OPENCLAW_CONFIG_DIR=\"\\${OPENCLAW_CONFIG_DIR:-./openclaw/config}\"\nexport OPENCLAW_WORKSPACE_DIR=\"\\${OPENCLAW_WORKSPACE_DIR:-./openclaw/workspace}\"\n\n# ── Create required host directories ────────────────────────────────────────\n\ninfo \"Ensuring host directories exist...\"\nmkdir -p \"\\${OPENCLAW_CONFIG_DIR}\"\nmkdir -p \"\\${OPENCLAW_WORKSPACE_DIR}\"\nok \"Directories ready: \\${OPENCLAW_CONFIG_DIR}, \\${OPENCLAW_WORKSPACE_DIR}\"\n\n# ── Check for empty secret values ────────────────────────────────────────────\n\nEMPTY_SECRETS=0\nwhile IFS='=' read -r key value; do\n [[ \"$key\" =~ ^#.*$ ]] && continue\n [[ -z \"$key\" ]] && continue\n if [[ \"$key\" =~ (PASSWORD|TOKEN|SECRET|SESSION_KEY|COOKIE) ]] && [[ -z \"\\${value:-}\" ]]; then\n warn \"Warning: $key is empty in .env\"\n EMPTY_SECRETS=$((EMPTY_SECRETS + 1))\n fi\ndone < .env 2>/dev/null || true\n\nif [ \"$EMPTY_SECRETS\" -gt 0 ]; then\n echo \"\"\n warn \"$EMPTY_SECRETS secret(s) are empty. Some services may not function until they are set.\"\n echo \"\"\nfi\n\n# ── Clone git-based repositories (if any) ────────────────────────────────────\n\nif [ -f \"$SCRIPT_DIR/clone-repos.sh\" ]; then\n info \"Cloning/updating SaaS boilerplate repositories...\"\n bash \"$SCRIPT_DIR/clone-repos.sh\"\n ok \"Repositories ready.\"\nfi\n\n# ── Pull and start ───────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Pulling latest images...\"\ndocker compose pull --quiet 2>/dev/null || docker compose pull\n\necho \"\"\ninfo \"Starting services...\"\ndocker compose up -d --remove-orphans${hasGit ? \" --build\" : \"\"}\n\n# ── Health-check loop ────────────────────────────────────────────────────────\n\necho \"\"\ninfo \"Waiting for services to become healthy...\"\nsleep 5\n\nRETRIES=0\nMAX_RETRIES=30\nwhile [ $RETRIES -lt $MAX_RETRIES ]; do\n UNHEALTHY=$(docker compose ps --format json 2>/dev/null | grep -c '\"unhealthy\"' || true)\n STARTING=$(docker compose ps --format json 2>/dev/null | grep -c '\"starting\"' || true)\n\n if [ \"$UNHEALTHY\" -eq 0 ] && [ \"$STARTING\" -eq 0 ]; then\n break\n fi\n\n RETRIES=$((RETRIES + 1))\n sleep 2\ndone\n\necho \"\"\ndocker compose ps\necho \"\"\n\nif [ $RETRIES -ge $MAX_RETRIES ]; then\n warn \"Some services may still be starting. Check: docker compose ps\"\nelse\n ok \"All services are running!\"\nfi\n\n# ── Print service URLs & token ───────────────────────────────────────────────\n\nGATEWAY_HOST=\"localhost\"\nif [ \"\\${OPENCLAW_GATEWAY_BIND}\" = \"lan\" ]; then\n GATEWAY_HOST=\"0.0.0.0\"\nfi\n\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \" 🐾 OpenClaw is ready!\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\necho \"\"\necho \" Gateway URL: http://\\${GATEWAY_HOST}:\\${OPENCLAW_GATEWAY_PORT}\"\necho \" Bridge (WebSocket): ws://\\${GATEWAY_HOST}:\\${OPENCLAW_BRIDGE_PORT}\"\necho \" Config directory: \\${OPENCLAW_CONFIG_DIR}\"\necho \" Workspace directory:\\${OPENCLAW_WORKSPACE_DIR}\"\necho \"\"\necho \" Gateway Token: \\${OPENCLAW_GATEWAY_TOKEN}\"\necho \"\"\necho \" Manage:\"\necho \" Stop: ./scripts/stop.sh\"\necho \" Status: ./scripts/status.sh\"\necho \" Update: ./scripts/update.sh\"\necho \" Logs: docker compose logs -f\"\necho \"\"\necho \"═══════════════════════════════════════════════════════════════════════════════\"\n`;\n\n\t// ── scripts/stop.sh ─────────────────────────────────────────────────────\n\n\tfiles[\"scripts/stop.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Stop Script ───────────────────────────────────────────────────\n# Gracefully stops all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Stopping services...\"\necho \"\"\n\n# Graceful shutdown with timeout\ndocker compose down --timeout 30\n\necho \"\"\necho \"✅ All services stopped.\"\n`;\n\n\t// ── scripts/update.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/update.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Update Script ─────────────────────────────────────────────────\n# Pulls latest images and restarts services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Updating services...\"\necho \"\"\n\n# Update git-based repositories (if any)\nif [ -f \"$SCRIPT_DIR/clone-repos.sh\" ]; then\n echo \"📂 Updating SaaS boilerplate repositories...\"\n bash \"$SCRIPT_DIR/clone-repos.sh\"\nfi\n\n# Pull latest images\necho \"📦 Pulling latest images...\"\ndocker compose pull\n\necho \"\"\necho \"🔄 Restarting services with new images...\"\ndocker compose up -d --remove-orphans${hasGit ? \" --build\" : \"\"}\n\necho \"\"\necho \"⏳ Waiting for services to stabilize...\"\nsleep 10\n\ndocker compose ps\n\necho \"\"\necho \"✅ Update complete!\"\n`;\n\n\t// ── scripts/backup.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/backup.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Backup Script ─────────────────────────────────────────────────\n# Backs up all named Docker volumes to a timestamped directory.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\nTIMESTAMP=$(date +%Y%m%d_%H%M%S)\nBACKUP_DIR=\"$PROJECT_DIR/backups/$TIMESTAMP\"\nmkdir -p \"$BACKUP_DIR\"\n\necho \"🐾 OpenClaw — Backing up volumes...\"\necho \" Backup directory: $BACKUP_DIR\"\necho \"\"\n\n# Get project name from docker compose\nPROJECT_NAME=$(docker compose config --format json 2>/dev/null | grep -o '\"name\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4 || echo \"openclaw\")\n\n# List all volumes for this project\nVOLUMES=$(docker volume ls --filter \"name=\\${PROJECT_NAME}\" --format \"{{.Name}}\" 2>/dev/null || true)\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"⚠️ No volumes found for project: $PROJECT_NAME\"\n echo \" Trying to list all openclaw volumes...\"\n VOLUMES=$(docker volume ls --filter \"name=openclaw\" --format \"{{.Name}}\" 2>/dev/null || true)\nfi\n\nif [ -z \"$VOLUMES\" ]; then\n echo \"❌ No volumes found to back up.\"\n exit 1\nfi\n\nBACKED_UP=0\nfor VOLUME in $VOLUMES; do\n echo \"📦 Backing up: $VOLUME\"\n docker run --rm \\\\\n -v \"\\${VOLUME}:/source:ro\" \\\\\n -v \"$BACKUP_DIR:/backup\" \\\\\n alpine tar czf \"/backup/\\${VOLUME}.tar.gz\" -C /source .\n\n SIZE=$(du -sh \"$BACKUP_DIR/\\${VOLUME}.tar.gz\" | cut -f1)\n echo \" ✓ $VOLUME ($SIZE)\"\n BACKED_UP=$((BACKED_UP + 1))\ndone\n\nTOTAL_SIZE=$(du -sh \"$BACKUP_DIR\" | cut -f1)\necho \"\"\necho \"✅ Backed up $BACKED_UP volume(s) ($TOTAL_SIZE total)\"\necho \" Location: $BACKUP_DIR\"\n`;\n\n\t// ── scripts/status.sh ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/status.sh\"] = `#!/usr/bin/env bash\nset -euo pipefail\n\n# ─── OpenClaw Status Script ─────────────────────────────────────────────────\n# Shows the current status of all services.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"\\${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\ncd \"$PROJECT_DIR\"\n\necho \"🐾 OpenClaw — Service Status\"\necho \"\"\n\n# Show compose status\ndocker compose ps\n\necho \"\"\necho \"── Resource Usage ──────────────────────────────────────────────────────\"\necho \"\"\n\n# Show resource usage\ndocker compose top 2>/dev/null || true\n\necho \"\"\necho \"── Disk Usage ─────────────────────────────────────────────────────────\"\necho \"\"\n\n# Show volume sizes\ndocker system df -v 2>/dev/null | head -30 || docker system df 2>/dev/null || true\n\necho \"\"\necho \"── Network ────────────────────────────────────────────────────────────\"\necho \"\"\n\ndocker network ls --filter \"name=openclaw\" --format \"table {{.Name}}\\\\t{{.Driver}}\\\\t{{.Scope}}\" 2>/dev/null || true\n`;\n\n\t// ═══════════════════════════════════════════════════════════════════════\n\t// PowerShell equivalents\n\t// ═══════════════════════════════════════════════════════════════════════\n\n\t// ── scripts/start.ps1 ───────────────────────────────────────────────────\n\n\tfiles[\"scripts/start.ps1\"] = `#Requires -Version 5.1\n<#\n.SYNOPSIS\n OpenClaw Start Script — validates prerequisites, auto-generates secrets,\n creates required directories, and starts all services via Docker Compose.\n#>\n\n$ErrorActionPreference = 'Stop'\n$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path\n$ProjectDir = Split-Path -Parent $ScriptDir\nSet-Location $ProjectDir\n\nfunction Info { param($Msg) Write-Host \" i $Msg\" -ForegroundColor Cyan }\nfunction Ok { param($Msg) Write-Host \" + $Msg\" -ForegroundColor Green }\nfunction Warn { param($Msg) Write-Host \" ! $Msg\" -ForegroundColor Yellow }\nfunction Err { param($Msg) Write-Host \" x $Msg\" -ForegroundColor Red }\n\nWrite-Host \"\"\nWrite-Host \"OpenClaw - Starting services...\" -ForegroundColor White\nWrite-Host \"\"\n\n# ── Prerequisite checks ─────────────────────────────────────────────────\nif (-not (Get-Command docker -ErrorAction SilentlyContinue)) {\n Err \"Docker is not installed. Please install Docker Desktop.\"\n Write-Host \" https://docs.docker.com/desktop/install/windows-install/\"\n exit 1\n}\n\n$composeCheck = docker compose version 2>&1\nif ($LASTEXITCODE -ne 0) {\n Err \"Docker Compose (v2) is not available.\"\n Write-Host \" https://docs.docker.com/compose/install/\"\n exit 1\n}\n\n$dockerInfo = docker info 2>&1\nif ($LASTEXITCODE -ne 0) {\n Err \"Docker daemon is not running. Please start Docker Desktop.\"\n exit 1\n}\n\n# ── Source .env if it exists ─────────────────────────────────────────────\nif (Test-Path \".env\") {\n Info \"Loading existing .env file...\"\n Get-Content \".env\" | ForEach-Object {\n if ($_ -match '^([^#=]+)=(.*)$') {\n [Environment]::SetEnvironmentVariable($Matches[1].Trim(), $Matches[2].Trim(), 'Process')\n }\n }\n} else {\n Warn \".env file not found - will create one from .env.example if available.\"\n if (Test-Path \".env.example\") {\n Copy-Item \".env.example\" \".env\"\n Info \"Created .env from .env.example\"\n Get-Content \".env\" | ForEach-Object {\n if ($_ -match '^([^#=]+)=(.*)$') {\n [Environment]::SetEnvironmentVariable($Matches[1].Trim(), $Matches[2].Trim(), 'Process')\n }\n }\n }\n}\n\n# ── Auto-generate OPENCLAW_GATEWAY_TOKEN if missing ──────────────────────\nif (-not $env:OPENCLAW_GATEWAY_TOKEN) {\n Info \"Generating OPENCLAW_GATEWAY_TOKEN...\"\n $bytes = New-Object byte[] 32\n [System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($bytes)\n $env:OPENCLAW_GATEWAY_TOKEN = ($bytes | ForEach-Object { $_.ToString(\"x2\") }) -join ''\n\n if (Test-Path \".env\") {\n $envContent = Get-Content \".env\" -Raw\n if ($envContent -match '(?m)^OPENCLAW_GATEWAY_TOKEN=') {\n $envContent = $envContent -replace '(?m)^OPENCLAW_GATEWAY_TOKEN=.*', \"OPENCLAW_GATEWAY_TOKEN=$($env:OPENCLAW_GATEWAY_TOKEN)\"\n Set-Content \".env\" $envContent -NoNewline\n } else {\n Add-Content \".env\" \"OPENCLAW_GATEWAY_TOKEN=$($env:OPENCLAW_GATEWAY_TOKEN)\"\n }\n }\n Ok \"Gateway token generated and saved.\"\n}\n\n# ── Apply defaults ───────────────────────────────────────────────────────\nif (-not $env:OPENCLAW_VERSION) { $env:OPENCLAW_VERSION = \"latest\" }\nif (-not $env:OPENCLAW_GATEWAY_PORT) { $env:OPENCLAW_GATEWAY_PORT = \"18789\" }\nif (-not $env:OPENCLAW_BRIDGE_PORT) { $env:OPENCLAW_BRIDGE_PORT = \"18790\" }\nif (-not $env:OPENCLAW_GATEWAY_BIND) { $env:OPENCLAW_GATEWAY_BIND = \"lan\" }\nif (-not $env:OPENCLAW_CONFIG_DIR) { $env:OPENCLAW_CONFIG_DIR = \"./openclaw/config\" }\nif (-not $env:OPENCLAW_WORKSPACE_DIR) { $env:OPENCLAW_WORKSPACE_DIR = \"./openclaw/workspace\" }\n\n# ── Create required host directories ────────────────────────────────────\nInfo \"Ensuring host directories exist...\"\nNew-Item -ItemType Directory -Force -Path $env:OPENCLAW_CONFIG_DIR | Out-Null\nNew-Item -ItemType Directory -Force -Path $env:OPENCLAW_WORKSPACE_DIR | Out-Null\nOk \"Directories ready: $($env:OPENCLAW_CONFIG_DIR), $($env:OPENCLAW_WORKSPACE_DIR)\"\n\n# ── Clone git-based repositories (if any) ─────────────────────────────\n$cloneScript = Join-Path $ScriptDir \"clone-repos.ps1\"\nif (Test-Path $cloneScript) {\n Info \"Cloning/updating SaaS boilerplate repositories...\"\n & $cloneScript\n Ok \"Repositories ready.\"\n}\n\n# ── Pull and start ───────────────────────────────────────────────────────\nWrite-Host \"\"\nInfo \"Pulling latest images...\"\ndocker compose pull 2>$null\nif ($LASTEXITCODE -ne 0) { docker compose pull }\n\nWrite-Host \"\"\nInfo \"Starting services...\"\ndocker compose up -d --remove-orphans${hasGit ? \" --build\" : \"\"}\n\n# ── Health-check loop ────────────────────────────────────────────────────\nWrite-Host \"\"\nInfo \"Waiting for services to become healthy...\"\nStart-Sleep -Seconds 5\n\n$retries = 0\n$maxRetries = 30\nwhile ($retries -lt $maxRetries) {\n $psOutput = docker compose ps --format json 2>$null\n $unhealthy = ($psOutput | Select-String -Pattern '\"unhealthy\"' -SimpleMatch).Count\n $starting = ($psOutput | Select-String -Pattern '\"starting\"' -SimpleMatch).Count\n if ($unhealthy -eq 0 -and $starting -eq 0) { break }\n $retries++\n Start-Sleep -Seconds 2\n}\n\nWrite-Host \"\"\ndocker compose ps\nWrite-Host \"\"\n\nif ($retries -ge $maxRetries) {\n Warn \"Some services may still be starting. Check: docker compose ps\"\n} else {\n Ok \"All services are running!\"\n}\n\n# ── Print service URLs & token ───────────────────────────────────────────\n$gatewayHost = if ($env:OPENCLAW_GATEWAY_BIND -eq \"lan\") { \"0.0.0.0\" } else { \"localhost\" }\n\nWrite-Host \"\"\nWrite-Host \"===============================================================================\"\nWrite-Host \" OpenClaw is ready!\"\nWrite-Host \"===============================================================================\"\nWrite-Host \"\"\nWrite-Host \" Gateway URL: http://\\${gatewayHost}:$($env:OPENCLAW_GATEWAY_PORT)\"\nWrite-Host \" Bridge (WebSocket): ws://\\${gatewayHost}:$($env:OPENCLAW_BRIDGE_PORT)\"\nWrite-Host \" Config directory: $($env:OPENCLAW_CONFIG_DIR)\"\nWrite-Host \" Workspace directory: $($env:OPENCLAW_WORKSPACE_DIR)\"\nWrite-Host \"\"\nWrite-Host \" Gateway Token: $($env:OPENCLAW_GATEWAY_TOKEN)\"\nWrite-Host \"\"\nWrite-Host \" Manage:\"\nWrite-Host \" Stop: .\\\\scripts\\\\stop.ps1\"\nWrite-Host \" Status: .\\\\scripts\\\\status.ps1\"\nWrite-Host \" Update: .\\\\scripts\\\\update.ps1\"\nWrite-Host \" Logs: docker compose logs -f\"\nWrite-Host \"\"\nWrite-Host \"===============================================================================\"\n`;\n\n\t// ── scripts/stop.ps1 ────────────────────────────────────────────────────\n\n\tfiles[\"scripts/stop.ps1\"] = `#Requires -Version 5.1\n<#\n.SYNOPSIS\n OpenClaw Stop Script — gracefully stops all services.\n#>\n\n$ErrorActionPreference = 'Stop'\n$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path\n$ProjectDir = Split-Path -Parent $ScriptDir\nSet-Location $ProjectDir\n\nWrite-Host \"\"\nWrite-Host \"OpenClaw - Stopping services...\" -ForegroundColor White\nWrite-Host \"\"\n\ndocker compose down --timeout 30\n\nWrite-Host \"\"\nWrite-Host \" + All services stopped.\" -ForegroundColor Green\n`;\n\n\t// ── scripts/update.ps1 ──────────────────────────────────────────────────\n\n\tfiles[\"scripts/update.ps1\"] = `#Requires -Version 5.1\n<#\n.SYNOPSIS\n OpenClaw Update Script — pulls latest images and restarts services.\n#>\n\n$ErrorActionPreference = 'Stop'\n$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path\n$ProjectDir = Split-Path -Parent $ScriptDir\nSet-Location $ProjectDir\n\nWrite-Host \"\"\nWrite-Host \"OpenClaw - Updating services...\" -ForegroundColor White\nWrite-Host \"\"\n\n# Update git-based repositories (if any)\n$cloneScript = Join-Path $ScriptDir \"clone-repos.ps1\"\nif (Test-Path $cloneScript) {\n Write-Host \" Updating SaaS boilerplate repositories...\" -ForegroundColor Cyan\n & $cloneScript\n}\n\nWrite-Host \" Pulling latest images...\" -ForegroundColor Cyan\ndocker compose pull\n\nWrite-Host \"\"\nWrite-Host \" Restarting services with new images...\" -ForegroundColor Cyan\ndocker compose up -d --remove-orphans${hasGit ? \" --build\" : \"\"}\n\nWrite-Host \"\"\nWrite-Host \" Waiting for services to stabilize...\" -ForegroundColor Cyan\nStart-Sleep -Seconds 10\n\ndocker compose ps\n\nWrite-Host \"\"\nWrite-Host \" + Update complete!\" -ForegroundColor Green\n`;\n\n\t// ── scripts/backup.ps1 ──────────────────────────────────────────────────\n\n\tfiles[\"scripts/backup.ps1\"] = `#Requires -Version 5.1\n<#\n.SYNOPSIS\n OpenClaw Backup Script — backs up all named Docker volumes to a timestamped directory.\n#>\n\n$ErrorActionPreference = 'Stop'\n$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path\n$ProjectDir = Split-Path -Parent $ScriptDir\nSet-Location $ProjectDir\n\n$timestamp = Get-Date -Format \"yyyyMMdd_HHmmss\"\n$backupDir = Join-Path $ProjectDir \"backups\\\\$timestamp\"\nNew-Item -ItemType Directory -Force -Path $backupDir | Out-Null\n\nWrite-Host \"\"\nWrite-Host \"OpenClaw - Backing up volumes...\" -ForegroundColor White\nWrite-Host \" Backup directory: $backupDir\"\nWrite-Host \"\"\n\n# Get project name from docker compose\n$projectName = \"openclaw\"\ntry {\n $configJson = docker compose config --format json 2>$null | ConvertFrom-Json\n if ($configJson.name) { $projectName = $configJson.name }\n} catch {}\n\n# List all volumes for this project\n$volumes = docker volume ls --filter \"name=$projectName\" --format \"{{.Name}}\" 2>$null\nif (-not $volumes) {\n Write-Host \" ! No volumes found for project: $projectName\" -ForegroundColor Yellow\n Write-Host \" Trying to list all openclaw volumes...\"\n $volumes = docker volume ls --filter \"name=openclaw\" --format \"{{.Name}}\" 2>$null\n}\n\nif (-not $volumes) {\n Write-Host \" x No volumes found to back up.\" -ForegroundColor Red\n exit 1\n}\n\n$backedUp = 0\nforeach ($volume in $volumes) {\n $vol = $volume.Trim()\n if (-not $vol) { continue }\n Write-Host \" Backing up: $vol\" -ForegroundColor Cyan\n docker run --rm -v \"\\${vol}:/source:ro\" -v \"\\${backupDir}:/backup\" alpine tar czf \"/backup/$vol.tar.gz\" -C /source .\n $size = (Get-Item (Join-Path $backupDir \"$vol.tar.gz\")).Length / 1MB\n Write-Host \" + $vol ($([math]::Round($size, 1))MB)\" -ForegroundColor Green\n $backedUp++\n}\n\n$totalSize = ((Get-ChildItem $backupDir -Recurse | Measure-Object -Property Length -Sum).Sum) / 1MB\nWrite-Host \"\"\nWrite-Host \" + Backed up $backedUp volume(s) ($([math]::Round($totalSize, 1))MB total)\" -ForegroundColor Green\nWrite-Host \" Location: $backupDir\"\n`;\n\n\t// ── scripts/status.ps1 ──────────────────────────────────────────────────\n\n\tfiles[\"scripts/status.ps1\"] = `#Requires -Version 5.1\n<#\n.SYNOPSIS\n OpenClaw Status Script — shows the current status of all services.\n#>\n\n$ErrorActionPreference = 'Stop'\n$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path\n$ProjectDir = Split-Path -Parent $ScriptDir\nSet-Location $ProjectDir\n\nWrite-Host \"\"\nWrite-Host \"OpenClaw - Service Status\" -ForegroundColor White\nWrite-Host \"\"\n\n# Show compose status\ndocker compose ps\n\nWrite-Host \"\"\nWrite-Host \"-- Resource Usage ----------------------------------------------------------\"\nWrite-Host \"\"\n\ntry { docker compose top 2>$null } catch {}\n\nWrite-Host \"\"\nWrite-Host \"-- Disk Usage --------------------------------------------------------------\"\nWrite-Host \"\"\n\ntry { docker system df 2>$null } catch {}\n\nWrite-Host \"\"\nWrite-Host \"-- Network -----------------------------------------------------------------\"\nWrite-Host \"\"\n\ntry {\n docker network ls --filter \"name=openclaw\" --format \"table {{.Name}}\\\\t{{.Driver}}\\\\t{{.Scope}}\" 2>$null\n} catch {}\n`;\n\n\treturn files;\n}\n"],"mappings":";;;;;;AAKA,SAAgB,gBAAgB,SAAgE;CAC/F,MAAM,SAAS,SAAS,kBAAkB;CAC1C,MAAM,QAAgC,EAAE;AAIxC,OAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAgJU,SAAS,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8D/D,OAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;AAuB3B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;uCA0BS,SAAS,aAAa,GAAG;;;;;;;;;;;AAc/D,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyD7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4C7B,OAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA+GS,SAAS,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsD/D,OAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;AAuB5B,OAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA2BQ,SAAS,aAAa,GAAG;;;;;;;;;;;AAc/D,OAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2D9B,OAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuC9B,QAAO"}
@@ -1,15 +1,20 @@
1
- const require_vi_2VT5v0um = require("../vi.2VT5v0um-CRqXre87.cjs");
1
+ const require_vi_2VT5v0um = require("../vi.2VT5v0um-iVBt6Fyq.cjs");
2
2
  const require_generators_scripts = require("./scripts.cjs");
3
3
  //#region src/generators/scripts.test.ts
4
4
  require_vi_2VT5v0um.describe("generateScripts", () => {
5
- require_vi_2VT5v0um.it("generates all 5 expected scripts", () => {
5
+ require_vi_2VT5v0um.it("generates all 10 expected scripts (5 bash + 5 PowerShell)", () => {
6
6
  const result = require_generators_scripts.generateScripts();
7
7
  for (const script of [
8
8
  "scripts/start.sh",
9
9
  "scripts/stop.sh",
10
10
  "scripts/update.sh",
11
11
  "scripts/backup.sh",
12
- "scripts/status.sh"
12
+ "scripts/status.sh",
13
+ "scripts/start.ps1",
14
+ "scripts/stop.ps1",
15
+ "scripts/update.ps1",
16
+ "scripts/backup.ps1",
17
+ "scripts/status.ps1"
13
18
  ]) {
14
19
  require_vi_2VT5v0um.globalExpect(result).toHaveProperty(script);
15
20
  require_vi_2VT5v0um.globalExpect(result[script].length).toBeGreaterThan(0);
@@ -40,9 +45,38 @@ require_vi_2VT5v0um.describe("generateScripts", () => {
40
45
  require_vi_2VT5v0um.globalExpect(result["scripts/status.sh"]).toContain("docker compose");
41
46
  require_vi_2VT5v0um.globalExpect(result["scripts/status.sh"]).toContain("ps");
42
47
  });
43
- require_vi_2VT5v0um.it("all scripts start with bash shebang", () => {
48
+ require_vi_2VT5v0um.it("all bash scripts start with shebang", () => {
44
49
  const result = require_generators_scripts.generateScripts();
45
- for (const [, content] of Object.entries(result)) require_vi_2VT5v0um.globalExpect(content.startsWith("#!/")).toBe(true);
50
+ for (const [path, content] of Object.entries(result)) if (path.endsWith(".sh")) require_vi_2VT5v0um.globalExpect(content.startsWith("#!/")).toBe(true);
51
+ });
52
+ require_vi_2VT5v0um.it("all PowerShell scripts start with #Requires", () => {
53
+ const result = require_generators_scripts.generateScripts();
54
+ for (const [path, content] of Object.entries(result)) if (path.endsWith(".ps1")) require_vi_2VT5v0um.globalExpect(content.startsWith("#Requires")).toBe(true);
55
+ });
56
+ require_vi_2VT5v0um.it("start.ps1 calls docker compose up", () => {
57
+ const result = require_generators_scripts.generateScripts();
58
+ require_vi_2VT5v0um.globalExpect(result["scripts/start.ps1"]).toContain("docker compose");
59
+ require_vi_2VT5v0um.globalExpect(result["scripts/start.ps1"]).toContain("up");
60
+ });
61
+ require_vi_2VT5v0um.it("stop.ps1 calls docker compose down", () => {
62
+ const result = require_generators_scripts.generateScripts();
63
+ require_vi_2VT5v0um.globalExpect(result["scripts/stop.ps1"]).toContain("docker compose");
64
+ require_vi_2VT5v0um.globalExpect(result["scripts/stop.ps1"]).toContain("down");
65
+ });
66
+ require_vi_2VT5v0um.it("update.ps1 calls docker compose pull", () => {
67
+ const result = require_generators_scripts.generateScripts();
68
+ require_vi_2VT5v0um.globalExpect(result["scripts/update.ps1"]).toContain("docker compose");
69
+ require_vi_2VT5v0um.globalExpect(result["scripts/update.ps1"]).toContain("pull");
70
+ });
71
+ require_vi_2VT5v0um.it("backup.ps1 references volumes or backup", () => {
72
+ const backup = require_generators_scripts.generateScripts()["scripts/backup.ps1"];
73
+ require_vi_2VT5v0um.globalExpect(backup).toBeDefined();
74
+ require_vi_2VT5v0um.globalExpect(backup.length).toBeGreaterThan(50);
75
+ });
76
+ require_vi_2VT5v0um.it("status.ps1 calls docker compose ps", () => {
77
+ const result = require_generators_scripts.generateScripts();
78
+ require_vi_2VT5v0um.globalExpect(result["scripts/status.ps1"]).toContain("docker compose");
79
+ require_vi_2VT5v0um.globalExpect(result["scripts/status.ps1"]).toContain("ps");
46
80
  });
47
81
  });
48
82
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.test.cjs","names":["describe","generateScripts"],"sources":["../../src/generators/scripts.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generateScripts } from \"./scripts.js\";\n\ndescribe(\"generateScripts\", () => {\n\tit(\"generates all 5 expected scripts\", () => {\n\t\tconst result = generateScripts();\n\n\t\tconst expectedScripts = [\n\t\t\t\"scripts/start.sh\",\n\t\t\t\"scripts/stop.sh\",\n\t\t\t\"scripts/update.sh\",\n\t\t\t\"scripts/backup.sh\",\n\t\t\t\"scripts/status.sh\",\n\t\t];\n\n\t\tfor (const script of expectedScripts) {\n\t\t\texpect(result).toHaveProperty(script);\n\t\t\texpect(result[script]!.length).toBeGreaterThan(0);\n\t\t}\n\t});\n\n\tit(\"start.sh calls docker compose up\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"up\");\n\t});\n\n\tit(\"stop.sh calls docker compose down\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"down\");\n\t});\n\n\tit(\"update.sh calls docker compose pull\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"pull\");\n\t});\n\n\tit(\"backup.sh references volumes or backup\", () => {\n\t\tconst result = generateScripts();\n\t\tconst backup = result[\"scripts/backup.sh\"]!;\n\t\texpect(backup).toBeDefined();\n\t\texpect(backup.length).toBeGreaterThan(50);\n\t});\n\n\tit(\"status.sh calls docker compose ps\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"ps\");\n\t});\n\n\tit(\"all scripts start with bash shebang\", () => {\n\t\tconst result = generateScripts();\n\n\t\tfor (const [, content] of Object.entries(result)) {\n\t\t\texpect(content.startsWith(\"#!/\")).toBe(true);\n\t\t}\n\t});\n});\n"],"mappings":";;;AAGAA,oBAAAA,SAAS,yBAAyB;AACjC,qBAAA,GAAG,0CAA0C;EAC5C,MAAM,SAASC,2BAAAA,iBAAiB;AAUhC,OAAK,MAAM,UARa;GACvB;GACA;GACA;GACA;GACA;GACA,EAEqC;AACrC,uBAAA,aAAO,OAAO,CAAC,eAAe,OAAO;AACrC,uBAAA,aAAO,OAAO,QAAS,OAAO,CAAC,gBAAgB,EAAE;;GAEjD;AAEF,qBAAA,GAAG,0CAA0C;EAC5C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,oBAAoB,CAAC,UAAU,iBAAiB;AAC9D,sBAAA,aAAO,OAAO,oBAAoB,CAAC,UAAU,KAAK;GACjD;AAEF,qBAAA,GAAG,2CAA2C;EAC7C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,mBAAmB,CAAC,UAAU,iBAAiB;AAC7D,sBAAA,aAAO,OAAO,mBAAmB,CAAC,UAAU,OAAO;GAClD;AAEF,qBAAA,GAAG,6CAA6C;EAC/C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,OAAO;GACpD;AAEF,qBAAA,GAAG,gDAAgD;EAElD,MAAM,SADSA,2BAAAA,iBAAiB,CACV;AACtB,sBAAA,aAAO,OAAO,CAAC,aAAa;AAC5B,sBAAA,aAAO,OAAO,OAAO,CAAC,gBAAgB,GAAG;GACxC;AAEF,qBAAA,GAAG,2CAA2C;EAC7C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,KAAK;GAClD;AAEF,qBAAA,GAAG,6CAA6C;EAC/C,MAAM,SAASA,2BAAAA,iBAAiB;AAEhC,OAAK,MAAM,GAAG,YAAY,OAAO,QAAQ,OAAO,CAC/C,qBAAA,aAAO,QAAQ,WAAW,MAAM,CAAC,CAAC,KAAK,KAAK;GAE5C;EACD"}
1
+ {"version":3,"file":"scripts.test.cjs","names":["describe","generateScripts"],"sources":["../../src/generators/scripts.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generateScripts } from \"./scripts.js\";\n\ndescribe(\"generateScripts\", () => {\n\tit(\"generates all 10 expected scripts (5 bash + 5 PowerShell)\", () => {\n\t\tconst result = generateScripts();\n\n\t\tconst expectedScripts = [\n\t\t\t\"scripts/start.sh\",\n\t\t\t\"scripts/stop.sh\",\n\t\t\t\"scripts/update.sh\",\n\t\t\t\"scripts/backup.sh\",\n\t\t\t\"scripts/status.sh\",\n\t\t\t\"scripts/start.ps1\",\n\t\t\t\"scripts/stop.ps1\",\n\t\t\t\"scripts/update.ps1\",\n\t\t\t\"scripts/backup.ps1\",\n\t\t\t\"scripts/status.ps1\",\n\t\t];\n\n\t\tfor (const script of expectedScripts) {\n\t\t\texpect(result).toHaveProperty(script);\n\t\t\texpect(result[script]!.length).toBeGreaterThan(0);\n\t\t}\n\t});\n\n\tit(\"start.sh calls docker compose up\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"up\");\n\t});\n\n\tit(\"stop.sh calls docker compose down\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"down\");\n\t});\n\n\tit(\"update.sh calls docker compose pull\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"pull\");\n\t});\n\n\tit(\"backup.sh references volumes or backup\", () => {\n\t\tconst result = generateScripts();\n\t\tconst backup = result[\"scripts/backup.sh\"]!;\n\t\texpect(backup).toBeDefined();\n\t\texpect(backup.length).toBeGreaterThan(50);\n\t});\n\n\tit(\"status.sh calls docker compose ps\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"ps\");\n\t});\n\n\tit(\"all bash scripts start with shebang\", () => {\n\t\tconst result = generateScripts();\n\n\t\tfor (const [path, content] of Object.entries(result)) {\n\t\t\tif (path.endsWith(\".sh\")) {\n\t\t\t\texpect(content.startsWith(\"#!/\")).toBe(true);\n\t\t\t}\n\t\t}\n\t});\n\n\tit(\"all PowerShell scripts start with #Requires\", () => {\n\t\tconst result = generateScripts();\n\n\t\tfor (const [path, content] of Object.entries(result)) {\n\t\t\tif (path.endsWith(\".ps1\")) {\n\t\t\t\texpect(content.startsWith(\"#Requires\")).toBe(true);\n\t\t\t}\n\t\t}\n\t});\n\n\tit(\"start.ps1 calls docker compose up\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/start.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/start.ps1\"]).toContain(\"up\");\n\t});\n\n\tit(\"stop.ps1 calls docker compose down\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/stop.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/stop.ps1\"]).toContain(\"down\");\n\t});\n\n\tit(\"update.ps1 calls docker compose pull\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/update.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/update.ps1\"]).toContain(\"pull\");\n\t});\n\n\tit(\"backup.ps1 references volumes or backup\", () => {\n\t\tconst result = generateScripts();\n\t\tconst backup = result[\"scripts/backup.ps1\"]!;\n\t\texpect(backup).toBeDefined();\n\t\texpect(backup.length).toBeGreaterThan(50);\n\t});\n\n\tit(\"status.ps1 calls docker compose ps\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/status.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/status.ps1\"]).toContain(\"ps\");\n\t});\n});\n"],"mappings":";;;AAGAA,oBAAAA,SAAS,yBAAyB;AACjC,qBAAA,GAAG,mEAAmE;EACrE,MAAM,SAASC,2BAAAA,iBAAiB;AAehC,OAAK,MAAM,UAba;GACvB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,EAEqC;AACrC,uBAAA,aAAO,OAAO,CAAC,eAAe,OAAO;AACrC,uBAAA,aAAO,OAAO,QAAS,OAAO,CAAC,gBAAgB,EAAE;;GAEjD;AAEF,qBAAA,GAAG,0CAA0C;EAC5C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,oBAAoB,CAAC,UAAU,iBAAiB;AAC9D,sBAAA,aAAO,OAAO,oBAAoB,CAAC,UAAU,KAAK;GACjD;AAEF,qBAAA,GAAG,2CAA2C;EAC7C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,mBAAmB,CAAC,UAAU,iBAAiB;AAC7D,sBAAA,aAAO,OAAO,mBAAmB,CAAC,UAAU,OAAO;GAClD;AAEF,qBAAA,GAAG,6CAA6C;EAC/C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,OAAO;GACpD;AAEF,qBAAA,GAAG,gDAAgD;EAElD,MAAM,SADSA,2BAAAA,iBAAiB,CACV;AACtB,sBAAA,aAAO,OAAO,CAAC,aAAa;AAC5B,sBAAA,aAAO,OAAO,OAAO,CAAC,gBAAgB,GAAG;GACxC;AAEF,qBAAA,GAAG,2CAA2C;EAC7C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,KAAK;GAClD;AAEF,qBAAA,GAAG,6CAA6C;EAC/C,MAAM,SAASA,2BAAAA,iBAAiB;AAEhC,OAAK,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,OAAO,CACnD,KAAI,KAAK,SAAS,MAAM,CACvB,qBAAA,aAAO,QAAQ,WAAW,MAAM,CAAC,CAAC,KAAK,KAAK;GAG7C;AAEF,qBAAA,GAAG,qDAAqD;EACvD,MAAM,SAASA,2BAAAA,iBAAiB;AAEhC,OAAK,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,OAAO,CACnD,KAAI,KAAK,SAAS,OAAO,CACxB,qBAAA,aAAO,QAAQ,WAAW,YAAY,CAAC,CAAC,KAAK,KAAK;GAGnD;AAEF,qBAAA,GAAG,2CAA2C;EAC7C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,sBAAA,aAAO,OAAO,qBAAqB,CAAC,UAAU,KAAK;GAClD;AAEF,qBAAA,GAAG,4CAA4C;EAC9C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,oBAAoB,CAAC,UAAU,iBAAiB;AAC9D,sBAAA,aAAO,OAAO,oBAAoB,CAAC,UAAU,OAAO;GACnD;AAEF,qBAAA,GAAG,8CAA8C;EAChD,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,sBAAsB,CAAC,UAAU,iBAAiB;AAChE,sBAAA,aAAO,OAAO,sBAAsB,CAAC,UAAU,OAAO;GACrD;AAEF,qBAAA,GAAG,iDAAiD;EAEnD,MAAM,SADSA,2BAAAA,iBAAiB,CACV;AACtB,sBAAA,aAAO,OAAO,CAAC,aAAa;AAC5B,sBAAA,aAAO,OAAO,OAAO,CAAC,gBAAgB,GAAG;GACxC;AAEF,qBAAA,GAAG,4CAA4C;EAC9C,MAAM,SAASA,2BAAAA,iBAAiB;AAChC,sBAAA,aAAO,OAAO,sBAAsB,CAAC,UAAU,iBAAiB;AAChE,sBAAA,aAAO,OAAO,sBAAsB,CAAC,UAAU,KAAK;GACnD;EACD"}
@@ -1,15 +1,20 @@
1
- import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-DvC3SVNc.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-C_jmO7m2.mjs";
2
2
  import { generateScripts } from "./scripts.mjs";
3
3
  //#region src/generators/scripts.test.ts
4
4
  describe("generateScripts", () => {
5
- it("generates all 5 expected scripts", () => {
5
+ it("generates all 10 expected scripts (5 bash + 5 PowerShell)", () => {
6
6
  const result = generateScripts();
7
7
  for (const script of [
8
8
  "scripts/start.sh",
9
9
  "scripts/stop.sh",
10
10
  "scripts/update.sh",
11
11
  "scripts/backup.sh",
12
- "scripts/status.sh"
12
+ "scripts/status.sh",
13
+ "scripts/start.ps1",
14
+ "scripts/stop.ps1",
15
+ "scripts/update.ps1",
16
+ "scripts/backup.ps1",
17
+ "scripts/status.ps1"
13
18
  ]) {
14
19
  globalExpect(result).toHaveProperty(script);
15
20
  globalExpect(result[script].length).toBeGreaterThan(0);
@@ -40,9 +45,38 @@ describe("generateScripts", () => {
40
45
  globalExpect(result["scripts/status.sh"]).toContain("docker compose");
41
46
  globalExpect(result["scripts/status.sh"]).toContain("ps");
42
47
  });
43
- it("all scripts start with bash shebang", () => {
48
+ it("all bash scripts start with shebang", () => {
44
49
  const result = generateScripts();
45
- for (const [, content] of Object.entries(result)) globalExpect(content.startsWith("#!/")).toBe(true);
50
+ for (const [path, content] of Object.entries(result)) if (path.endsWith(".sh")) globalExpect(content.startsWith("#!/")).toBe(true);
51
+ });
52
+ it("all PowerShell scripts start with #Requires", () => {
53
+ const result = generateScripts();
54
+ for (const [path, content] of Object.entries(result)) if (path.endsWith(".ps1")) globalExpect(content.startsWith("#Requires")).toBe(true);
55
+ });
56
+ it("start.ps1 calls docker compose up", () => {
57
+ const result = generateScripts();
58
+ globalExpect(result["scripts/start.ps1"]).toContain("docker compose");
59
+ globalExpect(result["scripts/start.ps1"]).toContain("up");
60
+ });
61
+ it("stop.ps1 calls docker compose down", () => {
62
+ const result = generateScripts();
63
+ globalExpect(result["scripts/stop.ps1"]).toContain("docker compose");
64
+ globalExpect(result["scripts/stop.ps1"]).toContain("down");
65
+ });
66
+ it("update.ps1 calls docker compose pull", () => {
67
+ const result = generateScripts();
68
+ globalExpect(result["scripts/update.ps1"]).toContain("docker compose");
69
+ globalExpect(result["scripts/update.ps1"]).toContain("pull");
70
+ });
71
+ it("backup.ps1 references volumes or backup", () => {
72
+ const backup = generateScripts()["scripts/backup.ps1"];
73
+ globalExpect(backup).toBeDefined();
74
+ globalExpect(backup.length).toBeGreaterThan(50);
75
+ });
76
+ it("status.ps1 calls docker compose ps", () => {
77
+ const result = generateScripts();
78
+ globalExpect(result["scripts/status.ps1"]).toContain("docker compose");
79
+ globalExpect(result["scripts/status.ps1"]).toContain("ps");
46
80
  });
47
81
  });
48
82
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.test.mjs","names":[],"sources":["../../src/generators/scripts.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generateScripts } from \"./scripts.js\";\n\ndescribe(\"generateScripts\", () => {\n\tit(\"generates all 5 expected scripts\", () => {\n\t\tconst result = generateScripts();\n\n\t\tconst expectedScripts = [\n\t\t\t\"scripts/start.sh\",\n\t\t\t\"scripts/stop.sh\",\n\t\t\t\"scripts/update.sh\",\n\t\t\t\"scripts/backup.sh\",\n\t\t\t\"scripts/status.sh\",\n\t\t];\n\n\t\tfor (const script of expectedScripts) {\n\t\t\texpect(result).toHaveProperty(script);\n\t\t\texpect(result[script]!.length).toBeGreaterThan(0);\n\t\t}\n\t});\n\n\tit(\"start.sh calls docker compose up\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"up\");\n\t});\n\n\tit(\"stop.sh calls docker compose down\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"down\");\n\t});\n\n\tit(\"update.sh calls docker compose pull\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"pull\");\n\t});\n\n\tit(\"backup.sh references volumes or backup\", () => {\n\t\tconst result = generateScripts();\n\t\tconst backup = result[\"scripts/backup.sh\"]!;\n\t\texpect(backup).toBeDefined();\n\t\texpect(backup.length).toBeGreaterThan(50);\n\t});\n\n\tit(\"status.sh calls docker compose ps\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"ps\");\n\t});\n\n\tit(\"all scripts start with bash shebang\", () => {\n\t\tconst result = generateScripts();\n\n\t\tfor (const [, content] of Object.entries(result)) {\n\t\t\texpect(content.startsWith(\"#!/\")).toBe(true);\n\t\t}\n\t});\n});\n"],"mappings":";;;AAGA,SAAS,yBAAyB;AACjC,IAAG,0CAA0C;EAC5C,MAAM,SAAS,iBAAiB;AAUhC,OAAK,MAAM,UARa;GACvB;GACA;GACA;GACA;GACA;GACA,EAEqC;AACrC,gBAAO,OAAO,CAAC,eAAe,OAAO;AACrC,gBAAO,OAAO,QAAS,OAAO,CAAC,gBAAgB,EAAE;;GAEjD;AAEF,IAAG,0CAA0C;EAC5C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,oBAAoB,CAAC,UAAU,iBAAiB;AAC9D,eAAO,OAAO,oBAAoB,CAAC,UAAU,KAAK;GACjD;AAEF,IAAG,2CAA2C;EAC7C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,mBAAmB,CAAC,UAAU,iBAAiB;AAC7D,eAAO,OAAO,mBAAmB,CAAC,UAAU,OAAO;GAClD;AAEF,IAAG,6CAA6C;EAC/C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,eAAO,OAAO,qBAAqB,CAAC,UAAU,OAAO;GACpD;AAEF,IAAG,gDAAgD;EAElD,MAAM,SADS,iBAAiB,CACV;AACtB,eAAO,OAAO,CAAC,aAAa;AAC5B,eAAO,OAAO,OAAO,CAAC,gBAAgB,GAAG;GACxC;AAEF,IAAG,2CAA2C;EAC7C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,eAAO,OAAO,qBAAqB,CAAC,UAAU,KAAK;GAClD;AAEF,IAAG,6CAA6C;EAC/C,MAAM,SAAS,iBAAiB;AAEhC,OAAK,MAAM,GAAG,YAAY,OAAO,QAAQ,OAAO,CAC/C,cAAO,QAAQ,WAAW,MAAM,CAAC,CAAC,KAAK,KAAK;GAE5C;EACD"}
1
+ {"version":3,"file":"scripts.test.mjs","names":[],"sources":["../../src/generators/scripts.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { generateScripts } from \"./scripts.js\";\n\ndescribe(\"generateScripts\", () => {\n\tit(\"generates all 10 expected scripts (5 bash + 5 PowerShell)\", () => {\n\t\tconst result = generateScripts();\n\n\t\tconst expectedScripts = [\n\t\t\t\"scripts/start.sh\",\n\t\t\t\"scripts/stop.sh\",\n\t\t\t\"scripts/update.sh\",\n\t\t\t\"scripts/backup.sh\",\n\t\t\t\"scripts/status.sh\",\n\t\t\t\"scripts/start.ps1\",\n\t\t\t\"scripts/stop.ps1\",\n\t\t\t\"scripts/update.ps1\",\n\t\t\t\"scripts/backup.ps1\",\n\t\t\t\"scripts/status.ps1\",\n\t\t];\n\n\t\tfor (const script of expectedScripts) {\n\t\t\texpect(result).toHaveProperty(script);\n\t\t\texpect(result[script]!.length).toBeGreaterThan(0);\n\t\t}\n\t});\n\n\tit(\"start.sh calls docker compose up\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/start.sh\"]).toContain(\"up\");\n\t});\n\n\tit(\"stop.sh calls docker compose down\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/stop.sh\"]).toContain(\"down\");\n\t});\n\n\tit(\"update.sh calls docker compose pull\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/update.sh\"]).toContain(\"pull\");\n\t});\n\n\tit(\"backup.sh references volumes or backup\", () => {\n\t\tconst result = generateScripts();\n\t\tconst backup = result[\"scripts/backup.sh\"]!;\n\t\texpect(backup).toBeDefined();\n\t\texpect(backup.length).toBeGreaterThan(50);\n\t});\n\n\tit(\"status.sh calls docker compose ps\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/status.sh\"]).toContain(\"ps\");\n\t});\n\n\tit(\"all bash scripts start with shebang\", () => {\n\t\tconst result = generateScripts();\n\n\t\tfor (const [path, content] of Object.entries(result)) {\n\t\t\tif (path.endsWith(\".sh\")) {\n\t\t\t\texpect(content.startsWith(\"#!/\")).toBe(true);\n\t\t\t}\n\t\t}\n\t});\n\n\tit(\"all PowerShell scripts start with #Requires\", () => {\n\t\tconst result = generateScripts();\n\n\t\tfor (const [path, content] of Object.entries(result)) {\n\t\t\tif (path.endsWith(\".ps1\")) {\n\t\t\t\texpect(content.startsWith(\"#Requires\")).toBe(true);\n\t\t\t}\n\t\t}\n\t});\n\n\tit(\"start.ps1 calls docker compose up\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/start.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/start.ps1\"]).toContain(\"up\");\n\t});\n\n\tit(\"stop.ps1 calls docker compose down\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/stop.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/stop.ps1\"]).toContain(\"down\");\n\t});\n\n\tit(\"update.ps1 calls docker compose pull\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/update.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/update.ps1\"]).toContain(\"pull\");\n\t});\n\n\tit(\"backup.ps1 references volumes or backup\", () => {\n\t\tconst result = generateScripts();\n\t\tconst backup = result[\"scripts/backup.ps1\"]!;\n\t\texpect(backup).toBeDefined();\n\t\texpect(backup.length).toBeGreaterThan(50);\n\t});\n\n\tit(\"status.ps1 calls docker compose ps\", () => {\n\t\tconst result = generateScripts();\n\t\texpect(result[\"scripts/status.ps1\"]).toContain(\"docker compose\");\n\t\texpect(result[\"scripts/status.ps1\"]).toContain(\"ps\");\n\t});\n});\n"],"mappings":";;;AAGA,SAAS,yBAAyB;AACjC,IAAG,mEAAmE;EACrE,MAAM,SAAS,iBAAiB;AAehC,OAAK,MAAM,UAba;GACvB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,EAEqC;AACrC,gBAAO,OAAO,CAAC,eAAe,OAAO;AACrC,gBAAO,OAAO,QAAS,OAAO,CAAC,gBAAgB,EAAE;;GAEjD;AAEF,IAAG,0CAA0C;EAC5C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,oBAAoB,CAAC,UAAU,iBAAiB;AAC9D,eAAO,OAAO,oBAAoB,CAAC,UAAU,KAAK;GACjD;AAEF,IAAG,2CAA2C;EAC7C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,mBAAmB,CAAC,UAAU,iBAAiB;AAC7D,eAAO,OAAO,mBAAmB,CAAC,UAAU,OAAO;GAClD;AAEF,IAAG,6CAA6C;EAC/C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,eAAO,OAAO,qBAAqB,CAAC,UAAU,OAAO;GACpD;AAEF,IAAG,gDAAgD;EAElD,MAAM,SADS,iBAAiB,CACV;AACtB,eAAO,OAAO,CAAC,aAAa;AAC5B,eAAO,OAAO,OAAO,CAAC,gBAAgB,GAAG;GACxC;AAEF,IAAG,2CAA2C;EAC7C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,eAAO,OAAO,qBAAqB,CAAC,UAAU,KAAK;GAClD;AAEF,IAAG,6CAA6C;EAC/C,MAAM,SAAS,iBAAiB;AAEhC,OAAK,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,OAAO,CACnD,KAAI,KAAK,SAAS,MAAM,CACvB,cAAO,QAAQ,WAAW,MAAM,CAAC,CAAC,KAAK,KAAK;GAG7C;AAEF,IAAG,qDAAqD;EACvD,MAAM,SAAS,iBAAiB;AAEhC,OAAK,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,OAAO,CACnD,KAAI,KAAK,SAAS,OAAO,CACxB,cAAO,QAAQ,WAAW,YAAY,CAAC,CAAC,KAAK,KAAK;GAGnD;AAEF,IAAG,2CAA2C;EAC7C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,qBAAqB,CAAC,UAAU,iBAAiB;AAC/D,eAAO,OAAO,qBAAqB,CAAC,UAAU,KAAK;GAClD;AAEF,IAAG,4CAA4C;EAC9C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,oBAAoB,CAAC,UAAU,iBAAiB;AAC9D,eAAO,OAAO,oBAAoB,CAAC,UAAU,OAAO;GACnD;AAEF,IAAG,8CAA8C;EAChD,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,sBAAsB,CAAC,UAAU,iBAAiB;AAChE,eAAO,OAAO,sBAAsB,CAAC,UAAU,OAAO;GACrD;AAEF,IAAG,iDAAiD;EAEnD,MAAM,SADS,iBAAiB,CACV;AACtB,eAAO,OAAO,CAAC,aAAa;AAC5B,eAAO,OAAO,OAAO,CAAC,gBAAgB,GAAG;GACxC;AAEF,IAAG,4CAA4C;EAC9C,MAAM,SAAS,iBAAiB;AAChC,eAAO,OAAO,sBAAsB,CAAC,UAAU,iBAAiB;AAChE,eAAO,OAAO,sBAAsB,CAAC,UAAU,KAAK;GACnD;EACD"}
@@ -19,6 +19,7 @@ function generateStackManifest(resolved, input) {
19
19
  icon: def.icon,
20
20
  image: def.image,
21
21
  imageTag: def.imageTag,
22
+ gitRepoUrl: def.gitSource?.repoUrl,
22
23
  ports: def.ports.map((p) => ({
23
24
  container: p.container,
24
25
  host: p.host,
@@ -1 +1 @@
1
- {"version":3,"file":"stack-manifest.cjs","names":[],"sources":["../../src/generators/stack-manifest.ts"],"sourcesContent":["/**\n * Stack manifest generator — produces a JSON manifest describing the\n * chosen services, skills, and configuration for a generated stack.\n *\n * This manifest is consumed by Mission Control to render dynamic\n * services/skills pages for managing the deployed stack.\n */\n\nimport type { GenerationInput, ResolverOutput } from \"../types.js\";\n\nexport interface StackManifestService {\n\tid: string;\n\tname: string;\n\tcategory: string;\n\ticon: string;\n\timage: string;\n\timageTag: string;\n\tports: { container: number; host?: number; exposed: boolean; description: string }[];\n\tdocsUrl: string;\n\taddedBy: string;\n\tdependencyOf?: string;\n}\n\nexport interface StackManifestSkill {\n\tid: string;\n\tname: string;\n\tpath: string;\n\tserviceIds: string[];\n}\n\nexport interface StackManifest {\n\tformatVersion: string;\n\tgeneratedAt: string;\n\tprojectName: string;\n\tdeployment?: string;\n\tdeploymentType?: string;\n\tplatform?: string;\n\tproxy?: string;\n\tdomain?: string;\n\tservices: StackManifestService[];\n\tskills: StackManifestSkill[];\n\tmetadata: {\n\t\tserviceCount: number;\n\t\tskillCount: number;\n\t\testimatedMemoryMB: number;\n\t};\n}\n\n/**\n * Generate stack-manifest.json from resolved output and generation input.\n * Returns a single-file record: { \"stack-manifest.json\": string }.\n */\nexport function generateStackManifest(\n\tresolved: ResolverOutput,\n\tinput: GenerationInput,\n): Record<string, string> {\n\t// Build a lookup of dependency chains: serviceId → requiredBy\n\tconst depMap = new Map<string, string>();\n\tfor (const dep of resolved.addedDependencies) {\n\t\tconst depId = dep.serviceId ?? dep.service;\n\t\tif (dep.requiredBy) {\n\t\t\tdepMap.set(depId, dep.requiredBy);\n\t\t}\n\t}\n\n\tconst services: StackManifestService[] = resolved.services.map((svc) => {\n\t\tconst def = svc.definition;\n\t\treturn {\n\t\t\tid: def.id,\n\t\t\tname: def.name,\n\t\t\tcategory: def.category,\n\t\t\ticon: def.icon,\n\t\t\timage: def.image,\n\t\t\timageTag: def.imageTag,\n\t\t\tports: def.ports.map((p) => ({\n\t\t\t\tcontainer: p.container,\n\t\t\t\thost: p.host,\n\t\t\t\texposed: p.exposed,\n\t\t\t\tdescription: p.description,\n\t\t\t})),\n\t\t\tdocsUrl: def.docsUrl,\n\t\t\taddedBy: svc.addedBy,\n\t\t\t...(svc.addedBy !== \"user\" && depMap.has(def.id) ? { dependencyOf: depMap.get(def.id) } : {}),\n\t\t};\n\t});\n\n\t// Collect skills from service definitions (SkillBinding has skillId, not name)\n\tconst skills: StackManifestSkill[] = [];\n\tconst seenSkillIds = new Set<string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const skill of svc.definition.skills) {\n\t\t\tconst skillKey = `${svc.definition.id}-${skill.skillId}`;\n\t\t\tif (seenSkillIds.has(skillKey)) continue;\n\t\t\tseenSkillIds.add(skillKey);\n\t\t\tskills.push({\n\t\t\t\tid: skillKey,\n\t\t\t\tname: skill.skillId,\n\t\t\t\tpath: `openclaw/skills/${skill.skillId}.md`,\n\t\t\t\tserviceIds: [svc.definition.id],\n\t\t\t});\n\t\t}\n\t}\n\n\tconst skillCount = skills.length;\n\n\tconst manifest: StackManifest = {\n\t\tformatVersion: \"1\",\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tprojectName: input.projectName,\n\t\tdeployment: input.deployment,\n\t\tdeploymentType: input.deploymentType,\n\t\tplatform: input.platform,\n\t\tproxy: input.proxy,\n\t\tdomain: input.domain,\n\t\tservices,\n\t\tskills,\n\t\tmetadata: {\n\t\t\tserviceCount: resolved.services.length,\n\t\t\tskillCount,\n\t\t\testimatedMemoryMB: resolved.estimatedMemoryMB,\n\t\t},\n\t};\n\n\treturn {\n\t\t\"stack-manifest.json\": JSON.stringify(manifest, null, 2),\n\t};\n}\n"],"mappings":";;;;;;AAoDA,SAAgB,sBACf,UACA,OACyB;CAEzB,MAAM,yBAAS,IAAI,KAAqB;AACxC,MAAK,MAAM,OAAO,SAAS,mBAAmB;EAC7C,MAAM,QAAQ,IAAI,aAAa,IAAI;AACnC,MAAI,IAAI,WACP,QAAO,IAAI,OAAO,IAAI,WAAW;;CAInC,MAAM,WAAmC,SAAS,SAAS,KAAK,QAAQ;EACvE,MAAM,MAAM,IAAI;AAChB,SAAO;GACN,IAAI,IAAI;GACR,MAAM,IAAI;GACV,UAAU,IAAI;GACd,MAAM,IAAI;GACV,OAAO,IAAI;GACX,UAAU,IAAI;GACd,OAAO,IAAI,MAAM,KAAK,OAAO;IAC5B,WAAW,EAAE;IACb,MAAM,EAAE;IACR,SAAS,EAAE;IACX,aAAa,EAAE;IACf,EAAE;GACH,SAAS,IAAI;GACb,SAAS,IAAI;GACb,GAAI,IAAI,YAAY,UAAU,OAAO,IAAI,IAAI,GAAG,GAAG,EAAE,cAAc,OAAO,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;GAC5F;GACA;CAGF,MAAM,SAA+B,EAAE;CACvC,MAAM,+BAAe,IAAI,KAAa;AACtC,MAAK,MAAM,OAAO,SAAS,SAC1B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ;EAC1C,MAAM,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,MAAM;AAC/C,MAAI,aAAa,IAAI,SAAS,CAAE;AAChC,eAAa,IAAI,SAAS;AAC1B,SAAO,KAAK;GACX,IAAI;GACJ,MAAM,MAAM;GACZ,MAAM,mBAAmB,MAAM,QAAQ;GACvC,YAAY,CAAC,IAAI,WAAW,GAAG;GAC/B,CAAC;;CAIJ,MAAM,aAAa,OAAO;CAE1B,MAAM,WAA0B;EAC/B,eAAe;EACf,8BAAa,IAAI,MAAM,EAAC,aAAa;EACrC,aAAa,MAAM;EACnB,YAAY,MAAM;EAClB,gBAAgB,MAAM;EACtB,UAAU,MAAM;EAChB,OAAO,MAAM;EACb,QAAQ,MAAM;EACd;EACA;EACA,UAAU;GACT,cAAc,SAAS,SAAS;GAChC;GACA,mBAAmB,SAAS;GAC5B;EACD;AAED,QAAO,EACN,uBAAuB,KAAK,UAAU,UAAU,MAAM,EAAE,EACxD"}
1
+ {"version":3,"file":"stack-manifest.cjs","names":[],"sources":["../../src/generators/stack-manifest.ts"],"sourcesContent":["/**\n * Stack manifest generator — produces a JSON manifest describing the\n * chosen services, skills, and configuration for a generated stack.\n *\n * This manifest is consumed by Mission Control to render dynamic\n * services/skills pages for managing the deployed stack.\n */\n\nimport type { GenerationInput, ResolverOutput } from \"../types.js\";\n\nexport interface StackManifestService {\n\tid: string;\n\tname: string;\n\tcategory: string;\n\ticon: string;\n\timage?: string;\n\timageTag?: string;\n\tgitRepoUrl?: string;\n\tports: { container: number; host?: number; exposed: boolean; description: string }[];\n\tdocsUrl: string;\n\taddedBy: string;\n\tdependencyOf?: string;\n}\n\nexport interface StackManifestSkill {\n\tid: string;\n\tname: string;\n\tpath: string;\n\tserviceIds: string[];\n}\n\nexport interface StackManifest {\n\tformatVersion: string;\n\tgeneratedAt: string;\n\tprojectName: string;\n\tdeployment?: string;\n\tdeploymentType?: string;\n\tplatform?: string;\n\tproxy?: string;\n\tdomain?: string;\n\tservices: StackManifestService[];\n\tskills: StackManifestSkill[];\n\tmetadata: {\n\t\tserviceCount: number;\n\t\tskillCount: number;\n\t\testimatedMemoryMB: number;\n\t};\n}\n\n/**\n * Generate stack-manifest.json from resolved output and generation input.\n * Returns a single-file record: { \"stack-manifest.json\": string }.\n */\nexport function generateStackManifest(\n\tresolved: ResolverOutput,\n\tinput: GenerationInput,\n): Record<string, string> {\n\t// Build a lookup of dependency chains: serviceId → requiredBy\n\tconst depMap = new Map<string, string>();\n\tfor (const dep of resolved.addedDependencies) {\n\t\tconst depId = dep.serviceId ?? dep.service;\n\t\tif (dep.requiredBy) {\n\t\t\tdepMap.set(depId, dep.requiredBy);\n\t\t}\n\t}\n\n\tconst services: StackManifestService[] = resolved.services.map((svc) => {\n\t\tconst def = svc.definition;\n\t\treturn {\n\t\t\tid: def.id,\n\t\t\tname: def.name,\n\t\t\tcategory: def.category,\n\t\t\ticon: def.icon,\n\t\t\timage: def.image,\n\t\t\timageTag: def.imageTag,\n\t\t\tgitRepoUrl: def.gitSource?.repoUrl,\n\t\t\tports: def.ports.map((p) => ({\n\t\t\t\tcontainer: p.container,\n\t\t\t\thost: p.host,\n\t\t\t\texposed: p.exposed,\n\t\t\t\tdescription: p.description,\n\t\t\t})),\n\t\t\tdocsUrl: def.docsUrl,\n\t\t\taddedBy: svc.addedBy,\n\t\t\t...(svc.addedBy !== \"user\" && depMap.has(def.id) ? { dependencyOf: depMap.get(def.id) } : {}),\n\t\t};\n\t});\n\n\t// Collect skills from service definitions (SkillBinding has skillId, not name)\n\tconst skills: StackManifestSkill[] = [];\n\tconst seenSkillIds = new Set<string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const skill of svc.definition.skills) {\n\t\t\tconst skillKey = `${svc.definition.id}-${skill.skillId}`;\n\t\t\tif (seenSkillIds.has(skillKey)) continue;\n\t\t\tseenSkillIds.add(skillKey);\n\t\t\tskills.push({\n\t\t\t\tid: skillKey,\n\t\t\t\tname: skill.skillId,\n\t\t\t\tpath: `openclaw/skills/${skill.skillId}.md`,\n\t\t\t\tserviceIds: [svc.definition.id],\n\t\t\t});\n\t\t}\n\t}\n\n\tconst skillCount = skills.length;\n\n\tconst manifest: StackManifest = {\n\t\tformatVersion: \"1\",\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tprojectName: input.projectName,\n\t\tdeployment: input.deployment,\n\t\tdeploymentType: input.deploymentType,\n\t\tplatform: input.platform,\n\t\tproxy: input.proxy,\n\t\tdomain: input.domain,\n\t\tservices,\n\t\tskills,\n\t\tmetadata: {\n\t\t\tserviceCount: resolved.services.length,\n\t\t\tskillCount,\n\t\t\testimatedMemoryMB: resolved.estimatedMemoryMB,\n\t\t},\n\t};\n\n\treturn {\n\t\t\"stack-manifest.json\": JSON.stringify(manifest, null, 2),\n\t};\n}\n"],"mappings":";;;;;;AAqDA,SAAgB,sBACf,UACA,OACyB;CAEzB,MAAM,yBAAS,IAAI,KAAqB;AACxC,MAAK,MAAM,OAAO,SAAS,mBAAmB;EAC7C,MAAM,QAAQ,IAAI,aAAa,IAAI;AACnC,MAAI,IAAI,WACP,QAAO,IAAI,OAAO,IAAI,WAAW;;CAInC,MAAM,WAAmC,SAAS,SAAS,KAAK,QAAQ;EACvE,MAAM,MAAM,IAAI;AAChB,SAAO;GACN,IAAI,IAAI;GACR,MAAM,IAAI;GACV,UAAU,IAAI;GACd,MAAM,IAAI;GACV,OAAO,IAAI;GACX,UAAU,IAAI;GACd,YAAY,IAAI,WAAW;GAC3B,OAAO,IAAI,MAAM,KAAK,OAAO;IAC5B,WAAW,EAAE;IACb,MAAM,EAAE;IACR,SAAS,EAAE;IACX,aAAa,EAAE;IACf,EAAE;GACH,SAAS,IAAI;GACb,SAAS,IAAI;GACb,GAAI,IAAI,YAAY,UAAU,OAAO,IAAI,IAAI,GAAG,GAAG,EAAE,cAAc,OAAO,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;GAC5F;GACA;CAGF,MAAM,SAA+B,EAAE;CACvC,MAAM,+BAAe,IAAI,KAAa;AACtC,MAAK,MAAM,OAAO,SAAS,SAC1B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ;EAC1C,MAAM,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,MAAM;AAC/C,MAAI,aAAa,IAAI,SAAS,CAAE;AAChC,eAAa,IAAI,SAAS;AAC1B,SAAO,KAAK;GACX,IAAI;GACJ,MAAM,MAAM;GACZ,MAAM,mBAAmB,MAAM,QAAQ;GACvC,YAAY,CAAC,IAAI,WAAW,GAAG;GAC/B,CAAC;;CAIJ,MAAM,aAAa,OAAO;CAE1B,MAAM,WAA0B;EAC/B,eAAe;EACf,8BAAa,IAAI,MAAM,EAAC,aAAa;EACrC,aAAa,MAAM;EACnB,YAAY,MAAM;EAClB,gBAAgB,MAAM;EACtB,UAAU,MAAM;EAChB,OAAO,MAAM;EACb,QAAQ,MAAM;EACd;EACA;EACA,UAAU;GACT,cAAc,SAAS,SAAS;GAChC;GACA,mBAAmB,SAAS;GAC5B;EACD;AAED,QAAO,EACN,uBAAuB,KAAK,UAAU,UAAU,MAAM,EAAE,EACxD"}
@@ -6,8 +6,9 @@ interface StackManifestService {
6
6
  name: string;
7
7
  category: string;
8
8
  icon: string;
9
- image: string;
10
- imageTag: string;
9
+ image?: string;
10
+ imageTag?: string;
11
+ gitRepoUrl?: string;
11
12
  ports: {
12
13
  container: number;
13
14
  host?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"stack-manifest.d.cts","names":[],"sources":["../../src/generators/stack-manifest.ts"],"mappings":";;;UAUiB,oBAAA;EAChB,EAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA;EACA,KAAA;IAAS,SAAA;IAAmB,IAAA;IAAe,OAAA;IAAkB,WAAA;EAAA;EAC7D,OAAA;EACA,OAAA;EACA,YAAA;AAAA;AAAA,UAGgB,kBAAA;EAChB,EAAA;EACA,IAAA;EACA,IAAA;EACA,UAAA;AAAA;AAAA,UAGgB,aAAA;EAChB,aAAA;EACA,WAAA;EACA,WAAA;EACA,UAAA;EACA,cAAA;EACA,QAAA;EACA,KAAA;EACA,MAAA;EACA,QAAA,EAAU,oBAAA;EACV,MAAA,EAAQ,kBAAA;EACR,QAAA;IACC,YAAA;IACA,UAAA;IACA,iBAAA;EAAA;AAAA;;;;;iBAQc,qBAAA,CACf,QAAA,EAAU,cAAA,EACV,KAAA,EAAO,eAAA,GACL,MAAA"}
1
+ {"version":3,"file":"stack-manifest.d.cts","names":[],"sources":["../../src/generators/stack-manifest.ts"],"mappings":";;;UAUiB,oBAAA;EAChB,EAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA;EACA,UAAA;EACA,KAAA;IAAS,SAAA;IAAmB,IAAA;IAAe,OAAA;IAAkB,WAAA;EAAA;EAC7D,OAAA;EACA,OAAA;EACA,YAAA;AAAA;AAAA,UAGgB,kBAAA;EAChB,EAAA;EACA,IAAA;EACA,IAAA;EACA,UAAA;AAAA;AAAA,UAGgB,aAAA;EAChB,aAAA;EACA,WAAA;EACA,WAAA;EACA,UAAA;EACA,cAAA;EACA,QAAA;EACA,KAAA;EACA,MAAA;EACA,QAAA,EAAU,oBAAA;EACV,MAAA,EAAQ,kBAAA;EACR,QAAA;IACC,YAAA;IACA,UAAA;IACA,iBAAA;EAAA;AAAA;;;;;iBAQc,qBAAA,CACf,QAAA,EAAU,cAAA,EACV,KAAA,EAAO,eAAA,GACL,MAAA"}
@@ -6,8 +6,9 @@ interface StackManifestService {
6
6
  name: string;
7
7
  category: string;
8
8
  icon: string;
9
- image: string;
10
- imageTag: string;
9
+ image?: string;
10
+ imageTag?: string;
11
+ gitRepoUrl?: string;
11
12
  ports: {
12
13
  container: number;
13
14
  host?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"stack-manifest.d.mts","names":[],"sources":["../../src/generators/stack-manifest.ts"],"mappings":";;;UAUiB,oBAAA;EAChB,EAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA;EACA,KAAA;IAAS,SAAA;IAAmB,IAAA;IAAe,OAAA;IAAkB,WAAA;EAAA;EAC7D,OAAA;EACA,OAAA;EACA,YAAA;AAAA;AAAA,UAGgB,kBAAA;EAChB,EAAA;EACA,IAAA;EACA,IAAA;EACA,UAAA;AAAA;AAAA,UAGgB,aAAA;EAChB,aAAA;EACA,WAAA;EACA,WAAA;EACA,UAAA;EACA,cAAA;EACA,QAAA;EACA,KAAA;EACA,MAAA;EACA,QAAA,EAAU,oBAAA;EACV,MAAA,EAAQ,kBAAA;EACR,QAAA;IACC,YAAA;IACA,UAAA;IACA,iBAAA;EAAA;AAAA;;;;;iBAQc,qBAAA,CACf,QAAA,EAAU,cAAA,EACV,KAAA,EAAO,eAAA,GACL,MAAA"}
1
+ {"version":3,"file":"stack-manifest.d.mts","names":[],"sources":["../../src/generators/stack-manifest.ts"],"mappings":";;;UAUiB,oBAAA;EAChB,EAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA;EACA,UAAA;EACA,KAAA;IAAS,SAAA;IAAmB,IAAA;IAAe,OAAA;IAAkB,WAAA;EAAA;EAC7D,OAAA;EACA,OAAA;EACA,YAAA;AAAA;AAAA,UAGgB,kBAAA;EAChB,EAAA;EACA,IAAA;EACA,IAAA;EACA,UAAA;AAAA;AAAA,UAGgB,aAAA;EAChB,aAAA;EACA,WAAA;EACA,WAAA;EACA,UAAA;EACA,cAAA;EACA,QAAA;EACA,KAAA;EACA,MAAA;EACA,QAAA,EAAU,oBAAA;EACV,MAAA,EAAQ,kBAAA;EACR,QAAA;IACC,YAAA;IACA,UAAA;IACA,iBAAA;EAAA;AAAA;;;;;iBAQc,qBAAA,CACf,QAAA,EAAU,cAAA,EACV,KAAA,EAAO,eAAA,GACL,MAAA"}
@@ -18,6 +18,7 @@ function generateStackManifest(resolved, input) {
18
18
  icon: def.icon,
19
19
  image: def.image,
20
20
  imageTag: def.imageTag,
21
+ gitRepoUrl: def.gitSource?.repoUrl,
21
22
  ports: def.ports.map((p) => ({
22
23
  container: p.container,
23
24
  host: p.host,
@@ -1 +1 @@
1
- {"version":3,"file":"stack-manifest.mjs","names":[],"sources":["../../src/generators/stack-manifest.ts"],"sourcesContent":["/**\n * Stack manifest generator — produces a JSON manifest describing the\n * chosen services, skills, and configuration for a generated stack.\n *\n * This manifest is consumed by Mission Control to render dynamic\n * services/skills pages for managing the deployed stack.\n */\n\nimport type { GenerationInput, ResolverOutput } from \"../types.js\";\n\nexport interface StackManifestService {\n\tid: string;\n\tname: string;\n\tcategory: string;\n\ticon: string;\n\timage: string;\n\timageTag: string;\n\tports: { container: number; host?: number; exposed: boolean; description: string }[];\n\tdocsUrl: string;\n\taddedBy: string;\n\tdependencyOf?: string;\n}\n\nexport interface StackManifestSkill {\n\tid: string;\n\tname: string;\n\tpath: string;\n\tserviceIds: string[];\n}\n\nexport interface StackManifest {\n\tformatVersion: string;\n\tgeneratedAt: string;\n\tprojectName: string;\n\tdeployment?: string;\n\tdeploymentType?: string;\n\tplatform?: string;\n\tproxy?: string;\n\tdomain?: string;\n\tservices: StackManifestService[];\n\tskills: StackManifestSkill[];\n\tmetadata: {\n\t\tserviceCount: number;\n\t\tskillCount: number;\n\t\testimatedMemoryMB: number;\n\t};\n}\n\n/**\n * Generate stack-manifest.json from resolved output and generation input.\n * Returns a single-file record: { \"stack-manifest.json\": string }.\n */\nexport function generateStackManifest(\n\tresolved: ResolverOutput,\n\tinput: GenerationInput,\n): Record<string, string> {\n\t// Build a lookup of dependency chains: serviceId → requiredBy\n\tconst depMap = new Map<string, string>();\n\tfor (const dep of resolved.addedDependencies) {\n\t\tconst depId = dep.serviceId ?? dep.service;\n\t\tif (dep.requiredBy) {\n\t\t\tdepMap.set(depId, dep.requiredBy);\n\t\t}\n\t}\n\n\tconst services: StackManifestService[] = resolved.services.map((svc) => {\n\t\tconst def = svc.definition;\n\t\treturn {\n\t\t\tid: def.id,\n\t\t\tname: def.name,\n\t\t\tcategory: def.category,\n\t\t\ticon: def.icon,\n\t\t\timage: def.image,\n\t\t\timageTag: def.imageTag,\n\t\t\tports: def.ports.map((p) => ({\n\t\t\t\tcontainer: p.container,\n\t\t\t\thost: p.host,\n\t\t\t\texposed: p.exposed,\n\t\t\t\tdescription: p.description,\n\t\t\t})),\n\t\t\tdocsUrl: def.docsUrl,\n\t\t\taddedBy: svc.addedBy,\n\t\t\t...(svc.addedBy !== \"user\" && depMap.has(def.id) ? { dependencyOf: depMap.get(def.id) } : {}),\n\t\t};\n\t});\n\n\t// Collect skills from service definitions (SkillBinding has skillId, not name)\n\tconst skills: StackManifestSkill[] = [];\n\tconst seenSkillIds = new Set<string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const skill of svc.definition.skills) {\n\t\t\tconst skillKey = `${svc.definition.id}-${skill.skillId}`;\n\t\t\tif (seenSkillIds.has(skillKey)) continue;\n\t\t\tseenSkillIds.add(skillKey);\n\t\t\tskills.push({\n\t\t\t\tid: skillKey,\n\t\t\t\tname: skill.skillId,\n\t\t\t\tpath: `openclaw/skills/${skill.skillId}.md`,\n\t\t\t\tserviceIds: [svc.definition.id],\n\t\t\t});\n\t\t}\n\t}\n\n\tconst skillCount = skills.length;\n\n\tconst manifest: StackManifest = {\n\t\tformatVersion: \"1\",\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tprojectName: input.projectName,\n\t\tdeployment: input.deployment,\n\t\tdeploymentType: input.deploymentType,\n\t\tplatform: input.platform,\n\t\tproxy: input.proxy,\n\t\tdomain: input.domain,\n\t\tservices,\n\t\tskills,\n\t\tmetadata: {\n\t\t\tserviceCount: resolved.services.length,\n\t\t\tskillCount,\n\t\t\testimatedMemoryMB: resolved.estimatedMemoryMB,\n\t\t},\n\t};\n\n\treturn {\n\t\t\"stack-manifest.json\": JSON.stringify(manifest, null, 2),\n\t};\n}\n"],"mappings":";;;;;AAoDA,SAAgB,sBACf,UACA,OACyB;CAEzB,MAAM,yBAAS,IAAI,KAAqB;AACxC,MAAK,MAAM,OAAO,SAAS,mBAAmB;EAC7C,MAAM,QAAQ,IAAI,aAAa,IAAI;AACnC,MAAI,IAAI,WACP,QAAO,IAAI,OAAO,IAAI,WAAW;;CAInC,MAAM,WAAmC,SAAS,SAAS,KAAK,QAAQ;EACvE,MAAM,MAAM,IAAI;AAChB,SAAO;GACN,IAAI,IAAI;GACR,MAAM,IAAI;GACV,UAAU,IAAI;GACd,MAAM,IAAI;GACV,OAAO,IAAI;GACX,UAAU,IAAI;GACd,OAAO,IAAI,MAAM,KAAK,OAAO;IAC5B,WAAW,EAAE;IACb,MAAM,EAAE;IACR,SAAS,EAAE;IACX,aAAa,EAAE;IACf,EAAE;GACH,SAAS,IAAI;GACb,SAAS,IAAI;GACb,GAAI,IAAI,YAAY,UAAU,OAAO,IAAI,IAAI,GAAG,GAAG,EAAE,cAAc,OAAO,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;GAC5F;GACA;CAGF,MAAM,SAA+B,EAAE;CACvC,MAAM,+BAAe,IAAI,KAAa;AACtC,MAAK,MAAM,OAAO,SAAS,SAC1B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ;EAC1C,MAAM,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,MAAM;AAC/C,MAAI,aAAa,IAAI,SAAS,CAAE;AAChC,eAAa,IAAI,SAAS;AAC1B,SAAO,KAAK;GACX,IAAI;GACJ,MAAM,MAAM;GACZ,MAAM,mBAAmB,MAAM,QAAQ;GACvC,YAAY,CAAC,IAAI,WAAW,GAAG;GAC/B,CAAC;;CAIJ,MAAM,aAAa,OAAO;CAE1B,MAAM,WAA0B;EAC/B,eAAe;EACf,8BAAa,IAAI,MAAM,EAAC,aAAa;EACrC,aAAa,MAAM;EACnB,YAAY,MAAM;EAClB,gBAAgB,MAAM;EACtB,UAAU,MAAM;EAChB,OAAO,MAAM;EACb,QAAQ,MAAM;EACd;EACA;EACA,UAAU;GACT,cAAc,SAAS,SAAS;GAChC;GACA,mBAAmB,SAAS;GAC5B;EACD;AAED,QAAO,EACN,uBAAuB,KAAK,UAAU,UAAU,MAAM,EAAE,EACxD"}
1
+ {"version":3,"file":"stack-manifest.mjs","names":[],"sources":["../../src/generators/stack-manifest.ts"],"sourcesContent":["/**\n * Stack manifest generator — produces a JSON manifest describing the\n * chosen services, skills, and configuration for a generated stack.\n *\n * This manifest is consumed by Mission Control to render dynamic\n * services/skills pages for managing the deployed stack.\n */\n\nimport type { GenerationInput, ResolverOutput } from \"../types.js\";\n\nexport interface StackManifestService {\n\tid: string;\n\tname: string;\n\tcategory: string;\n\ticon: string;\n\timage?: string;\n\timageTag?: string;\n\tgitRepoUrl?: string;\n\tports: { container: number; host?: number; exposed: boolean; description: string }[];\n\tdocsUrl: string;\n\taddedBy: string;\n\tdependencyOf?: string;\n}\n\nexport interface StackManifestSkill {\n\tid: string;\n\tname: string;\n\tpath: string;\n\tserviceIds: string[];\n}\n\nexport interface StackManifest {\n\tformatVersion: string;\n\tgeneratedAt: string;\n\tprojectName: string;\n\tdeployment?: string;\n\tdeploymentType?: string;\n\tplatform?: string;\n\tproxy?: string;\n\tdomain?: string;\n\tservices: StackManifestService[];\n\tskills: StackManifestSkill[];\n\tmetadata: {\n\t\tserviceCount: number;\n\t\tskillCount: number;\n\t\testimatedMemoryMB: number;\n\t};\n}\n\n/**\n * Generate stack-manifest.json from resolved output and generation input.\n * Returns a single-file record: { \"stack-manifest.json\": string }.\n */\nexport function generateStackManifest(\n\tresolved: ResolverOutput,\n\tinput: GenerationInput,\n): Record<string, string> {\n\t// Build a lookup of dependency chains: serviceId → requiredBy\n\tconst depMap = new Map<string, string>();\n\tfor (const dep of resolved.addedDependencies) {\n\t\tconst depId = dep.serviceId ?? dep.service;\n\t\tif (dep.requiredBy) {\n\t\t\tdepMap.set(depId, dep.requiredBy);\n\t\t}\n\t}\n\n\tconst services: StackManifestService[] = resolved.services.map((svc) => {\n\t\tconst def = svc.definition;\n\t\treturn {\n\t\t\tid: def.id,\n\t\t\tname: def.name,\n\t\t\tcategory: def.category,\n\t\t\ticon: def.icon,\n\t\t\timage: def.image,\n\t\t\timageTag: def.imageTag,\n\t\t\tgitRepoUrl: def.gitSource?.repoUrl,\n\t\t\tports: def.ports.map((p) => ({\n\t\t\t\tcontainer: p.container,\n\t\t\t\thost: p.host,\n\t\t\t\texposed: p.exposed,\n\t\t\t\tdescription: p.description,\n\t\t\t})),\n\t\t\tdocsUrl: def.docsUrl,\n\t\t\taddedBy: svc.addedBy,\n\t\t\t...(svc.addedBy !== \"user\" && depMap.has(def.id) ? { dependencyOf: depMap.get(def.id) } : {}),\n\t\t};\n\t});\n\n\t// Collect skills from service definitions (SkillBinding has skillId, not name)\n\tconst skills: StackManifestSkill[] = [];\n\tconst seenSkillIds = new Set<string>();\n\tfor (const svc of resolved.services) {\n\t\tfor (const skill of svc.definition.skills) {\n\t\t\tconst skillKey = `${svc.definition.id}-${skill.skillId}`;\n\t\t\tif (seenSkillIds.has(skillKey)) continue;\n\t\t\tseenSkillIds.add(skillKey);\n\t\t\tskills.push({\n\t\t\t\tid: skillKey,\n\t\t\t\tname: skill.skillId,\n\t\t\t\tpath: `openclaw/skills/${skill.skillId}.md`,\n\t\t\t\tserviceIds: [svc.definition.id],\n\t\t\t});\n\t\t}\n\t}\n\n\tconst skillCount = skills.length;\n\n\tconst manifest: StackManifest = {\n\t\tformatVersion: \"1\",\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tprojectName: input.projectName,\n\t\tdeployment: input.deployment,\n\t\tdeploymentType: input.deploymentType,\n\t\tplatform: input.platform,\n\t\tproxy: input.proxy,\n\t\tdomain: input.domain,\n\t\tservices,\n\t\tskills,\n\t\tmetadata: {\n\t\t\tserviceCount: resolved.services.length,\n\t\t\tskillCount,\n\t\t\testimatedMemoryMB: resolved.estimatedMemoryMB,\n\t\t},\n\t};\n\n\treturn {\n\t\t\"stack-manifest.json\": JSON.stringify(manifest, null, 2),\n\t};\n}\n"],"mappings":";;;;;AAqDA,SAAgB,sBACf,UACA,OACyB;CAEzB,MAAM,yBAAS,IAAI,KAAqB;AACxC,MAAK,MAAM,OAAO,SAAS,mBAAmB;EAC7C,MAAM,QAAQ,IAAI,aAAa,IAAI;AACnC,MAAI,IAAI,WACP,QAAO,IAAI,OAAO,IAAI,WAAW;;CAInC,MAAM,WAAmC,SAAS,SAAS,KAAK,QAAQ;EACvE,MAAM,MAAM,IAAI;AAChB,SAAO;GACN,IAAI,IAAI;GACR,MAAM,IAAI;GACV,UAAU,IAAI;GACd,MAAM,IAAI;GACV,OAAO,IAAI;GACX,UAAU,IAAI;GACd,YAAY,IAAI,WAAW;GAC3B,OAAO,IAAI,MAAM,KAAK,OAAO;IAC5B,WAAW,EAAE;IACb,MAAM,EAAE;IACR,SAAS,EAAE;IACX,aAAa,EAAE;IACf,EAAE;GACH,SAAS,IAAI;GACb,SAAS,IAAI;GACb,GAAI,IAAI,YAAY,UAAU,OAAO,IAAI,IAAI,GAAG,GAAG,EAAE,cAAc,OAAO,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE;GAC5F;GACA;CAGF,MAAM,SAA+B,EAAE;CACvC,MAAM,+BAAe,IAAI,KAAa;AACtC,MAAK,MAAM,OAAO,SAAS,SAC1B,MAAK,MAAM,SAAS,IAAI,WAAW,QAAQ;EAC1C,MAAM,WAAW,GAAG,IAAI,WAAW,GAAG,GAAG,MAAM;AAC/C,MAAI,aAAa,IAAI,SAAS,CAAE;AAChC,eAAa,IAAI,SAAS;AAC1B,SAAO,KAAK;GACX,IAAI;GACJ,MAAM,MAAM;GACZ,MAAM,mBAAmB,MAAM,QAAQ;GACvC,YAAY,CAAC,IAAI,WAAW,GAAG;GAC/B,CAAC;;CAIJ,MAAM,aAAa,OAAO;CAE1B,MAAM,WAA0B;EAC/B,eAAe;EACf,8BAAa,IAAI,MAAM,EAAC,aAAa;EACrC,aAAa,MAAM;EACnB,YAAY,MAAM;EAClB,gBAAgB,MAAM;EACtB,UAAU,MAAM;EAChB,OAAO,MAAM;EACb,QAAQ,MAAM;EACd;EACA;EACA,UAAU;GACT,cAAc,SAAS,SAAS;GAChC;GACA,mBAAmB,SAAS;GAC5B;EACD;AAED,QAAO,EACN,uBAAuB,KAAK,UAAU,UAAU,MAAM,EAAE,EACxD"}
@@ -1,4 +1,4 @@
1
- const require_vi_2VT5v0um = require("../vi.2VT5v0um-CRqXre87.cjs");
1
+ const require_vi_2VT5v0um = require("../vi.2VT5v0um-iVBt6Fyq.cjs");
2
2
  const require_resolver = require("../resolver.cjs");
3
3
  const require_generators_traefik = require("./traefik.cjs");
4
4
  //#region src/generators/traefik.test.ts
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-DvC3SVNc.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "../vi.2VT5v0um-C_jmO7m2.mjs";
2
2
  import { resolve } from "../resolver.mjs";
3
3
  import { generateTraefikConfig } from "./traefik.mjs";
4
4
  //#region src/generators/traefik.test.ts
package/dist/index.cjs CHANGED
@@ -8,6 +8,7 @@ const require_generators_postgres_init = require("./generators/postgres-init.cjs
8
8
  const require_composer = require("./composer.cjs");
9
9
  const require_errors = require("./errors.cjs");
10
10
  const require_generators_caddy = require("./generators/caddy.cjs");
11
+ const require_generators_clone_repos = require("./generators/clone-repos.cjs");
11
12
  const require_generators_env = require("./generators/env.cjs");
12
13
  const require_generators_grafana = require("./generators/grafana.cjs");
13
14
  const require_generators_health_check = require("./generators/health-check.cjs");
@@ -23,13 +24,15 @@ const require_presets_registry = require("./presets/registry.cjs");
23
24
  const require_deployers_coolify = require("./deployers/coolify.cjs");
24
25
  const require_deployers_dokploy = require("./deployers/dokploy.cjs");
25
26
  const require_deployers_index = require("./deployers/index.cjs");
27
+ const require_track_analytics = require("./track-analytics.cjs");
26
28
  const require_port_scanner = require("./port-scanner.cjs");
27
29
  const require_schema = require("./schema.cjs");
28
- const require_skill_manifest = require("./skill-manifest--IgY9REK.cjs");
30
+ const require_skill_manifest = require("./skill-manifest-B8znSsym.cjs");
29
31
  const require_types = require("./types.cjs");
30
32
  const require_version_manager = require("./version-manager.cjs");
31
33
  exports.AddedDependencySchema = require_schema.AddedDependencySchema;
32
34
  exports.ApiErrorSchema = require_schema.ApiErrorSchema;
35
+ exports.BuildContextSchema = require_schema.BuildContextSchema;
33
36
  exports.CURRENT_CONFIG_VERSION = require_migrations.CURRENT_CONFIG_VERSION;
34
37
  exports.ComposeOptionsSchema = require_schema.ComposeOptionsSchema;
35
38
  exports.CoolifyDeployer = require_deployers_coolify.CoolifyDeployer;
@@ -41,6 +44,7 @@ exports.DokployDeployer = require_deployers_dokploy.DokployDeployer;
41
44
  exports.EnvVariableSchema = require_schema.EnvVariableSchema;
42
45
  exports.ErrorSchema = require_schema.ErrorSchema;
43
46
  exports.GenerationInputSchema = require_schema.GenerationInputSchema;
47
+ exports.GitSourceSchema = require_schema.GitSourceSchema;
44
48
  exports.HealthCheckSchema = require_schema.HealthCheckSchema;
45
49
  exports.MaturitySchema = require_schema.MaturitySchema;
46
50
  exports.NativePlatformSchema = require_schema.NativePlatformSchema;
@@ -67,6 +71,7 @@ exports.ValidateResponseSchema = require_schema.ValidateResponseSchema;
67
71
  exports.ValidationError = require_errors.ValidationError;
68
72
  exports.VolumeMappingSchema = require_schema.VolumeMappingSchema;
69
73
  exports.WarningSchema = require_schema.WarningSchema;
74
+ exports.buildAnalyticsPayload = require_track_analytics.buildAnalyticsPayload;
70
75
  exports.checkCompatibility = require_version_manager.checkCompatibility;
71
76
  exports.compose = require_composer.compose;
72
77
  exports.composeMultiFile = require_composer.composeMultiFile;
@@ -74,6 +79,7 @@ exports.deployerRegistry = require_deployers_index.deployerRegistry;
74
79
  exports.formatPortConflicts = require_port_scanner.formatPortConflicts;
75
80
  exports.generate = require_generate.generate;
76
81
  exports.generateCaddyfile = require_generators_caddy.generateCaddyfile;
82
+ exports.generateCloneScripts = require_generators_clone_repos.generateCloneScripts;
77
83
  exports.generateEnvFiles = require_generators_env.generateEnvFiles;
78
84
  exports.generateGrafanaConfig = require_generators_grafana.generateGrafanaConfig;
79
85
  exports.generateGrafanaDashboard = require_generators_grafana.generateGrafanaDashboard;
@@ -114,4 +120,5 @@ exports.resolvedWithOnlyServices = require_bare_metal_partition.resolvedWithOnly
114
120
  exports.scanPortConflicts = require_port_scanner.scanPortConflicts;
115
121
  exports.serviceRegistry = require_services_registry.serviceRegistry;
116
122
  exports.skillPackRegistry = require_skills_registry.skillPackRegistry;
123
+ exports.trackAnalytics = require_track_analytics.trackAnalytics;
117
124
  exports.validate = require_validator.validate;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { A as ServiceDefinitionSchema, C as PresetSchema, D as ResourceLimitsSchema, E as ResolverOutputSchema, F as VolumeMappingSchema, I as WarningSchema, M as SkillPackSchema, N as ValidateRequestSchema, O as RestartPolicySchema, P as ValidateResponseSchema, S as PortMappingSchema, T as ResolvedServiceSchema, _ as NativeRecipeSchema, b as OutputFormatSchema, c as DeploymentTargetSchema, d as ErrorSchema, f as GenerationInputSchema, g as NativePlatformSchema, h as MaturitySchema, i as ComposeOptionsSchema, j as SkillBindingSchema, k as ServiceCategorySchema, l as DeploymentTypeSchema, m as HealthCheckSchema, o as DeploySchema, r as ApiErrorSchema, s as DeployTargetSchema, t as AddedDependencySchema, u as EnvVariableSchema, v as OpenclawImageVariantSchema, w as ProxyTypeSchema, x as PlatformSchema, y as OpenclawInstallMethodSchema } from "./schema-C_hc7e4k.cjs";
2
- import { AddedDependency, AiProvider, ApiError, CategoryInfo, ComposeOptions, Deploy, DeployTarget, DeploymentTarget, DeploymentType, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, GsdRuntime, HealthCheck, Maturity, NativePlatform, NativeRecipe, OpenclawImageVariant, OpenclawInstallMethod, OutputFormat, Platform, PortMapping, Preset, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, ValidateRequest, ValidateResponse, VolumeMapping, Warning } from "./types.cjs";
1
+ import { A as RestartPolicySchema, C as PlatformSchema, D as ResolvedServiceSchema, E as ProxyTypeSchema, F as ValidateRequestSchema, I as ValidateResponseSchema, L as VolumeMappingSchema, M as ServiceDefinitionSchema, N as SkillBindingSchema, O as ResolverOutputSchema, P as SkillPackSchema, R as WarningSchema, S as OutputFormatSchema, T as PresetSchema, _ as MaturitySchema, a as ComposeOptionsSchema, b as OpenclawImageVariantSchema, c as DeployTargetSchema, d as EnvVariableSchema, f as ErrorSchema, g as HealthCheckSchema, i as BuildContextSchema, j as ServiceCategorySchema, k as ResourceLimitsSchema, l as DeploymentTargetSchema, m as GitSourceSchema, p as GenerationInputSchema, r as ApiErrorSchema, s as DeploySchema, t as AddedDependencySchema, u as DeploymentTypeSchema, v as NativePlatformSchema, w as PortMappingSchema, x as OpenclawInstallMethodSchema, y as NativeRecipeSchema } from "./schema-tn5RK8CM.cjs";
2
+ import { AddedDependency, AiProvider, ApiError, BuildContext, CategoryInfo, ComposeOptions, Deploy, DeployTarget, DeploymentTarget, DeploymentType, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, GitSource, GsdRuntime, HealthCheck, Maturity, NativePlatform, NativeRecipe, OpenclawImageVariant, OpenclawInstallMethod, OutputFormat, Platform, PortMapping, Preset, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, ValidateRequest, ValidateResponse, VolumeMapping, Warning } from "./types.cjs";
3
3
  import { partitionBareMetal, platformToNativePlatform, resolvedWithOnlyServices } from "./bare-metal-partition.cjs";
4
4
  import { ComposeResult, compose, composeMultiFile } from "./composer.cjs";
5
5
  import { d as PaasDeployer, f as PaasServer, i as DeployTarget$1, n as DeployResult, r as DeployStep, t as DeployInput } from "./types-CR83OJiq.cjs";
@@ -9,6 +9,7 @@ import { deployerRegistry, getAvailableDeployers, getDeployer } from "./deployer
9
9
  import { StackConfigError, ValidationError } from "./errors.cjs";
10
10
  import { generate, generateServicesDoc } from "./generate.cjs";
11
11
  import { generateCaddyfile } from "./generators/caddy.cjs";
12
+ import { generateCloneScripts } from "./generators/clone-repos.cjs";
12
13
  import { EnvVarGroup, generateEnvFiles, getStructuredEnvVars } from "./generators/env.cjs";
13
14
  import { generateGrafanaConfig, generateGrafanaDashboard } from "./generators/grafana.cjs";
14
15
  import { generateHealthCheck } from "./generators/health-check.cjs";
@@ -19,6 +20,7 @@ import { generateReadme } from "./generators/readme.cjs";
19
20
  import { generateScripts } from "./generators/scripts.cjs";
20
21
  import { generateSkillFiles } from "./generators/skills.cjs";
21
22
  import { StackManifest, StackManifestService, StackManifestSkill, generateStackManifest } from "./generators/stack-manifest.cjs";
23
+ import { AnalyticsPayload, buildAnalyticsPayload, trackAnalytics } from "./track-analytics.cjs";
22
24
  import { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from "./migrations.cjs";
23
25
  import { PortConflict, formatPortConflicts, scanPortConflicts } from "./port-scanner.cjs";
24
26
  import { getAllPresets, getPresetById, presetRegistry } from "./presets/registry.cjs";
@@ -28,4 +30,4 @@ import { getAllSkillPacks, getCompatibleSkillPacks, getSkillPackById, skillPackR
28
30
  import { SkillManifestEntry, getAllManifestSkills, getManifestSkillById, getManifestSkillCount } from "./skills/skill-manifest.cjs";
29
31
  import { validate } from "./validator.cjs";
30
32
  import { checkCompatibility, getImageReference, getImageTag, pinImageTags } from "./version-manager.cjs";
31
- export { type AddedDependency, AddedDependencySchema, type AiProvider, type ApiError, ApiErrorSchema, CURRENT_CONFIG_VERSION, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GsdRuntime, type HealthCheck, HealthCheckSchema, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateCaddyfile, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompatibleSkillPacks, getDbRequirements, getDeployer, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, validate };
33
+ export { type AddedDependency, AddedDependencySchema, type AiProvider, type AnalyticsPayload, type ApiError, ApiErrorSchema, type BuildContext, BuildContextSchema, CURRENT_CONFIG_VERSION, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GitSource, GitSourceSchema, type GsdRuntime, type HealthCheck, HealthCheckSchema, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, buildAnalyticsPayload, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompatibleSkillPacks, getDbRequirements, getDeployer, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, validate };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { A as ServiceDefinitionSchema, C as PresetSchema, D as ResourceLimitsSchema, E as ResolverOutputSchema, F as VolumeMappingSchema, I as WarningSchema, M as SkillPackSchema, N as ValidateRequestSchema, O as RestartPolicySchema, P as ValidateResponseSchema, S as PortMappingSchema, T as ResolvedServiceSchema, _ as NativeRecipeSchema, b as OutputFormatSchema, c as DeploymentTargetSchema, d as ErrorSchema, f as GenerationInputSchema, g as NativePlatformSchema, h as MaturitySchema, i as ComposeOptionsSchema, j as SkillBindingSchema, k as ServiceCategorySchema, l as DeploymentTypeSchema, m as HealthCheckSchema, o as DeploySchema, r as ApiErrorSchema, s as DeployTargetSchema, t as AddedDependencySchema, u as EnvVariableSchema, v as OpenclawImageVariantSchema, w as ProxyTypeSchema, x as PlatformSchema, y as OpenclawInstallMethodSchema } from "./schema-CaesJaS2.mjs";
2
- import { AddedDependency, AiProvider, ApiError, CategoryInfo, ComposeOptions, Deploy, DeployTarget, DeploymentTarget, DeploymentType, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, GsdRuntime, HealthCheck, Maturity, NativePlatform, NativeRecipe, OpenclawImageVariant, OpenclawInstallMethod, OutputFormat, Platform, PortMapping, Preset, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, ValidateRequest, ValidateResponse, VolumeMapping, Warning } from "./types.mjs";
1
+ import { A as RestartPolicySchema, C as PlatformSchema, D as ResolvedServiceSchema, E as ProxyTypeSchema, F as ValidateRequestSchema, I as ValidateResponseSchema, L as VolumeMappingSchema, M as ServiceDefinitionSchema, N as SkillBindingSchema, O as ResolverOutputSchema, P as SkillPackSchema, R as WarningSchema, S as OutputFormatSchema, T as PresetSchema, _ as MaturitySchema, a as ComposeOptionsSchema, b as OpenclawImageVariantSchema, c as DeployTargetSchema, d as EnvVariableSchema, f as ErrorSchema, g as HealthCheckSchema, i as BuildContextSchema, j as ServiceCategorySchema, k as ResourceLimitsSchema, l as DeploymentTargetSchema, m as GitSourceSchema, p as GenerationInputSchema, r as ApiErrorSchema, s as DeploySchema, t as AddedDependencySchema, u as DeploymentTypeSchema, v as NativePlatformSchema, w as PortMappingSchema, x as OpenclawInstallMethodSchema, y as NativeRecipeSchema } from "./schema-eX44HhRp.mjs";
2
+ import { AddedDependency, AiProvider, ApiError, BuildContext, CategoryInfo, ComposeOptions, Deploy, DeployTarget, DeploymentTarget, DeploymentType, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, GitSource, GsdRuntime, HealthCheck, Maturity, NativePlatform, NativeRecipe, OpenclawImageVariant, OpenclawInstallMethod, OutputFormat, Platform, PortMapping, Preset, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, ValidateRequest, ValidateResponse, VolumeMapping, Warning } from "./types.mjs";
3
3
  import { partitionBareMetal, platformToNativePlatform, resolvedWithOnlyServices } from "./bare-metal-partition.mjs";
4
4
  import { ComposeResult, compose, composeMultiFile } from "./composer.mjs";
5
5
  import { d as PaasDeployer, f as PaasServer, i as DeployTarget$1, n as DeployResult, r as DeployStep, t as DeployInput } from "./types-zYjGTuyn.mjs";
@@ -9,6 +9,7 @@ import { deployerRegistry, getAvailableDeployers, getDeployer } from "./deployer
9
9
  import { StackConfigError, ValidationError } from "./errors.mjs";
10
10
  import { generate, generateServicesDoc } from "./generate.mjs";
11
11
  import { generateCaddyfile } from "./generators/caddy.mjs";
12
+ import { generateCloneScripts } from "./generators/clone-repos.mjs";
12
13
  import { EnvVarGroup, generateEnvFiles, getStructuredEnvVars } from "./generators/env.mjs";
13
14
  import { generateGrafanaConfig, generateGrafanaDashboard } from "./generators/grafana.mjs";
14
15
  import { generateHealthCheck } from "./generators/health-check.mjs";
@@ -19,6 +20,7 @@ import { generateReadme } from "./generators/readme.mjs";
19
20
  import { generateScripts } from "./generators/scripts.mjs";
20
21
  import { generateSkillFiles } from "./generators/skills.mjs";
21
22
  import { StackManifest, StackManifestService, StackManifestSkill, generateStackManifest } from "./generators/stack-manifest.mjs";
23
+ import { AnalyticsPayload, buildAnalyticsPayload, trackAnalytics } from "./track-analytics.mjs";
22
24
  import { CURRENT_CONFIG_VERSION, migrateConfig, needsMigration } from "./migrations.mjs";
23
25
  import { PortConflict, formatPortConflicts, scanPortConflicts } from "./port-scanner.mjs";
24
26
  import { getAllPresets, getPresetById, presetRegistry } from "./presets/registry.mjs";
@@ -28,4 +30,4 @@ import { getAllSkillPacks, getCompatibleSkillPacks, getSkillPackById, skillPackR
28
30
  import { SkillManifestEntry, getAllManifestSkills, getManifestSkillById, getManifestSkillCount } from "./skills/skill-manifest.mjs";
29
31
  import { validate } from "./validator.mjs";
30
32
  import { checkCompatibility, getImageReference, getImageTag, pinImageTags } from "./version-manager.mjs";
31
- export { type AddedDependency, AddedDependencySchema, type AiProvider, type ApiError, ApiErrorSchema, CURRENT_CONFIG_VERSION, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GsdRuntime, type HealthCheck, HealthCheckSchema, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateCaddyfile, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompatibleSkillPacks, getDbRequirements, getDeployer, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, validate };
33
+ export { type AddedDependency, AddedDependencySchema, type AiProvider, type AnalyticsPayload, type ApiError, ApiErrorSchema, type BuildContext, BuildContextSchema, CURRENT_CONFIG_VERSION, type CategoryInfo, type ComposeOptions, ComposeOptionsSchema, type ComposeResult, CoolifyDeployer, type Deploy, DeploySchema, type DeployTarget, DeployTargetSchema, type DeploymentTarget, DeploymentTargetSchema, type DeploymentType, DeploymentTypeSchema, DokployDeployer, type EnvVarGroup, type EnvVariable, EnvVariableSchema, ErrorSchema, type GeneratedFiles, type GenerationInput, GenerationInputSchema, type GenerationMetadata, type GenerationResult, type GitSource, GitSourceSchema, type GsdRuntime, type HealthCheck, HealthCheckSchema, type Maturity, MaturitySchema, type NativePlatform, NativePlatformSchema, type NativeRecipe, NativeRecipeSchema, type OpenclawImageVariant, OpenclawImageVariantSchema, type OpenclawInstallMethod, OpenclawInstallMethodSchema, type OutputFormat, OutputFormatSchema, type DeployInput as PaasDeployInput, type DeployResult as PaasDeployResult, type DeployStep as PaasDeployStep, type DeployTarget$1 as PaasDeployTarget, type PaasDeployer, type PaasServer, type Platform, PlatformSchema, type PortConflict, type PortMapping, PortMappingSchema, type Preset, PresetSchema, type ProxyType, ProxyTypeSchema, type ResolvedService, ResolvedServiceSchema, type ResolverError, type ResolverInput, type ResolverOutput, ResolverOutputSchema, type ResourceLimits, ResourceLimitsSchema, type RestartPolicy, RestartPolicySchema, SERVICE_CATEGORIES, type ServiceCategory, ServiceCategorySchema, type ServiceDefinition, ServiceDefinitionSchema, type SkillBinding, SkillBindingSchema, type SkillManifestEntry, type SkillPack, SkillPackSchema, StackConfigError, type StackManifest, type StackManifestService, type StackManifestSkill, type ValidateRequest, ValidateRequestSchema, type ValidateResponse, ValidateResponseSchema, ValidationError, type VolumeMapping, VolumeMappingSchema, type Warning, WarningSchema, buildAnalyticsPayload, checkCompatibility, compose, composeMultiFile, deployerRegistry, formatPortConflicts, generate, generateCaddyfile, generateCloneScripts, generateEnvFiles, generateGrafanaConfig, generateGrafanaDashboard, generateHealthCheck, generateN8nWorkflows, generatePostgresInit, generatePrometheusConfig, generateReadme, generateScripts, generateServicesDoc, generateSkillFiles, generateStackManifest, getAllManifestSkills, getAllPresets, getAllServices, getAllSkillPacks, getAvailableDeployers, getCompatibleSkillPacks, getDbRequirements, getDeployer, getImageReference, getImageTag, getManifestSkillById, getManifestSkillCount, getPresetById, getServiceById, getServicesByCategory, getSkillPackById, getStructuredEnvVars, migrateConfig, needsMigration, partitionBareMetal, pinImageTags, platformToNativePlatform, presetRegistry, resolve, resolvedWithOnlyServices, scanPortConflicts, serviceRegistry, skillPackRegistry, trackAnalytics, validate };