@better-openclaw/core 1.0.24 → 1.0.26

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 (226) hide show
  1. package/dist/addon-stack.cjs +725 -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 +723 -0
  8. package/dist/addon-stack.mjs.map +1 -0
  9. package/dist/addon-stack.test.cjs +461 -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 +461 -0
  14. package/dist/addon-stack.test.mjs.map +1 -0
  15. package/dist/bare-metal-partition.test.cjs +20 -20
  16. package/dist/bare-metal-partition.test.cjs.map +1 -1
  17. package/dist/bare-metal-partition.test.mjs +2 -2
  18. package/dist/compose-validation.test.cjs +1 -1
  19. package/dist/composer.cjs +5 -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 +1 -1
  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 +54 -54
  31. package/dist/composer.test.cjs.map +1 -1
  32. package/dist/composer.test.mjs +2 -2
  33. package/dist/deployers/strip-host-ports.cjs +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 +3 -3
  38. package/dist/generate.mjs +3 -3
  39. package/dist/generate.test.cjs +56 -56
  40. package/dist/generate.test.cjs.map +1 -1
  41. package/dist/generate.test.mjs +1 -1
  42. package/dist/generators/bare-metal-install.test.cjs +18 -18
  43. package/dist/generators/bare-metal-install.test.cjs.map +1 -1
  44. package/dist/generators/bare-metal-install.test.mjs +1 -1
  45. package/dist/generators/caddy.test.cjs +13 -13
  46. package/dist/generators/caddy.test.cjs.map +1 -1
  47. package/dist/generators/caddy.test.mjs +1 -1
  48. package/dist/generators/clone-repos.test.cjs +27 -27
  49. package/dist/generators/clone-repos.test.cjs.map +1 -1
  50. package/dist/generators/clone-repos.test.mjs +1 -1
  51. package/dist/generators/env.cjs +1 -1
  52. package/dist/generators/env.test.cjs +17 -17
  53. package/dist/generators/env.test.cjs.map +1 -1
  54. package/dist/generators/env.test.mjs +1 -1
  55. package/dist/generators/health-check.test.cjs +39 -39
  56. package/dist/generators/health-check.test.cjs.map +1 -1
  57. package/dist/generators/health-check.test.mjs +1 -1
  58. package/dist/generators/postgres-init.cjs +5 -0
  59. package/dist/generators/postgres-init.cjs.map +1 -1
  60. package/dist/generators/postgres-init.d.cts.map +1 -1
  61. package/dist/generators/postgres-init.d.mts.map +1 -1
  62. package/dist/generators/postgres-init.mjs +5 -0
  63. package/dist/generators/postgres-init.mjs.map +1 -1
  64. package/dist/generators/scripts.test.cjs +39 -39
  65. package/dist/generators/scripts.test.cjs.map +1 -1
  66. package/dist/generators/scripts.test.mjs +1 -1
  67. package/dist/generators/skills.cjs +1 -1
  68. package/dist/generators/skills.d.cts.map +1 -1
  69. package/dist/generators/skills.d.mts.map +1 -1
  70. package/dist/generators/skills.mjs +141 -0
  71. package/dist/generators/skills.mjs.map +1 -1
  72. package/dist/generators/traefik.test.cjs +32 -32
  73. package/dist/generators/traefik.test.cjs.map +1 -1
  74. package/dist/generators/traefik.test.mjs +1 -1
  75. package/dist/index.cjs +21 -5
  76. package/dist/index.d.cts +5 -4
  77. package/dist/index.d.mts +5 -4
  78. package/dist/index.mjs +7 -6
  79. package/dist/migrations.test.cjs +16 -16
  80. package/dist/migrations.test.cjs.map +1 -1
  81. package/dist/migrations.test.mjs +1 -1
  82. package/dist/presets/presets.test.cjs +1 -1
  83. package/dist/presets/registry.test.cjs +14 -14
  84. package/dist/presets/registry.test.cjs.map +1 -1
  85. package/dist/presets/registry.test.mjs +1 -1
  86. package/dist/resolver.test.cjs +95 -95
  87. package/dist/resolver.test.cjs.map +1 -1
  88. package/dist/resolver.test.mjs +1 -1
  89. package/dist/{schema-eX44HhRp.d.mts → schema-BQnZrcw8.d.cts} +300 -2
  90. package/dist/schema-BQnZrcw8.d.cts.map +1 -0
  91. package/dist/{schema-tn5RK8CM.d.cts → schema-SBpL0bdI.d.mts} +300 -2
  92. package/dist/schema-SBpL0bdI.d.mts.map +1 -0
  93. package/dist/schema.cjs +148 -2
  94. package/dist/schema.cjs.map +1 -1
  95. package/dist/schema.d.cts +2 -2
  96. package/dist/schema.d.mts +2 -2
  97. package/dist/schema.mjs +139 -2
  98. package/dist/schema.mjs.map +1 -1
  99. package/dist/schema.test.cjs +86 -86
  100. package/dist/schema.test.cjs.map +1 -1
  101. package/dist/schema.test.mjs +1 -1
  102. package/dist/services/definitions/browserless.cjs +4 -1
  103. package/dist/services/definitions/browserless.cjs.map +1 -1
  104. package/dist/services/definitions/browserless.mjs +4 -1
  105. package/dist/services/definitions/browserless.mjs.map +1 -1
  106. package/dist/services/definitions/burnlink.cjs +142 -0
  107. package/dist/services/definitions/burnlink.cjs.map +1 -0
  108. package/dist/services/definitions/burnlink.d.cts +7 -0
  109. package/dist/services/definitions/burnlink.d.cts.map +1 -0
  110. package/dist/services/definitions/burnlink.d.mts +7 -0
  111. package/dist/services/definitions/burnlink.d.mts.map +1 -0
  112. package/dist/services/definitions/burnlink.mjs +141 -0
  113. package/dist/services/definitions/burnlink.mjs.map +1 -0
  114. package/dist/services/definitions/convex.cjs +43 -1
  115. package/dist/services/definitions/convex.cjs.map +1 -1
  116. package/dist/services/definitions/convex.mjs +43 -1
  117. package/dist/services/definitions/convex.mjs.map +1 -1
  118. package/dist/services/definitions/grafana.cjs +11 -1
  119. package/dist/services/definitions/grafana.cjs.map +1 -1
  120. package/dist/services/definitions/grafana.mjs +11 -1
  121. package/dist/services/definitions/grafana.mjs.map +1 -1
  122. package/dist/services/definitions/hindsight.cjs +130 -0
  123. package/dist/services/definitions/hindsight.cjs.map +1 -0
  124. package/dist/services/definitions/hindsight.d.cts +7 -0
  125. package/dist/services/definitions/hindsight.d.cts.map +1 -0
  126. package/dist/services/definitions/hindsight.d.mts +7 -0
  127. package/dist/services/definitions/hindsight.d.mts.map +1 -0
  128. package/dist/services/definitions/hindsight.mjs +129 -0
  129. package/dist/services/definitions/hindsight.mjs.map +1 -0
  130. package/dist/services/definitions/index.cjs +9 -0
  131. package/dist/services/definitions/index.cjs.map +1 -1
  132. package/dist/services/definitions/index.d.cts +4 -1
  133. package/dist/services/definitions/index.d.cts.map +1 -1
  134. package/dist/services/definitions/index.d.mts +4 -1
  135. package/dist/services/definitions/index.d.mts.map +1 -1
  136. package/dist/services/definitions/index.mjs +7 -1
  137. package/dist/services/definitions/index.mjs.map +1 -1
  138. package/dist/services/definitions/meilisearch.cjs +11 -1
  139. package/dist/services/definitions/meilisearch.cjs.map +1 -1
  140. package/dist/services/definitions/meilisearch.mjs +11 -1
  141. package/dist/services/definitions/meilisearch.mjs.map +1 -1
  142. package/dist/services/definitions/minio.cjs +3 -1
  143. package/dist/services/definitions/minio.cjs.map +1 -1
  144. package/dist/services/definitions/minio.mjs +3 -1
  145. package/dist/services/definitions/minio.mjs.map +1 -1
  146. package/dist/services/definitions/n8n.cjs +11 -1
  147. package/dist/services/definitions/n8n.cjs.map +1 -1
  148. package/dist/services/definitions/n8n.mjs +11 -1
  149. package/dist/services/definitions/n8n.mjs.map +1 -1
  150. package/dist/services/definitions/ollama.cjs +3 -1
  151. package/dist/services/definitions/ollama.cjs.map +1 -1
  152. package/dist/services/definitions/ollama.mjs +3 -1
  153. package/dist/services/definitions/ollama.mjs.map +1 -1
  154. package/dist/services/definitions/opensandbox.cjs +149 -0
  155. package/dist/services/definitions/opensandbox.cjs.map +1 -0
  156. package/dist/services/definitions/opensandbox.d.cts +7 -0
  157. package/dist/services/definitions/opensandbox.d.cts.map +1 -0
  158. package/dist/services/definitions/opensandbox.d.mts +7 -0
  159. package/dist/services/definitions/opensandbox.d.mts.map +1 -0
  160. package/dist/services/definitions/opensandbox.mjs +148 -0
  161. package/dist/services/definitions/opensandbox.mjs.map +1 -0
  162. package/dist/services/definitions/qdrant.cjs +3 -1
  163. package/dist/services/definitions/qdrant.cjs.map +1 -1
  164. package/dist/services/definitions/qdrant.mjs +3 -1
  165. package/dist/services/definitions/qdrant.mjs.map +1 -1
  166. package/dist/services/definitions/searxng.cjs +8 -1
  167. package/dist/services/definitions/searxng.cjs.map +1 -1
  168. package/dist/services/definitions/searxng.mjs +8 -1
  169. package/dist/services/definitions/searxng.mjs.map +1 -1
  170. package/dist/services/definitions/uptime-kuma.cjs +8 -1
  171. package/dist/services/definitions/uptime-kuma.cjs.map +1 -1
  172. package/dist/services/definitions/uptime-kuma.mjs +8 -1
  173. package/dist/services/definitions/uptime-kuma.mjs.map +1 -1
  174. package/dist/services/registry.test.cjs +36 -36
  175. package/dist/services/registry.test.cjs.map +1 -1
  176. package/dist/services/registry.test.mjs +1 -1
  177. package/dist/{skills-BlzpHmpH.cjs → skills-BSF7iNa4.cjs} +142 -1
  178. package/dist/{skills-BlzpHmpH.cjs.map → skills-BSF7iNa4.cjs.map} +1 -1
  179. package/dist/{vi.2VT5v0um-C_jmO7m2.mjs → test.CTcmp4Su-ClCHJ3FA.mjs} +6793 -6403
  180. package/dist/test.CTcmp4Su-ClCHJ3FA.mjs.map +1 -0
  181. package/dist/{vi.2VT5v0um-iVBt6Fyq.cjs → test.CTcmp4Su-DlzTarwH.cjs} +6793 -6403
  182. package/dist/test.CTcmp4Su-DlzTarwH.cjs.map +1 -0
  183. package/dist/track-analytics.test.cjs +28 -28
  184. package/dist/track-analytics.test.cjs.map +1 -1
  185. package/dist/track-analytics.test.mjs +1 -1
  186. package/dist/types.cjs.map +1 -1
  187. package/dist/types.d.cts +10 -2
  188. package/dist/types.d.cts.map +1 -1
  189. package/dist/types.d.mts +10 -2
  190. package/dist/types.d.mts.map +1 -1
  191. package/dist/types.mjs.map +1 -1
  192. package/dist/validator.cjs +1 -1
  193. package/dist/validator.test.cjs +15 -15
  194. package/dist/validator.test.cjs.map +1 -1
  195. package/dist/validator.test.mjs +2 -2
  196. package/dist/version-manager.test.cjs +37 -37
  197. package/dist/version-manager.test.cjs.map +1 -1
  198. package/dist/version-manager.test.mjs +1 -1
  199. package/package.json +4 -4
  200. package/src/__snapshots__/composer.snapshot.test.ts.snap +5 -0
  201. package/src/addon-stack.test.ts +648 -0
  202. package/src/addon-stack.ts +1046 -0
  203. package/src/composer.ts +4 -4
  204. package/src/generators/postgres-init.ts +2 -0
  205. package/src/generators/skills.ts +142 -0
  206. package/src/index.ts +20 -2
  207. package/src/schema.ts +190 -0
  208. package/src/services/definitions/browserless.ts +3 -0
  209. package/src/services/definitions/burnlink.ts +142 -0
  210. package/src/services/definitions/convex.ts +31 -0
  211. package/src/services/definitions/grafana.ts +9 -0
  212. package/src/services/definitions/hindsight.ts +131 -0
  213. package/src/services/definitions/index.ts +10 -0
  214. package/src/services/definitions/meilisearch.ts +9 -0
  215. package/src/services/definitions/minio.ts +2 -0
  216. package/src/services/definitions/n8n.ts +9 -0
  217. package/src/services/definitions/ollama.ts +2 -0
  218. package/src/services/definitions/opensandbox.ts +156 -0
  219. package/src/services/definitions/qdrant.ts +2 -0
  220. package/src/services/definitions/searxng.ts +3 -0
  221. package/src/services/definitions/uptime-kuma.ts +3 -0
  222. package/src/types.ts +18 -0
  223. package/dist/schema-eX44HhRp.d.mts.map +0 -1
  224. package/dist/schema-tn5RK8CM.d.cts.map +0 -1
  225. package/dist/vi.2VT5v0um-C_jmO7m2.mjs.map +0 -1
  226. package/dist/vi.2VT5v0um-iVBt6Fyq.cjs.map +0 -1
