前言¶
在 DeepSeek Harness(dsh)里跑长任务时,常见痛点是不知道何时结束,只能反复切回窗口查看。系统 Toast 要求人坐在电脑前;Web Push 或 PWA 往往要公网隧道和 HTTPS,还有把 dsh 暴露到公网的风险;PushPlus、Bark、ntfy、Telegram 等第三方推送则要注册账号、实名或 VPN。
邮箱是多数人已有、全球可达、且不依赖第三方推送账号的通道。但纯邮件通知容易在挂一晚上任务后,收件箱堆满「任务完成」的重复邮件。
下面介绍社区插件 dsh-mailbox-notify(维护者 wuuuuu123-32):在任务结束、审批或提问卡住时发邮件;发新通知前用 IMAP 清理收件箱里带固定前缀的旧通知;零依赖、不监听端口,只读一份本地配置。
这是什么¶
dsh-mailbox-notify 是面向 DeepSeek Harness 的任务通知插件(当前包版本 1.3.2,MIT 许可证)。它通过用户自配的 SMTP 发信、IMAP 删旧信,可选 ntfy 作为补充通道。插件不替用户点审批、不写业务文件,仅监听会话事件并按规则发通知。
分类(SkillHub):通知、Host、效率;运行面为 host。要求 Node >=20,dsh >=0.1.0-rc.5。
核心功能¶
邮件通知与旧信清理¶
- 支持任意 SMTP 邮箱(QQ、163、Gmail、Outlook、自建等),465 隐式 TLS 与 587 STARTTLS 两种写法均可。
- 通知邮件主题统一带
[dsh-notify]前缀(可通过mailTag修改);每次发新通知前,仅在 INBOX 里搜索并删除上一封同前缀邮件,不扫描其它文件夹。 - 正文带会话标题、会话号、工作区;主题里也会截一段会话标题(40 字以内),便于多任务并行时在手机邮件列表区分。
审批与提问超时提醒¶
dsh 权限审批在日志里成对出现 approval/asked 与 approval/decided。插件从 asked 起计时,默认 60 秒(approvalTimeoutMs)内未出现 decided 则发提醒,正文说明会话、工具、原因与已等待时长;3 秒内多个超时审批会合并进同一封。设 approvalTimeoutMs 为 0 可关闭。
ask_user_question 在标准模式下由 tool/call 与配对的 tool/result(按 message.source.callId 配对)判定;PTC 模式下识别 tool/ptc-dispatch-start 与 tool/ptc-dispatch(按 subCallId)。超时默认同样 60 秒(questionTimeoutMs),邮件里带问题原文与候选项。审批与提问提醒不依赖 notifyOn 档位。
何时发「任务类」通知¶
默认 notifyOn: "goals" 时:
| 情况 | 是否发送 |
|---|---|
| 出错 / 中断 | 必发 |
| 目标完成 / 受阻 | 必发 |
单轮耗时 ≥ longTaskMs(默认 3 分钟) |
发 |
单轮工具调用 ≥ minToolCalls(默认 5 次) |
发 |
| 普通短问答、闲聊 | 不发 |
更安静可设 notifyOn: "errors"(只报错,审批/提问提醒照旧);每轮都收则设 "all"。同类成功通知有 debounceMs(默认 60 秒)防抖。
其它¶
- 可选 ntfy(
channel:ntfy或both),需手机能连相应推送环境。 - SMTP/IMAP 使用
node:tls手写,无 nodemailer 等额外依赖;不监听端口。 - 配置
link后,邮件末尾可附「处理:…」链接,便于在手机上跳回 dsh 点审批。
安装与启用¶
包未发布到 npm,从 GitHub 安装(命令来自 README):
dsh plugin --profile <你在用的 profile> add github:wuuuuu123-32/dsh-mailbox-notify
<你在用的 profile> 一般为 desktop(桌面应用)或 web(dsh web)。安装后需重启 dsh(桌面版托盘退出 DeepSeek Harness 再打开;dsh web 则重启进程)。
若安装卡在 git+ssh,可先执行:
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
本机开发可链目录:dsh plugin --profile <profile> add link:<本地路径>。
配置¶
将插件包内 config.example.json 复制到 ~/.dsh/mailbox-notify.json(Windows:C:\Users\<用户名>\.dsh\mailbox-notify.json),填写 SMTP/IMAP 与收件地址。QQ 邮箱示例:
{
"channel": "mail",
"mail": {
"host": "smtp.qq.com",
"port": 587,
"starttls": true,
"user": "你的邮箱@qq.com",
"pass": "你的SMTP授权码",
"to": "你的邮箱@qq.com"
},
"imap": {
"host": "imap.qq.com",
"port": 993
},
"link": "https://你的-dsh-地址/"
}
端口与加密二选一:587 + "starttls": true(README 推荐),或 465 + "starttls": false。README 记载 2026-10-12 实测 QQ 的 465 直连 TLS 可能报 wrong version number,收不到信时可先用包内 node test-mail.mjs 单独测 SMTP。
pass 填邮箱服务商的 SMTP 授权码(非登录密码)。QQ 邮箱需在网页设置中开启 POP3/IMAP/SMTP 并生成授权码;IMAP 通常与 SMTP 同一开关。
常用配置项还包括:notifyOn、longTaskMs、minToolCalls、cleanupOld、approvalTimeoutMs、questionTimeoutMs、debugTrace 等;环境变量可覆盖部分项(如 DSH_NOTIFY_CHANNEL、DSH_NOTIFY_SMTP_USER 等,完整列表见源码 resolveConfig)。
典型用法¶
- 按上文安装插件并重启 dsh。
- 写好
mailbox-notify.json,确认 SMTP 发信与 IMAP 删信账号一致或to为你要看的邮箱。 - 在 dsh 里跑一轮较长任务或触发权限审批;若 60 秒内未在 GUI 处理审批,应收到带
[dsh-notify] 🔐 等审批主题的邮件。 - 需要排查时设
"debugTrace": true,查看插件目录下_trace.log中的挂载、事件与发信结果。
通知正文示例(完成类):
[dsh-notify] ✅ 完成 · 优化邮件提醒插件的通知格式
会话:优化邮件提醒插件的通知格式 #8eda7b93
工作区:D:\dsh\config
调用了 12 次工具
用时 3min 20s
处理:https://你的-dsh-地址/
时间:2026-09-19 23:17:51
适用场景与注意¶
适合:希望用自有邮箱收 dsh 任务结果、又不想装第三方推送 App 的开发者;经常离开电脑但手机能收邮件;需要在审批或 ask_user_question 卡住时被动提醒的场景。
注意:
- 插件以当前 dsh 进程权限运行,会连你配置的 SMTP/IMAP(及可选的 ntfy.sh);安装前建议浏览 GitHub 仓库 源码与 MIT 许可证,确认网络出站策略可接受。
- 授权码属于敏感信息,勿提交到版本库;配置文件仅在本机
~/.dsh/。 - IMAP 清理只动带
mailTag前缀的 INBOX 邮件;并发或同步延迟时收件箱可能短暂存在多封通知。 - DeepSeek Harness 社区插件目录(SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与
package.json为准。
结尾¶
dsh-mailbox-notify 把「任务值得打扰的时刻」和「审批/提问卡住」两类需求统一到邮箱通道,并用 IMAP 控制通知邮件数量。若你已在用 dsh 且已有 SMTP 邮箱,可按 README 安装命令接入,再用 test-mail.mjs 与 debugTrace 验证通道与触发条件。