From 4b1946ccb4b01398ccc239529a8dfbd1d3ab7771 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sat, 12 Sep 2026 11:36:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(dsh):=20=E8=A1=A5=E5=85=B1=E7=94=A8?= =?UTF-8?q?=E5=BA=93=E7=B1=BB=E5=9E=8B=E5=A3=B0=E6=98=8E=20+=20=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=89=8D=E5=BC=BA=E5=88=B6=E6=9E=84=E5=BB=BA=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20=E5=A0=B5=E4=BD=8F=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E4=BC=9A=E9=9D=99=E9=BB=98=E9=80=9A=E8=BF=87=E7=9A=84=E9=80=9A?= =?UTF-8?q?=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # 1. 缺 .d.ts 导致构建失败(上一提交引入) `lib/attachment-ids.js` 是上一提交新增的共用库,但没配 `.d.ts`。dsh 桥走 TypeScript 编译,于是: src/index.ts(65,40): error TS7016: Could not find a declaration file for module '../lib/attachment-ids.js' pi 与 opencode 不做类型检查,所以只有 dsh 会在这里红 —— 很容易被当成偶发放过。 补上声明,类型刻意写成 `unknown`:这个函数的全部意义就是接收**不可靠的输入**, 用 `string[]` 收窄签名会让人误以为调用方本来就该给对形状。 # 2. 测试从 dist/ 导入,却不先构建 → 可以测到改动前的旧产物 dsh 的测试有两类导入:`../lib/*.js`(直连源码)与 `../dist/index.js`(编译产物)。 test 脚本原本是纯 `node --test`,**不先构建**。于是「改 src → npm test 全绿」 完全可能只验证了旧 dist —— 实测就踩到了:提交前那次 361 通过跑的是改动前的产物, `lib` 本身有覆盖(attachment-ids.test.mjs 直连 lib),但**入口的接线没被测到**。 加 `pretest: tsc -p tsconfig.json`(npm 会在 test 前自动执行)。 反向验证:往 src 注入一个类型错误后 `npm test` **EXIT=2**(构建先失败), 而不是拿旧 dist 蒙过去;恢复后 361 通过 / 0 失败。 --- plugins/dsh-mail-bridge/lib/attachment-ids.d.ts | 13 +++++++++++++ plugins/dsh-mail-bridge/package.json | 1 + 2 files changed, 14 insertions(+) create mode 100644 plugins/dsh-mail-bridge/lib/attachment-ids.d.ts diff --git a/plugins/dsh-mail-bridge/lib/attachment-ids.d.ts b/plugins/dsh-mail-bridge/lib/attachment-ids.d.ts new file mode 100644 index 0000000..340f900 --- /dev/null +++ b/plugins/dsh-mail-bridge/lib/attachment-ids.d.ts @@ -0,0 +1,13 @@ +/** + * `attachment-ids.js` 的类型声明。 + * + * 为什么这个文件必须存在:dsh 桥走 TypeScript 编译(`tsc -p tsconfig.json`), + * 而 `lib/` 下每个共用模块都配了 `.d.ts`。缺了它,`import { normalizeAttachmentIDs } + * from '../lib/attachment-ids.js'` 会报 TS7016(隐式 any),**构建直接失败** —— + * pi 与 opencode 不做类型检查,所以只有 dsh 会在这里红,很容易被当成"偶发"放过。 + * + * 参数类型刻意写成 `unknown`:这个函数的全部意义就是接收**不可靠的输入** + * (模型可能给数组、JSON 字符串、单个 id、或混着 null 的数组), + * 用 `string[]` 之类收窄签名会让人误以为调用方本来就该给对形状。 + */ +export declare function normalizeAttachmentIDs(value: unknown): string[]; diff --git a/plugins/dsh-mail-bridge/package.json b/plugins/dsh-mail-bridge/package.json index 2990cc9..562df76 100644 --- a/plugins/dsh-mail-bridge/package.json +++ b/plugins/dsh-mail-bridge/package.json @@ -13,6 +13,7 @@ "scripts": { "build": "tsc", "verify": "tsc --noEmit", + "pretest": "tsc -p tsconfig.json", "test": "node --test 'test/*.test.mjs'" }, "peerDependencies": {