@@ -0,0 +1,131 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const hindsightDefinition: ServiceDefinition = {
4
+ id: "hindsight",
5
+ name: "Hindsight",
6
+ description:
7
+ "Open-source agent memory system with Retain/Recall/Reflect operations, multi-strategy retrieval (semantic, keyword, graph, temporal), and MCP server support.",
8
+ category: "ai",
9
+ icon: "🧠",
10
+
11
+ image: "ghcr.io/vectorize-io/hindsight",
12
+ imageTag: "latest",
13
+ ports: [
14
+ {
15
+ host: 8889,
16
+ container: 8888,
17
+ description: "Hindsight API and MCP endpoint",
18
+ exposed: true,
19
+ },
20
+ {
21
+ host: 9998,
22
+ container: 9999,
23
+ description: "Hindsight admin web UI",
24
+ exposed: true,
25
+ },
26
+ ],
27
+ volumes: [
28
+ {
29
+ name: "hindsight-data",
30
+ containerPath: "/home/hindsight/.pg0",
31
+ description: "Embedded PostgreSQL data (used when no external DB configured)",
32
+ },
33
+ ],
34
+ environment: [
35
+ {
36
+ key: "HINDSIGHT_API_LLM_PROVIDER",
37
+ defaultValue: "openai",
38
+ secret: false,
39
+ description: "LLM provider (openai, anthropic, gemini, groq, ollama, lmstudio)",
40
+ required: true,
41
+ },
42
+ {
43
+ key: "HINDSIGHT_API_LLM_API_KEY",
44
+ defaultValue: "",
45
+ secret: true,
46
+ description: "API key for the configured LLM provider",
47
+ required: true,
48
+ },
49
+ {
50
+ key: "HINDSIGHT_API_LLM_MODEL",
51
+ defaultValue: "o3-mini",
52
+ secret: false,
53
+ description: "LLM model to use for memory operations (e.g., o3-mini, claude-sonnet-4-20250514)",
54
+ required: true,
55
+ },
56
+ {
57
+ key: "HINDSIGHT_API_DATABASE_URL",
58
+ defaultValue: "postgresql://hindsight:${HINDSIGHT_DB_PASSWORD}@postgresql:5432/hindsight",
59
+ secret: false,
60
+ description: "PostgreSQL connection string (leave empty to use embedded pg0 for dev)",
61
+ required: false,
62
+ },
63
+ {
64
+ key: "HINDSIGHT_API_MCP_ENABLED",
65
+ defaultValue: "true",
66
+ secret: false,
67
+ description: "Enable MCP server for agent tool integration",
68
+ required: false,
69
+ },
70
+ {
71
+ key: "HINDSIGHT_API_SKIP_LLM_VERIFICATION",
72
+ defaultValue: "false",
73
+ secret: false,
74
+ description: "Skip LLM connection verification on startup",
75
+ required: false,
76
+ },
77
+ ],
78
+ healthcheck: {
79
+ test: "wget -q --spider http://localhost:8888/metrics || exit 1",
80
+ interval: "30s",
81
+ timeout: "10s",
82
+ retries: 5,
83
+ startPeriod: "30s",
84
+ },
85
+ dependsOn: [],
86
+ restartPolicy: "unless-stopped",
87
+ networks: ["openclaw-network"],
88
+
89
+ skills: [],
90
+ openclawEnvVars: [
91
+ {
92
+ key: "HINDSIGHT_HOST",
93
+ defaultValue: "hindsight",
94
+ secret: false,
95
+ description: "Hindsight hostname for agent memory operations",
96
+ required: false,
97
+ },
98
+ {
99
+ key: "HINDSIGHT_API_PORT",
100
+ defaultValue: "8888",
101
+ secret: false,
102
+ description: "Hindsight API port",
103
+ required: false,
104
+ },
105
+ ],
106
+
107
+ docsUrl: "https://hindsight.vectorize.io/",
108
+ tags: ["agent-memory", "mcp", "recall", "knowledge-graph", "semantic-search"],
109
+ maturity: "beta",
110
+
111
+ requires: ["postgresql"],
112
+ recommends: ["ollama"],
113
+ conflictsWith: [],
114
+
115
+ minMemoryMB: 512,
116
+ gpuRequired: false,
117
+ capDropCompatible: true,
118
+ proxyPath: "/hindsight",
119
+ envQuirks: [
120
+ {
121
+ key: "HINDSIGHT_API_LLM_API_KEY",
122
+ issue: "min_length" as const,
123
+ fix: { type: "generate_base64url" as const, minBytes: 16 },
124
+ },
125
+ {
126
+ key: "HINDSIGHT_API_DATABASE_URL",
127
+ issue: "must_sync" as const,
128
+ fix: { type: "sync_with" as const, syncKey: "HINDSIGHT_DB_PASSWORD" },
129
+ },
130
+ ],
131
+ };
@@ -11,6 +11,7 @@ export { axolotlDefinition } from "./axolotl.js";
11
11
  export { baserowDefinition } from "./baserow.js";
