前言¶
在 DeepSeek Harness(DSH)里处理邮箱,常见做法是直接让模型连 IMAP 或写脚本批量删信。读和写混在同一条路径里时,一次误判就可能永久丢信;凭证也常散落在对话或明文文件里。下面介绍社区插件 dsh-plugin-mail-triage:先做只读增量扫描与规则/可选本地模型分类,产出报告和带内容哈希的 manifest,经显式审批后再 MOVE 到 Trash——插件代码里不包含 expunge,读写工具也分属不同代码路径。
这是什么¶
dsh-plugin-mail-triage 由维护者 wth373737 发布,分类为 工作流。它面向 DSH 宿主环境,提供 IMAP 邮件分拣与安全清理:只读增量扫描、硬保护规则层、可选本地 Ollama 分类、Markdown 分拣报告与哈希 manifest、审批卡片,最后才将候选邮件移入废纸篓。
- 目录页:https://www.skillhub.cn/plugins/wth373737/dsh-plugin-mail-triage
- 源码:https://github.com/wth373737/dsh-plugin-mail-triage
- 许可证:MIT © 2026 wth373737(资料中版本 1.0.2)
处理流水线¶
官方 README 用下面这条链路概括整体行为;首次运行只读、打标签,邮箱里不会有任何改动。
IMAP (incremental, metadata + a short body snippet)
→ hard-protection rule layer (OTP, invoices, attachments, phishing, school/official, sent, whitelist)
→ optional local Ollama classification
→ green (delete candidate) / yellow (needs review) / red (never auto-deleted)
→ Markdown triage report + local label list
→ manifest with a content hash
→ approval card
→ MOVE to the Trash mailbox
→ audit log
规则层在实现上只能保护,不会单独产生删除动作;低置信度、模型 schema 无效、超时或缺少模型时,邮件落入 yellow 待人工复核。
核心工具¶
插件通过 Cordis 暴露一组工具,读写权限分开:
| 工具 | 访问 | 用途 |
|---|---|---|
mail_triage_accounts |
metadata | list、import_thunderbird、set_secret、test、remove |
mail_triage_scan |
只读 | 增量扫描、规则、本地模型、报告 |
mail_triage_review |
本地 | 读取 yellow 队列 / 记录裁决 |
mail_triage_plan |
只读 | 构建删除列表与 manifest |
mail_triage_apply |
写 | 审批通过后移入 Trash |
mail_triage_audit |
只读 | 审计日志、报告、manifest |
依赖仅为纯 JavaScript 的 imapflow(^2.10.0),由 pnpm 安装。运行环境要求 Node >= 22.5(DSH 捆绑的运行时满足;更旧宿主会直接加载失败而非降级)。
凭证与 Thunderbird¶
不必手敲邮箱密码:插件在本地解密 Thunderbird 配置(key4.db + logins.json),用 node:sqlite 与 node:crypto 完成,无 Python、无 NSS DLL、无原生模块;解密结果写入 DSH Host 凭证存储,不上传,也不在工作区写明文。若宿主没有 credential 服务,保存密钥会失败并说明原因,不会退回到文件。
Gmail 若 Thunderbird 的 Google 授权无法刷新,资料建议用 set_secret 保存 16 位应用专用密码。OAuth 过期时需在 Thunderbird 重新登录后再执行 import_thunderbird。
安装与启用¶
在 DSH 界面打开 Plugins → + Add plugin,填入仓库标识:
github:wth373737/dsh-plugin-mail-triage
安装前请自行查看 GitHub 源码与 MIT 许可证;插件以当前 dsh 进程权限 运行,能访问的环境与凭证范围取决于宿主配置。
修改插件代码后,Host 可能仍缓存旧模块:在 Plugins 面板 关闭再打开 该插件即可加载新代码,无需整进程重启。
典型用法(按工具顺序)¶
下面步骤对应 README 中的工具划分,可在对话里让 Harness 依次调用(具体提示语因会话而异,以工具名与参数为准)。
- 账户:用
mail_triage_accounts的import_thunderbird导入账户,或list/test校验;必要时set_secret。注意:set_secret与import_thunderbird时输入的主密码会进入对话 transcript,已有 Thunderbird 密码时优先import_thunderbird。 - 扫描:调用只读工具
mail_triage_scan做增量 IMAP 扫描(默认只扫 INBOX,可配置;子文件夹默认不展开)。 - 复核:对 yellow 队列用
mail_triage_review查看并记录 verdicts。 - 计划:
mail_triage_plan生成删除列表与带内容哈希的 manifest(执行前会再次校验哈希)。 - 审批与执行:在 DSH 侧完成 approval card 后,才用写工具
mail_triage_apply将邮件 MOVE 到\Trash;若无法解析 Trash 邮箱,插件拒绝执行而非猜测路径。 - 审计:用
mail_triage_audit查看 audit、报告与 manifest。
工作区状态落在 .mail-triage/:config.json、state.json(游标)、labels.jsonl、verdicts.jsonl、audit.jsonl、manifests/、reports/,均为明文,可自行检查或删除。1.0.2 之前构建若留下 .mail-triage/secrets.json,下次运行 mail_triage_accounts 会尝试迁入凭证存储并删除该文件;服务不可达则保留文件并提示手工删除。
代码层安全约束(资料原文要点)¶
- OTP、发票、钓鱼、附件、官方/学术/个人、已发送/草稿等类别 不会自动删除。
- 删除仅为 MOVE 到 Trash;每次移动写入审计。
- 密码与 OAuth 只存在于 Host credential store;无 credential 服务则拒绝存读,不写明文文件到报告旁。
适用场景与限制¶
适合:希望在 DSH 工作流里做邮箱减负,且能接受「先报告、后审批、再移 Trash」、并愿意用 Thunderbird 或 Host 凭证管理账户的开发者。
已知限制(摘自 README):
- 非 UTF-8 正文(如 windows-1256)在摘要里可能乱码,分类仍可进行。
- 头块超过 8 KB 时可能二次拉取正文;仍不可用则摘要为空。
- Gmail / OAuth 相关问题见上文凭证节。
- 离线冒烟测试:
npm test(规则、决策矩阵、schema、解码、store、报告等)。
SkillHub 上的社区目录与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件是其中一条 工作流 向的邮件清理路径。
结尾¶
dsh-plugin-mail-triage 把 IMAP 分拣拆成只读扫描、规则与可选本地模型、显式审批和 Trash 移动四段,读写分离且无 expunge,状态与审计落在工作区 .mail-triage/。进一步了解可打开 SkillHub 目录页 与 GitHub 仓库;简体中文说明见仓库内 README.zh.md。