@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.
- package/README.md +509 -0
- package/dist/agent-browser-CERTMCDL.js +117 -0
- package/dist/agent-browser-CIRZRIY4.js +118 -0
- package/dist/agent-pack-LF3O5TR4.js +1236 -0
- package/dist/agent-pack-RQT27V7R.js +1235 -0
- package/dist/airtable-BG2Q75G2.js +82 -0
- package/dist/airtable-JCQXFM5D.js +83 -0
- package/dist/alipay-MZX2XCDB.js +52 -0
- package/dist/alipay-TZQI34RB.js +51 -0
- package/dist/amap-5RQB3VGC.js +45 -0
- package/dist/amap-KPCLZYYL.js +44 -0
- package/dist/atlassian-LGOEWYC7.js +54 -0
- package/dist/atlassian-TVS2A4IU.js +55 -0
- package/dist/baidu-appbuilder-6UMESXHW.js +41 -0
- package/dist/baidu-appbuilder-QRRL3ETM.js +42 -0
- package/dist/baidu-maps-HEPMVP5D.js +44 -0
- package/dist/baidu-maps-HXC4FBVP.js +45 -0
- package/dist/baidu-netdisk-G5Q6B5NH.js +45 -0
- package/dist/baidu-netdisk-RS2K5W2M.js +44 -0
- package/dist/baidu-smartprogram-EWTK5WKK.js +41 -0
- package/dist/baidu-smartprogram-JHD3XWF6.js +40 -0
- package/dist/browserbase-IUIYVYI7.js +67 -0
- package/dist/browserbase-JFO2PCIA.js +68 -0
- package/dist/canva-3YOFL7JS.js +62 -0
- package/dist/canva-FMYN65SM.js +61 -0
- package/dist/chunk-6P2K6QZR.js +529 -0
- package/dist/chunk-7VMRQ7MG.js +90 -0
- package/dist/chunk-AD3JTIU3.js +17 -0
- package/dist/chunk-BF6CV2Y4.js +64 -0
- package/dist/chunk-CTNUKOQE.js +439 -0
- package/dist/chunk-EEFMJYKB.js +97 -0
- package/dist/chunk-EJKFQ35I.js +739 -0
- package/dist/chunk-HUICDC56.js +62 -0
- package/dist/chunk-JUPAE5IA.js +527 -0
- package/dist/chunk-JY2HTT7Q.js +437 -0
- package/dist/chunk-KEPTCLUO.js +121 -0
- package/dist/chunk-KKK5H7YX.js +3622 -0
- package/dist/chunk-POSVEKIY.js +210 -0
- package/dist/chunk-QET4LT4J.js +5769 -0
- package/dist/chunk-QV4XWO3P.js +30 -0
- package/dist/chunk-R52J3PH2.js +120 -0
- package/dist/chunk-R5U7XKVJ.js +16 -0
- package/dist/chunk-RECNVWMT.js +212 -0
- package/dist/chunk-RTPBU5HF.js +92 -0
- package/dist/chunk-SUZ2ATT6.js +5774 -0
- package/dist/chunk-SVMXSIMG.js +98 -0
- package/dist/chunk-TV3CBM7R.js +28 -0
- package/dist/chunk-V2LU736V.js +3495 -0
- package/dist/chunk-ZUYL3W53.js +741 -0
- package/dist/claude-plugin-577TAQVS.js +1463 -0
- package/dist/claude-plugin-L3MXJJ6J.js +1464 -0
- package/dist/cli.js +7021 -0
- package/dist/cloudflare-HBBABPK6.js +114 -0
- package/dist/cloudflare-RDFPKMM5.js +115 -0
- package/dist/cnb-FLP3QX46.js +44 -0
- package/dist/cnb-YAVVEYFB.js +45 -0
- package/dist/console/index.html +12 -0
- package/dist/console/logo.png +0 -0
- package/dist/console/static/css/5079.f9e0918d.css +1 -0
- package/dist/console/static/css/index.7f91f806.css +1 -0
- package/dist/console/static/font/codicon.5b7d6fac.ttf +0 -0
- package/dist/console/static/js/5079.72a51ca2.js +699 -0
- package/dist/console/static/js/5079.72a51ca2.js.LICENSE.txt +35 -0
- package/dist/console/static/js/7426.f8d483ea.js +1 -0
- package/dist/console/static/js/async/1008.4df521b7.js +1 -0
- package/dist/console/static/js/async/102.1d473ec7.js +1 -0
- package/dist/console/static/js/async/1134.3f9fd9e7.js +1 -0
- package/dist/console/static/js/async/1318.4b8e48e7.js +1 -0
- package/dist/console/static/js/async/1360.5606da88.js +7 -0
- package/dist/console/static/js/async/1546.045f484f.js +1 -0
- package/dist/console/static/js/async/1562.187de2a8.js +1 -0
- package/dist/console/static/js/async/168.456d4813.js +1 -0
- package/dist/console/static/js/async/1750.e6dc2664.js +1 -0
- package/dist/console/static/js/async/1994.3fc86066.js +1 -0
- package/dist/console/static/js/async/2348.613ae3d9.js +1 -0
- package/dist/console/static/js/async/2390.1b890b9d.js +1 -0
- package/dist/console/static/js/async/2414.9d040212.js +1 -0
- package/dist/console/static/js/async/2454.4c1784ab.js +1 -0
- package/dist/console/static/js/async/2498.f5f92030.js +1 -0
- package/dist/console/static/js/async/2924.b823cd1a.js +1 -0
- package/dist/console/static/js/async/3062.63fddea6.js +1 -0
- package/dist/console/static/js/async/3078.dd712008.js +1 -0
- package/dist/console/static/js/async/3198.1f307065.js +1 -0
- package/dist/console/static/js/async/3246.3d5a899f.js +1 -0
- package/dist/console/static/js/async/3286.871676eb.js +1 -0
- package/dist/console/static/js/async/342.10bf3b90.js +1 -0
- package/dist/console/static/js/async/3446.9681a4d7.js +1 -0
- package/dist/console/static/js/async/3698.ccfaabec.js +1 -0
- package/dist/console/static/js/async/3790.2a1106a6.js +1 -0
- package/dist/console/static/js/async/4231.b29784d4.js +1 -0
- package/dist/console/static/js/async/4551.515bd41d.js +1 -0
- package/dist/console/static/js/async/4596.40f6e71b.js +1 -0
- package/dist/console/static/js/async/4600.4aaebe6d.js +1 -0
- package/dist/console/static/js/async/4718.1aae022f.js +1 -0
- package/dist/console/static/js/async/4846.a347c020.js +1 -0
- package/dist/console/static/js/async/4860.83dadf89.js +1 -0
- package/dist/console/static/js/async/500.fcfa37cb.js +1 -0
- package/dist/console/static/js/async/5096.b360203d.js +1 -0
- package/dist/console/static/js/async/5222.043274fe.js +1 -0
- package/dist/console/static/js/async/5362.f498001c.js +1 -0
- package/dist/console/static/js/async/54.c94f0755.js +1 -0
- package/dist/console/static/js/async/5478.50dd9ef0.js +2 -0
- package/dist/console/static/js/async/5478.50dd9ef0.js.LICENSE.txt +3 -0
- package/dist/console/static/js/async/5507.a6a1f793.js +1 -0
- package/dist/console/static/js/async/5638.bc6b102d.js +1 -0
- package/dist/console/static/js/async/5722.e0029049.js +1 -0
- package/dist/console/static/js/async/5942.74635c6b.js +1 -0
- package/dist/console/static/js/async/5994.1c5629c1.js +1 -0
- package/dist/console/static/js/async/6054.6bddf720.js +1 -0
- package/dist/console/static/js/async/6118.45e754e5.js +1 -0
- package/dist/console/static/js/async/6127.adcbcbb6.js +1 -0
- package/dist/console/static/js/async/614.3f434c20.js +1 -0
- package/dist/console/static/js/async/6234.ba3b002d.js +1 -0
- package/dist/console/static/js/async/6310.6546a9ba.js +1 -0
- package/dist/console/static/js/async/6378.9f805419.js +1 -0
- package/dist/console/static/js/async/6380.e4433c49.js +1 -0
- package/dist/console/static/js/async/6418.f23bcfda.js +1 -0
- package/dist/console/static/js/async/6428.77c86114.js +1 -0
- package/dist/console/static/js/async/6443.83318a6c.js +1 -0
- package/dist/console/static/js/async/6508.2b445d62.js +3 -0
- package/dist/console/static/js/async/6542.e82a26c8.js +1 -0
- package/dist/console/static/js/async/6544.62111ecb.js +1 -0
- package/dist/console/static/js/async/6612.a0c9fcf4.js +1 -0
- package/dist/console/static/js/async/6740.695aebf0.js +1 -0
- package/dist/console/static/js/async/6822.dbbb32bc.js +1 -0
- package/dist/console/static/js/async/6824.ad3540ab.js +1 -0
- package/dist/console/static/js/async/6930.585dab94.js +1 -0
- package/dist/console/static/js/async/6982.c81b95e6.js +1 -0
- package/dist/console/static/js/async/7046.ab2378c1.js +1 -0
- package/dist/console/static/js/async/7110.a603277f.js +1 -0
- package/dist/console/static/js/async/7142.4a21366f.js +1 -0
- package/dist/console/static/js/async/7348.15cc6148.js +1373 -0
- package/dist/console/static/js/async/7348.15cc6148.js.LICENSE.txt +14 -0
- package/dist/console/static/js/async/7374.b1ac5c44.js +1 -0
- package/dist/console/static/js/async/742.847f17ca.js +1 -0
- package/dist/console/static/js/async/7446.743954d8.js +1 -0
- package/dist/console/static/js/async/7673.59bbbaac.js +1 -0
- package/dist/console/static/js/async/7684.c5760c8c.js +1 -0
- package/dist/console/static/js/async/7714.c30d0f94.js +1 -0
- package/dist/console/static/js/async/8118.36d5a3bf.js +298 -0
- package/dist/console/static/js/async/8145.4bcf043a.js +1 -0
- package/dist/console/static/js/async/8246.408de938.js +1 -0
- package/dist/console/static/js/async/8390.bdae1f7d.js +1 -0
- package/dist/console/static/js/async/8422.fd94dbe1.js +1 -0
- package/dist/console/static/js/async/8434.94a0e2ae.js +1 -0
- package/dist/console/static/js/async/8518.3158de13.js +1 -0
- package/dist/console/static/js/async/8564.fc2eb841.js +1 -0
- package/dist/console/static/js/async/8678.73af4c9b.js +1 -0
- package/dist/console/static/js/async/8694.79747168.js +1 -0
- package/dist/console/static/js/async/8756.1de37b83.js +1 -0
- package/dist/console/static/js/async/8804.7fe6bdf9.js +3 -0
- package/dist/console/static/js/async/8883.e717ee94.js +1 -0
- package/dist/console/static/js/async/8886.fe6e876c.js +1 -0
- package/dist/console/static/js/async/9030.fc1ae402.js +1 -0
- package/dist/console/static/js/async/9094.5598d084.js +1 -0
- package/dist/console/static/js/async/9218.ee7b84b7.js +1 -0
- package/dist/console/static/js/async/94.9b80bc35.js +1 -0
- package/dist/console/static/js/async/9526.92aba34c.js +1 -0
- package/dist/console/static/js/async/9762.f83bc4f3.js +1 -0
- package/dist/console/static/js/async/984.e11c113a.js +1 -0
- package/dist/console/static/js/async/9846.246653cd.js +1 -0
- package/dist/console/static/js/index.4487e1ff.js +1 -0
- package/dist/console/static/js/lib-react.15d7ca9a.js +2 -0
- package/dist/console/static/js/lib-react.15d7ca9a.js.LICENSE.txt +49 -0
- package/dist/coze-C6PMDPBI.js +49 -0
- package/dist/coze-E6VGRNLV.js +48 -0
- package/dist/dashboard.command-J7XOZNXU.js +8 -0
- package/dist/dashboard.command-RV2NHDKW.js +7 -0
- package/dist/dingtalk-JNRNRN7E.js +77 -0
- package/dist/dingtalk-WZGGIAHJ.js +76 -0
- package/dist/douyin-miniprogram-AIJPPIZH.js +41 -0
- package/dist/douyin-miniprogram-HCYZ5NBW.js +42 -0
- package/dist/figma-2YYNSCDX.js +103 -0
- package/dist/figma-RYOBMENP.js +102 -0
- package/dist/firebase-2IJDDBXX.js +112 -0
- package/dist/firebase-OYSY6HPT.js +111 -0
- package/dist/firecrawl-2T3SBUW7.js +66 -0
- package/dist/firecrawl-IYYXLAZM.js +65 -0
- package/dist/flyai-7FJ4TRAG.js +81 -0
- package/dist/flyai-QS5Q6FJR.js +82 -0
- package/dist/gitagent-MWI75OIX.js +725 -0
- package/dist/gitagent-YBMWY7NZ.js +726 -0
- package/dist/gitee-3N7OFOM7.js +53 -0
- package/dist/gitee-KVNK6KLZ.js +54 -0
- package/dist/github-LUEC2LID.js +143 -0
- package/dist/github-XRO5Z3GC.js +142 -0
- package/dist/google-ads-A3QAJI4D.js +88 -0
- package/dist/google-ads-VPKWTX67.js +89 -0
- package/dist/google-analytics-C4UR5ZR2.js +50 -0
- package/dist/google-analytics-XDYZA2B7.js +49 -0
- package/dist/google-workspace-LL3EWVHH.js +320 -0
- package/dist/google-workspace-YX35SHHX.js +321 -0
- package/dist/huawei-xiaoyi-6BSMGJHR.js +40 -0
- package/dist/huawei-xiaoyi-KPWLTSHB.js +41 -0
- package/dist/hubspot-DIUHGEDI.js +45 -0
- package/dist/hubspot-FTIEMNZO.js +44 -0
- package/dist/huggingface-MJCOXA7E.js +116 -0
- package/dist/huggingface-UUXK2RHK.js +117 -0
- package/dist/index.d.ts +3013 -0
- package/dist/index.js +15649 -0
- package/dist/inference-ai-image-generation-CMI6R5T3.js +106 -0
- package/dist/inference-ai-image-generation-PXV6IG4U.js +107 -0
- package/dist/inference-sh-7AZOLEFI.js +94 -0
- package/dist/inference-sh-ABQOD3YF.js +95 -0
- package/dist/init.command-6E24K4H3.js +9 -0
- package/dist/init.command-O4HG4HKR.js +10 -0
- package/dist/klaviyo-6K5YEFNH.js +45 -0
- package/dist/klaviyo-LDPBWBSS.js +44 -0
- package/dist/kuaidi100-HGFM5VK2.js +42 -0
- package/dist/kuaidi100-UHPFCVXP.js +41 -0
- package/dist/lark-6LNA3LUQ.js +103 -0
- package/dist/lark-URVBZNS4.js +102 -0
- package/dist/linear-7QFSFPOD.js +57 -0
- package/dist/linear-T4ORUP7N.js +56 -0
- package/dist/lovart-PDUXRUHJ.js +99 -0
- package/dist/lovart-QO3SK55T.js +100 -0
- package/dist/meta-ads-SCNFI45S.js +42 -0
- package/dist/meta-ads-V6XPZWX3.js +41 -0
- package/dist/miclaw-5CNTW7VV.js +36 -0
- package/dist/miclaw-TPPPS2WN.js +35 -0
- package/dist/model-provider-AVSFJSZP.js +393 -0
- package/dist/model-provider-KFB76XV5.js +392 -0
- package/dist/notion-FZK76MN2.js +69 -0
- package/dist/notion-WFA7KGZZ.js +70 -0
- package/dist/oceanengine-3JZUS3PP.js +43 -0
- package/dist/oceanengine-5BRIJVJE.js +42 -0
- package/dist/opencli-PFXHGCS2.js +81 -0
- package/dist/opencli-VIGRJTGH.js +80 -0
- package/dist/paypal-33UADIPR.js +54 -0
- package/dist/paypal-Z5JYHIWD.js +55 -0
- package/dist/playwright-MG5WHK47.js +58 -0
- package/dist/playwright-SQAQ3DZG.js +59 -0
- package/dist/plugins-HZBWK3WQ.js +120 -0
- package/dist/plugins-I4GD5SZX.js +121 -0
- package/dist/posthog-MU5MAJOQ.js +79 -0
- package/dist/posthog-RJRRKDWB.js +80 -0
- package/dist/salesforce-34FVIJTG.js +82 -0
- package/dist/salesforce-3QZ6OFVO.js +83 -0
- package/dist/sentry-MCIRMACU.js +111 -0
- package/dist/sentry-PIWW46VA.js +110 -0
- package/dist/seo-suite-4SQ3I67Q.js +54 -0
- package/dist/seo-suite-WJXMA3S4.js +55 -0
- package/dist/serve.command-5FMIPQRY.js +10 -0
- package/dist/serve.command-DNE6GPMK.js +9 -0
- package/dist/shadowob-JELOWHWX.js +1068 -0
- package/dist/shadowob-PRSMI5MW.js +1069 -0
- package/dist/sherlock-2PKY2E2Y.js +66 -0
- package/dist/sherlock-C5ZWPPVT.js +67 -0
- package/dist/shopify-GL3NFVGE.js +94 -0
- package/dist/shopify-R4G3UXM6.js +93 -0
- package/dist/skill-discovery-7INAUP4D.js +77 -0
- package/dist/skill-discovery-YPXXV622.js +78 -0
- package/dist/state-7MCZBTR5.js +17 -0
- package/dist/state-FGOFLFBE.js +18 -0
- package/dist/stripe-C22RR4ZS.js +83 -0
- package/dist/stripe-LJNPQ3CQ.js +82 -0
- package/dist/supabase-IRNQ54FJ.js +98 -0
- package/dist/supabase-N4ONFJNQ.js +97 -0
- package/dist/taobao-aipaas-LRR4GMO3.js +45 -0
- package/dist/taobao-aipaas-RVKORSF4.js +46 -0
- package/dist/tapd-3JPVJ7XH.js +46 -0
- package/dist/tapd-TMQRSMFG.js +47 -0
- package/dist/tencent-ads-IGD33LO7.js +42 -0
- package/dist/tencent-ads-UHC6OPBV.js +43 -0
- package/dist/tencent-docs-C3A4J3CJ.js +47 -0
- package/dist/tencent-docs-O2SC4FHL.js +48 -0
- package/dist/tencent-maps-HMMWMNF4.js +37 -0
- package/dist/tencent-maps-OQOKHVW2.js +36 -0
- package/dist/vercel-KOXDDTHX.js +73 -0
- package/dist/vercel-OLNVDWMG.js +74 -0
- package/dist/webflow-FULU5Q2I.js +114 -0
- package/dist/webflow-OMJKZM54.js +115 -0
- package/dist/wechat-miniprogram-skyline-KYCDMQNW.js +74 -0
- package/dist/wechat-miniprogram-skyline-VR4FVIQL.js +75 -0
- package/dist/wechat-pay-BCMAJ6UW.js +50 -0
- package/dist/wechat-pay-YQQKXVUI.js +51 -0
- package/dist/wonda-NGWIORYN.js +81 -0
- package/dist/wonda-RBABXFNM.js +82 -0
- package/dist/wordpress-woocommerce-RDIUTHYT.js +57 -0
- package/dist/wordpress-woocommerce-RNA5HB3N.js +58 -0
- package/dist/wps-DAEFQHDE.js +47 -0
- package/dist/wps-LUWHMZQQ.js +48 -0
- package/dist/yuque-HCHTJWNI.js +72 -0
- package/dist/yuque-KRH5O74J.js +71 -0
- package/images/RUNNERS.md +270 -0
- package/images/cc-connect-runner/entrypoint.mjs +311 -0
- package/images/claude-runner/Dockerfile +88 -0
- package/images/claude-runner/RUNNER.md +222 -0
- package/images/claude-runner/entrypoint.mjs +2 -0
- package/images/codex-runner/Dockerfile +87 -0
- package/images/codex-runner/RUNNER.md +226 -0
- package/images/codex-runner/entrypoint.mjs +2 -0
- package/images/gemini-runner/Dockerfile +87 -0
- package/images/gemini-runner/RUNNER.md +218 -0
- package/images/gemini-runner/entrypoint.mjs +2 -0
- package/images/hermes-runner/Dockerfile +74 -0
- package/images/hermes-runner/RUNNER.md +243 -0
- package/images/hermes-runner/entrypoint.mjs +283 -0
- package/images/openclaw-runner/Dockerfile +212 -0
- package/images/openclaw-runner/RUNNER.md +170 -0
- package/images/openclaw-runner/entrypoint.mjs +1113 -0
- package/images/openclaw-runner/warm-runtime-deps.mjs +95 -0
- package/images/opencode-runner/Dockerfile +87 -0
- package/images/opencode-runner/RUNNER.md +202 -0
- package/images/opencode-runner/entrypoint.mjs +2 -0
- package/package.json +121 -0
- package/templates/agent-marketplace-buddy.template.json +131 -0
- package/templates/ai-werewolf.template.json +92 -0
- package/templates/bmad-method-buddy.template.json +123 -0
- package/templates/brain-fix.template.json +92 -0
- package/templates/claude-ads-buddy.template.json +123 -0
- package/templates/claude-financial-services-buddy.template.json +111 -0
- package/templates/claude-seo-buddy.template.json +123 -0
- package/templates/code-arena.template.json +92 -0
- package/templates/daily-brief.template.json +92 -0
- package/templates/e-wife.template.json +92 -0
- package/templates/everything-claude-code-buddy.template.json +125 -0
- package/templates/financial-freedom.template.json +92 -0
- package/templates/gitstory.template.json +92 -0
- package/templates/google-workspace-buddy.template.json +88 -0
- package/templates/gsd-buddy.template.json +119 -0
- package/templates/gstack-buddy.template.json +143 -0
- package/templates/gstack.template.json +92 -0
- package/templates/little-match-girl.template.json +114 -0
- package/templates/lovart-buddy.template.json +110 -0
- package/templates/marketingskills-buddy.template.json +102 -0
- package/templates/retire-buddy.template.json +92 -0
- package/templates/scientific-skills-buddy.template.json +119 -0
- package/templates/seomachine-buddy.template.json +113 -0
- package/templates/shadow-server-app-demo.template.json +105 -0
- package/templates/slavingia-skills-buddy.template.json +102 -0
- package/templates/superclaude-buddy.template.json +146 -0
- package/templates/superpowers-buddy.template.json +108 -0
- 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
|
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
|
+
}
|