v0.3.5 — 修「裸名 spec ⇒ 加载失败」+ R1–R7 宿主崩溃兜底
★ 为什么必须发这一版:
v0.3.4的src/lib用的是裸名
import ... from 'cordis'/import z from 'schemastery'——
而宿主(DSH 本体与$DSH_HOME/profiles/node_modules两处)只提供 scoped
⇒ ★★ 实测:import('cordis')⇒MODULE_NOT_FOUND·import('@deepseek-ai/cordis')⇒ OK
⇒ 即:装了可能不激活。
一 · 装法
# ① 先下载到本地(★ `dsh plugin add <远程 tgz URL>` 实测失败 —— pnpm 走网络报 TLS 错)
curl -fsSL --ssl-no-revoke -o /tmp/spi.tgz \
https://github.com/yjh051108/dsh-super-injector/releases/download/v0.3.5/dsh-external-dsh-super-injector-0.3.5.tgz
# ② 再 add 本地文件
dsh plugin --profile <你的 profile> add /tmp/spi.tgz二 · 这一版修了什么(逐条带读数)
| # | 修复 | 读数(证据) |
|---|---|---|
| 1 | ★★★ 裸名 spec ⇒ scoped(核 16 处) | src/index.ts:import 值位 1 + 类型位 4 + import z 4 · link_pkg 2 · CLIENT_EXTERNALS 1 · 本包 peer 键 2 · ★ 生成模板 3(否则新插件继承这个病)⇒ 改后 from 'cordis' = 0 · from 'schemastery' = 0 ✅
|
| 2 | ★★ package.json 的 peer 键
| cordis/schemastery ⇒ @deepseek-ai/cordis/@deepseek-ai/schemastery · 裸键 = 0 ✅
|
| 3 | ★ version 对齐 tag
| 0.3.4 ⇒ 0.3.5(否则 tag 与包内版本不符 —— 今晚核出过两处这种)
|
| 4 | ★★ R1 未处理 rejection 常驻兜底(委托方 #1 痛点) | self-heal.log 里 rejection-shield ×43 · 唯一逃逸是故意的探针
|
| 5 | ★★ R7 工具边界有界交接(二次吊死案底) | handoff( ×7 · 内层只盖住"dispose 旧 fiber → 重建 fiber",而 import / 取锁 / findEntry 原在网外
|
| 6 | ★ R2 逃逸回执 / R3 两步式注册 / R4 slot 全集 51 / R5 bundles 防重 / R6 不是每个 client 都要注册 slot | 见 CHANGELOG.md
|
| 7 | ★★★ 发布面脱敏(构建机绝对路径) | tsdown 会把 bundle 的依赖写成 //#region C:/Users/<构建机用户名>/…/node_modules/… 这类注释、并在 .map 的 sources 里写同样路径 ⇒ 把构建机用户名带进发布件。prepare.mjs 现在构建后把它换成 <HOME>/ 并复核为 0,再跑 node --check(证明没改坏)⇒ 替换 22 处 · 产物 Eldwen = 0 · <HOME>/ = 11 ✅
|
判据(我实测 · 不是抄的):
① 源已修 ⇒ 远端 `src/index.ts`:from 'cordis' = 0 · from 'schemastery' = 0 ✅
② version==tag ⇒ `package.json` 的 version = 0.3.5 = tag 去掉 v ✅
③ 非 spec 不变 ⇒ `git diff` 的【非 spec 增删行 = 0】(逐行核过)✅
④ 构建产物 ⇒ `node scripts/prepare.mjs` ⇒ exit=0 · **裸名 = 0** · **`Eldwen` = 0** · `node --check` exit=0 ✅
⑤ ★★ 可复现 ⇒ **从【干净 clone】跑 `prepare` ⇒ 构建 + 脱敏 都成功**(证明"资产能从仓重建")✅
⑥ 安全闸 ⇒ `check-public-safe = 干净(无阻塞级)` ✅
三 · 已知限制(诚实)
① ★★★ **本包 `lib/` 【不入 git】**(`.gitignore` 有 `lib/`)
⇒ ★★ **所以 tag 指着的 commit 里【没有 `lib/`】** —— 本页附件是**由 `prepare` 构建产出**的
⇒ ★ 后果:**"资产能从 tag 的源码重建"这个性质【在这里不成立】** ——
**复现要跑 `node scripts/prepare.mjs`(纯 node · 不需要 DSH 源码检出)** ✅
② ★★ **"进了 `dsh.profile.bundles`" ≠ "真激活"**
—— "激活"的判据是入口真能 `import()`(loader 的 `_init()` 拿 `insert.name` 去 `import()`)
③ ⚠️ **`dsh plugin add <远程 tgz URL>` 实测失败**(pnpm TLS)⇒ 必须**先下载再 add 本地文件**
④ ★ **peer 依赖要由宿主的依赖闭包提供** —— 而 `$DSH_HOME/profiles/node_modules` 是
**DSH【启动时】**按已选 bundles 铺的 ⇒ **一个从没启动过的 `DSH_HOME` 里 `import` 会缺 peer**
(**那不是包的问题**)
⑤ ⚠️ **本机 `D:\dsh\super-injector`(开发目录)的 `lib/` 是【旧构建】**(09-15)
⇒ **别用它当"产物对不对"的参照** —— 要用本页附件或自己 `prepare` 一次 ✅
四 · 版本关系
★ `package.json` 的 `version` = **`0.3.5`** = 本 Release 的 tag(去 `v`)✅
★ **`v0.3.4` 不撤**(撤会让指向它的 URL 立刻 404 · 而它下载 8 ⇒ 有人在用)
⇒ ★ **但它的 `lib` 有裸名** ⇒ **建议升级到本版** ✅