0.5.0 —— 窗格加固的静默失效,与第一次「真起窗口」的测试
下载
| 文件 | 大小 | 说明 |
|---|---|---|
DSH.Multi-Instance-Setup-0.5.0.exe |
111.5 MB | 安装包(NSIS):可选安装目录、建快捷方式 |
DSH.Multi-Instance-0.5.0-x64.zip |
152.9 MB | 免安装:解压即用 |
需要 Windows 10 / 11(x64)。软件不捆绑 dsh,也不会在后台偷偷下载任何东西 ——
装完在界面里点「下载实例」,或接你已有的 DSH。
这一版修掉了一个「静默失效」
每个窗格的分区加固,从加进来那天起就没执行过。 这不是新引入的 bug,是这几版一直带着的。
main.js 里注册 will-attach-webview(负责给每个窗格的分区设 UA、装权限处理器)时,
挂在了 type === 'webview' 的内容上。但这个事件是在宿主窗口上触发的 ——
中间那句早退 if (type !== 'webview') return 恰好把唯一的宿主挡在门外,
于是处理器永远注册不上,hardenSession() 一次都没被调用过。
证据(修复前,npm run smoke 抓到的实际请求头)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
dsh-multi-instance/0.4.0 Chrome/144.0.7559.236 Electron/40.10.2 Safari/537.36
这段 UA 本该被 setUserAgent(chromeUA()) 换成一支干净的 Chrome UA,实际没有。
日志里也从来搜不到 webview 挂载 partition= 那一行。
影响:每个窗格的浏览器会话都没做过 UA 与权限加固;被嵌页面能直接从 UA 读到
Electron 与本应用的名字、版本(指纹信息),而「壳子在 DSH 眼里就是一个普通浏览器」
这个前提是落空的。
修复后同一条断言由红转绿,UA 变为 … Chrome/152.0.7977.130 Safari/537.36。
另外加了一条护栏:今后只要出现「窗格报到了却没有挂载记录」,主日志里就会有
[guard] 窗格(实例 xxx)已挂载但没走 will-attach-webview … —— 这类失效不能再沉默。
新增:npm run smoke(窗口级冒烟测试)
这一版的第二件事,是让上面这类 bug 测得到。
此前仓库里的 57 条测试全是纯逻辑(配置读写、地址解析、CLI 参数),
它们能在任何无头环境里跑,代价是窗口里的东西一条都测不到 —— 而本项目的坑恰好大多长在窗口里。
npm run smoke 补的正是这一半:脚本自己在本机起一个「假 DSH」页面,
用一套测试配置起一次真应用,断言点落在**「那个页面确实被请求了」**上 ——
这是端到端证据,不是「配置文件里写了什么」这种间接指标。
- 30 条断言(
--scene=pane|empty|tile三种场景),覆盖:
Electron 版本对齐、userData 落点隔离、渲染层 boot、窗口显示、webview 挂载与加载、
每格独立partition、端到端请求、窗格发出的 UA、截图非空白、致命错误与退出码 - 不需要网络、不需要真的 DSH、不需要任何凭据,也不碰你真实的配置(userData 指向临时目录)
- 能直接验打包产物:
node tools/smoke.js --exe="dist/win-unpacked/DSH Multi-Instance.exe"
——「源码能跑」和「发出去的那个 exe 能跑」是两件事 - CI 新增
smoke (windows)job,失败时把.tmp/smoke传成 artifact 留档
其它修复
一次操作只占一个备份槽。 主进程保存状态时会把 panes / ui / collapsed 分三笔写,
原先每笔都轮转备份 ⇒ 三个备份槽被同一次拖动内部的中间态占满,
「给你留 3 份」实际只剩「回退一次拖动」的粒度。加了 3 秒轮转冷却后,
3 份备份真的对应最近 3 次操作。
依赖与仓库
- electron
40.10.2→44.4.3(Chromium 144 → 152)。这是用npm run smoke三个场景实测过的,
不是「dependabot 说没冲突」那种证据。 actions/setup-nodev4 → v7。CONTRIBUTING/SECURITY/CODE_OF_CONDUCT三份原先只有中文的文档,顶部各加一段英文指引
(明确以中文为准,并指向英文 README)—— 此前 README 中英双语而这三份不是,英文读者只能猜。
没有仓促机翻三份长文档:说清现状比糊一份译文更诚实。
怎么自己复核(不用信上面的字)
git clone https://github.com/BOWLUNA/dsh-multi-instance.git
cd dsh-multi-instance
npm install
npm test # 57 条纯逻辑
npm run smoke # 30 条窗口级,本机起真应用想让冒烟测试打印出它到底验证了什么,加 --keep,现场留在 .tmp/smoke/
(含截图 smoke.png 与主进程完整日志)。
npm 上仍然是 0.0.1 占位包,可用版本还没发上去 —— 请用上面的 Release 产物,或从源码跑。
MIT License · 本项目是独立的第三方外壳,与 DeepSeek 官方无隶属关系。
它不改 ~/.dsh 下的任何凭证文件,也不捆绑、不自动下载 dsh。