@better-openclaw/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-lint.log +360 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/dist/bare-metal-partition.d.ts +22 -0
  5. package/dist/bare-metal-partition.d.ts.map +1 -0
  6. package/dist/bare-metal-partition.js +49 -0
  7. package/dist/bare-metal-partition.js.map +1 -0
  8. package/dist/composer.d.ts +17 -0
  9. package/dist/composer.d.ts.map +1 -0
  10. package/dist/composer.js +305 -0
  11. package/dist/composer.js.map +1 -0
  12. package/dist/generate.d.ts +7 -0
  13. package/dist/generate.d.ts.map +1 -0
  14. package/dist/generate.js +218 -0
  15. package/dist/generate.js.map +1 -0
  16. package/dist/generators/bare-metal-install.d.ts +18 -0
  17. package/dist/generators/bare-metal-install.d.ts.map +1 -0
  18. package/dist/generators/bare-metal-install.js +228 -0
  19. package/dist/generators/bare-metal-install.js.map +1 -0
  20. package/dist/generators/caddy.d.ts +13 -0
  21. package/dist/generators/caddy.d.ts.map +1 -0
  22. package/dist/generators/caddy.js +85 -0
  23. package/dist/generators/caddy.js.map +1 -0
  24. package/dist/generators/env.d.ts +42 -0
  25. package/dist/generators/env.d.ts.map +1 -0
  26. package/dist/generators/env.js +276 -0
  27. package/dist/generators/env.js.map +1 -0
  28. package/dist/generators/grafana.d.ts +19 -0
  29. package/dist/generators/grafana.d.ts.map +1 -0
  30. package/dist/generators/grafana.js +247 -0
  31. package/dist/generators/grafana.js.map +1 -0
  32. package/dist/generators/n8n-workflows.d.ts +7 -0
  33. package/dist/generators/n8n-workflows.d.ts.map +1 -0
  34. package/dist/generators/n8n-workflows.js +78 -0
  35. package/dist/generators/n8n-workflows.js.map +1 -0
  36. package/dist/generators/native-services.d.ts +13 -0
  37. package/dist/generators/native-services.d.ts.map +1 -0
  38. package/dist/generators/native-services.js +85 -0
  39. package/dist/generators/native-services.js.map +1 -0
  40. package/dist/generators/postgres-init.d.ts +27 -0
  41. package/dist/generators/postgres-init.d.ts.map +1 -0
  42. package/dist/generators/postgres-init.js +119 -0
  43. package/dist/generators/postgres-init.js.map +1 -0
  44. package/dist/generators/prometheus.d.ts +10 -0
  45. package/dist/generators/prometheus.d.ts.map +1 -0
  46. package/dist/generators/prometheus.js +79 -0
  47. package/dist/generators/prometheus.js.map +1 -0
  48. package/dist/generators/readme.d.ts +21 -0
  49. package/dist/generators/readme.d.ts.map +1 -0
  50. package/dist/generators/readme.js +224 -0
  51. package/dist/generators/readme.js.map +1 -0
  52. package/dist/generators/scripts.d.ts +7 -0
  53. package/dist/generators/scripts.d.ts.map +1 -0
  54. package/dist/generators/scripts.js +352 -0
  55. package/dist/generators/scripts.js.map +1 -0
  56. package/dist/generators/skills.d.ts +10 -0
  57. package/dist/generators/skills.d.ts.map +1 -0
  58. package/dist/generators/skills.js +596 -0
  59. package/dist/generators/skills.js.map +1 -0
  60. package/dist/index.d.ts +24 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +27 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/presets/registry.d.ts +5 -0
  65. package/dist/presets/registry.d.ts.map +1 -0
  66. package/dist/presets/registry.js +121 -0
  67. package/dist/presets/registry.js.map +1 -0
  68. package/dist/resolver.d.ts +17 -0
  69. package/dist/resolver.d.ts.map +1 -0
  70. package/dist/resolver.js +254 -0
  71. package/dist/resolver.js.map +1 -0
  72. package/dist/schema.d.ts +2426 -0
  73. package/dist/schema.d.ts.map +1 -0
  74. package/dist/schema.js +259 -0
  75. package/dist/schema.js.map +1 -0
  76. package/dist/services/definitions/anything-llm.d.ts +3 -0
  77. package/dist/services/definitions/anything-llm.d.ts.map +1 -0
  78. package/dist/services/definitions/anything-llm.js +39 -0
  79. package/dist/services/definitions/anything-llm.js.map +1 -0
  80. package/dist/services/definitions/appflowy.d.ts +3 -0
  81. package/dist/services/definitions/appflowy.d.ts.map +1 -0
  82. package/dist/services/definitions/appflowy.js +39 -0
  83. package/dist/services/definitions/appflowy.js.map +1 -0
  84. package/dist/services/definitions/beszel.d.ts +3 -0
  85. package/dist/services/definitions/beszel.d.ts.map +1 -0
  86. package/dist/services/definitions/beszel.js +39 -0
  87. package/dist/services/definitions/beszel.js.map +1 -0
  88. package/dist/services/definitions/browserless.d.ts +3 -0
  89. package/dist/services/definitions/browserless.d.ts.map +1 -0
  90. package/dist/services/definitions/browserless.js +77 -0
  91. package/dist/services/definitions/browserless.js.map +1 -0
  92. package/dist/services/definitions/caddy.d.ts +3 -0
  93. package/dist/services/definitions/caddy.d.ts.map +1 -0
  94. package/dist/services/definitions/caddy.js +50 -0
  95. package/dist/services/definitions/caddy.js.map +1 -0
  96. package/dist/services/definitions/chromadb.d.ts +3 -0
  97. package/dist/services/definitions/chromadb.d.ts.map +1 -0
  98. package/dist/services/definitions/chromadb.js +61 -0
  99. package/dist/services/definitions/chromadb.js.map +1 -0
  100. package/dist/services/definitions/claude-code.d.ts +3 -0
  101. package/dist/services/definitions/claude-code.d.ts.map +1 -0
  102. package/dist/services/definitions/claude-code.js +49 -0
  103. package/dist/services/definitions/claude-code.js.map +1 -0
  104. package/dist/services/definitions/code-server.d.ts +3 -0
  105. package/dist/services/definitions/code-server.d.ts.map +1 -0
  106. package/dist/services/definitions/code-server.js +61 -0
  107. package/dist/services/definitions/code-server.js.map +1 -0
  108. package/dist/services/definitions/codex.d.ts +3 -0
  109. package/dist/services/definitions/codex.d.ts.map +1 -0
  110. package/dist/services/definitions/codex.js +41 -0
  111. package/dist/services/definitions/codex.js.map +1 -0
  112. package/dist/services/definitions/coolify.d.ts +3 -0
  113. package/dist/services/definitions/coolify.d.ts.map +1 -0
  114. package/dist/services/definitions/coolify.js +44 -0
  115. package/dist/services/definitions/coolify.js.map +1 -0
  116. package/dist/services/definitions/dify.d.ts +3 -0
  117. package/dist/services/definitions/dify.d.ts.map +1 -0
  118. package/dist/services/definitions/dify.js +75 -0
  119. package/dist/services/definitions/dify.js.map +1 -0
  120. package/dist/services/definitions/docsgpt.d.ts +3 -0
  121. package/dist/services/definitions/docsgpt.d.ts.map +1 -0
  122. package/dist/services/definitions/docsgpt.js +39 -0
  123. package/dist/services/definitions/docsgpt.js.map +1 -0
  124. package/dist/services/definitions/dokploy.d.ts +3 -0
  125. package/dist/services/definitions/dokploy.d.ts.map +1 -0
  126. package/dist/services/definitions/dokploy.js +44 -0
  127. package/dist/services/definitions/dokploy.js.map +1 -0
  128. package/dist/services/definitions/dozzle.d.ts +3 -0
  129. package/dist/services/definitions/dozzle.d.ts.map +1 -0
  130. package/dist/services/definitions/dozzle.js +33 -0
  131. package/dist/services/definitions/dozzle.js.map +1 -0
  132. package/dist/services/definitions/ffmpeg.d.ts +3 -0
  133. package/dist/services/definitions/ffmpeg.d.ts.map +1 -0
  134. package/dist/services/definitions/ffmpeg.js +63 -0
  135. package/dist/services/definitions/ffmpeg.js.map +1 -0
  136. package/dist/services/definitions/flowise.d.ts +3 -0
  137. package/dist/services/definitions/flowise.d.ts.map +1 -0
  138. package/dist/services/definitions/flowise.js +39 -0
  139. package/dist/services/definitions/flowise.js.map +1 -0
  140. package/dist/services/definitions/gemini-cli.d.ts +3 -0
  141. package/dist/services/definitions/gemini-cli.d.ts.map +1 -0
  142. package/dist/services/definitions/gemini-cli.js +41 -0
  143. package/dist/services/definitions/gemini-cli.js.map +1 -0
  144. package/dist/services/definitions/gitea.d.ts +3 -0
  145. package/dist/services/definitions/gitea.d.ts.map +1 -0
  146. package/dist/services/definitions/gitea.js +45 -0
  147. package/dist/services/definitions/gitea.js.map +1 -0
  148. package/dist/services/definitions/gotify.d.ts +3 -0
  149. package/dist/services/definitions/gotify.d.ts.map +1 -0
  150. package/dist/services/definitions/gotify.js +60 -0
  151. package/dist/services/definitions/gotify.js.map +1 -0
  152. package/dist/services/definitions/grafana.d.ts +3 -0
  153. package/dist/services/definitions/grafana.d.ts.map +1 -0
  154. package/dist/services/definitions/grafana.js +61 -0
  155. package/dist/services/definitions/grafana.js.map +1 -0
  156. package/dist/services/definitions/index.d.ts +68 -0
  157. package/dist/services/definitions/index.d.ts.map +1 -0
  158. package/dist/services/definitions/index.js +198 -0
  159. package/dist/services/definitions/index.js.map +1 -0
  160. package/dist/services/definitions/kimi.d.ts +3 -0
  161. package/dist/services/definitions/kimi.d.ts.map +1 -0
  162. package/dist/services/definitions/kimi.js +41 -0
  163. package/dist/services/definitions/kimi.js.map +1 -0
  164. package/dist/services/definitions/lasuite-meet-agents.d.ts +3 -0
  165. package/dist/services/definitions/lasuite-meet-agents.d.ts.map +1 -0
  166. package/dist/services/definitions/lasuite-meet-agents.js +26 -0
  167. package/dist/services/definitions/lasuite-meet-agents.js.map +1 -0
  168. package/dist/services/definitions/lasuite-meet-backend.d.ts +3 -0
  169. package/dist/services/definitions/lasuite-meet-backend.d.ts.map +1 -0
  170. package/dist/services/definitions/lasuite-meet-backend.js +118 -0
  171. package/dist/services/definitions/lasuite-meet-backend.js.map +1 -0
  172. package/dist/services/definitions/lasuite-meet-frontend.d.ts +3 -0
  173. package/dist/services/definitions/lasuite-meet-frontend.d.ts.map +1 -0
  174. package/dist/services/definitions/lasuite-meet-frontend.js +31 -0
  175. package/dist/services/definitions/lasuite-meet-frontend.js.map +1 -0
  176. package/dist/services/definitions/librechat.d.ts +3 -0
  177. package/dist/services/definitions/librechat.d.ts.map +1 -0
  178. package/dist/services/definitions/librechat.js +47 -0
  179. package/dist/services/definitions/librechat.js.map +1 -0
  180. package/dist/services/definitions/lightpanda.d.ts +3 -0
  181. package/dist/services/definitions/lightpanda.d.ts.map +1 -0
  182. package/dist/services/definitions/lightpanda.js +59 -0
  183. package/dist/services/definitions/lightpanda.js.map +1 -0
  184. package/dist/services/definitions/litellm.d.ts +3 -0
  185. package/dist/services/definitions/litellm.d.ts.map +1 -0
  186. package/dist/services/definitions/litellm.js +41 -0
  187. package/dist/services/definitions/litellm.js.map +1 -0
  188. package/dist/services/definitions/livekit.d.ts +3 -0
  189. package/dist/services/definitions/livekit.d.ts.map +1 -0
  190. package/dist/services/definitions/livekit.js +31 -0
  191. package/dist/services/definitions/livekit.js.map +1 -0
  192. package/dist/services/definitions/matomo.d.ts +3 -0
  193. package/dist/services/definitions/matomo.d.ts.map +1 -0
  194. package/dist/services/definitions/matomo.js +75 -0
  195. package/dist/services/definitions/matomo.js.map +1 -0
  196. package/dist/services/definitions/matrix-synapse.d.ts +3 -0
  197. package/dist/services/definitions/matrix-synapse.d.ts.map +1 -0
  198. package/dist/services/definitions/matrix-synapse.js +82 -0
  199. package/dist/services/definitions/matrix-synapse.js.map +1 -0
  200. package/dist/services/definitions/mattermost.d.ts +3 -0
  201. package/dist/services/definitions/mattermost.d.ts.map +1 -0
  202. package/dist/services/definitions/mattermost.js +59 -0
  203. package/dist/services/definitions/mattermost.js.map +1 -0
  204. package/dist/services/definitions/meilisearch.d.ts +3 -0
  205. package/dist/services/definitions/meilisearch.d.ts.map +1 -0
  206. package/dist/services/definitions/meilisearch.js +76 -0
  207. package/dist/services/definitions/meilisearch.js.map +1 -0
  208. package/dist/services/definitions/minio.d.ts +3 -0
  209. package/dist/services/definitions/minio.d.ts.map +1 -0
  210. package/dist/services/definitions/minio.js +98 -0
  211. package/dist/services/definitions/minio.js.map +1 -0
  212. package/dist/services/definitions/mixpost.d.ts +3 -0
  213. package/dist/services/definitions/mixpost.d.ts.map +1 -0
  214. package/dist/services/definitions/mixpost.js +82 -0
  215. package/dist/services/definitions/mixpost.js.map +1 -0
  216. package/dist/services/definitions/motion-canvas.d.ts +3 -0
  217. package/dist/services/definitions/motion-canvas.d.ts.map +1 -0
  218. package/dist/services/definitions/motion-canvas.js +48 -0
  219. package/dist/services/definitions/motion-canvas.js.map +1 -0
  220. package/dist/services/definitions/n8n.d.ts +3 -0
  221. package/dist/services/definitions/n8n.d.ts.map +1 -0
  222. package/dist/services/definitions/n8n.js +146 -0
  223. package/dist/services/definitions/n8n.js.map +1 -0
  224. package/dist/services/definitions/nocodb.d.ts +3 -0
  225. package/dist/services/definitions/nocodb.d.ts.map +1 -0
  226. package/dist/services/definitions/nocodb.js +39 -0
  227. package/dist/services/definitions/nocodb.js.map +1 -0
  228. package/dist/services/definitions/ntfy.d.ts +3 -0
  229. package/dist/services/definitions/ntfy.d.ts.map +1 -0
  230. package/dist/services/definitions/ntfy.js +61 -0
  231. package/dist/services/definitions/ntfy.js.map +1 -0
  232. package/dist/services/definitions/ollama.d.ts +3 -0
  233. package/dist/services/definitions/ollama.d.ts.map +1 -0
  234. package/dist/services/definitions/ollama.js +61 -0
  235. package/dist/services/definitions/ollama.js.map +1 -0
  236. package/dist/services/definitions/open-webui.d.ts +3 -0
  237. package/dist/services/definitions/open-webui.d.ts.map +1 -0
  238. package/dist/services/definitions/open-webui.js +47 -0
  239. package/dist/services/definitions/open-webui.js.map +1 -0
  240. package/dist/services/definitions/opencode.d.ts +3 -0
  241. package/dist/services/definitions/opencode.d.ts.map +1 -0
  242. package/dist/services/definitions/opencode.js +47 -0
  243. package/dist/services/definitions/opencode.js.map +1 -0
  244. package/dist/services/definitions/openpanel.d.ts +3 -0
  245. package/dist/services/definitions/openpanel.d.ts.map +1 -0
  246. package/dist/services/definitions/openpanel.js +41 -0
  247. package/dist/services/definitions/openpanel.js.map +1 -0
  248. package/dist/services/definitions/outline.d.ts +3 -0
  249. package/dist/services/definitions/outline.d.ts.map +1 -0
  250. package/dist/services/definitions/outline.js +68 -0
  251. package/dist/services/definitions/outline.js.map +1 -0
  252. package/dist/services/definitions/paperless-ngx.d.ts +3 -0
  253. package/dist/services/definitions/paperless-ngx.d.ts.map +1 -0
  254. package/dist/services/definitions/paperless-ngx.js +85 -0
  255. package/dist/services/definitions/paperless-ngx.js.map +1 -0
  256. package/dist/services/definitions/playwright-server.d.ts +3 -0
  257. package/dist/services/definitions/playwright-server.d.ts.map +1 -0
  258. package/dist/services/definitions/playwright-server.js +34 -0
  259. package/dist/services/definitions/playwright-server.js.map +1 -0
  260. package/dist/services/definitions/portainer.d.ts +3 -0
  261. package/dist/services/definitions/portainer.d.ts.map +1 -0
  262. package/dist/services/definitions/portainer.js +44 -0
  263. package/dist/services/definitions/portainer.js.map +1 -0
  264. package/dist/services/definitions/postgresql.d.ts +3 -0
  265. package/dist/services/definitions/postgresql.d.ts.map +1 -0
  266. package/dist/services/definitions/postgresql.js +83 -0
  267. package/dist/services/definitions/postgresql.js.map +1 -0
  268. package/dist/services/definitions/postiz.d.ts +3 -0
  269. package/dist/services/definitions/postiz.d.ts.map +1 -0
  270. package/dist/services/definitions/postiz.js +79 -0
  271. package/dist/services/definitions/postiz.js.map +1 -0
  272. package/dist/services/definitions/prometheus.d.ts +3 -0
  273. package/dist/services/definitions/prometheus.d.ts.map +1 -0
  274. package/dist/services/definitions/prometheus.js +47 -0
  275. package/dist/services/definitions/prometheus.js.map +1 -0
  276. package/dist/services/definitions/qdrant.d.ts +3 -0
  277. package/dist/services/definitions/qdrant.d.ts.map +1 -0
  278. package/dist/services/definitions/qdrant.js +75 -0
  279. package/dist/services/definitions/qdrant.js.map +1 -0
  280. package/dist/services/definitions/redis.d.ts +3 -0
  281. package/dist/services/definitions/redis.d.ts.map +1 -0
  282. package/dist/services/definitions/redis.js +90 -0
  283. package/dist/services/definitions/redis.js.map +1 -0
  284. package/dist/services/definitions/remotion.d.ts +3 -0
  285. package/dist/services/definitions/remotion.d.ts.map +1 -0
  286. package/dist/services/definitions/remotion.js +48 -0
  287. package/dist/services/definitions/remotion.js.map +1 -0
  288. package/dist/services/definitions/rocketchat.d.ts +3 -0
  289. package/dist/services/definitions/rocketchat.d.ts.map +1 -0
  290. package/dist/services/definitions/rocketchat.js +54 -0
  291. package/dist/services/definitions/rocketchat.js.map +1 -0
  292. package/dist/services/definitions/searxng.d.ts +3 -0
  293. package/dist/services/definitions/searxng.d.ts.map +1 -0
  294. package/dist/services/definitions/searxng.js +61 -0
  295. package/dist/services/definitions/searxng.js.map +1 -0
  296. package/dist/services/definitions/stable-diffusion.d.ts +3 -0
  297. package/dist/services/definitions/stable-diffusion.d.ts.map +1 -0
  298. package/dist/services/definitions/stable-diffusion.js +44 -0
  299. package/dist/services/definitions/stable-diffusion.js.map +1 -0
  300. package/dist/services/definitions/steel-browser.d.ts +3 -0
  301. package/dist/services/definitions/steel-browser.d.ts.map +1 -0
  302. package/dist/services/definitions/steel-browser.js +68 -0
  303. package/dist/services/definitions/steel-browser.js.map +1 -0
  304. package/dist/services/definitions/tailscale.d.ts +3 -0
  305. package/dist/services/definitions/tailscale.d.ts.map +1 -0
  306. package/dist/services/definitions/tailscale.js +62 -0
  307. package/dist/services/definitions/tailscale.js.map +1 -0
  308. package/dist/services/definitions/temporal.d.ts +3 -0
  309. package/dist/services/definitions/temporal.d.ts.map +1 -0
  310. package/dist/services/definitions/temporal.js +97 -0
  311. package/dist/services/definitions/temporal.js.map +1 -0
  312. package/dist/services/definitions/traefik.d.ts +3 -0
  313. package/dist/services/definitions/traefik.d.ts.map +1 -0
  314. package/dist/services/definitions/traefik.js +52 -0
  315. package/dist/services/definitions/traefik.js.map +1 -0
  316. package/dist/services/definitions/umami.d.ts +3 -0
  317. package/dist/services/definitions/umami.d.ts.map +1 -0
  318. package/dist/services/definitions/umami.js +41 -0
  319. package/dist/services/definitions/umami.js.map +1 -0
  320. package/dist/services/definitions/uptime-kuma.d.ts +3 -0
  321. package/dist/services/definitions/uptime-kuma.d.ts.map +1 -0
  322. package/dist/services/definitions/uptime-kuma.js +46 -0
  323. package/dist/services/definitions/uptime-kuma.js.map +1 -0
  324. package/dist/services/definitions/valkey.d.ts +3 -0
  325. package/dist/services/definitions/valkey.d.ts.map +1 -0
  326. package/dist/services/definitions/valkey.js +60 -0
  327. package/dist/services/definitions/valkey.js.map +1 -0
  328. package/dist/services/definitions/watchtower.d.ts +3 -0
  329. package/dist/services/definitions/watchtower.d.ts.map +1 -0
  330. package/dist/services/definitions/watchtower.js +41 -0
  331. package/dist/services/definitions/watchtower.js.map +1 -0
  332. package/dist/services/definitions/weaviate.d.ts +3 -0
  333. package/dist/services/definitions/weaviate.d.ts.map +1 -0
  334. package/dist/services/definitions/weaviate.js +89 -0
  335. package/dist/services/definitions/weaviate.js.map +1 -0
  336. package/dist/services/definitions/whisper.d.ts +3 -0
  337. package/dist/services/definitions/whisper.d.ts.map +1 -0
  338. package/dist/services/definitions/whisper.js +55 -0
  339. package/dist/services/definitions/whisper.js.map +1 -0
  340. package/dist/services/registry.d.ts +12 -0
  341. package/dist/services/registry.d.ts.map +1 -0
  342. package/dist/services/registry.js +28 -0
  343. package/dist/services/registry.js.map +1 -0
  344. package/dist/skills/registry.d.ts +7 -0
  345. package/dist/skills/registry.d.ts.map +1 -0
  346. package/dist/skills/registry.js +111 -0
  347. package/dist/skills/registry.js.map +1 -0
  348. package/dist/types.d.ts +60 -0
  349. package/dist/types.d.ts.map +1 -0
  350. package/dist/types.js +20 -0
  351. package/dist/types.js.map +1 -0
  352. package/dist/validator.d.ts +16 -0
  353. package/dist/validator.d.ts.map +1 -0
  354. package/dist/validator.js +142 -0
  355. package/dist/validator.js.map +1 -0
  356. package/dist/version-manager.d.ts +10 -0
  357. package/dist/version-manager.d.ts.map +1 -0
  358. package/dist/version-manager.js +60 -0
  359. package/dist/version-manager.js.map +1 -0
  360. package/package.json +37 -0
  361. package/src/__snapshots__/composer.snapshot.test.ts.snap +903 -0
  362. package/src/bare-metal-partition.test.ts +63 -0
  363. package/src/bare-metal-partition.ts +64 -0
  364. package/src/composer.snapshot.test.ts +87 -0
  365. package/src/composer.test.ts +224 -0
  366. package/src/composer.ts +403 -0
  367. package/src/generate.test.ts +349 -0
  368. package/src/generate.ts +259 -0
  369. package/src/generators/bare-metal-install.test.ts +43 -0
  370. package/src/generators/bare-metal-install.ts +249 -0
  371. package/src/generators/caddy.ts +99 -0
  372. package/src/generators/env.ts +405 -0
  373. package/src/generators/grafana.ts +255 -0
  374. package/src/generators/n8n-workflows.ts +88 -0
  375. package/src/generators/native-services.ts +103 -0
  376. package/src/generators/postgres-init.ts +137 -0
  377. package/src/generators/prometheus.ts +89 -0
  378. package/src/generators/readme.ts +274 -0
  379. package/src/generators/scripts.ts +362 -0
  380. package/src/generators/skills.ts +628 -0
  381. package/src/index.ts +118 -0
  382. package/src/presets/registry.test.ts +32 -0
  383. package/src/presets/registry.ts +126 -0
  384. package/src/resolver.test.ts +204 -0
  385. package/src/resolver.ts +282 -0
  386. package/src/schema.test.ts +295 -0
  387. package/src/schema.ts +307 -0
  388. package/src/services/definitions/anything-llm.ts +46 -0
  389. package/src/services/definitions/appflowy.ts +46 -0
  390. package/src/services/definitions/beszel.ts +46 -0
  391. package/src/services/definitions/browserless.ts +84 -0
  392. package/src/services/definitions/caddy.ts +57 -0
  393. package/src/services/definitions/chromadb.ts +68 -0
  394. package/src/services/definitions/claude-code.ts +56 -0
  395. package/src/services/definitions/code-server.ts +67 -0
  396. package/src/services/definitions/codex.ts +48 -0
  397. package/src/services/definitions/coolify.ts +51 -0
  398. package/src/services/definitions/dify.ts +82 -0
  399. package/src/services/definitions/docsgpt.ts +45 -0
  400. package/src/services/definitions/dokploy.ts +51 -0
  401. package/src/services/definitions/dozzle.ts +40 -0
  402. package/src/services/definitions/ffmpeg.ts +70 -0
  403. package/src/services/definitions/flowise.ts +45 -0
  404. package/src/services/definitions/gemini-cli.ts +48 -0
  405. package/src/services/definitions/gitea.ts +52 -0
  406. package/src/services/definitions/gotify.ts +67 -0
  407. package/src/services/definitions/grafana.ts +68 -0
  408. package/src/services/definitions/index.ts +200 -0
  409. package/src/services/definitions/kimi.ts +48 -0
  410. package/src/services/definitions/lasuite-meet-agents.ts +33 -0
  411. package/src/services/definitions/lasuite-meet-backend.ts +125 -0
  412. package/src/services/definitions/lasuite-meet-frontend.ts +38 -0
  413. package/src/services/definitions/librechat.ts +54 -0
  414. package/src/services/definitions/lightpanda.ts +61 -0
  415. package/src/services/definitions/litellm.ts +48 -0
  416. package/src/services/definitions/livekit.ts +38 -0
  417. package/src/services/definitions/matomo.ts +82 -0
  418. package/src/services/definitions/matrix-synapse.ts +89 -0
  419. package/src/services/definitions/mattermost.ts +67 -0
  420. package/src/services/definitions/meilisearch.ts +83 -0
  421. package/src/services/definitions/minio.ts +105 -0
  422. package/src/services/definitions/mixpost.ts +89 -0
  423. package/src/services/definitions/motion-canvas.ts +55 -0
  424. package/src/services/definitions/n8n.ts +153 -0
  425. package/src/services/definitions/nocodb.ts +46 -0
  426. package/src/services/definitions/ntfy.ts +68 -0
  427. package/src/services/definitions/ollama.ts +68 -0
  428. package/src/services/definitions/open-webui.ts +54 -0
  429. package/src/services/definitions/opencode.ts +54 -0
  430. package/src/services/definitions/openpanel.ts +48 -0
  431. package/src/services/definitions/outline.ts +75 -0
  432. package/src/services/definitions/paperless-ngx.ts +92 -0
  433. package/src/services/definitions/playwright-server.ts +41 -0
  434. package/src/services/definitions/portainer.ts +50 -0
  435. package/src/services/definitions/postgresql.ts +90 -0
  436. package/src/services/definitions/postiz.ts +86 -0
  437. package/src/services/definitions/prometheus.ts +54 -0
  438. package/src/services/definitions/qdrant.ts +82 -0
  439. package/src/services/definitions/redis.ts +99 -0
  440. package/src/services/definitions/remotion.ts +55 -0
  441. package/src/services/definitions/rocketchat.ts +61 -0
  442. package/src/services/definitions/searxng.ts +68 -0
  443. package/src/services/definitions/stable-diffusion.ts +50 -0
  444. package/src/services/definitions/steel-browser.ts +70 -0
  445. package/src/services/definitions/tailscale.ts +69 -0
  446. package/src/services/definitions/temporal.ts +104 -0
  447. package/src/services/definitions/traefik.ts +60 -0
  448. package/src/services/definitions/umami.ts +48 -0
  449. package/src/services/definitions/uptime-kuma.ts +53 -0
  450. package/src/services/definitions/valkey.ts +67 -0
  451. package/src/services/definitions/watchtower.ts +47 -0
  452. package/src/services/definitions/weaviate.ts +96 -0
  453. package/src/services/definitions/whisper.ts +62 -0
  454. package/src/services/registry.test.ts +98 -0
  455. package/src/services/registry.ts +37 -0
  456. package/src/skills/registry.ts +126 -0
  457. package/src/types.ts +123 -0
  458. package/src/validator.test.ts +66 -0
  459. package/src/validator.ts +166 -0
  460. package/src/version-manager.ts +65 -0
  461. package/tsconfig.json +9 -0
