@shadowob/cloud 1.1.6-dev.311

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 (334) hide show
  1. package/README.md +509 -0
  2. package/dist/agent-browser-CERTMCDL.js +117 -0
  3. package/dist/agent-browser-CIRZRIY4.js +118 -0
  4. package/dist/agent-pack-LF3O5TR4.js +1236 -0
  5. package/dist/agent-pack-RQT27V7R.js +1235 -0
  6. package/dist/airtable-BG2Q75G2.js +82 -0
  7. package/dist/airtable-JCQXFM5D.js +83 -0
  8. package/dist/alipay-MZX2XCDB.js +52 -0
  9. package/dist/alipay-TZQI34RB.js +51 -0
  10. package/dist/amap-5RQB3VGC.js +45 -0
  11. package/dist/amap-KPCLZYYL.js +44 -0
  12. package/dist/atlassian-LGOEWYC7.js +54 -0
  13. package/dist/atlassian-TVS2A4IU.js +55 -0
  14. package/dist/baidu-appbuilder-6UMESXHW.js +41 -0
  15. package/dist/baidu-appbuilder-QRRL3ETM.js +42 -0
  16. package/dist/baidu-maps-HEPMVP5D.js +44 -0
  17. package/dist/baidu-maps-HXC4FBVP.js +45 -0
  18. package/dist/baidu-netdisk-G5Q6B5NH.js +45 -0
  19. package/dist/baidu-netdisk-RS2K5W2M.js +44 -0
  20. package/dist/baidu-smartprogram-EWTK5WKK.js +41 -0
  21. package/dist/baidu-smartprogram-JHD3XWF6.js +40 -0
  22. package/dist/browserbase-IUIYVYI7.js +67 -0
  23. package/dist/browserbase-JFO2PCIA.js +68 -0
  24. package/dist/canva-3YOFL7JS.js +62 -0
  25. package/dist/canva-FMYN65SM.js +61 -0
  26. package/dist/chunk-6P2K6QZR.js +529 -0
  27. package/dist/chunk-7VMRQ7MG.js +90 -0
  28. package/dist/chunk-AD3JTIU3.js +17 -0
  29. package/dist/chunk-BF6CV2Y4.js +64 -0
  30. package/dist/chunk-CTNUKOQE.js +439 -0
  31. package/dist/chunk-EEFMJYKB.js +97 -0
  32. package/dist/chunk-EJKFQ35I.js +739 -0
  33. package/dist/chunk-HUICDC56.js +62 -0
  34. package/dist/chunk-JUPAE5IA.js +527 -0
  35. package/dist/chunk-JY2HTT7Q.js +437 -0
  36. package/dist/chunk-KEPTCLUO.js +121 -0
  37. package/dist/chunk-KKK5H7YX.js +3622 -0
  38. package/dist/chunk-POSVEKIY.js +210 -0
  39. package/dist/chunk-QET4LT4J.js +5769 -0
  40. package/dist/chunk-QV4XWO3P.js +30 -0
  41. package/dist/chunk-R52J3PH2.js +120 -0
  42. package/dist/chunk-R5U7XKVJ.js +16 -0
  43. package/dist/chunk-RECNVWMT.js +212 -0
  44. package/dist/chunk-RTPBU5HF.js +92 -0
  45. package/dist/chunk-SUZ2ATT6.js +5774 -0
  46. package/dist/chunk-SVMXSIMG.js +98 -0
  47. package/dist/chunk-TV3CBM7R.js +28 -0
  48. package/dist/chunk-V2LU736V.js +3495 -0
  49. package/dist/chunk-ZUYL3W53.js +741 -0
  50. package/dist/claude-plugin-577TAQVS.js +1463 -0
  51. package/dist/claude-plugin-L3MXJJ6J.js +1464 -0
  52. package/dist/cli.js +7021 -0
  53. package/dist/cloudflare-HBBABPK6.js +114 -0
  54. package/dist/cloudflare-RDFPKMM5.js +115 -0
  55. package/dist/cnb-FLP3QX46.js +44 -0
  56. package/dist/cnb-YAVVEYFB.js +45 -0
  57. package/dist/console/index.html +12 -0
  58. package/dist/console/logo.png +0 -0
  59. package/dist/console/static/css/5079.f9e0918d.css +1 -0
  60. package/dist/console/static/css/index.7f91f806.css +1 -0
  61. package/dist/console/static/font/codicon.5b7d6fac.ttf +0 -0
  62. package/dist/console/static/js/5079.72a51ca2.js +699 -0
  63. package/dist/console/static/js/5079.72a51ca2.js.LICENSE.txt +35 -0
  64. package/dist/console/static/js/7426.f8d483ea.js +1 -0
  65. package/dist/console/static/js/async/1008.4df521b7.js +1 -0
  66. package/dist/console/static/js/async/102.1d473ec7.js +1 -0
  67. package/dist/console/static/js/async/1134.3f9fd9e7.js +1 -0
  68. package/dist/console/static/js/async/1318.4b8e48e7.js +1 -0
  69. package/dist/console/static/js/async/1360.5606da88.js +7 -0
  70. package/dist/console/static/js/async/1546.045f484f.js +1 -0
  71. package/dist/console/static/js/async/1562.187de2a8.js +1 -0
  72. package/dist/console/static/js/async/168.456d4813.js +1 -0
  73. package/dist/console/static/js/async/1750.e6dc2664.js +1 -0
  74. package/dist/console/static/js/async/1994.3fc86066.js +1 -0
  75. package/dist/console/static/js/async/2348.613ae3d9.js +1 -0
  76. package/dist/console/static/js/async/2390.1b890b9d.js +1 -0
  77. package/dist/console/static/js/async/2414.9d040212.js +1 -0
  78. package/dist/console/static/js/async/2454.4c1784ab.js +1 -0
  79. package/dist/console/static/js/async/2498.f5f92030.js +1 -0
  80. package/dist/console/static/js/async/2924.b823cd1a.js +1 -0
  81. package/dist/console/static/js/async/3062.63fddea6.js +1 -0
  82. package/dist/console/static/js/async/3078.dd712008.js +1 -0
  83. package/dist/console/static/js/async/3198.1f307065.js +1 -0
  84. package/dist/console/static/js/async/3246.3d5a899f.js +1 -0
  85. package/dist/console/static/js/async/3286.871676eb.js +1 -0
  86. package/dist/console/static/js/async/342.10bf3b90.js +1 -0
  87. package/dist/console/static/js/async/3446.9681a4d7.js +1 -0
  88. package/dist/console/static/js/async/3698.ccfaabec.js +1 -0
  89. package/dist/console/static/js/async/3790.2a1106a6.js +1 -0
  90. package/dist/console/static/js/async/4231.b29784d4.js +1 -0
  91. package/dist/console/static/js/async/4551.515bd41d.js +1 -0
  92. package/dist/console/static/js/async/4596.40f6e71b.js +1 -0
  93. package/dist/console/static/js/async/4600.4aaebe6d.js +1 -0
  94. package/dist/console/static/js/async/4718.1aae022f.js +1 -0
  95. package/dist/console/static/js/async/4846.a347c020.js +1 -0
  96. package/dist/console/static/js/async/4860.83dadf89.js +1 -0
  97. package/dist/console/static/js/async/500.fcfa37cb.js +1 -0
  98. package/dist/console/static/js/async/5096.b360203d.js +1 -0
  99. package/dist/console/static/js/async/5222.043274fe.js +1 -0
  100. package/dist/console/static/js/async/5362.f498001c.js +1 -0
  101. package/dist/console/static/js/async/54.c94f0755.js +1 -0
  102. package/dist/console/static/js/async/5478.50dd9ef0.js +2 -0
  103. package/dist/console/static/js/async/5478.50dd9ef0.js.LICENSE.txt +3 -0
  104. package/dist/console/static/js/async/5507.a6a1f793.js +1 -0
  105. package/dist/console/static/js/async/5638.bc6b102d.js +1 -0
  106. package/dist/console/static/js/async/5722.e0029049.js +1 -0
  107. package/dist/console/static/js/async/5942.74635c6b.js +1 -0
  108. package/dist/console/static/js/async/5994.1c5629c1.js +1 -0
  109. package/dist/console/static/js/async/6054.6bddf720.js +1 -0
  110. package/dist/console/static/js/async/6118.45e754e5.js +1 -0
  111. package/dist/console/static/js/async/6127.adcbcbb6.js +1 -0
  112. package/dist/console/static/js/async/614.3f434c20.js +1 -0
  113. package/dist/console/static/js/async/6234.ba3b002d.js +1 -0
  114. package/dist/console/static/js/async/6310.6546a9ba.js +1 -0
  115. package/dist/console/static/js/async/6378.9f805419.js +1 -0
  116. package/dist/console/static/js/async/6380.e4433c49.js +1 -0
  117. package/dist/console/static/js/async/6418.f23bcfda.js +1 -0
  118. package/dist/console/static/js/async/6428.77c86114.js +1 -0
  119. package/dist/console/static/js/async/6443.83318a6c.js +1 -0
  120. package/dist/console/static/js/async/6508.2b445d62.js +3 -0
  121. package/dist/console/static/js/async/6542.e82a26c8.js +1 -0
  122. package/dist/console/static/js/async/6544.62111ecb.js +1 -0
  123. package/dist/console/static/js/async/6612.a0c9fcf4.js +1 -0
  124. package/dist/console/static/js/async/6740.695aebf0.js +1 -0
  125. package/dist/console/static/js/async/6822.dbbb32bc.js +1 -0
  126. package/dist/console/static/js/async/6824.ad3540ab.js +1 -0
  127. package/dist/console/static/js/async/6930.585dab94.js +1 -0
  128. package/dist/console/static/js/async/6982.c81b95e6.js +1 -0
  129. package/dist/console/static/js/async/7046.ab2378c1.js +1 -0
  130. package/dist/console/static/js/async/7110.a603277f.js +1 -0
  131. package/dist/console/static/js/async/7142.4a21366f.js +1 -0
  132. package/dist/console/static/js/async/7348.15cc6148.js +1373 -0
  133. package/dist/console/static/js/async/7348.15cc6148.js.LICENSE.txt +14 -0
  134. package/dist/console/static/js/async/7374.b1ac5c44.js +1 -0
  135. package/dist/console/static/js/async/742.847f17ca.js +1 -0
  136. package/dist/console/static/js/async/7446.743954d8.js +1 -0
  137. package/dist/console/static/js/async/7673.59bbbaac.js +1 -0
  138. package/dist/console/static/js/async/7684.c5760c8c.js +1 -0
  139. package/dist/console/static/js/async/7714.c30d0f94.js +1 -0
  140. package/dist/console/static/js/async/8118.36d5a3bf.js +298 -0
  141. package/dist/console/static/js/async/8145.4bcf043a.js +1 -0
  142. package/dist/console/static/js/async/8246.408de938.js +1 -0
  143. package/dist/console/static/js/async/8390.bdae1f7d.js +1 -0
  144. package/dist/console/static/js/async/8422.fd94dbe1.js +1 -0
  145. package/dist/console/static/js/async/8434.94a0e2ae.js +1 -0
  146. package/dist/console/static/js/async/8518.3158de13.js +1 -0
  147. package/dist/console/static/js/async/8564.fc2eb841.js +1 -0
  148. package/dist/console/static/js/async/8678.73af4c9b.js +1 -0
  149. package/dist/console/static/js/async/8694.79747168.js +1 -0
  150. package/dist/console/static/js/async/8756.1de37b83.js +1 -0
  151. package/dist/console/static/js/async/8804.7fe6bdf9.js +3 -0
  152. package/dist/console/static/js/async/8883.e717ee94.js +1 -0
  153. package/dist/console/static/js/async/8886.fe6e876c.js +1 -0
  154. package/dist/console/static/js/async/9030.fc1ae402.js +1 -0
  155. package/dist/console/static/js/async/9094.5598d084.js +1 -0
  156. package/dist/console/static/js/async/9218.ee7b84b7.js +1 -0
  157. package/dist/console/static/js/async/94.9b80bc35.js +1 -0
  158. package/dist/console/static/js/async/9526.92aba34c.js +1 -0
  159. package/dist/console/static/js/async/9762.f83bc4f3.js +1 -0
  160. package/dist/console/static/js/async/984.e11c113a.js +1 -0
  161. package/dist/console/static/js/async/9846.246653cd.js +1 -0
  162. package/dist/console/static/js/index.4487e1ff.js +1 -0
  163. package/dist/console/static/js/lib-react.15d7ca9a.js +2 -0
  164. package/dist/console/static/js/lib-react.15d7ca9a.js.LICENSE.txt +49 -0
  165. package/dist/coze-C6PMDPBI.js +49 -0
  166. package/dist/coze-E6VGRNLV.js +48 -0
  167. package/dist/dashboard.command-J7XOZNXU.js +8 -0
  168. package/dist/dashboard.command-RV2NHDKW.js +7 -0
  169. package/dist/dingtalk-JNRNRN7E.js +77 -0
  170. package/dist/dingtalk-WZGGIAHJ.js +76 -0
  171. package/dist/douyin-miniprogram-AIJPPIZH.js +41 -0
  172. package/dist/douyin-miniprogram-HCYZ5NBW.js +42 -0
  173. package/dist/figma-2YYNSCDX.js +103 -0
  174. package/dist/figma-RYOBMENP.js +102 -0
  175. package/dist/firebase-2IJDDBXX.js +112 -0
  176. package/dist/firebase-OYSY6HPT.js +111 -0
  177. package/dist/firecrawl-2T3SBUW7.js +66 -0
  178. package/dist/firecrawl-IYYXLAZM.js +65 -0
  179. package/dist/flyai-7FJ4TRAG.js +81 -0
  180. package/dist/flyai-QS5Q6FJR.js +82 -0
  181. package/dist/gitagent-MWI75OIX.js +725 -0
  182. package/dist/gitagent-YBMWY7NZ.js +726 -0
  183. package/dist/gitee-3N7OFOM7.js +53 -0
  184. package/dist/gitee-KVNK6KLZ.js +54 -0
  185. package/dist/github-LUEC2LID.js +143 -0
  186. package/dist/github-XRO5Z3GC.js +142 -0
  187. package/dist/google-ads-A3QAJI4D.js +88 -0
  188. package/dist/google-ads-VPKWTX67.js +89 -0
  189. package/dist/google-analytics-C4UR5ZR2.js +50 -0
  190. package/dist/google-analytics-XDYZA2B7.js +49 -0
  191. package/dist/google-workspace-LL3EWVHH.js +320 -0
  192. package/dist/google-workspace-YX35SHHX.js +321 -0
  193. package/dist/huawei-xiaoyi-6BSMGJHR.js +40 -0
  194. package/dist/huawei-xiaoyi-KPWLTSHB.js +41 -0
  195. package/dist/hubspot-DIUHGEDI.js +45 -0
  196. package/dist/hubspot-FTIEMNZO.js +44 -0
  197. package/dist/huggingface-MJCOXA7E.js +116 -0
  198. package/dist/huggingface-UUXK2RHK.js +117 -0
  199. package/dist/index.d.ts +3013 -0
  200. package/dist/index.js +15649 -0
  201. package/dist/inference-ai-image-generation-CMI6R5T3.js +106 -0
  202. package/dist/inference-ai-image-generation-PXV6IG4U.js +107 -0
  203. package/dist/inference-sh-7AZOLEFI.js +94 -0
  204. package/dist/inference-sh-ABQOD3YF.js +95 -0
  205. package/dist/init.command-6E24K4H3.js +9 -0
  206. package/dist/init.command-O4HG4HKR.js +10 -0
  207. package/dist/klaviyo-6K5YEFNH.js +45 -0
  208. package/dist/klaviyo-LDPBWBSS.js +44 -0
  209. package/dist/kuaidi100-HGFM5VK2.js +42 -0
  210. package/dist/kuaidi100-UHPFCVXP.js +41 -0
  211. package/dist/lark-6LNA3LUQ.js +103 -0
  212. package/dist/lark-URVBZNS4.js +102 -0
  213. package/dist/linear-7QFSFPOD.js +57 -0
  214. package/dist/linear-T4ORUP7N.js +56 -0
  215. package/dist/lovart-PDUXRUHJ.js +99 -0
  216. package/dist/lovart-QO3SK55T.js +100 -0
  217. package/dist/meta-ads-SCNFI45S.js +42 -0
  218. package/dist/meta-ads-V6XPZWX3.js +41 -0
  219. package/dist/miclaw-5CNTW7VV.js +36 -0
  220. package/dist/miclaw-TPPPS2WN.js +35 -0
  221. package/dist/model-provider-AVSFJSZP.js +393 -0
  222. package/dist/model-provider-KFB76XV5.js +392 -0
  223. package/dist/notion-FZK76MN2.js +69 -0
  224. package/dist/notion-WFA7KGZZ.js +70 -0
  225. package/dist/oceanengine-3JZUS3PP.js +43 -0
  226. package/dist/oceanengine-5BRIJVJE.js +42 -0
  227. package/dist/opencli-PFXHGCS2.js +81 -0
  228. package/dist/opencli-VIGRJTGH.js +80 -0
  229. package/dist/paypal-33UADIPR.js +54 -0
  230. package/dist/paypal-Z5JYHIWD.js +55 -0
  231. package/dist/playwright-MG5WHK47.js +58 -0
  232. package/dist/playwright-SQAQ3DZG.js +59 -0
  233. package/dist/plugins-HZBWK3WQ.js +120 -0
  234. package/dist/plugins-I4GD5SZX.js +121 -0
  235. package/dist/posthog-MU5MAJOQ.js +79 -0
  236. package/dist/posthog-RJRRKDWB.js +80 -0
  237. package/dist/salesforce-34FVIJTG.js +82 -0
  238. package/dist/salesforce-3QZ6OFVO.js +83 -0
  239. package/dist/sentry-MCIRMACU.js +111 -0
  240. package/dist/sentry-PIWW46VA.js +110 -0
  241. package/dist/seo-suite-4SQ3I67Q.js +54 -0
  242. package/dist/seo-suite-WJXMA3S4.js +55 -0
  243. package/dist/serve.command-5FMIPQRY.js +10 -0
  244. package/dist/serve.command-DNE6GPMK.js +9 -0
  245. package/dist/shadowob-JELOWHWX.js +1068 -0
  246. package/dist/shadowob-PRSMI5MW.js +1069 -0
  247. package/dist/sherlock-2PKY2E2Y.js +66 -0
  248. package/dist/sherlock-C5ZWPPVT.js +67 -0
  249. package/dist/shopify-GL3NFVGE.js +94 -0
  250. package/dist/shopify-R4G3UXM6.js +93 -0
  251. package/dist/skill-discovery-7INAUP4D.js +77 -0
  252. package/dist/skill-discovery-YPXXV622.js +78 -0
  253. package/dist/state-7MCZBTR5.js +17 -0
  254. package/dist/state-FGOFLFBE.js +18 -0
  255. package/dist/stripe-C22RR4ZS.js +83 -0
  256. package/dist/stripe-LJNPQ3CQ.js +82 -0
  257. package/dist/supabase-IRNQ54FJ.js +98 -0
  258. package/dist/supabase-N4ONFJNQ.js +97 -0
  259. package/dist/taobao-aipaas-LRR4GMO3.js +45 -0
  260. package/dist/taobao-aipaas-RVKORSF4.js +46 -0
  261. package/dist/tapd-3JPVJ7XH.js +46 -0
  262. package/dist/tapd-TMQRSMFG.js +47 -0
  263. package/dist/tencent-ads-IGD33LO7.js +42 -0
  264. package/dist/tencent-ads-UHC6OPBV.js +43 -0
  265. package/dist/tencent-docs-C3A4J3CJ.js +47 -0
  266. package/dist/tencent-docs-O2SC4FHL.js +48 -0
  267. package/dist/tencent-maps-HMMWMNF4.js +37 -0
  268. package/dist/tencent-maps-OQOKHVW2.js +36 -0
  269. package/dist/vercel-KOXDDTHX.js +73 -0
  270. package/dist/vercel-OLNVDWMG.js +74 -0
  271. package/dist/webflow-FULU5Q2I.js +114 -0
  272. package/dist/webflow-OMJKZM54.js +115 -0
  273. package/dist/wechat-miniprogram-skyline-KYCDMQNW.js +74 -0
  274. package/dist/wechat-miniprogram-skyline-VR4FVIQL.js +75 -0
  275. package/dist/wechat-pay-BCMAJ6UW.js +50 -0
  276. package/dist/wechat-pay-YQQKXVUI.js +51 -0
  277. package/dist/wonda-NGWIORYN.js +81 -0
  278. package/dist/wonda-RBABXFNM.js +82 -0
  279. package/dist/wordpress-woocommerce-RDIUTHYT.js +57 -0
  280. package/dist/wordpress-woocommerce-RNA5HB3N.js +58 -0
  281. package/dist/wps-DAEFQHDE.js +47 -0
  282. package/dist/wps-LUWHMZQQ.js +48 -0
  283. package/dist/yuque-HCHTJWNI.js +72 -0
  284. package/dist/yuque-KRH5O74J.js +71 -0
  285. package/images/RUNNERS.md +270 -0
  286. package/images/cc-connect-runner/entrypoint.mjs +311 -0
  287. package/images/claude-runner/Dockerfile +88 -0
  288. package/images/claude-runner/RUNNER.md +222 -0
  289. package/images/claude-runner/entrypoint.mjs +2 -0
  290. package/images/codex-runner/Dockerfile +87 -0
  291. package/images/codex-runner/RUNNER.md +226 -0
  292. package/images/codex-runner/entrypoint.mjs +2 -0
  293. package/images/gemini-runner/Dockerfile +87 -0
  294. package/images/gemini-runner/RUNNER.md +218 -0
  295. package/images/gemini-runner/entrypoint.mjs +2 -0
  296. package/images/hermes-runner/Dockerfile +74 -0
  297. package/images/hermes-runner/RUNNER.md +243 -0
  298. package/images/hermes-runner/entrypoint.mjs +283 -0
  299. package/images/openclaw-runner/Dockerfile +212 -0
  300. package/images/openclaw-runner/RUNNER.md +170 -0
  301. package/images/openclaw-runner/entrypoint.mjs +1113 -0
  302. package/images/openclaw-runner/warm-runtime-deps.mjs +95 -0
  303. package/images/opencode-runner/Dockerfile +87 -0
  304. package/images/opencode-runner/RUNNER.md +202 -0
  305. package/images/opencode-runner/entrypoint.mjs +2 -0
  306. package/package.json +121 -0
  307. package/templates/agent-marketplace-buddy.template.json +131 -0
  308. package/templates/ai-werewolf.template.json +92 -0
  309. package/templates/bmad-method-buddy.template.json +123 -0
  310. package/templates/brain-fix.template.json +92 -0
  311. package/templates/claude-ads-buddy.template.json +123 -0
  312. package/templates/claude-financial-services-buddy.template.json +111 -0
  313. package/templates/claude-seo-buddy.template.json +123 -0
  314. package/templates/code-arena.template.json +92 -0
  315. package/templates/daily-brief.template.json +92 -0
  316. package/templates/e-wife.template.json +92 -0
  317. package/templates/everything-claude-code-buddy.template.json +125 -0
  318. package/templates/financial-freedom.template.json +92 -0
  319. package/templates/gitstory.template.json +92 -0
  320. package/templates/google-workspace-buddy.template.json +88 -0
  321. package/templates/gsd-buddy.template.json +119 -0
  322. package/templates/gstack-buddy.template.json +143 -0
  323. package/templates/gstack.template.json +92 -0
  324. package/templates/little-match-girl.template.json +114 -0
  325. package/templates/lovart-buddy.template.json +110 -0
  326. package/templates/marketingskills-buddy.template.json +102 -0
  327. package/templates/retire-buddy.template.json +92 -0
  328. package/templates/scientific-skills-buddy.template.json +119 -0
  329. package/templates/seomachine-buddy.template.json +113 -0
  330. package/templates/shadow-server-app-demo.template.json +105 -0
  331. package/templates/slavingia-skills-buddy.template.json +102 -0
  332. package/templates/superclaude-buddy.template.json +146 -0
  333. package/templates/superpowers-buddy.template.json +108 -0
  334. package/templates/world-pulse.template.json +92 -0
