dsh-notify-email:DSH 任务与等待态的 SMTP 邮件通知

前言

跑 DeepSeek Harness(DSH)时,agent 可能在后台长时间执行,或在 ask_user_question、工具授权处挂起等你操作。若人不在终端前,很容易错过回合结束或待办。常见做法是另开监控脚本或第三方推送,SMTP 邮件则往往还要单独装库、把授权码写进配置文件。下面介绍社区插件 dsh-notify-email(维护者 HeIIoAgain):在任务结束、等待回答或授权时自动发信,并提供 send_email 工具与附件能力;实现上只用 Node 内置模块,无额外运行时依赖。

这是什么

dsh-notify-email 是面向 DeepSeek Harness 的 Cordis 插件,分类为联网工具。它通过 SMTP 把提醒和摘要发到你的邮箱,并注册 send_email 供 agent 主动发信。SMTP 密码不进 YAML,而是独立文件或环境变量,每次发送实时读取。

核心功能

触发方式 说明
send_email 工具 你对 agent 说「把结果发我邮箱」,或定时任务到点后由 agent 调用;可带附件
等待回答时 出现需要你选择或补充信息时自动发提醒(notifyOnQuestion,默认开启)
等待授权时 工具权限确认挂起时自动发提醒(notifyOnApproval,默认开启)
回合结束摘要(可选) notifyOnTurnEnd: true 时,每轮结束把最终回复摘要发到邮箱

自动通知为 fire-and-forget,不阻塞 DSH 流程;发送失败只写 Host 日志,不影响任务。

附件方面:支持 multipart/mixed、中文文件名(RFC 2231),按扩展名推断 Content-Type;默认单文件 ≤ 20MB、每封 ≤ 10 个,可通过 maxAttachmentBytes、maxAttachments 调整。自动提醒(提问 / 授权 / 回合结束)不带附件。

安装与启用

需要 Node.js ≥ 22 和可用的 DSH(插件开发时基于 @deepseek-ai/dsh 0.2.1)。安装命令以仓库 README 为准:

# 从 npm(发布后)
dsh plugin --profile web add dsh-notify-email

# 从 GitHub(commit 固定,推荐)
dsh plugin --profile web add github:HeIIoAgain/dsh-notify-email#<commit-sha>

# 本地目录(开发调试)
dsh plugin --profile web add link:/path/to/dsh-notify-email

安装后插件会加入该 profile 的 dsh.profile.bundles。把 web 换成你实际使用的 profile 名即可。

配置

配置写在 profile 的 patch 层($DSH_HOME/profiles/<profile>/cordis.patch.yml)。config 按 id 覆盖时需写全所需字段:

- id: notify-email
  name: 'dsh-notify-email'
  config:
    smtpHost: smtp.qq.com
    smtpPort: 465
    secure: true
    user: you@qq.com          # 发件邮箱(= SMTP 登录账号)
    from: you@qq.com          # 发件人地址,一般与 user 相同
    to: you@qq.com            # 收件邮箱,多个用逗号分隔
    subjectPrefix: ''         # 标题前缀,留空则不加
    notifyOnQuestion: true
    notifyOnApproval: true
    notifyOnTurnEnd: false

发件地址必须与 SMTP 登录账号一致,否则 QQ / 163 等常见邮箱会拒信;收件地址可以是任意邮箱。

授权码

SMTP 密码不要写进 YAML。推荐独立文件(改完无需重启 DSH):

mkdir -p ~/.dsh/notify-email
printf '%s' '你的SMTP授权码' > ~/.dsh/notify-email/password
chmod 600 ~/.dsh/notify-email/password

也可用 passwordFile 指定路径,或在启动 dsh 前 export DSH_SMTP_PASSWORD(对应配置项 passwordEnv)。

常见邮箱参数(节选)

邮箱 smtpHost 端口 / secure 密码
QQ smtp.qq.com 465 / true 开启 SMTP 后的授权码
163 smtp.163.com 465 / true 客户端授权码
Gmail smtp.gmail.com 465 / true(或 587 / false) 应用专用密码
Outlook / Microsoft 365 smtp.office365.com 587 / false 账户或应用密码

587 端口需 secure: false,插件会 STARTTLS;云环境一般不宜使用 25 端口。

典型用法

  1. 直接对 agent 说:「把刚才的结果发到我邮箱」 → 调用 send_email。
  2. 带附件:「把 report.pdf 和 run.log 作为附件发我邮箱」 → agent 传 attachments(绝对路径,或相对会话工作目录)。
  3. 定时:用 DSH 自带 schedule_create 建提醒,prompt 写明「把结果发到邮箱」,到点触发的回合里 agent 会调 send_email。
  4. 每轮结束都要摘要:将 notifyOnTurnEnd 设为 true。
  5. 自动通知未触发时诊断:将 debugLog 设为 true,日志写入 $DSH_HOME/notify-email/debug.log。

适用场景与注意

适合需要「手机邮箱收 DSH 待办」、又不想为 SMTP 再拉一堆 npm 依赖的开发者。插件以当前 dsh 进程权限 运行,附件路径由调用方给出;安装前请阅读 GitHub 源码 与 MIT 许可证,自行评估敏感内容经邮箱服务商转发的风险。插件未声明 Config schema,DSH 设置面板不渲染表单,配置走 patch + 授权码文件是预期行为。

若出现 535 authentication failed,优先核对:客户端授权码、SMTP 已开启、from/user 一致、授权码未过期。user 或 to 为空时自动通知不会注册;手动 send_email 能发而自动提醒不能发时,可对照 README 中的 waterfall 事件说明排查。

结尾

dsh-notify-email 把 DSH 的等待态与可选回合摘要接到任意 SMTP 邮箱,并用零依赖 SMTP 客户端支持 send_email 与附件。社区目录页:SkillHub - dsh-notify-email;源码与完整配置表:GitHub - HeIIoAgain/dsh-notify-email。

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

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

小夜