Pushes DSH approval and question cards to IM channels (WeChat first) and answers them from chat, with a session console, per-channel security, and an open push service.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-reach
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:PerryLink/dsh-reach
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
dsh plugin --profile <name> add dsh-reach
English | 简体中文 | Español | Português | हिन्दी
Multi-channel decision & remote-control bridge for DeepSeek Harness (DSH): pushes any workspace's approval/question cards to IM channels (WeChat iLink, Telegram, Feishu — plus QQ/DingTalk/WeCom v2 drop-in foundations) and answers them from chat, with a session console, per-channel security, and an open push service.
Status: Phase 1–3 complete (WeChat + Telegram + Feishu channels, v0.1.22); v2 channel foundations (QQ/DingTalk/WeCom) on the open
reachChannelsregistry. The design plan, competitor research, official contract verification, and phased roadmap live indocs/design/03-rebuild-direction-and-plan.md. Release (GitHub repo + npm publish) follows in a dedicated session.
📖 Ecosystem knowledge base — measured data, not marketing: plugin development guide · plugin-selection data · maintenance criteria.
Install
dsh plugin --profile web add github:PerryLink/dsh-reach
# npm channel (published releases)
dsh plugin --profile web add dsh-reach
# git channel (latest main)
dsh plugin --profile web add github:PerryLink/dsh-reach
# alternates
npx @deepseek-ai/dsh plugin --profile web add dsh-reach
dsh1024 plugin --profile web add dsh-reach
Restart DSH after installation (bundle patches apply at startup).
⭐ 如果它帮到了你
这个插件是 DSH 插件家族的一员(95 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
English: part of a 95 plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.
What is dsh-reach?
Full evidence, including the host-version compatibility matrix: dsh-plugin-supersession-review-20261005.md.
Workflow overview: install → open panel → act. The examples below use the real command surface.
Maintenance status: 🧊 FROZEN
Frozen on 2026-10-05. No new features. This package still works, and it is not retired — but it no longer receives feature work. Only a genuine breakage will be fixed.
Maintainers treat this capability as one where better-adopted alternatives now exist, so effort has moved elsewhere. The comparison below was measured on 2026-10-05 and is recorded so nobody has to redo it.
| package | weekly downloads | |
|---|---|---|
| this package | dsh-reach |
600 |
| better-adopted alternative | @xmanrui/dsh-im |
17,384 |
Why the alternative leads. @xmanrui/dsh-im provides ten channels — WeChat, Feishu, WeCom, DingTalk, QQ, Telegram, WhatsApp, Slack, Discord and Matrix.
Compatibility. declares no dsh peers, so the compatibility guard never blocks it.
What this package still does that the alternatives do not. this package's differentiator was that the same bridge carried approvals and questions back into chat; the rival is far broader in channel coverage
👉 For new work, prefer @xmanrui/dsh-im. Existing installs keep working unchanged; nothing is being removed.
Full evidence, including the host-version compatibility matrix: dsh-plugin-supersession-review-20261005.md.
Compatibility
| Surface | Status |
|---|---|
| Harness | DeepSeek Harness dsh-v0.2.1-alpha.1 (GitHub tag). Peer range >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0; the dev/test pins deliberately stay on the published 0.1.7-rc.2 line, which is the face the typecheck:ci ruler measures (the plain typecheck ruler measures the checkout through tsconfig.json paths). Verified 2026-09-24 with the full gate chain; the bare-import + scratch-profile + keyless smoke run in the Compat workflow on every PR. |
| Node | ^22.19.0 || >=24.0.0 |
Features (Phase 1)
- Cross-session decision push: approval/question cards from ANY workspace
are mirrored to WeChat (iLink/ClawBot) with stable
#tokenids andP{n}numbering; reply1/2,P1=1 P2=2,P1=Q1=2, or/rp/rq— answered through the native pending waterfall (first reply wins with the GUI). - Fail-closed security: first sender becomes the owner; empty allowlists deny everyone; unknown senders are audited and never answered.
- Session console:
/status /silent /notify /tasks /enter /history /stop /next /helpplus native DSH command passthrough. - Proactive push: the
reach_sendtool with an outbound file fence; rate budget + FIFO re-queue; silent mode; background completion notices. - Settings tab: Settings → Plugins → IM Bridge (status, switches, re-scan/logout).
- Open channel registry: third-party plugins register a channel via
ctx.get('reachChannels').registerChannel({ id, adapter, priority, ownsChatId, startMonitor }); routing, outbound, and monitor lifecycle are all bridge-owned (QQ/DingTalk/WeCom ride this same path).
Examples
These are the plugin's real entry points; install once, then call one.
Detailed example
Command
/rp
Output
已拒绝 2 张权限卡。
Observed from tests/bridge.spec.ts:167-174; src/bridge.ts:594-598
Failure branch
Input
/rp while 2 approval cards are pending
Output
已拒绝 2 张权限卡。
Observed from plugins/dsh-reach/tests/bridge.spec.ts:167-174; plugins/dsh-reach/src/bridge.ts:594-598; plugins/dsh-reach/README.md:121-136
Brief examples
/rq
Configuration
The profile row accepts these keys (Schemastery-validated; invalid values fail the load loudly):
| Key | Default | Description |
|---|---|---|
crossSessionNotify |
true |
Push decision cards from ANY workspace/session (master switch) |
notifyTaskEvents |
false |
Background task finished/errored notifications |
cardTimeoutSec |
1800 |
Decision-card soft timeout in seconds (0 = wait forever) |
approvalOnTimeout |
delegate |
Timed-out card policy: delegate (GUI chain) / reject / wait |
textChunkLimit |
4000 |
Long reply chunk limit per message, in characters |
silent |
false |
Only final replies, no per-step streaming |
cwd |
'' |
Default working directory for new IM sessions ('' = host cwd) |
baseUrl / cdnBaseUrl / botType |
iLink defaults | WeChat gateway, media CDN, bot type |
allowFrom |
[] |
Sender allowlist (empty = fail-closed; first sender = owner) |
queueMode |
queue |
Busy delivery: queue or steer |
maxQueue / sendBudget / windowSec |
50 / 10 / 60 |
Queue cap, per-window send budget, window seconds |
denyUnauthorized |
false |
Silently ignore (true) or notice (false) unknown senders |
authCode |
'' |
Shared secret the IM side must present before a message is accepted |
digestSec |
300 |
Digest window in seconds (0 disables the digest) |
pushToken |
'' |
Token for the open push service (reach_send HTTP surface) |
telegramToken |
'' |
Telegram bot token for the Telegram channel |
Development
pnpm install
pnpm run typecheck && pnpm run typecheck:ci && pnpm test
pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts
pnpm run check:readmes && pnpm pack
Install from the DSH Desktop Market
All PerryLink plugins are browsable in the built-in DSH Desktop Market: Market → Sources → add source → paste https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → select it. Installation still goes through the Market's npm-identity verification and your confirmation.
Interoperability with other DSH plugins
Verified against DSH 0.2.0-rc.2 (the runtime this README ships for) and the high-star plugin set surveyed on 2026-10-05.
This plugin does not interfere with other plugins, including the widely installed high-star ones:
- No tool-name collision. Every tool is namespaced; no bare name owned by a shipped tool or another plugin is registered.
- No service-key collision. It provides
reach,reachChannels,reachPush; those keys are not a built-in seam and are not provided by any surveyed high-star plugin. - No slot collision. It registers no client slot key, so it cannot contend for a
shadows-shipped-uiseat. - No HTTP route collision. It registers no
webServerprefix. - No patch-layer collision. The bundle patch only
inserts its own row; it never overrides a built-in row'sconfig. - No global mutation. It does not patch prototypes, rewrite
process.env, or replace the global fetch dispatcher.
Shared event listeners are non-interfering by construction. It observes the ordering-sensitive events approval/request, user-questions/request with ctx.on() — Cordis's broadcast registration, where every listener runs and none can starve another. Every listener here delegates through next(), so the chain is never short-circuited, and a mutation is applied to the value next() produced rather than returned in its place:
Static evidence: dsh-plugin-doctor K10–K13 report pass for every check on this repository.
PerryLink DSH Plugin Family
This project is part of the DeepSeek Harness plugin family from PerryLink. The roster stays collapsed below so every README keeps a short first screen; expand it to see every row and its status.
License
Apache-2.0. Third-party notices in THIRD_PARTY_NOTICES.md.
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-remote-web-ui★ 8835
Remote control of a dsh web workspace from phone or PC: QR-code pairing through a token-gated channel, SSE real-time sync, and separate mobile and full desktop GUI modes.
zhu1090093659/dsh-web#packages/dsh-ssh★ 8835
SSH ops panel for DSH: web terminal, SFTP transfer with progress, local port forwarding, and one-command cluster execution across hosts; agents share the same host config.
saya-ch/dsh-mobile★ 479
Access DeepSeek Harness from the Android app or a mobile browser with secure LAN and remote connections, persistent device pairing, and a customizable mobile interface.
liguobao/ds-harness-remote★ 345
Multi-device remote access for DeepSeek Harness: continue an active session from your phone, tablet, browser, or another computer over an end-to-end encrypted channel (Noise IK + adaptive relay/WebRTC transport), with device authorization, ApiProxy-only remote capabilities, and read-only file preview via dsh-file-viewer — no shell, remote desktop, or write access.
ZSeven-W/dsh-ios★ 326
A live iOS Simulator or USB-connected iPhone inside the conversation: 22 agent tools for booting, building, driving the UI by accessibility identity or OCR text, list-row actions and SwiftUI preview hot reload, plus a streaming sidebar panel you can tap and drag on.
wenbin-wb/dsh-bridge★ 199
Remote and mobile access for DeepSeek Harness: provides LAN QR code connection, Cloudflare/custom tunnels, WeChat, QQ, Feishu, Telegram bot integration, and security authentication.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.