Install verification: runtime verified (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it doesAI
DSH channel plugin bridging WeChat ClawBot messages to DSH sessions, with QR-code login, /model switching and a settings panel.
- Bidirectional WeChat <-> DSH messaging: text, images, transcribed voice
- QR-code bind/rebind; shares ClawBot credentials with OpenClaw safely
- /model command to view and switch session model; panel in DSH Web settings
Capability tags are AI-inferred or rule-extracted from the README (see badge) — vocabulary-limited, not install-verified. AI = inferred; README = literal keyword from the readme.
Installation
dsh plugin --profile web add dsh-plugin-clawbotInstall method: npm · runtime verified (L5)
Verification & Compatibility
Grouped by plugin version: each card lists the dsh versions actually tested against that artifact version and their install verdicts (L5 wins). Untested combinations are omitted — absence means untested, never assumed compatible. L1–L3 are a plugin-level static archive (independent of the dsh version — the same verdict on every dsh row): they sit in each row's level grid next to L4/L5, marked "static", while their evidence is stored once per plugin inside that row's "checks & evidence" instead of being duplicated per version.
External credentials (plugin-level): none detected
○ The author declares no dsh version requirement — install is not blocked by version.
| plugin \ dsh | dsh 0.2.1-rc.2 current | dsh 0.2.1-alpha.2 |
|---|---|---|
| 0.6.0 | ✓ | ✗ |
| v0.6.0 | · | · |
0.6.0npm✓ 1 runtime-verified1 failed2026-10-20
dsh-plugin-clawbot
✓dsh 0.2.1-rc.2current2026-10-20L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: npm · dsh-plugin-clawbot@0.6.0
ID: dsh-plugin-clawbot@0.6.0@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-20 · expires: 2026-10-27
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✗dsh 0.2.1-alpha.22026-10-15L5 · failed
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • Plugin artifact: npm · dsh-plugin-clawbot@0.6.0
ID: dsh-plugin-clawbot@0.6.0@dsh0.2.1-alpha.2 · profile: l3-fullscan
Issued: 2026-10-15 · expires: 2026-10-22
View checks & evidence
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
v0.6.0github2026-10-14
https://github.com/zhuweiyou/dsh-plugin-clawbot
No runtime install test for this version (static scan only) — compatibility unknown, never assumed.
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/dsh-plugin-clawbot/)``[](https://www.dsh.so/artifact/dsh-plugin-clawbot/)`Security Report
Two automated layers, neither a manual review: a static scan (per-plugin rule checks) and a model-driven dynamic security audit that covers only the subset static-flagged at warn or above and never executes plugin code.
Static low, dynamic medium — stricter wins → overall medium.
v0.6.0dsh manifest0.6.0npm2026-10-210.6.0same versionclean · npmVet is an AST static scan (npm artifact or git source).
show static findings (6)
- warningnetIp · network
lib/config.js:119baseUrl: (_c = (_b = env.DSH_BASE_URL) != null ? _b : (_a2 = file.dsh) == null ? void 0 : _a2.baseUrl) != null ? _c : "http://127.0.0.1:3080 - warningfsWrite · files
lib/config.js:53fs.writeFileSync(path.join(dir, "accounts.json"), JSON.stringify([...existing, accountId], null, 2), "utf-8"); - warningfsWrite · files
lib/config.js:59fs.writeFileSync(path.join(weixinStateDir(), "accounts.json"), JSON.stringify(updated, null, 2), "utf-8"); - warningfsWrite · files
lib/config.js:76fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8"); - warningnetIp · network
lib/dsh.js:303const { httpBase, wsBase } = splitBases(baseUrl != null ? baseUrl : "http://127.0.0.1:3080"); - warningfsWrite · files
lib/state.js:81fs.writeFileSync(tmp, JSON.stringify(value, null, 2), "utf-8");
show 3 audit findings
- mediumallowFrom defaults to empty, so every WeChat sender can drive a local DSH agent session
lib/config.js:127With the shipped defaults the sender filter in lib/manager.js (`if (this.wxCfg.allowFrom.length > 0 && !this.wxCfg.allowFrom.includes(fromUserId))`) is skipped, so any WeChat user who can message the bound ClawBot is queued into processForPeer, gets a DSH session created in the configured cwd and can prompt the agent, which exposes whatever tools/filesystem access the agent has. There is no authentication of the sender beyond this list.
- mediumState-changing /clawbot/api endpoints protected only by Host header, no Origin/CSRF validation
lib/index.js:95isLoopbackHost only rejects DNS-rebinding style requests. A page on any website the user visits can issue a CORS-simple cross-site POST (e.g. content-type text/plain with body "{}") to /clawbot/api/unbind, /clawbot/api/login/start or /clawbot/api/login/cancel; readBody accepts JSON regardless of content-type, so the side effect runs. Concrete result: the stored WeChat credentials are deleted and the bridge is paused (lib/manager.js unbind -> clearAccount), or repeated login flows are triggered.
- lowRemote-supplied accountId used unsanitised in filesystem paths
lib/config.js:75saveAccount is called from lib/manager.js with accountId taken from the WeChat QR-confirm response (resp.ilink_bot_id), and clearAccount unlinks `${accountId}.json|.sync.json|.context-tokens.json`. A malicious or compromised ilink endpoint returning an id containing path separators could make the plugin write/delete files outside the accounts directory. Requires control of the upstream HTTPS endpoint, so impact is limited.
Strong guards (CDN allowlist, size caps, 0600 token files), but the loopback /clawbot/api routes lack Origin/CSRF checks and allowFrom defaults to accept every WeChat sender.
Rule: the dynamic audit can only raise risk, never lower it (raise-only, never an exemption); a wrong raise is withdrawn by human review and the tier falls back to the static verdict. Overall verdict = the stricter of the two layers.
Disclaimer: the static scan and the dynamic security audit are both automated analysis, not a security guarantee. Always review what you install.
Activity
Last commit 2026-10-18 · activity: Active
• Repo created: 2026-09-01
• Stars: ★ 1 · Forks: 0
• Health: Active — committed within last 30 days
Source
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
