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.10); 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.
| Surface | Status |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.6-alpha.2 (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; the dev/test pins deliberately stay on the published 0.1.5-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-18 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 |
- 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).
# npm channel (published releases)
dsh plugin --profile web add dsh-reach
# git channel (latest main)
dsh plugin --profile web add "github:PerryLink/dsh-reach#main"
# alternates
npx @deepseek-ai/dsh plugin --profile web add dsh-reach
dsh1024 plugin --profile web add dsh-reachRestart DSH after installation (bundle patches apply at startup).
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 |
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 packAll 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.
This project is one of the 41 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search |
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-fund-research | Deterministic research reports for Chinese public mutual funds |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble |
| dsh-library | Local document knowledge base for DeepSeek Harness. |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers |
| dsh-mask | PII masking middleware: anonymize at the model boundary, restore at the display layer |
| dsh-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit |
| dsh-personal-directive | Personal directive injector with top-bar toggle (framework edition) |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill |
| dsh-plugin-doctor | Zero-dependency static + sandbox smoke detector for DSH plugins |
| dsh-research-report | Verifiable research-report engine: content-addressed evidence ledger and sealed versions |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
| dsh-ticktick | TickTick/Dida365 task bridge: session-header panel + 11 tools |
| dsh-wechat | WeChat ↔ DSH bridge (Tencent iLink bot): text/image/file/voice, approvals in chat |
| dsh-autotier | Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command |
| dsh-catalog | DSH Desktop Market standard catalog source for the PerryLink family |
| dsh-cert-mcp | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence |
| dsh-kit | One-command starter pack that installs the core family |
| dsh-plugin-certification | Community certification registry with repro-checkable grades and badges |
| dsh-plugin-kit | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins |
| dsh-plugin-portal | Zero-dependency static portal rendering the whole plugin family as one page |
| dsh-plugin-upgrade-015 | Merged 0.1.3-alpha.1 → 0.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner |
| dsh-team-rooms | Cross-session team rooms: shared message bus, task board and timeline |
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.
Apache-2.0. Third-party notices in THIRD_PARTY_NOTICES.md.