插件的 HTTP 路由安全基线
四个插件此前只有终端面板有 Origin / Content-Type 防线,而 dsh-git 恰恰是
唯一有 commit / push / undo-commit 这类会改动用户仓库的写路由的插件。现在
四个都补齐,并加 test/plugin-http-baseline.test.js 跨仓库强制一致——连四份
originAllowed 的实现是否逐字相同都比。插件 pin 同步升级。
热更新装不满就不许扶正
_installPlugins 曾经是「一个插件装失败就 warn 一声接着装下一个」,漏出一个
隐蔽的洞:装失败的若正好是被用户关掉的插件,它不在激活 overlay 里,_verify
自检根本不加载它、照样通过、新内核被扶正;等用户哪天重新打开它并重启就秒退
黑屏,而事故和「更新内核」这个动作隔了好几天。_activationPatch 同理不再吞
异常。
_verify 改用 --port 0
与 DshService 的正式启动路径统一。原先父进程探端口再交给内核,中间有固有
时间差;Windows 上 Hyper-V / WSL2 / Docker 会动态预留大段端口,撞上就是
listen EACCES——v1.3.1 修的正是这个,留在这条路上意味着恰恰在那批机器上
内核热更新会反复自检失败。
清单校验与遗留清理
plugins.json 增加重复 entryId / packageName 校验(重复 entryId 与「和上游
撞名」同样导致内核秒退)和 packageName 形状校验(它会被摊进 path.join 再
交给递归 rmSync)。遗留插件清理改为记账(dsh 的 package.json 里的
dsDesktopPlugins),不再靠 dsh- 前缀猜——用户自己装的第三方 dsh-* 插件
以前会被当遗留删掉。registerDependency 版本变了要改写,不再停在旧号。
构建与发版闸门
package.json 新增 dshKernel.expected,prepare-kernel 核对本机全局 dsh 版本,
对不上直接中止:内核此前完全来自打包机的环境状态,同一个 commit 不同时间
打包可能装进不同内核。verify-plugin-pins 增加 tag 形状校验(原先只查是不是
软链,改成 #main 照样能过)。脚本取插件名改为「清单 ∩ dependencies」。
dist 解除联调前落标记文件,强杀导致 finally 不执行时由 install-plugin 与
plugins-status 提醒。拷贝插件时跳过 test/ 与 .github/。