@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
package/README.md ADDED
@@ -0,0 +1,509 @@
1
+ # shadowob-cloud
2
+
3
+ Deploy AI agents to Kubernetes with a single command.
4
+
5
+ ```bash
6
+ shadowob-cloud init --template gstack-buddy
7
+ shadowob-cloud validate
8
+ shadowob-cloud up
9
+ ```
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ npm install -g @shadowob/cloud
15
+ # or
16
+ pnpm add -g @shadowob/cloud
17
+ ```
18
+
19
+ Verify:
20
+
21
+ ```bash
22
+ shadowob-cloud --version
23
+ shadowob-cloud doctor # checks kubectl, docker, pulumi
24
+ ```
25
+
26
+ ## Getting Started
27
+
28
+ ### 1. Create a config
29
+
30
+ ```bash
31
+ shadowob-cloud init # interactive — creates shadowob-cloud.json
32
+ shadowob-cloud init --template gstack-buddy # from a preset template
33
+ shadowob-cloud init --list # list all available templates
34
+ ```
35
+
36
+ ### 2. Set API keys
37
+
38
+ Templates use `${env:VAR_NAME}` to reference secrets. Set the required keys before deploying:
39
+
40
+ ```bash
41
+ export ANTHROPIC_API_KEY="sk-ant-..."
42
+ export OPENAI_API_KEY="sk-..."
43
+ ```
44
+
45
+ ### 3. Validate
46
+
47
+ ```bash
48
+ shadowob-cloud validate # schema + security + template ref checks
49
+ shadowob-cloud validate --strict # also fails on unresolvable env vars
50
+ ```
51
+
52
+ ### 4. Deploy
53
+
54
+ ```bash
55
+ shadowob-cloud up # deploy to your current kubectl context
56
+ shadowob-cloud up --local # spin up a local Kind cluster first
57
+ ```
58
+
59
+ ### 5. Monitor
60
+
61
+ ```bash
62
+ shadowob-cloud status # deployments & pods overview
63
+ shadowob-cloud logs <agent-id> # stream agent logs
64
+ shadowob-cloud dashboard # open the web dashboard
65
+ ```
66
+
67
+ ### 6. Manage
68
+
69
+ ```bash
70
+ shadowob-cloud scale <agent-id> --replicas 3
71
+ shadowob-cloud down # tear down all resources
72
+ ```
73
+
74
+ ## Templates
75
+
76
+ Pre-built agent team templates:
77
+
78
+ | Template | Agents | Description |
79
+ |---|---|---|
80
+ | `gstack-buddy` | 1 | Product strategy, office hours, CEO review, retros |
81
+ | `google-workspace-buddy` | 1 | Gmail, Calendar, Drive, Docs, and Sheets operations through `gws` |
82
+ | `superpowers-buddy` | 1 | Specs, TDD, planning, subagent execution, code review |
83
+ | `everything-claude-code-buddy` | 1 | Broad engineering harness with skills, commands, agents, hooks |
84
+ | `marketingskills-buddy` | 1 | CRO, copy, SEO, paid, email, and growth skills |
85
+ | `seomachine-buddy` | 1 | Keyword research, content briefs, on-page audits |
86
+ | `scientific-skills-buddy` | 1 | Scientific research, data analysis, and writing skills |
87
+
88
+ Write your own — see [Config Reference](#config-reference) below.
89
+
90
+ ## CLI Commands
91
+
92
+ | Command | Description |
93
+ |---|---|
94
+ | `shadowob-cloud init` | Generate an `shadowob-cloud.json` config |
95
+ | `shadowob-cloud validate` | Validate config (schema, security, refs) |
96
+ | `shadowob-cloud up` | Deploy agents to Kubernetes |
97
+ | `shadowob-cloud down` | Destroy all deployed resources |
98
+ | `shadowob-cloud status` | Show deployment & pod status |
99
+ | `shadowob-cloud logs <id>` | Stream agent logs |
100
+ | `shadowob-cloud scale <id>` | Scale agent replicas |
101
+ | `shadowob-cloud dashboard` | Open web dashboard |
102
+ | `shadowob-cloud serve` | Start API server + dashboard |
103
+ | `shadowob-cloud generate manifests` | Export K8s manifests (offline) |
104
+ | `shadowob-cloud generate openclaw-config` | Export OpenClaw configs (debug) |
105
+ | `shadowob-cloud doctor` | Check prerequisites |
106
+ | `shadowob-cloud build` | Build Docker images for Git agents |
107
+ | `shadowob-cloud images` | Manage runner images |
108
+ | `shadowob-cloud cluster init` | Bootstrap k3s on bare servers |
109
+ | `shadowob-cloud cluster import` | Register an existing kubeconfig locally |
110
+ | `shadowob-cloud cluster status` | Check SSH + k3s health on all nodes |
111
+ | `shadowob-cloud cluster list` | List all registered clusters |
112
+ | `shadowob-cloud cluster kubeconfig <name>` | Print kubeconfig path |
113
+ | `shadowob-cloud cluster destroy` | Uninstall k3s and remove local files |
114
+
115
+ ## Bare-Server Cluster Management
116
+
117
+ Deploy to cloud servers (Ubuntu/Debian) over SSH with a single command — no existing K8s required.
118
+
119
+ ### How it works
120
+
121
+ 1. `cluster init` — SSH into each server, install k3s, form the cluster, store kubeconfig at `~/.shadow-cloud/clusters/<name>.yaml`
122
+ 2. `up --cluster <name>` — Pulumi uses the stored kubeconfig to deploy agents to that cluster
123
+
124
+ ### 1. Write a cluster.json
125
+
126
+ ```jsonc
127
+ {
128
+ "name": "prod",
129
+ "install": {
130
+ "k3sVersion": "v1.35.4+k3s1",
131
+ "k3sMirror": "cn",
132
+ "systemDefaultRegistry": "registry.cn-hangzhou.aliyuncs.com",
133
+ "pauseImage": "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"
134
+ },
135
+ "nodes": [
136
+ {
137
+ "role": "master",
138
+ "host": "1.2.3.4",
139
+ "user": "root",
140
+ "sshKeyPath": "~/.ssh/id_rsa"
141
+ },
142
+ {
143
+ "role": "worker",
144
+ "host": "1.2.3.5",
145
+ "user": "root",
146
+ "password": "${env:SERVER_PASSWORD}"
147
+ }
148
+ ]
149
+ }
150
+ ```
151
+
152
+ Credentials never stored on disk — use `${env:VAR}` for passwords.
153
+
154
+ `install` is optional. Use it when a server cannot reliably reach GitHub releases, or when you need
155
+ repeatable cluster builds:
156
+
157
+ | Field | Meaning |
158
+ | --- | --- |
159
+ | `k3sVersion` | Pins the k3s release. With Rancher's China mirror, `v1.35.4+k3s1` is normalized to the mirror's `v1.35.4-k3s1` path. |
160
+ | `k3sMirror` | Shortcut mirror name. `cn` maps to `https://rancher-mirror.rancher.cn/k3s`. |
161
+ | `k3sArtifactUrl` | Full artifact URL prefix passed to `INSTALL_K3S_ARTIFACT_URL`. |
162
+ | `k3sChannel` / `k3sChannelUrl` | Channel lookup settings for the official installer when not pinning a version. |
163
+ | `systemDefaultRegistry` | Registry prefix passed as `--system-default-registry` for bundled k3s system images. If omitted with `k3sMirror: "cn"`, Shadow uses `registry.cn-hangzhou.aliyuncs.com`. |
164
+ | `pauseImage` | k3s sandbox pause image passed as `--pause-image`. If omitted with `k3sMirror: "cn"`, Shadow uses `registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6` so Pod sandbox creation does not depend on Docker Hub. |
165
+
166
+ Environment variables override the same installer settings:
167
+ `INSTALL_K3S_VERSION`, `INSTALL_K3S_ARTIFACT_URL`, `INSTALL_K3S_CHANNEL`, and
168
+ `INSTALL_K3S_CHANNEL_URL`. `INSTALL_K3S_MIRROR=cn` is also accepted for local testing.
169
+ Use `INSTALL_K3S_PAUSE_IMAGE` or `K3S_PAUSE_IMAGE` to override the pause image, and
170
+ `INSTALL_K3S_SYSTEM_DEFAULT_REGISTRY` or `K3S_SYSTEM_DEFAULT_REGISTRY` to override the system image
171
+ registry.
172
+
173
+ ### 2. Bootstrap k3s
174
+
175
+ ```bash
176
+ shadowob-cloud cluster init # default: reads cluster.json
177
+ shadowob-cloud cluster init --config my-cluster.json
178
+ shadowob-cloud cluster init --force # reinstall k3s even if already present
179
+ ```
180
+
181
+ **Re-initializing safely:** If k3s is already installed on a node, `init` skips that node by default. Pass `--force` to fully reinstall (uninstalls first, then reinstalls).
182
+
183
+ ### 3. Deploy agents
184
+
185
+ ```bash
186
+ shadowob-cloud up --cluster prod
187
+ shadowob-cloud up --cluster prod --stack prod # use a named Pulumi stack
188
+ shadowob-cloud up --cluster prod --skip-provision # skip Shadow resource provisioning
189
+ ```
190
+
191
+ ### 4. Manage the cluster
192
+
193
+ ```bash
194
+ shadowob-cloud cluster status # SSH health + k3s version on each node
195
+ shadowob-cloud cluster list # list all registered clusters
196
+ shadowob-cloud cluster kubeconfig prod # print kubeconfig path (use with kubectl)
197
+
198
+ export KUBECONFIG=$(shadowob-cloud cluster kubeconfig prod)
199
+ kubectl get pods -n my-team
200
+ ```
201
+
202
+ ### 5. Share cluster access across machines
203
+
204
+ Another developer on a different machine can register the same cluster without running `init` again:
205
+
206
+ ```bash
207
+ # On any machine that has the kubeconfig file:
208
+ shadowob-cloud cluster import --name prod --file ./prod.yaml
209
+ shadowob-cloud up --cluster prod
210
+ ```
211
+
212
+ ### 6. Tear down
213
+
214
+ ```bash
215
+ shadowob-cloud cluster destroy # confirms prompt
216
+ shadowob-cloud cluster destroy --yes # skip confirmation
217
+ ```
218
+
219
+ Runs `k3s-uninstall.sh` (master) and `k3s-agent-uninstall.sh` (workers) over SSH, then removes `~/.shadow-cloud/clusters/prod.*`.
220
+
221
+ ## Use `cluster.json` With Web SaaS
222
+
223
+ The Web SaaS UI in `apps/web` deploys through `apps/server`. By default, those deployments use the
224
+ server process's ambient Kubernetes target (`KUBECONFIG`). You can now point the server at the same
225
+ `cluster.json` used by the CLI:
226
+
227
+ 1. Bootstrap or register the cluster:
228
+
229
+ ```bash
230
+ shadowob-cloud cluster init --config cluster.json
231
+ # or, if another machine already bootstrapped it:
232
+ shadowob-cloud cluster import --name prod --file ./prod.yaml
233
+ ```
234
+
235
+ 2. Configure the server environment:
236
+
237
+ ```env
238
+ CLOUD_SAAS_CLUSTER_CONFIG_HOST_PATH=/absolute/host/path/to/cluster.json
239
+ CLOUD_SAAS_CLUSTER_CONFIG=/app/cluster.json
240
+ CLOUD_SAAS_CLUSTER_KUBECONFIG_HOST_PATH=/absolute/host/path/to/prod.yaml
241
+ CLOUD_SAAS_CLUSTER_KUBECONFIG=/home/node/.shadow-cloud/clusters/prod.yaml
242
+ CLOUD_SAAS_WORKLOAD_BACKEND=deployment
243
+ SHADOW_AGENT_SERVER_URL=https://shadow.example.com
244
+ PULUMI_CONFIG_PASSPHRASE=change-me
245
+ ```
246
+
247
+ On startup, `apps/server` reads `CLOUD_SAAS_CLUSTER_CONFIG`, resolves the cluster name to the stored
248
+ kubeconfig, sets `KUBECONFIG` for the embedded Cloud deployment processor, and fails fast if the
249
+ kubeconfig is missing.
250
+
251
+ This config controls where the server deploys workloads. If a template's agent needs Kubernetes
252
+ access at runtime, still provide `KUBECONFIG_B64` through the Cloud SaaS env var flow.
253
+
254
+ `CLOUD_SAAS_WORKLOAD_BACKEND=deployment` is the safe default for vanilla k3s clusters created from
255
+ `cluster.json`. Use `agent-sandbox` only on clusters where the `SandboxTemplate`/`SandboxClaim` CRDs
256
+ and controller are already installed.
257
+
258
+ For Docker Compose, mount both files into the server container:
259
+
260
+ ```yaml
261
+ services:
262
+ server:
263
+ environment:
264
+ CLOUD_SAAS_CLUSTER_CONFIG: /app/cluster.json
265
+ CLOUD_SAAS_CLUSTER_KUBECONFIG: /home/node/.shadow-cloud/clusters/prod.yaml
266
+ CLOUD_SAAS_WORKLOAD_BACKEND: deployment
267
+ volumes:
268
+ - ./cluster.json:/app/cluster.json:ro
269
+ - ~/.shadow-cloud/clusters/prod.yaml:/home/node/.shadow-cloud/clusters/prod.yaml:ro
270
+ ```
271
+
272
+ Then start the product stack and deploy from Web at `/app/cloud`.
273
+
274
+ ## Dashboard
275
+
276
+ ```bash
277
+ shadowob-cloud dashboard # builds (if needed) and opens the web UI
278
+ ```
279
+
280
+ **Pages:** Templates (browse & one-click deploy), Overview (deployment status), Settings (API keys & cluster config). Deploy progress is streamed in real-time via SSE.
281
+
282
+ ## Config Reference
283
+
284
+ ### File structure
285
+
286
+ ```jsonc
287
+ {
288
+ "version": "1",
289
+ "name": "My Agent Team",
290
+ "description": "What this team does",
291
+
292
+ // Shadow server/channel/buddy config
293
+ "plugins": {
294
+ "shadowob": {
295
+ "servers": [{ "id": "srv1", "name": "Server" }],
296
+ "buddies": [{ "id": "bot1", "name": "Bot" }],
297
+ "bindings": [{
298
+ "targetId": "bot1",
299
+ "targetType": "buddy",
300
+ "servers": ["srv1"],
301
+ "channels": ["ch1"],
302
+ "agentId": "my-agent"
303
+ }]
304
+ }
305
+ },
306
+
307
+ // AI provider registry
308
+ "registry": {
309
+ "providers": [{
310
+ "id": "anthropic",
311
+ "api": "anthropic",
312
+ "baseUrl": "https://api.anthropic.com",
313
+ "apiKey": "${env:ANTHROPIC_API_KEY}",
314
+ "models": [{ "id": "claude-sonnet-4-5" }]
315
+ }],
316
+ "configurations": [{
317
+ "id": "base",
318
+ "openclaw": { "tools": [{ "name": "search", "enabled": true }] }
319
+ }]
320
+ },
321
+
322
+ // Agent deployments
323
+ "deployments": {
324
+ "namespace": "my-team",
325
+ "agents": [{
326
+ "id": "my-agent",
327
+ "runtime": "openclaw",
328
+ "identity": {
329
+ "name": "Agent Name",
330
+ "systemPrompt": "You are a helpful agent."
331
+ },
332
+ "configuration": { "extends": "base" },
333
+ "resources": {
334
+ "requests": { "cpu": "100m", "memory": "256Mi" },
335
+ "limits": { "cpu": "500m", "memory": "512Mi" }
336
+ }
337
+ }]
338
+ }
339
+ }
340
+ ```
341
+
342
+ ### Template variables
343
+
344
+ | Syntax | Description |
345
+ |---|---|
346
+ | `${env:VAR_NAME}` | Environment variable |
347
+ | `${secret:k8s/secret-name/key}` | Kubernetes Secret reference |
348
+
349
+ ### API type normalization
350
+
351
+ | Config value | Normalized to |
352
+ |---|---|
353
+ | `anthropic` | `anthropic-messages` |
354
+ | `openai` | `openai-completions` |
355
+ | `google` | `google-generative-ai` |
356
+ | `bedrock` | `bedrock-converse-stream` |
357
+
358
+ ### Configuration inheritance
359
+
360
+ ```jsonc
361
+ {
362
+ "configuration": {
363
+ "extends": "base", // inherits from registry.configurations[id="base"]
364
+ "openclaw": { // deep-merged (arrays replaced, not appended)
365
+ "tools": [{ "name": "extra-tool", "enabled": true }]
366
+ }
367
+ }
368
+ }
369
+ ```
370
+
371
+ ## Managed Agents Features
372
+
373
+ ### Vault — per-agent secret isolation
374
+
375
+ Each agent can reference a named vault, generating isolated K8s Secrets:
376
+
377
+ ```jsonc
378
+ {
379
+ "vaults": {
380
+ "default": {
381
+ "providers": { "anthropic": { "apiKey": "${env:ANTHROPIC_API_KEY}" } },
382
+ "secrets": { "github-token": "${env:GITHUB_TOKEN}" }
383
+ },
384
+ "restricted": {
385
+ "providers": { "anthropic": { "apiKey": "${env:RESTRICTED_KEY}" } }
386
+ }
387
+ },
388
+ "deployments": {
389
+ "agents": [
390
+ { "id": "main-agent", "vault": "default", ... },
391
+ { "id": "sandboxed", "vault": "restricted", ... }
392
+ ]
393
+ }
394
+ }
395
+ ```
396
+
397
+ ### Per-tool permission policies
398
+
399
+ Control which tools auto-execute vs. require human approval:
400
+
401
+ ```jsonc
402
+ {
403
+ "permissions": {
404
+ "default": "approve-reads",
405
+ "tools": {
406
+ "bash": "always-ask",
407
+ "web-fetch": "always-allow",
408
+ "mcp-*": "always-ask"
409
+ },
410
+ "nonInteractive": "deny"
411
+ }
412
+ }
413
+ ```
414
+
415
+ Levels: `always-allow` | `approve-reads` | `always-ask` | `deny-all`
416
+
417
+ ### Per-agent networking
418
+
419
+ Each agent gets its own K8s NetworkPolicy:
420
+
421
+ ```jsonc
422
+ {
423
+ "networking": {
424
+ "type": "limited", // "unrestricted" | "limited" | "deny-all"
425
+ "allowedHosts": ["api.anthropic.com"],
426
+ "allowMcpServers": true,
427
+ "allowPackageManagers": false
428
+ }
429
+ }
430
+ ```
431
+
432
+ ### Agent versioning
433
+
434
+ Version annotations on K8s Deployments for rollback tracking:
435
+
436
+ ```jsonc
437
+ {
438
+ "id": "my-agent",
439
+ "version": "1.2.0",
440
+ "changelog": "Added web search tool"
441
+ }
442
+ ```
443
+
444
+ Generates: `shadowob-cloud/agent-version`, `shadowob-cloud/deployed-at`, `shadowob-cloud/changelog` annotations.
445
+
446
+ ## Security
447
+
448
+ All pods are hardened by default:
449
+
450
+ - **Non-root** — `runAsUser: 1000`, `runAsNonRoot: true`
451
+ - **Read-only rootfs** — writable only in `/tmp`, `/home/node/.openclaw`, `/var/log/openclaw`
452
+ - **Dropped capabilities** — `drop: ["ALL"]`, no privilege escalation
453
+ - **Seccomp** — `RuntimeDefault` profile
454
+ - **NetworkPolicy** — per-agent deny-all ingress with explicit allow rules
455
+ - **Inline key detection** — `shadowob-cloud validate` rejects configs with hardcoded API keys
456
+
457
+ ## Architecture
458
+
459
+ ```
460
+ ┌──────────────────────────────────────┐
461
+ │ Interface Layer │
462
+ │ ┌──────────┐ ┌──────────────┐ │
463
+ │ │ CLI │ │ HTTP/REST │ │
464
+ │ │ commands │ │ + Dashboard │ │
465
+ │ └────┬─────┘ └──────┬───────┘ │
466
+ └────────┼─────────────────┼──────────┘
467
+ │ │
468
+ ┌────────▼─────────────────▼──────────┐
469
+ │ Service Layer (IoC) │
470
+ │ ┌────────┐ ┌──────────┐ ┌───────┐ │
471
+ │ │ Config │ │ Manifest │ │Deploy │ │
472
+ │ │Service │ │ Service │ │Service│ │
473
+ │ ├────────┤ ├──────────┤ ├───────┤ │
474
+ │ │Provis- │ │ Template │ │ K8s │ │
475
+ │ │ioning │ │ Service │ │Service│ │
476
+ │ └────────┘ └──────────┘ └───────┘ │
477
+ └─────────────────────────────────────┘
478
+
479
+ ┌───────────────▼─────────────────────┐
480
+ │ Core Modules │
481
+ │ config/ infra/ runtimes/ utils/ │
482
+ └─────────────────────────────────────┘
483
+ ```
484
+
485
+ The service layer can be used as a programmatic SDK:
486
+
487
+ ```typescript
488
+ import { createContainer } from '@shadowob/cloud'
489
+
490
+ const container = createContainer()
491
+ const config = container.config.parseFile('shadowob-cloud.json')
492
+ const resolved = container.config.resolve(config)
493
+ const manifests = container.manifest.build({ config: resolved, namespace: 'shadowob-cloud' })
494
+ await container.deploy.up({ filePath: 'shadowob-cloud.json' })
495
+ ```
496
+
497
+ ## Development
498
+
499
+ ```bash
500
+ pnpm install
501
+ pnpm --filter @shadowob/cloud build # build CLI
502
+ pnpm --filter @shadowob/cloud console:build # build dashboard
503
+ pnpm --filter @shadowob/cloud test # unit tests
504
+ pnpm --filter @shadowob/cloud test:e2e:cli # CLI E2E tests
505
+ ```
506
+
507
+ ## License
508
+
509
+ See [LICENSE](../../LICENSE).
@@ -0,0 +1,117 @@
1
+ import {
2
+ attachConnectorRuntimeAssets,
3
+ connectorField,
4
+ connectorManifest,
5
+ installedCheck,
6
+ npmGlobalDependency
7
+ } from "./chunk-EEFMJYKB.js";
8
+ import "./chunk-POSVEKIY.js";
9
+ import {
10
+ defineConnectorPlugin
11
+ } from "./chunk-JY2HTT7Q.js";
12
+ import "./chunk-R5U7XKVJ.js";
13
+
14
+ // src/plugins/agent-browser/index.ts
15
+ var manifest = connectorManifest({
16
+ id: "agent-browser",
17
+ name: "Agent Browser",
18
+ description: "Agent Browser gives Buddies a browser automation CLI for QA, login flows, screenshots, scraping, visual checks, Electron apps, Slack automation, and remote browser sessions.",
19
+ category: "automation",
20
+ icon: "mouse-pointer-click",
21
+ website: "https://skills.sh/vercel-labs/agent-browser/agent-browser",
22
+ docs: "https://github.com/vercel-labs/agent-browser",
23
+ fields: [
24
+ connectorField("AGENT_BROWSER_PROVIDER", "Browser provider", {
25
+ description: "Optional remote browser provider.",
26
+ required: false,
27
+ sensitive: false,
28
+ placeholder: "browserless, browserbase, browseruse, kernel, agentcore"
29
+ }),
30
+ connectorField("BROWSERLESS_API_KEY", "Browserless API key", {
31
+ description: "Optional Browserless API key.",
32
+ required: false,
33
+ placeholder: "Browserless API key",
34
+ helpUrl: "https://browserless.io"
35
+ }),
36
+ connectorField("BROWSERBASE_API_KEY", "Browserbase API key", {
37
+ description: "Optional Browserbase API key.",
38
+ required: false,
39
+ placeholder: "Browserbase API key",
40
+ helpUrl: "https://browserbase.com"
41
+ }),
42
+ connectorField("BROWSER_USE_API_KEY", "Browser Use API key", {
43
+ description: "Optional Browser Use Cloud API key.",
44
+ required: false,
45
+ placeholder: "Browser Use API key",
46
+ helpUrl: "https://cloud.browser-use.com/settings?tab=api-keys"
47
+ }),
48
+ connectorField("KERNEL_API_KEY", "Kernel API key", {
49
+ description: "Optional Kernel API key.",
50
+ required: false,
51
+ placeholder: "Kernel API key",
52
+ helpUrl: "https://dashboard.onkernel.com"
53
+ }),
54
+ connectorField("AGENT_BROWSER_STORAGE_STATE_JSON", "Browser storage state", {
55
+ description: "Optional Playwright storageState JSON for reusing browser cookies and localStorage.",
56
+ required: false,
57
+ placeholder: '{"cookies":[],"origins":[]}'
58
+ })
59
+ ],
60
+ authType: "api-key",
61
+ capabilities: ["tool", "data-source", "action", "cli"],
62
+ tags: ["browser", "automation", "qa", "scraping", "screenshots", "electron", "slack", "skills"],
63
+ popularity: 90
64
+ });
65
+ var runtimeDependencies = [
66
+ npmGlobalDependency("agent-browser", ["agent-browser"], "Agent Browser automation CLI")
67
+ ];
68
+ var skillSources = [
69
+ {
70
+ id: "agent-browser-skill",
71
+ kind: "git",
72
+ url: "https://github.com/vercel-labs/agent-browser.git",
73
+ ref: "main",
74
+ from: "skills",
75
+ targetPath: "/workspace/.agents/plugin-skills/agent-browser",
76
+ include: ["agent-browser"],
77
+ description: "Agent Browser skill stub and runtime workflow loader"
78
+ }
79
+ ];
80
+ var plugin = defineConnectorPlugin(manifest, {
81
+ cli: [
82
+ {
83
+ name: "agent-browser",
84
+ command: "agent-browser",
85
+ description: "Browser automation CLI for web, Electron, Slack, QA, and scraping workflows"
86
+ }
87
+ ],
88
+ runtimeDependencies,
89
+ skillSources,
90
+ verificationChecks: [
91
+ installedCheck("agent-browser-installed", "Agent Browser CLI installed", [
92
+ "agent-browser",
93
+ "--version"
94
+ ]),
95
+ {
96
+ id: "agent-browser-skill-mounted",
97
+ label: "Agent Browser skill mounted",
98
+ kind: "command",
99
+ command: [
100
+ "test",
101
+ "-f",
102
+ "/workspace/.agents/plugin-skills/agent-browser/agent-browser/SKILL.md"
103
+ ],
104
+ timeoutMs: 5e3,
105
+ risk: "safe"
106
+ }
107
+ ],
108
+ prompt: "Use Agent Browser for browser automation, QA, screenshots, scraping, login flows, console/network checks, visual diffs, Electron apps, Slack automation, and remote browser sessions. Confirm actions before submitting forms, making purchases, posting messages, or changing account state."
109
+ });
110
+ var agent_browser_default = attachConnectorRuntimeAssets(plugin, {
111
+ runtimeDependencies,
112
+ skillSources,
113
+ skillsMountPath: "/workspace/.agents/plugin-skills/agent-browser"
114
+ });
115
+ export {
116
+ agent_browser_default as default
117
+ };