dsh-weixin-link

DSH PLUGIN会话与消息

仓库 ruqinhu/dsh-weixin-link

会话与消息 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

dsh-weixin-link 是 ruqinhu 维护的 会话与消息 类 DSH 可安装插件, 仓库为 ruqinhu/dsh-weixin-link,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-weixin-link 是会话与消息类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类会话与消息 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-28 创建于 2026-10-27
README 7.6 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:ruqinhu/dsh-weixin-link#v0.3.6
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注

上游标签

dsh-plugindsh-plugin-backupdsh-plugin-marketdsh-pluginsdsh-plugins-terminal

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在会话与消息场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-weixin-link当前 L4 · 沙盒安装通过 低风险 0 未标注 有
dsh-desktop L3 · 安装规范通过 低风险 3.0 万 未标注 无
openpets L4 · 沙盒安装通过 低风险 1,274 未标注 有
deeptide L4 · 沙盒安装通过 低风险 1,104 0.1.1-rc.2 有
jingyun-dsh L3 · 安装规范通过 低风险 1,004 未标注 有
study-mate 未做沙盒验证 未标注 856 未标注 无

仓库档案

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方ruqinhu仓库 dsh-weixin-link · 默认分支 main
分类会话与消息client
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-27 · 2026-10-28最后推送 2026-10-28
本站收录2026-10-30首次进入本站目录的时间

README 全文

7.6 KB
作者原文,中文版优先;只做安全转义,不改内容

@ruqinhu/dsh-weixin-link

English | 中文

给 DeepSeek Harness 的微信 iLink 通道:收发消息,并自动投递回合结果。

DSH 没有内置 IM 投递。本插件补上两件事:

  1. agent 能往微信推报告(weixin_push 工具)
  2. 一个回合结束后,正文自动发到微信 —— 不需要模型记得调工具

第二件是重点。见「为什么投递不由模型负责」。

决定一切的约束

iLink 每次发送都必须带 context_token,而这个 token 只能从入站消息里拿到,没有别的办法生成。

所以一个安静的夜晚意味着 07:00 早报发不出去,直到你主动发一条消息。插件不假装能绕过:这类消息会被暂存,等真实入站消息刷新 token 后立刻重放。故意不做保底通道 —— 静默的保底会掩盖失败,而不是暴露失败。

为什么投递不由模型负责

早先的版本靠每个定时任务的 prompt 里写一句话:「完成后必须调用 weixin_push」。它失败得很安静:

  • 模型把回复写进会话,回合正常 completed,用户什么也没收到。从模型的角度看,在会话里回答是正确行为 —— 它不知道这句话是要发到手机的。
  • 换一种失败:模型先调 weixin_push 发正文,再在会话里补一句「已通过微信回复你了」。用户收到的第二句是元叙述,不是内容。
  • 一旦任务失败,prompt 仍然说「必须发」,于是错误也被当成报告发出去。

根子上,投递是传输层的职责,不是模型的自律。

现在插件订阅 DSH 的全局 session/event 总线,在 turn/end 时取该回合最后一条 assistant/message 的正文自己发送。DSH 的 dsh-schedule 在投递消息后只等 sessions.flush(),它既不知道也不关心 agent 回了什么 —— 所以这件事必须由通道做。

哪些回合会被投递

按该回合第一条 user/message 的 source.kind 判定:

source.kind 来源 投递
schedule 定时任务 ✅
weixin-link 用户在微信发起 ✅
user 用户在终端 / Web 输入 ❌ 人就在键盘前,同一句话在屏幕上已经有了
runtime-context / skill-catalog / time-context 注入的上下文 ❌ 不是对话
compact-checkpoint / provider / fallback 会话压缩、标题生成 ❌ 内部维护,投了就是噪音

去重

一个回合只投递一次。若模型在该回合内自己调过 weixin_push,自动投递跳过这个回合 —— 否则同一条内容会收到两遍。

空回合

定时任务跑完但没输出时,发一条 本次无产出(时间戳)。静默会让「跑了但挂了」和「根本没跑」无法区分,而两者该做的处置完全不同。

prompt 可以显式放弃这次通知:整个回合正文恰好只有 [SILENT] 时跳过。只在正文整体等于它时才算,正文里提到这几个字不影响投递。

长度上限

单条消息硬上限 2200 字符。iLink 对超长内容的失败不是干净的拒绝 —— 发送可能返回 message id 却根本没送达。完整报告写进网页版,微信只发摘要,截断时会追一行说明并指向首行链接。

上限在代码里强制,不依赖模型遵守:投递已经不看模型了。

安装

dsh plugin add @ruqinhu/dsh-weixin-link

凭据

token 通过 DSH 凭据库读取(ctx.credentials.resolve()),不直接读 process.env。这是有意的:凭据库已经按 $DSH_HOME/.credentials.yaml → 继承环境变量 → 项目/用户 .env 分层解析,绕过去反而会遮蔽受管存储。