12
12
  export { beszelDefinition } from "./beszel.js";
13
13
  export { browserlessDefinition } from "./browserless.js";
14
+ export { burnlinkDefinition } from "./burnlink.js";
14
15
  export { caddyDefinition } from "./caddy.js";
15
16
  export { calComDefinition } from "./cal-com.js";
16
17
  export { calibreWebDefinition } from "./calibre-web.js";
@@ -58,6 +59,7 @@ export { grafanaDefinition } from "./grafana.js";
58
59
  export { graylogDefinition } from "./graylog.js";
59
60
  export { headscaleDefinition } from "./headscale.js";
60
61
  export { hedgedocDefinition } from "./hedgedoc.js";
62
+ export { hindsightDefinition } from "./hindsight.js";
61
63
  export { hexstrikeDefinition } from "./hexstrike.js";
62
64
  export { heyformDefinition } from "./heyform.js";
63
65
  export { homeassistantDefinition } from "./homeassistant.js";
@@ -115,6 +117,7 @@ export { openWebuiDefinition } from "./open-webui.js";
115
117
  export { opencodeDefinition } from "./opencode.js";
116
118
  export { openhandsDefinition } from "./openhands.js";
117
119
  export { openpanelDefinition } from "./openpanel.js";
120
+ export { opensandboxDefinition } from "./opensandbox.js";
118
121
  export { opensearchDefinition } from "./opensearch.js";
