dsh-mail-command: Reply via Email to Continue or Stop DSH Tasks

前言

DeepSeek Harness(DSH)里的 agent 跑长任务时,常见两种尴尬:额度用尽停在半路,充完值还得回到电脑前重新交代;或者任务明显跑偏,却只能等这一轮结束。邮件提醒只能「看一眼」,不能真正改运行状态。

dsh-mail-command 做的是收信侧:你在手机上回复通知邮件,带一次性口令校验通过后,任务可以继续、可以立刻停止,正文里还可以写新的要求。它不负责发信,必须和 dsh-qq-mail-notify 一起装;口令随通知邮件发出,单独安装本插件不会有任何效果。

这是什么

  • 仓库: yashua233/dsh-mail-command
  • 维护者: yashua233
  • 分类: 工作流(社区目录 SkillHub)
  • 当前插件版本(package.json): 1.3.17
  • 声明兼容的 DSH 版本: 0.2.1-rc.5(作者仅实测该版本,未写版本范围)
  • 许可证: MIT

两个插件通过 cordis 服务协作,代码上互不 import:通知插件发信并在邮件里挂上口令;本插件轮询 IMAP、校验口令后,把「继续 / 停止 / 自定义要求」注入 agent 队列。

核心功能

继续与停止

通知邮件末尾会说明可用指令。你直接回复该邮件,保留主题里的 [CONT:xxxxxxxx](8 位一次性口令),正文即指令:

你回的正文 结果
空 按原计划继续
继续 继续
停止 / stop / 取消 停止当前轮
继续,但把测试也跑一遍 继续,要求 = 整句原文
把 README 补完再提交 继续,要求 = 这句

引用区(> 开头的行、-----原始邮件----- 之后的内容)会自动剥掉,不会当成指令的一部分。

继续时,插件往 DSH 内部的 next-turn 队列追加消息并唤醒驱动,效果类似在界面里再发一条输入。停止时走 agent.cancel(),与界面点停止同一路径。

审批回信(可选,默认关)

在通知插件里打开 approvalMailEnabled 后,工具等待授权时会另发带独立口令的邮件。回信只认明确表态:允许 / 同意 / ok / 1 放行;拒绝 / no / 2 拒绝。认不出来按「没回」处理,超时交回界面。审批口令与「继续」口令分表存储,不会串。

收件节奏(三段自适应)

刚发通知时查得勤,越久越稀疏,超过 30 分钟暂停检测,下一封通知发出时再唤醒。可调字段见 $DSH_HOME/mail-command.json(或与 README 中表格一致):fastWindowMs、fastIntervalMs、slowIntervalMs、stopAfterMs。mail_command action=status 可查看当前档位。

安全

SMTP 发件人可伪造,因此不能只看 From。口令随主题发出、一次性、命中作废;同一会话在未回复前复用同一口令;存活默认 30 分钟(tokenTtlMs),每发一封通知重新计时。动作需同时满足:发件人在允许列表、口令存在且未用过且未过期。口令落盘于 $DSH_HOME/mail-command-tokens.json,DSH 重启后仍可用。

安装与启用

前置要求:必须先装 dsh-qq-mail-notify,并在其设置里配好发件邮箱与 SMTP 授权码;本插件复用同一份凭据。

建议两个一起装(desktop 换成你 ~/.dsh/profiles/ 下实际的 profile 名):

dsh plugin --profile desktop add github:yashua233/dsh-qq-mail-notify
dsh plugin --profile desktop add github:yashua233/dsh-mail-command

仅装本插件时,官方提供的命令为:

# 从 GitHub
dsh plugin --profile desktop add github:yashua233/dsh-mail-command

# 本地目录
dsh plugin --profile desktop add link:/path/to/dsh-mail-command

装完重启一次生效。发一封测试通知,确认能收到且末尾带口令,再回复试一次。

典型用法

  1. 确认 dsh-qq-mail-notify 已配置并能收到通知。
  2. 任务因额度等原因停住、或你想远程改方向时,在手机上回复最近那封通知邮件;主题保留 [CONT:...],正文写 继续、停止,或写完整的新要求。
  3. 需要排障时:
mail_command action=status
mail_command action=check

status 可看开关、IMAP、待用口令数、lastError;待用口令一直为 0 时,先确认通知插件已装且能取到 mailCommand 服务。

配置说明

邮箱凭据默认从 $DSH_HOME/qq-mail-notify.json 读取。本插件自有配置在 $DSH_HOME/mail-command.json:

字段 默认 说明
enabled true 总开关
traceImap false IMAP 过程打日志,排障用
tokenTtlMs 1800000 口令存活 30 分钟
host / port imap.qq.com / 993 未填时按 user 域名推断(QQ / 163 / Gmail 等)
user / authCode 取自通知插件 仅当要用另一个邮箱收信时单独填

旧配置项 intervalMs 已移除,无效。收件节奏以 fastWindowMs、fastIntervalMs、slowIntervalMs、stopAfterMs 为准。

适用场景与注意

适合谁:已经用 QQ 邮箱(或 README 支持的域名)做 DSH 通知、又希望离开电脑也能继续或叫停任务的用户。

依赖关系:通知插件可单独做纯提醒;本插件单独装等于空转。升级其中一个不必强制同步另一个,但功能上本插件离不开通知插件。

权限与信任:插件以当前 DSH 进程权限运行,继续指令会让 agent 按你的正文操作本机文件与工具。安装前建议阅读源码与 MIT 许可证,自行评估是否用于生产环境。

兼容性:作者只声明 0.2.1-rc.5。DSH 预览期可能有破坏性变更,其他版本需自行改 dsh.compatibility.dsh 后试装,行为不保证。

隐私(据 README):除连接你的 IMAP 外不联网;邮件正文解析后不落盘;仅口令与会话 id 写入本机 JSON,约 30 分钟后作废。

结尾

dsh-mail-command 把「看通知」延伸成「回邮件就能指挥任务」:继续、停止、或附带一句新需求,都建立在通知插件发出的口令之上。社区目录与 GitHub 如下,issue 请走仓库 Issues 并打码授权码与完整邮箱。

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

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

Xiaoye