Pular para o conteúdo principal
P

dsh-reach

perrylink/dsh-reach

Envia cartões de aprovação e perguntas do DSH para canais de IM (WeChat primeiro) e responde a eles pelo chat, com um console de sessões, segurança por canal e um serviço aberto de push.

Instalar

dsh plugin --profile web add github:perrylink/dsh-reach

README

dsh-reach

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.

License OpenSSF Scorecard DSH plugin dsh-doctor DSH Market Gitee CI Version npm version npm downloads dshfind

Status: Phase 1–3 complete (WeChat + Telegram + Feishu channels, v0.1.24); v2 channel foundations (QQ/DingTalk/WeCom) on the open reachChannels registry. The design plan, competitor research, official contract verification, and phased roadmap live in docs/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 diagram for dsh-reach: install → open panel → act.

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 the ecosystem has converged on a more widely adopted implementation, so effort has moved elsewhere. The comparison below was measured on 2026-10-05 and is recorded so nobody has to redo it.

packageweekly downloads
this packagedsh-reach600
more widely adopted implementation@xmanrui/dsh-im17,384

Why it is the mainstream choice. @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 broader in channel coverage

👉 For new work, @xmanrui/dsh-im is the mainstream choice. Existing installs keep working unchanged; nothing is being removed.

Full evidence, including the host-version compatibility matrix: dsh-plugin-supersession-review-20261005.md.

Compatibility

SurfaceStatus
HarnessDeepSeek 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 #token ids and P{n} numbering; reply 1/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 /help plus native DSH command passthrough.
  • Proactive push: the reach_send tool 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):

KeyDefaultDescription
crossSessionNotifytruePush decision cards from ANY workspace/session (master switch)
notifyTaskEventsfalseBackground task finished/errored notifications
cardTimeoutSec1800Decision-card soft timeout in seconds (0 = wait forever)
approvalOnTimeoutdelegateTimed-out card policy: delegate (GUI chain) / reject / wait
textChunkLimit4000Long reply chunk limit per message, in characters
silentfalseOnly final replies, no per-step streaming
cwd''Default working directory for new IM sessions ('' = host cwd)
baseUrl / cdnBaseUrl / botTypeiLink defaultsWeChat gateway, media CDN, bot type
allowFrom[]Sender allowlist (empty = fail-closed; first sender = owner)
queueModequeueBusy delivery: queue or steer
maxQueue / sendBudget / windowSec50 / 10 / 60Queue cap, per-window send budget, window seconds
denyUnauthorizedfalseSilently ignore (true) or notice (false) unknown senders
authCode''Shared secret the IM side must present before a message is accepted
digestSec300Digest 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-ui seat.
  • No HTTP route collision. It registers no webServer prefix.
  • No patch-layer collision. The bundle patch only inserts its own row; it never overrides a built-in row's config.
  • 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.

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.

Expand all plugins
PluginStatus
dsh-aqua-input-check
dsh-archive-check
dsh-auto-review
dsh-autotier🧊 FROZEN — see the repo README
dsh-bid-ca-precheck
dsh-bid-qual-check
dsh-cert-mcp🧊 FROZEN — see the repo README
dsh-checkpoint-rewind
dsh-click
dsh-composer-history
dsh-contract-stance
dsh-customs-doc-check
dsh-data-quality
dsh-demurrage-ledger
dsh-doublecheck
dsh-drill-script-check
dsh-eia-guide-check
dsh-emergency-plan
dsh-essay-rubric-check
dsh-evidence-check
dsh-export-ctl-check
dsh-fast
dsh-fmea-table-check
dsh-forecast-penalty
dsh-fund-research
dsh-github
dsh-gongwen-flow-check
dsh-gongwen-word-check
dsh-guard-plan-qc
dsh-hazchem-check
dsh-hazplan-check
dsh-hidden-risk-map
dsh-hs-classify
dsh-icd-rule-check
dsh-industry-research
dsh-lawcite-adapter
dsh-laya
dsh-lc-doc-check
dsh-learning-gap-check
dsh-library
dsh-local-ai
dsh-lsp-actions
dsh-mask
dsh-mcp-panel
dsh-medrec-qc
dsh-memento
dsh-nsfc-form-check
dsh-nurse-record-check
dsh-observe
dsh-origin-rvc-check
dsh-ota-review-check
dsh-output-styles
dsh-paper-doc-adapter
dsh-permission-rules
dsh-permit-report-check
dsh-pipeline-check
dsh-pleading-draft
dsh-plugin-doctor
dsh-plugin-guide
dsh-plugin-kit
dsh-plugin-upgrade
dsh-policy-brief-draft
dsh-power-loss-split
dsh-power-ticket-check
dsh-ppap-check
dsh-protest-deadline
dsh-railway-window
dsh-repair-order-qc
dsh-research-report
dsh-review-reply-check
dsh-rulefile-check
dsh-safety-brief-check
dsh-score
dsh-session-sync
dsh-site-log-check
dsh-skill-pack-security
dsh-soe-decision-check
dsh-soilwater-check
dsh-sop-sync-check
dsh-spc-gbt-adapter
dsh-talk
dsh-tender-extract
dsh-tender-matrix
dsh-test-drive
dsh-ticktick
dsh-translate
dsh-warranty-calc
dsh-budget🧊 FROZEN — see the repo README
dsh-claude-move🧊 FROZEN — see the repo README
dsh-defend🧊 FROZEN — see the repo README
dsh-draw🧊 FROZEN — see the repo README
dsh-reach🧊 FROZEN — see the repo README
dsh-background-agents🚫 RETIRED — see the repo README
dsh-session-pin🚫 RETIRED — see the repo README
dsh-team-rooms🚫 RETIRED — see the repo README

License

Apache-2.0. Third-party notices in THIRD_PARTY_NOTICES.md.

Plugins relacionados