IM channel bridge: WeChat (ilinkai) / QQ / Feishu with proactive push — wake the channel bot from scheduled tasks and deliver AI replies to your phone.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-msg-hub
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:AbcdefgXW/dsh-msg-hub
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
An IM channel bridge plugin for dsh (DeepSeek Harness): connects WeChat (ilinkai) / QQ (Open Platform) / Feishu (Open Platform) messages into dsh agent sessions, with proactive push support (wake the channel bot and deliver the AI reply back to your phone — for scheduled tasks etc.).
Features
- 📱 WeChat: ilinkai simulated protocol (QR login), text / image / voice send/receive
- 💬 QQ: Tencent Open Platform official WebSocket channel, text / image / voice (C2C / group)
- 📡 Feishu: Feishu Open Platform official API (app credentials), text / image / voice (P2P / group)
- 🖼️ Images & voice (supported on all three channels):
- Images: downloaded into
.im-media/<channel>/<date>/in the workspace; only the path enters the session and the agent views it withread_image— dsh natively supports image input and auto-degrades for text-only models; kept 7 days by default (DSH_MSG_HUB_MEDIA_KEEP_DAYS) - Voice: transcribed to text before entering the session (models cannot listen to audio). QQ uses the official
asr_refer_text(free, instant, more accurate than self-hosted ASR) and falls back to self-hosted ASR when empty - WeChat voice: official CDN download → AES-128-ECB decrypt → silk→WAV transcode (
silk-wasm) → self-hosted ASR - Self-hosted ASR setup: put
DASHSCOPE_API_KEYinstate/asr.env; voice is skipped when unset, text and images are unaffected - Retention: media lives in date-based folders and is swept at most once per day on write
- Images: downloaded into
- 🩺 Diagnostic log:
state/logs/bridge-debug.logwith built-in size rotation (default 5MB × 3) and daily log cleanup (default 14 days); tune viaDSH_MSG_HUB_LOG_MAX_BYTES/DSH_MSG_HUB_LOG_KEEP/DSH_MSG_HUB_LOG_KEEP_DAYS - 🧩 Proactive push service (
dsh-channels-pushcordis service):push({channel, peerId, text}): send text directly to IMtask({channel, peerId, prompt}): wake the channel agent to run a task; the AI reply is delivered back to the IM automatically- Consumed by plugins like dsh-toolbox-web's scheduled heartbeat (channel push is unavailable without this plugin; everything else is unaffected)
- 📡 Remote monitoring (keep an eye on tasks away from the computer):
- Remote approval: when the bound session's agent requests approval, the request is pushed to IM (tool name / reason / command detail); reply "批准" or "拒绝" to answer; 5-minute timeout falls back to rejected (safe default)
- Turn push: task started / finished / errored / blocked notifications for the bound session
- Session commands:
/sessionslists the 5 most recent sessions (name+ID),/bind <sessionId>binds,/statusshows the binding
Requirements
- dsh runtime (cordis plugin, registered in the dsh web profile)
- Node.js ≥ 22.13
- Per-channel credentials: WeChat QR / QQ AppID+Secret / Feishu AppID+Secret
Installation
Installation
# Option 1: npm package (recommended)
dsh plugin --profile web add dsh-msg-hub
# Option 2: GitHub repository
dsh plugin --profile web add github:AbcdefgXW/dsh-msg-hub
# Option 3: manual
git clone https://github.com/AbcdefgXW/dsh-msg-hub.git
cd dsh-msg-hub && npm install
```bash
git clone https://github.com/USER/dsh-msg-hub.git
cd dsh-msg-hub && npm install
cd $DSH_HOME/profiles/web && pnpm link /path/to/dsh-msg-hub
Register in cordis.patch.yml:
- insert:
- id: dsh-msg-hub
name: dsh-msg-hub
Restart dsh web.
Channel connection guide
WeChat (ilinkai QR login)
node scripts/weixin-login.mjs login
- A QR code appears in the terminal — scan it with the WeChat app
- On success the token is saved to
state/weixin/; restart dsh to activate - A dedicated WeChat account is recommended (simulated protocol — see "Safety Notes" for risk-control warnings)
QQ (Open Platform official bot, two options)
First register a bot app on the QQ Open Platform to get AppID and AppSecret:
# Option A: credentials directly (recommended once the bot exists)
node scripts/qq-login.mjs --appid <AppID> --secret <AppSecret>
# Option B: QR binding (requires an existing bot under this QQ account)
node scripts/qq-login.mjs
Restart dsh after configuring. ⚠️ Proactive pushes additionally require applying for "proactive message permission" on the Open Platform, otherwise they fail silently (passive replies are unaffected).
Feishu (Open Platform enterprise self-built app)
- Create an "enterprise self-built app" on the Feishu Open Platform → enable the bot capability → publish the app
- Copy AppID and AppSecret from the app's "Credentials & Basic Info" page (needs app admin permission)
node scripts/feishu-login.mjs --appid <AppID> --secret <AppSecret>
Restart dsh after configuring.
Credentials are stored under the plugin
state/dir (gitignored, never committed); all three channels can run simultaneously.
Environment Variables
| Variable | Purpose | Default |
|---|---|---|
DSH_CHANNELS_STATE_DIR |
channel state dir (credentials/logs/data) | plugin state/ dir |
DSH_CHANNELS_CWD |
channel agent workspace root | /workspace |
Safety Notes
- WeChat (ilinkai) uses a simulated web protocol (not an official API) — frequent proactive messaging carries account risk-control risk; keep push frequency low (scheduled interval ≥ 15 minutes)
- QQ proactive messages require applying for "proactive message permission" on the Open Platform; without it, proactive pushes fail silently (passive replies are unaffected)
- Feishu uses the official API — compliant and safe
- Credentials live in
state/(excluded via.gitignore) — never commit them
License
MIT
Links
More in this category
xmanrui/dsh-im★ 1548
Connect IM bots to DeepSeek Harness via QR codes or bot credentials (9 channels: Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp).
shaobeichen/dsh-pocket★ 1415
Remote phone access to the DSH Web UI: scan a QR code for LAN or public (cloudflared tunnel) access with real-time sync, a mobile-adaptive layout, and a settings tab.
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 574
Connects DeepSeek Harness to Avernet's Bot Collaboration Network over WebSocket V2, with automatic onboarding, isolated agent sessions, tool-call events, and multi-bot routing tools.
omdsh-dev/dsh-notification★ 86
Desktop notifications for turn completions, with per-outcome controls and keyword rules.
whyihaveyou/dsh-suite#plugin-notify★ 57
IM webhook and local notifications on turn completion, errors, or approval (Feishu/WeCom/DingTalk/Slack/Discord/custom).
omdsh-dev/dsh-lark★ 55
Lark/Feishu bot channel for DeepSeek Harness: each chat drives its own agent, and tool approvals, model questions, and plan reviews return as cards answered by a button or a reply. Switch workspace and model from the chat (`/cd`, `/model`, `/new`), and run several bots that keep separate sessions and can hand turns to each other in one group.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.