github yjh051108/dsh-super-injector v0.3.5
v0.3.5 — 修「裸名 spec ⇒ 加载失败」+ 发布面脱敏 + R1–R7 兜底

one month ago

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` 有裸名** ⇒ **建议升级到本版** ✅

Don't miss a new dsh-super-injector release

NewReleases is sending notifications on new releases.