- Home
- Plugins
- Integrations & Remote
- dsh-im-union
dsh-im-union
drscrewdriver/dsh-im-union
Union IM bridge for DSH — an independent implementation uniting the capability sets of community peer plugins (xmanrui/dsh-im, MichengAI/dsh-im-connect). Drive your agent session from 15 channel adapters across 12 platforms (including email; WeCom/DingTalk/QQ each contribute two: bot + self-built app or notify tier) — WeChat (official iLink QR bind), Feishu/Lark (long-connection + streaming cards; the voice tier requires system ffmpeg), Telegram, Discord, WeCom intelligent bot & self-built app (signed callback), DingTalk (stream + AI Card and custom-robot notify), QQ official bot (plus notify tier), Slack (Socket Mode), WhatsApp (Baileys QR pairing; the dependency ships as an optionalDependency of the plugin package), Matrix, iMessage (macOS only), Email (IMAP/SMTP thread routing). The cross-version narrow waist auto-adapts settings gen1/gen2/gen3 across hosts 0.1.2-rc.1→0.2.1-rc.2 (12-tag enum; rc.2 verified by a real desktop-profile install with double read-back) using capability probing only, never version branches. In chat: a 25-command panel, tool-approval and question loops answered in the originating chat (deny-by-default, initiator-only, 5-min expiry), image/file input gated on host model metadata, deliverable file return, a delivery log with bounded retry (uncertain is never re-sent), proactive delivery and fragment composition. It also splits the native sidebar into self-owned Tasks / Channels tabs (standing down entirely when another plugin already owns the slot), registers an `im-concise` agent preset plus reply sanitisation that keeps GenUI fences and raw HTML out of text-only chats, renders `svg` fences to PNG images, guards model choice with an allowlist, and mirrors each turn's final answer to notify channels via `/relay` (addressed by account ID or alias, never guessed on ambiguity). Secrets are one-way into the vault and never echoed back. npm: `dsh-im-union`.
Install
dsh plugin --profile web add github:drscrewdriver/dsh-im-unionREADME
dsh-im-union
DeepSeek Harness 的 IM 联合桥——净室重写,能力合集来自社区两仓(xmanrui/dsh-im 与 MichengAI/dsh-im-connect),不复制其源码。
- 支持的 DSH 宿主:
0.1.2-rc.10.1.5-rc.10.1.5-rc.20.1.5-rc.30.1.7-rc.10.1.7-rc.20.2.0-rc.10.2.0-rc.20.2.1-alpha.20.2.1-alpha.30.2.1-rc.10.2.1-rc.20.2.1-rc.3(覆盖 0.1.2 / 0.1.5 / 0.1.7 / 0.2.0 / 0.2.1 共 13 个 rc/alpha)
状态
0.4.7:15 个渠道适配器(覆盖 12 个平台,含邮件;企微/钉钉/QQ 各含机器人与自建应用或推送两档)、跨版本窄腰、会话引擎、审批/提问 IM 闭环、多账号管理面、原生「任务/频道」侧栏分离、IM 简洁预设与出站净化、SVG 图表转图、final 抄送 relay 均已交付(单测 728 项;宿主农场 0.1.2/0.1.5/0.1.7/0.2.1 四线冒烟全绿;桌面 profile 真机装机与浏览器目视实证至 0.4.6)。真机验收项逐项登记在 CHANGELOG;能力分期见开发仓计划台账。
能力总览:
- 渠道:微信(官方 iLink 扫码)、飞书(长连/流式卡片/语音档可选,语音需系统 ffmpeg)、Telegram、Discord、企微智能机器人(长连)、钉钉(stream+AI Card,另有自定义机器人推送档)、QQ 官方机器人(另有推送档)、Slack(Socket Mode)、WhatsApp(Baileys 扫码,依赖随包 optionalDependencies 分发)、Matrix、iMessage(仅 macOS)、企微自建应用(回调)、邮件(IMAP/SMTP 线程路由)等;未配置渠道零依赖零加载(懒 import)。
- IM 内闭环:25 命令面板(/help /status /new /stop /steer /model(s) /reasoning /preset(s) /session(s) /workspace(s) /fork /rename /queue /mute /unbind /goal /delivery /export /speak /relay /menu);工具审批与交互提问原聊天回答(默认拒绝、5 分钟超时、发起者限定)。
- IM 友好呈现:原生侧栏「任务/频道」两页签自持分离(包裹宿主官方任务树,过滤 IM 会话不入任务页;检测到他人已接管则绝不插手);
im-concise智能体预设(persona 完整模式从源头阻断 GenUI 围栏/裸 HTML 等富结构注入)+ 出站净化兜底;```svg 围栏自动转 PNG 图片发送(需宿主侧渲染依赖在位,缺位降级纯文字);模型白名单护栏(渠道外兜底集合);/relay回合结果镜像到通知渠道(钉钉群 webhook / QQ 主动推送,可用账号 ID 或别名绑定)。 - 跨版本:设置面 gen1/gen2/gen3 三态自适配;能力探测优先,禁版本号分支。
安装
dsh plugin --profile web add dsh-im-union@latest --registry=https://registry.npmjs.org/
装好后在宿主侧栏/设置页的「IM 联合桥」面板添加账号:大部分渠道走凭据绑定(Bot Token/App 凭据,secret 字段只单向入库不回显);微信/WhatsApp 走扫码绑定;企微自建应用需将本插件管理面回调 URL(/api/dsh-im-union/wecom-app/callback)配入后台接收服务器。隐私与凭据红线见 SECURITY.md;第三方依赖声明见 THIRD_PARTY_NOTICES.md(净室重实现,不复制任何上游源码)。
安装前提:
- WhatsApp 渠道的
@whiskeysockets/baileys已声明为optionalDependencies,随包自动安装;若安装时离线被跳过,渠道启动时会明确报「未安装」并拒绝,不崩溃。 - 飞书语音档需要系统
ffmpeg在 PATH 中(转码二进制不随包分发,仅启用语音档时才会调用)。 - iMessage 渠道仅 macOS 可用。
使用说明
装好后在宿主设置页/侧栏的「IM 联合桥」面板管理账号与偏好;日常操作全部可在聊天内完成(发 /help 看命令)。
添加账号
三类绑定形态,面板按渠道元数据自动出表单:
| 形态 | 渠道 | 说明 |
|---|---|---|
| 凭据表单(9) | telegram / discord / slack / matrix / imessage / wecom-app / email / dingtalk-notify / qq-notify | 填 Bot Token 或 App 凭据;secret 字段只单向入库,任何回包零凭据 |
| 凭据或扫码(4) | feishu / wecom / dingtalk / qq | 二选一:填应用凭据,或走面板扫码建机器人 |
| 扫码(2) | weixin / whatsapp | 微信走官方 iLink 扫码;WhatsApp 走 Baileys 配对 |
账号 ID 由系统自动生成(<channel>-<ts36><rand>),无需也不应手填;「别名」才是给人看的名字,可在面板设置。
命令面板(25 条)
| 组 | 命令 |
|---|---|
| 会话 | /help /menu /status /new /stop /steer <文本> /sessions [all] [页] /session <序号|id片段> /fork /rename <标题> /unbind /goal <文本|-> /queue /mute |
| 模型与预设 | /models /model <id> /reasoning <档位> /presets /preset <名称> /workspaces /workspace <路径|-> |
| 投递与抄送 | /delivery [retry <序号>] /export /relay <账号|-> /speak <文本> |
命令默认只对白名单用户开放;群聊只认显式 @ 本机器人。工具审批与交互提问在原聊天回答(默认拒绝、发起者限定、5 分钟超时)。
通知抄送(/relay)
把当前会话每回合的最终回答镜像到一个纯出站通知账号(钉钉群 webhook / QQ 主动推送):
/relay 列出本会话绑定(未绑定时回用法提示)
/relay - 解绑
/relay <账号> 绑定;<账号> 可为代理键 ID 或别名
/relay <账号>:<targetId> 绑定并指定推送目标
- 解析顺序:先按账号 ID 直查,未命中再按别名唯一匹配;别名歧义时直接拒绝并提示改用账号 ID,绝不猜。
- targetId 按渠道:钉钉的 webhook 已锁定目标群,可省;QQ 用
chatId作 openid/group_openid,必填。 - 语义:会话级绑定、重复绑定即换目标(覆盖)、多会话可指向同一账号;抄送文本带
[源渠道/会话短id]前缀与同款收轮后缀;投递结果不明时绝不自动重发,失败落plugin.log。 /new轮换后新会话不继承旧绑定(需重新/relay);一个会话同时只指向一个通知账号。
侧栏「任务 / 频道」
插件把宿主侧栏包成两个自持页签:任务=官方会话树(已过滤 IM 会话,不会冒出「未分组」条目)、频道=按渠道分组的 IM 会话列表(搜索、运行状态点、点击打开)。检测到侧栏已被其它插件接管时完全不插手,此时渠道列表退化为设置面板内的卡片。
模型白名单
设置面板「模型白名单」框一行一个 provider/model(留空=不限)。非空时 /models 只列白名单内、/model 越界被拒并回列可用项;账号级模型偏好不受约束。用途:模型异常时 IM 远端仍有可切的兜底集合。
图表(svg → 图片)
需要图示时让助手输出一个 svg 代码围栏(完整内联 SVG、白底深色前景、宽 ≤1000),插件会渲染成 PNG 作为图片消息发出;渲染依赖不在位或渠道不支持图片时降级为纯文字,不阻断回答。
IM 简洁预设
插件向宿主注册 im-concise 预设并作为 IM 会话默认:persona 完整模式(从源头阻断 GenUI 围栏、裸 HTML 等富结构注入)+ 简短纯文字纪律。账号「会话偏好 → Agent 预设」可改用其它预设;出站净化作为兜底安全网始终生效。
管理 API
/api/dsh-im-union/* 复用宿主登录态(每请求过 Host/Origin/Cookie 三查),回包零凭据零内部异常细节:
| 组 | 端点 |
|---|---|
| 探针 | /ping /state |
| 账号 | /accounts /accounts/save /accounts/pause /accounts/remove /accounts/allowlist /accounts/check |
| 目录 | /session-catalog /channels |
| 扫码 | /weixin/qr/start /weixin/qr/status |
| 主动投递 | /proactive/send /proactive/targets /proactive/targets/remove /proactive/syncback |
| 抄送与白名单 | /relay-bindings /relay-bindings/bind /relay-bindings/unbind /model-whitelist |
| 其它 | /connector/jobs /connector/jobs/cancel /wecom-app/callback(第三方回调,验签即认证) |
开发
npm install
npm run typecheck
npm test
node scripts/sync-hosts.mjs --write # 宿主版本声明单源下发
Related plugins
dsh-web (dsh-ssh)
zhu1090093659/dsh-web
dsh-web (dsh-remote-web-ui)
zhu1090093659/dsh-web
dsh-web-ui (dsh-ssh)
zhu1090093659/dsh-web-ui
dsh-web-ui (dsh-remote-web-ui)
zhu1090093659/dsh-web-ui