@better-openclaw/core 1.0.23 → 1.0.25

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 (335) hide show
  1. package/dist/addon-stack.cjs +673 -0
  2. package/dist/addon-stack.cjs.map +1 -0
  3. package/dist/addon-stack.d.cts +23 -0
  4. package/dist/addon-stack.d.cts.map +1 -0
  5. package/dist/addon-stack.d.mts +23 -0
  6. package/dist/addon-stack.d.mts.map +1 -0
  7. package/dist/addon-stack.mjs +671 -0
  8. package/dist/addon-stack.mjs.map +1 -0
  9. package/dist/addon-stack.test.cjs +349 -0
  10. package/dist/addon-stack.test.cjs.map +1 -0
  11. package/dist/addon-stack.test.d.cts +1 -0
  12. package/dist/addon-stack.test.d.mts +1 -0
  13. package/dist/addon-stack.test.mjs +349 -0
  14. package/dist/addon-stack.test.mjs.map +1 -0
  15. package/dist/bare-metal-partition.test.cjs +20 -21
  16. package/dist/bare-metal-partition.test.cjs.map +1 -1
  17. package/dist/bare-metal-partition.test.mjs +4 -5
  18. package/dist/bare-metal-partition.test.mjs.map +1 -1
  19. package/dist/composer.cjs +17 -1
  20. package/dist/composer.cjs.map +1 -1
  21. package/dist/composer.d.cts +24 -1
  22. package/dist/composer.d.cts.map +1 -1
  23. package/dist/composer.d.mts +24 -1
  24. package/dist/composer.d.mts.map +1 -1
  25. package/dist/composer.mjs +14 -2
  26. package/dist/composer.mjs.map +1 -1
  27. package/dist/composer.snapshot.test.cjs +20 -20
  28. package/dist/composer.snapshot.test.cjs.map +1 -1
  29. package/dist/composer.snapshot.test.mjs +2 -2
  30. package/dist/composer.test.cjs +53 -52
  31. package/dist/composer.test.cjs.map +1 -1
  32. package/dist/composer.test.mjs +4 -3
  33. package/dist/composer.test.mjs.map +1 -1
  34. package/dist/deployers/strip-host-ports.test.cjs +26 -26
  35. package/dist/deployers/strip-host-ports.test.cjs.map +1 -1
  36. package/dist/deployers/strip-host-ports.test.mjs +1 -1
  37. package/dist/generate.cjs +8 -4
  38. package/dist/generate.cjs.map +1 -1
  39. package/dist/generate.d.cts.map +1 -1
  40. package/dist/generate.d.mts.map +1 -1
  41. package/dist/generate.mjs +9 -5
  42. package/dist/generate.mjs.map +1 -1
  43. package/dist/generate.test.cjs +55 -55
  44. package/dist/generate.test.cjs.map +1 -1
  45. package/dist/generate.test.mjs +2 -2
  46. package/dist/generate.test.mjs.map +1 -1
  47. package/dist/generators/bare-metal-install.test.cjs +18 -18
  48. package/dist/generators/bare-metal-install.test.cjs.map +1 -1
  49. package/dist/generators/bare-metal-install.test.mjs +1 -1
  50. package/dist/generators/caddy.test.cjs +13 -13
  51. package/dist/generators/caddy.test.cjs.map +1 -1
  52. package/dist/generators/caddy.test.mjs +1 -1
  53. package/dist/generators/clone-repos.cjs +140 -0
  54. package/dist/generators/clone-repos.cjs.map +1 -0
  55. package/dist/generators/clone-repos.d.cts +11 -0
  56. package/dist/generators/clone-repos.d.cts.map +1 -0
  57. package/dist/generators/clone-repos.d.mts +11 -0
  58. package/dist/generators/clone-repos.d.mts.map +1 -0
  59. package/dist/generators/clone-repos.mjs +139 -0
  60. package/dist/generators/clone-repos.mjs.map +1 -0
  61. package/dist/generators/clone-repos.test.cjs +140 -0
  62. package/dist/generators/clone-repos.test.cjs.map +1 -0
  63. package/dist/generators/clone-repos.test.d.cts +1 -0
  64. package/dist/generators/clone-repos.test.d.mts +1 -0
  65. package/dist/generators/clone-repos.test.mjs +141 -0
  66. package/dist/generators/clone-repos.test.mjs.map +1 -0
  67. package/dist/generators/env.test.cjs +17 -17
  68. package/dist/generators/env.test.cjs.map +1 -1
  69. package/dist/generators/env.test.mjs +1 -1
  70. package/dist/generators/health-check.test.cjs +39 -39
  71. package/dist/generators/health-check.test.cjs.map +1 -1
  72. package/dist/generators/health-check.test.mjs +1 -1
  73. package/dist/generators/postgres-init.cjs +20 -0
  74. package/dist/generators/postgres-init.cjs.map +1 -1
  75. package/dist/generators/postgres-init.d.cts.map +1 -1
  76. package/dist/generators/postgres-init.d.mts.map +1 -1
  77. package/dist/generators/postgres-init.mjs +20 -0
  78. package/dist/generators/postgres-init.mjs.map +1 -1
  79. package/dist/generators/scripts.cjs +332 -3
  80. package/dist/generators/scripts.cjs.map +1 -1
  81. package/dist/generators/scripts.d.cts +3 -1
  82. package/dist/generators/scripts.d.cts.map +1 -1
  83. package/dist/generators/scripts.d.mts +3 -1
  84. package/dist/generators/scripts.d.mts.map +1 -1
  85. package/dist/generators/scripts.mjs +332 -3
  86. package/dist/generators/scripts.mjs.map +1 -1
  87. package/dist/generators/scripts.test.cjs +57 -23
  88. package/dist/generators/scripts.test.cjs.map +1 -1
  89. package/dist/generators/scripts.test.mjs +39 -5
  90. package/dist/generators/scripts.test.mjs.map +1 -1
  91. package/dist/generators/stack-manifest.cjs +1 -0
  92. package/dist/generators/stack-manifest.cjs.map +1 -1
  93. package/dist/generators/stack-manifest.d.cts +3 -2
  94. package/dist/generators/stack-manifest.d.cts.map +1 -1
  95. package/dist/generators/stack-manifest.d.mts +3 -2
  96. package/dist/generators/stack-manifest.d.mts.map +1 -1
  97. package/dist/generators/stack-manifest.mjs +1 -0
  98. package/dist/generators/stack-manifest.mjs.map +1 -1
  99. package/dist/generators/traefik.test.cjs +32 -32
  100. package/dist/generators/traefik.test.cjs.map +1 -1
  101. package/dist/generators/traefik.test.mjs +1 -1
  102. package/dist/index.cjs +28 -5
  103. package/dist/index.d.cts +7 -4
  104. package/dist/index.d.mts +7 -4
  105. package/dist/index.mjs +10 -7
  106. package/dist/migrations.test.cjs +16 -16
  107. package/dist/migrations.test.cjs.map +1 -1
  108. package/dist/migrations.test.mjs +1 -1
  109. package/dist/presets/registry.cjs.map +1 -1
  110. package/dist/presets/registry.d.cts.map +1 -1
  111. package/dist/presets/registry.d.mts.map +1 -1
  112. package/dist/presets/registry.mjs.map +1 -1
  113. package/dist/presets/registry.test.cjs +14 -14
  114. package/dist/presets/registry.test.cjs.map +1 -1
  115. package/dist/presets/registry.test.mjs +1 -1
  116. package/dist/resolver.cjs +8 -0
  117. package/dist/resolver.cjs.map +1 -1
  118. package/dist/resolver.mjs +9 -1
  119. package/dist/resolver.mjs.map +1 -1
  120. package/dist/resolver.test.cjs +125 -90
  121. package/dist/resolver.test.cjs.map +1 -1
  122. package/dist/resolver.test.mjs +47 -12
  123. package/dist/resolver.test.mjs.map +1 -1
  124. package/dist/{schema-B4c64P8N.d.cts → schema-CKBRu-Rt.d.cts} +355 -8
  125. package/dist/schema-CKBRu-Rt.d.cts.map +1 -0
  126. package/dist/{schema-CXNhYci1.d.mts → schema-Dn-_Jpb6.d.mts} +355 -8
  127. package/dist/schema-Dn-_Jpb6.d.mts.map +1 -0
  128. package/dist/schema.cjs +160 -5
  129. package/dist/schema.cjs.map +1 -1
  130. package/dist/schema.d.cts +2 -2
  131. package/dist/schema.d.mts +2 -2
  132. package/dist/schema.mjs +150 -6
  133. package/dist/schema.mjs.map +1 -1
  134. package/dist/schema.test.cjs +86 -86
  135. package/dist/schema.test.cjs.map +1 -1
  136. package/dist/schema.test.mjs +1 -1
  137. package/dist/services/definitions/apptension-saas.cjs +87 -0
  138. package/dist/services/definitions/apptension-saas.cjs.map +1 -0
  139. package/dist/services/definitions/apptension-saas.d.cts +7 -0
  140. package/dist/services/definitions/apptension-saas.d.cts.map +1 -0
  141. package/dist/services/definitions/apptension-saas.d.mts +7 -0
  142. package/dist/services/definitions/apptension-saas.d.mts.map +1 -0
  143. package/dist/services/definitions/apptension-saas.mjs +86 -0
  144. package/dist/services/definitions/apptension-saas.mjs.map +1 -0
  145. package/dist/services/definitions/boxyhq-saas.cjs +88 -0
  146. package/dist/services/definitions/boxyhq-saas.cjs.map +1 -0
  147. package/dist/services/definitions/boxyhq-saas.d.cts +7 -0
  148. package/dist/services/definitions/boxyhq-saas.d.cts.map +1 -0
  149. package/dist/services/definitions/boxyhq-saas.d.mts +7 -0
  150. package/dist/services/definitions/boxyhq-saas.d.mts.map +1 -0
  151. package/dist/services/definitions/boxyhq-saas.mjs +87 -0
  152. package/dist/services/definitions/boxyhq-saas.mjs.map +1 -0
  153. package/dist/services/definitions/browserless.cjs +4 -1
  154. package/dist/services/definitions/browserless.cjs.map +1 -1
  155. package/dist/services/definitions/browserless.mjs +4 -1
  156. package/dist/services/definitions/browserless.mjs.map +1 -1
  157. package/dist/services/definitions/cmsaas-starter.cjs +86 -0
  158. package/dist/services/definitions/cmsaas-starter.cjs.map +1 -0
  159. package/dist/services/definitions/cmsaas-starter.d.cts +7 -0
  160. package/dist/services/definitions/cmsaas-starter.d.cts.map +1 -0
  161. package/dist/services/definitions/cmsaas-starter.d.mts +7 -0
  162. package/dist/services/definitions/cmsaas-starter.d.mts.map +1 -0
  163. package/dist/services/definitions/cmsaas-starter.mjs +85 -0
  164. package/dist/services/definitions/cmsaas-starter.mjs.map +1 -0
  165. package/dist/services/definitions/convex.cjs +43 -1
  166. package/dist/services/definitions/convex.cjs.map +1 -1
  167. package/dist/services/definitions/convex.mjs +43 -1
  168. package/dist/services/definitions/convex.mjs.map +1 -1
  169. package/dist/services/definitions/grafana.cjs +11 -1
  170. package/dist/services/definitions/grafana.cjs.map +1 -1
  171. package/dist/services/definitions/grafana.mjs +11 -1
  172. package/dist/services/definitions/grafana.mjs.map +1 -1
  173. package/dist/services/definitions/index.cjs +51 -36
  174. package/dist/services/definitions/index.cjs.map +1 -1
  175. package/dist/services/definitions/index.d.cts +30 -25
  176. package/dist/services/definitions/index.d.cts.map +1 -1
  177. package/dist/services/definitions/index.d.mts +30 -25
  178. package/dist/services/definitions/index.d.mts.map +1 -1
  179. package/dist/services/definitions/index.mjs +47 -37
  180. package/dist/services/definitions/index.mjs.map +1 -1
  181. package/dist/services/definitions/ixartz-saas.cjs +88 -0
  182. package/dist/services/definitions/ixartz-saas.cjs.map +1 -0
  183. package/dist/services/definitions/ixartz-saas.d.cts +7 -0
  184. package/dist/services/definitions/ixartz-saas.d.cts.map +1 -0
  185. package/dist/services/definitions/ixartz-saas.d.mts +7 -0
  186. package/dist/services/definitions/ixartz-saas.d.mts.map +1 -0
  187. package/dist/services/definitions/ixartz-saas.mjs +87 -0
  188. package/dist/services/definitions/ixartz-saas.mjs.map +1 -0
  189. package/dist/services/definitions/meilisearch.cjs +11 -1
  190. package/dist/services/definitions/meilisearch.cjs.map +1 -1
  191. package/dist/services/definitions/meilisearch.mjs +11 -1
  192. package/dist/services/definitions/meilisearch.mjs.map +1 -1
  193. package/dist/services/definitions/minio.cjs +3 -1
  194. package/dist/services/definitions/minio.cjs.map +1 -1
  195. package/dist/services/definitions/minio.mjs +3 -1
  196. package/dist/services/definitions/minio.mjs.map +1 -1
  197. package/dist/services/definitions/mission-control.cjs +16 -2
  198. package/dist/services/definitions/mission-control.cjs.map +1 -1
  199. package/dist/services/definitions/mission-control.mjs +16 -2
  200. package/dist/services/definitions/mission-control.mjs.map +1 -1
  201. package/dist/services/definitions/n8n.cjs +11 -1
  202. package/dist/services/definitions/n8n.cjs.map +1 -1
  203. package/dist/services/definitions/n8n.mjs +11 -1
  204. package/dist/services/definitions/n8n.mjs.map +1 -1
  205. package/dist/services/definitions/ollama.cjs +3 -1
  206. package/dist/services/definitions/ollama.cjs.map +1 -1
  207. package/dist/services/definitions/ollama.mjs +3 -1
  208. package/dist/services/definitions/ollama.mjs.map +1 -1
  209. package/dist/services/definitions/open-saas.cjs +81 -0
  210. package/dist/services/definitions/open-saas.cjs.map +1 -0
  211. package/dist/services/definitions/open-saas.d.cts +7 -0
  212. package/dist/services/definitions/open-saas.d.cts.map +1 -0
  213. package/dist/services/definitions/open-saas.d.mts +7 -0
  214. package/dist/services/definitions/open-saas.d.mts.map +1 -0
  215. package/dist/services/definitions/open-saas.mjs +80 -0
  216. package/dist/services/definitions/open-saas.mjs.map +1 -0
  217. package/dist/services/definitions/qdrant.cjs +3 -1
  218. package/dist/services/definitions/qdrant.cjs.map +1 -1
  219. package/dist/services/definitions/qdrant.mjs +3 -1
  220. package/dist/services/definitions/qdrant.mjs.map +1 -1
  221. package/dist/services/definitions/searxng.cjs +8 -1
  222. package/dist/services/definitions/searxng.cjs.map +1 -1
  223. package/dist/services/definitions/searxng.mjs +8 -1
  224. package/dist/services/definitions/searxng.mjs.map +1 -1
  225. package/dist/services/definitions/uptime-kuma.cjs +8 -1
  226. package/dist/services/definitions/uptime-kuma.cjs.map +1 -1
  227. package/dist/services/definitions/uptime-kuma.mjs +8 -1
  228. package/dist/services/definitions/uptime-kuma.mjs.map +1 -1
  229. package/dist/services/registry.cjs +3 -0
  230. package/dist/services/registry.cjs.map +1 -1
  231. package/dist/services/registry.d.cts.map +1 -1
  232. package/dist/services/registry.d.mts.map +1 -1
  233. package/dist/services/registry.mjs +3 -0
  234. package/dist/services/registry.mjs.map +1 -1
  235. package/dist/services/registry.test.cjs +40 -33
  236. package/dist/services/registry.test.cjs.map +1 -1
  237. package/dist/services/registry.test.mjs +8 -1
  238. package/dist/services/registry.test.mjs.map +1 -1
  239. package/dist/{skill-manifest-BVUXU0__.mjs → skill-manifest-6XhrhWsG.mjs} +49 -1
  240. package/dist/{skill-manifest--IgY9REK.cjs.map → skill-manifest-6XhrhWsG.mjs.map} +1 -1
  241. package/dist/{skill-manifest--IgY9REK.cjs → skill-manifest-B8znSsym.cjs} +49 -1
  242. package/dist/{skill-manifest-BVUXU0__.mjs.map → skill-manifest-B8znSsym.cjs.map} +1 -1
  243. package/dist/skills/registry.cjs +3 -3
  244. package/dist/skills/registry.cjs.map +1 -1
  245. package/dist/skills/registry.mjs +3 -3
  246. package/dist/skills/registry.mjs.map +1 -1
  247. package/dist/skills/skill-manifest.cjs +1 -1
  248. package/dist/skills/skill-manifest.mjs +1 -1
  249. package/dist/{vi.2VT5v0um-DvC3SVNc.mjs → test.CTcmp4Su-ClCHJ3FA.mjs} +6793 -6403
  250. package/dist/test.CTcmp4Su-ClCHJ3FA.mjs.map +1 -0
  251. package/dist/{vi.2VT5v0um-CRqXre87.cjs → test.CTcmp4Su-DlzTarwH.cjs} +6793 -6403
  252. package/dist/test.CTcmp4Su-DlzTarwH.cjs.map +1 -0
  253. package/dist/track-analytics.cjs +50 -0
  254. package/dist/track-analytics.cjs.map +1 -0
  255. package/dist/track-analytics.d.cts +34 -0
  256. package/dist/track-analytics.d.cts.map +1 -0
  257. package/dist/track-analytics.d.mts +34 -0
  258. package/dist/track-analytics.d.mts.map +1 -0
  259. package/dist/track-analytics.mjs +48 -0
  260. package/dist/track-analytics.mjs.map +1 -0
  261. package/dist/track-analytics.test.cjs +91 -0
  262. package/dist/track-analytics.test.cjs.map +1 -0
  263. package/dist/track-analytics.test.d.cts +1 -0
  264. package/dist/track-analytics.test.d.mts +1 -0
  265. package/dist/track-analytics.test.mjs +92 -0
  266. package/dist/track-analytics.test.mjs.map +1 -0
  267. package/dist/types.cjs +7 -0
  268. package/dist/types.cjs.map +1 -1
  269. package/dist/types.d.cts +12 -2
  270. package/dist/types.d.cts.map +1 -1
  271. package/dist/types.d.mts +12 -2
  272. package/dist/types.d.mts.map +1 -1
  273. package/dist/types.mjs +7 -0
  274. package/dist/types.mjs.map +1 -1
  275. package/dist/validator.test.cjs +15 -15
  276. package/dist/validator.test.cjs.map +1 -1
  277. package/dist/validator.test.mjs +2 -2
  278. package/dist/version-manager.cjs +1 -1
  279. package/dist/version-manager.cjs.map +1 -1
  280. package/dist/version-manager.mjs +1 -1
  281. package/dist/version-manager.mjs.map +1 -1
  282. package/dist/version-manager.test.cjs +40 -38
  283. package/dist/version-manager.test.cjs.map +1 -1
  284. package/dist/version-manager.test.mjs +7 -5
  285. package/dist/version-manager.test.mjs.map +1 -1
  286. package/package.json +4 -4
  287. package/src/__snapshots__/composer.snapshot.test.ts.snap +160 -0
  288. package/src/addon-stack.test.ts +490 -0
  289. package/src/addon-stack.ts +998 -0
  290. package/src/bare-metal-partition.test.ts +4 -3
  291. package/src/composer.test.ts +4 -2
  292. package/src/composer.ts +24 -5
  293. package/src/generate.test.ts +2 -1
  294. package/src/generate.ts +10 -1
  295. package/src/generators/clone-repos.test.ts +154 -0
  296. package/src/generators/clone-repos.ts +159 -0
  297. package/src/generators/postgres-init.ts +17 -0
  298. package/src/generators/scripts.test.ts +52 -4
  299. package/src/generators/scripts.ts +351 -3
  300. package/src/generators/stack-manifest.ts +4 -2
  301. package/src/index.ts +28 -2
  302. package/src/presets/registry.ts +241 -329
  303. package/src/resolver.test.ts +53 -15
  304. package/src/resolver.ts +13 -1
  305. package/src/schema.ts +216 -4
  306. package/src/services/definitions/apptension-saas.ts +84 -0
  307. package/src/services/definitions/boxyhq-saas.ts +84 -0
  308. package/src/services/definitions/browserless.ts +3 -0
  309. package/src/services/definitions/cmsaas-starter.ts +84 -0
  310. package/src/services/definitions/convex.ts +31 -0
  311. package/src/services/definitions/grafana.ts +9 -0
  312. package/src/services/definitions/index.ts +90 -70
  313. package/src/services/definitions/ixartz-saas.ts +84 -0
  314. package/src/services/definitions/meilisearch.ts +9 -0
  315. package/src/services/definitions/minio.ts +2 -0
  316. package/src/services/definitions/mission-control.ts +19 -2
  317. package/src/services/definitions/n8n.ts +9 -0
  318. package/src/services/definitions/ollama.ts +2 -0
  319. package/src/services/definitions/open-saas.ts +79 -0
  320. package/src/services/definitions/qdrant.ts +2 -0
  321. package/src/services/definitions/searxng.ts +3 -0
  322. package/src/services/definitions/uptime-kuma.ts +3 -0
  323. package/src/services/registry.test.ts +8 -0
  324. package/src/services/registry.ts +7 -0
  325. package/src/skills/manifest.json +64 -0
  326. package/src/skills/registry.ts +3 -3
  327. package/src/track-analytics.test.ts +82 -0
  328. package/src/track-analytics.ts +76 -0
  329. package/src/types.ts +29 -0
  330. package/src/version-manager.test.ts +10 -5
  331. package/src/version-manager.ts +1 -1
  332. package/dist/schema-B4c64P8N.d.cts.map +0 -1
  333. package/dist/schema-CXNhYci1.d.mts.map +0 -1
  334. package/dist/vi.2VT5v0um-CRqXre87.cjs.map +0 -1
  335. package/dist/vi.2VT5v0um-DvC3SVNc.mjs.map +0 -1