@@ -0,0 +1,95 @@
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync } from 'node:fs'
2
+ import { join } from 'node:path'
3
+ import { pathToFileURL } from 'node:url'
4
+
5
+ const packageRoot = process.env.OPENCLAW_PACKAGE_ROOT || '/app/node_modules/openclaw'
6
+ const configPath = process.argv[2] || process.env.OPENCLAW_CONFIG_PATH || ''
7
+
8
+ function loadConfig() {
9
+ if (configPath && existsSync(configPath)) {
10
+ return JSON.parse(readFileSync(configPath, 'utf-8'))
11
+ }
12
+
13
+ return {
14
+ plugins: {
15
+ enabled: true,
16
+ load: { paths: ['/app/extensions/shadowob'] },
17
+ entries: {
18
+ 'openclaw-shadowob': { enabled: true },
19
+ bonjour: { enabled: false },
20
+ },
21
+ },
22
+ channels: {
23
+ shadowob: { enabled: true },
24
+ },
25
+ }
26
+ }
27
+
28
+ function findRuntimeDepsChunk() {
29
+ const distDir = join(packageRoot, 'dist')
30
+ const chunk = readdirSync(distDir).find(
31
+ (name) => name.startsWith('bundled-runtime-deps-') && name.endsWith('.js'),
32
+ )
33
+ if (!chunk) {
34
+ return null
35
+ }
36
+ return join(distDir, chunk)
37
+ }
38
+
39
+ async function main() {
40
+ const stageDir = process.env.OPENCLAW_PLUGIN_STAGE_DIR
41
+ if (stageDir) {
42
+ mkdirSync(stageDir, { recursive: true })
43
+ }
44
+
45
+ const runtimeDepsChunk = findRuntimeDepsChunk()
46
+ if (!runtimeDepsChunk) {
47
+ console.warn(
48
+ `[runtime-deps] OpenClaw bundled runtime deps chunk not found in ${join(
49
+ packageRoot,
50
+ 'dist',
51
+ )}; skipping build-time prewarm`,
52
+ )
53
+ return
54
+ }
55
+
56
+ const runtimeDeps = await import(pathToFileURL(runtimeDepsChunk).href)
57
+ const config = loadConfig()
58
+ const scan = runtimeDeps.c({
59
+ packageRoot,
60
+ config,
61
+ includeConfiguredChannels: true,
62
+ env: process.env,
63
+ })
64
+
65
+ if (scan.conflicts.length > 0) {
66
+ console.warn(
67
+ `[runtime-deps] ${scan.conflicts.length} bundled dependency conflict(s) detected`,
68
+ )
69
+ }
70
+
71
+ if (scan.missing.length === 0) {
72
+ console.log(`[runtime-deps] bundled runtime deps already staged (${scan.deps.length} specs)`)
73
+ return
74
+ }
75
+
76
+ const missingSpecs = scan.missing.map((dep) => `${dep.name}@${dep.version}`)
77
+ const installSpecs = scan.deps.map((dep) => `${dep.name}@${dep.version}`)
78
+ const installRoot = runtimeDeps.o(packageRoot, { env: process.env })
79
+
80
+ console.log(
81
+ `[runtime-deps] staging ${missingSpecs.length}/${installSpecs.length} bundled runtime deps in ${installRoot}`,
82
+ )
83
+ const result = runtimeDeps.i({
84
+ installRoot,
85
+ missingSpecs,
86
+ installSpecs,
87
+ env: process.env,
88
+ })
89
+ console.log(`[runtime-deps] staged ${result.installSpecs.length} bundled runtime deps`)
90
+ }
91
+
92
+ main().catch((err) => {
93
+ console.error(`[runtime-deps] failed: ${err instanceof Error ? err.message : String(err)}`)
94
+ process.exit(1)
95
+ })
@@ -0,0 +1,87 @@
1
+ # syntax=docker/dockerfile:1.7
2
+
3
+ # ─── OpenCode Runner ──────────────────────────────────────────────────────
4
+ # Native cc-connect runner for OpenCode.
5
+ #
6
+ # Build from the repository root:
7
+ # docker build -t ghcr.io/buggyblues/opencode-runner:latest \
8
+ # -f apps/cloud/images/opencode-runner/Dockerfile .
9
+ # ──────────────────────────────────────────────────────────────────────────
10
+
11
+ FROM golang:1.25-bookworm AS cc-builder
12
+
13
+ ARG CC_CONNECT_REF=63b5d59127b3004bc7002f2d51892b1f2a91ea83
14
+ ARG CC_CONNECT_REPO=https://github.com/buggyblues/cc-connect.git
15
+
16
+ WORKDIR /build
17
+
18
+ RUN apt-get update && \
19
+ apt-get install -y --no-install-recommends ca-certificates git && \
20
+ rm -rf /var/lib/apt/lists/*
21
+
22
+ RUN git clone --depth 1 "${CC_CONNECT_REPO}" /tmp/cc-connect && \
23
+ cd /tmp/cc-connect && \
24
+ git fetch --depth 1 origin "${CC_CONNECT_REF}" && \
25
+ git checkout "${CC_CONNECT_REF}" && \
26
+ CGO_ENABLED=0 go build \
27
+ -tags "no_web no_acp no_cursor no_devin no_iflow no_kimi no_qoder no_feishu no_telegram no_discord no_slack no_dingtalk no_wecom no_weixin no_qq no_qqbot no_line no_weibo" \
28
+ -ldflags "-s -w" \
29
+ -o /build/cc-connect ./cmd/cc-connect
30
+
31
+ FROM node:22-bookworm-slim AS node-deps
32
+
33
+ WORKDIR /build
34
+
35
+ RUN npm init -y && \
36
+ npm install --no-audit --fund=false \
37
+ opencode-ai@latest \
38
+ @shadowob/cli@latest \
39
+ @shadowob/connector@latest
40
+
41
+ FROM node:22-bookworm-slim AS runner
42
+
43
+ LABEL org.opencontainers.image.source="https://github.com/nicepkg/shadow"
44
+ LABEL org.opencontainers.image.description="Shadow Cloud OpenCode Runner (cc-connect + OpenCode)"
45
+
46
+ RUN apt-get update && \
47
+ apt-get install -y --no-install-recommends ca-certificates curl git tini && \
48
+ rm -rf /var/lib/apt/lists/*
49
+
50
+ RUN userdel -r node 2>/dev/null || true; \
51
+ groupdel node 2>/dev/null || true; \
52
+ groupadd -g 1000 shadow; \
53
+ useradd -u 1000 -g shadow -m -d /home/shadow -s /usr/sbin/nologin shadow
54
+
55
+ WORKDIR /app
56
+ RUN mkdir -p /home/shadow/.cc-connect /home/shadow/.config/opencode /etc/openclaw \
57
+ /etc/shadowob /var/log/shadowob /workspace /tmp/npm-cache && \
58
+ ln -s /home/shadow /home/openclaw && \
59
+ chown -R shadow:shadow /home/shadow /etc/shadowob /var/log/shadowob \
60
+ /workspace /tmp/npm-cache /app
61
+
62
+ COPY --from=node-deps --chown=shadow:shadow /build/node_modules ./node_modules
63
+ COPY --from=node-deps --chown=shadow:shadow /build/package.json ./package.json
64
+ COPY --from=cc-builder /build/cc-connect /usr/local/bin/cc-connect
65
+
66
+ RUN ln -s /app/node_modules/.bin/opencode /usr/local/bin/opencode && \
67
+ ln -s /app/node_modules/.bin/shadowob /usr/local/bin/shadowob && \
68
+ ln -s /app/node_modules/.bin/shadowob-connector /usr/local/bin/shadowob-connector
69
+
70
+ COPY --chown=shadow:shadow apps/cloud/images/cc-connect-runner/entrypoint.mjs /app/entrypoint.mjs
71
+
72
+ HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
73
+ CMD curl -f http://localhost:3100/health || exit 1
74
+
75
+ EXPOSE 3100
76
+
77
+ ENV NODE_ENV=production
78
+ ENV HOME=/home/shadow
79
+ ENV SHADOW_RUNNER_HEALTH_PORT=3100
80
+ ENV OPENCLAW_NO_RESPAWN=1
81
+ ENV SHADOW_RUNNER_NAME=opencode-runner
82
+ ENV npm_config_cache=/tmp/npm-cache
83
+
84
+ USER shadow
85
+
86
+ ENTRYPOINT ["tini", "--"]
87
+ CMD ["node", "/app/entrypoint.mjs"]
@@ -0,0 +1,202 @@
1
+ # OpenCode Runner Research
2
+
3
+ Research date: 2026-05-14.
4
+
5
+ ## Target role
6
+
7
+ `opencode` should run through the ShadowOB `cc-connect` fork, not through
8
+ OpenClaw gateway or ACPX. The runner process should be:
9
+
10
+ ```text
11
+ cc-connect fork -> agent type "opencode" -> opencode CLI
12
+ ```
13
+
14
+ Shadow transport should come from the cc-connect ShadowOB platform.
15
+
16
+ ## Current repository state
17
+
18
+ The OpenCode adapter and image now use the cc-connect fork path. The runtime
19
+ package emits `cc-connect-config.toml`, `opencode.json`, `.opencode` runtime
20
+ files, workspace bootstrap files, and ShadowOB skill files through
21
+ `runtime-files.json`.
22
+
23
+ ## Native OpenCode configuration
24
+
25
+ OpenCode uses JSON/JSONC config and keeps several extensibility surfaces native:
26
+
27
+ | Concern | Native OpenCode surface |
28
+ | --- | --- |
29
+ | Global config | `~/.config/opencode/opencode.json`. |
30
+ | Project config | `opencode.json` or `opencode.jsonc` at the project root. |
31
+ | Custom config | `OPENCODE_CONFIG`. |
32
+ | Models/providers | `model`, `provider`, `enabled_providers`, `disabled_providers`. |
33
+ | Agents | `agent` object and Markdown agents under `.opencode/agents` or global config locations. |
34
+ | Default agent | `default_agent`, which must be a primary agent. |
35
+ | Subagents | Agent config can mark subtask behavior; commands can force `subtask`. |
36
+ | Commands | `command` config entries or Markdown files under `.opencode/commands` and global command directories. |
37
+ | Skills | `.opencode/skills/<name>/SKILL.md`, plus compatible `.claude/skills` and `.agents/skills` discovery. |
38
+ | MCP | `mcp` config object for local and remote MCP servers. |
39
+ | Hooks/plugins | OpenCode plugins under `.opencode/plugins` or `~/.config/opencode/plugins`, plus npm-loaded plugins. |
40
+ | Logs and sessions | OpenCode native session data plus cc-connect session state; exact collection should be verified during implementation. |
41
+
42
+ ## Shadow slash command bridge
43
+
44
+ The runner package always materializes `/etc/shadowob/slash-commands.json` so
45
+ Shadow can load a stable command index. The OpenCode runner owns its catalog in
46
+ `apps/cloud/src/runtimes/slash-commands/opencode.ts`; this is intentionally not
47
+ a common runtime artifact.
48
+
49
+ Official OpenCode TUI commands researched from the docs include `/connect`,
50
+ `/compact`, `/details`, `/editor`, `/exit`, `/export`, `/help`, `/init`,
51
+ `/models`, `/new`, `/redo`, `/sessions`, `/share`, `/themes`, `/thinking`,
52
+ `/undo`, and `/unshare`.
53
+
54
+ Current Cloud injection registers only names that do not collide with
55
+ cc-connect's universal bot commands: `/connect`, `/details`, `/editor`,
56
+ `/exit`, `/export`, `/init`, `/models`, `/redo`, `/share`, `/themes`,
57
+ `/thinking`, `/undo`, and `/unshare`. Overlapping control commands such as
58
+ `/new`, `/compact`, `/help`, and `/sessions` remain cc-connect-managed.
59
+
60
+ cc-connect local commands are prompt-backed. Direct OpenCode TUI passthrough
61
+ should be added in the cc-connect OpenCode agent only after the collision policy
62
+ is explicit and tested.
63
+
64
+ ## Schema and type anchors
65
+
66
+ - Main schema URL: `https://opencode.ai/config.json`.
67
+ - TUI schema URL: `https://opencode.ai/tui.json`.
68
+ - Config type: JSON or JSONC, with merged global and project config layers.
69
+ - cc-connect type anchor: `../cc-connect/agent/opencode/opencode.go`.
70
+ - Test rule: generated `opencode.json` must validate against the schema URL and
71
+ then survive an OpenCode startup smoke test.
72
+
73
+ ## Provider and authentication notes
74
+
75
+ - OpenCode uses `/connect` to store provider credentials under
76
+ `~/.local/share/opencode/auth.json`. Cloud should materialize that credential
77
+ file from Secret data or pass provider env only through a controlled adapter.
78
+ - `opencode.json` owns the provider catalog. Custom OpenAI-compatible providers
79
+ use `provider.<id>.npm = "@ai-sdk/openai-compatible"`, `options.baseURL`,
80
+ optional headers/API key, and a `models` map.
81
+ - If a provider/model uses `/v1/responses`, OpenCode docs direct users to the
82
+ AI SDK OpenAI package rather than the OpenAI-compatible chat-completions
83
+ package. The adapter must record this distinction in provider metadata.
84
+ - Subscription or OAuth flows are provider-specific and interactive through
85
+ `/connect`; they are not a universal bootstrap method for disposable runner
86
+ containers.
87
+ - Keep provider config and provider credentials separate: `opencode.json`
88
+ describes available providers/models, while raw keys belong in Secret data or
89
+ a generated auth file with `0600` mode.
90
+
91
+ ## Security, audit, cost, network, and tools
92
+
93
+ - Permissions: `permission` can be a global action or per-tool object. Actions
94
+ are `allow`, `ask`, and `deny`; last matching granular rule wins.
95
+ - Defaults: OpenCode is permissive by default; Cloud should generate an explicit
96
+ fail-closed baseline instead of relying on defaults.
97
+ - Tool keys: `read`, `edit`, `glob`, `grep`, `bash`, `task`, `skill`, `lsp`,
98
+ `question`, `webfetch`, `websearch`, `external_directory`, and `doom_loop`.
99
+ - Secret files: `.env` and `.env.*` are denied by default while `.env.example`
100
+ remains allowed; keep that behavior in generated config.
101
+ - Network: control `webfetch`, `websearch`, remote MCP URLs, provider base URLs,
102
+ and remote organization defaults through local override config.
103
+ - MCP: enable only named servers; remote MCP adds context and cost, so use
104
+ explicit `enabled` and tool allow/deny config.
105
+ - Cost/audit: `small_model`, provider `timeout`/`chunkTimeout`, MCP tool count,
106
+ compaction, snapshot disk usage, and context-heavy MCP servers must be
107
+ auditable.
108
+ - Logs: collect cc-connect daemon logs, OpenCode session state, model cache
109
+ files, and schema validation output.
110
+
111
+ ## cc-connect mapping
112
+
113
+ The local fork exposes `core.RegisterAgent("opencode", New)`. Important options
114
+ from `../cc-connect/agent/opencode/opencode.go`:
115
+
116
+ - `work_dir`
117
+ - `model`
118
+ - `mode`: `default` or `yolo`
119
+ - `cmd`
120
+ - cc-connect model cache under `data_dir/projects/*.opencode-models.json`
121
+
122
+ The fork drives OpenCode with `opencode run --format json` and keeps the
123
+ session id for follow-up turns.
124
+
125
+ Example generated project shape:
126
+
127
+ ```toml
128
+ [[projects]]
129
+ name = "agent-id"
130
+
131
+ [projects.agent]
132
+ type = "opencode"
133
+
134
+ [projects.agent.options]
135
+ work_dir = "/workspace"
136
+
137
+ [[projects.platforms]]
138
+ type = "shadowob"
139
+ ```
140
+
141
+ ## Capability notes
142
+
143
+ - Models: write `model` and provider config in `opencode.json`, or use provider
144
+ refs in cc-connect when the model list is managed centrally.
145
+ - Skills: materialize `.opencode/skills` first; optionally also emit
146
+ `.agents/skills` if a workflow must be shared with Codex.
147
+ - MCP: write the OpenCode `mcp` object, not OpenClaw `mcp`.
148
+ - Cron/routine: OpenCode does not provide the same native cron surface as
149
+ OpenClaw or Hermes in the researched docs; Cloud should own scheduling for
150
+ phase 1.
151
+ - Hooks: prefer OpenCode plugins for deterministic lifecycle behavior.
152
+ - Subagents: use OpenCode `agent` and command `subtask` config instead of
153
+ OpenClaw multi-agent routing.
154
+ - Logs: collect cc-connect logs and OpenCode native session/log locations
155
+ separately. Implementation should run a container smoke test to pin the exact
156
+ current OpenCode log directory.
157
+
158
+ ## Migration implications
159
+
160
+ - OpenClaw, ACPX, and `@shadowob/openclaw-shadowob` are not used by the
161
+ OpenCode runner image.
162
+ - The image embeds the cc-connect fork plus the OpenCode CLI.
163
+ - Generate `opencode.json`, `.opencode/agents`, `.opencode/commands`,
164
+ `.opencode/skills`, and `.opencode/plugins` as native artifacts.
165
+ - Keep OpenCode model/provider config separate from cc-connect provider refs so
166
+ both CLI-native auth and Cloud-managed provider secrets can work.
167
+
168
+ ## Adapter and smoke tests
169
+
170
+ Unit tests:
171
+
172
+ - `opencode.json` validates against `https://opencode.ai/config.json`.
173
+ - Generated permissions include explicit bash/edit/read/webfetch/websearch,
174
+ skill, task, external directory, and doom-loop behavior.
175
+ - `.env` read denies and external directory restrictions are preserved.
176
+ - cc-connect TOML contains `type = "opencode"` and no OpenClaw artifacts.
177
+ - MCP entries use local/remote type-specific fields and do not enable all remote
178
+ organization defaults implicitly.
179
+
180
+ Container smoke:
181
+
182
+ - `cc-connect --version` and `opencode --version` work.
183
+ - `opencode.json`, `.opencode/agents`, `.opencode/commands`, and
184
+ `.opencode/skills` exist and validate.
185
+ - Start cc-connect with `type = "opencode"` and inspect daemon logs.
186
+ - Assert no `/etc/openclaw/config.json` exists.
187
+ - Check that the generated config blocks `git push` or another representative
188
+ denied command when Cloud policy says so.
189
+
190
+ ## Sources
191
+
192
+ - Config: https://opencode.ai/docs/config
193
+ - Providers: https://dev.opencode.ai/docs/providers/
194
+ - Permissions: https://opencode.ai/docs/permissions
195
+ - TUI slash commands: https://opencode.ai/docs/tui/
196
+ - Agents: https://opencode.ai/docs/agents
197
+ - Commands: https://opencode.ai/docs/commands
198
+ - MCP servers: https://opencode.ai/docs/mcp-servers
199
+ - Skills: https://opencode.ai/docs/skills
200
+ - Plugins: https://opencode.ai/docs/plugins
201
+ - OpenCode repository: https://github.com/opencode-ai/opencode
202
+ - cc-connect fork source: https://github.com/buggyblues/cc-connect
@@ -0,0 +1,2 @@
1
+ process.env.SHADOW_RUNNER_NAME ??= 'opencode-runner'
2
+ await import('../cc-connect-runner/entrypoint.mjs')
package/package.json ADDED
@@ -0,0 +1,121 @@
1
+ {
2
+ "name": "@shadowob/cloud",
3
+ "version": "1.1.6-dev.311",
4
+ "description": "shadowob-cloud — deploy AI agents to Kubernetes",
5
+ "type": "module",
6
+ "bin": {
7
+ "shadowob-cloud": "./dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "images",
12
+ "templates"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "development": "./src/index.ts",
20
+ "import": "./dist/index.js",
21
+ "default": "./dist/index.js"
22
+ },
23
+ "./cli": {
24
+ "development": "./src/cli.ts",
25
+ "import": "./dist/cli.js",
26
+ "default": "./dist/cli.js"
27
+ }
28
+ },
29
+ "dependencies": {
30
+ "@hono/node-server": "^1.19.11",
31
+ "@hono/zod-validator": "^0.5.0",
32
+ "@monaco-editor/react": "^4.7.0",
33
+ "@pulumi/kubernetes": "^4.21.0",
34
+ "@pulumi/pulumi": "^3.160.0",
35
+ "@tanstack/react-query": "^5.80.7",
36
+ "@tanstack/react-router": "^1.168.2",
37
+ "better-sqlite3": "^12.8.0",
38
+ "chalk": "^5.4.1",
39
+ "clsx": "^2.1.1",
40
+ "commander": "^13.1.0",
41
+ "date-fns": "^4.1.0",
42
+ "drizzle-orm": "^0.44.7",
43
+ "hono": "^4.12.17",
44
+ "i18next": "^25.8.14",
45
+ "i18next-browser-languagedetector": "^8.2.1",
46
+ "jsonc-parser": "^3.3.1",
47
+ "lucide-react": "^0.513.0",
48
+ "monaco-editor": "^0.55.1",
49
+ "node-ssh": "^13.2.1",
50
+ "postgres": "^3.4.9",
51
+ "react": "^19.2.5",
52
+ "react-dom": "^19.2.5",
53
+ "react-hook-form": "^7.56.4",
54
+ "react-i18next": "^16.5.4",
55
+ "smol-toml": "^1.6.1",
56
+ "tailwind-merge": "^3.3.0",
57
+ "typia": "^12.0.1",
58
+ "yaml": "^2.8.4",
59
+ "zod": "^3.25.76",
60
+ "zustand": "^5.0.13",
61
+ "@shadowob/sdk": "1.1.6-dev.311",
62
+ "@shadowob/shared": "1.1.6-dev.311"
63
+ },
64
+ "devDependencies": {
65
+ "@playwright/test": "^1.52.0",
66
+ "@rsbuild/core": "^1.3.21",
67
+ "@rsbuild/plugin-react": "^1.4.6",
68
+ "@standard-schema/spec": "^1.1.0",
69
+ "@tailwindcss/postcss": "^4.2.2",
70
+ "@types/better-sqlite3": "^7.6.13",
71
+ "@types/node": "^22.15.21",
72
+ "@types/react": "^19.1.6",
73
+ "@types/react-dom": "^19.1.6",
74
+ "@typia/unplugin": "^12.0.1",
75
+ "drizzle-kit": "^0.31.10",
76
+ "tailwindcss": "^4.2.4",
77
+ "ts-patch": "^3.3.0",
78
+ "tsup": "^8.5.0",
79
+ "tsx": "^4.19.0",
80
+ "typescript": "^5.9.3",
81
+ "typescript-json-schema": "^0.67.1",
82
+ "vitest": "^4.1.0",
83
+ "@shadowob/cloud-ui": "1.0.0"
84
+ },
85
+ "engines": {
86
+ "node": ">=22.14.0"
87
+ },
88
+ "publishConfig": {
89
+ "access": "public"
90
+ },
91
+ "scripts": {
92
+ "build": "tsup && rsbuild build",
93
+ "dev": "tsup --watch",
94
+ "dev:backend": "tsup --watch",
95
+ "dev:frontend": "rsbuild dev",
96
+ "console:dev": "rsbuild dev",
97
+ "console:build": "rsbuild build",
98
+ "console:preview": "rsbuild preview",
99
+ "generate:plugin-library": "node --import tsx scripts/generate-plugin-library.ts",
100
+ "generate:schema": "node --import tsx scripts/generate-schema.ts",
101
+ "prebuild": "pnpm generate:plugin-library",
102
+ "predev": "pnpm generate:plugin-library",
103
+ "predev:backend": "pnpm generate:plugin-library",
104
+ "predev:frontend": "pnpm generate:plugin-library",
105
+ "preconsole:build": "pnpm generate:plugin-library",
106
+ "pretypecheck": "pnpm generate:plugin-library",
107
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.dashboard.json --noEmit",
108
+ "pretest": "pnpm generate:plugin-library",
109
+ "test": "vitest run",
110
+ "test:watch": "vitest",
111
+ "pretest:e2e": "pnpm generate:plugin-library",
112
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
113
+ "pretest:e2e:cli": "pnpm generate:plugin-library",
114
+ "test:e2e:cli": "vitest run --config vitest.cli.config.ts",
115
+ "pretest:e2e:console": "pnpm generate:plugin-library",
116
+ "test:e2e:console": "playwright test",
117
+ "test:e2e:console:ui": "playwright test --ui",
118
+ "test:e2e:console:visual": "playwright test e2e/console/visual-regression.spec.ts",
119
+ "test:e2e:console:visual:update": "playwright test e2e/console/visual-regression.spec.ts --update-snapshots"
120
+ }
121
+ }
@@ -0,0 +1,131 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "name": "agent-marketplace-buddy",
4
+ "title": "${i18n:title}",
5
+ "description": "${i18n:description}",
6
+ "environment": "production",
7
+ "use": [
8
+ {
9
+ "plugin": "model-provider"
10
+ },
11
+ {
12
+ "plugin": "shadowob",
13
+ "options": {
14
+ "servers": [
15
+ {
16
+ "id": "agent-marketplace-hq",
17
+ "name": "Agent Marketplace",
18
+ "slug": "agent-marketplace",
19
+ "channels": [
20
+ {
21
+ "id": "choose",
22
+ "title": "Choose",
23
+ "type": "text"
24
+ },
25
+ {
26
+ "id": "build",
27
+ "title": "Build",
28
+ "type": "text"
29
+ },
30
+ {
31
+ "id": "review",
32
+ "title": "Review",
33
+ "type": "text"
34
+ }
35
+ ]
36
+ }
37
+ ],
38
+ "buddies": [
39
+ {
40
+ "id": "marketplace-bot",
41
+ "name": "Marketplace Buddy"
42
+ }
43
+ ],
44
+ "bindings": [
45
+ {
46
+ "targetId": "marketplace-bot",
47
+ "targetType": "buddy",
48
+ "servers": ["agent-marketplace-hq"],
49
+ "channels": ["choose", "build", "review"],
50
+ "agentId": "agent-marketplace-buddy"
51
+ }
52
+ ]
53
+ }
54
+ }
55
+ ],
56
+ "deployments": {
57
+ "namespace": "agent-marketplace-buddy",
58
+ "agents": [
59
+ {
60
+ "id": "agent-marketplace-buddy",
61
+ "runtime": "openclaw",
62
+ "description": "Composable specialist-agent Buddy powered by wshobson/agents: plugin marketplace, domain agents, command workflows, and specialized skills.",
63
+ "identity": {
64
+ "name": "Marketplace Buddy",
65
+ "personality": "You are a precise agent librarian and workflow architect. You help teams choose the smallest useful specialist set, then run the relevant workflow.",
66
+ "systemPrompt": "Routing:\n1. Start by identifying the smallest plugin or specialist set that matches the task.\n2. Prefer mounted plugin README and docs before invoking a skill or command.\n3. For engineering tasks, select agents and skills by domain: backend, frontend, security, data, infra, docs, SEO, or operations.\n4. Avoid loading the whole marketplace into one answer; cite the selected plugin path.\n5. When a workflow command exists, use it as the source of truth."
67
+ },
68
+ "use": [
69
+ {
70
+ "plugin": "agent-pack",
71
+ "options": {
72
+ "packs": [
73
+ {
74
+ "id": "wshobson-agents",
75
+ "url": "https://github.com/wshobson/agents",
76
+ "ref": "main",
77
+ "autoImport": ["mcp"],
78
+ "mounts": [
79
+ {
80
+ "kind": "skills",
81
+ "from": "plugins"
82
+ },
83
+ {
84
+ "kind": "commands",
85
+ "from": "plugins"
86
+ },
87
+ {
88
+ "kind": "agents",
89
+ "from": "plugins"
90
+ },
91
+ {
92
+ "kind": "instructions",
93
+ "from": "docs"
94
+ },
95
+ {
96
+ "kind": "instructions",
97
+ "from": "plugins"
98
+ }
99
+ ],
100
+ "instructionFiles": ["CLAUDE.md", "README.md"]
101
+ }
102
+ ],
103
+ "poll": "1h"
104
+ }
105
+ }
106
+ ],
107
+ "resources": {
108
+ "requests": {
109
+ "cpu": "100m",
110
+ "memory": "384Mi"
111
+ },
112
+ "limits": {
113
+ "cpu": "1000m",
114
+ "memory": "1Gi"
115
+ }
116
+ },
117
+ "configuration": {}
118
+ }
119
+ ]
120
+ },
121
+ "i18n": {
122
+ "en": {
123
+ "title": "Agent Marketplace Buddy",
124
+ "description": "A composable specialist-agent marketplace template for development, security, infrastructure, data, documentation, SEO, and workflow orchestration."
125
+ },
126
+ "zh-CN": {
127
+ "title": "Agent Marketplace Buddy",
128
+ "description": "可组合专家 agent 市场模板,覆盖开发、安全、基础设施、数据、文档、SEO 和 workflow 编排场景。"
129
+ }
130
+ }
131
+ }