@eduwork/dsh-mail 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.en.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  [简体中文](CHANGELOG.md) | **English**
4
4
 
5
+ ## 0.2.0 — 2026-10-19
6
+
7
+ - Require DSH 0.2.1-rc.2 or a compatible 0.2.x stable Host; use the official configForms settings surface in standalone builds.
8
+ - Include the locale-service integration and scoped session/permission compatibility fixes already used by EduWork.
9
+ - Preserve disabled-by-default reading/sending, read-only IMAP, credential references and per-send approval.
10
+
5
11
  ## 0.1.1 - 2026-09-11
6
12
 
7
13
  - Added exact peer support for official DeepSeek Harness `0.1.5-rc.1` and accepted the Tool/Agent, Session, Permission Presets, Filesystem, Credentials, Settings, and Web Client seams.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  **简体中文** | [English](CHANGELOG.en.md)
4
4
 
5
+ ## 0.2.0 — 2026-10-19
6
+
7
+ - 最低宿主升级为 DSH 0.2.1-rc.2,兼容同一 API 系列的 0.2.x 正式版;独立设置页接入官方 configForms。
8
+ - 同步已在 EduWork 使用的语言服务、会话与权限兼容修正。
9
+ - 保留默认关闭的收发开关、只读 IMAP、凭据引用和逐次发信审批。
10
+
5
11
  ## 0.1.1 - 2026-09-11
6
12
 
7
13
  - 新增官方 DeepSeek Harness `0.1.5-rc.1` 的精确 peer 支持,并完成 Tool/Agent、Session、Permission Presets、Filesystem、Credentials、Settings 与 Web Client 接缝验收。
@@ -14,4 +14,4 @@ Participants must:
14
14
 
15
15
  Maintainers may edit, hide, reject, or remove contributions and may temporarily or permanently restrict participation when conduct threatens contributors or users. Measures should be proportionate and avoid exposing affected people or security-sensitive material.
16
16
 
