@better-openclaw/core 1.0.23 → 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 (254) 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 +13 -1
  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 +13 -1
  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 +6 -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 +6 -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.test.cjs +1 -1
  48. package/dist/generators/env.test.mjs +1 -1
  49. package/dist/generators/health-check.test.cjs +1 -1
  50. package/dist/generators/health-check.test.mjs +1 -1
  51. package/dist/generators/postgres-init.cjs +20 -0
  52. package/dist/generators/postgres-init.cjs.map +1 -1
  53. package/dist/generators/postgres-init.d.cts.map +1 -1
  54. package/dist/generators/postgres-init.d.mts.map +1 -1
  55. package/dist/generators/postgres-init.mjs +20 -0
  56. package/dist/generators/postgres-init.mjs.map +1 -1
  57. package/dist/generators/scripts.cjs +332 -3
  58. package/dist/generators/scripts.cjs.map +1 -1
  59. package/dist/generators/scripts.d.cts +3 -1
  60. package/dist/generators/scripts.d.cts.map +1 -1
  61. package/dist/generators/scripts.d.mts +3 -1
  62. package/dist/generators/scripts.d.mts.map +1 -1
  63. package/dist/generators/scripts.mjs +332 -3
  64. package/dist/generators/scripts.mjs.map +1 -1
  65. package/dist/generators/scripts.test.cjs +39 -5
  66. package/dist/generators/scripts.test.cjs.map +1 -1
  67. package/dist/generators/scripts.test.mjs +39 -5
  68. package/dist/generators/scripts.test.mjs.map +1 -1
  69. package/dist/generators/stack-manifest.cjs +1 -0
  70. package/dist/generators/stack-manifest.cjs.map +1 -1
  71. package/dist/generators/stack-manifest.d.cts +3 -2
  72. package/dist/generators/stack-manifest.d.cts.map +1 -1
  73. package/dist/generators/stack-manifest.d.mts +3 -2
  74. package/dist/generators/stack-manifest.d.mts.map +1 -1
  75. package/dist/generators/stack-manifest.mjs +1 -0
  76. package/dist/generators/stack-manifest.mjs.map +1 -1
  77. package/dist/generators/traefik.test.cjs +1 -1
  78. package/dist/generators/traefik.test.mjs +1 -1
  79. package/dist/index.cjs +8 -1
  80. package/dist/index.d.cts +5 -3
  81. package/dist/index.d.mts +5 -3
  82. package/dist/index.mjs +5 -3
  83. package/dist/migrations.test.cjs +1 -1
  84. package/dist/migrations.test.mjs +1 -1
  85. package/dist/presets/registry.cjs.map +1 -1
  86. package/dist/presets/registry.d.cts.map +1 -1
  87. package/dist/presets/registry.d.mts.map +1 -1
  88. package/dist/presets/registry.mjs.map +1 -1
  89. package/dist/presets/registry.test.cjs +1 -1
  90. package/dist/presets/registry.test.mjs +1 -1
  91. package/dist/resolver.cjs +8 -0
  92. package/dist/resolver.cjs.map +1 -1
  93. package/dist/resolver.mjs +9 -1
  94. package/dist/resolver.mjs.map +1 -1
  95. package/dist/resolver.test.cjs +47 -12
  96. package/dist/resolver.test.cjs.map +1 -1
  97. package/dist/resolver.test.mjs +47 -12
  98. package/dist/resolver.test.mjs.map +1 -1
  99. package/dist/{schema-B4c64P8N.d.cts → schema-eX44HhRp.d.mts} +62 -8
  100. package/dist/schema-eX44HhRp.d.mts.map +1 -0
  101. package/dist/{schema-CXNhYci1.d.mts → schema-tn5RK8CM.d.cts} +62 -8
  102. package/dist/schema-tn5RK8CM.d.cts.map +1 -0
  103. package/dist/schema.cjs +22 -4
  104. package/dist/schema.cjs.map +1 -1
  105. package/dist/schema.d.cts +2 -2
  106. package/dist/schema.d.mts +2 -2
  107. package/dist/schema.mjs +21 -5
  108. package/dist/schema.mjs.map +1 -1
  109. package/dist/schema.test.cjs +1 -1
  110. package/dist/schema.test.mjs +1 -1
  111. package/dist/services/definitions/apptension-saas.cjs +87 -0
  112. package/dist/services/definitions/apptension-saas.cjs.map +1 -0
  113. package/dist/services/definitions/apptension-saas.d.cts +7 -0
  114. package/dist/services/definitions/apptension-saas.d.cts.map +1 -0
  115. package/dist/services/definitions/apptension-saas.d.mts +7 -0
  116. package/dist/services/definitions/apptension-saas.d.mts.map +1 -0
  117. package/dist/services/definitions/apptension-saas.mjs +86 -0
  118. package/dist/services/definitions/apptension-saas.mjs.map +1 -0
  119. package/dist/services/definitions/boxyhq-saas.cjs +88 -0
  120. package/dist/services/definitions/boxyhq-saas.cjs.map +1 -0
  121. package/dist/services/definitions/boxyhq-saas.d.cts +7 -0
  122. package/dist/services/definitions/boxyhq-saas.d.cts.map +1 -0
  123. package/dist/services/definitions/boxyhq-saas.d.mts +7 -0
  124. package/dist/services/definitions/boxyhq-saas.d.mts.map +1 -0
  125. package/dist/services/definitions/boxyhq-saas.mjs +87 -0
  126. package/dist/services/definitions/boxyhq-saas.mjs.map +1 -0
  127. package/dist/services/definitions/cmsaas-starter.cjs +86 -0
  128. package/dist/services/definitions/cmsaas-starter.cjs.map +1 -0
  129. package/dist/services/definitions/cmsaas-starter.d.cts +7 -0
  130. package/dist/services/definitions/cmsaas-starter.d.cts.map +1 -0
  131. package/dist/services/definitions/cmsaas-starter.d.mts +7 -0
  132. package/dist/services/definitions/cmsaas-starter.d.mts.map +1 -0
  133. package/dist/services/definitions/cmsaas-starter.mjs +85 -0
  134. package/dist/services/definitions/cmsaas-starter.mjs.map +1 -0
  135. package/dist/services/definitions/index.cjs +51 -36
  136. package/dist/services/definitions/index.cjs.map +1 -1
  137. package/dist/services/definitions/index.d.cts +30 -25
  138. package/dist/services/definitions/index.d.cts.map +1 -1
  139. package/dist/services/definitions/index.d.mts +30 -25
  140. package/dist/services/definitions/index.d.mts.map +1 -1
  141. package/dist/services/definitions/index.mjs +47 -37
  142. package/dist/services/definitions/index.mjs.map +1 -1
  143. package/dist/services/definitions/ixartz-saas.cjs +88 -0
  144. package/dist/services/definitions/ixartz-saas.cjs.map +1 -0
  145. package/dist/services/definitions/ixartz-saas.d.cts +7 -0
  146. package/dist/services/definitions/ixartz-saas.d.cts.map +1 -0
  147. package/dist/services/definitions/ixartz-saas.d.mts +7 -0
  148. package/dist/services/definitions/ixartz-saas.d.mts.map +1 -0
  149. package/dist/services/definitions/ixartz-saas.mjs +87 -0
  150. package/dist/services/definitions/ixartz-saas.mjs.map +1 -0
  151. package/dist/services/definitions/mission-control.cjs +16 -2
  152. package/dist/services/definitions/mission-control.cjs.map +1 -1
  153. package/dist/services/definitions/mission-control.mjs +16 -2
  154. package/dist/services/definitions/mission-control.mjs.map +1 -1
  155. package/dist/services/definitions/open-saas.cjs +81 -0
  156. package/dist/services/definitions/open-saas.cjs.map +1 -0
  157. package/dist/services/definitions/open-saas.d.cts +7 -0
  158. package/dist/services/definitions/open-saas.d.cts.map +1 -0
  159. package/dist/services/definitions/open-saas.d.mts +7 -0
  160. package/dist/services/definitions/open-saas.d.mts.map +1 -0
  161. package/dist/services/definitions/open-saas.mjs +80 -0
  162. package/dist/services/definitions/open-saas.mjs.map +1 -0
  163. package/dist/services/registry.cjs +3 -0
  164. package/dist/services/registry.cjs.map +1 -1
  165. package/dist/services/registry.d.cts.map +1 -1
  166. package/dist/services/registry.d.mts.map +1 -1
  167. package/dist/services/registry.mjs +3 -0
  168. package/dist/services/registry.mjs.map +1 -1
  169. package/dist/services/registry.test.cjs +8 -1
  170. package/dist/services/registry.test.cjs.map +1 -1
  171. package/dist/services/registry.test.mjs +8 -1
  172. package/dist/services/registry.test.mjs.map +1 -1
  173. package/dist/{skill-manifest-BVUXU0__.mjs → skill-manifest-6XhrhWsG.mjs} +49 -1
  174. package/dist/{skill-manifest--IgY9REK.cjs.map → skill-manifest-6XhrhWsG.mjs.map} +1 -1
  175. package/dist/{skill-manifest--IgY9REK.cjs → skill-manifest-B8znSsym.cjs} +49 -1
  176. package/dist/{skill-manifest-BVUXU0__.mjs.map → skill-manifest-B8znSsym.cjs.map} +1 -1
  177. package/dist/skills/registry.cjs +3 -3
  178. package/dist/skills/registry.cjs.map +1 -1
  179. package/dist/skills/registry.mjs +3 -3
  180. package/dist/skills/registry.mjs.map +1 -1
  181. package/dist/skills/skill-manifest.cjs +1 -1
  182. package/dist/skills/skill-manifest.mjs +1 -1
  183. package/dist/track-analytics.cjs +50 -0
  184. package/dist/track-analytics.cjs.map +1 -0
  185. package/dist/track-analytics.d.cts +34 -0
  186. package/dist/track-analytics.d.cts.map +1 -0
  187. package/dist/track-analytics.d.mts +34 -0
  188. package/dist/track-analytics.d.mts.map +1 -0
  189. package/dist/track-analytics.mjs +48 -0
  190. package/dist/track-analytics.mjs.map +1 -0
  191. package/dist/track-analytics.test.cjs +91 -0
  192. package/dist/track-analytics.test.cjs.map +1 -0
  193. package/dist/track-analytics.test.d.cts +1 -0
  194. package/dist/track-analytics.test.d.mts +1 -0
  195. package/dist/track-analytics.test.mjs +92 -0
  196. package/dist/track-analytics.test.mjs.map +1 -0
  197. package/dist/types.cjs +7 -0
  198. package/dist/types.cjs.map +1 -1
  199. package/dist/types.d.cts +4 -2
  200. package/dist/types.d.cts.map +1 -1
  201. package/dist/types.d.mts +4 -2
  202. package/dist/types.d.mts.map +1 -1
  203. package/dist/types.mjs +7 -0
  204. package/dist/types.mjs.map +1 -1
  205. package/dist/validator.test.cjs +1 -1
  206. package/dist/validator.test.mjs +1 -1
  207. package/dist/version-manager.cjs +1 -1
  208. package/dist/version-manager.cjs.map +1 -1
  209. package/dist/version-manager.mjs +1 -1
  210. package/dist/version-manager.mjs.map +1 -1
  211. package/dist/version-manager.test.cjs +7 -5
  212. package/dist/version-manager.test.cjs.map +1 -1
  213. package/dist/version-manager.test.mjs +7 -5
  214. package/dist/version-manager.test.mjs.map +1 -1
  215. package/dist/{vi.2VT5v0um-DvC3SVNc.mjs → vi.2VT5v0um-C_jmO7m2.mjs} +5 -5
  216. package/dist/{vi.2VT5v0um-DvC3SVNc.mjs.map → vi.2VT5v0um-C_jmO7m2.mjs.map} +1 -1
  217. package/dist/{vi.2VT5v0um-CRqXre87.cjs → vi.2VT5v0um-iVBt6Fyq.cjs} +5 -5
  218. package/dist/{vi.2VT5v0um-CRqXre87.cjs.map → vi.2VT5v0um-iVBt6Fyq.cjs.map} +1 -1
  219. package/package.json +1 -1
  220. package/src/__snapshots__/composer.snapshot.test.ts.snap +155 -0
  221. package/src/bare-metal-partition.test.ts +4 -3
  222. package/src/composer.test.ts +4 -2
  223. package/src/composer.ts +20 -1
  224. package/src/generate.test.ts +2 -1
  225. package/src/generate.ts +10 -1
  226. package/src/generators/clone-repos.test.ts +154 -0
  227. package/src/generators/clone-repos.ts +159 -0
  228. package/src/generators/postgres-init.ts +17 -0
  229. package/src/generators/scripts.test.ts +52 -4
  230. package/src/generators/scripts.ts +351 -3
  231. package/src/generators/stack-manifest.ts +4 -2
  232. package/src/index.ts +8 -0
  233. package/src/presets/registry.ts +241 -329
  234. package/src/resolver.test.ts +53 -15
  235. package/src/resolver.ts +13 -1
  236. package/src/schema.ts +33 -4
  237. package/src/services/definitions/apptension-saas.ts +84 -0
  238. package/src/services/definitions/boxyhq-saas.ts +84 -0
  239. package/src/services/definitions/cmsaas-starter.ts +84 -0
  240. package/src/services/definitions/index.ts +90 -70
  241. package/src/services/definitions/ixartz-saas.ts +84 -0
  242. package/src/services/definitions/mission-control.ts +19 -2
  243. package/src/services/definitions/open-saas.ts +79 -0
  244. package/src/services/registry.test.ts +8 -0
  245. package/src/services/registry.ts +7 -0
  246. package/src/skills/manifest.json +64 -0
  247. package/src/skills/registry.ts +3 -3
  248. package/src/track-analytics.test.ts +82 -0
  249. package/src/track-analytics.ts +76 -0
  250. package/src/types.ts +11 -0
  251. package/src/version-manager.test.ts +10 -5
  252. package/src/version-manager.ts +1 -1
  253. package/dist/schema-B4c64P8N.d.cts.map +0 -1
  254. package/dist/schema-CXNhYci1.d.mts.map +0 -1
