前言¶
在 DeepSeek Harness(DSH)里把 agent 接到微信,常见需求之一是「过一会儿再提醒一句」或「到点主动发一条消息」。DSH 自带的 @deepseek-ai/dsh-tool-schedule 在社交模式里往往用不了:bridge 会用 controlTool 前缀把这类工具挡在工具表外。bridge 自带的「到点把结果发回微信」(adoptScheduledTurn)又只在 workMode === 'assistant' 时执行。陪聊、人格类会话多在社交模式,这两条路都走不通。
社区插件 dsh-wechat-wake(维护者 epsilonH-eps,GitHub 仓库 epsilonH-eps/dsh-wechat-wake,SkillHub 分类为工作流)用不撞前缀的工具名 remind_* 绕开第一道限制,再用自有的 followup 与投递链路,把「到点说话 → 落进当前微信聊天」跑通。授权仍按聊天在 WeChatAgent 里勾选,不替代现有权限模型。
这是什么¶
dsh-wechat-wake 给绑定微信的 agent 提供一组定时工具:到点由插件触发唤醒,生成或直发的内容通过本机微信 hook 进入当前会话对应的聊天。目标场景是微信里的陪聊 / 人格会话(社交模式);助手模式应继续用原生 schedule_create,插件在助手模式被调用时会提示改用 schedule_create,避免与 bridge 对非请求唤醒的校验冲突。
插件以 MIT 许可发布,当前 package 版本为 0.1.0,要求 Node >= 18。它不读聊天记录、不上传数据;待触发列表只写在 $DSH_HOME/wechat-wake.json。
为什么需要单独一套 remind 工具¶
下面是对 README 里对照表的简要归纳,说明「现成能力卡在哪」以及本插件补什么。
| 现成能力 | 限制 |
|---|---|
@deepseek-ai/dsh-tool-schedule |
社交模式下被 bridge 的 controlTool 前缀挡掉 |
bridge 的 adoptScheduledTurn |
仅在 workMode === 'assistant' 时执行 |
本插件注册 remind_later、remind_list、remind_cancel,命名上不触发上述前缀规则;到点后走 agent.followup()(wake 模式)或原样发 note(text 模式),再经 POST http://127.0.0.1:30001/SendTextMsg 投递。
核心功能¶
三个工具¶
| 工具 | 作用 |
|---|---|
remind_later(note, delay_seconds \| at, mode?) |
定一条一次性唤醒。默认 mode=wake 到点开一轮 agent;mode=text 原样发 note、不经过模型 |
remind_list() |
查看本会话未触发项及最近错过项 |
remind_cancel(id) |
取消一条 |
到点流程(概要)¶
- 复查聊天是否仍在 WeChatAgent 白名单。
wake模式:agent.followup()叫醒会话,抓取本轮正文(去掉RESPOND:前缀)后发微信。- 若无正文、本轮报错或超时 120 秒,退化为发送
⏰ note,保证到点有反馈。 text模式:直接投递 note。
状态与边界(摘自文档):待触发列表在 $DSH_HOME/wechat-wake.json,进程重启后重新挂表;关进程期间 10 分钟内到点的可补发,更早的记为 missed;每会话最多 12 条待触发,单条最长 7 天;两次发送至少间隔 1.5 秒;聊天移出白名单则记 skipped 不发。只能唤醒仍存活的会话,冷会话退化为静态文本。
安装与启用¶
通过 dsh profile 安装¶
README 给出的命令如下(会读取包内 dsh.bundle.patch):
dsh plugin --profile web add github:heyikai060215-jpg/dsh-wechat-wake
说明:已抓取资料中 package.json 的 repository.url 指向 heyikai060215-jpg/dsh-wechat-wake;SkillHub 条目为 epsilonH-eps/dsh-wechat-wake。安装以 README 原文命令为准;若 fork 与目录不一致,以你实际添加的 GitHub 源为准。
手动安装(与其它 dsh-mod 插件相同)¶
- 将仓库放到例如
D:/dsh-mod/dsh-wechat-wake。 - 在
profiles/<profile>/package.json的dependencies增加"dsh-wechat-wake": "link:D:/dsh-mod/dsh-wechat-wake",在dsh.profile.bundles增加"dsh-wechat-wake"。 - 将
profiles/<profile>/node_modules/dsh-wechat-wake链到该目录。 - 重启 DSH,或改动 profile 的
package.json触发热加载。 - 在 WeChatAgent 为目标聊天勾选三个
remind_*工具。
装完自检(只读,不发消息)¶
node tools/selftest.mjs wechat:private:<聊天号>
也可直接传入会话 id,由脚本反查聊天键:
node tools/selftest.mjs social-xxxxxxxx
通道齐全时会打印 reader / hook / chat / target / mode 并返回 0;缺项返回 1。示例输出字段包括 reader、hook、chat、mode: "social"、target 等。
典型用法¶
授权(必做)¶
插件不自行判断「哪个聊天能用」。在 WeChatAgent:
- 界面:聊天 → 设置此聊天 → 能力与权限,勾选
remind_later、remind_list、remind_cancel。 - 等价配置:
config/wechatagent.json→wechat.dshAccess.chats["<聊天键>"].tools。
社交模式聊天勾选即可;助手模式聊天不要勾选本插件工具。
对话侧¶
用户可在微信里自然表达「几分钟后提醒我……」;agent 在已授权且工具可见时调用 remind_later。README 实测中模型曾选择 mode: "text",约 3 分钟后定时器触发(误差 0.5 秒内),投递后微信回执 confirmed: true。mode: "wake" 走 followup + 抓 turn/end 正文,文档建议首次使用 wake 任务时单独试一次。
依赖的既有通道¶
插件不改微信本体、不改 WeChatAgent 源码,依赖:
state/accounts/<账号>/dsh-sessions.json的conversations(会话与聊天映射)。state/wechat-io-config.json的 reader 地址与令牌。state/hook/native-token.txt与本地 hook 的SendTextMsg。
与 dsh-tts-bridge-wechatagent-bridge 发语音条使用的是同一套 hook 路径。
适用场景与注意¶
适合:已在 DSH + WeChatAgent 下跑微信私聊、社交模式、人格或陪聊类会话,需要会话内定时提醒或到点主动发言,且愿意按聊天逐项授权工具。
不适合或需换方案:助手模式定时应使用原生 schedule_create;工作群或高敏感聊天应先在无人打扰的私聊里验证。
运行与安全:插件在本机 DSH 进程权限下运行,会通过 hook 真实发送微信消息。安装前应阅读仓库源码与 MIT 许可证,自行评估微信风控、发错人、发错时间等风险。直发 hook 绕过 WeChatAgent 发送队列,失败只记日志不重试;微信升级导致 hook 偏移变化时发送可能失败。
DeepSeek Harness 生态强调「一切皆插件」;SkillHub(插件目录页)为社区独立站点,与 DeepSeek / 幻方无官方从属关系。
卸载¶
- 从
profiles/<profile>/package.json删除dsh-wechat-wake依赖及 bundles 条目。 - 删除
profiles/<profile>/node_modules/dsh-wechat-wake链接。 - 删除仓库目录,并取消 WeChatAgent 中三个工具勾选。
- 可选:删除
$DSH_HOME/wechat-wake.json。
dsh-wechat-wake 补的是社交模式下 schedule 与 bridge 定时投递的缺口:三个 remind_* 工具、WeChatAgent 按聊天授权、到点 followup 或直发并落进当前聊天。进一步了解可查看 SkillHub 目录页 与 GitHub 仓库。