17
- General conduct concerns may use an issue without personal information. For confidential harassment, threats, doxxing, or another incident, use GitHub [Private Vulnerability Reporting](https://github.com/freedomkk-qfeng/dsh-mail-assistant/security/advisories/new) and prefix the title with “Code of Conduct”.
17
+ General conduct concerns may use an issue without personal information. For confidential harassment, threats, doxxing, or another incident, use GitHub [Private Vulnerability Reporting](https://github.com/ecnu/EduWork/security/advisories/new) and prefix the title with “Code of Conduct”.
@@ -14,4 +14,4 @@
14
14
 
15
15
  当行为威胁贡献者或用户时,维护者可以编辑、隐藏、拒绝或删除贡献,也可以临时或永久限制参与。措施应适度,并避免暴露受影响者或安全敏感材料。
16
16
 
17
- 一般行为问题可以创建不含个人信息的 Issue。需要保密处理的骚扰、威胁、人肉搜索或其他事件,请使用 GitHub [Private Vulnerability Reporting](https://github.com/freedomkk-qfeng/dsh-mail-assistant/security/advisories/new),并在标题中标注“Code of Conduct”。
17
+ 一般行为问题可以创建不含个人信息的 Issue。需要保密处理的骚扰、威胁、人肉搜索或其他事件,请使用 GitHub [Private Vulnerability Reporting](https://github.com/ecnu/EduWork/security/advisories/new),并在标题中标注“Code of Conduct”。
package/MAINTAINERS.en.md CHANGED
@@ -8,6 +8,6 @@
8
8
  | Security maintainer | [@freedomkk-qfeng](https://github.com/freedomkk-qfeng) | None (recruiting) | Current sole maintainer |
9
9
  | Release manager | [@freedomkk-qfeng](https://github.com/freedomkk-qfeng) | None (recruiting) | Current sole maintainer |
10
10
 
11
- One maintainer currently holds these responsibilities; no backup exists yet. Use [GitHub Private Vulnerability Reporting](https://github.com/freedomkk-qfeng/dsh-mail-assistant/security/advisories/new) for confidential security reports and [GitHub Issues](https://github.com/freedomkk-qfeng/dsh-mail-assistant/issues) for release-recovery requests that contain no sensitive information. Recruiting at least one backup able to handle private reports and release recovery remains a maintenance recommendation and roadmap item. Until then, the project does not claim backup coverage or institutional support. Credential, send-authorization, workspace-boundary, and release-workflow changes should receive independent review whenever possible.
11
+ One maintainer currently holds these responsibilities; no backup exists yet. Use [GitHub Private Vulnerability Reporting](https://github.com/ecnu/EduWork/security/advisories/new) for confidential security reports and [GitHub Issues](https://github.com/ecnu/EduWork/issues) for release-recovery requests that contain no sensitive information. Recruiting at least one backup able to handle private reports and release recovery remains a maintenance recommendation and roadmap item. Until then, the project does not claim backup coverage or institutional support. Credential, send-authorization, workspace-boundary, and release-workflow changes should receive independent review whenever possible.
12
12
 
13
13
  Role responsibilities and review thresholds are defined in [Governance](GOVERNANCE.en.md).
package/MAINTAINERS.md CHANGED
@@ -8,6 +8,6 @@
8
8
  | 安全维护者 | [@freedomkk-qfeng](https://github.com/freedomkk-qfeng) | 无(待招募) | 当前唯一维护者 |
9
9
  | 发布经理 | [@freedomkk-qfeng](https://github.com/freedomkk-qfeng) | 无(待招募) | 当前唯一维护者 |
10
10
 
11
- 项目目前由一名维护者承担上述职责,尚无替补。私密安全报告请使用 [GitHub Private Vulnerability Reporting](https://github.com/freedomkk-qfeng/dsh-mail-assistant/security/advisories/new);不含敏感信息的发布恢复请求请使用 [GitHub Issues](https://github.com/freedomkk-qfeng/dsh-mail-assistant/issues)。招募至少一名能够处理私密报告和发布恢复的替补是维护建议与待办;在此之前,不宣称已具备替补能力或机构支持。邮件凭据、发信授权、工作区边界和发布工作流的变更应尽可能获得独立复核。
11
+ 项目目前由一名维护者承担上述职责,尚无替补。私密安全报告请使用 [GitHub Private Vulnerability Reporting](https://github.com/ecnu/EduWork/security/advisories/new);不含敏感信息的发布恢复请求请使用 [GitHub Issues](https://github.com/ecnu/EduWork/issues)。招募至少一名能够处理私密报告和发布恢复的替补是维护建议与待办;在此之前,不宣称已具备替补能力或机构支持。邮件凭据、发信授权、工作区边界和发布工作流的变更应尽可能获得独立复核。
12
12
 
13
13
  角色职责和审查门槛见[治理规则](GOVERNANCE.md)。
package/README.md CHANGED
@@ -1,12 +1,12 @@
1
- # dsh-mail-assistant
1
+ # DSH Mail Assistant
2
2
 
3
- > npm 包:`@eduwork/dsh-mail@0.1.1`。旧无作用域包仅供迁移;安装切换与数据兼容见 [迁移说明](docs/EDUWORK-MIGRATION.md)。
3
+ > npm 包:`@eduwork/dsh-mail@0.2.0`。旧无作用域包仅供迁移;安装切换与数据兼容见 [迁移说明](docs/EDUWORK-MIGRATION.md)。
4
4
 
5
- **简体中文** | [English](README.en.md)
5
+ **简体中文** | [English](README_EN.md)
6
6
 
7
7
  面向 [DeepSeek Harness(DSH)](https://github.com/deepseek-ai/deepseek-harness) 的安全型邮件助手插件。它通过标准 IMAP 读取邮件、通过标准 SMTP 发送纯文本邮件,但刻意不成为另一个邮箱客户端。
8
8
 
9
- 当前版本:`0.1.1`,按 DeepSeek Harness `0.1.5-rc.1` 的公开接口和实际运行时完成兼容复核。连接重要邮箱前仍应完成组织自己的安全与合规审查,完整支持矩阵见[兼容性](docs/compatibility.md)。
9
+ 版本 `0.2.0` 面向 DeepSeek Harness `0.2.1-rc.2`,支持范围见[兼容性](docs/compatibility.md)。
10
10
 
11
11
  ## 定位与边界
12
12
 
@@ -37,19 +37,19 @@
37
37
 
38
38
  ## 安装
39
39
 
40
- 要求:Node.js 22+、DSH `0.1.5-rc.1`,且所用 Profile 已包含 Settings、Credentials、Tools、Filesystem、Permission Presets、Approval 和 Web Client 官方能力。
40
+ 要求:Node.js 24.18+、DSH `0.2.1-rc.2`,且所用 Profile 已包含 Settings、Credentials、Tools、Filesystem、Permission Presets、Approval 和 Web Client 官方能力。
41
41
 
42
42
  普通使用请固定经过复核的 npm 精确版本:
43
43
 
44
44
  ```bash
45
- dsh plugin --profile web add @eduwork/dsh-mail@0.1.1
45
+ dsh plugin --profile web add @eduwork/dsh-mail@0.2.0
46
46
  ```
47
47
 
48
48
  需要审计、开发或验证尚未发布的改动时,再从源码安装:
49
49
 
50
50
  ```bash
51
- git clone https://github.com/freedomkk-qfeng/dsh-mail-assistant.git
52
- cd dsh-mail-assistant
51
+ git clone https://github.com/ecnu/EduWork.git
52
+ cd EduWork/packages/dsh-mail
53
53
  npm ci
54
54
  npm run check
55
55
  dsh plugin --profile web add .
@@ -58,7 +58,7 @@ dsh plugin --profile web add .
58
58
  从父目录也可以显式传入路径:
59
59
 
60
60
  ```bash
61
- dsh plugin --profile web add ./dsh-mail-assistant
61
+ dsh plugin --profile web add ./EduWork/packages/dsh-mail
62
62
  ```
63
63
 
64
64
  DSH 会链接本地 checkout,不会扫描当前目录;源码安装后请保留这个目录。团队部署应固定上面经复核的精确版本。升级现有安装前先备份 Profile 的 `package.json` 与 `cordis.patch.yml`,并在隔离 Profile 中验收。
@@ -116,10 +116,6 @@ config:
116
116
 
117
117
  二进制写入尚未出现在 DSH `ctx.fs` seam 中,因此 `mail_get_attachment` 在本地 Host 文件系统上通过 `ctx.fs` 完成路径解析与包含性校验后,以独占写方式落盘。远程/非本地 FS Provider 可能不支持该工具;其他读信和发信能力不受影响。详见[兼容性](docs/compatibility.md)。
118
118
 
119
- ## 维护者发布
120
-
121
- 发布前必须完成[公开发布检查表](docs/release-checklist.md)。`Release package` 工作流默认只检查、打包并生成 SHA-256;只有在 npm Trusted Publisher 的仓库、工作流和 Environment 绑定已现场验证后,才能启用 OIDC 发布。否则应从已复核的冻结包使用 npm CLI 与浏览器 2FA 发布,不保存长期 Token。
122
-
123
119
  ## 文档
124
120
 
125
121
  - [快速接入](docs/getting-started.md)
@@ -140,3 +136,5 @@ config:
140
136
  ## License
141
137
 
142
138
  [MIT](LICENSE)
139
+
140
+ 源码、Issue 与 PR 统一在 [EduWork](https://github.com/ecnu/EduWork/tree/main/packages/dsh-mail)。开发命令在 `EduWork/packages/dsh-mail` 中执行,npm 安装保持独立;发布流程见[包维护说明](https://github.com/ecnu/EduWork/blob/main/docs/PACKAGES.md)。
@@ -1,12 +1,12 @@
1
- # dsh-mail-assistant
1
+ # DSH Mail Assistant
2
2
 
3
- > npm package: `@eduwork/dsh-mail@0.1.1`. The previous unscoped package is retained only for migration. See [migration and data compatibility](docs/EDUWORK-MIGRATION.en.md).
3
+ > npm package: `@eduwork/dsh-mail@0.2.0`. The previous unscoped package is retained only for migration. See [migration and data compatibility](docs/EDUWORK-MIGRATION.en.md).
4
4
 
5
5
  [简体中文](README.md) | **English**
6
6
 
7
7
  A security-focused mail assistant plugin for [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness). It reads through standard IMAP and sends through standard SMTP, while deliberately refusing to become another full mail client.
8
8
 
9
- Current version: `0.1.1`, reviewed against the public interfaces and an actual runtime of DeepSeek Harness `0.1.5-rc.1`. Complete your own security and compliance review before connecting a critical mailbox. See [compatibility](docs/compatibility.en.md) for the full support matrix.
9
+ Current version: `0.2.0`, reviewed against the public interfaces and an actual runtime of DeepSeek Harness `0.2.1-rc.2`. Complete your own security and compliance review before connecting a critical mailbox. See [compatibility](docs/compatibility.en.md) for the full support matrix.
10
10
 
11
11
  ## Scope
12
12
 
@@ -37,19 +37,19 @@ See the complete [security model](docs/security-model.en.md).
37
37
 
38
38
  ## Install
39
39
 
40
- Prerequisites: Node.js 22+, DSH `0.1.5-rc.1`, and a Profile with the official Settings, Credentials, Tools, Filesystem, Permission Presets, Approval, and Web Client capabilities.
40
+ Prerequisites: Node.js 24.18+, DSH `0.2.1-rc.2`, and a Profile with the official Settings, Credentials, Tools, Filesystem, Permission Presets, Approval, and Web Client capabilities.
41
41
 
42
42
  For normal use, pin the reviewed exact npm version:
43
43
 
44
44
  ```bash
45
- dsh plugin --profile web add @eduwork/dsh-mail@0.1.1
45
+ dsh plugin --profile web add @eduwork/dsh-mail@0.2.0
46
46
  ```
47
47
 
48
48
  Use a source checkout for auditing, development, or unpublished changes:
49
49
 
50
50
  ```bash
51
- git clone https://github.com/freedomkk-qfeng/dsh-mail-assistant.git
52
- cd dsh-mail-assistant
51
+ git clone https://github.com/ecnu/EduWork.git
52
+ cd EduWork/packages/dsh-mail
53
53
  npm ci
54
54
  npm run check
55
55
  dsh plugin --profile web add .
@@ -58,7 +58,7 @@ dsh plugin --profile web add .
58
58
  From the parent directory:
59
59
 
60
60
  ```bash
61
- dsh plugin --profile web add ./dsh-mail-assistant
61
+ dsh plugin --profile web add ./EduWork/packages/dsh-mail
62
62
  ```
63
63
 
64
64
  DSH links the checkout; it does not scan the invoking directory. Keep a source checkout in place. Team deployments should pin the reviewed exact version shown above. Before upgrading an existing installation, back up the Profile's `package.json` and `cordis.patch.yml`, then accept the upgrade in an isolated Profile.
@@ -100,11 +100,7 @@ Approval for `mail_send` controls one execution; it does not validate the recipi
100
100
 
101
101
  The plugin uses official DSH seams: `ctx.credentials`, `ctx.settings`, `settings.section`, `ctx.tools`, `ctx.permissionPresets`, `tools/pre-execute`, `ctx.fs`, and the Client Loader. Ordinary permissions route sends through the composed Approval service; Full Access proceeds without a prompt. It does not fork the upstream Web client.
102
102
 
103
- DSH `0.1.5-rc.1` has bounded binary reads but no binary-write filesystem seam. `mail_get_attachment` therefore uses `ctx.fs` to resolve and fence the local destination before an exclusive local write. A remote/non-local FS Provider may not support that one tool. See [compatibility](docs/compatibility.en.md).
104
-
105
- ## Maintainer release
106
-
107
- Complete the [public release checklist](docs/release-checklist.en.md) before publishing. The `Release package` workflow checks, packs, and emits SHA-256 metadata by default. Enable OIDC publishing only after verifying the npm Trusted Publisher repository, workflow, and Environment binding. Otherwise publish the reviewed frozen artifact with the npm CLI and browser 2FA, without storing a long-lived token.
103
+ DSH `0.2.1-rc.2` has bounded binary reads but no binary-write filesystem seam. `mail_get_attachment` therefore uses `ctx.fs` to resolve and fence the local destination before an exclusive local write. A remote/non-local FS Provider may not support that one tool. See [compatibility](docs/compatibility.en.md).
108
104
 
109
105
  ## Documentation
110
106
 
@@ -124,3 +120,5 @@ The integration approach was informed by the MIT-licensed community project [`ST
124
120
  ## License
125
121
 
126
122
  [MIT](LICENSE)
123
+
124
+ Source, issues and PRs are maintained in [EduWork](https://github.com/ecnu/EduWork/tree/main/packages/dsh-mail). Run development commands from `EduWork/packages/dsh-mail`. npm installation remains independent. See [package publication](https://github.com/ecnu/EduWork/blob/main/docs/PACKAGES_EN.md).
package/SECURITY.en.md CHANGED
@@ -4,6 +4,6 @@
4
4
 
5
5
  `@eduwork/dsh-mail@0.1.1` has completed code review, automated tests, and no-network runtime acceptance against DeepSeek Harness `0.1.5-rc.1`. Complete your organization's own security, compliance, and recovery review before connecting a critical mailbox.
6
6
 
7
- Do not open a public issue for authorization bypass, credential disclosure, workspace escape, unexpected message mutation, approval bypass, duplicate sending, or remote-code-execution risk. Use GitHub [Private Vulnerability Reporting](https://github.com/freedomkk-qfeng/dsh-mail-assistant/security/advisories/new).
7
+ Do not open a public issue for authorization bypass, credential disclosure, workspace escape, unexpected message mutation, approval bypass, duplicate sending, or remote-code-execution risk. Use GitHub [Private Vulnerability Reporting](https://github.com/ecnu/EduWork/security/advisories/new).
8
8
 
9
9
  Include only minimal reproduction steps, affected versions, and sanitized protocol facts. Never attach real app passwords, cookies, full messages, personal addresses, or unsanitized diagnostics. High-impact outbound, credential, and workspace-boundary issues receive priority, although the project promises no fixed SLA.
package/SECURITY.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  `@eduwork/dsh-mail@0.1.1` 已面向 DeepSeek Harness `0.1.5-rc.1` 完成代码、自动化测试和无网络运行时验收。连接重要邮箱前,仍应完成组织自己的安全、合规与恢复方案审查。
6
6
 
7
- 如发现授权绕过、凭据泄露、工作区逃逸、邮件状态意外修改、审批绕过、重复发信或远程代码执行风险,请不要公开 issue。请通过 GitHub [Private Vulnerability Reporting](https://github.com/freedomkk-qfeng/dsh-mail-assistant/security/advisories/new) 私密报告。
7
+ 如发现授权绕过、凭据泄露、工作区逃逸、邮件状态意外修改、审批绕过、重复发信或远程代码执行风险,请不要公开 issue。请通过 GitHub [Private Vulnerability Reporting](https://github.com/ecnu/EduWork/security/advisories/new) 私密报告。
8
8
 
9
9
  报告请只包含最小复现步骤、受影响版本和脱敏后的协议事实。不要附上真实授权码、Cookie、完整邮件、个人地址或未清理的诊断包。
10
10
 
package/SUPPORT.en.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [简体中文](SUPPORT.md) | **English**
4
4
 
5
- Use [GitHub Issues](https://github.com/freedomkk-qfeng/dsh-mail-assistant/issues) for normal installation, compatibility, and protocol questions. Vulnerabilities, app passwords, real messages, and private server information must use the private process in the [security policy](SECURITY.en.md).
5
+ Use [GitHub Issues](https://github.com/ecnu/EduWork/issues) for normal installation, compatibility, and protocol questions. Vulnerabilities, app passwords, real messages, and private server information must use the private process in the [security policy](SECURITY.en.md).
6
6
 
7
7
  For an ordinary defect include:
8
8
 
package/SUPPORT.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **简体中文** | [English](SUPPORT.en.md)
4
4
 
5
- 普通安装、兼容性和协议问题请使用 [GitHub Issues](https://github.com/freedomkk-qfeng/dsh-mail-assistant/issues)。漏洞、授权码、真实邮件或私有服务器信息必须走[安全政策](SECURITY.md)规定的私密流程。
5
+ 普通安装、兼容性和协议问题请使用 [GitHub Issues](https://github.com/ecnu/EduWork/issues)。漏洞、授权码、真实邮件或私有服务器信息必须走[安全政策](SECURITY.md)规定的私密流程。
6
6
 
7
7
  普通缺陷报告请提供:
8
8
 
@@ -13,3 +13,5 @@
13
13
  The project was informed by the MIT-licensed integration approach in [`STARDUSTLC666/dsh-email`](https://github.com/STARDUSTLC666/dsh-email), but redesigns the permission, credential, read-only IMAP, workspace, untrusted-content, and approval boundaries. No third-party project endorses this plugin.
14
14
 
15
15
  Exact direct and transitive versions are recorded in `package-lock.json`. Review the lockfile, license-check output, and final npm tarball before every public release.
16
+
17
+ The development-only official DSH Host includes LibreOffice Kit (MPL-2.0) and sharp/libvips native packages (Apache-2.0 / LGPL-3.0-or-later). They are not bundled in the mail plugin archive; their license files remain with their own packages.
@@ -13,3 +13,5 @@
13
13
  项目参考了 MIT 许可的社区项目 [`STARDUSTLC666/dsh-email`](https://github.com/STARDUSTLC666/dsh-email) 在 ImapFlow、Nodemailer、MailParser 与 DSH 之间的组合思路,但重新设计了权限、凭据、只读 IMAP、工作区、邮件不可信内容和审批边界。没有任何第三方项目为本插件背书。
14
14
 
15
15
  直接和间接依赖的精确版本记录在 `package-lock.json`。每次公开发布前必须重新审查锁文件、许可证检查结果和最终 npm tarball。
16
+
17
+ 仅开发使用的官方 DSH Host 包含 LibreOffice Kit(MPL-2.0)与 sharp/libvips 原生包(Apache-2.0 / LGPL-3.0-or-later)。它们不打入邮件插件压缩包,许可证随各自的包保留。
@@ -2,12 +2,12 @@
2
2
 
3
3
  [简体中文](EDUWORK-MIGRATION.md) | **English**
4
4
 
5
- Starting with `0.1.0`, the npm package is `@eduwork/dsh-mail`, replacing `dsh-mail-assistant`. The current installation example pins `0.1.1`. The GitHub repository and checkout directory remain `dsh-mail-assistant`. Consult the npm registry for actual publication status.
5
+ Starting with `0.1.0`, the npm package is `@eduwork/dsh-mail`, replacing `dsh-mail-assistant`. The current installation example pins `0.2.0`. Source is maintained under `EduWork/packages/dsh-mail`.
6
6
 
7
7
  ## Installation and migration
8
8
 
9
9
  ```sh
10
- dsh plugin --profile web add @eduwork/dsh-mail@0.1.1
10
+ dsh plugin --profile web add @eduwork/dsh-mail@0.2.0
11
11
  ```
12
12
 
13
13
  Back up an existing Profile's package.json and cordis.patch.yml, then update its dependency and dsh.profile.bundles entries. Update module name paths in custom patches too. Do not enable both package identities together; restart the Host after switching. These are separate npm packages, so updating the old package cannot migrate an installation automatically.
@@ -17,7 +17,3 @@ Back up an existing Profile's package.json and cordis.patch.yml, then update its
17
17
  Keep the Host export name, row id, settings namespace and security scope using `dsh-mail-assistant`, as well as `DSH_MAIL_ASSISTANT_PASSWORD` and `.dsh-mail-assistant/attachments`. The Client ModuleLoader uses the new package name.
18
18
 
19
19
  Storage directories and user configuration content do not change. Product-managed Profiles migrate their owned dependencies through the product upgrader; community plugins remain unchanged.
20
-
21
- ## Release scope
22
-
23
- `0.1.0` was the first stable scoped package; `0.1.1` updates the release baseline to DSH `0.1.5-rc.1`. Migration does not change the settings namespace, Credential Ref, or attachment directory. Release acceptance does not claim sign-in to any institutional account or real mail delivery. Previous packages remain installable with their migration notice.
@@ -2,12 +2,12 @@
2
2
 
3
3
  **简体中文** | [English](EDUWORK-MIGRATION.en.md)
4
4
 
5
- 从 `0.1.0` 起,npm 包使用 `@eduwork/dsh-mail`,替代旧的 `dsh-mail-assistant`。当前安装示例固定为 `0.1.1`;GitHub 仓库和本地 checkout 目录继续使用 `dsh-mail-assistant`。包的实际发布状态以 npm registry 为准。
5
+ 从 `0.1.0` 起,npm 包使用 `@eduwork/dsh-mail`,替代旧的 `dsh-mail-assistant`。当前安装示例固定为 `0.2.0`。源码位于 EduWork 的 `packages/dsh-mail`。
6
6
 
7
7
  ## 安装与迁移
8
8
 
9
9
  ```sh
10
- dsh plugin --profile web add @eduwork/dsh-mail@0.1.1
10
+ dsh plugin --profile web add @eduwork/dsh-mail@0.2.0
11
11
  ```
12
12
 
13
13
  已有 Profile 先备份 package.json 与 cordis.patch.yml,再更新依赖和 dsh.profile.bundles;手写 patch 的模块路径 name 也需切换。不要同时启用新旧两份插件,切换后重启 Host。旧版本和新作用域版本是不同 npm 包,旧包的更新不会自动迁移安装。
@@ -17,7 +17,3 @@ dsh plugin --profile web add @eduwork/dsh-mail@0.1.1
17
17
  保留 Host 导出名、插件行 id、settings namespace 和安全作用域中的 `dsh-mail-assistant`,保留 `DSH_MAIL_ASSISTANT_PASSWORD` 与 `.dsh-mail-assistant/attachments`;客户端 ModuleLoader 使用新包名。
18
18
 
19
19
  本次迁移不修改存储目录或用户配置内容。产品管理的 Profile 由产品升级逻辑迁移其受管依赖;社区插件保持原状。
20
-
21
- ## 发布范围
22
-
23
- `0.1.0` 是作用域包的首个稳定版本;`0.1.1` 将发布基线更新到 DSH `0.1.5-rc.1`。迁移不要求改动 settings namespace、Credential Ref 或附件目录。发布验收不宣称已完成任意机构账号登录或真实邮件投递;旧包保持可安装并保留迁移提示。
@@ -9,7 +9,7 @@
9
9
  ```text
10
10
  DSH Web Client
11
11
  └─ settings.section: Mail assistant
12
- ├─ settingsScope namespaced non-secret settings
12
+ ├─ configForms namespaced non-secret settings
13
13
  └─ remote.credentials write-only app password
14
14
 
15
15
  DSH Host
@@ -30,7 +30,7 @@ The plugin does not provide a Credential, Settings, Filesystem, Permission Prese
30
30
 
31
31
  Non-secret fields live in the `dsh-mail-assistant` settings namespace. The app password uses the fixed credential reference `DSH_MAIL_ASSISTANT_PASSWORD`. The Host resolves it at the beginning of every tool call and never caches it across operations, so rotation applies to the next call.
32
32
 
33
- The settings page reads and writes non-secret configuration through `settingsScope.bind({ namespace: 'dsh-mail-assistant' })`, using revision-fenced atomic mutations to avoid overwriting concurrent updates. For the app password it only invokes `credentials.describe/set/unset`: it can observe configured/writable state, but it cannot read the credential value back into the browser.
33
+ The settings page reads and writes non-secret configuration through `configForms.get('dsh-mail-assistant')`, using revision-fenced atomic mutations to avoid overwriting concurrent updates. For the app password it only invokes `credentials.describe/set/unset`: it can observe configured/writable state, but it cannot read the credential value back into the browser.
34
34
 
35
35
  ## Message identity and pagination
36
36
 
@@ -58,7 +58,7 @@ Outbound attachments use `ctx.fs`: resolve from the session `cwd`, verify contai
58
58
 
59
59
  The Host artifact embeds the IMAP/SMTP implementation libraries in `lib/index.js`. Users do not install a second protocol runtime after npm, source-package, or offline-product installation, and plugin dependencies cannot collide with a product's private Node runtime during updates.
60
60
 
61
- DSH `0.1.5-rc.1` does not expose `writeBytes`. Attachment download therefore requires a local Host filesystem. The plugin resolves the logical destination with `ctx.fs`, creates the directory, resolves real workspace and directory paths, rechecks containment to reject pre-existing symlinks or junctions, and finally performs a random-name `wx` exclusive write. Replace this local adapter when DSH provides an official binary-write seam.
61
+ DSH `0.2.1-rc.2` does not expose `writeBytes`. Attachment download therefore requires a local Host filesystem. The plugin resolves the logical destination with `ctx.fs`, creates the directory, resolves real workspace and directory paths, rechecks containment to reject pre-existing symlinks or junctions, and finally performs a random-name `wx` exclusive write. Replace this local adapter when DSH provides an official binary-write seam.
62
62
 
63
63
  ## Extension rules
64
64
 
@@ -9,7 +9,7 @@
9
9
  ```text
10
10
  DSH Web Client
11
11
  └─ settings.section: 邮件助手设置页
12
- ├─ settingsScope 绑定命名空间的非敏感配置
12
+ ├─ configForms 绑定命名空间的非敏感配置
13
13
  └─ remote.credentials 授权码只写
14
14
 
15
15
  DSH Host
@@ -30,7 +30,7 @@ DSH Host
30
30
 
31
31
  非敏感字段保存在 `dsh-mail-assistant` settings namespace。授权码使用固定 Credential Ref `DSH_MAIL_ASSISTANT_PASSWORD`。Host 在每个工具调用开始时重新解析引用,不跨操作缓存密码,因此轮换后的值会在下一次调用生效。
32
32
 
33
- 设置页通过 `settingsScope.bind({ namespace: 'dsh-mail-assistant' })` 读写非敏感配置,并使用 revision fence 的原子 mutation 避免覆盖并发更新。它对授权码只能调用 `credentials.describe/set/unset`:可看到“是否配置”和“是否可写”,不能读回实际值。
33
+ 设置页通过 `configForms.get('dsh-mail-assistant')` 读写非敏感配置,并使用 revision fence 的原子 mutation 避免覆盖并发更新。它对授权码只能调用 `credentials.describe/set/unset`:可看到“是否配置”和“是否可写”,不能读回实际值。
34
34
 
35
35
  ## 邮件标识
36
36
 
@@ -66,7 +66,7 @@ handle 用于完整性检查和防误用,不是授权令牌,也不包含密
66
66
 
67
67
  Host 产物会把 IMAP/SMTP 运行依赖编入 `lib/index.js`。因此通过 npm、源码包或产品离线装配安装后,终端用户都不需要再安装 Node 依赖;这也避免了插件依赖与宿主随版本更新的私有 Node 运行时互相覆盖。
68
68
 
69
- DSH `0.1.5-rc.1` 暂无 `writeBytes`。下载附件因此只在本地 Host FS 上可用:插件先用 `ctx.fs` 解析逻辑路径,创建目录后再解析工作区与目标目录的真实路径并重新验证包含关系,最后把随机文件名以 `wx` 独占模式写入。这样会拒绝预置符号链接或目录联接造成的工作区逃逸。未来官方提供二进制写 seam 后,应删除这段本地适配,直接复用官方能力。
69
+ DSH `0.2.1-rc.2` 暂无 `writeBytes`。下载附件因此只在本地 Host FS 上可用:插件先用 `ctx.fs` 解析逻辑路径,创建目录后再解析工作区与目标目录的真实路径并重新验证包含关系,最后把随机文件名以 `wx` 独占模式写入。这样会拒绝预置符号链接或目录联接造成的工作区逃逸。未来官方提供二进制写 seam 后,应删除这段本地适配,直接复用官方能力。
70
70
 
71
71
  ## 后续扩展规则
72
72
 
@@ -2,20 +2,19 @@
2
2
 
3
3
  [简体中文](compatibility.md) | **English**
4
4
 
5
- `@eduwork/dsh-mail@0.1.1` targets official DeepSeek Harness `0.1.5-rc.1` while retaining exact peer ranges for previously accepted baselines. See [migration](EDUWORK-MIGRATION.en.md) for the old unscoped package.
5
+ `@eduwork/dsh-mail@0.2.0` targets official DeepSeek Harness `0.2.1-rc.2` with peer range `>=0.2.1-rc.2 <0.3.0-0`; older DSH Hosts must keep the earlier plugin. See [migration](EDUWORK-MIGRATION.en.md) for the old unscoped package.
6
6
 
7
7
  ## Reviewed baseline
8
8
 
9
- - DeepSeek Harness `0.1.5-rc.1` (current release baseline);
10
- - DeepSeek Harness `0.1.2-rc.1`, `0.1.3-alpha.1`, `0.1.3-alpha.2`, and `0.1.5-alpha.1` (previously accepted compatibility baselines);
11
- - Node.js 22+;
9
+ - DeepSeek Harness `0.2.1-rc.2` (current release baseline);
10
+ - Node.js 24.18+;
12
11
  - dynamic Web Client Bundle;
13
12
  - local Host filesystem;
14
13
  - IMAP4rev1/IMAP4rev2 and SMTP Submission with username plus password/app-password authentication.
15
14
 
16
15
  The DSH Profile provides `settings`, `credentials`, `tools`, `permissionPresets`, `approval`, and `fs`. The settings page also depends on official Remotes, Renderer, and Settings Client packages. Ordinary sending requires an interactive approval path; Full Access does not prompt.
17
16
 
18
- DSH `0.1.5-rc.1` requires plugins to use the Agent explicitly from tool execution context. Mail reads the current session from each execution's `exec.agent`, uses `agent.session` for permission presets and workspace resolution, does not depend on a global Agent, does not create or resume Sessions, and does not use ordinary subprocess handles. The ToolRuntime, Permission Presets, Credentials, Settings, Renderer, and Settings Client seams are accepted.
17
+ DSH `0.2.1-rc.2` requires plugins to use the Agent explicitly from tool execution context. Mail reads the current session from each execution's `exec.agent`, uses `agent.session` for permission presets and workspace resolution, does not depend on a global Agent, does not create or resume Sessions, and does not use ordinary subprocess handles. The ToolRuntime, Permission Presets, Credentials, Settings, Renderer, and Settings Client seams are accepted.
19
18
 
20
19
  The official generic-file upload, Workspace Files, and `readByteRange()` can support future large-attachment improvements, but they cannot yet replace the Host binary write needed for IMAP downloads: `ctx.fs` still has no `writeBytes()`. This version therefore retains the local download adapter with workspace containment, real-path revalidation, and exclusive random filenames.
21
20
 
@@ -29,7 +28,7 @@ The official generic-file upload, Workspace Files, and `readByteRange()` can sup
29
28
 
30
29
  ## DSH binary-write limitation
31
30
 
32
- The current DSH `0.1.5-rc.1` release baseline exposes `ctx.fs.readBytes` but no `writeBytes`:
31
+ The current DSH `0.2.1-rc.2` release baseline exposes `ctx.fs.readBytes` but no `writeBytes`:
33
32
 
34
33
  - outbound local attachments use the official seam end to end;
35
34
  - downloads require `ctx.fs.processPath()` and the Host Node process to share one filesystem;
@@ -2,20 +2,19 @@
2
2
 
3
3
  **简体中文** | [English](compatibility.en.md)
4
4
 
5
- `@eduwork/dsh-mail@0.1.1` 面向官方 DeepSeek Harness `0.1.5-rc.1`,同时保留已验收旧基线的精确 peer 范围。旧无作用域包迁移见[迁移说明](EDUWORK-MIGRATION.md)。
5
+ `@eduwork/dsh-mail@0.2.0` 面向官方 DeepSeek Harness `0.2.1-rc.2`,使用有上下界的 peer 范围 `>=0.2.1-rc.2 <0.3.0-0`;旧 DSH 用户应继续使用旧插件。旧无作用域包迁移见[迁移说明](EDUWORK-MIGRATION.md)。
6
6
 
7
7
  ## 已验证基线
8
8
 
9
- - DeepSeek Harness `0.1.5-rc.1`(当前发布基线);
10
- - DeepSeek Harness `0.1.2-rc.1`、`0.1.3-alpha.1`、`0.1.3-alpha.2`、`0.1.5-alpha.1`(保留兼容的历史验收基线);
11
- - Node.js 22+;
9
+ - DeepSeek Harness `0.2.1-rc.2`(当前发布基线);
10
+ - Node.js 24.18+;
12
11
  - Web Client 动态 Bundle;
13
12
  - 本地 Host 文件系统;
14
13
  - IMAP4rev1/IMAP4rev2 服务器与 SMTP Submission 服务的用户名 + 密码/应用密码认证。
15
14
 
16
15
  插件依赖 DSH Profile 提供 `settings`、`credentials`、`tools`、`permissionPresets`、`approval` 和 `fs`。设置页还依赖官方 Web Client 的 Remotes、Renderer 与 Settings 插槽;普通权限下发信需要交互式审批通路,Full Access 下不会弹出审批。
17
16
 
18
- DSH `0.1.5-rc.1` 要求插件从工具执行上下文显式使用 Agent。Mail 从每次执行的 `exec.agent` 读取当前会话,通过 `agent.session` 获取权限预设和工作区,不依赖全局 Agent,不创建或恢复 Session,也不使用普通 subprocess handle。ToolRuntime、Permission Presets、Credentials、Settings、Renderer 和 Settings Client 接缝均已验收。
17
+ DSH `0.2.1-rc.2` 要求插件从工具执行上下文显式使用 Agent。Mail 从每次执行的 `exec.agent` 读取当前会话,通过 `agent.session` 获取权限预设和工作区,不依赖全局 Agent,不创建或恢复 Session,也不使用普通 subprocess handle。ToolRuntime、Permission Presets、Credentials、Settings、Renderer 和 Settings Client 接缝均已验收。
19
18
 
20
19
  官方通用文件上传、Workspace Files 和 `readByteRange()` 可供后续大附件体验复用,但当前不能替代 IMAP 下载所需的 Host 二进制写入:`ctx.fs` 仍没有 `writeBytes()`。因此本版本继续保留受工作区约束、重新校验真实路径并使用独占随机文件名的本地下载适配。
21
20
 
@@ -29,7 +28,7 @@ DSH `0.1.5-rc.1` 要求插件从工具执行上下文显式使用 Agent。Mail
29
28
 
30
29
  ## DSH 二进制写限制
31
30
 
32
- 当前发布基线 DSH `0.1.5-rc.1` 提供 `readBytes`,没有 `writeBytes`。因此:
31
+ 当前发布基线 DSH `0.2.1-rc.2` 提供 `readBytes`,没有 `writeBytes`。因此:
33
32
 
34
33
  - 发送本地附件可完整复用官方 seam;
35
34
  - 下载附件只能在 `ctx.fs.processPath()` 与 Host Node 进程指向同一文件系统时工作;插件会在创建目录后解析真实路径并再次验证工作区包含关系;
@@ -4,8 +4,8 @@
4
4
 
5
5
  ## Requirements
6
6
 
7
- - Node.js 22+;
8
- - DeepSeek Harness `0.1.5-rc.1`;
7
+ - Node.js 24.18+;
8
+ - DeepSeek Harness `0.2.1-rc.2`;
9
9
  - a Profile with Settings, Credentials, Tools, Filesystem, Permission Presets, Approval, and Web Client;
10
10
  - an IMAP/SMTP-enabled mailbox and provider-issued app password.
11
11
 
@@ -14,14 +14,14 @@
14
14
  For normal use, pin the reviewed exact npm version:
15
15
 
16
16
  ```bash
17
- dsh plugin --profile web add @eduwork/dsh-mail@0.1.1
17
+ dsh plugin --profile web add @eduwork/dsh-mail@0.2.0
18
18
  ```
19
19
 
20
20
  For auditing, development, or unpublished changes, use a source checkout:
21
21
 
22
22
  ```bash
23
- git clone https://github.com/freedomkk-qfeng/dsh-mail-assistant.git
24
- cd dsh-mail-assistant
23
+ git clone https://github.com/ecnu/EduWork.git
24
+ cd EduWork/packages/dsh-mail
25
25
  npm ci
26
26
  npm run check
27
27
  dsh plugin --profile web add .
@@ -63,10 +63,10 @@ npm ci
63
63
  npm run check
64
64
  ```
65
65
 
66
- To verify the real DSH `0.1.5-rc.1` contract, point `DSH_RUNTIME_ROOT` at a clean runtime of that exact version and run:
66
+ To verify the DSH `0.2.1-rc.2` API contract in the development lock, run:
67
67
 
68
68
  ```bash
69
- npm run accept:dsh-015-rc1
69
+ npm run check:dsh
70
70
  ```
71
71
 
72
- This uses a no-network delivery simulator to cover Agent-session, rejection, one-time approval, and Full Access paths without a real mailbox. Run real IMAP/SMTP interoperability only with a dedicated test account in an isolated Profile.
72
+ This checks public APIs and client settings integration. `npm test` uses synthetic data for permissions, attachments and mail parsing; it does not establish real mailbox delivery. Run real IMAP/SMTP interoperability only with a dedicated test account in an isolated Profile.
@@ -4,8 +4,8 @@
4
4
 
5
5
  ## 前置条件
6
6
 
7
- - Node.js 22+;
8
- - DeepSeek Harness `0.1.5-rc.1`;
7
+ - Node.js 24.18+;
8
+ - DeepSeek Harness `0.2.1-rc.2`;
9
9
  - Profile 中已经有 Settings、Credentials、Tools、Filesystem、Permission Presets、Approval 和 Web Client;
10
10
  - 一个开启了 IMAP/SMTP 的邮箱账号,以及邮箱服务商签发的客户端授权码或应用专用密码。
11
11
 
@@ -14,14 +14,14 @@
14
14
  普通使用固定经过复核的 npm 精确版本:
15
15
 
16
16
  ```bash
17
- dsh plugin --profile web add @eduwork/dsh-mail@0.1.1
17
+ dsh plugin --profile web add @eduwork/dsh-mail@0.2.0
18
18
  ```
19
19
 
20
20
  需要审计、开发或验证尚未发布的改动时,使用源码 checkout:
21
21
 
22
22
  ```bash
23
- git clone https://github.com/freedomkk-qfeng/dsh-mail-assistant.git
24
- cd dsh-mail-assistant
23
+ git clone https://github.com/ecnu/EduWork.git
24
+ cd EduWork/packages/dsh-mail
25
25
  npm ci
26
26
  npm run check
27
27
  dsh plugin --profile web add .
@@ -65,10 +65,10 @@ npm ci
65
65
  npm run check
66
66
  ```
67
67
 
68
- 要复核 DSH `0.1.5-rc.1` 的真实运行时契约,把 `DSH_RUNTIME_ROOT` 指向该版本的干净 Runtime 后运行:
68
+ 要复核开发锁中的 DSH `0.2.1-rc.2` API 契约,运行:
69
69
 
70
70
  ```bash
71
- npm run accept:dsh-015-rc1
71
+ npm run check:dsh
72
72
  ```
73
73
 
74
- 此验收使用无网络发送模拟器检查 Agent 会话、审批拒绝、单次允许与 Full Access 路径,不需要真实邮箱。真实 IMAP/SMTP 互操作只在专用测试账号和隔离 Profile 中执行。
74
+ 该检查核对公开 API 和客户端设置接入;`npm test` 使用合成数据覆盖权限、附件和邮件解析,不代表真实邮箱投递验收。真实 IMAP/SMTP 互操作只在专用测试账号和隔离 Profile 中执行。
@@ -1,53 +1,11 @@
1
- # Public release checklist
1
+ # Package release checklist
2
2
 
3
3
  [简体中文](release-checklist.md) | **English**
4
4
 
5
- A release pull request or release record captures the maintainer decision, date, command-output links, independent technical-review evidence, and exceptions. A sole maintainer owns publication during the project's initial stage; do not invent a second human approver who does not exist. Any applicable incomplete security or publication check blocks a stable release. Additional maintainers and multi-person review remain future governance goals.
5
+ Source and publication are maintained in EduWork. Follow [the shared package workflow](https://github.com/ecnu/EduWork/blob/main/docs/PACKAGES_EN.md); this package retains its independent npm name and SemVer.
6
6
 
7
- ## Authority and metadata
8
-
9
- - [ ] The current maintainer approved public release and the MIT license and recorded technical-review evidence and remaining risk.
10
- - [ ] GitHub repository, npm name, homepage, issues, and private security-report URLs are correct.
11
- - [ ] Version, changelog, compatibility, and install commands agree.
12
- - [ ] Chinese is the default language and every Markdown document has an English mirror with reciprocal entries.
13
- - [ ] Publishable history and content contain no real accounts, messages, app passwords, servers, personal paths, or unauthorized branding.
14
-
15
- ## Mail and authorization boundary
16
-
17
- - [ ] IMAP mailbox locks remain read-only; no `STORE`, `COPY`, `MOVE`, `EXPUNGE`, or flag mutation exists.
18
- - [ ] Reading and sending default off and remain independent.
19
- - [ ] `mail_send` enters DSH permission handling before credentials, attachments, or SMTP access.
20
- - [ ] Ordinary permissions ask per call; Full Access only skips that prompt and never enables sending.
21
- - [ ] Missing Agent sessions, rejection, cancellation, and unavailable approval channels fail closed.
22
- - [ ] Mail remains untrusted data and cannot authorize sending, request secrets, or change system policy.
23
- - [ ] Ambiguous SMTP DATA results return `unknown` and are never automatically retried.
24
-
25
- ## Credentials, transport, and attachments
26
-
27
- - [ ] App passwords only enter a DSH Credential Provider; the browser sees configuration state only.
28
- - [ ] Credentials are resolved for every call and not cached across operations.
29
- - [ ] Only implicit TLS or STARTTLS is accepted; certificate validation is fixed on and protocol logging is off.
30
- - [ ] Addresses reject CR/LF injection and body, message, and attachment limits are enforced.
31
- - [ ] Outbound attachments are regular files inside the current session workspace.
32
- - [ ] Downloaded attachments use random names, exclusive writes, and real-path containment; symlink/junction escape checks pass.
33
- - [ ] Source maps and normalized errors expose no credentials, message content, server responses, or personal paths.
34
-
35
- ## Functional acceptance
36
-
37
- - [ ] Run `npm run accept:dsh-015-rc1` against the exact current DSH version declared by the manifest, and confirm that the runtime contains no mixed older DSH packages.
38
- - [ ] `mail_list_folders` returns server folders without mutation.
39
- - [ ] `mail_find` covers both directions, pagination, dates, folders, stale UIDVALIDITY, and `hasMore=false`.
40
- - [ ] `mail_read` preserves unread state; truncation and HTML fallback match documentation.
41
- - [ ] `mail_get_attachment` works on local FS and fails clearly for a remote/non-shared Host path.
42
- - [ ] A real test mailbox covers ordinary approve/reject, Full Access send, and outside-workspace attachment rejection.
43
- - [ ] OAuth2, multiple accounts, Sent-copy behavior, and complex MIME limitations remain explicit.
44
-
45
- ## Supply chain and publication
46
-
47
- - [ ] Clean `npm ci` and `npm run check` pass on Windows and Linux with Node 22/24.
48
- - [ ] `npm audit`, CodeQL, direct/transitive licenses, and install scripts receive human review.
49
- - [ ] GitHub Actions use immutable commits; Dependabot and branch protection are active.
50
- - [ ] `npm pack --dry-run` and the extracted tarball contain only expected files; the Host bundle has no bare IMAP/SMTP imports.
51
- - [ ] Tag, release notes, tarball checksum, deprecation, and rollback are ready.
52
- - [ ] Enable OIDC/provenance only after verifying that npm Trusted Publishing is bound to this repository, `.github/workflows/release.yml`, and environment `npm`.
53
- - [ ] When Trusted Publishing is not verified, publish the reviewed frozen artifact with the npm CLI and browser 2FA; make no provenance claim and store no long-lived token.
7
+ - Review the changed behavior, version, changelog, compatibility and package lock.
8
+ - Run npm ci and npm run check in this package directory, plus relevant real Host or browser acceptance when behavior changes. Use synthetic test data.
9
+ - Inspect the actual tarball, public documentation, licenses and exported entries. Never ship credentials or user data.
10
+ - Select this package in packages-release.yml; publish=false only produces artifacts. Explicit publication runs from the matching package version tag, using the npm environment and this repository's trusted publisher.
11
+ - Verify registry bytes before updating a product lock. Publishing npm does not publish a desktop Release or deploy a client.