前言¶
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
装完重启一次生效。发一封测试通知,确认能收到且末尾带口令,再回复试一次。
典型用法¶
- 确认
dsh-qq-mail-notify已配置并能收到通知。 - 任务因额度等原因停住、或你想远程改方向时,在手机上回复最近那封通知邮件;主题保留
[CONT:...],正文写继续、停止,或写完整的新要求。 - 需要排障时:
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 并打码授权码与完整邮箱。