Install
Inside DeepSeek Harness, with dsh-market
dsh plugin --profile web add dshmarket
Or from the command line
dsh plugin --profile web add dsh-msg-hub
Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.
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
Comments
Comments live in GitHub Discussions. Sign in with GitHub to post or react.