@@ -0,0 +1,50 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/track-analytics.ts
3
+ /**
4
+ * Build an analytics payload from generation input and metadata.
5
+ * Pure function — does not send anything.
6
+ */
7
+ function buildAnalyticsPayload(input, metadata, source, presetId) {
8
+ return {
9
+ source,
10
+ buildMethod: presetId ? "preset" : "custom",
11
+ presetId: presetId ?? null,
12
+ services: input.services,
13
+ skillPacks: input.skillPacks,
14
+ serviceCount: metadata.serviceCount,
15
+ proxy: input.proxy,
16
+ deployment: input.deployment,
17
+ deploymentType: input.deploymentType,
18
+ platform: input.platform,
19
+ gpu: input.gpu,
20
+ monitoring: input.monitoring,
21
+ hasDomain: Boolean(input.domain),
22
+ openclawImage: input.openclawImage,
23
+ estimatedMemoryMB: metadata.estimatedMemoryMB
24
+ };
25
+ }
26
+ const DEFAULT_API_URL = "https://better-openclaw.dev/api/v1/analytics/event";
27
+ /**
28
+ * Fire-and-forget POST to the analytics endpoint.
29
+ * Respects DISABLE_ANALYTICS=true env var.
30
+ * Silently catches all errors — tracking must never crash the main flow.
31
+ */
32
+ async function trackAnalytics(payload, apiUrl = DEFAULT_API_URL) {
33
+ if (process.env.DISABLE_ANALYTICS === "true") return;
34
+ try {
35
+ const controller = new AbortController();
36
+ const timeout = setTimeout(() => controller.abort(), 5e3);
37
+ await fetch(apiUrl, {
38
+ method: "POST",
39
+ headers: { "Content-Type": "application/json" },
40
+ body: JSON.stringify(payload),
41
+ signal: controller.signal
42
+ });
43
+ clearTimeout(timeout);
44
+ } catch {}
45
+ }
46
+ //#endregion
47
+ exports.buildAnalyticsPayload = buildAnalyticsPayload;
48
+ exports.trackAnalytics = trackAnalytics;
49
+
50
+ //# sourceMappingURL=track-analytics.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-analytics.cjs","names":[],"sources":["../src/track-analytics.ts"],"sourcesContent":["import type { GenerationInput, GenerationMetadata } from \"./types.js\";\n\nexport interface AnalyticsPayload {\n\tsource: \"cli\" | \"web\" | \"api\" | \"mcp\";\n\tbuildMethod: \"preset\" | \"custom\";\n\tpresetId: string | null;\n\tservices: string[];\n\tskillPacks: string[];\n\tserviceCount: number;\n\tproxy: string;\n\tdeployment: string;\n\tdeploymentType: string;\n\tplatform: string;\n\tgpu: boolean;\n\tmonitoring: boolean;\n\thasDomain: boolean;\n\topenclawImage: string;\n\testimatedMemoryMB: number;\n}\n\n/**\n * Build an analytics payload from generation input and metadata.\n * Pure function — does not send anything.\n */\nexport function buildAnalyticsPayload(\n\tinput: GenerationInput,\n\tmetadata: GenerationMetadata,\n\tsource: AnalyticsPayload[\"source\"],\n\tpresetId?: string | null,\n): AnalyticsPayload {\n\treturn {\n\t\tsource,\n\t\tbuildMethod: presetId ? \"preset\" : \"custom\",\n\t\tpresetId: presetId ?? null,\n\t\tservices: input.services,\n\t\tskillPacks: input.skillPacks,\n\t\tserviceCount: metadata.serviceCount,\n\t\tproxy: input.proxy,\n\t\tdeployment: input.deployment,\n\t\tdeploymentType: input.deploymentType,\n\t\tplatform: input.platform,\n\t\tgpu: input.gpu,\n\t\tmonitoring: input.monitoring,\n\t\thasDomain: Boolean(input.domain),\n\t\topenclawImage: input.openclawImage,\n\t\testimatedMemoryMB: metadata.estimatedMemoryMB,\n\t};\n}\n\nconst DEFAULT_API_URL = \"https://better-openclaw.dev/api/v1/analytics/event\";\n\n/**\n * Fire-and-forget POST to the analytics endpoint.\n * Respects DISABLE_ANALYTICS=true env var.\n * Silently catches all errors — tracking must never crash the main flow.\n */\nexport async function trackAnalytics(\n\tpayload: AnalyticsPayload,\n\tapiUrl: string = DEFAULT_API_URL,\n): Promise<void> {\n\tif (process.env.DISABLE_ANALYTICS === \"true\") return;\n\n\ttry {\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => controller.abort(), 5000);\n\t\tawait fetch(apiUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(payload),\n\t\t\tsignal: controller.signal,\n\t\t});\n\t\tclearTimeout(timeout);\n\t} catch {\n\t\t// Silent — tracking must never block or crash generation\n\t}\n}\n"],"mappings":";;;;;;AAwBA,SAAgB,sBACf,OACA,UACA,QACA,UACmB;AACnB,QAAO;EACN;EACA,aAAa,WAAW,WAAW;EACnC,UAAU,YAAY;EACtB,UAAU,MAAM;EAChB,YAAY,MAAM;EAClB,cAAc,SAAS;EACvB,OAAO,MAAM;EACb,YAAY,MAAM;EAClB,gBAAgB,MAAM;EACtB,UAAU,MAAM;EAChB,KAAK,MAAM;EACX,YAAY,MAAM;EAClB,WAAW,QAAQ,MAAM,OAAO;EAChC,eAAe,MAAM;EACrB,mBAAmB,SAAS;EAC5B;;AAGF,MAAM,kBAAkB;;;;;;AAOxB,eAAsB,eACrB,SACA,SAAiB,iBACD;AAChB,KAAI,QAAQ,IAAI,sBAAsB,OAAQ;AAE9C,KAAI;EACH,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,UAAU,iBAAiB,WAAW,OAAO,EAAE,IAAK;AAC1D,QAAM,MAAM,QAAQ;GACnB,QAAQ;GACR,SAAS,EAAE,gBAAgB,oBAAoB;GAC/C,MAAM,KAAK,UAAU,QAAQ;GAC7B,QAAQ,WAAW;GACnB,CAAC;AACF,eAAa,QAAQ;SACd"}
@@ -0,0 +1,34 @@
1
+ import { GenerationInput, GenerationMetadata } from "./types.cjs";
2
+
3
+ //#region src/track-analytics.d.ts
4
+ interface AnalyticsPayload {
5
+ source: "cli" | "web" | "api" | "mcp";
6
+ buildMethod: "preset" | "custom";
7
+ presetId: string | null;
8
+ services: string[];
9
+ skillPacks: string[];
10
+ serviceCount: number;
11
+ proxy: string;
12
+ deployment: string;
13
+ deploymentType: string;
14
+ platform: string;
15
+ gpu: boolean;
16
+ monitoring: boolean;
17
+ hasDomain: boolean;
18
+ openclawImage: string;
19
+ estimatedMemoryMB: number;
20
+ }
21
+ /**
22
+ * Build an analytics payload from generation input and metadata.
23
+ * Pure function — does not send anything.
24
+ */
25
+ declare function buildAnalyticsPayload(input: GenerationInput, metadata: GenerationMetadata, source: AnalyticsPayload["source"], presetId?: string | null): AnalyticsPayload;
26
+ /**
27
+ * Fire-and-forget POST to the analytics endpoint.
28
+ * Respects DISABLE_ANALYTICS=true env var.
29
+ * Silently catches all errors — tracking must never crash the main flow.
30
+ */
31
+ declare function trackAnalytics(payload: AnalyticsPayload, apiUrl?: string): Promise<void>;
32
+ //#endregion
33
+ export { AnalyticsPayload, buildAnalyticsPayload, trackAnalytics };
34
+ //# sourceMappingURL=track-analytics.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-analytics.d.cts","names":[],"sources":["../src/track-analytics.ts"],"mappings":";;;UAEiB,gBAAA;EAChB,MAAA;EACA,WAAA;EACA,QAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,KAAA;EACA,UAAA;EACA,cAAA;EACA,QAAA;EACA,GAAA;EACA,UAAA;EACA,SAAA;EACA,aAAA;EACA,iBAAA;AAAA;;;;;iBAOe,qBAAA,CACf,KAAA,EAAO,eAAA,EACP,QAAA,EAAU,kBAAA,EACV,MAAA,EAAQ,gBAAA,YACR,QAAA,mBACE,gBAAA;;AALH;;;;iBAgCsB,cAAA,CACrB,OAAA,EAAS,gBAAA,EACT,MAAA,YACE,OAAA"}
@@ -0,0 +1,34 @@
1
+ import { GenerationInput, GenerationMetadata } from "./types.mjs";
2
+
3
+ //#region src/track-analytics.d.ts
4
+ interface AnalyticsPayload {
5
+ source: "cli" | "web" | "api" | "mcp";
6
+ buildMethod: "preset" | "custom";
7
+ presetId: string | null;
8
+ services: string[];
9
+ skillPacks: string[];
10
+ serviceCount: number;
11
+ proxy: string;
12
+ deployment: string;
13
+ deploymentType: string;
14
+ platform: string;
15
+ gpu: boolean;
16
+ monitoring: boolean;
17
+ hasDomain: boolean;
18
+ openclawImage: string;
19
+ estimatedMemoryMB: number;
20
+ }
21
+ /**
22
+ * Build an analytics payload from generation input and metadata.
23
+ * Pure function — does not send anything.
24
+ */
25
+ declare function buildAnalyticsPayload(input: GenerationInput, metadata: GenerationMetadata, source: AnalyticsPayload["source"], presetId?: string | null): AnalyticsPayload;
26
+ /**
27
+ * Fire-and-forget POST to the analytics endpoint.
28
+ * Respects DISABLE_ANALYTICS=true env var.
29
+ * Silently catches all errors — tracking must never crash the main flow.
30
+ */
31
+ declare function trackAnalytics(payload: AnalyticsPayload, apiUrl?: string): Promise<void>;
32
+ //#endregion
33
+ export { AnalyticsPayload, buildAnalyticsPayload, trackAnalytics };
34
+ //# sourceMappingURL=track-analytics.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-analytics.d.mts","names":[],"sources":["../src/track-analytics.ts"],"mappings":";;;UAEiB,gBAAA;EAChB,MAAA;EACA,WAAA;EACA,QAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,KAAA;EACA,UAAA;EACA,cAAA;EACA,QAAA;EACA,GAAA;EACA,UAAA;EACA,SAAA;EACA,aAAA;EACA,iBAAA;AAAA;;;;;iBAOe,qBAAA,CACf,KAAA,EAAO,eAAA,EACP,QAAA,EAAU,kBAAA,EACV,MAAA,EAAQ,gBAAA,YACR,QAAA,mBACE,gBAAA;;;AALH;;;iBAgCsB,cAAA,CACrB,OAAA,EAAS,gBAAA,EACT,MAAA,YACE,OAAA"}
@@ -0,0 +1,48 @@
1
+ //#region src/track-analytics.ts
2
+ /**
3
+ * Build an analytics payload from generation input and metadata.
4
+ * Pure function — does not send anything.
5
+ */
6
+ function buildAnalyticsPayload(input, metadata, source, presetId) {
7
+ return {
8
+ source,
9
+ buildMethod: presetId ? "preset" : "custom",
10
+ presetId: presetId ?? null,
11
+ services: input.services,
12
+ skillPacks: input.skillPacks,
13
+ serviceCount: metadata.serviceCount,
14
+ proxy: input.proxy,
15
+ deployment: input.deployment,
16
+ deploymentType: input.deploymentType,
17
+ platform: input.platform,
18
+ gpu: input.gpu,
19
+ monitoring: input.monitoring,
20
+ hasDomain: Boolean(input.domain),
21
+ openclawImage: input.openclawImage,
22
+ estimatedMemoryMB: metadata.estimatedMemoryMB
23
+ };
24
+ }
25
+ const DEFAULT_API_URL = "https://better-openclaw.dev/api/v1/analytics/event";
26
+ /**
27
+ * Fire-and-forget POST to the analytics endpoint.
28
+ * Respects DISABLE_ANALYTICS=true env var.
29
+ * Silently catches all errors — tracking must never crash the main flow.
30
+ */
31
+ async function trackAnalytics(payload, apiUrl = DEFAULT_API_URL) {
32
+ if (process.env.DISABLE_ANALYTICS === "true") return;
33
+ try {
34
+ const controller = new AbortController();
35
+ const timeout = setTimeout(() => controller.abort(), 5e3);
36
+ await fetch(apiUrl, {
37
+ method: "POST",
38
+ headers: { "Content-Type": "application/json" },
39
+ body: JSON.stringify(payload),
40
+ signal: controller.signal
41
+ });
42
+ clearTimeout(timeout);
43
+ } catch {}
44
+ }
45
+ //#endregion
46
+ export { buildAnalyticsPayload, trackAnalytics };
47
+
48
+ //# sourceMappingURL=track-analytics.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-analytics.mjs","names":[],"sources":["../src/track-analytics.ts"],"sourcesContent":["import type { GenerationInput, GenerationMetadata } from \"./types.js\";\n\nexport interface AnalyticsPayload {\n\tsource: \"cli\" | \"web\" | \"api\" | \"mcp\";\n\tbuildMethod: \"preset\" | \"custom\";\n\tpresetId: string | null;\n\tservices: string[];\n\tskillPacks: string[];\n\tserviceCount: number;\n\tproxy: string;\n\tdeployment: string;\n\tdeploymentType: string;\n\tplatform: string;\n\tgpu: boolean;\n\tmonitoring: boolean;\n\thasDomain: boolean;\n\topenclawImage: string;\n\testimatedMemoryMB: number;\n}\n\n/**\n * Build an analytics payload from generation input and metadata.\n * Pure function — does not send anything.\n */\nexport function buildAnalyticsPayload(\n\tinput: GenerationInput,\n\tmetadata: GenerationMetadata,\n\tsource: AnalyticsPayload[\"source\"],\n\tpresetId?: string | null,\n): AnalyticsPayload {\n\treturn {\n\t\tsource,\n\t\tbuildMethod: presetId ? \"preset\" : \"custom\",\n\t\tpresetId: presetId ?? null,\n\t\tservices: input.services,\n\t\tskillPacks: input.skillPacks,\n\t\tserviceCount: metadata.serviceCount,\n\t\tproxy: input.proxy,\n\t\tdeployment: input.deployment,\n\t\tdeploymentType: input.deploymentType,\n\t\tplatform: input.platform,\n\t\tgpu: input.gpu,\n\t\tmonitoring: input.monitoring,\n\t\thasDomain: Boolean(input.domain),\n\t\topenclawImage: input.openclawImage,\n\t\testimatedMemoryMB: metadata.estimatedMemoryMB,\n\t};\n}\n\nconst DEFAULT_API_URL = \"https://better-openclaw.dev/api/v1/analytics/event\";\n\n/**\n * Fire-and-forget POST to the analytics endpoint.\n * Respects DISABLE_ANALYTICS=true env var.\n * Silently catches all errors — tracking must never crash the main flow.\n */\nexport async function trackAnalytics(\n\tpayload: AnalyticsPayload,\n\tapiUrl: string = DEFAULT_API_URL,\n): Promise<void> {\n\tif (process.env.DISABLE_ANALYTICS === \"true\") return;\n\n\ttry {\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => controller.abort(), 5000);\n\t\tawait fetch(apiUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(payload),\n\t\t\tsignal: controller.signal,\n\t\t});\n\t\tclearTimeout(timeout);\n\t} catch {\n\t\t// Silent — tracking must never block or crash generation\n\t}\n}\n"],"mappings":";;;;;AAwBA,SAAgB,sBACf,OACA,UACA,QACA,UACmB;AACnB,QAAO;EACN;EACA,aAAa,WAAW,WAAW;EACnC,UAAU,YAAY;EACtB,UAAU,MAAM;EAChB,YAAY,MAAM;EAClB,cAAc,SAAS;EACvB,OAAO,MAAM;EACb,YAAY,MAAM;EAClB,gBAAgB,MAAM;EACtB,UAAU,MAAM;EAChB,KAAK,MAAM;EACX,YAAY,MAAM;EAClB,WAAW,QAAQ,MAAM,OAAO;EAChC,eAAe,MAAM;EACrB,mBAAmB,SAAS;EAC5B;;AAGF,MAAM,kBAAkB;;;;;;AAOxB,eAAsB,eACrB,SACA,SAAiB,iBACD;AAChB,KAAI,QAAQ,IAAI,sBAAsB,OAAQ;AAE9C,KAAI;EACH,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,UAAU,iBAAiB,WAAW,OAAO,EAAE,IAAK;AAC1D,QAAM,MAAM,QAAQ;GACnB,QAAQ;GACR,SAAS,EAAE,gBAAgB,oBAAoB;GAC/C,MAAM,KAAK,UAAU,QAAQ;GAC7B,QAAQ,WAAW;GACnB,CAAC;AACF,eAAa,QAAQ;SACd"}
@@ -0,0 +1,91 @@
1
+ const require_test_CTcmp4Su = require("./test.CTcmp4Su-DlzTarwH.cjs");
2
+ const require_track_analytics = require("./track-analytics.cjs");
3
+ //#region src/track-analytics.test.ts
4
+ const baseInput = {
5
+ projectName: "test-stack",
6
+ services: [
7
+ "postgresql",
8
+ "redis",
9
+ "n8n"
10
+ ],
11
+ skillPacks: ["research-agent"],
12
+ aiProviders: ["openai"],
13
+ gsdRuntimes: [],
14
+ proxy: "caddy",
15
+ domain: "example.com",
16
+ gpu: false,
17
+ platform: "linux/amd64",
18
+ deployment: "local",
19
+ deploymentType: "docker",
20
+ generateSecrets: true,
21
+ openclawVersion: "latest",
22
+ monitoring: true,
23
+ openclawImage: "official",
24
+ openclawInstallMethod: "docker",
25
+ hardened: true,
26
+ deployTarget: "local"
27
+ };
28
+ const baseMetadata = {
29
+ serviceCount: 5,
30
+ skillCount: 1,
31
+ estimatedMemoryMB: 2048,
32
+ resolvedServices: [
33
+ "postgresql",
34
+ "redis",
35
+ "n8n",
36
+ "caddy",
37
+ "searxng"
38
+ ],
39
+ generatedAt: "2026-03-09T00:00:00.000Z"
40
+ };
41
+ require_test_CTcmp4Su.describe("buildAnalyticsPayload", () => {
42
+ require_test_CTcmp4Su.it("builds payload for a preset-based CLI generation", () => {
43
+ const payload = require_track_analytics.buildAnalyticsPayload(baseInput, baseMetadata, "cli", "researcher");
44
+ require_test_CTcmp4Su.globalExpect(payload.source).toBe("cli");
45
+ require_test_CTcmp4Su.globalExpect(payload.buildMethod).toBe("preset");
46
+ require_test_CTcmp4Su.globalExpect(payload.presetId).toBe("researcher");
47
+ require_test_CTcmp4Su.globalExpect(payload.services).toEqual([
48
+ "postgresql",
49
+ "redis",
50
+ "n8n"
51
+ ]);
52
+ require_test_CTcmp4Su.globalExpect(payload.skillPacks).toEqual(["research-agent"]);
53
+ require_test_CTcmp4Su.globalExpect(payload.serviceCount).toBe(5);
54
+ require_test_CTcmp4Su.globalExpect(payload.proxy).toBe("caddy");
55
+ require_test_CTcmp4Su.globalExpect(payload.deployment).toBe("local");
56
+ require_test_CTcmp4Su.globalExpect(payload.deploymentType).toBe("docker");
57
+ require_test_CTcmp4Su.globalExpect(payload.platform).toBe("linux/amd64");
58
+ require_test_CTcmp4Su.globalExpect(payload.gpu).toBe(false);
59
+ require_test_CTcmp4Su.globalExpect(payload.monitoring).toBe(true);
60
+ require_test_CTcmp4Su.globalExpect(payload.hasDomain).toBe(true);
61
+ require_test_CTcmp4Su.globalExpect(payload.openclawImage).toBe("official");
62
+ require_test_CTcmp4Su.globalExpect(payload.estimatedMemoryMB).toBe(2048);
63
+ });
64
+ require_test_CTcmp4Su.it("sets buildMethod to custom when no presetId", () => {
65
+ const payload = require_track_analytics.buildAnalyticsPayload(baseInput, baseMetadata, "web");
66
+ require_test_CTcmp4Su.globalExpect(payload.buildMethod).toBe("custom");
67
+ require_test_CTcmp4Su.globalExpect(payload.presetId).toBeNull();
68
+ });
69
+ require_test_CTcmp4Su.it("sets buildMethod to custom when presetId is null", () => {
70
+ const payload = require_track_analytics.buildAnalyticsPayload(baseInput, baseMetadata, "api", null);
71
+ require_test_CTcmp4Su.globalExpect(payload.buildMethod).toBe("custom");
72
+ require_test_CTcmp4Su.globalExpect(payload.presetId).toBeNull();
73
+ });
74
+ require_test_CTcmp4Su.it("sets hasDomain to false when no domain in input", () => {
75
+ require_test_CTcmp4Su.globalExpect(require_track_analytics.buildAnalyticsPayload({
76
+ ...baseInput,
77
+ domain: void 0
78
+ }, baseMetadata, "mcp").hasDomain).toBe(false);
79
+ });
80
+ require_test_CTcmp4Su.it("preserves all source types", () => {
81
+ for (const source of [
82
+ "cli",
83
+ "web",
84
+ "api",
85
+ "mcp"
86
+ ]) require_test_CTcmp4Su.globalExpect(require_track_analytics.buildAnalyticsPayload(baseInput, baseMetadata, source).source).toBe(source);
87
+ });
88
+ });
89
+ //#endregion
90
+
91
+ //# sourceMappingURL=track-analytics.test.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-analytics.test.cjs","names":["describe","buildAnalyticsPayload"],"sources":["../src/track-analytics.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { buildAnalyticsPayload } from \"./track-analytics.js\";\nimport type { GenerationInput, GenerationMetadata } from \"./types.js\";\n\nconst baseInput: GenerationInput = {\n\tprojectName: \"test-stack\",\n\tservices: [\"postgresql\", \"redis\", \"n8n\"],\n\tskillPacks: [\"research-agent\"],\n\taiProviders: [\"openai\"],\n\tgsdRuntimes: [],\n\tproxy: \"caddy\",\n\tdomain: \"example.com\",\n\tgpu: false,\n\tplatform: \"linux/amd64\",\n\tdeployment: \"local\",\n\tdeploymentType: \"docker\",\n\tgenerateSecrets: true,\n\topenclawVersion: \"latest\",\n\tmonitoring: true,\n\topenclawImage: \"official\",\n\topenclawInstallMethod: \"docker\",\n\thardened: true,\n\tdeployTarget: \"local\",\n};\n\nconst baseMetadata: GenerationMetadata = {\n\tserviceCount: 5,\n\tskillCount: 1,\n\testimatedMemoryMB: 2048,\n\tresolvedServices: [\"postgresql\", \"redis\", \"n8n\", \"caddy\", \"searxng\"],\n\tgeneratedAt: \"2026-03-09T00:00:00.000Z\",\n};\n\ndescribe(\"buildAnalyticsPayload\", () => {\n\tit(\"builds payload for a preset-based CLI generation\", () => {\n\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, \"cli\", \"researcher\");\n\n\t\texpect(payload.source).toBe(\"cli\");\n\t\texpect(payload.buildMethod).toBe(\"preset\");\n\t\texpect(payload.presetId).toBe(\"researcher\");\n\t\texpect(payload.services).toEqual([\"postgresql\", \"redis\", \"n8n\"]);\n\t\texpect(payload.skillPacks).toEqual([\"research-agent\"]);\n\t\texpect(payload.serviceCount).toBe(5);\n\t\texpect(payload.proxy).toBe(\"caddy\");\n\t\texpect(payload.deployment).toBe(\"local\");\n\t\texpect(payload.deploymentType).toBe(\"docker\");\n\t\texpect(payload.platform).toBe(\"linux/amd64\");\n\t\texpect(payload.gpu).toBe(false);\n\t\texpect(payload.monitoring).toBe(true);\n\t\texpect(payload.hasDomain).toBe(true);\n\t\texpect(payload.openclawImage).toBe(\"official\");\n\t\texpect(payload.estimatedMemoryMB).toBe(2048);\n\t});\n\n\tit(\"sets buildMethod to custom when no presetId\", () => {\n\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, \"web\");\n\n\t\texpect(payload.buildMethod).toBe(\"custom\");\n\t\texpect(payload.presetId).toBeNull();\n\t});\n\n\tit(\"sets buildMethod to custom when presetId is null\", () => {\n\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, \"api\", null);\n\n\t\texpect(payload.buildMethod).toBe(\"custom\");\n\t\texpect(payload.presetId).toBeNull();\n\t});\n\n\tit(\"sets hasDomain to false when no domain in input\", () => {\n\t\tconst noDomainInput = { ...baseInput, domain: undefined };\n\t\tconst payload = buildAnalyticsPayload(noDomainInput, baseMetadata, \"mcp\");\n\n\t\texpect(payload.hasDomain).toBe(false);\n\t});\n\n\tit(\"preserves all source types\", () => {\n\t\tfor (const source of [\"cli\", \"web\", \"api\", \"mcp\"] as const) {\n\t\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, source);\n\t\t\texpect(payload.source).toBe(source);\n\t\t}\n\t});\n});\n"],"mappings":";;;AAIA,MAAM,YAA6B;CAClC,aAAa;CACb,UAAU;EAAC;EAAc;EAAS;EAAM;CACxC,YAAY,CAAC,iBAAiB;CAC9B,aAAa,CAAC,SAAS;CACvB,aAAa,EAAE;CACf,OAAO;CACP,QAAQ;CACR,KAAK;CACL,UAAU;CACV,YAAY;CACZ,gBAAgB;CAChB,iBAAiB;CACjB,iBAAiB;CACjB,YAAY;CACZ,eAAe;CACf,uBAAuB;CACvB,UAAU;CACV,cAAc;CACd;AAED,MAAM,eAAmC;CACxC,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,kBAAkB;EAAC;EAAc;EAAS;EAAO;EAAS;EAAU;CACpE,aAAa;CACb;AAEDA,sBAAAA,SAAS,+BAA+B;AACvC,uBAAA,GAAG,0DAA0D;EAC5D,MAAM,UAAUC,wBAAAA,sBAAsB,WAAW,cAAc,OAAO,aAAa;AAEnF,wBAAA,aAAO,QAAQ,OAAO,CAAC,KAAK,MAAM;AAClC,wBAAA,aAAO,QAAQ,YAAY,CAAC,KAAK,SAAS;AAC1C,wBAAA,aAAO,QAAQ,SAAS,CAAC,KAAK,aAAa;AAC3C,wBAAA,aAAO,QAAQ,SAAS,CAAC,QAAQ;GAAC;GAAc;GAAS;GAAM,CAAC;AAChE,wBAAA,aAAO,QAAQ,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACtD,wBAAA,aAAO,QAAQ,aAAa,CAAC,KAAK,EAAE;AACpC,wBAAA,aAAO,QAAQ,MAAM,CAAC,KAAK,QAAQ;AACnC,wBAAA,aAAO,QAAQ,WAAW,CAAC,KAAK,QAAQ;AACxC,wBAAA,aAAO,QAAQ,eAAe,CAAC,KAAK,SAAS;AAC7C,wBAAA,aAAO,QAAQ,SAAS,CAAC,KAAK,cAAc;AAC5C,wBAAA,aAAO,QAAQ,IAAI,CAAC,KAAK,MAAM;AAC/B,wBAAA,aAAO,QAAQ,WAAW,CAAC,KAAK,KAAK;AACrC,wBAAA,aAAO,QAAQ,UAAU,CAAC,KAAK,KAAK;AACpC,wBAAA,aAAO,QAAQ,cAAc,CAAC,KAAK,WAAW;AAC9C,wBAAA,aAAO,QAAQ,kBAAkB,CAAC,KAAK,KAAK;GAC3C;AAEF,uBAAA,GAAG,qDAAqD;EACvD,MAAM,UAAUA,wBAAAA,sBAAsB,WAAW,cAAc,MAAM;AAErE,wBAAA,aAAO,QAAQ,YAAY,CAAC,KAAK,SAAS;AAC1C,wBAAA,aAAO,QAAQ,SAAS,CAAC,UAAU;GAClC;AAEF,uBAAA,GAAG,0DAA0D;EAC5D,MAAM,UAAUA,wBAAAA,sBAAsB,WAAW,cAAc,OAAO,KAAK;AAE3E,wBAAA,aAAO,QAAQ,YAAY,CAAC,KAAK,SAAS;AAC1C,wBAAA,aAAO,QAAQ,SAAS,CAAC,UAAU;GAClC;AAEF,uBAAA,GAAG,yDAAyD;AAI3D,wBAAA,aAFgBA,wBAAAA,sBADM;GAAE,GAAG;GAAW,QAAQ,KAAA;GAAW,EACJ,cAAc,MAAM,CAE1D,UAAU,CAAC,KAAK,MAAM;GACpC;AAEF,uBAAA,GAAG,oCAAoC;AACtC,OAAK,MAAM,UAAU;GAAC;GAAO;GAAO;GAAO;GAAM,CAEhD,uBAAA,aADgBA,wBAAAA,sBAAsB,WAAW,cAAc,OAAO,CACvD,OAAO,CAAC,KAAK,OAAO;GAEnC;EACD"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,92 @@
1
+ import { n as describe, r as it, t as globalExpect } from "./test.CTcmp4Su-ClCHJ3FA.mjs";
2
+ import { buildAnalyticsPayload } from "./track-analytics.mjs";
3
+ //#region src/track-analytics.test.ts
4
+ const baseInput = {
5
+ projectName: "test-stack",
6
+ services: [
7
+ "postgresql",
8
+ "redis",
9
+ "n8n"
10
+ ],
11
+ skillPacks: ["research-agent"],
12
+ aiProviders: ["openai"],
13
+ gsdRuntimes: [],
14
+ proxy: "caddy",
15
+ domain: "example.com",
16
+ gpu: false,
17
+ platform: "linux/amd64",
18
+ deployment: "local",
19
+ deploymentType: "docker",
20
+ generateSecrets: true,
21
+ openclawVersion: "latest",
22
+ monitoring: true,
23
+ openclawImage: "official",
24
+ openclawInstallMethod: "docker",
25
+ hardened: true,
26
+ deployTarget: "local"
27
+ };
28
+ const baseMetadata = {
29
+ serviceCount: 5,
30
+ skillCount: 1,
31
+ estimatedMemoryMB: 2048,
32
+ resolvedServices: [
33
+ "postgresql",
34
+ "redis",
35
+ "n8n",
36
+ "caddy",
37
+ "searxng"
38
+ ],
39
+ generatedAt: "2026-03-09T00:00:00.000Z"
40
+ };
41
+ describe("buildAnalyticsPayload", () => {
42
+ it("builds payload for a preset-based CLI generation", () => {
43
+ const payload = buildAnalyticsPayload(baseInput, baseMetadata, "cli", "researcher");
44
+ globalExpect(payload.source).toBe("cli");
45
+ globalExpect(payload.buildMethod).toBe("preset");
46
+ globalExpect(payload.presetId).toBe("researcher");
47
+ globalExpect(payload.services).toEqual([
48
+ "postgresql",
49
+ "redis",
50
+ "n8n"
51
+ ]);
52
+ globalExpect(payload.skillPacks).toEqual(["research-agent"]);
53
+ globalExpect(payload.serviceCount).toBe(5);
54
+ globalExpect(payload.proxy).toBe("caddy");
55
+ globalExpect(payload.deployment).toBe("local");
56
+ globalExpect(payload.deploymentType).toBe("docker");
57
+ globalExpect(payload.platform).toBe("linux/amd64");
58
+ globalExpect(payload.gpu).toBe(false);
59
+ globalExpect(payload.monitoring).toBe(true);
60
+ globalExpect(payload.hasDomain).toBe(true);
61
+ globalExpect(payload.openclawImage).toBe("official");
62
+ globalExpect(payload.estimatedMemoryMB).toBe(2048);
63
+ });
64
+ it("sets buildMethod to custom when no presetId", () => {
65
+ const payload = buildAnalyticsPayload(baseInput, baseMetadata, "web");
66
+ globalExpect(payload.buildMethod).toBe("custom");
67
+ globalExpect(payload.presetId).toBeNull();
68
+ });
69
+ it("sets buildMethod to custom when presetId is null", () => {
70
+ const payload = buildAnalyticsPayload(baseInput, baseMetadata, "api", null);
71
+ globalExpect(payload.buildMethod).toBe("custom");
72
+ globalExpect(payload.presetId).toBeNull();
73
+ });
74
+ it("sets hasDomain to false when no domain in input", () => {
75
+ globalExpect(buildAnalyticsPayload({
76
+ ...baseInput,
77
+ domain: void 0
78
+ }, baseMetadata, "mcp").hasDomain).toBe(false);
79
+ });
80
+ it("preserves all source types", () => {
81
+ for (const source of [
82
+ "cli",
83
+ "web",
84
+ "api",
85
+ "mcp"
86
+ ]) globalExpect(buildAnalyticsPayload(baseInput, baseMetadata, source).source).toBe(source);
87
+ });
88
+ });
89
+ //#endregion
90
+ export {};
91
+
92
+ //# sourceMappingURL=track-analytics.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-analytics.test.mjs","names":[],"sources":["../src/track-analytics.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { buildAnalyticsPayload } from \"./track-analytics.js\";\nimport type { GenerationInput, GenerationMetadata } from \"./types.js\";\n\nconst baseInput: GenerationInput = {\n\tprojectName: \"test-stack\",\n\tservices: [\"postgresql\", \"redis\", \"n8n\"],\n\tskillPacks: [\"research-agent\"],\n\taiProviders: [\"openai\"],\n\tgsdRuntimes: [],\n\tproxy: \"caddy\",\n\tdomain: \"example.com\",\n\tgpu: false,\n\tplatform: \"linux/amd64\",\n\tdeployment: \"local\",\n\tdeploymentType: \"docker\",\n\tgenerateSecrets: true,\n\topenclawVersion: \"latest\",\n\tmonitoring: true,\n\topenclawImage: \"official\",\n\topenclawInstallMethod: \"docker\",\n\thardened: true,\n\tdeployTarget: \"local\",\n};\n\nconst baseMetadata: GenerationMetadata = {\n\tserviceCount: 5,\n\tskillCount: 1,\n\testimatedMemoryMB: 2048,\n\tresolvedServices: [\"postgresql\", \"redis\", \"n8n\", \"caddy\", \"searxng\"],\n\tgeneratedAt: \"2026-03-09T00:00:00.000Z\",\n};\n\ndescribe(\"buildAnalyticsPayload\", () => {\n\tit(\"builds payload for a preset-based CLI generation\", () => {\n\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, \"cli\", \"researcher\");\n\n\t\texpect(payload.source).toBe(\"cli\");\n\t\texpect(payload.buildMethod).toBe(\"preset\");\n\t\texpect(payload.presetId).toBe(\"researcher\");\n\t\texpect(payload.services).toEqual([\"postgresql\", \"redis\", \"n8n\"]);\n\t\texpect(payload.skillPacks).toEqual([\"research-agent\"]);\n\t\texpect(payload.serviceCount).toBe(5);\n\t\texpect(payload.proxy).toBe(\"caddy\");\n\t\texpect(payload.deployment).toBe(\"local\");\n\t\texpect(payload.deploymentType).toBe(\"docker\");\n\t\texpect(payload.platform).toBe(\"linux/amd64\");\n\t\texpect(payload.gpu).toBe(false);\n\t\texpect(payload.monitoring).toBe(true);\n\t\texpect(payload.hasDomain).toBe(true);\n\t\texpect(payload.openclawImage).toBe(\"official\");\n\t\texpect(payload.estimatedMemoryMB).toBe(2048);\n\t});\n\n\tit(\"sets buildMethod to custom when no presetId\", () => {\n\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, \"web\");\n\n\t\texpect(payload.buildMethod).toBe(\"custom\");\n\t\texpect(payload.presetId).toBeNull();\n\t});\n\n\tit(\"sets buildMethod to custom when presetId is null\", () => {\n\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, \"api\", null);\n\n\t\texpect(payload.buildMethod).toBe(\"custom\");\n\t\texpect(payload.presetId).toBeNull();\n\t});\n\n\tit(\"sets hasDomain to false when no domain in input\", () => {\n\t\tconst noDomainInput = { ...baseInput, domain: undefined };\n\t\tconst payload = buildAnalyticsPayload(noDomainInput, baseMetadata, \"mcp\");\n\n\t\texpect(payload.hasDomain).toBe(false);\n\t});\n\n\tit(\"preserves all source types\", () => {\n\t\tfor (const source of [\"cli\", \"web\", \"api\", \"mcp\"] as const) {\n\t\t\tconst payload = buildAnalyticsPayload(baseInput, baseMetadata, source);\n\t\t\texpect(payload.source).toBe(source);\n\t\t}\n\t});\n});\n"],"mappings":";;;AAIA,MAAM,YAA6B;CAClC,aAAa;CACb,UAAU;EAAC;EAAc;EAAS;EAAM;CACxC,YAAY,CAAC,iBAAiB;CAC9B,aAAa,CAAC,SAAS;CACvB,aAAa,EAAE;CACf,OAAO;CACP,QAAQ;CACR,KAAK;CACL,UAAU;CACV,YAAY;CACZ,gBAAgB;CAChB,iBAAiB;CACjB,iBAAiB;CACjB,YAAY;CACZ,eAAe;CACf,uBAAuB;CACvB,UAAU;CACV,cAAc;CACd;AAED,MAAM,eAAmC;CACxC,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,kBAAkB;EAAC;EAAc;EAAS;EAAO;EAAS;EAAU;CACpE,aAAa;CACb;AAED,SAAS,+BAA+B;AACvC,IAAG,0DAA0D;EAC5D,MAAM,UAAU,sBAAsB,WAAW,cAAc,OAAO,aAAa;AAEnF,eAAO,QAAQ,OAAO,CAAC,KAAK,MAAM;AAClC,eAAO,QAAQ,YAAY,CAAC,KAAK,SAAS;AAC1C,eAAO,QAAQ,SAAS,CAAC,KAAK,aAAa;AAC3C,eAAO,QAAQ,SAAS,CAAC,QAAQ;GAAC;GAAc;GAAS;GAAM,CAAC;AAChE,eAAO,QAAQ,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACtD,eAAO,QAAQ,aAAa,CAAC,KAAK,EAAE;AACpC,eAAO,QAAQ,MAAM,CAAC,KAAK,QAAQ;AACnC,eAAO,QAAQ,WAAW,CAAC,KAAK,QAAQ;AACxC,eAAO,QAAQ,eAAe,CAAC,KAAK,SAAS;AAC7C,eAAO,QAAQ,SAAS,CAAC,KAAK,cAAc;AAC5C,eAAO,QAAQ,IAAI,CAAC,KAAK,MAAM;AAC/B,eAAO,QAAQ,WAAW,CAAC,KAAK,KAAK;AACrC,eAAO,QAAQ,UAAU,CAAC,KAAK,KAAK;AACpC,eAAO,QAAQ,cAAc,CAAC,KAAK,WAAW;AAC9C,eAAO,QAAQ,kBAAkB,CAAC,KAAK,KAAK;GAC3C;AAEF,IAAG,qDAAqD;EACvD,MAAM,UAAU,sBAAsB,WAAW,cAAc,MAAM;AAErE,eAAO,QAAQ,YAAY,CAAC,KAAK,SAAS;AAC1C,eAAO,QAAQ,SAAS,CAAC,UAAU;GAClC;AAEF,IAAG,0DAA0D;EAC5D,MAAM,UAAU,sBAAsB,WAAW,cAAc,OAAO,KAAK;AAE3E,eAAO,QAAQ,YAAY,CAAC,KAAK,SAAS;AAC1C,eAAO,QAAQ,SAAS,CAAC,UAAU;GAClC;AAEF,IAAG,yDAAyD;AAI3D,eAFgB,sBADM;GAAE,GAAG;GAAW,QAAQ,KAAA;GAAW,EACJ,cAAc,MAAM,CAE1D,UAAU,CAAC,KAAK,MAAM;GACpC;AAEF,IAAG,oCAAoC;AACtC,OAAK,MAAM,UAAU;GAAC;GAAO;GAAO;GAAO;GAAM,CAEhD,cADgB,sBAAsB,WAAW,cAAc,OAAO,CACvD,OAAO,CAAC,KAAK,OAAO;GAEnC;EACD"}
package/dist/types.cjs CHANGED
@@ -245,6 +245,13 @@ const SERVICE_CATEGORIES = [
245
245
  description: "IoT & Edge",
246
246
  label: "IoT & Edge",
247
247
  icon: "📡"
248
+ },
249
+ {
250
+ id: "saas-boilerplate",
251
+ name: "SaaS Boilerplates",
252
+ description: "Full-stack SaaS starter kits and boilerplates",
253
+ label: "SaaS Boilerplates",
254
+ icon: "🚀"
248
255
  }
