@shadowob/cloud 1.1.7 → 1.1.9
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 +159 -11
- package/dist/{agent-browser-CERTMCDL.js → agent-browser-EI7FIK3X.js} +3 -3
- package/dist/{agent-browser-CIRZRIY4.js → agent-browser-YXE4ES6Q.js} +3 -3
- package/dist/{agent-pack-LF3O5TR4.js → agent-pack-35TFCZKP.js} +1 -1
- package/dist/{agent-pack-RQT27V7R.js → agent-pack-UOG6ZAUL.js} +1 -1
- package/dist/agentmemory-KP5O7GHB.js +101 -0
- package/dist/agentmemory-UV74POU5.js +100 -0
- package/dist/{airtable-BG2Q75G2.js → airtable-CXXS3YUN.js} +3 -3
- package/dist/{airtable-JCQXFM5D.js → airtable-YZ5JR5JC.js} +3 -3
- package/dist/{alipay-TZQI34RB.js → alipay-WED5P3XC.js} +3 -3
- package/dist/{alipay-MZX2XCDB.js → alipay-WJTVREMG.js} +3 -3
- package/dist/{amap-KPCLZYYL.js → amap-AIN23TQ7.js} +3 -3
- package/dist/{amap-5RQB3VGC.js → amap-F6GF7QKB.js} +3 -3
- package/dist/{atlassian-LGOEWYC7.js → atlassian-G6PM6UVM.js} +3 -3
- package/dist/{atlassian-TVS2A4IU.js → atlassian-IDR2NPJC.js} +3 -3
- package/dist/{baidu-appbuilder-QRRL3ETM.js → baidu-appbuilder-JKQIA5TG.js} +3 -3
- package/dist/{baidu-appbuilder-6UMESXHW.js → baidu-appbuilder-KVMCIFYH.js} +3 -3
- package/dist/{baidu-maps-HEPMVP5D.js → baidu-maps-GWMXV6YT.js} +3 -3
- package/dist/{baidu-maps-HXC4FBVP.js → baidu-maps-ZXGT6QZM.js} +3 -3
- package/dist/{baidu-netdisk-G5Q6B5NH.js → baidu-netdisk-J5SLQVWW.js} +3 -3
- package/dist/{baidu-netdisk-RS2K5W2M.js → baidu-netdisk-PONM3DY6.js} +3 -3
- package/dist/{baidu-smartprogram-JHD3XWF6.js → baidu-smartprogram-WJ5JMO6V.js} +3 -3
- package/dist/{baidu-smartprogram-EWTK5WKK.js → baidu-smartprogram-Y5WBR7RX.js} +3 -3
- package/dist/{browserbase-IUIYVYI7.js → browserbase-CGVQHRC4.js} +3 -3
- package/dist/{browserbase-JFO2PCIA.js → browserbase-PVWYTEZC.js} +3 -3
- package/dist/{canva-3YOFL7JS.js → canva-COCBQAT2.js} +3 -3
- package/dist/{canva-FMYN65SM.js → canva-RSTJSEX5.js} +3 -3
- package/dist/{chunk-35LJYCQF.js → chunk-3CT6RQNM.js} +745 -482
- package/dist/{chunk-KODMGZUC.js → chunk-4YO3NA26.js} +1 -1
- package/dist/{chunk-RECNVWMT.js → chunk-6V7MW4HU.js} +17 -3
- package/dist/{chunk-C6OI4ZNO.js → chunk-EVV774KS.js} +1 -1
- package/dist/{chunk-SVMXSIMG.js → chunk-F6CQ6GAG.js} +2 -1
- package/dist/{chunk-JUPAE5IA.js → chunk-OL5VH6RN.js} +72 -69
- package/dist/{chunk-POSVEKIY.js → chunk-OYY64ZSX.js} +17 -3
- package/dist/{chunk-ZHVYNIHA.js → chunk-P5Y6F2NH.js} +745 -482
- package/dist/{chunk-EEFMJYKB.js → chunk-PSK2SYZ3.js} +2 -1
- package/dist/{chunk-6YAYCWGK.js → chunk-PYJRFKPN.js} +1 -1
- package/dist/{chunk-JY2HTT7Q.js → chunk-RMDY3W4V.js} +6 -0
- package/dist/{chunk-EWB7L7IW.js → chunk-X2SREECR.js} +6 -6
- package/dist/{chunk-LXJBQBGL.js → chunk-X5VOIA72.js} +6 -6
- package/dist/{chunk-CTNUKOQE.js → chunk-Y5BJ3EW2.js} +6 -0
- package/dist/{chunk-SAP2DBHO.js → chunk-Y6BKVDG7.js} +1 -1
- package/dist/{chunk-6P2K6QZR.js → chunk-ZGMWSSCC.js} +72 -69
- package/dist/{claude-plugin-577TAQVS.js → claude-plugin-FPN32WMT.js} +1 -1
- package/dist/{claude-plugin-L3MXJJ6J.js → claude-plugin-IYHOVTVL.js} +1 -1
- package/dist/cli.js +930 -149
- package/dist/{cloudflare-RDFPKMM5.js → cloudflare-U3RHJJKK.js} +3 -3
- package/dist/{cloudflare-HBBABPK6.js → cloudflare-ZHN7UGPX.js} +3 -3
- package/dist/{cnb-FLP3QX46.js → cnb-AMXC5I7D.js} +3 -3
- package/dist/{cnb-YAVVEYFB.js → cnb-P3IZ4JTD.js} +3 -3
- package/dist/console/index.html +1 -1
- package/dist/console/static/css/index.f4563d95.css +1 -0
- package/dist/console/static/js/index.020abc71.js +1 -0
- package/dist/{coze-E6VGRNLV.js → coze-66RYMKVB.js} +3 -3
- package/dist/{coze-C6PMDPBI.js → coze-YE3BINXP.js} +3 -3
- package/dist/{dashboard.command-ZMQFKLNQ.js → dashboard.command-BRPZCZER.js} +1 -1
- package/dist/{dashboard.command-2AM45SIT.js → dashboard.command-GUHSJ2CN.js} +1 -1
- package/dist/{dingtalk-JNRNRN7E.js → dingtalk-4RFQG7N2.js} +3 -3
- package/dist/{dingtalk-WZGGIAHJ.js → dingtalk-VNFKXD2P.js} +3 -3
- package/dist/{douyin-miniprogram-AIJPPIZH.js → douyin-miniprogram-UEALAGOS.js} +3 -3
- package/dist/{douyin-miniprogram-HCYZ5NBW.js → douyin-miniprogram-UNB6UO2I.js} +3 -3
- package/dist/{figma-2YYNSCDX.js → figma-A264OWU5.js} +3 -3
- package/dist/{figma-RYOBMENP.js → figma-Y4TGSDZP.js} +3 -3
- package/dist/{firebase-OYSY6HPT.js → firebase-AI3MAGYG.js} +3 -3
- package/dist/{firebase-2IJDDBXX.js → firebase-ZGQARUIH.js} +3 -3
- package/dist/{firecrawl-2T3SBUW7.js → firecrawl-2JW7DMTH.js} +3 -3
- package/dist/{firecrawl-IYYXLAZM.js → firecrawl-UURQ5P5N.js} +3 -3
- package/dist/{flyai-QS5Q6FJR.js → flyai-EJGDMYFA.js} +3 -3
- package/dist/{flyai-7FJ4TRAG.js → flyai-ZFMZBBHJ.js} +3 -3
- package/dist/{gitagent-MWI75OIX.js → gitagent-5SDBYFNA.js} +1 -1
- package/dist/{gitagent-YBMWY7NZ.js → gitagent-ODXPCR4X.js} +1 -1
- package/dist/{gitee-3N7OFOM7.js → gitee-5UMJ4BC7.js} +3 -3
- package/dist/{gitee-KVNK6KLZ.js → gitee-D6NAZTCO.js} +3 -3
- package/dist/{github-LUEC2LID.js → github-JBLDKIA3.js} +3 -3
- package/dist/{github-XRO5Z3GC.js → github-PZQAVEZP.js} +3 -3
- package/dist/{google-ads-VPKWTX67.js → google-ads-BIFQOJ5M.js} +3 -3
- package/dist/{google-ads-A3QAJI4D.js → google-ads-QU3LJE4O.js} +3 -3
- package/dist/{google-analytics-C4UR5ZR2.js → google-analytics-7VZ6YZVA.js} +3 -3
- package/dist/{google-analytics-XDYZA2B7.js → google-analytics-HXMPCL5V.js} +3 -3
- package/dist/{google-workspace-YX35SHHX.js → google-workspace-6SEBJ4VA.js} +2 -2
- package/dist/{google-workspace-LL3EWVHH.js → google-workspace-L3AMJLCF.js} +2 -2
- package/dist/{huawei-xiaoyi-KPWLTSHB.js → huawei-xiaoyi-C6QIJMPM.js} +3 -3
- package/dist/{huawei-xiaoyi-6BSMGJHR.js → huawei-xiaoyi-JGLXWU5P.js} +3 -3
- package/dist/{hubspot-FTIEMNZO.js → hubspot-LACJGE6D.js} +3 -3
- package/dist/{hubspot-DIUHGEDI.js → hubspot-XWPRO4KZ.js} +3 -3
- package/dist/{huggingface-UUXK2RHK.js → huggingface-26QQZK4C.js} +3 -3
- package/dist/{huggingface-MJCOXA7E.js → huggingface-CQICNA2R.js} +3 -3
- package/dist/index.d.ts +1338 -1
- package/dist/index.js +1364 -226
- package/dist/{inference-ai-image-generation-PXV6IG4U.js → inference-ai-image-generation-5KYIUWT6.js} +3 -3
- package/dist/{inference-ai-image-generation-CMI6R5T3.js → inference-ai-image-generation-J2NYDCLZ.js} +3 -3
- package/dist/{inference-sh-7AZOLEFI.js → inference-sh-5SWQTK73.js} +3 -3
- package/dist/{inference-sh-ABQOD3YF.js → inference-sh-PTQF6T3R.js} +3 -3
- package/dist/{init.command-YVG4X6II.js → init.command-C7UKPK2Y.js} +3 -3
- package/dist/{init.command-JKE3SXAS.js → init.command-UNL66BMR.js} +3 -3
- package/dist/{klaviyo-LDPBWBSS.js → klaviyo-4UNPMBFT.js} +3 -3
- package/dist/{klaviyo-6K5YEFNH.js → klaviyo-SLYNEULT.js} +3 -3
- package/dist/{kuaidi100-HGFM5VK2.js → kuaidi100-HZKV5AIS.js} +3 -3
- package/dist/{kuaidi100-UHPFCVXP.js → kuaidi100-ZQUW7GHH.js} +3 -3
- package/dist/lark-HQUZNHDI.js +382 -0
- package/dist/lark-PAV7XWJS.js +381 -0
- package/dist/{linear-T4ORUP7N.js → linear-PYGQ5SLK.js} +3 -3
- package/dist/{linear-7QFSFPOD.js → linear-VJLYNTUF.js} +3 -3
- package/dist/{lovart-PDUXRUHJ.js → lovart-KC6SVNAJ.js} +3 -3
- package/dist/{lovart-QO3SK55T.js → lovart-WVKY4RR4.js} +3 -3
- package/dist/{meta-ads-SCNFI45S.js → meta-ads-E6XT33GI.js} +3 -3
- package/dist/{meta-ads-V6XPZWX3.js → meta-ads-RJ6DWRYN.js} +3 -3
- package/dist/{miclaw-TPPPS2WN.js → miclaw-4BA3A2YN.js} +3 -3
- package/dist/{miclaw-5CNTW7VV.js → miclaw-LUV6DCHX.js} +3 -3
- package/dist/{model-provider-KFB76XV5.js → model-provider-SYXJZ3JD.js} +1 -1
- package/dist/{model-provider-AVSFJSZP.js → model-provider-U7NEYA3Y.js} +1 -1
- package/dist/nature-skills-G76ABIWZ.js +143 -0
- package/dist/nature-skills-SQHMFXKT.js +142 -0
- package/dist/{notion-WFA7KGZZ.js → notion-2JZAKOFP.js} +1 -1
- package/dist/{notion-FZK76MN2.js → notion-O3NO5TJH.js} +1 -1
- package/dist/{oceanengine-3JZUS3PP.js → oceanengine-D23UZGVB.js} +3 -3
- package/dist/{oceanengine-5BRIJVJE.js → oceanengine-WDK2OXX5.js} +3 -3
- package/dist/{opencli-PFXHGCS2.js → opencli-36P63YNU.js} +3 -3
- package/dist/{opencli-VIGRJTGH.js → opencli-SUHDFR33.js} +3 -3
- package/dist/{paypal-Z5JYHIWD.js → paypal-K27SUW3B.js} +3 -3
- package/dist/{paypal-33UADIPR.js → paypal-OPZ3KOV5.js} +3 -3
- package/dist/{playwright-SQAQ3DZG.js → playwright-2ULT3NIC.js} +3 -3
- package/dist/{playwright-MG5WHK47.js → playwright-3Q7LBILG.js} +3 -3
- package/dist/{plugins-HZBWK3WQ.js → plugins-2MITZ4ZD.js} +2 -2
- package/dist/{plugins-I4GD5SZX.js → plugins-UK2QWD6G.js} +2 -2
- package/dist/{posthog-MU5MAJOQ.js → posthog-E3EHXLAN.js} +3 -3
- package/dist/{posthog-RJRRKDWB.js → posthog-KPJVLGX6.js} +3 -3
- package/dist/{salesforce-34FVIJTG.js → salesforce-FGPNG7FB.js} +3 -3
- package/dist/{salesforce-3QZ6OFVO.js → salesforce-TVHISKBC.js} +3 -3
- package/dist/{sentry-PIWW46VA.js → sentry-BZ3J3MZM.js} +3 -3
- package/dist/{sentry-MCIRMACU.js → sentry-XC57YRAJ.js} +3 -3
- package/dist/{seo-suite-WJXMA3S4.js → seo-suite-2MDEDLAB.js} +3 -3
- package/dist/{seo-suite-4SQ3I67Q.js → seo-suite-U75O3QP6.js} +3 -3
- package/dist/{serve.command-XLBJUOV6.js → serve.command-G5RVQFUD.js} +3 -3
- package/dist/{serve.command-RD6I6MFD.js → serve.command-PYGDG7K3.js} +3 -3
- package/dist/{shadowob-PRSMI5MW.js → shadowob-3QZ7DLDW.js} +158 -31
- package/dist/{shadowob-JELOWHWX.js → shadowob-CJLOEKFP.js} +158 -31
- package/dist/{sherlock-2PKY2E2Y.js → sherlock-CQFUHKDH.js} +3 -3
- package/dist/{sherlock-C5ZWPPVT.js → sherlock-DONK2I6E.js} +3 -3
- package/dist/{shopify-GL3NFVGE.js → shopify-NO5GI3WD.js} +3 -3
- package/dist/{shopify-R4G3UXM6.js → shopify-VW2KLKH5.js} +3 -3
- package/dist/{skill-discovery-YPXXV622.js → skill-discovery-6JEPPKKM.js} +3 -3
- package/dist/{skill-discovery-7INAUP4D.js → skill-discovery-PWRAVGIS.js} +3 -3
- package/dist/skills/shadowob-cli/SKILL.md +7 -0
- package/dist/{stripe-LJNPQ3CQ.js → stripe-HCNCKG4C.js} +1 -1
- package/dist/{stripe-C22RR4ZS.js → stripe-IU3KTJ4H.js} +1 -1
- package/dist/{supabase-IRNQ54FJ.js → supabase-KRL7JW2D.js} +3 -3
- package/dist/{supabase-N4ONFJNQ.js → supabase-TYEBTZNO.js} +3 -3
- package/dist/{taobao-aipaas-LRR4GMO3.js → taobao-aipaas-PEUIDOYP.js} +3 -3
- package/dist/{taobao-aipaas-RVKORSF4.js → taobao-aipaas-SA5E4MZA.js} +3 -3
- package/dist/{tapd-TMQRSMFG.js → tapd-6DDIUPVQ.js} +3 -3
- package/dist/{tapd-3JPVJ7XH.js → tapd-OTYLSZGY.js} +3 -3
- package/dist/{tencent-ads-UHC6OPBV.js → tencent-ads-OW2TAMH5.js} +3 -3
- package/dist/{tencent-ads-IGD33LO7.js → tencent-ads-XTQZ27YT.js} +3 -3
- package/dist/{tencent-docs-C3A4J3CJ.js → tencent-docs-6D6A2VCO.js} +3 -3
- package/dist/{tencent-docs-O2SC4FHL.js → tencent-docs-K3TMUIWD.js} +3 -3
- package/dist/{tencent-maps-OQOKHVW2.js → tencent-maps-IZYWITJZ.js} +3 -3
- package/dist/{tencent-maps-HMMWMNF4.js → tencent-maps-SWI7CLQY.js} +3 -3
- package/dist/text-to-cad-B2UP6PKA.js +192 -0
- package/dist/text-to-cad-I4B6VBFV.js +193 -0
- package/dist/{vercel-KOXDDTHX.js → vercel-CCKRC76D.js} +3 -3
- package/dist/{vercel-OLNVDWMG.js → vercel-SBGEMIJJ.js} +3 -3
- package/dist/{webflow-OMJKZM54.js → webflow-C3EHNNSN.js} +3 -3
- package/dist/{webflow-FULU5Q2I.js → webflow-ZFBJH4CR.js} +3 -3
- package/dist/{wechat-miniprogram-skyline-KYCDMQNW.js → wechat-miniprogram-skyline-VNCRERHX.js} +3 -3
- package/dist/{wechat-miniprogram-skyline-VR4FVIQL.js → wechat-miniprogram-skyline-Z5JQUV5Q.js} +3 -3
- package/dist/{wechat-pay-BCMAJ6UW.js → wechat-pay-RPDKPUEB.js} +3 -3
- package/dist/{wechat-pay-YQQKXVUI.js → wechat-pay-XVDGJRF2.js} +3 -3
- package/dist/{wonda-NGWIORYN.js → wonda-EL2P44S7.js} +3 -3
- package/dist/{wonda-RBABXFNM.js → wonda-XK5JK4X3.js} +3 -3
- package/dist/{wordpress-woocommerce-RNA5HB3N.js → wordpress-woocommerce-4MEE5A2M.js} +3 -3
- package/dist/{wordpress-woocommerce-RDIUTHYT.js → wordpress-woocommerce-6ECNM2QU.js} +3 -3
- package/dist/{wps-LUWHMZQQ.js → wps-E4OZEMOF.js} +3 -3
- package/dist/{wps-DAEFQHDE.js → wps-JNQUC4JS.js} +3 -3
- package/dist/{yuque-HCHTJWNI.js → yuque-GLAAOS7X.js} +3 -3
- package/dist/{yuque-KRH5O74J.js → yuque-MEF6VFLJ.js} +3 -3
- package/images/RUNNERS.md +15 -0
- package/images/cc-connect-runner/entrypoint.mjs +228 -0
- package/images/claude-runner/RUNNER.md +5 -3
- package/images/codex-runner/RUNNER.md +5 -3
- package/images/gemini-runner/RUNNER.md +5 -2
- package/images/hermes-runner/RUNNER.md +4 -2
- package/images/hermes-runner/entrypoint.mjs +269 -1
- package/images/openclaw-runner/Dockerfile +1 -0
- package/images/openclaw-runner/RUNNER.md +3 -0
- package/images/openclaw-runner/entrypoint.mjs +249 -1
- package/images/openclaw-runner/warm-runtime-deps.mjs +1 -3
- package/images/opencode-runner/RUNNER.md +5 -3
- package/package.json +3 -3
- package/templates/agent-marketplace-buddy.template.json +4 -1
- package/templates/bmad-method-buddy.template.json +4 -1
- package/templates/code-trainer.template.json +331 -0
- package/templates/gstack-buddy.template.json +4 -1
- package/templates/little-match-girl.template.json +10 -3
- package/dist/console/static/css/index.7f91f806.css +0 -1
- package/dist/console/static/js/index.4487e1ff.js +0 -1
- package/dist/lark-6LNA3LUQ.js +0 -103
- package/dist/lark-URVBZNS4.js +0 -102
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import {
|
|
2
|
+
attachConnectorRuntimeAssets,
|
|
3
|
+
connectorField,
|
|
4
|
+
connectorManifest,
|
|
5
|
+
installedCheck,
|
|
6
|
+
npmGlobalDependency
|
|
7
|
+
} from "./chunk-PSK2SYZ3.js";
|
|
8
|
+
import "./chunk-OYY64ZSX.js";
|
|
9
|
+
import {
|
|
10
|
+
definePlugin
|
|
11
|
+
} from "./chunk-RMDY3W4V.js";
|
|
12
|
+
import "./chunk-R5U7XKVJ.js";
|
|
13
|
+
|
|
14
|
+
// src/plugins/lark/index.ts
|
|
15
|
+
var PLUGIN_ID = "lark";
|
|
16
|
+
var SKILLS_MOUNT = "/workspace/.agents/plugin-skills/lark";
|
|
17
|
+
var LARK_CONFIG_DIR = "/home/shadow/.lark-cli";
|
|
18
|
+
var LARK_CREDENTIALS_JSON_ENV = "LARKSUITE_CLI_CREDENTIALS_JSON";
|
|
19
|
+
var FEISHU_APP_CONSOLE_URL = "https://open.feishu.cn/app";
|
|
20
|
+
var MEEGLE_CLI_CONFIG_URL = "https://github.com/larksuite/meegle-cli#configuration";
|
|
21
|
+
var LARK_CONFIG_PATHS = [
|
|
22
|
+
`${LARK_CONFIG_DIR}/config.json`,
|
|
23
|
+
`${LARK_CONFIG_DIR}/openclaw/config.json`,
|
|
24
|
+
`${LARK_CONFIG_DIR}/hermes/config.json`,
|
|
25
|
+
`${LARK_CONFIG_DIR}/lark-channel/config.json`
|
|
26
|
+
];
|
|
27
|
+
var LARK_PROFILE_NAME = "shadow-cloud";
|
|
28
|
+
var LARK_SECRET_KEYS = {
|
|
29
|
+
appId: "LARKSUITE_CLI_APP_ID",
|
|
30
|
+
appSecret: "LARKSUITE_CLI_APP_SECRET",
|
|
31
|
+
brand: "LARKSUITE_CLI_BRAND",
|
|
32
|
+
defaultAs: "LARKSUITE_CLI_DEFAULT_AS",
|
|
33
|
+
strictMode: "LARKSUITE_CLI_STRICT_MODE"
|
|
34
|
+
};
|
|
35
|
+
var MEEGLE_SECRET_KEYS = {
|
|
36
|
+
host: "MEEGLE_HOST",
|
|
37
|
+
accessToken: "MEEGLE_USER_ACCESS_TOKEN",
|
|
38
|
+
accessTokenHeader: "MEEGLE_ACCESS_TOKEN_HEADER",
|
|
39
|
+
userAgent: "MEEGLE_USER_AGENT"
|
|
40
|
+
};
|
|
41
|
+
var LARK_CONFIG_FIELD_KEYS = new Set(Object.values(LARK_SECRET_KEYS));
|
|
42
|
+
var manifest = connectorManifest({
|
|
43
|
+
id: PLUGIN_ID,
|
|
44
|
+
name: "Lark / Feishu",
|
|
45
|
+
description: "Lark, Feishu, and Meegle workspace operations for messages, docs, Base, sheets, calendar, mail, tasks, meetings, approvals, projects, and weekly execution workflows.",
|
|
46
|
+
category: "communication",
|
|
47
|
+
icon: "messages-square",
|
|
48
|
+
website: "https://open.feishu.cn",
|
|
49
|
+
docs: "https://github.com/larksuite/cli",
|
|
50
|
+
fields: [
|
|
51
|
+
connectorField(LARK_SECRET_KEYS.appId, "App ID", {
|
|
52
|
+
description: "Feishu or Lark app ID used by lark-cli. Get it from the app console.",
|
|
53
|
+
sensitive: false,
|
|
54
|
+
placeholder: "cli_xxx",
|
|
55
|
+
helpUrl: FEISHU_APP_CONSOLE_URL
|
|
56
|
+
}),
|
|
57
|
+
connectorField(LARK_SECRET_KEYS.appSecret, "App secret", {
|
|
58
|
+
description: "App secret from the Feishu or Lark app console. Cloud writes this into lark-cli config.json instead of raw app env vars so bot CLI calls can mint tenant tokens correctly.",
|
|
59
|
+
placeholder: "App secret",
|
|
60
|
+
helpUrl: FEISHU_APP_CONSOLE_URL
|
|
61
|
+
}),
|
|
62
|
+
connectorField(LARK_SECRET_KEYS.brand, "Workspace brand", {
|
|
63
|
+
description: "Use feishu for China tenants or lark for global tenants.",
|
|
64
|
+
required: false,
|
|
65
|
+
sensitive: false,
|
|
66
|
+
placeholder: "feishu",
|
|
67
|
+
helpUrl: FEISHU_APP_CONSOLE_URL
|
|
68
|
+
}),
|
|
69
|
+
connectorField(LARK_SECRET_KEYS.defaultAs, "Default identity", {
|
|
70
|
+
description: "Default lark-cli identity: bot, user, or auto. Defaults to bot.",
|
|
71
|
+
required: false,
|
|
72
|
+
sensitive: false,
|
|
73
|
+
placeholder: "bot"
|
|
74
|
+
}),
|
|
75
|
+
connectorField(LARK_SECRET_KEYS.strictMode, "Strict mode", {
|
|
76
|
+
description: "Restrict lark-cli to bot, user, or off. Defaults to bot.",
|
|
77
|
+
required: false,
|
|
78
|
+
sensitive: false,
|
|
79
|
+
placeholder: "bot"
|
|
80
|
+
}),
|
|
81
|
+
connectorField(MEEGLE_SECRET_KEYS.host, "Meegle host", {
|
|
82
|
+
description: "Meegle site domain, such as project.feishu.cn, meegle.com, or a tenant host.",
|
|
83
|
+
required: false,
|
|
84
|
+
sensitive: false,
|
|
85
|
+
placeholder: "project.feishu.cn",
|
|
86
|
+
helpUrl: MEEGLE_CLI_CONFIG_URL
|
|
87
|
+
}),
|
|
88
|
+
connectorField(MEEGLE_SECRET_KEYS.accessToken, "Meegle user access token", {
|
|
89
|
+
description: "Optional Meegle user access token for direct CLI auth. Rotate this token when Meegle returns 401.",
|
|
90
|
+
required: false,
|
|
91
|
+
placeholder: "u-...",
|
|
92
|
+
helpUrl: MEEGLE_CLI_CONFIG_URL
|
|
93
|
+
}),
|
|
94
|
+
connectorField(MEEGLE_SECRET_KEYS.accessTokenHeader, "Meegle token header", {
|
|
95
|
+
description: "Optional custom Meegle token header. Empty uses Authorization: Bearer <token>.",
|
|
96
|
+
required: false,
|
|
97
|
+
sensitive: false,
|
|
98
|
+
placeholder: "x-meegle-auth",
|
|
99
|
+
helpUrl: MEEGLE_CLI_CONFIG_URL
|
|
100
|
+
}),
|
|
101
|
+
connectorField(MEEGLE_SECRET_KEYS.userAgent, "Meegle user agent suffix", {
|
|
102
|
+
description: "Optional caller suffix appended to the Meegle CLI User-Agent.",
|
|
103
|
+
required: false,
|
|
104
|
+
sensitive: false,
|
|
105
|
+
placeholder: "shadow-cloud",
|
|
106
|
+
helpUrl: MEEGLE_CLI_CONFIG_URL
|
|
107
|
+
})
|
|
108
|
+
],
|
|
109
|
+
capabilities: ["tool", "data-source", "action", "cli"],
|
|
110
|
+
tags: [
|
|
111
|
+
"lark",
|
|
112
|
+
"feishu",
|
|
113
|
+
"meegle",
|
|
114
|
+
"docs",
|
|
115
|
+
"base",
|
|
116
|
+
"calendar",
|
|
117
|
+
"messenger",
|
|
118
|
+
"projects",
|
|
119
|
+
"skills",
|
|
120
|
+
"cli"
|
|
121
|
+
],
|
|
122
|
+
popularity: 99
|
|
123
|
+
});
|
|
124
|
+
var runtimeDependencies = [
|
|
125
|
+
npmGlobalDependency("lark-cli", ["@larksuite/cli"], "Lark / Feishu CLI runtime package"),
|
|
126
|
+
npmGlobalDependency("meegle", ["@lark-project/meegle"], "Meegle CLI runtime package")
|
|
127
|
+
];
|
|
128
|
+
var skillSources = [
|
|
129
|
+
{
|
|
130
|
+
id: "lark-cli-skills",
|
|
131
|
+
kind: "git",
|
|
132
|
+
url: "https://github.com/larksuite/cli.git",
|
|
133
|
+
ref: "main",
|
|
134
|
+
from: "skills",
|
|
135
|
+
targetPath: SKILLS_MOUNT,
|
|
136
|
+
includePattern: "lark-*",
|
|
137
|
+
description: "Official Lark CLI agent skills, including bundled references and scripts"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
id: "meegle-cli-skills",
|
|
141
|
+
kind: "git",
|
|
142
|
+
url: "https://github.com/larksuite/meegle-cli.git",
|
|
143
|
+
ref: "main",
|
|
144
|
+
from: "skills",
|
|
145
|
+
targetPath: SKILLS_MOUNT,
|
|
146
|
+
include: ["meegle"],
|
|
147
|
+
description: "Official Meegle CLI agent skill and references"
|
|
148
|
+
}
|
|
149
|
+
];
|
|
150
|
+
var secretFields = manifest.auth.fields.map((field) => ({
|
|
151
|
+
key: field.key,
|
|
152
|
+
label: field.label,
|
|
153
|
+
description: field.description,
|
|
154
|
+
required: field.required,
|
|
155
|
+
sensitive: field.sensitive,
|
|
156
|
+
placeholder: field.placeholder,
|
|
157
|
+
helpUrl: field.helpUrl,
|
|
158
|
+
...LARK_CONFIG_FIELD_KEYS.has(field.key) ? { runtime: false } : {}
|
|
159
|
+
}));
|
|
160
|
+
function readString(context, key) {
|
|
161
|
+
const value = context.secrets[key] ?? context.agentConfig[key];
|
|
162
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
163
|
+
}
|
|
164
|
+
function oneOf(value, allowed, fallback) {
|
|
165
|
+
return allowed.includes(value) ? value : fallback;
|
|
166
|
+
}
|
|
167
|
+
function larkBrand(context) {
|
|
168
|
+
return oneOf(readString(context, LARK_SECRET_KEYS.brand), ["feishu", "lark"], "feishu");
|
|
169
|
+
}
|
|
170
|
+
function larkDefaultAs(context) {
|
|
171
|
+
return oneOf(
|
|
172
|
+
readString(context, LARK_SECRET_KEYS.defaultAs),
|
|
173
|
+
["bot", "user", "auto"],
|
|
174
|
+
"bot"
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
function larkStrictMode(context) {
|
|
178
|
+
return oneOf(
|
|
179
|
+
readString(context, LARK_SECRET_KEYS.strictMode),
|
|
180
|
+
["bot", "user", "off"],
|
|
181
|
+
"bot"
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
function buildLarkCredentialsJson(context) {
|
|
185
|
+
const appId = readString(context, LARK_SECRET_KEYS.appId);
|
|
186
|
+
const appSecret = readString(context, LARK_SECRET_KEYS.appSecret);
|
|
187
|
+
if (!appId || !appSecret) return void 0;
|
|
188
|
+
return `${JSON.stringify(
|
|
189
|
+
{
|
|
190
|
+
strictMode: larkStrictMode(context),
|
|
191
|
+
currentApp: LARK_PROFILE_NAME,
|
|
192
|
+
apps: [
|
|
193
|
+
{
|
|
194
|
+
name: LARK_PROFILE_NAME,
|
|
195
|
+
appId,
|
|
196
|
+
appSecret,
|
|
197
|
+
brand: larkBrand(context),
|
|
198
|
+
defaultAs: larkDefaultAs(context),
|
|
199
|
+
strictMode: larkStrictMode(context),
|
|
200
|
+
users: []
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
},
|
|
204
|
+
null,
|
|
205
|
+
2
|
|
206
|
+
)}
|
|
207
|
+
`;
|
|
208
|
+
}
|
|
209
|
+
function buildSkillConfig(context) {
|
|
210
|
+
return {
|
|
211
|
+
skills: {
|
|
212
|
+
load: { extraDirs: [SKILLS_MOUNT] },
|
|
213
|
+
entries: {
|
|
214
|
+
[PLUGIN_ID]: {
|
|
215
|
+
enabled: true,
|
|
216
|
+
config: {
|
|
217
|
+
larkConfigDir: LARK_CONFIG_DIR,
|
|
218
|
+
skillSources: [SKILLS_MOUNT],
|
|
219
|
+
cli: {
|
|
220
|
+
lark: "lark-cli",
|
|
221
|
+
meegle: "meegle"
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
env: {
|
|
225
|
+
LARKSUITE_CLI_CONFIG_DIR: LARK_CONFIG_DIR,
|
|
226
|
+
LARKSUITE_CLI_NO_UPDATE_NOTIFIER: "1",
|
|
227
|
+
LARKSUITE_CLI_NO_SKILLS_NOTIFIER: "1",
|
|
228
|
+
...readString(context, MEEGLE_SECRET_KEYS.host) ? { MEEGLE_HOST: readString(context, MEEGLE_SECRET_KEYS.host) } : {}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
function buildRuntimeEnv(context) {
|
|
236
|
+
const env = {
|
|
237
|
+
LARKSUITE_CLI_CONFIG_DIR: LARK_CONFIG_DIR,
|
|
238
|
+
LARKSUITE_CLI_NO_UPDATE_NOTIFIER: "1",
|
|
239
|
+
LARKSUITE_CLI_NO_SKILLS_NOTIFIER: "1"
|
|
240
|
+
};
|
|
241
|
+
const credentialsJson = buildLarkCredentialsJson(context);
|
|
242
|
+
if (credentialsJson) env[LARK_CREDENTIALS_JSON_ENV] = credentialsJson;
|
|
243
|
+
for (const key of Object.values(MEEGLE_SECRET_KEYS)) {
|
|
244
|
+
const value = readString(context, key);
|
|
245
|
+
if (value) env[key] = value;
|
|
246
|
+
}
|
|
247
|
+
return env;
|
|
248
|
+
}
|
|
249
|
+
function validateLarkConfig(context) {
|
|
250
|
+
const errors = [];
|
|
251
|
+
if (!readString(context, LARK_SECRET_KEYS.appId)) {
|
|
252
|
+
errors.push({
|
|
253
|
+
path: `secrets.${LARK_SECRET_KEYS.appId}`,
|
|
254
|
+
message: "Lark / Feishu App ID is required",
|
|
255
|
+
severity: "error"
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
if (!readString(context, LARK_SECRET_KEYS.appSecret)) {
|
|
259
|
+
errors.push({
|
|
260
|
+
path: `secrets.${LARK_SECRET_KEYS.appSecret}`,
|
|
261
|
+
message: "Lark / Feishu App secret is required",
|
|
262
|
+
severity: "error"
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
const brand = readString(context, LARK_SECRET_KEYS.brand);
|
|
266
|
+
if (brand && !["feishu", "lark"].includes(brand)) {
|
|
267
|
+
errors.push({
|
|
268
|
+
path: `secrets.${LARK_SECRET_KEYS.brand}`,
|
|
269
|
+
message: "Workspace brand must be feishu or lark",
|
|
270
|
+
severity: "error"
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
const defaultAs = readString(context, LARK_SECRET_KEYS.defaultAs);
|
|
274
|
+
if (defaultAs && !["bot", "user", "auto"].includes(defaultAs)) {
|
|
275
|
+
errors.push({
|
|
276
|
+
path: `secrets.${LARK_SECRET_KEYS.defaultAs}`,
|
|
277
|
+
message: "Default identity must be bot, user, or auto",
|
|
278
|
+
severity: "error"
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
const strictMode = readString(context, LARK_SECRET_KEYS.strictMode);
|
|
282
|
+
if (strictMode && !["bot", "user", "off"].includes(strictMode)) {
|
|
283
|
+
errors.push({
|
|
284
|
+
path: `secrets.${LARK_SECRET_KEYS.strictMode}`,
|
|
285
|
+
message: "Strict mode must be bot, user, or off",
|
|
286
|
+
severity: "error"
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
return { valid: errors.filter((error) => error.severity === "error").length === 0, errors };
|
|
290
|
+
}
|
|
291
|
+
var plugin = definePlugin(manifest, (api) => {
|
|
292
|
+
api.addSecretFields(secretFields);
|
|
293
|
+
api.addSkills({
|
|
294
|
+
entries: [
|
|
295
|
+
{
|
|
296
|
+
id: PLUGIN_ID,
|
|
297
|
+
name: manifest.name,
|
|
298
|
+
description: manifest.description,
|
|
299
|
+
env: {
|
|
300
|
+
LARKSUITE_CLI_CONFIG_DIR: LARK_CONFIG_DIR
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
]
|
|
304
|
+
});
|
|
305
|
+
api.addCLI([
|
|
306
|
+
{
|
|
307
|
+
name: "lark-cli",
|
|
308
|
+
command: "lark-cli",
|
|
309
|
+
description: "Lark / Feishu CLI for workspace docs, messages, Base, and workflow commands",
|
|
310
|
+
env: {
|
|
311
|
+
LARKSUITE_CLI_CONFIG_DIR: LARK_CONFIG_DIR
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: "meegle",
|
|
316
|
+
command: "meegle",
|
|
317
|
+
description: "Meegle CLI for Lark Project work items, schedules, views, and workflows"
|
|
318
|
+
}
|
|
319
|
+
]);
|
|
320
|
+
api.addRuntimeDependencies(runtimeDependencies);
|
|
321
|
+
api.addSkillSources(skillSources);
|
|
322
|
+
api.addCredentialFiles(
|
|
323
|
+
LARK_CONFIG_PATHS.map((path) => ({
|
|
324
|
+
envKey: LARK_CREDENTIALS_JSON_ENV,
|
|
325
|
+
path,
|
|
326
|
+
mode: "0600"
|
|
327
|
+
}))
|
|
328
|
+
);
|
|
329
|
+
api.addVerificationChecks([
|
|
330
|
+
installedCheck("lark-cli-installed", "Lark CLI installed", ["lark-cli", "--version"]),
|
|
331
|
+
installedCheck("meegle-cli-installed", "Meegle CLI installed", ["meegle", "version"]),
|
|
332
|
+
{
|
|
333
|
+
id: "lark-cli-auth-status",
|
|
334
|
+
label: "Lark CLI auth status",
|
|
335
|
+
kind: "command",
|
|
336
|
+
command: ["lark-cli", "auth", "status"],
|
|
337
|
+
timeoutMs: 15e3,
|
|
338
|
+
risk: "safe",
|
|
339
|
+
requiredEnv: [LARK_CREDENTIALS_JSON_ENV]
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
id: "lark-skills-mounted",
|
|
343
|
+
label: "Lark skills mounted",
|
|
344
|
+
kind: "command",
|
|
345
|
+
command: ["test", "-f", `${SKILLS_MOUNT}/lark-im/SKILL.md`],
|
|
346
|
+
timeoutMs: 5e3,
|
|
347
|
+
risk: "safe"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
id: "meegle-skill-mounted",
|
|
351
|
+
label: "Meegle skill mounted",
|
|
352
|
+
kind: "command",
|
|
353
|
+
command: ["test", "-f", `${SKILLS_MOUNT}/meegle/SKILL.md`],
|
|
354
|
+
timeoutMs: 5e3,
|
|
355
|
+
risk: "safe"
|
|
356
|
+
}
|
|
357
|
+
]);
|
|
358
|
+
api.onBuildConfig(buildSkillConfig);
|
|
359
|
+
api.onBuildEnv(buildRuntimeEnv);
|
|
360
|
+
api.onBuildPrompt(
|
|
361
|
+
() => "Use Lark / Feishu through `lark-cli` and the mounted lark-* skills. Use Meegle through the `meegle` CLI and the mounted meegle skill. Prefer read-only lookups first, cite the exact command used, and ask for explicit approval before sending messages, editing docs, updating Base records, changing project work items, or taking destructive actions."
|
|
362
|
+
);
|
|
363
|
+
api.onValidate(validateLarkConfig);
|
|
364
|
+
api.onHealthCheck(
|
|
365
|
+
async (context) => buildLarkCredentialsJson(context) ? { healthy: true, message: "Lark CLI config is ready for runtime injection" } : { healthy: false, message: "Missing Lark CLI App ID or App secret" }
|
|
366
|
+
);
|
|
367
|
+
});
|
|
368
|
+
var lark_default = attachConnectorRuntimeAssets(plugin, {
|
|
369
|
+
runtimeDependencies,
|
|
370
|
+
skillSources,
|
|
371
|
+
skillsMountPath: SKILLS_MOUNT,
|
|
372
|
+
sanityCommands: [
|
|
373
|
+
"/runtime-deps/bin/lark-cli --version",
|
|
374
|
+
"/runtime-deps/bin/meegle version",
|
|
375
|
+
`test -f /plugin-skills/lark-im/SKILL.md`,
|
|
376
|
+
`test -f /plugin-skills/meegle/SKILL.md`
|
|
377
|
+
]
|
|
378
|
+
});
|
|
379
|
+
export {
|
|
380
|
+
lark_default as default
|
|
381
|
+
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
connectorField,
|
|
3
3
|
connectorManifest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-PSK2SYZ3.js";
|
|
5
|
+
import "./chunk-OYY64ZSX.js";
|
|
6
6
|
import {
|
|
7
7
|
defineConnectorPlugin
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-RMDY3W4V.js";
|
|
9
9
|
import "./chunk-R5U7XKVJ.js";
|
|
10
10
|
|
|
11
11
|
// src/plugins/linear/index.ts
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
connectorField,
|
|
4
4
|
connectorManifest
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-F6CQ6GAG.js";
|
|
6
|
+
import "./chunk-6V7MW4HU.js";
|
|
7
7
|
import {
|
|
8
8
|
defineConnectorPlugin
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-Y5BJ3EW2.js";
|
|
10
10
|
import "./chunk-AD3JTIU3.js";
|
|
11
11
|
|
|
12
12
|
// src/plugins/linear/index.ts
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
attachConnectorRuntimeAssets,
|
|
3
3
|
connectorField,
|
|
4
4
|
connectorManifest
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-PSK2SYZ3.js";
|
|
6
|
+
import "./chunk-OYY64ZSX.js";
|
|
7
7
|
import {
|
|
8
8
|
defineConnectorPlugin
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-RMDY3W4V.js";
|
|
10
10
|
import "./chunk-R5U7XKVJ.js";
|
|
11
11
|
|
|
12
12
|
// src/plugins/lovart/index.ts
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
attachConnectorRuntimeAssets,
|
|
4
4
|
connectorField,
|
|
5
5
|
connectorManifest
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-F6CQ6GAG.js";
|
|
7
|
+
import "./chunk-6V7MW4HU.js";
|
|
8
8
|
import {
|
|
9
9
|
defineConnectorPlugin
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Y5BJ3EW2.js";
|
|
11
11
|
import "./chunk-AD3JTIU3.js";
|
|
12
12
|
|
|
13
13
|
// src/plugins/lovart/index.ts
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
connectorField,
|
|
4
4
|
connectorManifest
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-F6CQ6GAG.js";
|
|
6
|
+
import "./chunk-6V7MW4HU.js";
|
|
7
7
|
import {
|
|
8
8
|
defineConnectorPlugin
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-Y5BJ3EW2.js";
|
|
10
10
|
import "./chunk-AD3JTIU3.js";
|
|
11
11
|
|
|
12
12
|
// src/plugins/meta-ads/index.ts
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
connectorField,
|
|
3
3
|
connectorManifest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-PSK2SYZ3.js";
|
|
5
|
+
import "./chunk-OYY64ZSX.js";
|
|
6
6
|
import {
|
|
7
7
|
defineConnectorPlugin
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-RMDY3W4V.js";
|
|
9
9
|
import "./chunk-R5U7XKVJ.js";
|
|
10
10
|
|
|
11
11
|
// src/plugins/meta-ads/index.ts
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
connectorField,
|
|
3
3
|
connectorManifest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-PSK2SYZ3.js";
|
|
5
|
+
import "./chunk-OYY64ZSX.js";
|
|
6
6
|
import {
|
|
7
7
|
defineConnectorPlugin
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-RMDY3W4V.js";
|
|
9
9
|
import "./chunk-R5U7XKVJ.js";
|
|
10
10
|
|
|
11
11
|
// src/plugins/miclaw/index.ts
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
connectorField,
|
|
4
4
|
connectorManifest
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-F6CQ6GAG.js";
|
|
6
|
+
import "./chunk-6V7MW4HU.js";
|
|
7
7
|
import {
|
|
8
8
|
defineConnectorPlugin
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-Y5BJ3EW2.js";
|
|
10
10
|
import "./chunk-AD3JTIU3.js";
|
|
11
11
|
|
|
12
12
|
// src/plugins/miclaw/index.ts
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
attachConnectorRuntimeAssets,
|
|
4
|
+
connectorField,
|
|
5
|
+
connectorManifest
|
|
6
|
+
} from "./chunk-F6CQ6GAG.js";
|
|
7
|
+
import "./chunk-6V7MW4HU.js";
|
|
8
|
+
import {
|
|
9
|
+
defineConnectorPlugin
|
|
10
|
+
} from "./chunk-Y5BJ3EW2.js";
|
|
11
|
+
import "./chunk-AD3JTIU3.js";
|
|
12
|
+
|
|
13
|
+
// src/plugins/nature-skills/index.ts
|
|
14
|
+
var PLUGIN_ID = "nature-skills";
|
|
15
|
+
var SKILLS_MOUNT = `/workspace/.agents/plugin-skills/${PLUGIN_ID}`;
|
|
16
|
+
var RUNTIME_MOUNT = `/opt/shadow-plugin-deps/${PLUGIN_ID}`;
|
|
17
|
+
var PYTHON_DEPS_PATH = `${RUNTIME_MOUNT}/python`;
|
|
18
|
+
var ACADEMIC_SEARCH_SERVER = `${SKILLS_MOUNT}/nature-academic-search/mcp-server/academic_search_server.py`;
|
|
19
|
+
var ACADEMIC_SEARCH_SERVER_DIR = `${SKILLS_MOUNT}/nature-academic-search/mcp-server`;
|
|
20
|
+
var manifest = connectorManifest({
|
|
21
|
+
id: "nature-skills",
|
|
22
|
+
name: "Nature Skills",
|
|
23
|
+
description: "Nature Skills mounts academic writing, polishing, citation, paper reading, figure, reviewer response, paper-to-PPT, data availability, and literature search workflows.",
|
|
24
|
+
category: "productivity",
|
|
25
|
+
icon: "microscope",
|
|
26
|
+
website: "https://github.com/Yuan1z0825/nature-skills",
|
|
27
|
+
docs: "https://github.com/Yuan1z0825/nature-skills",
|
|
28
|
+
fields: [
|
|
29
|
+
connectorField("PUBMED_EMAIL", "PubMed email", {
|
|
30
|
+
description: "Optional email used by NCBI E-utilities for academic search workflows.",
|
|
31
|
+
required: false,
|
|
32
|
+
sensitive: false,
|
|
33
|
+
placeholder: "researcher@example.com",
|
|
34
|
+
helpUrl: "https://www.ncbi.nlm.nih.gov/books/NBK25497/"
|
|
35
|
+
}),
|
|
36
|
+
connectorField("NCBI_API_KEY", "NCBI API key", {
|
|
37
|
+
description: "Optional NCBI API key for higher PubMed rate limits.",
|
|
38
|
+
required: false,
|
|
39
|
+
placeholder: "ncbi_...",
|
|
40
|
+
helpUrl: "https://www.ncbi.nlm.nih.gov/account/settings/"
|
|
41
|
+
}),
|
|
42
|
+
connectorField("SEMANTIC_SCHOLAR_API_KEY", "Semantic Scholar API key", {
|
|
43
|
+
description: "Optional Semantic Scholar API key for literature search workflows.",
|
|
44
|
+
required: false,
|
|
45
|
+
placeholder: "sk-...",
|
|
46
|
+
helpUrl: "https://api.semanticscholar.org/"
|
|
47
|
+
})
|
|
48
|
+
],
|
|
49
|
+
authType: "none",
|
|
50
|
+
capabilities: ["tool", "data-source", "action", "cli", "mcp"],
|
|
51
|
+
tags: [
|
|
52
|
+
"nature",
|
|
53
|
+
"academic-writing",
|
|
54
|
+
"paper-reading",
|
|
55
|
+
"citation",
|
|
56
|
+
"figures",
|
|
57
|
+
"literature-search",
|
|
58
|
+
"review-response",
|
|
59
|
+
"ppt"
|
|
60
|
+
],
|
|
61
|
+
popularity: 84
|
|
62
|
+
});
|
|
63
|
+
var runtimeDependencies = [
|
|
64
|
+
{
|
|
65
|
+
id: "nature-skills-python-prereqs",
|
|
66
|
+
kind: "system-package",
|
|
67
|
+
packages: ["python3", "py3-pip"],
|
|
68
|
+
description: "Python and pip for Nature skill helper scripts"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: "nature-academic-search-python-packages",
|
|
72
|
+
kind: "shell",
|
|
73
|
+
command: [
|
|
74
|
+
"python3 -m pip install --no-cache-dir --target /runtime-deps/python 'mcp>=1.0.0' 'requests>=2.28.0' 'toml>=0.10.2' 'lxml>=4.9.0'"
|
|
75
|
+
],
|
|
76
|
+
description: "Python dependencies for the bundled academic-search MCP server"
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
var skillSources = [
|
|
80
|
+
{
|
|
81
|
+
id: "nature-skills",
|
|
82
|
+
kind: "git",
|
|
83
|
+
url: "https://github.com/Yuan1z0825/nature-skills.git",
|
|
84
|
+
ref: "main",
|
|
85
|
+
from: "skills",
|
|
86
|
+
targetPath: SKILLS_MOUNT,
|
|
87
|
+
includePattern: "nature-*",
|
|
88
|
+
description: "Nature-style academic writing, figure, citation, reader, and search skills"
|
|
89
|
+
}
|
|
90
|
+
];
|
|
91
|
+
var plugin = defineConnectorPlugin(manifest, {
|
|
92
|
+
mcp: {
|
|
93
|
+
id: "nature-academic-search",
|
|
94
|
+
transport: "stdio",
|
|
95
|
+
command: "python3",
|
|
96
|
+
args: [ACADEMIC_SEARCH_SERVER],
|
|
97
|
+
env: {
|
|
98
|
+
PYTHONPATH: `${PYTHON_DEPS_PATH}:${ACADEMIC_SEARCH_SERVER_DIR}`
|
|
99
|
+
},
|
|
100
|
+
description: "Unified academic search MCP server for CrossRef, PubMed, arXiv, citation formatting, and MeSH lookup"
|
|
101
|
+
},
|
|
102
|
+
runtimeDependencies,
|
|
103
|
+
skillSources,
|
|
104
|
+
verificationChecks: [
|
|
105
|
+
{
|
|
106
|
+
id: "nature-skills-mounted",
|
|
107
|
+
label: "Nature skills mounted",
|
|
108
|
+
kind: "command",
|
|
109
|
+
command: ["test", "-f", `${SKILLS_MOUNT}/nature-reader/SKILL.md`],
|
|
110
|
+
timeoutMs: 5e3,
|
|
111
|
+
risk: "safe"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: "nature-academic-search-mounted",
|
|
115
|
+
label: "Nature academic-search MCP server mounted",
|
|
116
|
+
kind: "command",
|
|
117
|
+
command: ["test", "-f", ACADEMIC_SEARCH_SERVER],
|
|
118
|
+
timeoutMs: 5e3,
|
|
119
|
+
risk: "safe"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "nature-academic-search-python-deps",
|
|
123
|
+
label: "Nature academic-search Python dependencies importable",
|
|
124
|
+
kind: "command",
|
|
125
|
+
command: ["python3", "-c", "import mcp, requests, toml, lxml"],
|
|
126
|
+
timeoutMs: 2e4,
|
|
127
|
+
risk: "safe"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
env: () => ({
|
|
131
|
+
PYTHONPATH: PYTHON_DEPS_PATH
|
|
132
|
+
}),
|
|
133
|
+
prompt: "Use Nature Skills for Nature-style academic writing, paper reading, bilingual markdown readers, scientific figures, citation verification, data availability statements, reviewer responses, journal-club decks, and literature search. Prefer source-grounded outputs and preserve citation provenance."
|
|
134
|
+
});
|
|
135
|
+
var nature_skills_default = attachConnectorRuntimeAssets(plugin, {
|
|
136
|
+
runtimeDependencies,
|
|
137
|
+
skillSources,
|
|
138
|
+
runtimeImage: "node:22-bookworm-slim",
|
|
139
|
+
skillsMountPath: SKILLS_MOUNT
|
|
140
|
+
});
|
|
141
|
+
export {
|
|
142
|
+
nature_skills_default as default
|
|
143
|
+
};
|