@@ -1,345 +1,257 @@
1
1
  import type { Preset } from "../types.js";
2
2
 
3
3
  const presets: Preset[] = [
4
- {
5
- id: "minimal",
6
- name: "Minimal",
7
- description: "OpenClaw + Redis for caching and session management",
8
- services: ["redis", "caddy"],
9
- skillPacks: [],
10
- estimatedMemoryMB: 1024,
11
- },
12
- {
13
- id: "creator",
14
- name: "Creator",
15
- description:
16
- "Full media creation stack with FFmpeg, Remotion, and MinIO storage",
17
- services: ["ffmpeg", "remotion", "minio", "redis", "caddy"],
18
- skillPacks: ["video-creator"],
19
- estimatedMemoryMB: 2048,
20
- },
21
- {
22
- id: "researcher",
23
- name: "Researcher",
24
- description:
25
- "Research agent with vector search, web scraping, and meta search",
26
- services: [
27
- "qdrant",
28
- "searxng",
29
- "browserless",
30
- "redis",
31
- "caddy",
32
- "postgresql",
33
- ],
34
- skillPacks: ["research-agent"],
35
- estimatedMemoryMB: 2560,
36
- },
37
- {
38
- id: "devops",
39
- name: "DevOps",
40
- description:
41
- "Full monitoring and automation stack with n8n, Grafana, and Uptime Kuma",
42
- services: [
43
- "n8n",
44
- "postgresql",
45
- "redis",
46
- "uptime-kuma",
47
- "grafana",
48
- "prometheus",
49
- "caddy",
50
- ],
51
- skillPacks: ["dev-ops"],
52
- estimatedMemoryMB: 3072,
53
- },
54
- {
55
- id: "full",
56
- name: "Full Stack",
57
- description: "Everything enabled — all services and skill packs",
58
- services: [
59
- "redis",
60
- "postgresql",
61
- "qdrant",
62
- "n8n",
63
- "ffmpeg",
64
- "remotion",
65
- "minio",
66
- "caddy",
67
- "browserless",
68
- "searxng",
69
- "meilisearch",
70
- "uptime-kuma",
71
- "grafana",
72
- "prometheus",
73
- "ollama",
74
- "whisper",
75
- "gotify",
76
- ],
77
- skillPacks: [
78
- "video-creator",
79
- "research-agent",
80
- "social-media",
81
- "dev-ops",
82
- "knowledge-base",
83
- "local-ai",
84
- ],
85
- estimatedMemoryMB: 8192,
86
- },
87
- {
88
- id: "content-creator",
89
- name: "Content Creator",
90
- description:
91
- "Social media scheduling with Postiz, media processing, and analytics",
92
- services: [
93
- "postiz",
94
- "ffmpeg",
95
- "minio",
96
- "redis",
97
- "postgresql",
98
- "umami",
99
- "caddy",
100
- ],
101
- skillPacks: ["content-creator"],
102
- estimatedMemoryMB: 2048,
103
- },
104
- {
105
- id: "ai-playground",
106
- name: "AI Playground",
107
- description:
108
- "Local AI stack with Ollama, Open WebUI, LiteLLM gateway, and document chat",
109
- services: [
110
- "ollama",
111
- "open-webui",
112
- "litellm",
113
- "anything-llm",
114
- "redis",
115
- "caddy",
116
- ],
117
- skillPacks: ["ai-playground"],
118
- estimatedMemoryMB: 4096,
119
- },
120
- {
121
- id: "ai-powerhouse",
122
- name: "AI Powerhouse",
123
- description:
124
- "Local AI stack with Ollama, Open WebUI, LiteLLM gateway, and document chat",
125
- services: [
126
- "ollama",
127
- "redis",
128
- "qdrant",
129
- "minio",
130
- "litellm",
131
- "anything-llm",
132
- "n8n",
133
- "postgresql",
134
- "caddy",
135
- "open-webui",
136
- "searxng",
137
- ],
138
- skillPacks: ["ai-playground"],
139
- estimatedMemoryMB: 4096,
140
- },
141
- {
142
- id: "ai-virtual-desktop",
143
- name: "AI Virtual Desktop",
144
- description:
145
- "Self-hosted autonomous AI agent with local LLM, vector memory, web search, browser automation, and workflow orchestration. The open-source alternative to Manus and Perplexity Computer.",
146
- services: [
147
- "ollama",
148
- "qdrant",
149
- "postgresql",
150
- "redis",
151
- "minio",
152
- "n8n",
153
- "browserless",
154
- "open-webui",
155
- "searxng",
156
- "caddy",
157
- ],
158
- skillPacks: ["research-agent", "dev-ops"],
159
- estimatedMemoryMB: 6144,
160
- },
161
- {
162
- id: "coding-team",
163
- name: "Coding Team",
164
- description:
165
- "AI development environment with coding agents, Git, and browser IDE",
166
- services: [
167
- "claude-code",
168
- "opencode",
169
- "gitea",
170
- "code-server",
171
- "redis",
172
- "caddy",
173
- ],
174
- skillPacks: ["coding-team"],
175
- estimatedMemoryMB: 2560,
176
- },
177
- {
178
- id: "lasuite-meet",
179
- name: "La Suite Meet",
180
- description:
181
- "Open-source video conferencing from La Suite numérique (Django + LiveKit)",
182
- services: [
183
- "postgresql",
184
- "redis",
185
- "livekit",
186
- "lasuite-meet-backend",
187
- "lasuite-meet-frontend",
188
- "lasuite-meet-agents",
189
- "whisper",
190
- "ollama",
191
- "caddy",
192
- ],
193
- skillPacks: [],
194
- estimatedMemoryMB: 2048,
195
- },
196
- // ── New service presets ─────────────────────────────────────────────────
197
- {
198
- id: "backend-platform",
199
- name: "Backend Platform",
200
- description:
201
- "BaaS stack with Appwrite, MariaDB, Redis, RabbitMQ for auth, storage, and async workflows",
202
- services: ["appwrite", "mariadb", "redis", "rabbitmq", "caddy"],
203
- skillPacks: ["appwrite-platform"],
204
- estimatedMemoryMB: 3072,
205
- },
206
- {
207
- id: "rag-platform",
208
- name: "RAG Platform",
209
- description:
210
- "RAGFlow with MySQL, Redis, MinIO, OpenSearch for knowledge ingestion and grounded AI assistants",
211
- services: ["ragflow", "mysql", "redis", "minio", "opensearch", "caddy"],
212
- skillPacks: ["ragflow-platform"],
213
- estimatedMemoryMB: 6144,
214
- },
215
- {
216
- id: "zero-trust",
217
- name: "Zero-Trust Security",
218
- description:
219
- "SSO, secrets management, and access control with Authelia, Keycloak, and Infisical",
220
- services: [
221
- "authelia",
222
- "keycloak",
223
- "infisical",
224
- "postgresql",
225
- "redis",
226
- "caddy",
227
- ],
228
- skillPacks: ["authelia-security"],
229
- estimatedMemoryMB: 3584,
230
- },
231
- {
232
- id: "content-platform",
233
- name: "Content Platform",
234
- description:
235
- "CMS and newsletter stack with Directus, Strapi, Listmonk, and Stirling PDF",
236
- services: [
237
- "directus",
238
- "strapi",
239
- "listmonk",
240
- "postgresql",
241
- "redis",
242
- "stirling-pdf",
243
- "caddy",
244
- ],
245
- skillPacks: ["cms-stack"],
246
- estimatedMemoryMB: 3584,
247
- },
248
- {
249
- id: "ai-orchestrator",
250
- name: "AI Orchestrator",
251
- description:
252
- "Langflow and Firecrawl for building and deploying AI workflows",
253
- services: ["langflow", "firecrawl", "postgresql", "redis", "caddy"],
254
- skillPacks: ["ai-agent-orchestra"],
255
- estimatedMemoryMB: 3072,
256
- },
257
- // ── New Presets (from feature analysis) ───────────────────────────────────
258
- {
259
- id: "support-desk",
260
- name: "Support Desk",
261
- description:
262
- "AI-powered customer support with live chat, LLM observability, and ticket management",
263
- services: [
264
- "chatwoot",
265
- "chatwoot-worker",
266
- "langfuse",
267
- "redis",
268
- "postgresql",
269
- "caddy",
270
- ],
271
- skillPacks: ["customer-support"],
272
- estimatedMemoryMB: 3072,
273
- },
274
- {
275
- id: "sales-machine",
276
- name: "Sales Machine",
277
- description:
278
- "CRM-driven sales pipeline with email marketing, newsletters, and workflow automation",
279
- services: [
280
- "twenty",
281
- "mautic",
282
- "listmonk",
283
- "n8n",
284
- "postgresql",
285
- "mysql",
286
- "redis",
287
- "caddy",
288
- ],
289
- skillPacks: ["sales-pipeline"],
290
- estimatedMemoryMB: 4096,
291
- },
292
- {
293
- id: "data-warehouse",
294
- name: "Data Warehouse",
295
- description:
296
- "End-to-end data pipeline with DAG orchestration, 300+ connectors, and monitoring",
297
- services: [
298
- "airflow",
299
- "airbyte",
300
- "postgresql",
301
- "grafana",
302
- "prometheus",
303
- "redis",
304
- "caddy",
305
- ],
306
- skillPacks: ["data-pipeline"],
307
- estimatedMemoryMB: 4096,
308
- },
309
- {
310
- id: "voice-center",
311
- name: "Voice Center",
312
- description:
313
- "AI voice agent stack with programmable telephony, transcription, and real-time comms",
314
- services: ["fonoster", "livekit", "whisper", "redis", "caddy"],
315
- skillPacks: ["voice-agent"],
316
- estimatedMemoryMB: 3072,
317
- },
318
- {
319
- id: "shopfront",
320
- name: "Shopfront",
321
- description:
322
- "AI-managed headless e-commerce with product management and object storage",
323
- services: ["medusa", "minio", "postgresql", "redis", "caddy"],
324
- skillPacks: ["ecommerce-ops"],
325
- estimatedMemoryMB: 2560,
326
- },
4
+ {
5
+ id: "minimal",
6
+ name: "Minimal",
7
+ description: "OpenClaw + Redis for caching and session management",
8
+ services: ["redis", "caddy"],
9
+ skillPacks: [],
10
+ estimatedMemoryMB: 1024,
11
+ },
12
+ {
13
+ id: "creator",
14
+ name: "Creator",
15
+ description: "Full media creation stack with FFmpeg, Remotion, and MinIO storage",
16
+ services: ["ffmpeg", "remotion", "minio", "redis", "caddy"],
17
+ skillPacks: ["video-creator"],
18
+ estimatedMemoryMB: 2048,
19
+ },
20
+ {
21
+ id: "researcher",
22
+ name: "Researcher",
23
+ description: "Research agent with vector search, web scraping, and meta search",
24
+ services: ["qdrant", "searxng", "browserless", "redis", "caddy", "postgresql"],
25
+ skillPacks: ["research-agent"],
26
+ estimatedMemoryMB: 2560,
27
+ },
28
+ {
29
+ id: "devops",
30
+ name: "DevOps",
31
+ description: "Full monitoring and automation stack with n8n, Grafana, and Uptime Kuma",
32
+ services: ["n8n", "postgresql", "redis", "uptime-kuma", "grafana", "prometheus", "caddy"],
33
+ skillPacks: ["dev-ops"],
34
+ estimatedMemoryMB: 3072,
35
+ },
36
+ {
37
+ id: "full",
38
+ name: "Full Stack",
39
+ description: "Everything enabled — all services and skill packs",
40
+ services: [
41
+ "redis",
42
+ "postgresql",
43
+ "qdrant",
44
+ "n8n",
45
+ "ffmpeg",
46
+ "remotion",
47
+ "minio",
48
+ "caddy",
49
+ "browserless",
50
+ "searxng",
51
+ "meilisearch",
52
+ "uptime-kuma",
53
+ "grafana",
54
+ "prometheus",
55
+ "ollama",
56
+ "whisper",
57
+ "gotify",
58
+ ],
59
+ skillPacks: [
60
+ "video-creator",
61
+ "research-agent",
62
+ "social-media",
63
+ "dev-ops",
64
+ "knowledge-base",
65
+ "local-ai",
66
+ ],
67
+ estimatedMemoryMB: 8192,
68
+ },
69
+ {
70
+ id: "content-creator",
71
+ name: "Content Creator",
72
+ description: "Social media scheduling with Postiz, media processing, and analytics",
73
+ services: ["postiz", "ffmpeg", "minio", "redis", "postgresql", "umami", "caddy"],
74
+ skillPacks: ["content-creator"],
75
+ estimatedMemoryMB: 2048,
76
+ },
77
+ {
78
+ id: "ai-playground",
79
+ name: "AI Playground",
80
+ description: "Local AI stack with Ollama, Open WebUI, LiteLLM gateway, and document chat",
81
+ services: ["ollama", "open-webui", "litellm", "anything-llm", "redis", "caddy"],
82
+ skillPacks: ["ai-playground"],
83
+ estimatedMemoryMB: 4096,
84
+ },
85
+ {
86
+ id: "ai-powerhouse",
87
+ name: "AI Powerhouse",
88
+ description: "Local AI stack with Ollama, Open WebUI, LiteLLM gateway, and document chat",
89
+ services: [
90
+ "ollama",
91
+ "redis",
92
+ "qdrant",
93
+ "minio",
94
+ "litellm",
95
+ "anything-llm",
96
+ "n8n",
97
+ "postgresql",
98
+ "caddy",
99
+ "open-webui",
100
+ "searxng",
101
+ ],
102
+ skillPacks: ["ai-playground"],
103
+ estimatedMemoryMB: 4096,
104
+ },
105
+ {
106
+ id: "ai-virtual-desktop",
107
+ name: "AI Virtual Desktop",
108
+ description:
109
+ "Self-hosted autonomous AI agent with local LLM, vector memory, web search, browser automation, and workflow orchestration. The open-source alternative to Manus and Perplexity Computer.",
110
+ services: [
111
+ "ollama",
112
+ "qdrant",
113
+ "postgresql",
114
+ "redis",
115
+ "minio",
116
+ "n8n",
117
+ "browserless",
118
+ "open-webui",
119
+ "searxng",
120
+ "caddy",
121
+ ],
122
+ skillPacks: ["research-agent", "dev-ops"],
123
+ estimatedMemoryMB: 6144,
124
+ },
125
+ {
126
+ id: "coding-team",
127
+ name: "Coding Team",
128
+ description: "AI development environment with coding agents, Git, and browser IDE",
129
+ services: ["claude-code", "opencode", "gitea", "code-server", "redis", "caddy"],
130
+ skillPacks: ["coding-team"],
131
+ estimatedMemoryMB: 2560,
132
+ },
133
+ {
134
+ id: "lasuite-meet",
135
+ name: "La Suite Meet",
136
+ description: "Open-source video conferencing from La Suite numérique (Django + LiveKit)",
137
+ services: [
138
+ "postgresql",
139
+ "redis",
140
+ "livekit",
141
+ "lasuite-meet-backend",
142
+ "lasuite-meet-frontend",
143
+ "lasuite-meet-agents",
144
+ "whisper",
145
+ "ollama",
146
+ "caddy",
147
+ ],
148
+ skillPacks: [],
149
+ estimatedMemoryMB: 2048,
150
+ },
151
+ // ── New service presets ─────────────────────────────────────────────────
152
+ {
153
+ id: "backend-platform",
154
+ name: "Backend Platform",
155
+ description:
156
+ "BaaS stack with Appwrite, MariaDB, Redis, RabbitMQ for auth, storage, and async workflows",
157
+ services: ["appwrite", "mariadb", "redis", "rabbitmq", "caddy"],
158
+ skillPacks: ["appwrite-platform"],
159
+ estimatedMemoryMB: 3072,
160
+ },
161
+ {
162
+ id: "rag-platform",
163
+ name: "RAG Platform",
164
+ description:
165
+ "RAGFlow with MySQL, Redis, MinIO, OpenSearch for knowledge ingestion and grounded AI assistants",
166
+ services: ["ragflow", "mysql", "redis", "minio", "opensearch", "caddy"],
167
+ skillPacks: ["ragflow-platform"],
168
+ estimatedMemoryMB: 6144,
169
+ },
170
+ {
171
+ id: "zero-trust",
172
+ name: "Zero-Trust Security",
173
+ description:
174
+ "SSO, secrets management, and access control with Authelia, Keycloak, and Infisical",
175
+ services: ["authelia", "keycloak", "infisical", "postgresql", "redis", "caddy"],
176
+ skillPacks: ["authelia-security"],
177
+ estimatedMemoryMB: 3584,
178
+ },
179
+ {
180
+ id: "content-platform",
181
+ name: "Content Platform",
182
+ description: "CMS and newsletter stack with Directus, Strapi, Listmonk, and Stirling PDF",
183
+ services: ["directus", "strapi", "listmonk", "postgresql", "redis", "stirling-pdf", "caddy"],
184
+ skillPacks: ["cms-stack"],
185
+ estimatedMemoryMB: 3584,
186
+ },
187
+ {
188
+ id: "ai-orchestrator",
189
+ name: "AI Orchestrator",
190
+ description: "Langflow and Firecrawl for building and deploying AI workflows",
191
+ services: ["langflow", "firecrawl", "postgresql", "redis", "caddy"],
192
+ skillPacks: ["ai-agent-orchestra"],
193
+ estimatedMemoryMB: 3072,
194
+ },
195
+ // ── New Presets (from feature analysis) ───────────────────────────────────
196
+ {
197
+ id: "support-desk",
198
+ name: "Support Desk",
199
+ description:
200
+ "AI-powered customer support with live chat, LLM observability, and ticket management",
201
+ services: ["chatwoot", "chatwoot-worker", "langfuse", "redis", "postgresql", "caddy"],
202
+ skillPacks: ["customer-support"],
203
+ estimatedMemoryMB: 3072,
204
+ },
205
+ {
206
+ id: "sales-machine",
207
+ name: "Sales Machine",
208
+ description:
209
+ "CRM-driven sales pipeline with email marketing, newsletters, and workflow automation",
210
+ services: ["twenty", "mautic", "listmonk", "n8n", "postgresql", "mysql", "redis", "caddy"],
211
+ skillPacks: ["sales-pipeline"],
212
+ estimatedMemoryMB: 4096,
213
+ },
214
+ {
215
+ id: "data-warehouse",
216
+ name: "Data Warehouse",
217
+ description: "End-to-end data pipeline with DAG orchestration, 300+ connectors, and monitoring",
218
+ services: ["airflow", "airbyte", "postgresql", "grafana", "prometheus", "redis", "caddy"],
219
+ skillPacks: ["data-pipeline"],
220
+ estimatedMemoryMB: 4096,
221
+ },
222
+ {
223
+ id: "voice-center",
224
+ name: "Voice Center",
225
+ description:
226
+ "AI voice agent stack with programmable telephony, transcription, and real-time comms",
227
+ services: ["fonoster", "livekit", "whisper", "redis", "caddy"],
228
+ skillPacks: ["voice-agent"],
229
+ estimatedMemoryMB: 3072,
230
+ },
231
+ {
232
+ id: "shopfront",
233
+ name: "Shopfront",
234
+ description: "AI-managed headless e-commerce with product management and object storage",
235
+ services: ["medusa", "minio", "postgresql", "redis", "caddy"],
236
+ skillPacks: ["ecommerce-ops"],
237
+ estimatedMemoryMB: 2560,
238
+ },
327
239
  ];
328
240
 
329
241
  const presetMap = new Map<string, Preset>();
330
242
  for (const preset of presets) {
331
- if (presetMap.has(preset.id)) {
332
- throw new Error(`Duplicate preset ID: "${preset.id}"`);
333
- }
334
- presetMap.set(preset.id, preset);
243
+ if (presetMap.has(preset.id)) {
244
+ throw new Error(`Duplicate preset ID: "${preset.id}"`);
245
+ }
246
+ presetMap.set(preset.id, preset);
335
247
  }
336
248
 
337
249
  export const presetRegistry: ReadonlyMap<string, Preset> = presetMap;
338
250
 
339
251
  export function getPresetById(id: string): Preset | undefined {
340
- return presetMap.get(id);
252
+ return presetMap.get(id);
341
253
  }
342
254
 
343
255
  export function getAllPresets(): Preset[] {
344
- return [...presets];
256
+ return [...presets];
345
257
  }