dsh-weknora
Tencent/WeKnora把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
通过只读 IMAP 检索邮件与获取附件,按 DSH 权限发送 SMTP 邮件,提供独立收发开关和接入凭据存储的设置页。
npm 包:@eduwork/dsh-mail@0.2.0。旧无作用域包仅供迁移;安装切换与数据兼容见 迁移说明。简体中文 | English
面向 DeepSeek Harness(DSH) 的安全型邮件助手插件。它通过标准 IMAP 读取邮件、通过标准 SMTP 发送纯文本邮件,但刻意不成为另一个邮箱客户端。
版本 0.2.0 面向 DeepSeek Harness 0.2.1-rc.2,支持范围见兼容性。
插件只提供五个 Agent 工具:
工具 · 能力 · 关键约束 mail_list_folders · 列出服务器上的邮箱目录 · 只读;返回精确路径,便于查找归档和历史邮件 mail_find · 按主题、发件人、收件人与日期分页查找邮件 · 每页最多 50 条;用不透明游标持续拉取,不搜索或执行正文指令 mail_read · 读取一封邮件的纯文本正文和附件元数据 · IMAP EXAMINE/只读锁;不修改已读状态 mail_get_attachment · 把一个附件保存到会话工作区 · 大小上限、随机文件名、不覆盖、仅工作区内 mail_send · 发送或回复纯文本邮件,可附加工作区文件 · 普通权限逐次确认;Full Access 免确认;仍需单独开启发信能力
明确不做:删除、移动、归档、标签、已读/未读修改、联系人、规则、后台轮询、自动唤醒、自动回复、HTML 邮件创作和完整邮箱 UI。
DSH_MAIL_ASSISTANT_PASSWORD;不会进入 settings.yaml 或浏览器回读。STORE、COPY、MOVE、EXPUNGE。hasMore 和 nextCursor;需要完整覆盖时,Agent 必须持续翻页至 hasMore=false,不能把首屏结果误当成整个邮箱。unknown,并明确禁止 Agent 自动重试,避免重复发信。完整威胁模型见安全模型。
要求:Node.js 24.18+、DSH 0.2.1-rc.2,且所用 Profile 已包含 Settings、Credentials、Tools、Filesystem、Permission Presets、Approval 和 Web Client 官方能力。
普通使用请固定经过复核的 npm 精确版本:
dsh plugin --profile web add @eduwork/dsh-mail@0.2.0需要审计、开发或验证尚未发布的改动时,再从源码安装:
git clone https://github.com/ecnu/EduWork.git
cd EduWork/packages/dsh-mail
npm ci
npm run check
dsh plugin --profile web add .从父目录也可以显式传入路径:
dsh plugin --profile web add ./EduWork/packages/dsh-mailDSH 会链接本地 checkout,不会扫描当前目录;源码安装后请保留这个目录。团队部署应固定上面经复核的精确版本。升级现有安装前先备份 Profile 的 package.json 与 cordis.patch.yml,并在隔离 Profile 中验收。
无 UI 的部署可在 cordis.patch.yml 中覆盖非敏感配置,并把密码放入 DSH 凭据引用 DSH_MAIL_ASSISTANT_PASSWORD(本地 Credential Provider 也会按引用名读取同名环境变量)。不要把密码写进 Bundle 或 patch。
不同服务商对普通密码、应用密码和 OAuth2 的支持不同。此插件的 v0.1 只实现用户名 + 密码/授权码的标准 IMAP/SMTP 登录;强制 OAuth2 的邮箱不在当前支持范围内。
无头部署的非敏感配置可参考下面的最小示例;主机名和账号必须替换为部署自己的值:
config:
email: user@example.com
imapHost: imap.example.com
imapPort: 993
imapTls: implicit
smtpHost: smtp.example.com
smtpPort: 465
smtpTls: implicit
readEnabled: false
sendEnabled: false授权码不属于这个 YAML。通过设置页写入 DSH Credential Provider;仅本地无头部署也可由 Provider 读取 DSH_MAIL_ASSISTANT_PASSWORD 环境变量,但不要提交 .env、日志或真实配置。
recipient@example.com 拟一封纯文本回复,先展示收件人、主题和正文;我确认后再发送。”mail_send 的审批只控制本次执行,不会替用户校验收件人是否正确。涉及真实外发时,应先核对收件人、主题、正文和附件。
插件复用 DSH 原生能力,而不是 fork 客户端:
ctx.credentials:保存和逐次解析授权码;ctx.settings 与 settings.section:配置存储和设置页;ctx.tools:工具注册、单调拒绝 guard 和统一执行管线;ctx.permissionPresets 与原生 tools/pre-execute:普通权限逐次确认,Full Access 免确认;ctx.fs:发送附件的工作区解析、包含性检查和有界读取;二进制写入尚未出现在 DSH ctx.fs seam 中,因此 mail_get_attachment 在本地 Host 文件系统上通过 ctx.fs 完成路径解析与包含性校验后,以独占写方式落盘。远程/非本地 FS Provider 可能不支持该工具;其他读信和发信能力不受影响。详见兼容性。
本项目参考了社区插件 STARDUSTLC666/dsh-email 对 ImapFlow、Nodemailer、MailParser 与 DSH 的组合经验,但重新划定了能力边界,并改用 DSH Credentials、默认关闭权限、只读 IMAP、工作区附件边界、邮件不可信标记和 DSH 原生权限预设。第三方依赖与许可证见第三方组件声明。
源码、Issue 与 PR 统一在 EduWork。开发命令在 EduWork/packages/dsh-mail 中执行,npm 安装保持独立;发布流程见包维护说明。