dsh-mailbox-notify:用邮箱把 DSH 任务完成与审批卡点推到手机

前言

在 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)。

典型用法

  1. 按上文安装插件并重启 dsh。
  2. 写好 mailbox-notify.json,确认 SMTP 发信与 IMAP 删信账号一致或 to 为你要看的邮箱。
  3. 在 dsh 里跑一轮较长任务或触发权限审批;若 60 秒内未在 GUI 处理审批,应收到带 [dsh-notify] 🔐 等审批 主题的邮件。
  4. 需要排查时设 "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 验证通道与触发条件。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