119
122
  export { outlineDefinition } from "./outline.js";
120
123
  export { paperlessNgxDefinition } from "./paperless-ngx.js";
@@ -201,6 +204,7 @@ import { axolotlDefinition } from "./axolotl.js";
201
204
  import { baserowDefinition } from "./baserow.js";
202
205
  import { beszelDefinition } from "./beszel.js";
203
206
  import { browserlessDefinition } from "./browserless.js";
207
+ import { burnlinkDefinition } from "./burnlink.js";
204
208
  import { caddyDefinition } from "./caddy.js";
205
209
  import { calComDefinition } from "./cal-com.js";
206
210
  import { calibreWebDefinition } from "./calibre-web.js";
@@ -248,6 +252,7 @@ import { grafanaDefinition } from "./grafana.js";
248
252
  import { graylogDefinition } from "./graylog.js";
249
253
  import { headscaleDefinition } from "./headscale.js";
250
254
  import { hedgedocDefinition } from "./hedgedoc.js";
255
+ import { hindsightDefinition } from "./hindsight.js";
251
256
  import { hexstrikeDefinition } from "./hexstrike.js";
252
257
  import { heyformDefinition } from "./heyform.js";
253
258
  import { homeassistantDefinition } from "./homeassistant.js";
@@ -305,6 +310,7 @@ import { openWebuiDefinition } from "./open-webui.js";
305
310
  import { opencodeDefinition } from "./opencode.js";