@@ -0,0 +1,628 @@
1
+ import Handlebars from "handlebars";
2
+ import type { ResolverOutput } from "../types.js";
3
+
4
+ /**
5
+ * Basic skill templates keyed by skillId.
6
+ *
7
+ * Templates use Handlebars `{{VAR}}` syntax. Variables are resolved from the
8
+ * service's `openclawEnvVars` array at generation time.
9
+ */
10
+ const skillTemplates: Record<string, string> = {
11
+ "redis-cache": `---
12
+ name: redis-cache
13
+ description: "Cache data and manage key-value state using Redis"
14
+ metadata:
15
+ openclaw:
16
+ emoji: "🔴"
17
+ ---
18
+
19
+ # Redis Cache
20
+
21
+ Use Redis as a high-performance in-memory cache and key-value store.
22
+
23
+ ## Connection Details
24
+
25
+ - **Host:** \`{{REDIS_HOST}}\`
26
+ - **Port:** \`{{REDIS_PORT}}\`
27
+
28
+ ## Example Commands
29
+
30
+ ### Set a value
31
+ \`\`\`bash
32
+ redis-cli -h {{REDIS_HOST}} -p {{REDIS_PORT}} -a $REDIS_PASSWORD SET mykey "myvalue"
33
+ \`\`\`
34
+
35
+ ### Get a value
36
+ \`\`\`bash
37
+ redis-cli -h {{REDIS_HOST}} -p {{REDIS_PORT}} -a $REDIS_PASSWORD GET mykey
38
+ \`\`\`
39
+
40
+ ### List all keys
41
+ \`\`\`bash
42
+ redis-cli -h {{REDIS_HOST}} -p {{REDIS_PORT}} -a $REDIS_PASSWORD KEYS "*"
43
+ \`\`\`
44
+
45
+ ## Usage Notes
46
+
47
+ - Use Redis for caching frequently accessed data, session storage, and pub/sub messaging.
48
+ - Data is persisted to disk via RDB snapshots in the mounted volume.
49
+ - Password authentication is required.
50
+ `,
51
+
52
+ "qdrant-memory": `---
53
+ name: qdrant-memory
54
+ description: "Store and retrieve vector embeddings for semantic search and RAG"
55
+ metadata:
56
+ openclaw:
57
+ emoji: "🧠"
58
+ ---
59
+
60
+ # Qdrant Memory
61
+
62
+ Use Qdrant as a vector database for storing embeddings, enabling semantic search and retrieval-augmented generation (RAG).
63
+
64
+ ## Connection Details
65
+
66
+ - **Host:** \`{{QDRANT_HOST}}\`
67
+ - **Port:** \`{{QDRANT_PORT}}\` (REST API)
68
+
69
+ ## Example API Calls
70
+
71
+ ### Create a collection
72
+ \`\`\`bash
73
+ curl -X PUT "http://{{QDRANT_HOST}}:{{QDRANT_PORT}}/collections/my_collection" \\
74
+ -H "Content-Type: application/json" \\
75
+ -d '{"vectors": {"size": 384, "distance": "Cosine"}}'
76
+ \`\`\`
77
+
78
+ ### Upsert points
79
+ \`\`\`bash
80
+ curl -X PUT "http://{{QDRANT_HOST}}:{{QDRANT_PORT}}/collections/my_collection/points" \\
81
+ -H "Content-Type: application/json" \\
82
+ -d '{"points": [{"id": 1, "vector": [0.1, 0.2, ...], "payload": {"text": "hello"}}]}'
83
+ \`\`\`
84
+
85
+ ### Search similar vectors
86
+ \`\`\`bash
87
+ curl -X POST "http://{{QDRANT_HOST}}:{{QDRANT_PORT}}/collections/my_collection/points/search" \\
88
+ -H "Content-Type: application/json" \\
89
+ -d '{"vector": [0.1, 0.2, ...], "limit": 5}'
90
+ \`\`\`
91
+
92
+ ## Usage Notes
93
+
94
+ - Use 384-dimensional vectors for MiniLM-based embeddings or 1536 for OpenAI ada-002.
95
+ - Qdrant supports filtering, batch operations, and named vectors.
96
+ `,
97
+
98
+ "n8n-trigger": `---
99
+ name: n8n-trigger
100
+ description: "Trigger and manage automation workflows using n8n"
101
+ metadata:
102
+ openclaw:
103
+ emoji: "🔄"
104
+ ---
105
+
106
+ # n8n Workflow Trigger
107
+
108
+ Use n8n to create, trigger, and manage automation workflows via its REST API.
109
+
110
+ ## Connection Details
111
+
112
+ - **Host:** \`{{N8N_HOST}}\`
113
+ - **Port:** \`{{N8N_PORT}}\`
114
+ - **Webhook URL:** \`{{N8N_WEBHOOK_URL}}\`
115
+
116
+ ## Example API Calls
117
+
118
+ ### Trigger a webhook workflow
119
+ \`\`\`bash
120
+ curl -X POST "{{N8N_WEBHOOK_URL}}webhook/<your-webhook-id>" \\
121
+ -H "Content-Type: application/json" \\
122
+ -d '{"message": "Hello from OpenClaw"}'
123
+ \`\`\`
124
+
125
+ ### List workflows
126
+ \`\`\`bash
127
+ curl -X GET "http://{{N8N_HOST}}:{{N8N_PORT}}/api/v1/workflows" \\
128
+ -H "Content-Type: application/json"
129
+ \`\`\`
130
+
131
+ ### Activate a workflow
132
+ \`\`\`bash
133
+ curl -X PATCH "http://{{N8N_HOST}}:{{N8N_PORT}}/api/v1/workflows/<id>" \\
134
+ -H "Content-Type: application/json" \\
135
+ -d '{"active": true}'
136
+ \`\`\`
137
+
138
+ ## Usage Notes
139
+
140
+ - Create workflows in the n8n UI at http://{{N8N_HOST}}:{{N8N_PORT}}.
141
+ - Webhook nodes allow external triggers from OpenClaw.
142
+ - n8n stores workflow state in PostgreSQL.
143
+ `,
144
+
145
+ "ffmpeg-process": `---
146
+ name: ffmpeg-process
147
+ description: "Process media files using FFmpeg for transcoding, conversion, and manipulation"
148
+ metadata:
149
+ openclaw:
150
+ emoji: "🎬"
151
+ ---
152
+
153
+ # FFmpeg Media Processing
154
+
155
+ Use FFmpeg for video/audio transcoding, format conversion, and media manipulation.
156
+
157
+ ## Shared Directory
158
+
159
+ - **Media directory:** \`{{FFMPEG_SHARED_DIR}}\`
160
+
161
+ ## Example Commands
162
+
163
+ ### Convert video to MP4
164
+ \`\`\`bash
165
+ docker exec ffmpeg ffmpeg -i /data/input.avi -c:v libx264 -c:a aac /data/output.mp4
166
+ \`\`\`
167
+
168
+ ### Extract audio from video
169
+ \`\`\`bash
170
+ docker exec ffmpeg ffmpeg -i /data/video.mp4 -vn -acodec libmp3lame /data/audio.mp3
171
+ \`\`\`
172
+
173
+ ### Create thumbnail from video
174
+ \`\`\`bash
175
+ docker exec ffmpeg ffmpeg -i /data/video.mp4 -ss 00:00:05 -vframes 1 /data/thumb.jpg
176
+ \`\`\`
177
+
178
+ ### Resize video
179
+ \`\`\`bash
180
+ docker exec ffmpeg ffmpeg -i /data/input.mp4 -vf scale=1280:720 /data/output_720p.mp4
181
+ \`\`\`
182
+
183
+ ## Usage Notes
184
+
185
+ - Place input files in the shared media directory.
186
+ - FFmpeg runs as a sidecar container sharing a volume with OpenClaw.
187
+ - Output files appear in the same shared directory.
188
+ `,
189
+
190
+ "minio-storage": `---
191
+ name: minio-storage
192
+ description: "Store and retrieve files using S3-compatible object storage"
193
+ metadata:
194
+ openclaw:
195
+ emoji: "💾"
196
+ ---
197
+
198
+ # MinIO Object Storage
199
+
200
+ Use MinIO as S3-compatible object storage for files, assets, and backups.
201
+
202
+ ## Connection Details
203
+
204
+ - **Host:** \`{{MINIO_HOST}}\`
205
+ - **API Port:** \`{{MINIO_PORT}}\`
206
+ - **Access Key:** Uses \`MINIO_ACCESS_KEY\` env var
207
+ - **Secret Key:** Uses \`MINIO_SECRET_KEY\` env var
208
+
209
+ ## Example API Calls
210
+
211
+ ### Create a bucket
212
+ \`\`\`bash
213
+ mc alias set local http://{{MINIO_HOST}}:{{MINIO_PORT}} $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
214
+ mc mb local/my-bucket
215
+ \`\`\`
216
+
217
+ ### Upload a file
218
+ \`\`\`bash
219
+ mc cp /path/to/file.txt local/my-bucket/file.txt
220
+ \`\`\`
221
+
222
+ ### Download a file
223
+ \`\`\`bash
224
+ mc cp local/my-bucket/file.txt /path/to/local/file.txt
225
+ \`\`\`
226
+
227
+ ### List bucket contents
228
+ \`\`\`bash
229
+ mc ls local/my-bucket/
230
+ \`\`\`
231
+
232
+ ## Usage Notes
233
+
234
+ - MinIO is fully S3-compatible—use any S3 SDK or CLI.
235
+ - Access the web console at http://{{MINIO_HOST}}:9001 for a visual file browser.
236
+ - Create separate buckets for different data types (assets, backups, uploads).
237
+ `,
238
+
239
+ "browserless-browse": `---
240
+ name: browserless-browse
241
+ description: "Automate browser interactions, scrape web pages, and generate PDFs"
242
+ metadata:
243
+ openclaw:
244
+ emoji: "🌐"
245
+ ---
246
+
247
+ # Browserless Browser Automation
248
+
249
+ Use Browserless for headless Chrome browser automation, web scraping, screenshots, and PDF generation.
250
+
251
+ ## Connection Details
252
+
253
+ - **Host:** \`{{BROWSERLESS_HOST}}\`
254
+ - **Port:** \`{{BROWSERLESS_PORT}}\`
255
+ - **Token:** Uses \`BROWSERLESS_TOKEN\` env var
256
+
257
+ ## Example API Calls
258
+
259
+ ### Take a screenshot
260
+ \`\`\`bash
261
+ curl -X POST "http://{{BROWSERLESS_HOST}}:{{BROWSERLESS_PORT}}/screenshot?token=$BROWSERLESS_TOKEN" \\
262
+ -H "Content-Type: application/json" \\
263
+ -d '{"url": "https://example.com", "options": {"fullPage": true}}' \\
264
+ --output screenshot.png
265
+ \`\`\`
266
+
267
+ ### Generate a PDF
268
+ \`\`\`bash
269
+ curl -X POST "http://{{BROWSERLESS_HOST}}:{{BROWSERLESS_PORT}}/pdf?token=$BROWSERLESS_TOKEN" \\
270
+ -H "Content-Type: application/json" \\
271
+ -d '{"url": "https://example.com"}' \\
272
+ --output page.pdf
273
+ \`\`\`
274
+
275
+ ### Scrape page content
276
+ \`\`\`bash
277
+ curl -X POST "http://{{BROWSERLESS_HOST}}:{{BROWSERLESS_PORT}}/content?token=$BROWSERLESS_TOKEN" \\
278
+ -H "Content-Type: application/json" \\
279
+ -d '{"url": "https://example.com"}'
280
+ \`\`\`
281
+
282
+ ## Usage Notes
283
+
284
+ - Browserless manages a pool of Chrome instances (max concurrent sessions configured via env).
285
+ - Token authentication is required for all API calls.
286
+ - Supports Puppeteer and Playwright WebSocket connections.
287
+ `,
288
+
289
+ "searxng-search": `---
290
+ name: searxng-search
291
+ description: "Search the web using a privacy-respecting metasearch engine"
292
+ metadata:
293
+ openclaw:
294
+ emoji: "🔍"
295
+ ---
296
+
297
+ # SearXNG Web Search
298
+
299
+ Use SearXNG as a privacy-respecting metasearch engine to query the web.
300
+
301
+ ## Connection Details
302
+
303
+ - **Host:** \`{{SEARXNG_HOST}}\`
304
+ - **Port:** \`{{SEARXNG_PORT}}\`
305
+
306
+ ## Example API Calls
307
+
308
+ ### Search the web
309
+ \`\`\`bash
310
+ curl "http://{{SEARXNG_HOST}}:{{SEARXNG_PORT}}/search?q=your+search+query&format=json"
311
+ \`\`\`
312
+
313
+ ### Search with category filter
314
+ \`\`\`bash
315
+ curl "http://{{SEARXNG_HOST}}:{{SEARXNG_PORT}}/search?q=openai&categories=it&format=json"
316
+ \`\`\`
317
+
318
+ ### Search with language filter
319
+ \`\`\`bash
320
+ curl "http://{{SEARXNG_HOST}}:{{SEARXNG_PORT}}/search?q=hello&language=en&format=json"
321
+ \`\`\`
322
+
323
+ ## Usage Notes
324
+
325
+ - Always use \`format=json\` for machine-readable results.
326
+ - Available categories: general, images, videos, news, map, music, it, science, files.
327
+ - SearXNG aggregates results from many search engines without tracking.
328
+ `,
329
+
330
+ "whisper-transcribe": `---
331
+ name: whisper-transcribe
332
+ description: "Transcribe audio files to text using Faster Whisper"
333
+ metadata:
334
+ openclaw:
335
+ emoji: "🎙️"
336
+ ---
337
+
338
+ # Whisper Transcription
339
+
340
+ Use the Faster Whisper server for speech-to-text transcription.
341
+
342
+ ## Connection Details
343
+
344
+ - **Host:** \`{{WHISPER_HOST}}\`
345
+ - **Port:** \`{{WHISPER_PORT}}\`
346
+
347
+ ## Example API Calls
348
+
349
+ ### Transcribe an audio file
350
+ \`\`\`bash
351
+ curl -X POST "http://{{WHISPER_HOST}}:{{WHISPER_PORT}}/v1/audio/transcriptions" \\
352
+ -F "file=@/path/to/audio.mp3" \\
353
+ -F "model=base"
354
+ \`\`\`
355
+
356
+ ### Transcribe with language hint
357
+ \`\`\`bash
358
+ curl -X POST "http://{{WHISPER_HOST}}:{{WHISPER_PORT}}/v1/audio/transcriptions" \\
359
+ -F "file=@/path/to/audio.wav" \\
360
+ -F "model=base" \\
361
+ -F "language=en"
362
+ \`\`\`
363
+
364
+ ### Get available models
365
+ \`\`\`bash
366
+ curl "http://{{WHISPER_HOST}}:{{WHISPER_PORT}}/v1/models"
367
+ \`\`\`
368
+
369
+ ## Usage Notes
370
+
371
+ - Supports MP3, WAV, FLAC, and other common audio formats.
372
+ - Model sizes: tiny, base, small, medium, large (larger = more accurate but slower).
373
+ - GPU acceleration significantly improves transcription speed.
374
+ `,
375
+
376
+ "ollama-local-llm": `---
377
+ name: ollama-local-llm
378
+ description: "Run local language models for text generation, chat, and embeddings"
379
+ metadata:
380
+ openclaw:
381
+ emoji: "🦙"
382
+ ---
383
+
384
+ # Ollama Local LLM
385
+
386
+ Use Ollama to run large language models locally for text generation, chat, and embeddings.
387
+
388
+ ## Connection Details
389
+
390
+ - **Host:** \`{{OLLAMA_HOST}}\`
391
+ - **Port:** \`{{OLLAMA_PORT}}\`
392
+
393
+ ## Example API Calls
394
+
395
+ ### Generate text
396
+ \`\`\`bash
397
+ curl -X POST "http://{{OLLAMA_HOST}}:{{OLLAMA_PORT}}/api/generate" \\
398
+ -H "Content-Type: application/json" \\
399
+ -d '{"model": "llama3.2", "prompt": "Explain quantum computing in simple terms"}'
400
+ \`\`\`
401
+
402
+ ### Chat completion
403
+ \`\`\`bash
404
+ curl -X POST "http://{{OLLAMA_HOST}}:{{OLLAMA_PORT}}/api/chat" \\
405
+ -H "Content-Type: application/json" \\
406
+ -d '{"model": "llama3.2", "messages": [{"role": "user", "content": "Hello!"}]}'
407
+ \`\`\`
408
+
409
+ ### Pull a model
410
+ \`\`\`bash
411
+ curl -X POST "http://{{OLLAMA_HOST}}:{{OLLAMA_PORT}}/api/pull" \\
412
+ -H "Content-Type: application/json" \\
413
+ -d '{"name": "llama3.2"}'
414
+ \`\`\`
415
+
416
+ ### Generate embeddings
417
+ \`\`\`bash
418
+ curl -X POST "http://{{OLLAMA_HOST}}:{{OLLAMA_PORT}}/api/embeddings" \\
419
+ -H "Content-Type: application/json" \\
420
+ -d '{"model": "nomic-embed-text", "prompt": "Hello world"}'
421
+ \`\`\`
422
+
423
+ ## Usage Notes
424
+
425
+ - Pull models before first use (they are cached in the persistent volume).
426
+ - Recommended models: llama3.2 (general), codellama (code), nomic-embed-text (embeddings).
427
+ - GPU passthrough dramatically improves inference speed.
428
+ - The Ollama API is OpenAI-compatible at /v1/ endpoints.
429
+ `,
430
+
431
+ "remotion-render": `---
432
+ name: remotion-render
433
+ description: "Create and render videos programmatically using React"
434
+ metadata:
435
+ openclaw:
436
+ emoji: "🎥"
437
+ ---
438
+
439
+ # Remotion Video Rendering
440
+
441
+ Use Remotion Studio to create and render videos programmatically with React.
442
+
443
+ ## Connection Details
444
+
445
+ - **Host:** \`{{REMOTION_HOST}}\`
446
+ - **Port:** \`{{REMOTION_PORT}}\`
447
+
448
+ ## Example Usage
449
+
450
+ ### Access the Studio UI
451
+ Open \`http://{{REMOTION_HOST}}:{{REMOTION_PORT}}\` in your browser to use the Remotion Studio visual editor.
452
+
453
+ ### Render a video via CLI
454
+ \`\`\`bash
455
+ docker exec remotion npx remotion render src/index.tsx MyComposition out/video.mp4
456
+ \`\`\`
457
+
458
+ ### Render with custom props
459
+ \`\`\`bash
460
+ docker exec remotion npx remotion render src/index.tsx MyComposition out/video.mp4 \\
461
+ --props='{"title": "Hello World"}'
462
+ \`\`\`
463
+
464
+ ## Usage Notes
465
+
466
+ - Define video compositions in React components.
467
+ - Remotion supports MP4, WebM, and GIF output formats.
468
+ - Use the Studio UI for previewing before rendering.
469
+ - Combine with FFmpeg for post-processing.
470
+ `,
471
+
472
+ "lightpanda-browse": `---
473
+ name: lightpanda-browse
474
+ description: "Browse the web using the ultra-fast LightPanda headless browser via CDP"
475
+ metadata:
476
+ openclaw:
477
+ emoji: "🐼"
478
+ ---
479
+
480
+ # LightPanda Browse
481
+
482
+ LightPanda is an ultra-fast headless browser available via CDP WebSocket at \`ws://{{LIGHTPANDA_HOST}}:{{LIGHTPANDA_PORT}}\`.
483
+
484
+ ## Connect via Puppeteer
485
+
486
+ \`\`\`javascript
487
+ const browser = await puppeteer.connect({
488
+ browserWSEndpoint: "ws://{{LIGHTPANDA_HOST}}:{{LIGHTPANDA_PORT}}"
489
+ });
490
+ const page = await browser.newPage();
491
+ await page.goto('https://example.com');
492
+ const content = await page.evaluate(() => document.body.innerText);
493
+ \`\`\`
494
+
495
+ ## Key Advantages
496
+
497
+ - 9x less memory than Chrome (ideal for parallel scraping)
498
+ - 11x faster page loading
499
+ - Instant startup
500
+ - Full CDP compatibility with Puppeteer and Playwright
501
+ `,
502
+
503
+ "steel-browse": `---
504
+ name: steel-browse
505
+ description: "Browse the web using Steel Browser API with session management and anti-detection"
506
+ metadata:
507
+ openclaw:
508
+ emoji: "🔥"
509
+ ---
510
+
511
+ # Steel Browser
512
+
513
+ Steel provides a REST API at \`http://{{STEEL_HOST}}:{{STEEL_PORT}}\` for AI agent web automation.
514
+
515
+ ## Create a Session
516
+
517
+ \`\`\`bash
518
+ curl -X POST http://{{STEEL_HOST}}:{{STEEL_PORT}}/v1/sessions \\
519
+ -H "Content-Type: application/json" \\
520
+ -d '{"blockAds": true}'
521
+ \`\`\`
522
+
523
+ ## Scrape a Page
524
+
525
+ \`\`\`bash
526
+ curl -X POST http://{{STEEL_HOST}}:{{STEEL_PORT}}/v1/scrape \\
527
+ -H "Content-Type: application/json" \\
528
+ -d '{"url": "https://example.com", "format": "markdown"}'
529
+ \`\`\`
530
+
531
+ ## Features
532
+
533
+ - Session management with persistent cookies
534
+ - Anti-detection and stealth plugins
535
+ - Proxy support and IP rotation
536
+ - Auto CAPTCHA solving
537
+ - Puppeteer/Playwright/Selenium compatible
538
+ `,
539
+ };
540
+
541
+ /**
542
+ * Generates SKILL.md files for each service that has skills defined.
543
+ *
544
+ * Returns a map of file paths (relative to project root) to file contents.
545
+ * Handlebars is used to replace `{{VAR}}` placeholders with actual values
546
+ * from each service's `openclawEnvVars`.
547
+ */
548
+ export function generateSkillFiles(resolved: ResolverOutput): Record<string, string> {
549
+ const files: Record<string, string> = {};
550
+
551
+ for (const { definition } of resolved.services) {
552
+ if (definition.skills.length === 0) continue;
553
+
554
+ // Build a variable map from openclawEnvVars for Handlebars
555
+ const vars: Record<string, string> = {};
556
+ for (const envVar of definition.openclawEnvVars) {
557
+ // Resolve ${REFERENCES} to the default value (just strip the ${} wrapper)
558
+ const val = envVar.defaultValue.startsWith("${")
559
+ ? envVar.defaultValue.slice(2, -1)
560
+ : envVar.defaultValue;
561
+ vars[envVar.key] = val;
562
+ }
563
+
564
+ for (const skill of definition.skills) {
565
+ const template = skillTemplates[skill.skillId];
566
+ if (!template) {
567
+ // Generate a generic skill file if no template exists
568
+ const generic = generateGenericSkill(
569
+ skill.skillId,
570
+ definition.name,
571
+ definition.icon,
572
+ definition.description,
573
+ vars,
574
+ );
575
+ files[`openclaw/workspace/skills/${skill.skillId}/SKILL.md`] = generic;
576
+ continue;
577
+ }
578
+
579
+ const compiled = Handlebars.compile(template, { noEscape: true });
580
+ const rendered = compiled(vars);
581
+ files[`openclaw/workspace/skills/${skill.skillId}/SKILL.md`] = rendered;
582
+ }
583
+ }
584
+
585
+ return files;
586
+ }
587
+
588
+ /**
589
+ * Generate a generic SKILL.md for skills that don't have a dedicated template.
590
+ */
591
+ function generateGenericSkill(
592
+ skillId: string,
593
+ serviceName: string,
594
+ icon: string,
595
+ description: string,
596
+ vars: Record<string, string>,
597
+ ): string {
598
+ const title = skillId
599
+ .split("-")
600
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
601
+ .join(" ");
602
+
603
+ const envSection = Object.entries(vars)
604
+ .map(([key, value]) => `- **${key}:** \`${value}\``)
605
+ .join("\n");
606
+
607
+ return `---
608
+ name: ${skillId}
609
+ description: "${description}"
610
+ metadata:
611
+ openclaw:
612
+ emoji: "${icon}"
613
+ ---
614
+
615
+ # ${title}
616
+
617
+ Interact with ${serviceName} through this skill.
618
+
619
+ ## Connection Details
620
+
621
+ ${envSection || "No specific connection variables configured."}
622
+
623
+ ## Usage Notes
624
+
625
+ - This skill provides OpenClaw access to ${serviceName}.
626
+ - Refer to the service documentation for available API endpoints.
627
+ `;
628
+ }