Connects WeChat, QQ, DingTalk, Lark, and Telegram to DeepSeek Harness with unified configuration, private-chat and group access controls, and channel-side Agent chat and session commands.
Install
# from npm (prebuilt)
dsh plugin --profile web add @wsz987/dsh-channels
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:wsz987/dsh-channels#path:/packages/channels
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
DeepSeek Harness DSH Bundle — built-in messaging channels:
- Weixin / 微信
- QQ Bot
- DingTalk / 钉钉
- Lark / Feishu / 飞书
- Telegram / 电报(Bot API)
Install
npx @deepseek-ai/dsh plugin --profile web add -w @wsz987/dsh-channels@latest
The profile directory is itself a pnpm workspace, so
-w(--workspace-root) is required to add the bundle to the workspace root (otherwise pnpm fails withERR_PNPM_ADDING_TO_ROOT).@latestselects the stable release. Runnpm view @wsz987/dsh-channels dist-tagsto inspect the currentbetaandlatesttargets.
The bundle patch (cordis.patch.yml) references only entrypoints exported by
@wsz987/dsh-channels itself. Those entrypoints delegate to the ChannelService,
the generic attachment compatibility backend, Harness bridge, control plane, Web
settings panel and the five channel adapters through the bundle's own dependency
tree. Every channel can be disabled through its plugin config.
Quick start
# 1. add the bundle to a profile
npx @deepseek-ai/dsh plugin --profile web add -w @wsz987/dsh-channels@latest
# 2. confirm the merged config inserted the channel plugins
npx @deepseek-ai/dsh --profile web --dump-config
# 3. start the profile — all five channels load
npx @deepseek-ai/dsh web
Update and uninstall
# Install or switch package.json to the latest stable release
npx @deepseek-ai/dsh plugin --profile web add -w @wsz987/dsh-channels@latest
# Update within the package.json semver range
npx @deepseek-ai/dsh plugin --profile web update -w @wsz987/dsh-channels
# Remove the bundle; also remove any channels-* overrides from your profile patch
npx @deepseek-ai/dsh plugin --profile web remove -w @wsz987/dsh-channels
Disable a channel you don't use by setting its plugin enabled flag to false
in your profile patch, e.g. plugins.channels-weixin.enabled = false.
See apps/example/minimal-profile/ in the repository for a reference profile.
Verify your install
Use a clean profile to confirm the bundle loads end to end (never reuse a dirty profile for release validation):
# 1. add the bundle to a clean profile (auto-initializes it on first use)
npx @deepseek-ai/dsh plugin --profile release-validation add -w @wsz987/dsh-channels@latest
# 2. dump the merged config — verify the channel plugins were inserted
npx @deepseek-ai/dsh --profile release-validation --dump-config
# 3. start the profile — channels-service / -harness / -control and the five
# adapters (plus channels-web) should all load without error
npx @deepseek-ai/dsh --profile release-validation
Dependencies
The bundle owns every Harness loader entry and its Web client face. Its npm
dependencies provide the implementations behind those entries, so you only
ever install @wsz987/dsh-channels:
| Package | Role |
|---|---|
@wsz987/channel-core |
Cross-channel contract + ChannelService (ctx.channels) |
@wsz987/channel-harness |
Harness bridge (SessionBinding, AgentManager, reply pipeline) |
@wsz987/channel-control |
Config / credentials / auth-session control plane |
@wsz987/channel-files |
Generic attachment compatibility backend (store / extract / read_channel_attachment) |
@wsz987/channel-web |
Web dashboard (Settings > Channels) for GUI setup |
@wsz987/channel-weixin/qq/dingtalk/lark/telegram |
The five channel adapters |
The Web dashboard (@wsz987/channel-web) declares one dynamic client
dependency (@deepseek-ai/dsh-client-locale, provider of the locale
service); React, @deepseek-ai/cordis and the static UI libraries
(-ui-primitives, -ui-slots) are shell-owned identities the Harness web app
compiles in — nothing extra to install for that panel beyond a Harness
version that ships them.
Selecting adapters
The individual adapter packages do not currently carry their own dsh.bundle
profile patches, so installing one with plugin add is not a complete Harness
setup. Install @wsz987/dsh-channels, then disable or override unwanted
channels-* rows in the profile patch. See apps/example/minimal-profile/ for
the complete row shapes.
Architecture
Messaging Platform
│
▼
Upstream Driver
│
▼
Channel Adapter (channel-weixin/qq/dingtalk/lark/telegram)
│
▼
ChannelService (Cordis Service, ctx.channels)
│
▼
Harness Bridge (channel-harness)
│
▼
DeepSeek Harness Agent / Session
- Adapters never touch
ctx.agents. - The Harness bridge is the only place allowed to import Harness public APIs.
- Replies flow from
session/eventback through the bridge to the adapters.
Development
pnpm --filter @wsz987/dsh-channels build
pnpm --filter @wsz987/dsh-channels typecheck
pnpm --filter @wsz987/dsh-channels test
Related
License
Links
More in this category
xmanrui/dsh-im★ 1589
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★ 1505
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★ 649
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★ 85
Desktop notifications for turn completions, with per-outcome controls and keyword rules.
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.
THEWOLFWALKER/dsh-notifier★ 55
DSH notification & remote-control plane: one `notify()` API across 28 outbound channels, six inbound control channels, phone approvals/questions/task control, a Native DSH Notify & Control UI, live outbound hot-apply, multi-agent routing, and zero runtime dependencies.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.