306
311
  import { openhandsDefinition } from "./openhands.js";
307
312
  import { openpanelDefinition } from "./openpanel.js";
313
+ import { opensandboxDefinition } from "./opensandbox.js";
308
314
  import { opensearchDefinition } from "./opensearch.js";
309
315
  import { outlineDefinition } from "./outline.js";
310
316
  import { paperlessNgxDefinition } from "./paperless-ngx.js";
@@ -561,6 +567,10 @@ export const allServiceDefinitions: ServiceDefinition[] = [
561
567
  vikunjaDefinition,
562
568
  wireguardDefinition,
563
569
  woodpeckerCiDefinition,
570
+ // ── New Integrations ────────────────────────────────────────────────────
571
+ hindsightDefinition,
572
+ burnlinkDefinition,
573
+ opensandboxDefinition,
564
574
  // ── SaaS Boilerplates ────────────────────────────────────────────────────
565
575
  openSaasDefinition,
566
576
  apptensionSaasDefinition,
@@ -80,4 +80,13 @@ export const meilisearchDefinition: ServiceDefinition = {
80
80
 
81
81
  minMemoryMB: 256,
82
82
  gpuRequired: false,
83
+ capDropCompatible: true,
84
+ proxyPath: "/meilisearch",
85
+ envQuirks: [
86
+ {
87
+ key: "MEILI_MASTER_KEY",
88
+ issue: "min_length" as const,
89
+ fix: { type: "generate_base64url" as const, minBytes: 24 },
90
+ },
91
+ ],
83
92
  };
@@ -102,4 +102,6 @@ export const minioDefinition: ServiceDefinition = {
102
102
 
103
103
  minMemoryMB: 256,
104
104
  gpuRequired: false,
105
+ capDropCompatible: true,
106
+ proxyPath: "/minio",
105
107
  };
@@ -150,4 +150,13 @@ export const n8nDefinition: ServiceDefinition = {
150
150
 
151
151
  minMemoryMB: 512,
152
152
  gpuRequired: false,
153
+ capDropCompatible: true,
154
+ proxyPath: "/n8n",
155
+ envQuirks: [
156
+ {
157
+ key: "DB_POSTGRESDB_PASSWORD",
158
+ issue: "must_sync" as const,
159
+ fix: { type: "sync_with" as const, syncKey: "N8N_DB_PASSWORD" },
160
+ },
161
+ ],
153
162
  };
@@ -65,4 +65,6 @@ export const ollamaDefinition: ServiceDefinition = {
65
65
 
66
66
  minMemoryMB: 2048,
67
67
  gpuRequired: false,
68
+ capDropCompatible: false,
69
+ proxyPath: "/ollama",
68
70
  };
@@ -0,0 +1,156 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const opensandboxDefinition: ServiceDefinition = {
4
+ id: "opensandbox",
5
+ name: "OpenSandbox",
6
+ description:
7
+ "Secure containerized code execution for AI agents. Multi-language sandboxes (Python, JS/TS, Java, Go, Bash) with file operations, resource limits, and network isolation.",
8
+ category: "dev-tools",
9
+ icon: "📦",
10
+
11
+ image: "opensandbox/server",
12
+ imageTag: "v1.0.6",
13
+ ports: [
14
+ {
15
+ host: 8080,
16
+ container: 8080,
17
+ description: "OpenSandbox Lifecycle API (FastAPI)",
18
+ exposed: true,
19
+ },
20
+ ],
21
+ volumes: [
22
+ {
23
+ name: "/var/run/docker.sock",
24
+ containerPath: "/var/run/docker.sock",
25
+ description:
26
+ "Docker socket (required for managing sandbox containers)",
27
+ },
28
+ {
29
+ name: "./sandbox.toml",
30
+ containerPath: "/root/.sandbox.toml:ro",
31
+ description: "OpenSandbox configuration file (read-only bind mount)",
32
+ },
33
+ ],
34
+ environment: [
35
+ {
36
+ key: "OPEN_SANDBOX_API_KEY",
37
+ defaultValue: "",
38
+ secret: true,
39
+ description:
40
+ "API key for OpenSandbox lifecycle API authentication (min 32 chars)",
41
+ required: true,
42
+ },
43
+ {
44
+ key: "OPENSANDBOX_LOG_LEVEL",
45
+ defaultValue: "INFO",
46
+ secret: false,
47
+ description: "Log verbosity (DEBUG, INFO, WARNING, ERROR)",
48
+ required: false,
49
+ },
50
+ {
51
+ key: "OPENSANDBOX_RUNTIME_TYPE",
52
+ defaultValue: "docker",
53
+ secret: false,
54
+ description: "Runtime backend (always docker for VPS deployments)",
55
+ required: false,
56
+ },
57
+ {
58
+ key: "OPENSANDBOX_EXECD_IMAGE",
59
+ defaultValue: "opensandbox/execd:v1.0.6",
60
+ secret: false,
61
+ description:
62
+ "Execution daemon image injected into sandbox containers",
63
+ required: false,
64
+ },
65
+ {
66
+ key: "OPENSANDBOX_NETWORK_MODE",
67
+ defaultValue: "bridge",
68
+ secret: false,
69
+ description:
70
+ "Container networking mode (always bridge for isolation)",
71
+ required: false,
72
+ },
73
+ {
74
+ key: "OPENSANDBOX_PIDS_LIMIT",
75
+ defaultValue: "512",
76
+ secret: false,
77
+ description: "Max PIDs per sandbox (fork bomb protection)",
78
+ required: false,
79
+ },
80
+ {
81
+ key: "OPENSANDBOX_NO_NEW_PRIVILEGES",
82
+ defaultValue: "true",
83
+ secret: false,
84
+ description: "Security: prevent privilege escalation in sandboxes",
85
+ required: false,
86
+ },
87
+ {
88
+ key: "OPENSANDBOX_SECURE_RUNTIME",
89
+ defaultValue: "gvisor",
90
+ secret: false,
91
+ description: "Secure container runtime (gVisor for sandbox isolation)",
92
+ required: false,
93
+ },
94
+ ],
95
+ healthcheck: {
96
+ test: "curl --fail http://localhost:8080/health || exit 1",
97
+ interval: "30s",
98
+ timeout: "10s",
99
+ retries: 3,
100
+ startPeriod: "15s",
101
+ },
102
+ dependsOn: [],
103
+ restartPolicy: "unless-stopped",
104
+ networks: ["openclaw-network"],
105
+
106
+ skills: [{ skillId: "code-sandbox", autoInstall: true }],
107
+ openclawEnvVars: [
108
+ {
109
+ key: "OPENSANDBOX_HOST",
110
+ defaultValue: "opensandbox",
111
+ secret: false,
112
+ description: "OpenSandbox hostname for OpenClaw",
113
+ required: true,
114
+ },
115
+ {
116
+ key: "OPENSANDBOX_PORT",
117
+ defaultValue: "8080",
118
+ secret: false,
119
+ description: "OpenSandbox port for OpenClaw",
120
+ required: true,
121
+ },
122
+ {
123
+ key: "OPENSANDBOX_API_KEY",
124
+ defaultValue: "${OPEN_SANDBOX_API_KEY}",
125
+ secret: true,
126
+ description: "OpenSandbox API key for OpenClaw",
127
+ required: true,
128
+ },
129
+ ],
130
+
131
+ docsUrl: "https://github.com/anthropics/OpenSandbox",
132
+ tags: [
133
+ "sandbox",
134
+ "code-execution",
135
+ "security",
136
+ "ai-agent",
137
+ "isolation",
138
+ ],
139
+ maturity: "stable",
140
+
141
+ requires: [],
142
+ recommends: [],
143
+ conflictsWith: [],
144
+
145
+ minMemoryMB: 768,
146
+ gpuRequired: false,
147
+ capDropCompatible: true,
148
+ proxyPath: "/sandbox",
149
+ envQuirks: [
150
+ {
151
+ key: "OPEN_SANDBOX_API_KEY",
152
+ issue: "min_length",
153
+ fix: { type: "generate_base64url", minBytes: 32 },
154
+ },
155
+ ],
156
+ };
@@ -79,4 +79,6 @@ export const qdrantDefinition: ServiceDefinition = {
79
79
 
80
80
  minMemoryMB: 512,
81
81
  gpuRequired: false,
82
+ capDropCompatible: true,
83
+ proxyPath: "/qdrant",
82
84
  };
@@ -65,4 +65,7 @@ export const searxngDefinition: ServiceDefinition = {
65
65
 
66
66
  minMemoryMB: 256,
67
67
  gpuRequired: false,
68
+ capDropCompatible: false,
69
+ proxyPath: "/searxng",
70
+ firstBootCapabilities: ["CHOWN", "SETGID", "SETUID"],
68
71
  };
@@ -50,4 +50,7 @@ export const uptimeKumaDefinition: ServiceDefinition = {
50
50
 
51
51
  minMemoryMB: 256,
52
52
  gpuRequired: false,
53
+ capDropCompatible: false,
54
+ proxyPath: "/uptime-kuma",
55
+ firstBootCapabilities: ["CHOWN", "SETGID", "SETUID"],
53
56
  };
package/src/types.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import type { z } from "zod";
2
2
  import type {
3
+ AddonStackInputSchema,
4
+ AddonStackResultSchema,
5
+ AddonStackUpdateInputSchema,
6
+ AddonStackUpdateResultSchema,
3
7
  AddedDependencySchema,
4
8
  AiProviderSchema,
5
9
  ApiErrorSchema,
@@ -9,6 +13,8 @@ import type {
9
13
  DeploymentTypeSchema,
10
14
  DeploySchema,
11
15
  DeployTargetSchema,
16
+ EnvQuirkFixSchema,
17
+ EnvQuirkSchema,
12
18
  EnvVariableSchema,
13
19
  ErrorSchema,
14
20
  GenerationInputSchema,
@@ -24,6 +30,7 @@ import type {
24
30
  PlatformSchema,
25
31
  PortMappingSchema,
26
32
  PresetSchema,
33
+ ProxyRouteSchema,
27
34
  ProxyTypeSchema,
28
35
  ResolvedServiceSchema,
29
36
  ResolverOutputSchema,
@@ -33,6 +40,7 @@ import type {
33
40
  ServiceDefinitionSchema,
34
41
  SkillBindingSchema,
35
42
  SkillPackSchema,
43
+ SkippedServiceSchema,
36
44
  ValidateRequestSchema,
37
45
  ValidateResponseSchema,
38
46
  VolumeMappingSchema,
@@ -86,6 +94,16 @@ export type ValidateRequest = z.infer<typeof ValidateRequestSchema>;
86
94
  export type ValidateResponse = z.infer<typeof ValidateResponseSchema>;
87
95
  export type ApiError = z.infer<typeof ApiErrorSchema>;
88
96
 
97
+ // Addon Stack (Clawexa)
98
+ export type EnvQuirkFix = z.infer<typeof EnvQuirkFixSchema>;
99
+ export type EnvQuirk = z.infer<typeof EnvQuirkSchema>;
100
+ export type ProxyRoute = z.infer<typeof ProxyRouteSchema>;
101
+ export type SkippedService = z.infer<typeof SkippedServiceSchema>;
102
+ export type AddonStackInput = z.infer<typeof AddonStackInputSchema>;
103
+ export type AddonStackResult = z.infer<typeof AddonStackResultSchema>;
104
+ export type AddonStackUpdateInput = z.infer<typeof AddonStackUpdateInputSchema>;
105
+ export type AddonStackUpdateResult = z.infer<typeof AddonStackUpdateResultSchema>;
106
+
89
107
  // ─── Additional Types ───────────────────────────────────────────────────────
90
108
 
91
109
  export interface ResolverInput {
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-eX44HhRp.d.mts","names":[],"sources":["../src/schema.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-tn5RK8CM.d.cts","names":[],"sources":["../src/schema.ts"],"mappings":"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"}