在 tokenEnv(默认 WEIXIN_BOT_TOKEN)指定的名字下配置凭据。

配置

键 默认 含义
tokenEnv WEIXIN_BOT_TOKEN bot token 的凭据名
accountIdEnv WEIXIN_BOT_ACCOUNT_ID 账号/bot id 的凭据名
baseUrl https://ilinkai.weixin.qq.com iLink 端点
dataDir ~/.dsh/weixin-link token、outbox、收据、投递追踪目录
poll true 是否跑入站长轮询
pollTimeoutMs 40000 客户端预算,必须大于服务端 35 秒挂起
defaultUserId "" 收件人;空表示"最近一次入站发送者"
echoOwnMessages false 是否把 bot 自己的消息当作入站

发送策略

自动投递和 weixin_push 走同一条发送路径:

  1. 先试一次。
  2. 分类失败:
    - token 失效 → 暂存,不重试(只有新的入站消息能救)
    - 被限流 → 退避 30/60/120 秒;仍然限流则暂存
    - 其他 → 立即重试一次,再失败就放弃
  3. 每次尝试写一行 JSONL 收据。

限流退避耗尽后暂存不是随手加的:一条报告退避完被丢弃,和从未被调度过完全无法区分 —— 这正是曾经整份早报被吞掉的失败模式。

唯一的例外是自动投递发现根本没有 context_token(还没收到过任何入站消息)。这种情况不暂存:把几天前的报告重放到今天比丢掉更糟。

重放规则

暂存的消息在下次有 token 时重放。判定逻辑在 delivery/outbox-replayer.ts,独立于插件类 —— 因为它正是丢掉过报告的那段。

规则只有一条:只有能证明永久失败的条目才删除。其余全部保留。

这条规则是被事故逼出来的。早先的实现把「既不是 NEEDS_INBOUND 也不是 RATE_LIMITED」都当成永久失败删除,而当时真实发生的失败是 ret:-2 prepare failed,归类为 UNKNOWN,那是暂时性的。于是重放删掉了它本来要救的消息:一条 12:40 午报就这样没了,收据写着 ok:false,而 outbox 已经空了。

重放还有一个容易写错的地方:失败时不重新暂存。被重放的条目本来就在 outbox 里,再暂存一次会为同一段文本写出第二个文件,等 token 恢复后每一份都会被发出去。

工具

工具 用途
weixin_push 主动发送文本;发不出去时自动暂存
weixin_status 登录态、token 年龄、最近投递、积压深度

weixin_push 保留给「让 agent 现在主动发一条」的场景。日常投递不需要它 —— 插件会自己做,而调它会让该回合的自动投递让位,避免重复。

收据与追踪

收据 dataDir/receipts/YYYY-MM-DD.jsonl:每次发送尝试一行,按操作者的 +08:00 本地日归档而非 UTC。替代"grep agent 日志找 delivered"。

投递追踪 dataDir/delivery-trace.log:每个回合的判定结果一行,包括跳过的回合和原因。

两份分开是必要的:收据只记录尝试过的发送,一个被策略跳过的回合不会留下收据。当报告没到时,第一个问题是"到底有没有考虑过投递",这个问题只有追踪文件能回答。

send session=... turn=12 len=63
ok   session=... turn=12 msgid=7521135910923441000
skip session=... turn=13 reason=source-not-deliverable

入站投递

入站文本作为普通后续回合投给最近活跃的根 agent,来源标记为 weixin-link。若 profile 里没有 agent,token 缓存仍然会刷新 —— 那才是解锁投递的关键部分。

冷启动时用 sessionController.resolveAgent() 恢复会话,它返回裸 Agent、{ agent } 或 { error } 三种形态,都要认。

> 注意:sessionController 必须写进 static inject。cordis 对未声明的服务抛异常而不是返回 undefined,被 try/catch 吞掉后会表现为"消息收到了但没人回"。

许可

MIT

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-weixin-link 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:ruqinhu/dsh-weixin-link#v0.3.6` 即可。

dsh-weixin-link 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-weixin-link 安全吗?

低风险。

dsh-weixin-link 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-weixin-link 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

会话与消息
按星标排序,可作替代方案

dsh-desktop

dsh-desktop

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

L3 · 安装规范通过 3.0 万 星

openpets

openpets

L4 · 沙盒安装通过 1,274 星

deeptide

deeptide

L4 · 沙盒安装通过 1,104 星

jingyun-dsh

jingyun-dsh

井云 DSH 客户端插件,为 DeepSeek Harness 注入会员登录、订阅支付、算力管控与应用市场,让智能体和技能快速变成可交易商品

L3 · 安装规范通过 1,004 星

study-mate

study-mate

StudyMate 是 DSH 的「学习模式」预设与技能包,为数学、计算机科目定制学习路线、讲解课件与练习评估,跨科目共享记忆。

未标注验证等级 856 星

ruqinhu 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。