DeepSeek Harness Plugin

MichengAI/dsh-im-connect

Stars ★ 1 Category Notifications & Integrations Added 2026-08-18 npm @michengai/dsh-im-connect

Connects WeChat, WeCom, DingTalk, Feishu, Lark, QQ, and Telegram to a local DeepSeek Harness agent, with each IM chat as a separate workspace channel.

Install

# from npm (prebuilt)

dsh plugin --profile web add @michengai/dsh-im-connect

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:MichengAI/dsh-im-connect

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. Only install sources you trust, and pin a commit (github:owner/repo#sha).

README

DSH IM Connect

Connect Feishu, DingTalk, WeCom, WeChat, QQ, and Telegram to local DeepSeek Harness

简体中文 · Apache-2.0

DSH IM Connect is a community-maintained DeepSeek Harness (DSH) plugin, not an official DeepSeek AI product.

Features

  • Connect DingTalk, Feishu, Lark, WeChat, WeCom, QQ, and Telegram from Settings → IM Assistant.
  • Each IM chat maps to an independent DSH session under the workspace Channels tab, never mixed into web Tasks.
  • Send work, read replies, and approve tools from the phone; model and permission follow the local DSH profile.
  • Bind by QR code or credentials. Secrets go into DSH ctx.credentials, not channels.json.
  • Paste one sentence into DSH, Codex, or WorkBuddy and let that agent install the plugin locally.
  • Groups need no binding, only a mention. DMs allow the QR scanner automatically; everyone else must be approved on the settings page.
  • After a successful bind, the configure dialog closes by itself and Settings stays open.

Who can drive the assistant

Inbound messages are identified before commands, tool approvals, or injection.

Case Behavior
Group without @ Ignored; no reply and no pending request
Group with @ No binding. Anyone can send work
DM from the QR scanner WeChat / Feishu / Lark scanners are allowlisted automatically
DM from anyone else Appears on the settings pending list until approved
DM on credential-only channels Telegram, and DingTalk / WeCom / QQ bound with secrets only, require approval for every DM
DM without a userId Denied
Tool approval Only an allowlisted user in a DM can reply 批准 / 拒绝; group replies do not grant

WeChat is QR-only and DM-only, so the same WeChat account that scanned can talk immediately. A different WeChat account DMing the bot waits for settings approval.

📡 Supported channels

Channel Status How to connect You need
🔔 DingTalk ✅ Ready QR, or Client ID / Secret DingTalk open-platform bot; replies prefer AI Card
🐦 Feishu ✅ Ready QR only; creates the bot automatically Feishu account
🌐 Lark ✅ Ready QR only Lark account
💬 WeChat ✅ Ready* Official iLink QR Dedicated account recommended; DM only
🏢 WeCom ✅ Ready QR (recommended), or Bot ID / Secret WeCom intelligent bot
🐧 QQ ✅ Ready QR, or AppID / AppSecret QQ Open Platform bot, not a personal QQ account
✈️ Telegram ✅ Ready Bot Token only @BotFather; do not enable Webhook on the same bot

✅ Ready = text in and out works | *WeChat = official iLink only, no reverse-engineered personal protocol | Groups still require an @ mention

Screenshots

Connect channels in Settings → IM Assistant. Unconnected cards show Configure; connected cards show a toggle and status:

IM Assistant settings

The workspace splits Tasks and Channels. IM sessions appear only under Channels:

Workspace channel sidebar

WeCom and other QR channels support scan-to-bind:

WeCom QR binding

After connecting, drive the local assistant from each IM:

Prerequisites

  • A working DeepSeek Harness Web installation with dsh available in PowerShell.
  • Examples use the web profile; replace it with the target profile.
  • Source installation and development require Node.js 22+. npm installation does not require running npm install in an arbitrary directory.
  • After install, restart dsh web and hard-refresh the browser before opening Settings → IM Assistant.

Installation

dsh plugin add forwards to pnpm add in the profile directory. Without a version and official registry, a local mirror or minimum-release-age policy can leave you on an older build.

Ask another agent to install it

This plugin runs inside DeepSeek Harness Web. Copy one of the sentences below into DSH, Codex, or WorkBuddy and let that agent install it into your local web profile.

From npm:

Install the latest DSH plugin @michengai/dsh-im-connect into my local web profile using the official npm registry: dsh plugin --profile web add @michengai/dsh-im-connect@latest --registry=https://registry.npmjs.org/. Then run dsh --profile web --dump-config, confirm im-connect is mounted, and remind me to restart DSH Web, hard-refresh the browser, and open Settings → IM Assistant.

From source:

Install the DSH plugin from source at https://github.com/MichengAI/dsh-im-connect: clone it, run npm install and npm test, then run dsh plugin --profile web add . from that directory. Do not copy lib by itself. Then run dsh --profile web --dump-config, confirm im-connect is mounted, and remind me to restart DSH Web, hard-refresh the browser, and open Settings → IM Assistant.
Product How to use it
DSH Send one of the sentences above to the current session.
Codex Send one of the sentences above to Codex and let it install locally.
WorkBuddy Send one of the sentences above to WorkBuddy; for a source install you can also paste https://github.com/MichengAI/dsh-im-connect.

Codex and WorkBuddy only install the plugin. After that, open DSH Web and use Settings → IM Assistant.

You can also run the same npm command yourself:

dsh plugin --profile web add @michengai/dsh-im-connect@latest --registry=https://registry.npmjs.org/

If dsh is not on PATH, replace the leading dsh with npx --yes @deepseek-ai/dsh.

Install the latest package from the official npm registry

Run this from any PowerShell directory:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh plugin --profile web add @michengai/dsh-im-connect@latest --registry=https://registry.npmjs.org/
dsh --profile web --dump-config

To pin a release, replace @latest with a version such as @0.1.1.

The configuration output should contain im-connect. Restart DSH Web and hard-refresh the browser. Do not copy client files manually: dsh plugin add also applies cordis.patch.yml.

Install from source

Use this for debugging or unpublished changes. The cloned directory becomes the plugin source path:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
Set-Location D:\Repository\deepseek-harness-plugin
git clone https://github.com/MichengAI/dsh-im-connect.git
Set-Location .\dsh-im-connect
npm install
npm test
dsh plugin --profile web add .
dsh --profile web --dump-config

Restart DSH Web and hard-refresh the browser. dsh plugin ... add . reads the package metadata and cordis.patch.yml; do not install by copying lib directly.

Usage

Open Settings → IM Assistant, choose the workspace, permission, and model, then connect a channel. The full guide is 使用说明.

Goal Action Notes
Connect a channel Select Configure on an unconnected card, then scan or enter credentials Feishu / Lark / WeChat are QR-only; Telegram needs a Bot Token; the dialog closes after success
Pause receiving Turn off the connected-card toggle Credentials stay; inbound messages pause
Send work from IM The QR scanner can DM immediately; other DMs need settings approval. Groups only need a mention Each chat has its own channel session
Split input End with .. to continue, !! to flush now Default merge window is about 5 seconds
Start a new session Send /new or /clear Affects only the current IM chat
Status / help Send /status or /help Scoped to the current channel session
Approve a stranger DM Open Settings → IM Assistant and approve or deny the pending request Affects DM access only
Approve a tool Reply 批准 or 拒绝 in a DM Also accepts yes / no / allow / reject; group replies cannot grant
Review on the web Open the workspace Channels tab IM sessions never appear under Tasks

DingTalk replies prefer official AI Card streaming and fall back to plain text. Do not enable Webhook on the same Telegram bot.

Permissions and safety limits

Item Current behavior
Access Groups need no binding, only a mention. DMs fail closed: the QR scanner is allowlisted automatically; other DM users must be approved on the settings page
Management API Loopback only (localhost, 127.0.0.1, [::1])
Secrets Prefer DSH ctx.credentials; otherwise %DSH_HOME%\dsh-im-connect\secrets.json
Channel state channels.json stores enablement and credential refs, not raw secrets
Browser payloads Never include tokens, secrets, App Secrets, or raw user identifiers
WeChat protocol Official iLink only; no reverse-engineered personal WeChat protocol
Tool approval Only an allowlisted user in a DM can grant or deny; group chats cannot approve

Do not expose DSH Web beyond this machine. Permission presets follow the host sandbox-policy; full-access does not wrap a sandbox.

Secondary development

This repository develops in src and builds to lib:

  • src\index.ts: host entry, config, and lifecycle.
  • src\manager.ts: channel start/stop, loopback API, and credential persistence.
  • src\engine: session routing, slash commands, approval, splitting, and outbound push.
  • src\channels: DingTalk, Feishu, Lark, WeChat, WeCom, QQ, and Telegram adapters.
  • client.js: settings page and workspace channel sidebar.
  • tests\*.test.mjs: routing, QR, credentials, QQ, delivery, and sidebar tests.

After changing the source, test and install from the local directory:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
npm test
dsh plugin --profile web add .

When changing channel or session logic, keep the engine platform-agnostic, keep adapters from creating agents, and keep web tasks separate from IM channels.

Validation

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
npm test

prepublishOnly runs the tests before publishing.

Documentation and license

Project status, usage boundaries, architecture, and iteration records begin at the documentation entry point. The detailed operational guide is 使用说明. The default security posture is in SECURITY.md.

Licensed under Apache License 2.0.

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →