@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,30 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/interfaces/cli/dashboard.command.ts
4
+ import { exec } from "child_process";
5
+ import { Command } from "commander";
6
+ function createConsoleCommand(container) {
7
+ return new Command("console").description("Start the Shadow Cloud Console and open it in your browser").option("-p, --port <number>", "Port to listen on", "3004").option("-n, --namespace <ns...>", "Kubernetes namespace(s) to watch", ["shadowob-cloud"]).option("--no-open", "Do not open browser automatically").action(async (options) => {
8
+ const port = options.port;
9
+ const url = `http://localhost:${port}`;
10
+ if (options.open) {
11
+ setTimeout(() => {
12
+ container.logger.info(`Opening ${url} in browser...`);
13
+ const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
14
+ exec(`${cmd} ${url}`, (err) => {
15
+ if (err) container.logger.dim("Could not open browser automatically");
16
+ });
17
+ }, 1500);
18
+ }
19
+ const { createServeCommand } = await import("./serve.command-5FMIPQRY.js");
20
+ const serve = createServeCommand(container);
21
+ await serve.parseAsync(
22
+ ["--port", port, "--namespace", ...options.namespace, "--host", "127.0.0.1"],
23
+ { from: "user" }
24
+ );
25
+ });
26
+ }
27
+
28
+ export {
29
+ createConsoleCommand
30
+ };
@@ -0,0 +1,120 @@
1
+ import {
2
+ collectRuntimeEnvRequirements
3
+ } from "./chunk-SUZ2ATT6.js";
4
+
5
+ // src/interfaces/cli/init.command.ts
6
+ import { cp, stat, writeFile } from "fs/promises";
7
+ import { resolve } from "path";
8
+ import { Command } from "commander";
9
+ async function fileExists(path) {
10
+ try {
11
+ await stat(path);
12
+ return true;
13
+ } catch {
14
+ return false;
15
+ }
16
+ }
17
+ function createInitCommand(container) {
18
+ return new Command("init").description("Generate an shadowob-cloud.json config template").option("-o, --output <path>", "Output file path", "shadowob-cloud.json").option("-t, --template <name>", "Template name (use --list to see all)", "gstack-buddy").option("-l, --list", "List all available templates and exit").option("--force", "Overwrite existing file").option("--quick", "Quick init: read .env, pick default template, no prompts").action(
19
+ async (options) => {
20
+ const templates = await container.template.discover();
21
+ if (options.list) {
22
+ console.log("\nAvailable templates:\n");
23
+ const maxName = Math.max(...templates.map((t) => t.name.length), 6);
24
+ const maxTitle = Math.min(Math.max(...templates.map((t) => t.title.length), 5), 32);
25
+ const header = ` ${"TEMPLATE".padEnd(maxName)} ${"TITLE".padEnd(maxTitle)} AGENTS DESCRIPTION`;
26
+ console.log(header);
27
+ console.log(` ${"-".repeat(maxName)} ${"-".repeat(maxTitle)} ------ -----------`);
28
+ for (const t of templates) {
29
+ const nameStr = t.name.padEnd(maxName);
30
+ const title = t.title.length > maxTitle ? `${t.title.slice(0, maxTitle - 1)}\u2026` : t.title;
31
+ const titleStr = title.padEnd(maxTitle);
32
+ const agentStr = String(t.agentCount).padStart(6);
33
+ const desc = t.description.length > 60 ? `${t.description.slice(0, 57)}...` : t.description;
34
+ console.log(` ${nameStr} ${titleStr} ${agentStr} ${desc}`);
35
+ }
36
+ console.log();
37
+ console.log(" Use: shadowob-cloud init --template <name> [-o output.json]");
38
+ console.log();
39
+ return;
40
+ }
41
+ if (options.quick) {
42
+ const outputPath2 = resolve(options.output);
43
+ if (await fileExists(outputPath2) && !options.force) {
44
+ container.logger.error(`File already exists: ${outputPath2}`);
45
+ container.logger.dim("Use --force to overwrite");
46
+ process.exit(1);
47
+ }
48
+ const templateName2 = templates.find((template) => template.name === "gstack-buddy")?.name ?? templates[0]?.name ?? "gstack-buddy";
49
+ const content = await container.template.getTemplate(templateName2) ?? {
50
+ version: "1.0.0",
51
+ environment: "production",
52
+ plugins: { shadowob: { servers: [], buddies: [], bindings: [] } },
53
+ registry: { providers: [], configurations: [] },
54
+ deployments: { namespace: "shadowob-cloud", agents: [] }
55
+ };
56
+ const envKeys = await collectRuntimeEnvRequirements(content);
57
+ const detected = envKeys.filter((key) => process.env[key]);
58
+ if (detected.length > 0) {
59
+ container.logger.info(
60
+ `Detected ${detected.length} provider env var(s) \u2014 config will reference them via \${env:...}`
61
+ );
62
+ for (const key of detected) container.logger.dim(` ${key}`);
63
+ } else {
64
+ container.logger.warn("No API keys found in environment. Add them to .env and re-run.");
65
+ }
66
+ await writeFile(outputPath2, `${JSON.stringify(content, null, 2)}
67
+ `, "utf-8");
68
+ container.logger.success(`Quick init from "${templateName2}": ${outputPath2}`);
69
+ container.logger.dim(
70
+ `Edit the file and run: shadowob-cloud validate -f ${options.output}`
71
+ );
72
+ return;
73
+ }
74
+ const outputPath = resolve(options.output);
75
+ if (await fileExists(outputPath) && !options.force) {
76
+ container.logger.error(`File already exists: ${outputPath}`);
77
+ container.logger.dim("Use --force to overwrite");
78
+ process.exit(1);
79
+ }
80
+ const templateName = options.template;
81
+ const meta = templates.find((t) => t.name === templateName);
82
+ if (!meta && templates.length > 0) {
83
+ container.logger.error(`Unknown template: ${templateName}`);
84
+ container.logger.dim(`Available: ${templates.map((t) => t.name).join(", ")}`);
85
+ container.logger.dim("Run: shadowob-cloud init --list");
86
+ process.exit(1);
87
+ }
88
+ const templateFilePath = meta ? await container.template.getTemplatePath(meta.name) : null;
89
+ if (!templateFilePath || !await fileExists(templateFilePath)) {
90
+ await writeFile(
91
+ outputPath,
92
+ `${JSON.stringify(
93
+ {
94
+ version: "1.0.0",
95
+ environment: "production",
96
+ plugins: { shadowob: { servers: [], buddies: [], bindings: [] } },
97
+ registry: { providers: [], configurations: [] },
98
+ deployments: { namespace: "shadowob-cloud", agents: [] }
99
+ },
100
+ null,
101
+ 2
102
+ )}
103
+ `,
104
+ "utf-8"
105
+ );
106
+ container.logger.success(`Created: ${outputPath}`);
107
+ return;
108
+ }
109
+ await cp(templateFilePath, outputPath);
110
+ container.logger.success(`Created config from "${templateName}" template: ${outputPath}`);
111
+ container.logger.dim(
112
+ `Edit the file, then run: shadowob-cloud validate -f ${options.output}`
113
+ );
114
+ }
115
+ );
116
+ }
117
+
118
+ export {
119
+ createInitCommand
120
+ };
@@ -0,0 +1,16 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
3
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
4
+ }) : x)(function(x) {
5
+ if (typeof require !== "undefined") return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+
13
+ export {
14
+ __require,
15
+ __export
16
+ };
@@ -0,0 +1,212 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/plugins/runtime-assets.ts
4
+ var RUNTIME_ASSET_IMAGE = "node:22-alpine";
5
+ var DEFAULT_CONTAINER_PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
6
+ var PLUGIN_RUNTIME_DEPS_ROOT = "/opt/shadow-plugin-deps";
7
+ var PLUGIN_SKILLS_STAGING_ROOT = "/plugin-skills";
8
+ var PLUGIN_SUBAGENTS_STAGING_ROOT = "/plugin-subagents";
9
+ function shQuote(value) {
10
+ return `'${value.replace(/'/g, "'\\''")}'`;
11
+ }
12
+ function sanitizeId(value) {
13
+ return value.replace(/[^A-Za-z0-9._-]/g, "_").slice(0, 63);
14
+ }
15
+ function copyGitSourceSnippet(source, destRoot) {
16
+ const safeId = sanitizeId(source.id);
17
+ const clonePath = `/tmp/runtime-asset-src-${safeId}`;
18
+ const ref = source.ref ?? "main";
19
+ const from = source.from ?? ".";
20
+ const sourcePath = from === "." || from === "" ? clonePath : `${clonePath}/${from}`;
21
+ const commands = [
22
+ `rm -rf ${shQuote(clonePath)}`,
23
+ `git clone --depth 1 --branch ${shQuote(ref)} ${shQuote(source.url ?? "")} ${shQuote(clonePath)}`,
24
+ `mkdir -p ${shQuote(destRoot)}`
25
+ ];
26
+ if (source.include?.length) {
27
+ for (const item of source.include) {
28
+ commands.push(
29
+ `if [ -e ${shQuote(`${sourcePath}/${item}`)} ]; then cp -R ${shQuote(`${sourcePath}/${item}`)} ${shQuote(destRoot)}/; fi`
30
+ );
31
+ }
32
+ } else if (source.includePattern) {
33
+ commands.push(
34
+ `if [ -d ${shQuote(sourcePath)} ]; then find ${shQuote(sourcePath)} -maxdepth 1 -type d -name ${shQuote(source.includePattern)} -exec cp -R {} ${shQuote(destRoot)}/ \\;; fi`
35
+ );
36
+ } else {
37
+ commands.push(
38
+ `if [ -d ${shQuote(sourcePath)} ]; then cp -R ${shQuote(sourcePath)}/. ${shQuote(destRoot)}/; elif [ -f ${shQuote(sourcePath)} ]; then cp ${shQuote(sourcePath)} ${shQuote(destRoot)}/; fi`
39
+ );
40
+ }
41
+ return commands.join("\n");
42
+ }
43
+ function runtimeDependencySnippet(dep, runtimeRoot) {
44
+ switch (dep.kind) {
45
+ case "npm-global": {
46
+ const packages = dep.packages?.filter(Boolean) ?? [];
47
+ if (packages.length === 0) return "";
48
+ return `npm install -g --prefix ${shQuote(dep.targetPath ?? runtimeRoot)} ${packages.map(shQuote).join(" ")}`;
49
+ }
50
+ case "system-package": {
51
+ const packages = dep.packages?.filter(Boolean) ?? [];
52
+ if (packages.length === 0) return "";
53
+ return `install_system_packages ${packages.map(shQuote).join(" ")}`;
54
+ }
55
+ case "shell":
56
+ return dep.command?.length ? dep.command.join(" ") : "";
57
+ case "binary":
58
+ return dep.command?.length ? dep.command.join(" ") : "";
59
+ default:
60
+ return "";
61
+ }
62
+ }
63
+ function systemPackageInstallerSnippet() {
64
+ return [
65
+ "install_system_packages() {",
66
+ ' if [ "$#" -eq 0 ]; then return 0; fi',
67
+ ' pm=""',
68
+ " if command -v apk >/dev/null 2>&1; then",
69
+ ' pm="apk"',
70
+ " elif command -v apt-get >/dev/null 2>&1; then",
71
+ ' pm="apt"',
72
+ " else",
73
+ ' echo "[runtime-assets] no supported package manager found for: $*" >&2',
74
+ " return 127",
75
+ " fi",
76
+ ' normalized=""',
77
+ ' for pkg in "$@"; do',
78
+ ' case "$pm:$pkg" in',
79
+ ' apt:py3-pip) pkg="python3-pip" ;;',
80
+ ' apt:py3-virtualenv) pkg="python3-venv" ;;',
81
+ ' apt:github-cli) pkg="gh" ;;',
82
+ " esac",
83
+ ' normalized="$normalized ${pkg}"',
84
+ " done",
85
+ ' if [ "$pm" = "apk" ]; then',
86
+ " apk add --no-cache $normalized",
87
+ " else",
88
+ " export DEBIAN_FRONTEND=noninteractive",
89
+ " apt-get update >/dev/null",
90
+ " apt-get install -y --no-install-recommends $normalized",
91
+ " rm -rf /var/lib/apt/lists/*",
92
+ " fi",
93
+ "}"
94
+ ].join("\n");
95
+ }
96
+ function buildRuntimeAssetInstallScript(options) {
97
+ const runtimeRoot = options.runtimeRoot ?? "/runtime-deps";
98
+ const skillsRoot = options.skillsRoot ?? "/plugin-skills";
99
+ const subagentsRoot = options.subagentsRoot ?? "/plugin-subagents";
100
+ const hasGitSources = Boolean(options.skillSources?.length || options.subagentSources?.length);
101
+ const needsSystemInstaller = Boolean(
102
+ hasGitSources || options.runtimeDependencies?.some((dep) => dep.kind === "system-package")
103
+ );
104
+ const lines = [
105
+ "set -eu",
106
+ ...needsSystemInstaller ? [systemPackageInstallerSnippet()] : [],
107
+ `mkdir -p ${shQuote(runtimeRoot)}`
108
+ ];
109
+ if (options.skillSources?.length) lines.push(`mkdir -p ${shQuote(skillsRoot)}`);
110
+ if (options.subagentSources?.length) lines.push(`mkdir -p ${shQuote(subagentsRoot)}`);
111
+ if (hasGitSources) {
112
+ lines.push("command -v git >/dev/null 2>&1 || install_system_packages git >/dev/null");
113
+ }
114
+ for (const dep of options.runtimeDependencies ?? []) {
115
+ const snippet = runtimeDependencySnippet(dep, runtimeRoot);
116
+ if (snippet) lines.push(snippet);
117
+ }
118
+ for (const source of options.skillSources ?? []) {
119
+ if (source.kind === "git" && source.url) lines.push(copyGitSourceSnippet(source, skillsRoot));
120
+ }
121
+ for (const source of options.subagentSources ?? []) {
122
+ if (source.kind === "git" && source.url) lines.push(copyGitSourceSnippet(source, subagentsRoot));
123
+ }
124
+ lines.push(...options.sanityCommands ?? []);
125
+ lines.push('echo "[runtime-assets] ready"');
126
+ return lines.filter(Boolean).join("\n");
127
+ }
128
+ function buildRuntimeAssetK8sProvider(options) {
129
+ return {
130
+ buildK8s(agent, ctx) {
131
+ if (!options.isEnabled(agent, ctx.config)) return void 0;
132
+ const runtimeVolumeName = options.runtimeVolumeName ?? `${options.pluginId}-runtime`;
133
+ const skillsVolumeName = options.skillsVolumeName ?? `${options.pluginId}-skills`;
134
+ const subagentsVolumeName = options.subagentsVolumeName ?? `${options.pluginId}-subagents`;
135
+ const runtimeMountPath = options.runtimeMountPath ?? `${PLUGIN_RUNTIME_DEPS_ROOT}/${options.pluginId}`;
136
+ const initRuntimeMountPath = options.initRuntimeMountPath ?? "/runtime-deps";
137
+ const skillsMountPath = options.skillsMountPath;
138
+ const subagentsMountPath = options.subagentsMountPath;
139
+ const hasSkillSources = Boolean(options.skillSources?.length && skillsMountPath);
140
+ const hasSubagentSources = Boolean(options.subagentSources?.length && subagentsMountPath);
141
+ const volumeMounts = [{ name: runtimeVolumeName, mountPath: initRuntimeMountPath }];
142
+ const volumes = [{ name: runtimeVolumeName, spec: { emptyDir: {} } }];
143
+ const mainVolumeMounts = [
144
+ { name: runtimeVolumeName, mountPath: runtimeMountPath, readOnly: true }
145
+ ];
146
+ if (hasSkillSources) {
147
+ volumeMounts.push({ name: skillsVolumeName, mountPath: PLUGIN_SKILLS_STAGING_ROOT });
148
+ volumes.push({ name: skillsVolumeName, spec: { emptyDir: {} } });
149
+ mainVolumeMounts.push({
150
+ name: skillsVolumeName,
151
+ mountPath: skillsMountPath,
152
+ readOnly: true
153
+ });
154
+ }
155
+ if (hasSubagentSources) {
156
+ volumeMounts.push({ name: subagentsVolumeName, mountPath: PLUGIN_SUBAGENTS_STAGING_ROOT });
157
+ volumes.push({ name: subagentsVolumeName, spec: { emptyDir: {} } });
158
+ mainVolumeMounts.push({
159
+ name: subagentsVolumeName,
160
+ mountPath: subagentsMountPath,
161
+ readOnly: true
162
+ });
163
+ }
164
+ return {
165
+ initContainers: [
166
+ {
167
+ name: `${options.pluginId}-assets`,
168
+ image: RUNTIME_ASSET_IMAGE,
169
+ imagePullPolicy: "IfNotPresent",
170
+ command: [
171
+ "sh",
172
+ "-lc",
173
+ buildRuntimeAssetInstallScript({
174
+ runtimeDependencies: options.runtimeDependencies,
175
+ skillSources: options.skillSources,
176
+ subagentSources: options.subagentSources,
177
+ runtimeRoot: initRuntimeMountPath,
178
+ sanityCommands: options.sanityCommands
179
+ })
180
+ ],
181
+ volumeMounts,
182
+ resources: {
183
+ requests: { cpu: "100m", memory: "128Mi" },
184
+ limits: { cpu: "1000m", memory: "512Mi" }
185
+ },
186
+ securityContext: {
187
+ allowPrivilegeEscalation: false,
188
+ runAsNonRoot: false,
189
+ runAsUser: 0,
190
+ runAsGroup: 0,
191
+ capabilities: { drop: ["ALL"] }
192
+ }
193
+ }
194
+ ],
195
+ volumes,
196
+ volumeMounts: mainVolumeMounts,
197
+ envVars: [
198
+ { name: "PATH", value: `${runtimeMountPath}/bin:${DEFAULT_CONTAINER_PATH}` },
199
+ ...options.envVars ?? []
200
+ ],
201
+ labels: {
202
+ [`plugin.${options.pluginId}/enabled`]: "true",
203
+ ...options.labels ?? {}
204
+ }
205
+ };
206
+ }
207
+ };
208
+ }
209
+
210
+ export {
211
+ buildRuntimeAssetK8sProvider
212
+ };
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/utils/state.ts
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
5
+ import { dirname, join, resolve } from "path";
6
+ function getStateDir(configFilePath, stateSubdir = ".shadowob") {
7
+ return join(dirname(resolve(configFilePath)), stateSubdir);
8
+ }
9
+ function getStatePath(configFilePath, stateSubdir = ".shadowob") {
10
+ return join(getStateDir(configFilePath, stateSubdir), "provision-state.json");
11
+ }
12
+ function loadProvisionState(configFilePath, stateSubdir = ".shadowob") {
13
+ const statePath = getStatePath(configFilePath, stateSubdir);
14
+ if (!existsSync(statePath)) return null;
15
+ try {
16
+ const raw = readFileSync(statePath, "utf-8");
17
+ return JSON.parse(raw);
18
+ } catch {
19
+ return null;
20
+ }
21
+ }
22
+ function saveProvisionState(configFilePath, state, stateSubdir = ".shadowob") {
23
+ const stateDir = getStateDir(configFilePath, stateSubdir);
24
+ const statePath = getStatePath(configFilePath, stateSubdir);
25
+ mkdirSync(stateDir, { recursive: true });
26
+ writeFileSync(statePath, `${JSON.stringify(state, null, 2)}
27
+ `, "utf-8");
28
+ return statePath;
29
+ }
30
+ function mergeProvisionState(existing, newState) {
31
+ if (!existing) return newState;
32
+ const mergedPlugins = {};
33
+ for (const [pluginId, pluginState] of Object.entries(existing.plugins ?? {})) {
34
+ mergedPlugins[pluginId] = { ...pluginState };
35
+ }
36
+ for (const [pluginId, pluginState] of Object.entries(newState.plugins ?? {})) {
37
+ const prev = mergedPlugins[pluginId] ?? {};
38
+ const merged = { ...prev };
39
+ for (const [key, value] of Object.entries(pluginState)) {
40
+ const prevValue = prev[key];
41
+ if (value !== null && typeof value === "object" && !Array.isArray(value) && prevValue !== null && typeof prevValue === "object" && !Array.isArray(prevValue)) {
42
+ merged[key] = {
43
+ ...prevValue,
44
+ ...value
45
+ };
46
+ } else {
47
+ merged[key] = value;
48
+ }
49
+ }
50
+ mergedPlugins[pluginId] = merged;
51
+ }
52
+ return { ...newState, plugins: mergedPlugins };
53
+ }
54
+ function formatProvisionState(state) {
55
+ const lines = [];
56
+ lines.push(`Provisioned at : ${new Date(state.provisionedAt).toLocaleString()}`);
57
+ if (state.namespace) lines.push(`K8s Namespace : ${state.namespace}`);
58
+ if (state.stackName) lines.push(`Pulumi Stack : ${state.stackName}`);
59
+ const shadowob = state.plugins?.shadowob;
60
+ if (shadowob) {
61
+ if (shadowob.shadowServerUrl) lines.push(`Shadow Server URL: ${shadowob.shadowServerUrl}`);
62
+ lines.push("");
63
+ if (shadowob.servers && Object.keys(shadowob.servers).length > 0) {
64
+ lines.push("Servers:");
65
+ for (const [configId, realId] of Object.entries(shadowob.servers)) {
66
+ lines.push(` ${configId.padEnd(24)} \u2192 ${realId}`);
67
+ }
68
+ }
69
+ if (shadowob.channels && Object.keys(shadowob.channels).length > 0) {
70
+ lines.push("Channels:");
71
+ for (const [configId, realId] of Object.entries(shadowob.channels)) {
72
+ lines.push(` ${configId.padEnd(24)} \u2192 ${realId}`);
73
+ }
74
+ }
75
+ if (shadowob.buddies && Object.keys(shadowob.buddies).length > 0) {
76
+ lines.push("Buddies:");
77
+ for (const [configId, info] of Object.entries(shadowob.buddies)) {
78
+ lines.push(` ${configId.padEnd(24)} \u2192 agent: ${info.agentId} user: ${info.userId}`);
79
+ }
80
+ }
81
+ }
82
+ return lines.join("\n");
83
+ }
84
+
85
+ export {
86
+ getStateDir,
87
+ getStatePath,
88
+ loadProvisionState,
89
+ saveProvisionState,
90
+ mergeProvisionState,
91
+ formatProvisionState
92
+ };