dsh-plugin-mail-triage:IMAP 邮件分拣与安全清理

前言

在 DeepSeek Harness(DSH)里处理邮箱,常见做法是直接让模型连 IMAP 或写脚本批量删信。读和写混在同一条路径里时,一次误判就可能永久丢信;凭证也常散落在对话或明文文件里。下面介绍社区插件 dsh-plugin-mail-triage:先做只读增量扫描与规则/可选本地模型分类,产出报告和带内容哈希的 manifest,经显式审批后再 MOVE 到 Trash——插件代码里不包含 expunge,读写工具也分属不同代码路径。

这是什么

dsh-plugin-mail-triage 由维护者 wth373737 发布,分类为 工作流。它面向 DSH 宿主环境,提供 IMAP 邮件分拣与安全清理:只读增量扫描、硬保护规则层、可选本地 Ollama 分类、Markdown 分拣报告与哈希 manifest、审批卡片,最后才将候选邮件移入废纸篓。

处理流水线

官方 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 依次调用(具体提示语因会话而异,以工具名与参数为准)。

  1. 账户:用 mail_triage_accounts 的 import_thunderbird 导入账户,或 list / test 校验;必要时 set_secret。注意:set_secret 与 import_thunderbird 时输入的主密码会进入对话 transcript,已有 Thunderbird 密码时优先 import_thunderbird。
  2. 扫描:调用只读工具 mail_triage_scan 做增量 IMAP 扫描(默认只扫 INBOX,可配置;子文件夹默认不展开)。
  3. 复核:对 yellow 队列用 mail_triage_review 查看并记录 verdicts。
  4. 计划:mail_triage_plan 生成删除列表与带内容哈希的 manifest(执行前会再次校验哈希)。
  5. 审批与执行:在 DSH 侧完成 approval card 后,才用写工具 mail_triage_apply 将邮件 MOVE 到 \Trash;若无法解析 Trash 邮箱,插件拒绝执行而非猜测路径。
  6. 审计:用 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。

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

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

小夜