dsh-qq-mail-notify: Send Session Summary via QQ Mail SMTP upon DSH Completion

前言

在 DeepSeek Harness(DSH)里跑 agent,常见情况是任务要跑很久,或者你暂时离开屏幕。界面里的进度不会主动推到你手机上;自己写 webhook 或第三方通知,又要单独维护一套通道。下面介绍的 dsh-qq-mail-notify 是社区 Host 插件:监听 DSH 会话事件,在 agent 这一轮真正停下后,用 SMTP 把本轮(或攒批后的多轮)摘要发到邮箱;默认面向 QQ 邮箱,也支持按发件地址推断若干常见服务商。装一次、每个会话可单独选节奏,不必改 profile patch。

这是什么

维护者 yashua233,仓库 yashua233/dsh-qq-mail-notify,在 SkillHub 目录分类为联网工具。插件版本 1.2.17(以 package.json 为准),许可证 MIT,声明兼容 DSH 0.2.1-rc.5。

一句话:工作结束(或失败、或长任务进度节点)时,通过 SMTP 发邮件;正文从 Session 事件推导,不拼「打开会话」链接(README 说明 token 与端口随进程变化,链接易失效)。

核心功能

何时发信

插件依据真实事件,不猜测 agent 状态:

  1. 收到 agent/turn-stopping 时,只把本轮记入当前批次并重挂定时器,不拖慢回合。
  2. idleDelayMs 默认为 0:这一轮一停就发;调大(例如 600000)则停手满 10 分钟再合并发送,连续对话期间批次累积;另有 maxBatchMs(默认 30 分钟)、maxBatchTurns(默认 20 轮)上限,防止一直不发。
  3. 发信前检查:会话仍在、有用户消息、单轮满足 minTurnMs(默认 0)、不在 quietHours(命中则顺延到时段结束)。
  4. 子会话(subagent)默认跳过(skipSubagents=true)。

邮件主题示例:[DSH] 工作结束 · deep · 5 轮 · 42 分 10 秒(攒批)或 [DSH] 工作结束 · deep(单轮)。

邮件内容

单轮时正文为完整时间线:目录、会话 id、轮次、开始与结束绝对时间、耗时、结束状态、工具调用次数与分布(最多 12 个)、最后工具与步骤、Token 用量、失败时的分类与原始信息、请求原文(最多 800 字)与回复摘要(由 previewChars 控制,默认整封 1200 字并按轮均分)。攒批时先汇总再逐轮展开;HTML 版结构相同并带表格与状态色块。README 明确:邮件里不带跳转链接,信息全在正文。

长任务进度通报

默认 progressEveryMs = 2400000(40 分钟):单轮超过该时长先发一封进度邮件(主题形如 [DSH] 工作继续 · deep · 已进行 40 分 20 秒),仅在 agent running 时计时;回合收尾后撤定时器,不与结束邮件冲突。设为 0 可关闭。正式结束邮件仍会发送完整结论。

失败通知

turn/end 的 reason.kind === 'error' 或 agent/error 视为失败;跳过静默窗口和 minTurnMs,约 3 秒内发送,已攒批次并入同一封。主题点名原因,例如 [DSH] 工作失败 · deep · 额度或余额不足。用户或父会话中断(aborted)默认不发,需 notifyOnAbort=true。

每个对话单独设置

新对话会弹卡片选择:即时(默认)、攒批(停手 10 分钟)、更安静(停手 30 分钟且每小时最多一封)、本对话不发。选择写入 $DSH_HOME/qq-mail-notify-sessions.json。也可通过工具读写当前对话:

qq_mail_notify action=session
qq_mail_notify action=session idleDelayMs=180000
qq_mail_notify action=session enabled=false

可选:审批邮件

approvalMailEnabled 默认 false;开启后工具等待授权时可发邮件,回信「允许」/「拒绝」——须同时安装 dsh-mail-command。

安装与启用

任选一种方式安装,装完重启 DeepSeek Harness(关开即可;若装了 dsh-restart-yashua 可用侧栏重启按钮)。desktop 为桌面端常见 profile 名,web 端用 ~/.dsh/profiles/ 下你自己的目录名。

从 GitHub:

dsh plugin --profile desktop add github:<owner>/dsh-qq-mail-notify

本地目录(开发或自改):

dsh plugin --profile desktop add link:/path/to/dsh-qq-mail-notify

从 npm(若已发布):

dsh plugin --profile desktop add dsh-qq-mail-notify

依赖会出现在 ~/.dsh/profiles/<profile>/package.json 的 dependencies;卸载则删除对应条目并重装依赖。

首次进新对话可能弹卡片询问通知方式;若不想被问,可预先在 $DSH_HOME/qq-mail-notify.json 写好 user、authCode、to。

配置与典型用法

QQ 邮箱授权码在网页版「设置 → 账户 → POP3/IMAP/SMTP…」开启 SMTP 后获取,不是登录密码。QQ 发件地址且未改主机时默认 smtp.qq.com:465(隐式 TLS)。

在会话里让 agent 调用 qq_mail_notify 工具:

action=configure, user=123456@qq.com, authCode=<授权码>, to=接收邮箱@qq.com
action=test
action=status
action=send

配置写入 $DSH_HOME/qq-mail-notify.json,优先于 cordis.patch.yml 中的空值;patch 里非空字段可压过文件。也支持环境变量 DSH_QQ_MAIL_USER、DSH_QQ_MAIL_AUTH_CODE、DSH_QQ_MAIL_TO 等。优先级:会话覆盖 > Config(patch)> json 文件 > 环境变量 > 默认。

常用字段(节选,完整表见 README):

字段 默认 说明
idleDelayMs 0 停手后延迟发信;0 为即时
progressEveryMs 2400000 长任务进度间隔;0 关闭
enabled true 总开关
quietHours 空 免打扰,如 23:30-07:30

界面路径:设置 → 邮件通知,与 action=configure 写同一文件,保存后即时生效。另有同源 API:GET /dsh-qq-mail-notify/status、POST /dsh-qq-mail-notify/config、POST /dsh-qq-mail-notify/test。

本地自检(不联网、不需真实授权码):

node scripts/selfcheck.mjs

适用场景与注意

适合:长时间 agent 任务、需要离开屏幕但仍要知道「这一轮是否结束、失败原因、工具与 Token 概况」的 DSH 用户;已用 QQ 邮箱或 README 列出的可推断域名时配置成本最低。

注意:

  1. 插件在当前 DSH 进程权限下运行,SMTP 凭据落在 $DSH_HOME;安装前请自行查看源码与 MIT 许可证,确认可接受凭据存储方式。
  2. 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属;DSH 生态是「一切皆插件」,本文仅介绍该插件能力,不代官方背书。
  3. 发信失败只记 [qq-mail] 日志并重试一次,不会破坏回合;排障可用 scripts/probe-smtp.mjs 探测 QQ SMTP 握手(不认证、不发信)。

结尾

dsh-qq-mail-notify 把「工作真正结束」和「失败、长任务进度」绑到邮箱通道上,摘要来自会话事件,默认即时发送、可按对话攒批或免打扰。需要双向回信或审批时,可搭配 dsh-mail-command。

  • 目录页:https://www.skillhub.cn/plugins/yashua233/dsh-qq-mail-notify
  • GitHub:https://github.com/yashua233/dsh-qq-mail-notify
羽毛球分组比赛记分
小程序二维码

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

Xiaoye