Skip to content

0.3.0 —— 固定用户数据落点,补上无头测试

Choose a tag to compare

@BOWLUNA BOWLUNA released this 24 Sep 04:15
· 9 commits to main since this release

dsh-multi-instance 0.3.0

把 DeepSeek Harness(dsh)的 Web 界面装进一个多窗格桌面客户端:
多开多个实例、每个实例一个窗格、自由排布与缩放、每格独立浏览器会话。

这个版本修掉了一个会丢用户数据的缺陷,并给仓库补上了能无头运行的测试。

下载哪个

文件 说明
DSH.Multi-Instance-Setup-0.3.0.exe 安装包(NSIS)—— 可选安装目录,建桌面与开始菜单快捷方式
DSH.Multi-Instance-0.3.0-x64.zip 免安装包 —— 解压即用,不写注册表,适合放 U 盘

文件名里的点是 GitHub 上传时把空格换掉的(本地产物名里是空格)。

需要 Windows 10/11。软件不含 dsh —— 装完在界面里点「下载实例」,或者接你已有的 DSH。

修了什么(重要)

用户配置会在改名后静默丢失。 Electron 的 app.getPath('userData') 默认等于 <appData>/<应用名>,
而应用名在开发态取 package.json 的 name、在打包态取 productName —— 于是开发态落在
%APPDATA%\dsh-multi-instance\,打包版落在 %APPDATA%\DSH Multi-Instance\。
这个项目改过三次名字,每改一次,旧目录里的实例列表、窗格排布和 Partitions/(持久化的登录态)
就留在原地没人认领。

实测现场:%APPDATA%\dsh-shell\config.json 里有 1 个窗格和 14MB 的 Partitions,
而当时的落点目录里只剩一个 ui 键。

这个版本把落点钉死,并在启动时做一次旧目录迁移:只在当前目录没有窗格时才动手,
取窗格最多的那一份 config.json,连带 Partitions/ 一起接过来。幂等,跑过一次之后不会再动。

如果你装过 0.2.0 或更早:升级后实例会自动接回来,日志里会有一行
[appdata] 已从 <旧目录> 迁移: config.json, Partitions(窗格 N 个)。

新增

  • npm test:36 条零依赖、纯 Node、不需要图形界面的用例,覆盖落点解析与迁移的全部分支
    (含幂等、坏配置、不覆盖已有会话、失败不抛)、实例地址解析、npm 入口的运行时查找。
    原先仓库里只有要起真窗口的 --selftest*,CI / SSH / 容器里一条都跑不了 —— 上面那个缺陷就是这么漏过去的。
  • GitHub Actions:push 与 PR 时在 Windows + Linux 上跑测试、语法检查、以及
    package.json 与 CHANGELOG.md 的版本一致性检查。
  • CHANGELOG.md / SECURITY.md / CONTRIBUTING.md / issue 表单 / PR 模板。
  • tools/social-preview.py:生成 1280×640 的社交预览图(配色直接取 style.css 的纸色变量)。

文档修正

  • 删掉一条实测为假的说法:「构建路径不要含中文」。electron-builder 26.15.3 在含中文的路径下能正常打包 ——
    这两个产物就是在原地(路径含中文)打出来的。
  • README 中英双侧补齐:目录导航、npm test 一节、落点钉死与自动迁移的说明、
    「升级后实例列表空了」的排障条目、相关项目互链、CI 徽章。

校验

  • npm test → PASS passed=36 failed=0(exit code 0)
  • 产物:exe 是有效 PE(MZ + PE\0\0 签名);zip 79 个条目、testzip() 无损坏
  • 产物内 resources/app.asar 的 package.json version = 0.3.0,
    且确实含 src/main/appdata.js(APP_DIRNAME 常量与迁移函数都在)
  • 真实数据上跑过迁移:从 %APPDATA%\dsh-shell\ 迁出 config.json + Partitions(1 个窗格),
    第二次运行为 skip-target-ok

完整变更:CHANGELOG.md