249
256
  ];
250
257
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport type {\n\tAddedDependencySchema,\n\tAiProviderSchema,\n\tApiErrorSchema,\n\tComposeOptionsSchema,\n\tDeploymentTargetSchema,\n\tDeploymentTypeSchema,\n\tDeploySchema,\n\tDeployTargetSchema,\n\tEnvVariableSchema,\n\tErrorSchema,\n\tGenerationInputSchema,\n\tGsdRuntimeSchema,\n\tHealthCheckSchema,\n\tMaturitySchema,\n\tNativePlatformSchema,\n\tNativeRecipeSchema,\n\tOpenclawImageVariantSchema,\n\tOpenclawInstallMethodSchema,\n\tOutputFormatSchema,\n\tPlatformSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tProxyTypeSchema,\n\tResolvedServiceSchema,\n\tResolverOutputSchema,\n\tResourceLimitsSchema,\n\tRestartPolicySchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillBindingSchema,\n\tSkillPackSchema,\n\tValidateRequestSchema,\n\tValidateResponseSchema,\n\tVolumeMappingSchema,\n\tWarningSchema,\n} from \"./schema.js\";\n\n// ─── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type AiProvider = z.infer<typeof AiProviderSchema>;\nexport type GsdRuntime = z.infer<typeof GsdRuntimeSchema>;\nexport type ServiceCategory = z.infer<typeof ServiceCategorySchema>;\nexport type Maturity = z.infer<typeof MaturitySchema>;\nexport type Platform = z.infer<typeof PlatformSchema>;\nexport type RestartPolicy = z.infer<typeof RestartPolicySchema>;\nexport type ProxyType = z.infer<typeof ProxyTypeSchema>;\nexport type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;\nexport type DeploymentType = z.infer<typeof DeploymentTypeSchema>;\nexport type NativePlatform = z.infer<typeof NativePlatformSchema>;\nexport type NativeRecipe = z.infer<typeof NativeRecipeSchema>;\nexport type OutputFormat = z.infer<typeof OutputFormatSchema>;\nexport type OpenclawImageVariant = z.infer<typeof OpenclawImageVariantSchema>;\nexport type OpenclawInstallMethod = z.infer<typeof OpenclawInstallMethodSchema>;\nexport type DeployTarget = z.infer<typeof DeployTargetSchema>;\n\nexport type PortMapping = z.infer<typeof PortMappingSchema>;\nexport type VolumeMapping = z.infer<typeof VolumeMappingSchema>;\nexport type EnvVariable = z.infer<typeof EnvVariableSchema>;\nexport type HealthCheck = z.infer<typeof HealthCheckSchema>;\nexport type ResourceLimits = z.infer<typeof ResourceLimitsSchema>;\nexport type Deploy = z.infer<typeof DeploySchema>;\nexport type SkillBinding = z.infer<typeof SkillBindingSchema>;\n\nexport type ServiceDefinition = z.infer<typeof ServiceDefinitionSchema>;\nexport type SkillPack = z.infer<typeof SkillPackSchema>;\nexport type Preset = z.infer<typeof PresetSchema>;\n\nexport type GenerationInput = z.infer<typeof GenerationInputSchema>;\nexport type ComposeOptions = z.infer<typeof ComposeOptionsSchema> & {\n\t/** Dynamic Traefik labels per service, computed by the Traefik generator. */\n\ttraefikLabels?: Map<string, Record<string, string>>;\n};\nexport type ResolvedService = z.infer<typeof ResolvedServiceSchema>;\nexport type AddedDependency = z.infer<typeof AddedDependencySchema>;\nexport type Warning = z.infer<typeof WarningSchema>;\nexport type ResolverError = z.infer<typeof ErrorSchema>;\nexport type ResolverOutput = z.infer<typeof ResolverOutputSchema>;\n\nexport type ValidateRequest = z.infer<typeof ValidateRequestSchema>;\nexport type ValidateResponse = z.infer<typeof ValidateResponseSchema>;\nexport type ApiError = z.infer<typeof ApiErrorSchema>;\n\n// ─── Additional Types ───────────────────────────────────────────────────────\n\nexport interface ResolverInput {\n\tservices: string[];\n\tskillPacks: string[];\n\taiProviders?: AiProvider[];\n\tgsdRuntimes?: GsdRuntime[];\n\tproxy?: ProxyType;\n\tgpu?: boolean;\n\tplatform?: Platform;\n\tdeployment?: DeploymentType;\n\tdeploymentType?: DeploymentType;\n\tmonitoring?: boolean;\n\tmemoryThresholds?: { info: number; warning: number; critical: number };\n}\n\nexport interface GeneratedFiles {\n\t[path: string]: string;\n}\n\nexport interface GenerationMetadata {\n\tserviceCount: number;\n\tskillCount: number;\n\testimatedMemoryMB: number;\n\tresolvedServices: string[];\n\tgeneratedAt: string;\n}\n\nexport interface GenerationResult {\n\tfiles: GeneratedFiles;\n\tmetadata: GenerationMetadata;\n}\n\nexport interface CategoryInfo {\n\tid: ServiceCategory;\n\tname: string;\n\tdescription?: string;\n\tlabel?: string;\n\ticon: string;\n}\n\nexport const SERVICE_CATEGORIES: CategoryInfo[] = [\n\t{\n\t\tid: \"coding-agent\",\n\t\tname: \"AI Coding Agents\",\n\t\tdescription: \"AI Coding Agents\",\n\t\tlabel: \"AI Coding Agents\",\n\t\ticon: \"💻\",\n\t},\n\t{\n\t\tid: \"ai-platform\",\n\t\tname: \"AI Platforms & Chat UIs\",\n\t\tdescription: \"AI Platforms & Chat UIs\",\n\t\tlabel: \"AI Platforms & Chat UIs\",\n\t\ticon: \"🧪\",\n\t},\n\t{\n\t\tid: \"ai\",\n\t\tname: \"AI / Local Models\",\n\t\tdescription: \"AI / Local Models\",\n\t\tlabel: \"AI / Local Models\",\n\t\ticon: \"🤖\",\n\t},\n\t{\n\t\tid: \"automation\",\n\t\tname: \"Automation & Workflows\",\n\t\tdescription: \"Automation & Workflows\",\n\t\tlabel: \"Automation & Workflows\",\n\t\ticon: \"🔄\",\n\t},\n\t{\n\t\tid: \"vector-db\",\n\t\tname: \"Vector Databases\",\n\t\tdescription: \"Vector Databases\",\n\t\tlabel: \"Vector Databases\",\n\t\ticon: \"🧠\",\n\t},\n\t{\n\t\tid: \"media\",\n\t\tname: \"Media & Video\",\n\t\tdescription: \"Media & Video\",\n\t\tlabel: \"Media & Video\",\n\t\ticon: \"🎬\",\n\t},\n\t{\n\t\tid: \"social-media\",\n\t\tname: \"Social Media\",\n\t\tdescription: \"Social Media\",\n\t\tlabel: \"Social Media\",\n\t\ticon: \"📱\",\n\t},\n\t{\n\t\tid: \"analytics\",\n\t\tname: \"Analytics\",\n\t\tdescription: \"Analytics\",\n\t\tlabel: \"Analytics\",\n\t\ticon: \"📊\",\n\t},\n\t{\n\t\tid: \"knowledge\",\n\t\tname: \"Knowledge & Documents\",\n\t\tdescription: \"Knowledge & Documents\",\n\t\tlabel: \"Knowledge & Documents\",\n\t\ticon: \"📚\",\n\t},\n\t{\n\t\tid: \"storage\",\n\t\tname: \"Object Storage\",\n\t\tdescription: \"Object Storage\",\n\t\tlabel: \"Object Storage\",\n\t\ticon: \"💾\",\n\t},\n\t{\n\t\tid: \"database\",\n\t\tname: \"Databases & Caching\",\n\t\tdescription: \"Databases & Caching\",\n\t\tlabel: \"Databases & Caching\",\n\t\ticon: \"🗄️\",\n\t},\n\t{\n\t\tid: \"dev-tools\",\n\t\tname: \"Developer Tools\",\n\t\tdescription: \"Developer Tools\",\n\t\tlabel: \"Developer Tools\",\n\t\ticon: \"🛠️\",\n\t},\n\t{\n\t\tid: \"proxy\",\n\t\tname: \"Reverse Proxy\",\n\t\tdescription: \"Reverse Proxy\",\n\t\tlabel: \"Reverse Proxy\",\n\t\ticon: \"🌐\",\n\t},\n\t{\n\t\tid: \"monitoring\",\n\t\tname: \"Monitoring\",\n\t\tdescription: \"Monitoring\",\n\t\tlabel: \"Monitoring\",\n\t\ticon: \"📡\",\n\t},\n\t{\n\t\tid: \"browser\",\n\t\tname: \"Browser Automation\",\n\t\tdescription: \"Browser Automation\",\n\t\tlabel: \"Browser Automation\",\n\t\ticon: \"🌐\",\n\t},\n\t{\n\t\tid: \"search\",\n\t\tname: \"Search\",\n\t\tdescription: \"Search\",\n\t\tlabel: \"Search\",\n\t\ticon: \"🔍\",\n\t},\n\t{\n\t\tid: \"communication\",\n\t\tname: \"Notifications\",\n\t\tdescription: \"Notifications\",\n\t\tlabel: \"Notifications\",\n\t\ticon: \"🔔\",\n\t},\n\t{\n\t\tid: \"desktop\",\n\t\tname: \"Desktop Environment\",\n\t\tdescription: \"Desktop Environment\",\n\t\tlabel: \"Desktop Environment\",\n\t\ticon: \"🖥️\",\n\t},\n\t{\n\t\tid: \"streaming\",\n\t\tname: \"Streaming & Relay\",\n\t\tdescription: \"Streaming & Relay\",\n\t\tlabel: \"Streaming & Relay\",\n\t\ticon: \"📺\",\n\t},\n\t{\n\t\tid: \"security\",\n\t\tname: \"Security & Pentesting\",\n\t\tdescription: \"Security & Pentesting\",\n\t\tlabel: \"Security & Pentesting\",\n\t\ticon: \"🛡️\",\n\t},\n\t{\n\t\tid: \"billing\",\n\t\tname: \"Billing & Payments\",\n\t\tdescription: \"Billing & Payments\",\n\t\tlabel: \"Billing & Payments\",\n\t\ticon: \"💳\",\n\t},\n\t{\n\t\tid: \"crm\",\n\t\tname: \"CRM & Customer Management\",\n\t\tdescription: \"CRM & Customer Management\",\n\t\tlabel: \"CRM & Customer Management\",\n\t\ticon: \"🤝\",\n\t},\n\t{\n\t\tid: \"email-marketing\",\n\t\tname: \"Email & Marketing\",\n\t\tdescription: \"Email & Marketing\",\n\t\tlabel: \"Email & Marketing\",\n\t\ticon: \"📧\",\n\t},\n\t{\n\t\tid: \"forms\",\n\t\tname: \"Forms & Surveys\",\n\t\tdescription: \"Forms & Surveys\",\n\t\tlabel: \"Forms & Surveys\",\n\t\ticon: \"📋\",\n\t},\n\t{\n\t\tid: \"api-gateway\",\n\t\tname: \"API Management\",\n\t\tdescription: \"API Management\",\n\t\tlabel: \"API Management\",\n\t\ticon: \"🔌\",\n\t},\n\t{\n\t\tid: \"backup\",\n\t\tname: \"Backup & Recovery\",\n\t\tdescription: \"Backup & Recovery\",\n\t\tlabel: \"Backup & Recovery\",\n\t\ticon: \"💾\",\n\t},\n\t{\n\t\tid: \"voice\",\n\t\tname: \"Voice & Telephony\",\n\t\tdescription: \"Voice & Telephony\",\n\t\tlabel: \"Voice & Telephony\",\n\t\ticon: \"📞\",\n\t},\n\t{\n\t\tid: \"ecommerce\",\n\t\tname: \"E-Commerce\",\n\t\tdescription: \"E-Commerce\",\n\t\tlabel: \"E-Commerce\",\n\t\ticon: \"🛒\",\n\t},\n\t{\n\t\tid: \"collaboration\",\n\t\tname: \"Real-Time Collaboration\",\n\t\tdescription: \"Real-Time Collaboration\",\n\t\tlabel: \"Real-Time Collaboration\",\n\t\ticon: \"✏️\",\n\t},\n\t{\n\t\tid: \"ai-observability\",\n\t\tname: \"AI Observability\",\n\t\tdescription: \"AI Observability\",\n\t\tlabel: \"AI Observability\",\n\t\ticon: \"🔭\",\n\t},\n\t{\n\t\tid: \"fine-tuning\",\n\t\tname: \"AI Fine-Tuning\",\n\t\tdescription: \"AI Fine-Tuning\",\n\t\tlabel: \"AI Fine-Tuning\",\n\t\ticon: \"🎯\",\n\t},\n\t{\n\t\tid: \"project-management\",\n\t\tname: \"Project Management\",\n\t\tdescription: \"Project Management\",\n\t\tlabel: \"Project Management\",\n\t\ticon: \"📋\",\n\t},\n\t{\n\t\tid: \"business-intelligence\",\n\t\tname: \"Business Intelligence\",\n\t\tdescription: \"Business Intelligence\",\n\t\tlabel: \"Business Intelligence\",\n\t\ticon: \"📈\",\n\t},\n\t{\n\t\tid: \"dns-networking\",\n\t\tname: \"DNS & Networking\",\n\t\tdescription: \"DNS & Networking\",\n\t\tlabel: \"DNS & Networking\",\n\t\ticon: \"🌐\",\n\t},\n\t{\n\t\tid: \"iot\",\n\t\tname: \"IoT & Edge\",\n\t\tdescription: \"IoT & Edge\",\n\t\tlabel: \"IoT & Edge\",\n\t\ticon: \"📡\",\n\t},\n];\n"],"mappings":";;AA6HA,MAAa,qBAAqC;CACjD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD"}
1
+ {"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport type {\n\tAddonStackInputSchema,\n\tAddonStackResultSchema,\n\tAddonStackUpdateInputSchema,\n\tAddonStackUpdateResultSchema,\n\tAddedDependencySchema,\n\tAiProviderSchema,\n\tApiErrorSchema,\n\tBuildContextSchema,\n\tComposeOptionsSchema,\n\tDeploymentTargetSchema,\n\tDeploymentTypeSchema,\n\tDeploySchema,\n\tDeployTargetSchema,\n\tEnvQuirkFixSchema,\n\tEnvQuirkSchema,\n\tEnvVariableSchema,\n\tErrorSchema,\n\tGenerationInputSchema,\n\tGitSourceSchema,\n\tGsdRuntimeSchema,\n\tHealthCheckSchema,\n\tMaturitySchema,\n\tNativePlatformSchema,\n\tNativeRecipeSchema,\n\tOpenclawImageVariantSchema,\n\tOpenclawInstallMethodSchema,\n\tOutputFormatSchema,\n\tPlatformSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tProxyRouteSchema,\n\tProxyTypeSchema,\n\tResolvedServiceSchema,\n\tResolverOutputSchema,\n\tResourceLimitsSchema,\n\tRestartPolicySchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillBindingSchema,\n\tSkillPackSchema,\n\tSkippedServiceSchema,\n\tValidateRequestSchema,\n\tValidateResponseSchema,\n\tVolumeMappingSchema,\n\tWarningSchema,\n} from \"./schema.js\";\n\n// ─── Inferred Types ─────────────────────────────────────────────────────────\n\nexport type AiProvider = z.infer<typeof AiProviderSchema>;\nexport type GsdRuntime = z.infer<typeof GsdRuntimeSchema>;\nexport type ServiceCategory = z.infer<typeof ServiceCategorySchema>;\nexport type Maturity = z.infer<typeof MaturitySchema>;\nexport type Platform = z.infer<typeof PlatformSchema>;\nexport type RestartPolicy = z.infer<typeof RestartPolicySchema>;\nexport type ProxyType = z.infer<typeof ProxyTypeSchema>;\nexport type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;\nexport type DeploymentType = z.infer<typeof DeploymentTypeSchema>;\nexport type NativePlatform = z.infer<typeof NativePlatformSchema>;\nexport type NativeRecipe = z.infer<typeof NativeRecipeSchema>;\nexport type GitSource = z.infer<typeof GitSourceSchema>;\nexport type BuildContext = z.infer<typeof BuildContextSchema>;\nexport type OutputFormat = z.infer<typeof OutputFormatSchema>;\nexport type OpenclawImageVariant = z.infer<typeof OpenclawImageVariantSchema>;\nexport type OpenclawInstallMethod = z.infer<typeof OpenclawInstallMethodSchema>;\nexport type DeployTarget = z.infer<typeof DeployTargetSchema>;\n\nexport type PortMapping = z.infer<typeof PortMappingSchema>;\nexport type VolumeMapping = z.infer<typeof VolumeMappingSchema>;\nexport type EnvVariable = z.infer<typeof EnvVariableSchema>;\nexport type HealthCheck = z.infer<typeof HealthCheckSchema>;\nexport type ResourceLimits = z.infer<typeof ResourceLimitsSchema>;\nexport type Deploy = z.infer<typeof DeploySchema>;\nexport type SkillBinding = z.infer<typeof SkillBindingSchema>;\n\nexport type ServiceDefinition = z.infer<typeof ServiceDefinitionSchema>;\nexport type SkillPack = z.infer<typeof SkillPackSchema>;\nexport type Preset = z.infer<typeof PresetSchema>;\n\nexport type GenerationInput = z.infer<typeof GenerationInputSchema>;\nexport type ComposeOptions = z.infer<typeof ComposeOptionsSchema> & {\n\t/** Dynamic Traefik labels per service, computed by the Traefik generator. */\n\ttraefikLabels?: Map<string, Record<string, string>>;\n};\nexport type ResolvedService = z.infer<typeof ResolvedServiceSchema>;\nexport type AddedDependency = z.infer<typeof AddedDependencySchema>;\nexport type Warning = z.infer<typeof WarningSchema>;\nexport type ResolverError = z.infer<typeof ErrorSchema>;\nexport type ResolverOutput = z.infer<typeof ResolverOutputSchema>;\n\nexport type ValidateRequest = z.infer<typeof ValidateRequestSchema>;\nexport type ValidateResponse = z.infer<typeof ValidateResponseSchema>;\nexport type ApiError = z.infer<typeof ApiErrorSchema>;\n\n// Addon Stack (Clawexa)\nexport type EnvQuirkFix = z.infer<typeof EnvQuirkFixSchema>;\nexport type EnvQuirk = z.infer<typeof EnvQuirkSchema>;\nexport type ProxyRoute = z.infer<typeof ProxyRouteSchema>;\nexport type SkippedService = z.infer<typeof SkippedServiceSchema>;\nexport type AddonStackInput = z.infer<typeof AddonStackInputSchema>;\nexport type AddonStackResult = z.infer<typeof AddonStackResultSchema>;\nexport type AddonStackUpdateInput = z.infer<typeof AddonStackUpdateInputSchema>;\nexport type AddonStackUpdateResult = z.infer<typeof AddonStackUpdateResultSchema>;\n\n// ─── Additional Types ───────────────────────────────────────────────────────\n\nexport interface ResolverInput {\n\tservices: string[];\n\tskillPacks: string[];\n\taiProviders?: AiProvider[];\n\tgsdRuntimes?: GsdRuntime[];\n\tproxy?: ProxyType;\n\tgpu?: boolean;\n\tplatform?: Platform;\n\tdeployment?: DeploymentType;\n\tdeploymentType?: DeploymentType;\n\tmonitoring?: boolean;\n\tmemoryThresholds?: { info: number; warning: number; critical: number };\n}\n\nexport interface GeneratedFiles {\n\t[path: string]: string;\n}\n\nexport interface GenerationMetadata {\n\tserviceCount: number;\n\tskillCount: number;\n\testimatedMemoryMB: number;\n\tresolvedServices: string[];\n\tgeneratedAt: string;\n}\n\nexport interface GenerationResult {\n\tfiles: GeneratedFiles;\n\tmetadata: GenerationMetadata;\n}\n\nexport interface CategoryInfo {\n\tid: ServiceCategory;\n\tname: string;\n\tdescription?: string;\n\tlabel?: string;\n\ticon: string;\n}\n\nexport const SERVICE_CATEGORIES: CategoryInfo[] = [\n\t{\n\t\tid: \"coding-agent\",\n\t\tname: \"AI Coding Agents\",\n\t\tdescription: \"AI Coding Agents\",\n\t\tlabel: \"AI Coding Agents\",\n\t\ticon: \"💻\",\n\t},\n\t{\n\t\tid: \"ai-platform\",\n\t\tname: \"AI Platforms & Chat UIs\",\n\t\tdescription: \"AI Platforms & Chat UIs\",\n\t\tlabel: \"AI Platforms & Chat UIs\",\n\t\ticon: \"🧪\",\n\t},\n\t{\n\t\tid: \"ai\",\n\t\tname: \"AI / Local Models\",\n\t\tdescription: \"AI / Local Models\",\n\t\tlabel: \"AI / Local Models\",\n\t\ticon: \"🤖\",\n\t},\n\t{\n\t\tid: \"automation\",\n\t\tname: \"Automation & Workflows\",\n\t\tdescription: \"Automation & Workflows\",\n\t\tlabel: \"Automation & Workflows\",\n\t\ticon: \"🔄\",\n\t},\n\t{\n\t\tid: \"vector-db\",\n\t\tname: \"Vector Databases\",\n\t\tdescription: \"Vector Databases\",\n\t\tlabel: \"Vector Databases\",\n\t\ticon: \"🧠\",\n\t},\n\t{\n\t\tid: \"media\",\n\t\tname: \"Media & Video\",\n\t\tdescription: \"Media & Video\",\n\t\tlabel: \"Media & Video\",\n\t\ticon: \"🎬\",\n\t},\n\t{\n\t\tid: \"social-media\",\n\t\tname: \"Social Media\",\n\t\tdescription: \"Social Media\",\n\t\tlabel: \"Social Media\",\n\t\ticon: \"📱\",\n\t},\n\t{\n\t\tid: \"analytics\",\n\t\tname: \"Analytics\",\n\t\tdescription: \"Analytics\",\n\t\tlabel: \"Analytics\",\n\t\ticon: \"📊\",\n\t},\n\t{\n\t\tid: \"knowledge\",\n\t\tname: \"Knowledge & Documents\",\n\t\tdescription: \"Knowledge & Documents\",\n\t\tlabel: \"Knowledge & Documents\",\n\t\ticon: \"📚\",\n\t},\n\t{\n\t\tid: \"storage\",\n\t\tname: \"Object Storage\",\n\t\tdescription: \"Object Storage\",\n\t\tlabel: \"Object Storage\",\n\t\ticon: \"💾\",\n\t},\n\t{\n\t\tid: \"database\",\n\t\tname: \"Databases & Caching\",\n\t\tdescription: \"Databases & Caching\",\n\t\tlabel: \"Databases & Caching\",\n\t\ticon: \"🗄️\",\n\t},\n\t{\n\t\tid: \"dev-tools\",\n\t\tname: \"Developer Tools\",\n\t\tdescription: \"Developer Tools\",\n\t\tlabel: \"Developer Tools\",\n\t\ticon: \"🛠️\",\n\t},\n\t{\n\t\tid: \"proxy\",\n\t\tname: \"Reverse Proxy\",\n\t\tdescription: \"Reverse Proxy\",\n\t\tlabel: \"Reverse Proxy\",\n\t\ticon: \"🌐\",\n\t},\n\t{\n\t\tid: \"monitoring\",\n\t\tname: \"Monitoring\",\n\t\tdescription: \"Monitoring\",\n\t\tlabel: \"Monitoring\",\n\t\ticon: \"📡\",\n\t},\n\t{\n\t\tid: \"browser\",\n\t\tname: \"Browser Automation\",\n\t\tdescription: \"Browser Automation\",\n\t\tlabel: \"Browser Automation\",\n\t\ticon: \"🌐\",\n\t},\n\t{\n\t\tid: \"search\",\n\t\tname: \"Search\",\n\t\tdescription: \"Search\",\n\t\tlabel: \"Search\",\n\t\ticon: \"🔍\",\n\t},\n\t{\n\t\tid: \"communication\",\n\t\tname: \"Notifications\",\n\t\tdescription: \"Notifications\",\n\t\tlabel: \"Notifications\",\n\t\ticon: \"🔔\",\n\t},\n\t{\n\t\tid: \"desktop\",\n\t\tname: \"Desktop Environment\",\n\t\tdescription: \"Desktop Environment\",\n\t\tlabel: \"Desktop Environment\",\n\t\ticon: \"🖥️\",\n\t},\n\t{\n\t\tid: \"streaming\",\n\t\tname: \"Streaming & Relay\",\n\t\tdescription: \"Streaming & Relay\",\n\t\tlabel: \"Streaming & Relay\",\n\t\ticon: \"📺\",\n\t},\n\t{\n\t\tid: \"security\",\n\t\tname: \"Security & Pentesting\",\n\t\tdescription: \"Security & Pentesting\",\n\t\tlabel: \"Security & Pentesting\",\n\t\ticon: \"🛡️\",\n\t},\n\t{\n\t\tid: \"billing\",\n\t\tname: \"Billing & Payments\",\n\t\tdescription: \"Billing & Payments\",\n\t\tlabel: \"Billing & Payments\",\n\t\ticon: \"💳\",\n\t},\n\t{\n\t\tid: \"crm\",\n\t\tname: \"CRM & Customer Management\",\n\t\tdescription: \"CRM & Customer Management\",\n\t\tlabel: \"CRM & Customer Management\",\n\t\ticon: \"🤝\",\n\t},\n\t{\n\t\tid: \"email-marketing\",\n\t\tname: \"Email & Marketing\",\n\t\tdescription: \"Email & Marketing\",\n\t\tlabel: \"Email & Marketing\",\n\t\ticon: \"📧\",\n\t},\n\t{\n\t\tid: \"forms\",\n\t\tname: \"Forms & Surveys\",\n\t\tdescription: \"Forms & Surveys\",\n\t\tlabel: \"Forms & Surveys\",\n\t\ticon: \"📋\",\n\t},\n\t{\n\t\tid: \"api-gateway\",\n\t\tname: \"API Management\",\n\t\tdescription: \"API Management\",\n\t\tlabel: \"API Management\",\n\t\ticon: \"🔌\",\n\t},\n\t{\n\t\tid: \"backup\",\n\t\tname: \"Backup & Recovery\",\n\t\tdescription: \"Backup & Recovery\",\n\t\tlabel: \"Backup & Recovery\",\n\t\ticon: \"💾\",\n\t},\n\t{\n\t\tid: \"voice\",\n\t\tname: \"Voice & Telephony\",\n\t\tdescription: \"Voice & Telephony\",\n\t\tlabel: \"Voice & Telephony\",\n\t\ticon: \"📞\",\n\t},\n\t{\n\t\tid: \"ecommerce\",\n\t\tname: \"E-Commerce\",\n\t\tdescription: \"E-Commerce\",\n\t\tlabel: \"E-Commerce\",\n\t\ticon: \"🛒\",\n\t},\n\t{\n\t\tid: \"collaboration\",\n\t\tname: \"Real-Time Collaboration\",\n\t\tdescription: \"Real-Time Collaboration\",\n\t\tlabel: \"Real-Time Collaboration\",\n\t\ticon: \"✏️\",\n\t},\n\t{\n\t\tid: \"ai-observability\",\n\t\tname: \"AI Observability\",\n\t\tdescription: \"AI Observability\",\n\t\tlabel: \"AI Observability\",\n\t\ticon: \"🔭\",\n\t},\n\t{\n\t\tid: \"fine-tuning\",\n\t\tname: \"AI Fine-Tuning\",\n\t\tdescription: \"AI Fine-Tuning\",\n\t\tlabel: \"AI Fine-Tuning\",\n\t\ticon: \"🎯\",\n\t},\n\t{\n\t\tid: \"project-management\",\n\t\tname: \"Project Management\",\n\t\tdescription: \"Project Management\",\n\t\tlabel: \"Project Management\",\n\t\ticon: \"📋\",\n\t},\n\t{\n\t\tid: \"business-intelligence\",\n\t\tname: \"Business Intelligence\",\n\t\tdescription: \"Business Intelligence\",\n\t\tlabel: \"Business Intelligence\",\n\t\ticon: \"📈\",\n\t},\n\t{\n\t\tid: \"dns-networking\",\n\t\tname: \"DNS & Networking\",\n\t\tdescription: \"DNS & Networking\",\n\t\tlabel: \"DNS & Networking\",\n\t\ticon: \"🌐\",\n\t},\n\t{\n\t\tid: \"iot\",\n\t\tname: \"IoT & Edge\",\n\t\tdescription: \"IoT & Edge\",\n\t\tlabel: \"IoT & Edge\",\n\t\ticon: \"📡\",\n\t},\n\t{\n\t\tid: \"saas-boilerplate\",\n\t\tname: \"SaaS Boilerplates\",\n\t\tdescription: \"Full-stack SaaS starter kits and boilerplates\",\n\t\tlabel: \"SaaS Boilerplates\",\n\t\ticon: \"🚀\",\n\t},\n];\n"],"mappings":";;AAmJA,MAAa,qBAAqC;CACjD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD;EACC,IAAI;EACJ,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN;CACD"}
package/dist/types.d.cts CHANGED
@@ -1,4 +1,4 @@
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, n as AiProviderSchema, o as DeploySchema, p as GsdRuntimeSchema, 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-B4c64P8N.cjs";
1
+ import { A as PortMappingSchema, B as SkillBindingSchema, C as MaturitySchema, D as OpenclawInstallMethodSchema, E as OpenclawImageVariantSchema, F as ResolverOutputSchema, G as ValidateResponseSchema, I as ResourceLimitsSchema, K as VolumeMappingSchema, L as RestartPolicySchema, M as ProxyRouteSchema, N as ProxyTypeSchema, O as OutputFormatSchema, P as ResolvedServiceSchema, R as ServiceCategorySchema, S as HealthCheckSchema, T as NativeRecipeSchema, U as SkippedServiceSchema, V as SkillPackSchema, W as ValidateRequestSchema, _ as EnvVariableSchema, a as AddonStackUpdateResultSchema, b as GitSourceSchema, c as BuildContextSchema, d as DeploySchema, f as DeployTargetSchema, g as EnvQuirkSchema, h as EnvQuirkFixSchema, i as AddonStackUpdateInputSchema, j as PresetSchema, k as PlatformSchema, l as ComposeOptionsSchema, m as DeploymentTypeSchema, n as AddonStackInputSchema, o as AiProviderSchema, p as DeploymentTargetSchema, q as WarningSchema, r as AddonStackResultSchema, s as ApiErrorSchema, t as AddedDependencySchema, v as ErrorSchema, w as NativePlatformSchema, x as GsdRuntimeSchema, y as GenerationInputSchema, z as ServiceDefinitionSchema } from "./schema-CKBRu-Rt.cjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/types.d.ts
@@ -13,6 +13,8 @@ type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;
13
13
  type DeploymentType = z.infer<typeof DeploymentTypeSchema>;
14
14
  type NativePlatform = z.infer<typeof NativePlatformSchema>;
15
15
  type NativeRecipe = z.infer<typeof NativeRecipeSchema>;
16
+ type GitSource = z.infer<typeof GitSourceSchema>;
17
+ type BuildContext = z.infer<typeof BuildContextSchema>;
16
18
  type OutputFormat = z.infer<typeof OutputFormatSchema>;
17
19
  type OpenclawImageVariant = z.infer<typeof OpenclawImageVariantSchema>;
18
20
  type OpenclawInstallMethod = z.infer<typeof OpenclawInstallMethodSchema>;
@@ -39,6 +41,14 @@ type ResolverOutput = z.infer<typeof ResolverOutputSchema>;
39
41
  type ValidateRequest = z.infer<typeof ValidateRequestSchema>;
40
42
  type ValidateResponse = z.infer<typeof ValidateResponseSchema>;
41
43
  type ApiError = z.infer<typeof ApiErrorSchema>;
44
+ type EnvQuirkFix = z.infer<typeof EnvQuirkFixSchema>;
45
+ type EnvQuirk = z.infer<typeof EnvQuirkSchema>;
46
+ type ProxyRoute = z.infer<typeof ProxyRouteSchema>;
47
+ type SkippedService = z.infer<typeof SkippedServiceSchema>;
48
+ type AddonStackInput = z.infer<typeof AddonStackInputSchema>;
49
+ type AddonStackResult = z.infer<typeof AddonStackResultSchema>;
50
+ type AddonStackUpdateInput = z.infer<typeof AddonStackUpdateInputSchema>;
51
+ type AddonStackUpdateResult = z.infer<typeof AddonStackUpdateResultSchema>;
42
52
  interface ResolverInput {
43
53
  services: string[];
44
54
  skillPacks: string[];
@@ -79,5 +89,5 @@ interface CategoryInfo {
79
89
  }
80
90
  declare const SERVICE_CATEGORIES: CategoryInfo[];
81
91
  //#endregion
82
- export { 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 };
92
+ export { AddedDependency, AddonStackInput, AddonStackResult, AddonStackUpdateInput, AddonStackUpdateResult, AiProvider, ApiError, BuildContext, CategoryInfo, ComposeOptions, Deploy, DeployTarget, DeploymentTarget, DeploymentType, EnvQuirk, EnvQuirkFix, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, GitSource, GsdRuntime, HealthCheck, Maturity, NativePlatform, NativeRecipe, OpenclawImageVariant, OpenclawInstallMethod, OutputFormat, Platform, PortMapping, Preset, ProxyRoute, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, SkippedService, ValidateRequest, ValidateResponse, VolumeMapping, Warning };
83
93
  //# sourceMappingURL=types.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
package/dist/types.d.mts CHANGED
@@ -1,4 +1,4 @@
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, n as AiProviderSchema, o as DeploySchema, p as GsdRuntimeSchema, 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-CXNhYci1.mjs";
1
+ import { A as PortMappingSchema, B as SkillBindingSchema, C as MaturitySchema, D as OpenclawInstallMethodSchema, E as OpenclawImageVariantSchema, F as ResolverOutputSchema, G as ValidateResponseSchema, I as ResourceLimitsSchema, K as VolumeMappingSchema, L as RestartPolicySchema, M as ProxyRouteSchema, N as ProxyTypeSchema, O as OutputFormatSchema, P as ResolvedServiceSchema, R as ServiceCategorySchema, S as HealthCheckSchema, T as NativeRecipeSchema, U as SkippedServiceSchema, V as SkillPackSchema, W as ValidateRequestSchema, _ as EnvVariableSchema, a as AddonStackUpdateResultSchema, b as GitSourceSchema, c as BuildContextSchema, d as DeploySchema, f as DeployTargetSchema, g as EnvQuirkSchema, h as EnvQuirkFixSchema, i as AddonStackUpdateInputSchema, j as PresetSchema, k as PlatformSchema, l as ComposeOptionsSchema, m as DeploymentTypeSchema, n as AddonStackInputSchema, o as AiProviderSchema, p as DeploymentTargetSchema, q as WarningSchema, r as AddonStackResultSchema, s as ApiErrorSchema, t as AddedDependencySchema, v as ErrorSchema, w as NativePlatformSchema, x as GsdRuntimeSchema, y as GenerationInputSchema, z as ServiceDefinitionSchema } from "./schema-Dn-_Jpb6.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/types.d.ts
@@ -13,6 +13,8 @@ type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;
13
13
  type DeploymentType = z.infer<typeof DeploymentTypeSchema>;
14
14
  type NativePlatform = z.infer<typeof NativePlatformSchema>;
15
15
  type NativeRecipe = z.infer<typeof NativeRecipeSchema>;
16
+ type GitSource = z.infer<typeof GitSourceSchema>;
17
+ type BuildContext = z.infer<typeof BuildContextSchema>;
16
18
  type OutputFormat = z.infer<typeof OutputFormatSchema>;
17
19
  type OpenclawImageVariant = z.infer<typeof OpenclawImageVariantSchema>;
18
20
  type OpenclawInstallMethod = z.infer<typeof OpenclawInstallMethodSchema>;
@@ -39,6 +41,14 @@ type ResolverOutput = z.infer<typeof ResolverOutputSchema>;
39
41
  type ValidateRequest = z.infer<typeof ValidateRequestSchema>;
40
42
  type ValidateResponse = z.infer<typeof ValidateResponseSchema>;
41
43
  type ApiError = z.infer<typeof ApiErrorSchema>;
44
+ type EnvQuirkFix = z.infer<typeof EnvQuirkFixSchema>;
45
+ type EnvQuirk = z.infer<typeof EnvQuirkSchema>;
46
+ type ProxyRoute = z.infer<typeof ProxyRouteSchema>;
47
+ type SkippedService = z.infer<typeof SkippedServiceSchema>;
48
+ type AddonStackInput = z.infer<typeof AddonStackInputSchema>;
49
+ type AddonStackResult = z.infer<typeof AddonStackResultSchema>;
50
+ type AddonStackUpdateInput = z.infer<typeof AddonStackUpdateInputSchema>;
51
+ type AddonStackUpdateResult = z.infer<typeof AddonStackUpdateResultSchema>;
42
52
  interface ResolverInput {
43
53
  services: string[];
44
54
  skillPacks: string[];
@@ -79,5 +89,5 @@ interface CategoryInfo {
79
89
  }
80
90
  declare const SERVICE_CATEGORIES: CategoryInfo[];
81
91
  //#endregion
82
- export { 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 };
92
+ export { AddedDependency, AddonStackInput, AddonStackResult, AddonStackUpdateInput, AddonStackUpdateResult, AiProvider, ApiError, BuildContext, CategoryInfo, ComposeOptions, Deploy, DeployTarget, DeploymentTarget, DeploymentType, EnvQuirk, EnvQuirkFix, EnvVariable, GeneratedFiles, GenerationInput, GenerationMetadata, GenerationResult, GitSource, GsdRuntime, HealthCheck, Maturity, NativePlatform, NativeRecipe, OpenclawImageVariant, OpenclawInstallMethod, OutputFormat, Platform, PortMapping, Preset, ProxyRoute, ProxyType, ResolvedService, ResolverError, ResolverInput, ResolverOutput, ResourceLimits, RestartPolicy, SERVICE_CATEGORIES, ServiceCategory, ServiceDefinition, SkillBinding, SkillPack, SkippedService, ValidateRequest, ValidateResponse, VolumeMapping, Warning };
83
93
  //# sourceMappingURL=types.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
package/dist/types.mjs CHANGED
@@ -244,6 +244,13 @@ const SERVICE_CATEGORIES = [
244
244
  description: "IoT & Edge",
245
245
  label: "IoT & Edge",
246
246
  icon: "📡"
247
+ },
248
+ {
249
+ id: "saas-boilerplate",
250
+ name: "SaaS Boilerplates",
251
+ description: "Full-stack SaaS starter kits and boilerplates",
252
+ label: "SaaS Boilerplates",
253
+ icon: "🚀"
247
254
  }
248
255
  ];
249
256
  //#endregion